codika 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (403) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +68 -0
  3. package/dist/cli/commands/completion.d.ts +15 -0
  4. package/dist/cli/commands/completion.d.ts.map +1 -0
  5. package/dist/cli/commands/completion.js +810 -0
  6. package/dist/cli/commands/completion.js.map +1 -0
  7. package/dist/cli/commands/config/clear.d.ts +12 -0
  8. package/dist/cli/commands/config/clear.d.ts.map +1 -0
  9. package/dist/cli/commands/config/clear.js +35 -0
  10. package/dist/cli/commands/config/clear.js.map +1 -0
  11. package/dist/cli/commands/config/index.d.ts +15 -0
  12. package/dist/cli/commands/config/index.d.ts.map +1 -0
  13. package/dist/cli/commands/config/index.js +21 -0
  14. package/dist/cli/commands/config/index.js.map +1 -0
  15. package/dist/cli/commands/config/set.d.ts +41 -0
  16. package/dist/cli/commands/config/set.d.ts.map +1 -0
  17. package/dist/cli/commands/config/set.js +185 -0
  18. package/dist/cli/commands/config/set.js.map +1 -0
  19. package/dist/cli/commands/config/show.d.ts +12 -0
  20. package/dist/cli/commands/config/show.d.ts.map +1 -0
  21. package/dist/cli/commands/config/show.js +45 -0
  22. package/dist/cli/commands/config/show.js.map +1 -0
  23. package/dist/cli/commands/deploy/documents.d.ts +12 -0
  24. package/dist/cli/commands/deploy/documents.d.ts.map +1 -0
  25. package/dist/cli/commands/deploy/documents.js +217 -0
  26. package/dist/cli/commands/deploy/documents.js.map +1 -0
  27. package/dist/cli/commands/deploy/index.d.ts +14 -0
  28. package/dist/cli/commands/deploy/index.d.ts.map +1 -0
  29. package/dist/cli/commands/deploy/index.js +21 -0
  30. package/dist/cli/commands/deploy/index.js.map +1 -0
  31. package/dist/cli/commands/deploy/process-data-ingestion.d.ts +13 -0
  32. package/dist/cli/commands/deploy/process-data-ingestion.d.ts.map +1 -0
  33. package/dist/cli/commands/deploy/process-data-ingestion.js +226 -0
  34. package/dist/cli/commands/deploy/process-data-ingestion.js.map +1 -0
  35. package/dist/cli/commands/deploy/use-case.d.ts +9 -0
  36. package/dist/cli/commands/deploy/use-case.d.ts.map +1 -0
  37. package/dist/cli/commands/deploy/use-case.js +212 -0
  38. package/dist/cli/commands/deploy/use-case.js.map +1 -0
  39. package/dist/cli/commands/get/execution.d.ts +9 -0
  40. package/dist/cli/commands/get/execution.d.ts.map +1 -0
  41. package/dist/cli/commands/get/execution.js +159 -0
  42. package/dist/cli/commands/get/execution.js.map +1 -0
  43. package/dist/cli/commands/get/index.d.ts +13 -0
  44. package/dist/cli/commands/get/index.d.ts.map +1 -0
  45. package/dist/cli/commands/get/index.js +20 -0
  46. package/dist/cli/commands/get/index.js.map +1 -0
  47. package/dist/cli/commands/get/skills.d.ts +15 -0
  48. package/dist/cli/commands/get/skills.d.ts.map +1 -0
  49. package/dist/cli/commands/get/skills.js +135 -0
  50. package/dist/cli/commands/get/skills.js.map +1 -0
  51. package/dist/cli/commands/get/use-case.d.ts +9 -0
  52. package/dist/cli/commands/get/use-case.d.ts.map +1 -0
  53. package/dist/cli/commands/get/use-case.js +186 -0
  54. package/dist/cli/commands/get/use-case.js.map +1 -0
  55. package/dist/cli/commands/init.d.ts +14 -0
  56. package/dist/cli/commands/init.d.ts.map +1 -0
  57. package/dist/cli/commands/init.js +347 -0
  58. package/dist/cli/commands/init.js.map +1 -0
  59. package/dist/cli/commands/integration/delete.d.ts +13 -0
  60. package/dist/cli/commands/integration/delete.d.ts.map +1 -0
  61. package/dist/cli/commands/integration/delete.js +140 -0
  62. package/dist/cli/commands/integration/delete.js.map +1 -0
  63. package/dist/cli/commands/integration/index.d.ts +13 -0
  64. package/dist/cli/commands/integration/index.d.ts.map +1 -0
  65. package/dist/cli/commands/integration/index.js +20 -0
  66. package/dist/cli/commands/integration/index.js.map +1 -0
  67. package/dist/cli/commands/integration/list.d.ts +13 -0
  68. package/dist/cli/commands/integration/list.d.ts.map +1 -0
  69. package/dist/cli/commands/integration/list.js +129 -0
  70. package/dist/cli/commands/integration/list.js.map +1 -0
  71. package/dist/cli/commands/integration/set.d.ts +13 -0
  72. package/dist/cli/commands/integration/set.d.ts.map +1 -0
  73. package/dist/cli/commands/integration/set.js +253 -0
  74. package/dist/cli/commands/integration/set.js.map +1 -0
  75. package/dist/cli/commands/list/executions.d.ts +12 -0
  76. package/dist/cli/commands/list/executions.d.ts.map +1 -0
  77. package/dist/cli/commands/list/executions.js +168 -0
  78. package/dist/cli/commands/list/executions.js.map +1 -0
  79. package/dist/cli/commands/list/index.d.ts +11 -0
  80. package/dist/cli/commands/list/index.d.ts.map +1 -0
  81. package/dist/cli/commands/list/index.js +14 -0
  82. package/dist/cli/commands/list/index.js.map +1 -0
  83. package/dist/cli/commands/logout.d.ts +12 -0
  84. package/dist/cli/commands/logout.d.ts.map +1 -0
  85. package/dist/cli/commands/logout.js +58 -0
  86. package/dist/cli/commands/logout.js.map +1 -0
  87. package/dist/cli/commands/project/create.d.ts +8 -0
  88. package/dist/cli/commands/project/create.d.ts.map +1 -0
  89. package/dist/cli/commands/project/create.js +109 -0
  90. package/dist/cli/commands/project/create.js.map +1 -0
  91. package/dist/cli/commands/project/index.d.ts +12 -0
  92. package/dist/cli/commands/project/index.d.ts.map +1 -0
  93. package/dist/cli/commands/project/index.js +15 -0
  94. package/dist/cli/commands/project/index.js.map +1 -0
  95. package/dist/cli/commands/publish.d.ts +12 -0
  96. package/dist/cli/commands/publish.d.ts.map +1 -0
  97. package/dist/cli/commands/publish.js +152 -0
  98. package/dist/cli/commands/publish.js.map +1 -0
  99. package/dist/cli/commands/redeploy.d.ts +11 -0
  100. package/dist/cli/commands/redeploy.d.ts.map +1 -0
  101. package/dist/cli/commands/redeploy.js +166 -0
  102. package/dist/cli/commands/redeploy.js.map +1 -0
  103. package/dist/cli/commands/status.d.ts +63 -0
  104. package/dist/cli/commands/status.d.ts.map +1 -0
  105. package/dist/cli/commands/status.js +290 -0
  106. package/dist/cli/commands/status.js.map +1 -0
  107. package/dist/cli/commands/trigger.d.ts +8 -0
  108. package/dist/cli/commands/trigger.d.ts.map +1 -0
  109. package/dist/cli/commands/trigger.js +247 -0
  110. package/dist/cli/commands/trigger.js.map +1 -0
  111. package/dist/cli/commands/use.d.ts +13 -0
  112. package/dist/cli/commands/use.d.ts.map +1 -0
  113. package/dist/cli/commands/use.js +92 -0
  114. package/dist/cli/commands/use.js.map +1 -0
  115. package/dist/cli/commands/verify/index.d.ts +13 -0
  116. package/dist/cli/commands/verify/index.d.ts.map +1 -0
  117. package/dist/cli/commands/verify/index.js +18 -0
  118. package/dist/cli/commands/verify/index.js.map +1 -0
  119. package/dist/cli/commands/verify/use-case.d.ts +23 -0
  120. package/dist/cli/commands/verify/use-case.d.ts.map +1 -0
  121. package/dist/cli/commands/verify/use-case.js +94 -0
  122. package/dist/cli/commands/verify/use-case.js.map +1 -0
  123. package/dist/cli/commands/verify/workflow.d.ts +22 -0
  124. package/dist/cli/commands/verify/workflow.d.ts.map +1 -0
  125. package/dist/cli/commands/verify/workflow.js +82 -0
  126. package/dist/cli/commands/verify/workflow.js.map +1 -0
  127. package/dist/cli/commands/whoami.d.ts +13 -0
  128. package/dist/cli/commands/whoami.d.ts.map +1 -0
  129. package/dist/cli/commands/whoami.js +126 -0
  130. package/dist/cli/commands/whoami.js.map +1 -0
  131. package/dist/cli/index.d.ts +24 -0
  132. package/dist/cli/index.d.ts.map +1 -0
  133. package/dist/cli/index.js +90 -0
  134. package/dist/cli/index.js.map +1 -0
  135. package/dist/cli/templates/claude-md-template.d.ts +12 -0
  136. package/dist/cli/templates/claude-md-template.d.ts.map +1 -0
  137. package/dist/cli/templates/claude-md-template.js +162 -0
  138. package/dist/cli/templates/claude-md-template.js.map +1 -0
  139. package/dist/cli/templates/config-template.d.ts +18 -0
  140. package/dist/cli/templates/config-template.d.ts.map +1 -0
  141. package/dist/cli/templates/config-template.js +350 -0
  142. package/dist/cli/templates/config-template.js.map +1 -0
  143. package/dist/cli/templates/skill-templates.d.ts +24 -0
  144. package/dist/cli/templates/skill-templates.d.ts.map +1 -0
  145. package/dist/cli/templates/skill-templates.js +117 -0
  146. package/dist/cli/templates/skill-templates.js.map +1 -0
  147. package/dist/cli/templates/slug.d.ts +9 -0
  148. package/dist/cli/templates/slug.d.ts.map +1 -0
  149. package/dist/cli/templates/slug.js +17 -0
  150. package/dist/cli/templates/slug.js.map +1 -0
  151. package/dist/cli/templates/workflow-templates.d.ts +693 -0
  152. package/dist/cli/templates/workflow-templates.d.ts.map +1 -0
  153. package/dist/cli/templates/workflow-templates.js +516 -0
  154. package/dist/cli/templates/workflow-templates.js.map +1 -0
  155. package/dist/cli/utils/output.d.ts +65 -0
  156. package/dist/cli/utils/output.d.ts.map +1 -0
  157. package/dist/cli/utils/output.js +188 -0
  158. package/dist/cli/utils/output.js.map +1 -0
  159. package/dist/cli/utils/validation-output.d.ts +21 -0
  160. package/dist/cli/utils/validation-output.d.ts.map +1 -0
  161. package/dist/cli/utils/validation-output.js +204 -0
  162. package/dist/cli/utils/validation-output.js.map +1 -0
  163. package/dist/data/integration-fields.d.ts +27 -0
  164. package/dist/data/integration-fields.d.ts.map +1 -0
  165. package/dist/data/integration-fields.js +361 -0
  166. package/dist/data/integration-fields.js.map +1 -0
  167. package/dist/index.d.ts +25 -0
  168. package/dist/index.d.ts.map +1 -0
  169. package/dist/index.js +39 -0
  170. package/dist/index.js.map +1 -0
  171. package/dist/types/process-types.d.ts +740 -0
  172. package/dist/types/process-types.d.ts.map +1 -0
  173. package/dist/types/process-types.js +22 -0
  174. package/dist/types/process-types.js.map +1 -0
  175. package/dist/utils/config.d.ts +127 -0
  176. package/dist/utils/config.d.ts.map +1 -0
  177. package/dist/utils/config.js +315 -0
  178. package/dist/utils/config.js.map +1 -0
  179. package/dist/utils/data-ingestion-deploy-client.d.ts +53 -0
  180. package/dist/utils/data-ingestion-deploy-client.d.ts.map +1 -0
  181. package/dist/utils/data-ingestion-deploy-client.js +63 -0
  182. package/dist/utils/data-ingestion-deploy-client.js.map +1 -0
  183. package/dist/utils/data-ingestion-deployer.d.ts +78 -0
  184. package/dist/utils/data-ingestion-deployer.d.ts.map +1 -0
  185. package/dist/utils/data-ingestion-deployer.js +119 -0
  186. package/dist/utils/data-ingestion-deployer.js.map +1 -0
  187. package/dist/utils/deploy-client.d.ts +55 -0
  188. package/dist/utils/deploy-client.d.ts.map +1 -0
  189. package/dist/utils/deploy-client.js +73 -0
  190. package/dist/utils/deploy-client.js.map +1 -0
  191. package/dist/utils/deployment-archiver.d.ts +110 -0
  192. package/dist/utils/deployment-archiver.d.ts.map +1 -0
  193. package/dist/utils/deployment-archiver.js +158 -0
  194. package/dist/utils/deployment-archiver.js.map +1 -0
  195. package/dist/utils/document-deploy-client.d.ts +41 -0
  196. package/dist/utils/document-deploy-client.d.ts.map +1 -0
  197. package/dist/utils/document-deploy-client.js +46 -0
  198. package/dist/utils/document-deploy-client.js.map +1 -0
  199. package/dist/utils/encryption.d.ts +85 -0
  200. package/dist/utils/encryption.d.ts.map +1 -0
  201. package/dist/utils/encryption.js +162 -0
  202. package/dist/utils/encryption.js.map +1 -0
  203. package/dist/utils/execution-client.d.ts +71 -0
  204. package/dist/utils/execution-client.d.ts.map +1 -0
  205. package/dist/utils/execution-client.js +56 -0
  206. package/dist/utils/execution-client.js.map +1 -0
  207. package/dist/utils/integration-client.d.ts +134 -0
  208. package/dist/utils/integration-client.d.ts.map +1 -0
  209. package/dist/utils/integration-client.js +109 -0
  210. package/dist/utils/integration-client.js.map +1 -0
  211. package/dist/utils/list-executions-client.d.ts +47 -0
  212. package/dist/utils/list-executions-client.d.ts.map +1 -0
  213. package/dist/utils/list-executions-client.js +50 -0
  214. package/dist/utils/list-executions-client.js.map +1 -0
  215. package/dist/utils/metadata-client.d.ts +90 -0
  216. package/dist/utils/metadata-client.d.ts.map +1 -0
  217. package/dist/utils/metadata-client.js +66 -0
  218. package/dist/utils/metadata-client.js.map +1 -0
  219. package/dist/utils/project-client.d.ts +70 -0
  220. package/dist/utils/project-client.d.ts.map +1 -0
  221. package/dist/utils/project-client.js +63 -0
  222. package/dist/utils/project-client.js.map +1 -0
  223. package/dist/utils/project-json.d.ts +71 -0
  224. package/dist/utils/project-json.d.ts.map +1 -0
  225. package/dist/utils/project-json.js +129 -0
  226. package/dist/utils/project-json.js.map +1 -0
  227. package/dist/utils/publish-client.d.ts +53 -0
  228. package/dist/utils/publish-client.d.ts.map +1 -0
  229. package/dist/utils/publish-client.js +64 -0
  230. package/dist/utils/publish-client.js.map +1 -0
  231. package/dist/utils/redeploy-client.d.ts +39 -0
  232. package/dist/utils/redeploy-client.d.ts.map +1 -0
  233. package/dist/utils/redeploy-client.js +51 -0
  234. package/dist/utils/redeploy-client.js.map +1 -0
  235. package/dist/utils/skill-parser.d.ts +52 -0
  236. package/dist/utils/skill-parser.d.ts.map +1 -0
  237. package/dist/utils/skill-parser.js +127 -0
  238. package/dist/utils/skill-parser.js.map +1 -0
  239. package/dist/utils/skills-client.d.ts +39 -0
  240. package/dist/utils/skills-client.d.ts.map +1 -0
  241. package/dist/utils/skills-client.js +32 -0
  242. package/dist/utils/skills-client.js.map +1 -0
  243. package/dist/utils/trigger-client.d.ts +78 -0
  244. package/dist/utils/trigger-client.d.ts.map +1 -0
  245. package/dist/utils/trigger-client.js +81 -0
  246. package/dist/utils/trigger-client.js.map +1 -0
  247. package/dist/utils/use-case-deployer.d.ts +93 -0
  248. package/dist/utils/use-case-deployer.d.ts.map +1 -0
  249. package/dist/utils/use-case-deployer.js +270 -0
  250. package/dist/utils/use-case-deployer.js.map +1 -0
  251. package/dist/utils/version-manager.d.ts +63 -0
  252. package/dist/utils/version-manager.d.ts.map +1 -0
  253. package/dist/utils/version-manager.js +91 -0
  254. package/dist/utils/version-manager.js.map +1 -0
  255. package/dist/utils/workflow-encoding.d.ts +26 -0
  256. package/dist/utils/workflow-encoding.d.ts.map +1 -0
  257. package/dist/utils/workflow-encoding.js +41 -0
  258. package/dist/utils/workflow-encoding.js.map +1 -0
  259. package/dist/validation/fixer.d.ts +56 -0
  260. package/dist/validation/fixer.d.ts.map +1 -0
  261. package/dist/validation/fixer.js +168 -0
  262. package/dist/validation/fixer.js.map +1 -0
  263. package/dist/validation/rules/codika-init-required.d.ts +18 -0
  264. package/dist/validation/rules/codika-init-required.d.ts.map +1 -0
  265. package/dist/validation/rules/codika-init-required.js +70 -0
  266. package/dist/validation/rules/codika-init-required.js.map +1 -0
  267. package/dist/validation/rules/codika-submit-result.d.ts +22 -0
  268. package/dist/validation/rules/codika-submit-result.d.ts.map +1 -0
  269. package/dist/validation/rules/codika-submit-result.js +144 -0
  270. package/dist/validation/rules/codika-submit-result.js.map +1 -0
  271. package/dist/validation/rules/error-branch-required.d.ts +24 -0
  272. package/dist/validation/rules/error-branch-required.d.ts.map +1 -0
  273. package/dist/validation/rules/error-branch-required.js +103 -0
  274. package/dist/validation/rules/error-branch-required.js.map +1 -0
  275. package/dist/validation/rules/index.d.ts +18 -0
  276. package/dist/validation/rules/index.d.ts.map +1 -0
  277. package/dist/validation/rules/index.js +28 -0
  278. package/dist/validation/rules/index.js.map +1 -0
  279. package/dist/validation/rules/schedule-webhook-convergence.d.ts +24 -0
  280. package/dist/validation/rules/schedule-webhook-convergence.d.ts.map +1 -0
  281. package/dist/validation/rules/schedule-webhook-convergence.js +129 -0
  282. package/dist/validation/rules/schedule-webhook-convergence.js.map +1 -0
  283. package/dist/validation/rules/subworkflow-min-params.d.ts +21 -0
  284. package/dist/validation/rules/subworkflow-min-params.d.ts.map +1 -0
  285. package/dist/validation/rules/subworkflow-min-params.js +84 -0
  286. package/dist/validation/rules/subworkflow-min-params.js.map +1 -0
  287. package/dist/validation/runner.d.ts +43 -0
  288. package/dist/validation/runner.d.ts.map +1 -0
  289. package/dist/validation/runner.js +335 -0
  290. package/dist/validation/runner.js.map +1 -0
  291. package/dist/validation/types.d.ts +155 -0
  292. package/dist/validation/types.d.ts.map +1 -0
  293. package/dist/validation/types.js +8 -0
  294. package/dist/validation/types.js.map +1 -0
  295. package/dist/validation/use-case-scripts/calledby-consistency.d.ts +23 -0
  296. package/dist/validation/use-case-scripts/calledby-consistency.d.ts.map +1 -0
  297. package/dist/validation/use-case-scripts/calledby-consistency.js +236 -0
  298. package/dist/validation/use-case-scripts/calledby-consistency.js.map +1 -0
  299. package/dist/validation/use-case-scripts/config-exports.d.ts +17 -0
  300. package/dist/validation/use-case-scripts/config-exports.d.ts.map +1 -0
  301. package/dist/validation/use-case-scripts/config-exports.js +93 -0
  302. package/dist/validation/use-case-scripts/config-exports.js.map +1 -0
  303. package/dist/validation/use-case-scripts/custom-integration-schema.d.ts +21 -0
  304. package/dist/validation/use-case-scripts/custom-integration-schema.d.ts.map +1 -0
  305. package/dist/validation/use-case-scripts/custom-integration-schema.js +378 -0
  306. package/dist/validation/use-case-scripts/custom-integration-schema.js.map +1 -0
  307. package/dist/validation/use-case-scripts/index.d.ts +27 -0
  308. package/dist/validation/use-case-scripts/index.d.ts.map +1 -0
  309. package/dist/validation/use-case-scripts/index.js +52 -0
  310. package/dist/validation/use-case-scripts/index.js.map +1 -0
  311. package/dist/validation/use-case-scripts/integration-inheritance.d.ts +35 -0
  312. package/dist/validation/use-case-scripts/integration-inheritance.d.ts.map +1 -0
  313. package/dist/validation/use-case-scripts/integration-inheritance.js +348 -0
  314. package/dist/validation/use-case-scripts/integration-inheritance.js.map +1 -0
  315. package/dist/validation/use-case-scripts/schema-types.d.ts +21 -0
  316. package/dist/validation/use-case-scripts/schema-types.d.ts.map +1 -0
  317. package/dist/validation/use-case-scripts/schema-types.js +134 -0
  318. package/dist/validation/use-case-scripts/schema-types.js.map +1 -0
  319. package/dist/validation/use-case-scripts/skill-consistency.d.ts +21 -0
  320. package/dist/validation/use-case-scripts/skill-consistency.d.ts.map +1 -0
  321. package/dist/validation/use-case-scripts/skill-consistency.js +180 -0
  322. package/dist/validation/use-case-scripts/skill-consistency.js.map +1 -0
  323. package/dist/validation/use-case-scripts/subworkflow-references.d.ts +22 -0
  324. package/dist/validation/use-case-scripts/subworkflow-references.d.ts.map +1 -0
  325. package/dist/validation/use-case-scripts/subworkflow-references.js +139 -0
  326. package/dist/validation/use-case-scripts/subworkflow-references.js.map +1 -0
  327. package/dist/validation/use-case-scripts/trigger-type-consistency.d.ts +25 -0
  328. package/dist/validation/use-case-scripts/trigger-type-consistency.d.ts.map +1 -0
  329. package/dist/validation/use-case-scripts/trigger-type-consistency.js +265 -0
  330. package/dist/validation/use-case-scripts/trigger-type-consistency.js.map +1 -0
  331. package/dist/validation/use-case-scripts/trigger-types.d.ts +20 -0
  332. package/dist/validation/use-case-scripts/trigger-types.d.ts.map +1 -0
  333. package/dist/validation/use-case-scripts/trigger-types.js +177 -0
  334. package/dist/validation/use-case-scripts/trigger-types.js.map +1 -0
  335. package/dist/validation/use-case-scripts/triggers-required.d.ts +23 -0
  336. package/dist/validation/use-case-scripts/triggers-required.d.ts.map +1 -0
  337. package/dist/validation/use-case-scripts/triggers-required.js +111 -0
  338. package/dist/validation/use-case-scripts/triggers-required.js.map +1 -0
  339. package/dist/validation/use-case-scripts/webhook-path-consistency.d.ts +28 -0
  340. package/dist/validation/use-case-scripts/webhook-path-consistency.d.ts.map +1 -0
  341. package/dist/validation/use-case-scripts/webhook-path-consistency.js +288 -0
  342. package/dist/validation/use-case-scripts/webhook-path-consistency.js.map +1 -0
  343. package/dist/validation/use-case-scripts/workflow-imports.d.ts +16 -0
  344. package/dist/validation/use-case-scripts/workflow-imports.d.ts.map +1 -0
  345. package/dist/validation/use-case-scripts/workflow-imports.js +206 -0
  346. package/dist/validation/use-case-scripts/workflow-imports.js.map +1 -0
  347. package/dist/validation/workflow-scripts/credential-placeholders.d.ts +21 -0
  348. package/dist/validation/workflow-scripts/credential-placeholders.d.ts.map +1 -0
  349. package/dist/validation/workflow-scripts/credential-placeholders.js +278 -0
  350. package/dist/validation/workflow-scripts/credential-placeholders.js.map +1 -0
  351. package/dist/validation/workflow-scripts/db-always-output.d.ts +16 -0
  352. package/dist/validation/workflow-scripts/db-always-output.d.ts.map +1 -0
  353. package/dist/validation/workflow-scripts/db-always-output.js +95 -0
  354. package/dist/validation/workflow-scripts/db-always-output.js.map +1 -0
  355. package/dist/validation/workflow-scripts/exec-workflow-wait.d.ts +15 -0
  356. package/dist/validation/workflow-scripts/exec-workflow-wait.d.ts.map +1 -0
  357. package/dist/validation/workflow-scripts/exec-workflow-wait.js +85 -0
  358. package/dist/validation/workflow-scripts/exec-workflow-wait.js.map +1 -0
  359. package/dist/validation/workflow-scripts/index.d.ts +31 -0
  360. package/dist/validation/workflow-scripts/index.d.ts.map +1 -0
  361. package/dist/validation/workflow-scripts/index.js +58 -0
  362. package/dist/validation/workflow-scripts/index.js.map +1 -0
  363. package/dist/validation/workflow-scripts/instparm-quoting.d.ts +21 -0
  364. package/dist/validation/workflow-scripts/instparm-quoting.d.ts.map +1 -0
  365. package/dist/validation/workflow-scripts/instparm-quoting.js +59 -0
  366. package/dist/validation/workflow-scripts/instparm-quoting.js.map +1 -0
  367. package/dist/validation/workflow-scripts/llm-model-id.d.ts +17 -0
  368. package/dist/validation/workflow-scripts/llm-model-id.d.ts.map +1 -0
  369. package/dist/validation/workflow-scripts/llm-model-id.js +171 -0
  370. package/dist/validation/workflow-scripts/llm-model-id.js.map +1 -0
  371. package/dist/validation/workflow-scripts/llm-output-access.d.ts +23 -0
  372. package/dist/validation/workflow-scripts/llm-output-access.d.ts.map +1 -0
  373. package/dist/validation/workflow-scripts/llm-output-access.js +274 -0
  374. package/dist/validation/workflow-scripts/llm-output-access.js.map +1 -0
  375. package/dist/validation/workflow-scripts/merge-before-terminal.d.ts +20 -0
  376. package/dist/validation/workflow-scripts/merge-before-terminal.d.ts.map +1 -0
  377. package/dist/validation/workflow-scripts/merge-before-terminal.js +87 -0
  378. package/dist/validation/workflow-scripts/merge-before-terminal.js.map +1 -0
  379. package/dist/validation/workflow-scripts/placeholder-syntax.d.ts +29 -0
  380. package/dist/validation/workflow-scripts/placeholder-syntax.d.ts.map +1 -0
  381. package/dist/validation/workflow-scripts/placeholder-syntax.js +154 -0
  382. package/dist/validation/workflow-scripts/placeholder-syntax.js.map +1 -0
  383. package/dist/validation/workflow-scripts/retry-backoff.d.ts +16 -0
  384. package/dist/validation/workflow-scripts/retry-backoff.d.ts.map +1 -0
  385. package/dist/validation/workflow-scripts/retry-backoff.js +197 -0
  386. package/dist/validation/workflow-scripts/retry-backoff.js.map +1 -0
  387. package/dist/validation/workflow-scripts/webhook-id.d.ts +17 -0
  388. package/dist/validation/workflow-scripts/webhook-id.d.ts.map +1 -0
  389. package/dist/validation/workflow-scripts/webhook-id.js +79 -0
  390. package/dist/validation/workflow-scripts/webhook-id.js.map +1 -0
  391. package/dist/validation/workflow-scripts/workflow-format.d.ts +16 -0
  392. package/dist/validation/workflow-scripts/workflow-format.d.ts.map +1 -0
  393. package/dist/validation/workflow-scripts/workflow-format.js +51 -0
  394. package/dist/validation/workflow-scripts/workflow-format.js.map +1 -0
  395. package/dist/validation/workflow-scripts/workflow-sanitization.d.ts +21 -0
  396. package/dist/validation/workflow-scripts/workflow-sanitization.d.ts.map +1 -0
  397. package/dist/validation/workflow-scripts/workflow-sanitization.js +78 -0
  398. package/dist/validation/workflow-scripts/workflow-sanitization.js.map +1 -0
  399. package/dist/validation/workflow-scripts/workflow-settings.d.ts +19 -0
  400. package/dist/validation/workflow-scripts/workflow-settings.d.ts.map +1 -0
  401. package/dist/validation/workflow-scripts/workflow-settings.js +131 -0
  402. package/dist/validation/workflow-scripts/workflow-settings.js.map +1 -0
  403. package/package.json +64 -0
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Script: SKILL-CONSISTENCY
3
+ *
4
+ * Validates skill files in the skills/ directory follow the Claude Agent Skills format:
5
+ * - Each subdirectory must contain a SKILL.md file
6
+ * - SKILL.md must have valid YAML frontmatter (name, description, workflowTemplateId)
7
+ * - name must follow Claude spec: max 64 chars, lowercase+numbers+hyphens, no reserved words
8
+ * - description must be non-empty, max 1024 chars
9
+ * - workflowTemplateId must reference an existing workflow
10
+ * - No duplicate names or workflowTemplateIds
11
+ *
12
+ * Skills folder is optional — no error if missing.
13
+ */
14
+ import { existsSync, readdirSync, readFileSync, statSync } from 'fs';
15
+ import { join, basename } from 'path';
16
+ import { parseSkillFrontmatter } from '../../utils/skill-parser.js';
17
+ export const metadata = {
18
+ id: 'SKILL-CONSISTENCY',
19
+ name: 'skill_consistency',
20
+ severity: 'must',
21
+ description: 'Skill files must follow Claude Agent Skills format with valid frontmatter and workflow references',
22
+ details: 'Each skill directory must contain a SKILL.md with name, description, and workflowTemplateId in YAML frontmatter',
23
+ category: 'skills',
24
+ };
25
+ const MAX_NAME_LENGTH = 64;
26
+ const MAX_DESCRIPTION_LENGTH = 1024;
27
+ const NAME_PATTERN = /^[a-z0-9-]+$/;
28
+ const RESERVED_WORDS = ['anthropic', 'claude'];
29
+ /**
30
+ * Check skill consistency across the use case
31
+ */
32
+ export async function checkSkillConsistency(useCasePath) {
33
+ const findings = [];
34
+ const skillsPath = join(useCasePath, 'skills');
35
+ // Skills folder is optional
36
+ if (!existsSync(skillsPath)) {
37
+ return findings;
38
+ }
39
+ // Collect known workflow template IDs from workflows/ folder
40
+ const workflowsPath = join(useCasePath, 'workflows');
41
+ const knownTemplateIds = existsSync(workflowsPath)
42
+ ? readdirSync(workflowsPath)
43
+ .filter(f => f.endsWith('.json'))
44
+ .map(f => basename(f, '.json'))
45
+ : [];
46
+ const entries = readdirSync(skillsPath);
47
+ const seenNames = new Set();
48
+ const seenWorkflowIds = new Set();
49
+ for (const entry of entries) {
50
+ const entryPath = join(skillsPath, entry);
51
+ // Only check directories
52
+ if (!statSync(entryPath).isDirectory()) {
53
+ continue;
54
+ }
55
+ const skillMdPath = join(entryPath, 'SKILL.md');
56
+ const relativePath = `skills/${entry}/SKILL.md`;
57
+ // SKILL-STRUCTURE: Directory must contain SKILL.md
58
+ if (!existsSync(skillMdPath)) {
59
+ findings.push({
60
+ rule: 'SKILL-STRUCTURE',
61
+ severity: 'must',
62
+ path: entryPath,
63
+ message: `${relativePath}: skill directory '${entry}' is missing a SKILL.md file`,
64
+ });
65
+ continue;
66
+ }
67
+ const content = readFileSync(skillMdPath, 'utf-8');
68
+ const { frontmatter } = parseSkillFrontmatter(content);
69
+ // SKILL-FRONTMATTER: Must have valid frontmatter
70
+ if (!frontmatter.name && !frontmatter.description && !frontmatter.workflowTemplateId) {
71
+ findings.push({
72
+ rule: 'SKILL-FRONTMATTER',
73
+ severity: 'must',
74
+ path: skillMdPath,
75
+ message: `${relativePath}: missing or empty YAML frontmatter`,
76
+ });
77
+ continue;
78
+ }
79
+ // SKILL-NAME-FORMAT: name validation (Claude spec)
80
+ if (!frontmatter.name) {
81
+ findings.push({
82
+ rule: 'SKILL-NAME-FORMAT',
83
+ severity: 'must',
84
+ path: skillMdPath,
85
+ message: `${relativePath}: missing required 'name' in frontmatter`,
86
+ });
87
+ }
88
+ else {
89
+ if (frontmatter.name.length > MAX_NAME_LENGTH) {
90
+ findings.push({
91
+ rule: 'SKILL-NAME-FORMAT',
92
+ severity: 'must',
93
+ path: skillMdPath,
94
+ message: `${relativePath}: name '${frontmatter.name}' exceeds ${MAX_NAME_LENGTH} characters`,
95
+ });
96
+ }
97
+ if (!NAME_PATTERN.test(frontmatter.name)) {
98
+ findings.push({
99
+ rule: 'SKILL-NAME-FORMAT',
100
+ severity: 'must',
101
+ path: skillMdPath,
102
+ message: `${relativePath}: name '${frontmatter.name}' must contain only lowercase letters, numbers, and hyphens`,
103
+ });
104
+ }
105
+ for (const reserved of RESERVED_WORDS) {
106
+ if (frontmatter.name.includes(reserved)) {
107
+ findings.push({
108
+ rule: 'SKILL-NAME-FORMAT',
109
+ severity: 'must',
110
+ path: skillMdPath,
111
+ message: `${relativePath}: name '${frontmatter.name}' contains reserved word '${reserved}'`,
112
+ });
113
+ }
114
+ }
115
+ // SKILL-DUPLICATE: Check for duplicate names
116
+ if (seenNames.has(frontmatter.name)) {
117
+ findings.push({
118
+ rule: 'SKILL-DUPLICATE',
119
+ severity: 'must',
120
+ path: skillMdPath,
121
+ message: `${relativePath}: duplicate skill name '${frontmatter.name}'`,
122
+ });
123
+ }
124
+ else {
125
+ seenNames.add(frontmatter.name);
126
+ }
127
+ }
128
+ // SKILL-DESCRIPTION: description validation
129
+ if (!frontmatter.description) {
130
+ findings.push({
131
+ rule: 'SKILL-DESCRIPTION',
132
+ severity: 'should',
133
+ path: skillMdPath,
134
+ message: `${relativePath}: missing 'description' in frontmatter`,
135
+ });
136
+ }
137
+ else if (frontmatter.description.length > MAX_DESCRIPTION_LENGTH) {
138
+ findings.push({
139
+ rule: 'SKILL-DESCRIPTION',
140
+ severity: 'must',
141
+ path: skillMdPath,
142
+ message: `${relativePath}: description exceeds ${MAX_DESCRIPTION_LENGTH} characters`,
143
+ });
144
+ }
145
+ // SKILL-WORKFLOW-REF: workflowTemplateId validation
146
+ if (!frontmatter.workflowTemplateId) {
147
+ findings.push({
148
+ rule: 'SKILL-WORKFLOW-REF',
149
+ severity: 'must',
150
+ path: skillMdPath,
151
+ message: `${relativePath}: missing required 'workflowTemplateId' in frontmatter`,
152
+ });
153
+ }
154
+ else {
155
+ if (knownTemplateIds.length > 0 && !knownTemplateIds.includes(frontmatter.workflowTemplateId)) {
156
+ findings.push({
157
+ rule: 'SKILL-WORKFLOW-REF',
158
+ severity: 'must',
159
+ path: skillMdPath,
160
+ message: `${relativePath}: workflowTemplateId '${frontmatter.workflowTemplateId}' does not match any workflow file`,
161
+ raw_details: `Known workflows: ${knownTemplateIds.join(', ')}`,
162
+ });
163
+ }
164
+ // SKILL-DUPLICATE: Check for duplicate workflowTemplateIds
165
+ if (seenWorkflowIds.has(frontmatter.workflowTemplateId)) {
166
+ findings.push({
167
+ rule: 'SKILL-DUPLICATE',
168
+ severity: 'must',
169
+ path: skillMdPath,
170
+ message: `${relativePath}: duplicate workflowTemplateId '${frontmatter.workflowTemplateId}'`,
171
+ });
172
+ }
173
+ else {
174
+ seenWorkflowIds.add(frontmatter.workflowTemplateId);
175
+ }
176
+ }
177
+ }
178
+ return findings;
179
+ }
180
+ //# sourceMappingURL=skill-consistency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-consistency.js","sourceRoot":"","sources":["../../../src/validation/use-case-scripts/skill-consistency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,CAAC,MAAM,QAAQ,GAAiB;IACpC,EAAE,EAAE,mBAAmB;IACvB,IAAI,EAAE,mBAAmB;IACzB,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,mGAAmG;IAChH,OAAO,EAAE,iHAAiH;IAC1H,QAAQ,EAAE,QAAQ;CACnB,CAAC;AAEF,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,sBAAsB,GAAG,IAAI,CAAC;AACpC,MAAM,YAAY,GAAG,cAAc,CAAC;AACpC,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAE/C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,WAAmB;IAC7D,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAE/C,4BAA4B;IAC5B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,6DAA6D;IAC7D,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG,UAAU,CAAC,aAAa,CAAC;QAChD,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC;aACvB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACnC,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAE1C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAE1C,yBAAyB;QACzB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACvC,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,UAAU,KAAK,WAAW,CAAC;QAEhD,mDAAmD;QACnD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,iBAAiB;gBACvB,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,GAAG,YAAY,sBAAsB,KAAK,8BAA8B;aAClF,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,EAAE,WAAW,EAAE,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAEvD,iDAAiD;QACjD,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;YACrF,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,mBAAmB;gBACzB,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,GAAG,YAAY,qCAAqC;aAC9D,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,mDAAmD;QACnD,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,mBAAmB;gBACzB,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,GAAG,YAAY,0CAA0C;aACnE,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;gBAC9C,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,mBAAmB;oBACzB,QAAQ,EAAE,MAAM;oBAChB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,GAAG,YAAY,WAAW,WAAW,CAAC,IAAI,aAAa,eAAe,aAAa;iBAC7F,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,mBAAmB;oBACzB,QAAQ,EAAE,MAAM;oBAChB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,GAAG,YAAY,WAAW,WAAW,CAAC,IAAI,6DAA6D;iBACjH,CAAC,CAAC;YACL,CAAC;YACD,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;gBACtC,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACxC,QAAQ,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,mBAAmB;wBACzB,QAAQ,EAAE,MAAM;wBAChB,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,GAAG,YAAY,WAAW,WAAW,CAAC,IAAI,6BAA6B,QAAQ,GAAG;qBAC5F,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,6CAA6C;YAC7C,IAAI,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,iBAAiB;oBACvB,QAAQ,EAAE,MAAM;oBAChB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,GAAG,YAAY,2BAA2B,WAAW,CAAC,IAAI,GAAG;iBACvE,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,mBAAmB;gBACzB,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,GAAG,YAAY,wCAAwC;aACjE,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,sBAAsB,EAAE,CAAC;YACnE,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,mBAAmB;gBACzB,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,GAAG,YAAY,yBAAyB,sBAAsB,aAAa;aACrF,CAAC,CAAC;QACL,CAAC;QAED,oDAAoD;QACpD,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,oBAAoB;gBAC1B,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,GAAG,YAAY,wDAAwD;aACjF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAC9F,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,oBAAoB;oBAC1B,QAAQ,EAAE,MAAM;oBAChB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,GAAG,YAAY,yBAAyB,WAAW,CAAC,kBAAkB,oCAAoC;oBACnH,WAAW,EAAE,oBAAoB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC/D,CAAC,CAAC;YACL,CAAC;YACD,2DAA2D;YAC3D,IAAI,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACxD,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,iBAAiB;oBACvB,QAAQ,EAAE,MAAM;oBAChB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,GAAG,YAAY,mCAAmC,WAAW,CAAC,kBAAkB,GAAG;iBAC7F,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * SUBWKFL-REFERENCES Validation Script
3
+ *
4
+ * Validates that all SUBWKFL_ placeholders in workflow files
5
+ * reference existing workflowTemplateId values defined in config.ts
6
+ *
7
+ * @see .guides/specific/placeholder-patterns.md - "Sub-Workflow References (SUBWKFL)"
8
+ */
9
+ import type { Finding, RuleMetadata } from '../types.js';
10
+ export declare const RULE_ID = "SUBWKFL-REFERENCES";
11
+ export declare const metadata: RuleMetadata & {
12
+ guideRef: {
13
+ path: string;
14
+ section: string;
15
+ };
16
+ };
17
+ /**
18
+ * Validates that all SUBWKFL_ placeholders reference existing template IDs
19
+ */
20
+ export declare function checkSubworkflowReferences(useCasePath: string): Promise<Finding[]>;
21
+ export default checkSubworkflowReferences;
22
+ //# sourceMappingURL=subworkflow-references.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subworkflow-references.d.ts","sourceRoot":"","sources":["../../../src/validation/use-case-scripts/subworkflow-references.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,OAAO,uBAAuB,CAAC;AAE5C,eAAO,MAAM,QAAQ,EAAE,YAAY,GAAG;IAAE,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAYlF,CAAC;AAuCF;;GAEG;AACH,wBAAsB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAuFxF;AAED,eAAe,0BAA0B,CAAC"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * SUBWKFL-REFERENCES Validation Script
3
+ *
4
+ * Validates that all SUBWKFL_ placeholders in workflow files
5
+ * reference existing workflowTemplateId values defined in config.ts
6
+ *
7
+ * @see .guides/specific/placeholder-patterns.md - "Sub-Workflow References (SUBWKFL)"
8
+ */
9
+ import { readFileSync, readdirSync, existsSync } from 'fs';
10
+ import { join } from 'path';
11
+ export const RULE_ID = 'SUBWKFL-REFERENCES';
12
+ export const metadata = {
13
+ id: RULE_ID,
14
+ name: 'subworkflow_references',
15
+ severity: 'must',
16
+ description: 'SUBWKFL placeholders must reference existing workflow template IDs',
17
+ details: 'Each {{SUBWKFL_<TEMPLATE_ID>_LFKWBUS}} placeholder must reference a workflowTemplateId defined in config.ts',
18
+ fixable: false,
19
+ category: 'references',
20
+ guideRef: {
21
+ path: 'specific/placeholder-patterns.md',
22
+ section: 'Sub-Workflow References (SUBWKFL)',
23
+ },
24
+ };
25
+ // Regex to find SUBWKFL placeholders
26
+ const SUBWKFL_PATTERN = /\{\{SUBWKFL_([a-zA-Z0-9_-]+)_LFKWBUS\}\}/g;
27
+ // Regex to extract workflowTemplateId from config.ts
28
+ const TEMPLATE_ID_PATTERN = /workflowTemplateId:\s*['"]([^'"]+)['"]/g;
29
+ /**
30
+ * Extracts all workflowTemplateId values from config.ts content
31
+ */
32
+ function extractTemplateIds(configContent) {
33
+ const templateIds = [];
34
+ let match;
35
+ while ((match = TEMPLATE_ID_PATTERN.exec(configContent)) !== null) {
36
+ templateIds.push(match[1]);
37
+ }
38
+ return templateIds;
39
+ }
40
+ /**
41
+ * Extracts all SUBWKFL_ references from workflow content
42
+ */
43
+ function extractSubworkflowReferences(content) {
44
+ const references = [];
45
+ let match;
46
+ // Reset regex state
47
+ SUBWKFL_PATTERN.lastIndex = 0;
48
+ while ((match = SUBWKFL_PATTERN.exec(content)) !== null) {
49
+ references.push(match[1]);
50
+ }
51
+ return references;
52
+ }
53
+ /**
54
+ * Validates that all SUBWKFL_ placeholders reference existing template IDs
55
+ */
56
+ export async function checkSubworkflowReferences(useCasePath) {
57
+ const findings = [];
58
+ // Check if config.ts exists
59
+ const configPath = join(useCasePath, 'config.ts');
60
+ if (!existsSync(configPath)) {
61
+ findings.push({
62
+ rule: RULE_ID,
63
+ severity: 'must',
64
+ path: useCasePath,
65
+ message: 'Cannot find config.ts in use-case folder',
66
+ raw_details: 'Ensure config.ts exists in the use-case root folder',
67
+ guideRef: metadata.guideRef,
68
+ });
69
+ return findings;
70
+ }
71
+ // Read config.ts and extract template IDs
72
+ let configContent;
73
+ try {
74
+ configContent = readFileSync(configPath, 'utf-8');
75
+ }
76
+ catch {
77
+ findings.push({
78
+ rule: RULE_ID,
79
+ severity: 'must',
80
+ path: configPath,
81
+ message: 'Cannot read config.ts',
82
+ raw_details: 'Ensure config.ts is readable',
83
+ guideRef: metadata.guideRef,
84
+ });
85
+ return findings;
86
+ }
87
+ const templateIds = extractTemplateIds(configContent);
88
+ // Check workflows folder
89
+ const workflowsPath = join(useCasePath, 'workflows');
90
+ if (!existsSync(workflowsPath)) {
91
+ // No workflows folder - nothing to validate
92
+ return findings;
93
+ }
94
+ // Get all workflow JSON files
95
+ let workflowFiles;
96
+ try {
97
+ workflowFiles = readdirSync(workflowsPath)
98
+ .filter(f => f.endsWith('.json'))
99
+ .map(f => join(workflowsPath, f));
100
+ }
101
+ catch {
102
+ findings.push({
103
+ rule: RULE_ID,
104
+ severity: 'must',
105
+ path: workflowsPath,
106
+ message: 'Cannot read workflows folder',
107
+ raw_details: 'Ensure workflows folder is readable',
108
+ guideRef: metadata.guideRef,
109
+ });
110
+ return findings;
111
+ }
112
+ // Check each workflow file for SUBWKFL_ references
113
+ for (const workflowFile of workflowFiles) {
114
+ let content;
115
+ try {
116
+ content = readFileSync(workflowFile, 'utf-8');
117
+ }
118
+ catch {
119
+ continue; // Skip unreadable files
120
+ }
121
+ const references = extractSubworkflowReferences(content);
122
+ // Validate each reference
123
+ for (const ref of references) {
124
+ if (!templateIds.includes(ref)) {
125
+ findings.push({
126
+ rule: RULE_ID,
127
+ severity: 'must',
128
+ path: workflowFile,
129
+ message: `SUBWKFL placeholder references unknown template ID: "${ref}"`,
130
+ raw_details: `The placeholder {{SUBWKFL_${ref}_LFKWBUS}} references a template ID that doesn't exist in config.ts. Available template IDs: ${templateIds.join(', ') || '(none)'}`,
131
+ guideRef: metadata.guideRef,
132
+ });
133
+ }
134
+ }
135
+ }
136
+ return findings;
137
+ }
138
+ export default checkSubworkflowReferences;
139
+ //# sourceMappingURL=subworkflow-references.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subworkflow-references.js","sourceRoot":"","sources":["../../../src/validation/use-case-scripts/subworkflow-references.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * TRIGGER-TYPE-CONSISTENCY Validation Script
3
+ *
4
+ * Validates that the trigger type declared in config.ts matches the actual
5
+ * trigger node type found in the corresponding workflow JSON file.
6
+ *
7
+ * For example, if config.ts declares type: 'http', the workflow must contain
8
+ * a webhook node, not a scheduleTrigger or a service-specific trigger node.
9
+ *
10
+ * @see .guides/specific/third-party-triggers.md - "Config.ts for Third-Party Triggered Workflows"
11
+ */
12
+ import type { Finding, RuleMetadata } from '../types.js';
13
+ export declare const RULE_ID = "TRIGGER-TYPE-CONSISTENCY";
14
+ export declare const metadata: RuleMetadata & {
15
+ guideRef: {
16
+ path: string;
17
+ section: string;
18
+ };
19
+ };
20
+ /**
21
+ * Validates that trigger types in config.ts match the workflow trigger nodes.
22
+ */
23
+ export declare function checkTriggerTypeConsistency(useCasePath: string): Promise<Finding[]>;
24
+ export default checkTriggerTypeConsistency;
25
+ //# sourceMappingURL=trigger-type-consistency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-type-consistency.d.ts","sourceRoot":"","sources":["../../../src/validation/use-case-scripts/trigger-type-consistency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,OAAO,6BAA6B,CAAC;AAElD,eAAO,MAAM,QAAQ,EAAE,YAAY,GAAG;IAAE,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAclF,CAAC;AAqMF;;GAEG;AACH,wBAAsB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAmFzF;AAED,eAAe,2BAA2B,CAAC"}
@@ -0,0 +1,265 @@
1
+ /**
2
+ * TRIGGER-TYPE-CONSISTENCY Validation Script
3
+ *
4
+ * Validates that the trigger type declared in config.ts matches the actual
5
+ * trigger node type found in the corresponding workflow JSON file.
6
+ *
7
+ * For example, if config.ts declares type: 'http', the workflow must contain
8
+ * a webhook node, not a scheduleTrigger or a service-specific trigger node.
9
+ *
10
+ * @see .guides/specific/third-party-triggers.md - "Config.ts for Third-Party Triggered Workflows"
11
+ */
12
+ import { readFileSync, readdirSync, existsSync } from 'fs';
13
+ import { join, basename } from 'path';
14
+ export const RULE_ID = 'TRIGGER-TYPE-CONSISTENCY';
15
+ export const metadata = {
16
+ id: RULE_ID,
17
+ name: 'trigger_type_consistency',
18
+ severity: 'must',
19
+ description: 'Config trigger type must match the actual trigger node in the workflow',
20
+ details: 'The trigger type in config.ts (http, schedule, subworkflow, service_event) must be consistent ' +
21
+ 'with the trigger node found in the workflow JSON. A mismatch causes runtime failures.',
22
+ fixable: false,
23
+ category: 'triggers',
24
+ guideRef: {
25
+ path: 'specific/third-party-triggers.md',
26
+ section: 'Config.ts for Third-Party Triggered Workflows',
27
+ },
28
+ };
29
+ const GUIDE_REF = {
30
+ path: 'specific/third-party-triggers.md',
31
+ section: 'Config.ts for Third-Party Triggered Workflows',
32
+ };
33
+ /**
34
+ * Known trigger node types and their categories
35
+ */
36
+ const WEBHOOK_NODE = 'n8n-nodes-base.webhook';
37
+ const SCHEDULE_NODE = 'n8n-nodes-base.scheduleTrigger';
38
+ const EXECUTE_WORKFLOW_TRIGGER_NODE = 'n8n-nodes-base.executeWorkflowTrigger';
39
+ /**
40
+ * Determines the trigger category from an n8n node type string.
41
+ */
42
+ function categorizeNodeType(nodeType) {
43
+ if (nodeType === WEBHOOK_NODE)
44
+ return 'webhook';
45
+ if (nodeType === SCHEDULE_NODE)
46
+ return 'schedule';
47
+ if (nodeType.toLowerCase().includes('executeworkflowtrigger'))
48
+ return 'subworkflow';
49
+ // Any other node whose type contains "Trigger" (case-insensitive) is a service trigger
50
+ if (/trigger/i.test(nodeType))
51
+ return 'service_trigger';
52
+ return 'unknown';
53
+ }
54
+ /**
55
+ * Determines the primary trigger category for a workflow.
56
+ * Non-webhook triggers take precedence over webhook triggers
57
+ * (a workflow might have both a service trigger and a webhook).
58
+ */
59
+ function getPrimaryTriggerCategory(triggers) {
60
+ if (triggers.length === 0)
61
+ return null;
62
+ // Prefer non-webhook, non-unknown triggers
63
+ const primary = triggers.find(t => t.category !== 'webhook' && t.category !== 'unknown');
64
+ if (primary)
65
+ return primary;
66
+ // Fall back to webhook
67
+ const webhook = triggers.find(t => t.category === 'webhook');
68
+ if (webhook)
69
+ return webhook;
70
+ return triggers[0];
71
+ }
72
+ /**
73
+ * Extracts trigger type declarations from config.ts per workflow.
74
+ */
75
+ function extractConfigTriggerTypes(configContent) {
76
+ const results = [];
77
+ const templateIdPattern = /workflowTemplateId:\s*['"]([^'"]+)['"]/g;
78
+ let templateMatch;
79
+ while ((templateMatch = templateIdPattern.exec(configContent)) !== null) {
80
+ const templateId = templateMatch[1];
81
+ const templateIdEndPos = templateMatch.index + templateMatch[0].length;
82
+ // Find the end of this workflow block
83
+ const nextTemplatePattern = /workflowTemplateId:/g;
84
+ nextTemplatePattern.lastIndex = templateIdEndPos;
85
+ const nextMatch = nextTemplatePattern.exec(configContent);
86
+ const blockEnd = nextMatch ? nextMatch.index : configContent.length;
87
+ const workflowBlock = configContent.slice(templateMatch.index, blockEnd);
88
+ // Find triggers array in this block
89
+ const triggersMatch = workflowBlock.match(/triggers:\s*\[([\s\S]*?)\]/);
90
+ if (!triggersMatch)
91
+ continue;
92
+ const triggersContent = triggersMatch[1];
93
+ if (triggersContent.trim().length === 0)
94
+ continue;
95
+ // Extract trigger type values
96
+ const triggerTypes = [];
97
+ const typePattern = /type:\s*['"]([^'"]+)['"]/g;
98
+ let typeMatch;
99
+ typePattern.lastIndex = 0;
100
+ while ((typeMatch = typePattern.exec(triggersContent)) !== null) {
101
+ triggerTypes.push(typeMatch[1]);
102
+ }
103
+ if (triggerTypes.length > 0) {
104
+ results.push({ workflowTemplateId: templateId, triggerTypes });
105
+ }
106
+ }
107
+ return results;
108
+ }
109
+ /**
110
+ * Extracts trigger nodes from a workflow JSON.
111
+ */
112
+ function extractWorkflowTriggers(workflowContent) {
113
+ const triggers = [];
114
+ try {
115
+ const workflow = JSON.parse(workflowContent);
116
+ for (const node of workflow.nodes || []) {
117
+ const category = categorizeNodeType(node.type || '');
118
+ if (category !== 'unknown') {
119
+ triggers.push({
120
+ nodeType: node.type,
121
+ nodeName: node.name || node.type,
122
+ category,
123
+ });
124
+ }
125
+ }
126
+ }
127
+ catch {
128
+ // Invalid JSON — other validators handle this
129
+ }
130
+ return triggers;
131
+ }
132
+ /**
133
+ * Checks whether a config trigger type is compatible with the detected workflow trigger.
134
+ * Returns an error message if incompatible, null if compatible.
135
+ */
136
+ function checkCompatibility(configType, primaryTrigger) {
137
+ const { category } = primaryTrigger;
138
+ switch (configType) {
139
+ case 'http':
140
+ // http config type requires a webhook node
141
+ if (category !== 'webhook') {
142
+ return `Config declares type 'http' but the workflow's primary trigger is a ${category} node (${primaryTrigger.nodeType}). ` +
143
+ `Use type: '${suggestConfigType(category)}' instead.`;
144
+ }
145
+ return null;
146
+ case 'schedule':
147
+ // schedule config type requires a scheduleTrigger node
148
+ if (category !== 'schedule') {
149
+ return `Config declares type 'schedule' but the workflow's primary trigger is a ${category} node (${primaryTrigger.nodeType}). ` +
150
+ `Use type: '${suggestConfigType(category)}' instead.`;
151
+ }
152
+ return null;
153
+ case 'subworkflow':
154
+ // subworkflow config type requires an executeWorkflowTrigger node
155
+ if (category !== 'subworkflow') {
156
+ return `Config declares type 'subworkflow' but the workflow's primary trigger is a ${category} node (${primaryTrigger.nodeType}). ` +
157
+ `Use type: '${suggestConfigType(category)}' instead.`;
158
+ }
159
+ return null;
160
+ case 'service_event':
161
+ // service_event is flexible — it should NOT be used with webhook, schedule, or subworkflow
162
+ if (category === 'webhook' || category === 'schedule' || category === 'subworkflow') {
163
+ return `Config declares type 'service_event' but the workflow's primary trigger is a ${category} node (${primaryTrigger.nodeType}). ` +
164
+ `Use type: '${suggestConfigType(category)}' instead.`;
165
+ }
166
+ return null;
167
+ default:
168
+ // Unknown config type — don't validate
169
+ return null;
170
+ }
171
+ }
172
+ /**
173
+ * Suggests the correct config type for a given trigger category.
174
+ */
175
+ function suggestConfigType(category) {
176
+ switch (category) {
177
+ case 'webhook': return 'http';
178
+ case 'schedule': return 'schedule';
179
+ case 'subworkflow': return 'subworkflow';
180
+ case 'service_trigger': return 'service_event';
181
+ default: return 'service_event';
182
+ }
183
+ }
184
+ /**
185
+ * Validates that trigger types in config.ts match the workflow trigger nodes.
186
+ */
187
+ export async function checkTriggerTypeConsistency(useCasePath) {
188
+ const findings = [];
189
+ const configPath = join(useCasePath, 'config.ts');
190
+ if (!existsSync(configPath)) {
191
+ return findings;
192
+ }
193
+ let configContent;
194
+ try {
195
+ configContent = readFileSync(configPath, 'utf-8');
196
+ }
197
+ catch {
198
+ return findings;
199
+ }
200
+ const configTriggers = extractConfigTriggerTypes(configContent);
201
+ if (configTriggers.length === 0) {
202
+ return findings;
203
+ }
204
+ // Check workflows folder
205
+ const workflowsPath = join(useCasePath, 'workflows');
206
+ if (!existsSync(workflowsPath)) {
207
+ return findings;
208
+ }
209
+ // Read all workflow files
210
+ let workflowFiles;
211
+ try {
212
+ workflowFiles = readdirSync(workflowsPath)
213
+ .filter(f => f.endsWith('.json'))
214
+ .map(f => join(workflowsPath, f));
215
+ }
216
+ catch {
217
+ return findings;
218
+ }
219
+ // Build a map of templateId -> workflow triggers
220
+ const workflowTriggerMap = new Map();
221
+ for (const workflowFile of workflowFiles) {
222
+ const templateId = basename(workflowFile, '.json');
223
+ let content;
224
+ try {
225
+ content = readFileSync(workflowFile, 'utf-8');
226
+ }
227
+ catch {
228
+ continue;
229
+ }
230
+ workflowTriggerMap.set(templateId, extractWorkflowTriggers(content));
231
+ }
232
+ // Validate each config workflow's trigger types against workflow nodes
233
+ for (const configInfo of configTriggers) {
234
+ const workflowTriggers = workflowTriggerMap.get(configInfo.workflowTemplateId);
235
+ if (!workflowTriggers || workflowTriggers.length === 0) {
236
+ // No workflow file or no trigger nodes — other rules handle this
237
+ continue;
238
+ }
239
+ const primaryTrigger = getPrimaryTriggerCategory(workflowTriggers);
240
+ if (!primaryTrigger)
241
+ continue;
242
+ for (const configType of configInfo.triggerTypes) {
243
+ const error = checkCompatibility(configType, primaryTrigger);
244
+ if (error) {
245
+ findings.push({
246
+ rule: RULE_ID,
247
+ severity: 'must',
248
+ path: configPath,
249
+ message: `Trigger type mismatch in workflow "${configInfo.workflowTemplateId}": ${error}`,
250
+ raw_details: `The config.ts trigger type '${configType}' does not match the workflow's actual trigger node.\n\n` +
251
+ `Workflow trigger node: ${primaryTrigger.nodeType} (${primaryTrigger.nodeName})\n` +
252
+ `Detected category: ${primaryTrigger.category}\n` +
253
+ `Config trigger type: ${configType}\n\n` +
254
+ `Update the trigger type in config.ts to match the workflow's trigger node.\n\n` +
255
+ `See documentation:\n` +
256
+ `- .guides/${GUIDE_REF.path} > "${GUIDE_REF.section}"`,
257
+ guideRef: GUIDE_REF,
258
+ });
259
+ }
260
+ }
261
+ }
262
+ return findings;
263
+ }
264
+ export default checkTriggerTypeConsistency;
265
+ //# sourceMappingURL=trigger-type-consistency.js.map