@exaudeus/workrail 0.8.5 → 0.9.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 (424) hide show
  1. package/README.md +157 -403
  2. package/dist/application/services/enhanced-loop-validator.d.ts +2 -2
  3. package/dist/application/services/enhanced-loop-validator.js +12 -2
  4. package/dist/application/services/validation-engine.d.ts +8 -29
  5. package/dist/application/services/validation-engine.js +38 -21
  6. package/dist/application/services/workflow-compiler.d.ts +18 -0
  7. package/dist/application/services/workflow-compiler.js +79 -0
  8. package/dist/application/services/workflow-interpreter.d.ts +31 -0
  9. package/dist/application/services/workflow-interpreter.js +280 -0
  10. package/dist/application/services/workflow-service.d.ts +34 -32
  11. package/dist/application/services/workflow-service.js +93 -425
  12. package/dist/application/use-cases/get-next-step.d.ts +6 -10
  13. package/dist/application/use-cases/get-next-step.js +2 -6
  14. package/dist/application/use-cases/get-workflow.d.ts +8 -6
  15. package/dist/application/use-cases/get-workflow.js +42 -33
  16. package/dist/application/use-cases/list-workflows.d.ts +3 -3
  17. package/dist/application/use-cases/validate-step-output.d.ts +4 -4
  18. package/dist/application/use-cases/validate-workflow-file.d.ts +46 -0
  19. package/dist/application/use-cases/validate-workflow-file.js +57 -0
  20. package/dist/cli/commands/cleanup.d.ts +8 -0
  21. package/dist/cli/commands/cleanup.js +20 -0
  22. package/dist/cli/commands/index.d.ts +7 -0
  23. package/dist/cli/commands/index.js +21 -0
  24. package/dist/cli/commands/init.d.ts +11 -0
  25. package/dist/cli/commands/init.js +49 -0
  26. package/dist/cli/commands/list.d.ts +9 -0
  27. package/dist/cli/commands/list.js +34 -0
  28. package/dist/cli/commands/migrate.d.ts +78 -0
  29. package/dist/cli/commands/migrate.js +248 -0
  30. package/dist/cli/commands/sources.d.ts +21 -0
  31. package/dist/cli/commands/sources.js +87 -0
  32. package/dist/cli/commands/start.d.ts +8 -0
  33. package/dist/cli/commands/start.js +16 -0
  34. package/dist/cli/commands/validate.d.ts +6 -0
  35. package/dist/cli/commands/validate.js +55 -0
  36. package/dist/cli/interpret-result.d.ts +4 -0
  37. package/dist/cli/interpret-result.js +24 -0
  38. package/dist/cli/output-formatter.d.ts +10 -0
  39. package/dist/cli/output-formatter.js +97 -0
  40. package/dist/cli/types/cli-result.d.ts +23 -0
  41. package/dist/cli/types/cli-result.js +30 -0
  42. package/dist/cli/types/exit-code.d.ts +13 -0
  43. package/dist/cli/types/exit-code.js +23 -0
  44. package/dist/cli/types/index.d.ts +4 -0
  45. package/dist/cli/types/index.js +11 -0
  46. package/dist/cli.js +84 -278
  47. package/dist/config/app-config.d.ts +40 -0
  48. package/dist/config/app-config.js +58 -0
  49. package/dist/config/feature-flags.d.ts +10 -2
  50. package/dist/config/feature-flags.js +74 -12
  51. package/dist/core/error-handler.d.ts +18 -27
  52. package/dist/core/error-handler.js +24 -218
  53. package/dist/di/container.d.ts +12 -0
  54. package/dist/di/container.js +244 -0
  55. package/dist/di/tokens.d.ts +40 -0
  56. package/dist/di/tokens.js +42 -0
  57. package/dist/domain/execution/error.d.ts +32 -0
  58. package/dist/domain/execution/error.js +24 -0
  59. package/dist/domain/execution/event.d.ts +7 -0
  60. package/dist/domain/execution/event.js +11 -0
  61. package/dist/domain/execution/ids.d.ts +9 -0
  62. package/dist/domain/execution/ids.js +9 -0
  63. package/dist/domain/execution/result.d.ts +3 -0
  64. package/dist/domain/execution/result.js +10 -0
  65. package/dist/domain/execution/state.d.ts +57 -0
  66. package/dist/domain/execution/state.js +28 -0
  67. package/dist/errors/app-error.d.ts +23 -0
  68. package/dist/errors/factories.d.ts +6 -0
  69. package/dist/errors/factories.js +21 -0
  70. package/dist/errors/formatter.d.ts +2 -0
  71. package/dist/errors/formatter.js +32 -0
  72. package/dist/errors/index.d.ts +3 -0
  73. package/dist/errors/index.js +7 -0
  74. package/dist/index.d.ts +6 -1
  75. package/dist/index.js +10 -25
  76. package/dist/infrastructure/index.d.ts +0 -1
  77. package/dist/infrastructure/index.js +0 -1
  78. package/dist/infrastructure/session/DashboardHeartbeat.d.ts +8 -0
  79. package/dist/infrastructure/session/DashboardHeartbeat.js +39 -0
  80. package/dist/infrastructure/session/DashboardLockRelease.d.ts +2 -0
  81. package/dist/infrastructure/session/DashboardLockRelease.js +29 -0
  82. package/dist/infrastructure/session/HttpServer.d.ts +25 -6
  83. package/dist/infrastructure/session/HttpServer.js +245 -90
  84. package/dist/infrastructure/session/SessionDataNormalizer.js +12 -2
  85. package/dist/infrastructure/session/SessionDataValidator.js +12 -2
  86. package/dist/infrastructure/session/SessionManager.d.ts +5 -3
  87. package/dist/infrastructure/session/SessionManager.js +52 -6
  88. package/dist/infrastructure/storage/caching-workflow-storage.d.ts +30 -6
  89. package/dist/infrastructure/storage/caching-workflow-storage.js +105 -23
  90. package/dist/infrastructure/storage/enhanced-multi-source-workflow-storage.d.ts +13 -9
  91. package/dist/infrastructure/storage/enhanced-multi-source-workflow-storage.js +80 -54
  92. package/dist/infrastructure/storage/file-workflow-storage.d.ts +10 -8
  93. package/dist/infrastructure/storage/file-workflow-storage.js +48 -56
  94. package/dist/infrastructure/storage/git-workflow-storage.d.ts +7 -22
  95. package/dist/infrastructure/storage/git-workflow-storage.js +48 -103
  96. package/dist/infrastructure/storage/in-memory-storage.d.ts +10 -6
  97. package/dist/infrastructure/storage/in-memory-storage.js +18 -13
  98. package/dist/infrastructure/storage/plugin-workflow-storage.d.ts +6 -18
  99. package/dist/infrastructure/storage/plugin-workflow-storage.js +29 -51
  100. package/dist/infrastructure/storage/remote-workflow-storage.d.ts +8 -17
  101. package/dist/infrastructure/storage/remote-workflow-storage.js +33 -156
  102. package/dist/infrastructure/storage/schema-validating-workflow-storage.d.ts +21 -13
  103. package/dist/infrastructure/storage/schema-validating-workflow-storage.js +86 -24
  104. package/dist/infrastructure/storage/storage.d.ts +7 -5
  105. package/dist/infrastructure/storage/storage.js +7 -6
  106. package/dist/manifest.json +1093 -0
  107. package/dist/mcp/error-mapper.d.ts +9 -0
  108. package/dist/mcp/error-mapper.js +66 -0
  109. package/dist/mcp/handlers/session.d.ts +34 -0
  110. package/dist/mcp/handlers/session.js +135 -0
  111. package/dist/mcp/handlers/v2-workflow.d.ts +4 -0
  112. package/dist/mcp/handlers/v2-workflow.js +112 -0
  113. package/dist/mcp/handlers/workflow.d.ts +45 -0
  114. package/dist/mcp/handlers/workflow.js +167 -0
  115. package/dist/mcp/index.d.ts +16 -0
  116. package/dist/mcp/index.js +51 -0
  117. package/dist/mcp/output-schemas.d.ts +317 -0
  118. package/dist/mcp/output-schemas.js +91 -0
  119. package/dist/mcp/server.d.ts +3 -0
  120. package/dist/mcp/server.js +258 -0
  121. package/dist/mcp/tool-description-provider.d.ts +16 -0
  122. package/dist/mcp/tool-description-provider.js +43 -0
  123. package/dist/mcp/tool-descriptions.d.ts +2 -0
  124. package/dist/mcp/tool-descriptions.js +109 -0
  125. package/dist/mcp/tool-factory.d.ts +23 -0
  126. package/dist/mcp/tool-factory.js +14 -0
  127. package/dist/mcp/tools.d.ts +156 -0
  128. package/dist/mcp/tools.js +196 -0
  129. package/dist/mcp/types/tool-description-types.d.ts +8 -0
  130. package/dist/mcp/types/tool-description-types.js +24 -0
  131. package/dist/mcp/types.d.ts +25 -0
  132. package/dist/mcp/types.js +15 -0
  133. package/dist/mcp/v2/tool-registry.d.ts +11 -0
  134. package/dist/mcp/v2/tool-registry.js +26 -0
  135. package/dist/mcp/v2/tools.d.ts +20 -0
  136. package/dist/mcp/v2/tools.js +17 -0
  137. package/dist/mcp/validation/bounded-json.d.ts +3 -0
  138. package/dist/mcp/validation/bounded-json.js +22 -0
  139. package/dist/mcp/validation/workflow-next-prevalidate.d.ts +9 -0
  140. package/dist/mcp/validation/workflow-next-prevalidate.js +83 -0
  141. package/dist/mcp/zod-to-json-schema.d.ts +17 -0
  142. package/dist/mcp/zod-to-json-schema.js +134 -0
  143. package/dist/mcp-server.d.ts +1 -1
  144. package/dist/mcp-server.js +6 -424
  145. package/dist/runtime/adapters/in-memory-shutdown-events.d.ts +6 -0
  146. package/dist/runtime/adapters/in-memory-shutdown-events.js +20 -0
  147. package/dist/runtime/adapters/node-process-signals.d.ts +4 -0
  148. package/dist/runtime/adapters/node-process-signals.js +11 -0
  149. package/dist/runtime/adapters/node-process-terminator.d.ts +4 -0
  150. package/dist/runtime/adapters/node-process-terminator.js +17 -0
  151. package/dist/runtime/adapters/noop-process-signals.d.ts +4 -0
  152. package/dist/runtime/adapters/noop-process-signals.js +8 -0
  153. package/dist/runtime/adapters/throwing-process-terminator.d.ts +4 -0
  154. package/dist/runtime/adapters/throwing-process-terminator.js +9 -0
  155. package/dist/runtime/assert-never.d.ts +1 -0
  156. package/dist/runtime/assert-never.js +6 -0
  157. package/dist/runtime/brand.d.ts +5 -0
  158. package/dist/runtime/ports/process-signals.d.ts +4 -0
  159. package/dist/runtime/ports/process-signals.js +2 -0
  160. package/dist/runtime/ports/process-terminator.d.ts +8 -0
  161. package/dist/runtime/ports/process-terminator.js +2 -0
  162. package/dist/runtime/ports/shutdown-events.d.ts +11 -0
  163. package/dist/runtime/ports/shutdown-events.js +2 -0
  164. package/dist/runtime/process-lifecycle-policy.d.ts +5 -0
  165. package/dist/runtime/process-lifecycle-policy.js +2 -0
  166. package/dist/runtime/result.d.ts +17 -0
  167. package/dist/runtime/result.js +31 -0
  168. package/dist/runtime/runtime-mode.d.ts +9 -0
  169. package/dist/runtime/runtime-mode.js +2 -0
  170. package/dist/types/storage.d.ts +16 -5
  171. package/dist/types/storage.js +8 -0
  172. package/dist/types/validation.d.ts +27 -0
  173. package/dist/types/validation.js +10 -0
  174. package/dist/types/workflow-definition.d.ts +63 -0
  175. package/dist/types/workflow-definition.js +33 -0
  176. package/dist/types/workflow-source.d.ts +51 -0
  177. package/dist/types/workflow-source.js +128 -0
  178. package/dist/types/workflow.d.ts +28 -0
  179. package/dist/types/workflow.js +96 -0
  180. package/dist/utils/workflow-init.d.ts +1 -0
  181. package/dist/utils/workflow-init.js +38 -0
  182. package/dist/v2/durable-core/canonical/hashing.d.ts +11 -0
  183. package/dist/v2/durable-core/canonical/hashing.js +13 -0
  184. package/dist/v2/durable-core/canonical/jcs.d.ts +11 -0
  185. package/dist/v2/durable-core/canonical/jcs.js +65 -0
  186. package/dist/v2/durable-core/canonical/json-types.d.ts +6 -0
  187. package/dist/v2/durable-core/canonical/json-types.js +2 -0
  188. package/dist/v2/durable-core/canonical/json-zod.d.ts +2 -0
  189. package/dist/v2/durable-core/canonical/json-zod.js +7 -0
  190. package/dist/v2/durable-core/canonical/jsonl.d.ts +4 -0
  191. package/dist/v2/durable-core/canonical/jsonl.js +13 -0
  192. package/dist/v2/durable-core/ids/index.d.ts +23 -0
  193. package/dist/v2/durable-core/ids/index.js +46 -0
  194. package/dist/v2/durable-core/schemas/compiled-workflow/index.d.ts +47 -0
  195. package/dist/v2/durable-core/schemas/compiled-workflow/index.js +17 -0
  196. package/dist/v2/durable-core/schemas/session/events.d.ts +1812 -0
  197. package/dist/v2/durable-core/schemas/session/events.js +328 -0
  198. package/dist/v2/durable-core/schemas/session/index.d.ts +2 -0
  199. package/dist/v2/durable-core/schemas/session/index.js +8 -0
  200. package/dist/v2/durable-core/schemas/session/manifest.d.ts +57 -0
  201. package/dist/v2/durable-core/schemas/session/manifest.js +30 -0
  202. package/dist/v2/infra/local/crypto/index.d.ts +5 -0
  203. package/dist/v2/infra/local/crypto/index.js +12 -0
  204. package/dist/v2/infra/local/data-dir/index.d.ts +13 -0
  205. package/dist/v2/infra/local/data-dir/index.js +69 -0
  206. package/dist/v2/infra/local/fs/index.d.ts +26 -0
  207. package/dist/v2/infra/local/fs/index.js +156 -0
  208. package/dist/v2/infra/local/pinned-workflow-store/index.d.ts +11 -0
  209. package/dist/v2/infra/local/pinned-workflow-store/index.js +85 -0
  210. package/dist/v2/infra/local/session-lock/index.d.ts +12 -0
  211. package/dist/v2/infra/local/session-lock/index.js +44 -0
  212. package/dist/v2/infra/local/session-store/index.d.ts +22 -0
  213. package/dist/v2/infra/local/session-store/index.js +358 -0
  214. package/dist/v2/infra/local/sha256/index.d.ts +5 -0
  215. package/dist/v2/infra/local/sha256/index.js +12 -0
  216. package/dist/v2/ports/data-dir.port.d.ts +9 -0
  217. package/dist/v2/ports/data-dir.port.js +2 -0
  218. package/dist/v2/ports/fs.port.d.ts +41 -0
  219. package/dist/v2/ports/fs.port.js +2 -0
  220. package/dist/v2/ports/pinned-workflow-store.port.d.ts +11 -0
  221. package/dist/v2/ports/pinned-workflow-store.port.js +2 -0
  222. package/dist/v2/ports/session-event-log-store.port.d.ts +37 -0
  223. package/dist/v2/ports/session-event-log-store.port.js +2 -0
  224. package/dist/v2/ports/session-lock.port.d.ts +23 -0
  225. package/dist/v2/ports/session-lock.port.js +2 -0
  226. package/dist/v2/ports/sha256.port.d.ts +4 -0
  227. package/dist/v2/ports/sha256.port.js +2 -0
  228. package/dist/v2/projections/advance-outcomes.d.ts +23 -0
  229. package/dist/v2/projections/advance-outcomes.js +23 -0
  230. package/dist/v2/projections/capabilities.d.ts +27 -0
  231. package/dist/v2/projections/capabilities.js +33 -0
  232. package/dist/v2/projections/gaps.d.ts +29 -0
  233. package/dist/v2/projections/gaps.js +49 -0
  234. package/dist/v2/projections/node-outputs.d.ts +34 -0
  235. package/dist/v2/projections/node-outputs.js +73 -0
  236. package/dist/v2/projections/preferences.d.ts +28 -0
  237. package/dist/v2/projections/preferences.js +50 -0
  238. package/dist/v2/projections/run-dag.d.ts +42 -0
  239. package/dist/v2/projections/run-dag.js +186 -0
  240. package/dist/v2/projections/run-status-signals.d.ts +26 -0
  241. package/dist/v2/projections/run-status-signals.js +49 -0
  242. package/dist/v2/projections/session-health.d.ts +18 -0
  243. package/dist/v2/projections/session-health.js +15 -0
  244. package/dist/v2/read-only/v1-to-v2-shim.d.ts +3 -0
  245. package/dist/v2/read-only/v1-to-v2-shim.js +38 -0
  246. package/package.json +35 -10
  247. package/spec/mcp-api-v1.0.md +5 -5
  248. package/web/assets/services/data-normalizer.js +17 -2
  249. package/web/assets/services/pattern-recognizer.js +3 -1
  250. package/web/assets/services/session-data.js +13 -8
  251. package/web/assets/utils/formatters.js +34 -23
  252. package/workflows/CHANGELOG-bug-investigation.md +4 -4
  253. package/workflows/bug-investigation.agentic.json +156 -56
  254. package/workflows/coding-task-workflow-agentic.json +262 -0
  255. package/workflows/design-thinking-workflow-autonomous.agentic.json +215 -0
  256. package/workflows/design-thinking-workflow.json +198 -0
  257. package/workflows/mr-review-workflow.agentic.json +538 -0
  258. package/workflows/routines/context-gathering.json +0 -4
  259. package/workflows/routines/ideation.json +73 -0
  260. package/dist/application/app.d.ts +0 -29
  261. package/dist/application/app.d.ts.map +0 -1
  262. package/dist/application/app.js +0 -114
  263. package/dist/application/app.js.map +0 -1
  264. package/dist/application/decorators/simple-output-decorator.d.ts +0 -8
  265. package/dist/application/decorators/simple-output-decorator.js +0 -89
  266. package/dist/application/services/classification-engine.d.ts +0 -33
  267. package/dist/application/services/classification-engine.js +0 -258
  268. package/dist/application/services/compression-service.d.ts +0 -20
  269. package/dist/application/services/compression-service.js +0 -312
  270. package/dist/application/services/context-management-service.d.ts +0 -38
  271. package/dist/application/services/context-management-service.js +0 -301
  272. package/dist/application/services/context-optimizer.d.ts +0 -11
  273. package/dist/application/services/context-optimizer.js +0 -62
  274. package/dist/application/services/context-persistence-service.d.ts +0 -45
  275. package/dist/application/services/context-persistence-service.js +0 -273
  276. package/dist/application/services/documentation-service.d.ts +0 -20
  277. package/dist/application/services/documentation-service.js +0 -155
  278. package/dist/application/services/enhanced-error-service.d.ts.map +0 -1
  279. package/dist/application/services/enhanced-error-service.js.map +0 -1
  280. package/dist/application/services/loop-context-optimizer.d.ts +0 -8
  281. package/dist/application/services/loop-context-optimizer.js +0 -114
  282. package/dist/application/services/loop-execution-context.d.ts +0 -23
  283. package/dist/application/services/loop-execution-context.js +0 -188
  284. package/dist/application/services/loop-step-resolver.d.ts +0 -11
  285. package/dist/application/services/loop-step-resolver.js +0 -70
  286. package/dist/application/services/validation-engine.d.ts.map +0 -1
  287. package/dist/application/services/validation-engine.js.map +0 -1
  288. package/dist/application/services/workflow-service.d.ts.map +0 -1
  289. package/dist/application/services/workflow-service.js.map +0 -1
  290. package/dist/application/use-cases/get-next-step.d.ts.map +0 -1
  291. package/dist/application/use-cases/get-next-step.js.map +0 -1
  292. package/dist/application/use-cases/get-workflow-docs.d.ts +0 -4
  293. package/dist/application/use-cases/get-workflow-docs.js +0 -12
  294. package/dist/application/use-cases/get-workflow.d.ts.map +0 -1
  295. package/dist/application/use-cases/get-workflow.js.map +0 -1
  296. package/dist/application/use-cases/get-workrail-help.d.ts +0 -4
  297. package/dist/application/use-cases/get-workrail-help.js +0 -12
  298. package/dist/application/use-cases/list-workflows.d.ts.map +0 -1
  299. package/dist/application/use-cases/list-workflows.js.map +0 -1
  300. package/dist/application/use-cases/validate-step-output.d.ts.map +0 -1
  301. package/dist/application/use-cases/validate-step-output.js.map +0 -1
  302. package/dist/application/use-cases/validate-workflow-json.d.ts.map +0 -1
  303. package/dist/application/use-cases/validate-workflow-json.js.map +0 -1
  304. package/dist/application/validation.d.ts.map +0 -1
  305. package/dist/application/validation.js.map +0 -1
  306. package/dist/cli/migrate-workflow.d.ts +0 -22
  307. package/dist/cli/migrate-workflow.js +0 -196
  308. package/dist/cli.d.ts.map +0 -1
  309. package/dist/cli.js.map +0 -1
  310. package/dist/container.d.ts +0 -15
  311. package/dist/container.d.ts.map +0 -1
  312. package/dist/container.js +0 -25
  313. package/dist/container.js.map +0 -1
  314. package/dist/core/error-handler.d.ts.map +0 -1
  315. package/dist/core/error-handler.js.map +0 -1
  316. package/dist/domain/index.d.ts +0 -2
  317. package/dist/domain/index.d.ts.map +0 -1
  318. package/dist/domain/index.js +0 -18
  319. package/dist/domain/index.js.map +0 -1
  320. package/dist/index.d.ts.map +0 -1
  321. package/dist/index.js.map +0 -1
  322. package/dist/infrastructure/index.d.ts.map +0 -1
  323. package/dist/infrastructure/index.js.map +0 -1
  324. package/dist/infrastructure/rpc/handler.d.ts +0 -17
  325. package/dist/infrastructure/rpc/handler.d.ts.map +0 -1
  326. package/dist/infrastructure/rpc/handler.js +0 -78
  327. package/dist/infrastructure/rpc/handler.js.map +0 -1
  328. package/dist/infrastructure/rpc/index.d.ts +0 -1
  329. package/dist/infrastructure/rpc/index.d.ts.map +0 -1
  330. package/dist/infrastructure/rpc/index.js +0 -17
  331. package/dist/infrastructure/rpc/index.js.map +0 -1
  332. package/dist/infrastructure/rpc/server.d.ts +0 -3
  333. package/dist/infrastructure/rpc/server.d.ts.map +0 -1
  334. package/dist/infrastructure/rpc/server.js +0 -37
  335. package/dist/infrastructure/rpc/server.js.map +0 -1
  336. package/dist/infrastructure/storage/caching-workflow-storage.d.ts.map +0 -1
  337. package/dist/infrastructure/storage/caching-workflow-storage.js.map +0 -1
  338. package/dist/infrastructure/storage/context-storage.d.ts +0 -150
  339. package/dist/infrastructure/storage/context-storage.js +0 -40
  340. package/dist/infrastructure/storage/file-workflow-storage.d.ts.map +0 -1
  341. package/dist/infrastructure/storage/file-workflow-storage.js.map +0 -1
  342. package/dist/infrastructure/storage/filesystem-blob-storage.d.ts +0 -27
  343. package/dist/infrastructure/storage/filesystem-blob-storage.js +0 -363
  344. package/dist/infrastructure/storage/git-workflow-storage.d.ts.map +0 -1
  345. package/dist/infrastructure/storage/git-workflow-storage.js.map +0 -1
  346. package/dist/infrastructure/storage/hybrid-context-storage.d.ts +0 -29
  347. package/dist/infrastructure/storage/hybrid-context-storage.js +0 -400
  348. package/dist/infrastructure/storage/in-memory-storage.d.ts.map +0 -1
  349. package/dist/infrastructure/storage/in-memory-storage.js.map +0 -1
  350. package/dist/infrastructure/storage/index.d.ts.map +0 -1
  351. package/dist/infrastructure/storage/index.js.map +0 -1
  352. package/dist/infrastructure/storage/migrations/001_initial_schema.sql +0 -38
  353. package/dist/infrastructure/storage/migrations/002_context_concurrency_enhancements.sql +0 -234
  354. package/dist/infrastructure/storage/migrations/003_classification_overrides.sql +0 -20
  355. package/dist/infrastructure/storage/multi-directory-workflow-storage.d.ts +0 -32
  356. package/dist/infrastructure/storage/multi-directory-workflow-storage.d.ts.map +0 -1
  357. package/dist/infrastructure/storage/multi-directory-workflow-storage.js +0 -184
  358. package/dist/infrastructure/storage/multi-directory-workflow-storage.js.map +0 -1
  359. package/dist/infrastructure/storage/plugin-workflow-storage.d.ts.map +0 -1
  360. package/dist/infrastructure/storage/plugin-workflow-storage.js.map +0 -1
  361. package/dist/infrastructure/storage/remote-workflow-storage.d.ts.map +0 -1
  362. package/dist/infrastructure/storage/remote-workflow-storage.js.map +0 -1
  363. package/dist/infrastructure/storage/schema-validating-workflow-storage.d.ts.map +0 -1
  364. package/dist/infrastructure/storage/schema-validating-workflow-storage.js.map +0 -1
  365. package/dist/infrastructure/storage/sqlite-metadata-storage.d.ts +0 -35
  366. package/dist/infrastructure/storage/sqlite-metadata-storage.js +0 -410
  367. package/dist/infrastructure/storage/sqlite-migrator.d.ts +0 -46
  368. package/dist/infrastructure/storage/sqlite-migrator.js +0 -293
  369. package/dist/infrastructure/storage/storage.d.ts.map +0 -1
  370. package/dist/infrastructure/storage/storage.js.map +0 -1
  371. package/dist/mcp-server.d.ts.map +0 -1
  372. package/dist/mcp-server.js.map +0 -1
  373. package/dist/tools/mcp_initialize.d.ts +0 -2
  374. package/dist/tools/mcp_initialize.d.ts.map +0 -1
  375. package/dist/tools/mcp_initialize.js +0 -45
  376. package/dist/tools/mcp_initialize.js.map +0 -1
  377. package/dist/tools/mcp_shutdown.d.ts +0 -2
  378. package/dist/tools/mcp_shutdown.d.ts.map +0 -1
  379. package/dist/tools/mcp_shutdown.js +0 -10
  380. package/dist/tools/mcp_shutdown.js.map +0 -1
  381. package/dist/tools/mcp_tools_list.d.ts +0 -2
  382. package/dist/tools/mcp_tools_list.d.ts.map +0 -1
  383. package/dist/tools/mcp_tools_list.js +0 -60
  384. package/dist/tools/mcp_tools_list.js.map +0 -1
  385. package/dist/tools/session-tools.d.ts +0 -5
  386. package/dist/tools/session-tools.js +0 -270
  387. package/dist/types/context-types.d.ts +0 -236
  388. package/dist/types/context-types.js +0 -10
  389. package/dist/types/documentation-types.d.ts +0 -37
  390. package/dist/types/loop-context-optimizer.d.ts +0 -7
  391. package/dist/types/mcp-types.d.ts +0 -273
  392. package/dist/types/mcp-types.d.ts.map +0 -1
  393. package/dist/types/mcp-types.js +0 -19
  394. package/dist/types/mcp-types.js.map +0 -1
  395. package/dist/types/server.d.ts.map +0 -1
  396. package/dist/types/server.js.map +0 -1
  397. package/dist/types/storage.d.ts.map +0 -1
  398. package/dist/types/storage.js.map +0 -1
  399. package/dist/types/workflow-types.d.ts +0 -336
  400. package/dist/types/workflow-types.d.ts.map +0 -1
  401. package/dist/types/workflow-types.js +0 -20
  402. package/dist/types/workflow-types.js.map +0 -1
  403. package/dist/utils/condition-evaluator.d.ts.map +0 -1
  404. package/dist/utils/condition-evaluator.js.map +0 -1
  405. package/dist/utils/config.d.ts +0 -149
  406. package/dist/utils/config.d.ts.map +0 -1
  407. package/dist/utils/config.js +0 -251
  408. package/dist/utils/config.js.map +0 -1
  409. package/dist/utils/storage-security.d.ts.map +0 -1
  410. package/dist/utils/storage-security.js.map +0 -1
  411. package/dist/validation/request-validator.d.ts +0 -8
  412. package/dist/validation/request-validator.d.ts.map +0 -1
  413. package/dist/validation/request-validator.js +0 -32
  414. package/dist/validation/request-validator.js.map +0 -1
  415. package/dist/validation/response-validator.d.ts +0 -8
  416. package/dist/validation/response-validator.d.ts.map +0 -1
  417. package/dist/validation/response-validator.js +0 -110
  418. package/dist/validation/response-validator.js.map +0 -1
  419. package/dist/validation/schemas.d.ts +0 -1
  420. package/dist/validation/schemas.d.ts.map +0 -1
  421. package/dist/validation/schemas.js +0 -53
  422. package/dist/validation/schemas.js.map +0 -1
  423. /package/dist/{types/documentation-types.js → errors/app-error.js} +0 -0
  424. /package/dist/{types/loop-context-optimizer.js → runtime/brand.js} +0 -0
@@ -0,0 +1,4 @@
1
+ export type { ExitCode } from './exit-code.js';
2
+ export { toProcessExitCode, toNumericExitCode } from './exit-code.js';
3
+ export type { CliOutput, CliResult } from './cli-result.js';
4
+ export { success, successMessage, failure, misuse } from './cli-result.js';
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.misuse = exports.failure = exports.successMessage = exports.success = exports.toNumericExitCode = exports.toProcessExitCode = void 0;
4
+ var exit_code_js_1 = require("./exit-code.js");
5
+ Object.defineProperty(exports, "toProcessExitCode", { enumerable: true, get: function () { return exit_code_js_1.toProcessExitCode; } });
6
+ Object.defineProperty(exports, "toNumericExitCode", { enumerable: true, get: function () { return exit_code_js_1.toNumericExitCode; } });
7
+ var cli_result_js_1 = require("./cli-result.js");
8
+ Object.defineProperty(exports, "success", { enumerable: true, get: function () { return cli_result_js_1.success; } });
9
+ Object.defineProperty(exports, "successMessage", { enumerable: true, get: function () { return cli_result_js_1.successMessage; } });
10
+ Object.defineProperty(exports, "failure", { enumerable: true, get: function () { return cli_result_js_1.failure; } });
11
+ Object.defineProperty(exports, "misuse", { enumerable: true, get: function () { return cli_result_js_1.misuse; } });
package/dist/cli.js CHANGED
@@ -1,38 +1,5 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
3
  var __importDefault = (this && this.__importDefault) || function (mod) {
37
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
5
  };
@@ -40,14 +7,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
40
7
  const commander_1 = require("commander");
41
8
  const fs_1 = __importDefault(require("fs"));
42
9
  const path_1 = __importDefault(require("path"));
43
- const chalk_1 = __importDefault(require("chalk"));
44
10
  const os_1 = __importDefault(require("os"));
45
- const server_1 = require("./infrastructure/rpc/server");
46
- const workflow_service_1 = require("./application/services/workflow-service");
47
- const validation_engine_1 = require("./application/services/validation-engine");
48
- const multi_directory_workflow_storage_1 = require("./infrastructure/storage/multi-directory-workflow-storage");
49
- const migrate_workflow_1 = require("./cli/migrate-workflow");
50
- const index_js_1 = require("./infrastructure/session/index.js");
11
+ const container_js_1 = require("./di/container.js");
12
+ const tokens_js_1 = require("./di/tokens.js");
13
+ const server_js_1 = require("./mcp/server.js");
14
+ const workflow_js_1 = require("./types/workflow.js");
15
+ const validation_js_1 = require("./application/validation.js");
16
+ const validate_workflow_file_js_1 = require("./application/use-cases/validate-workflow-file.js");
17
+ const interpret_result_js_1 = require("./cli/interpret-result.js");
18
+ const index_js_1 = require("./cli/commands/index.js");
51
19
  const program = new commander_1.Command();
52
20
  program
53
21
  .name('workrail')
@@ -57,270 +25,108 @@ program
57
25
  .command('init')
58
26
  .description('Initialize user workflow directory with sample workflows')
59
27
  .action(async () => {
60
- try {
61
- console.log(chalk_1.default.blue('🚀 Initializing user workflow directory...'));
62
- const userDir = await (0, multi_directory_workflow_storage_1.initializeUserWorkflowDirectory)();
63
- console.log(chalk_1.default.green('✅ User workflow directory initialized:'));
64
- console.log(chalk_1.default.cyan(` ${userDir}`));
65
- console.log();
66
- console.log(chalk_1.default.yellow('📝 Getting started:'));
67
- console.log(chalk_1.default.white('1. Edit the sample workflow in the directory above'));
68
- console.log(chalk_1.default.white('2. Create new workflow JSON files following the schema'));
69
- console.log(chalk_1.default.white('3. Run "workrail list" to see your workflows'));
70
- console.log(chalk_1.default.white('4. Use your workflows with any MCP-enabled AI assistant'));
71
- console.log();
72
- console.log(chalk_1.default.gray('💡 Tip: Use "workrail validate <file>" to check your workflow syntax'));
73
- }
74
- catch (error) {
75
- console.error(chalk_1.default.red('❌ Failed to initialize user workflow directory:'));
76
- console.error(chalk_1.default.red(error.message));
77
- process.exit(1);
78
- }
28
+ const result = await (0, index_js_1.executeInitCommand)({
29
+ mkdir: (p, opts) => fs_1.default.promises.mkdir(p, opts),
30
+ readdir: (p) => fs_1.default.promises.readdir(p),
31
+ writeFile: (p, content) => fs_1.default.promises.writeFile(p, content, 'utf-8'),
32
+ homedir: os_1.default.homedir,
33
+ joinPath: path_1.default.join,
34
+ });
35
+ (0, interpret_result_js_1.interpretCliResultWithoutDI)(result);
36
+ });
37
+ program
38
+ .command('sources')
39
+ .description('Show workflow directory sources and their status')
40
+ .action(() => {
41
+ const result = (0, index_js_1.executeSourcesCommand)({
42
+ resolvePath: path_1.default.resolve,
43
+ existsSync: fs_1.default.existsSync,
44
+ readdirSync: fs_1.default.readdirSync,
45
+ homedir: os_1.default.homedir,
46
+ cwd: process.cwd,
47
+ dirname: __dirname,
48
+ pathDelimiter: path_1.default.delimiter,
49
+ env: process.env,
50
+ });
51
+ (0, interpret_result_js_1.interpretCliResultWithoutDI)(result);
79
52
  });
80
53
  program
81
54
  .command('list')
82
55
  .description('List all available workflows from all sources')
83
56
  .option('-v, --verbose', 'Show detailed information including sources')
84
57
  .action(async (options) => {
85
- try {
86
- console.log(chalk_1.default.blue('📋 Available workflows:'));
87
- console.log();
88
- const workflowService = new workflow_service_1.DefaultWorkflowService();
89
- const workflows = await workflowService.listWorkflowSummaries();
90
- if (workflows.length === 0) {
91
- console.log(chalk_1.default.yellow(' No workflows found.'));
92
- console.log(chalk_1.default.gray(' Run "workrail init" to create your first workflow.'));
93
- return;
94
- }
95
- workflows.forEach((workflow, index) => {
96
- console.log(chalk_1.default.green(`${index + 1}. ${workflow.name}`));
97
- console.log(chalk_1.default.white(` ID: ${workflow.id}`));
98
- console.log(chalk_1.default.gray(` ${workflow.description}`));
99
- if (options.verbose) {
100
- console.log(chalk_1.default.cyan(` Version: ${workflow.version}`));
101
- }
102
- console.log();
103
- });
104
- console.log(chalk_1.default.gray(`Total: ${workflows.length} workflows`));
105
- }
106
- catch (error) {
107
- console.error(chalk_1.default.red('❌ Failed to list workflows:'));
108
- console.error(chalk_1.default.red(error.message));
109
- process.exit(1);
110
- }
111
- });
112
- program
113
- .command('sources')
114
- .description('Show workflow directory sources and their status')
115
- .action(async () => {
116
- try {
117
- console.log(chalk_1.default.blue('📂 Workflow directory sources:'));
118
- console.log();
119
- const sources = [
120
- {
121
- name: 'Bundled Workflows',
122
- path: path_1.default.resolve(__dirname, '../workflows'),
123
- type: 'bundled',
124
- description: 'Pre-built workflows included with WorkRail'
125
- },
126
- {
127
- name: 'User Workflows',
128
- path: path_1.default.join(os_1.default.homedir(), '.workrail', 'workflows'),
129
- type: 'user',
130
- description: 'Your personal workflow collection'
131
- },
132
- {
133
- name: 'Project Workflows',
134
- path: path_1.default.resolve(process.cwd(), 'workflows'),
135
- type: 'project',
136
- description: 'Project-specific workflows'
137
- }
138
- ];
139
- const envPaths = process.env['WORKFLOW_STORAGE_PATH'];
140
- if (envPaths) {
141
- const customPaths = envPaths.split(path_1.default.delimiter);
142
- customPaths.forEach((customPath, index) => {
143
- sources.push({
144
- name: `Custom Path ${index + 1}`,
145
- path: path_1.default.resolve(customPath.trim()),
146
- type: 'custom',
147
- description: 'Custom workflow directory'
148
- });
149
- });
150
- }
151
- sources.forEach((source, index) => {
152
- const exists = fs_1.default.existsSync(source.path);
153
- const icon = exists ? '✅' : '❌';
154
- const status = exists ? 'Found' : 'Not found';
155
- console.log(chalk_1.default.white(`${index + 1}. ${source.name} ${icon}`));
156
- console.log(chalk_1.default.gray(` Path: ${source.path}`));
157
- console.log(chalk_1.default.gray(` Status: ${status}`));
158
- console.log(chalk_1.default.gray(` ${source.description}`));
159
- if (exists) {
160
- try {
161
- const files = fs_1.default.readdirSync(source.path).filter(f => f.endsWith('.json'));
162
- console.log(chalk_1.default.cyan(` Workflows: ${files.length} files`));
163
- }
164
- catch (error) {
165
- console.log(chalk_1.default.red(` Error reading directory`));
166
- }
167
- }
168
- console.log();
169
- });
170
- console.log(chalk_1.default.yellow('💡 Tips:'));
171
- console.log(chalk_1.default.white('• Run "workrail init" to create the user workflow directory'));
172
- console.log(chalk_1.default.white('• Set WORKFLOW_STORAGE_PATH to add custom directories'));
173
- console.log(chalk_1.default.white('• Use colon-separated paths for multiple custom directories'));
174
- }
175
- catch (error) {
176
- console.error(chalk_1.default.red('❌ Failed to check workflow sources:'));
177
- console.error(chalk_1.default.red(error.message));
178
- process.exit(1);
179
- }
58
+ await (0, container_js_1.initializeContainer)({ runtimeMode: { kind: 'cli' } });
59
+ const terminator = container_js_1.container.resolve(tokens_js_1.DI.Runtime.ProcessTerminator);
60
+ const workflowService = container_js_1.container.resolve(tokens_js_1.DI.Services.Workflow);
61
+ const result = await (0, index_js_1.executeListCommand)({ listWorkflowSummaries: () => workflowService.listWorkflowSummaries() }, { verbose: options.verbose });
62
+ (0, interpret_result_js_1.interpretCliResult)(result, terminator);
180
63
  });
181
- async function validateWorkflowFile(filePath) {
182
- try {
183
- const resolvedPath = path_1.default.resolve(filePath);
184
- if (!fs_1.default.existsSync(resolvedPath)) {
185
- console.error(chalk_1.default.red('❌ Error: File not found:'), filePath);
186
- console.error(chalk_1.default.yellow('\nPlease check the file path and try again.'));
187
- process.exit(1);
188
- }
189
- let content;
190
- try {
191
- content = fs_1.default.readFileSync(resolvedPath, 'utf-8');
192
- }
193
- catch (error) {
194
- if (error.code === 'EACCES') {
195
- console.error(chalk_1.default.red('❌ Error: Permission denied:'), filePath);
196
- console.error(chalk_1.default.yellow('\nPlease check file permissions and try again.'));
197
- }
198
- else {
199
- console.error(chalk_1.default.red('❌ Error reading file:'), filePath);
200
- console.error(chalk_1.default.yellow(`\n${error.message}`));
201
- }
202
- process.exit(1);
203
- }
204
- let workflow;
205
- try {
206
- workflow = JSON.parse(content);
207
- }
208
- catch (error) {
209
- console.error(chalk_1.default.red('❌ Error: Invalid JSON syntax in'), filePath);
210
- console.error(chalk_1.default.yellow(`\n${error.message}`));
211
- console.error(chalk_1.default.yellow('\nPlease check the JSON syntax and try again.'));
212
- process.exit(1);
213
- }
214
- const { validateWorkflow: schemaValidate } = await Promise.resolve().then(() => __importStar(require('./application/validation')));
215
- const schemaResult = schemaValidate(workflow);
216
- if (!schemaResult.valid) {
217
- console.error(chalk_1.default.red('❌ Workflow validation failed:'), filePath);
218
- console.error(chalk_1.default.yellow('\nValidation errors:'));
219
- schemaResult.errors.forEach(error => {
220
- console.error(chalk_1.default.red(' •'), error);
221
- });
222
- console.error(chalk_1.default.yellow('\nPlease fix the errors above and try again.'));
223
- process.exit(1);
224
- }
225
- const validationEngine = new validation_engine_1.ValidationEngine();
226
- const result = validationEngine.validateWorkflow(workflow);
227
- if (result.valid && !result.warnings?.length && !result.info?.length) {
228
- console.log(chalk_1.default.green('✅ Workflow is valid:'), filePath);
229
- }
230
- else if (result.valid) {
231
- console.log(chalk_1.default.green('✅ Workflow is valid with warnings:'), filePath);
232
- if (result.warnings && result.warnings.length > 0) {
233
- console.log(chalk_1.default.yellow('\n⚠️ Warnings:'));
234
- result.warnings.forEach(warning => {
235
- console.log(chalk_1.default.yellow(' •'), warning);
236
- });
237
- }
238
- if (result.info && result.info.length > 0) {
239
- console.log(chalk_1.default.blue('\nℹ️ Information:'));
240
- result.info.forEach(info => {
241
- console.log(chalk_1.default.blue(' •'), info);
242
- });
243
- }
244
- if (result.suggestions && result.suggestions.length > 0) {
245
- console.log(chalk_1.default.gray('\n💡 Suggestions:'));
246
- result.suggestions.forEach(suggestion => {
247
- console.log(chalk_1.default.gray(' •'), suggestion);
248
- });
249
- }
250
- }
251
- else {
252
- console.error(chalk_1.default.red('❌ Workflow validation failed:'), filePath);
253
- console.error(chalk_1.default.yellow('\nValidation errors:'));
254
- result.issues.forEach(error => {
255
- console.error(chalk_1.default.red(' •'), error);
256
- });
257
- console.error(chalk_1.default.yellow(`\nFound ${result.issues.length} validation error${result.issues.length === 1 ? '' : 's'}.`));
258
- if (result.suggestions && result.suggestions.length > 0) {
259
- console.log(chalk_1.default.gray('\n💡 Suggestions:'));
260
- result.suggestions.forEach(suggestion => {
261
- console.log(chalk_1.default.gray(' •'), suggestion);
262
- });
263
- }
264
- process.exit(1);
265
- }
266
- }
267
- catch (error) {
268
- console.error(chalk_1.default.red('❌ Unexpected error:'), error.message);
269
- process.exit(1);
270
- }
271
- }
272
64
  program
273
65
  .command('validate <file>')
274
66
  .description('Validate a workflow file against the schema')
275
- .action(validateWorkflowFile);
67
+ .action(async (filePath) => {
68
+ await (0, container_js_1.initializeContainer)({ runtimeMode: { kind: 'cli' } });
69
+ const terminator = container_js_1.container.resolve(tokens_js_1.DI.Runtime.ProcessTerminator);
70
+ const validationEngine = container_js_1.container.resolve(tokens_js_1.DI.Infra.ValidationEngine);
71
+ const validateWorkflowFile = (0, validate_workflow_file_js_1.createValidateWorkflowFileUseCase)({
72
+ resolvePath: path_1.default.resolve,
73
+ existsSync: fs_1.default.existsSync,
74
+ readFileSyncUtf8: (resolvedPath) => fs_1.default.readFileSync(resolvedPath, 'utf-8'),
75
+ parseJson: (content) => JSON.parse(content),
76
+ schemaValidate: (definition) => (0, validation_js_1.validateWorkflow)(definition),
77
+ makeRuntimeWorkflow: (definition, resolvedPath) => (0, workflow_js_1.createWorkflow)(definition, (0, workflow_js_1.createCustomDirectorySource)(path_1.default.dirname(resolvedPath), 'CLI Validate')),
78
+ validateRuntimeWorkflow: (workflow) => validationEngine.validateWorkflow(workflow),
79
+ });
80
+ const result = (0, index_js_1.executeValidateCommand)(filePath, { validateWorkflowFile });
81
+ (0, interpret_result_js_1.interpretCliResult)(result, terminator);
82
+ });
276
83
  program
277
84
  .command('migrate <file>')
278
85
  .description('Migrate a workflow from v0.0.1 to v0.1.0')
279
86
  .option('-o, --output <path>', 'Output file path (defaults to input file)')
280
87
  .option('-d, --dry-run', 'Show what would be changed without modifying files')
281
88
  .option('-b, --backup', 'Create a backup when overwriting the input file')
282
- .option('-q, --quiet', 'Suppress output except errors')
283
- .action(migrate_workflow_1.handleMigrationCommand);
89
+ .action(async (filePath, options) => {
90
+ await (0, container_js_1.initializeContainer)({ runtimeMode: { kind: 'cli' } });
91
+ const terminator = container_js_1.container.resolve(tokens_js_1.DI.Runtime.ProcessTerminator);
92
+ const result = await (0, index_js_1.executeMigrateCommand)(filePath, {
93
+ output: options.output,
94
+ dryRun: options.dryRun,
95
+ backup: options.backup,
96
+ }, {
97
+ readFile: (p) => fs_1.default.promises.readFile(p, 'utf-8'),
98
+ writeFile: (p, content) => fs_1.default.promises.writeFile(p, content, 'utf-8'),
99
+ copyFile: (src, dest) => fs_1.default.promises.copyFile(src, dest),
100
+ });
101
+ (0, interpret_result_js_1.interpretCliResult)(result, terminator);
102
+ });
284
103
  program
285
104
  .command('start')
286
105
  .description('Start the MCP server')
287
106
  .action(async () => {
288
- try {
289
- console.log(chalk_1.default.blue('🚀 Starting WorkRail MCP server...'));
290
- const workflowService = new workflow_service_1.DefaultWorkflowService();
291
- const server = (0, server_1.createWorkflowLookupServer)(workflowService);
292
- await server.start();
293
- }
294
- catch (error) {
295
- console.error(chalk_1.default.red('❌ Failed to start server:'), error.message);
296
- process.exit(1);
297
- }
107
+ await (0, container_js_1.initializeContainer)({ runtimeMode: { kind: 'cli' } });
108
+ const terminator = container_js_1.container.resolve(tokens_js_1.DI.Runtime.ProcessTerminator);
109
+ const result = await (0, index_js_1.executeStartCommand)({
110
+ createServer: () => ({ start: () => (0, server_js_1.startServer)() }),
111
+ });
112
+ (0, interpret_result_js_1.interpretCliResult)(result, terminator);
298
113
  });
299
114
  program
300
115
  .command('cleanup')
301
116
  .description('Clean up orphaned workrail processes and free up ports')
302
117
  .option('-f, --force', 'Force cleanup without confirmation')
303
118
  .action(async (options) => {
304
- try {
305
- console.log(chalk_1.default.blue('🧹 Cleaning up orphaned workrail processes...'));
306
- if (!options.force) {
307
- console.log(chalk_1.default.yellow('⚠️ This will terminate all workrail dashboard processes'));
308
- console.log(chalk_1.default.yellow(' Press Ctrl+C to cancel, or wait 3 seconds to continue...'));
309
- await new Promise(resolve => setTimeout(resolve, 3000));
310
- }
311
- const sessionManager = new index_js_1.SessionManager();
312
- const httpServer = new index_js_1.HttpServer(sessionManager);
313
- const count = await httpServer.fullCleanup();
314
- if (count > 0) {
315
- console.log(chalk_1.default.green(`✅ Cleaned up ${count} orphaned process(es)`));
316
- }
317
- else {
318
- console.log(chalk_1.default.green('✅ No orphaned processes found'));
319
- }
320
- }
321
- catch (error) {
322
- console.error(chalk_1.default.red('❌ Cleanup failed:'), error.message);
323
- process.exit(1);
119
+ if (!options.force) {
120
+ console.error('⚠️ This will terminate all workrail dashboard processes');
121
+ console.error(' Press Ctrl+C to cancel, or wait 3 seconds to continue...');
122
+ await new Promise((resolve) => setTimeout(resolve, 3000));
324
123
  }
124
+ await (0, container_js_1.initializeContainer)({ runtimeMode: { kind: 'cli' } });
125
+ const terminator = container_js_1.container.resolve(tokens_js_1.DI.Runtime.ProcessTerminator);
126
+ const httpServer = container_js_1.container.resolve(tokens_js_1.DI.Infra.HttpServer);
127
+ const result = await (0, index_js_1.executeCleanupCommand)({
128
+ fullCleanup: () => httpServer.fullCleanup(),
129
+ });
130
+ (0, interpret_result_js_1.interpretCliResult)(result, terminator);
325
131
  });
326
132
  program.parse();
@@ -0,0 +1,40 @@
1
+ import type { Result } from '../runtime/result.js';
2
+ import type { Brand } from '../runtime/brand.js';
3
+ import { Err } from '../errors/factories.js';
4
+ import type { ValidatedAppConfig } from '../errors/app-error.js';
5
+ export type CacheTtlMs = Brand<number, 'CacheTtlMs'>;
6
+ export type ProjectPath = Brand<string, 'ProjectPath'>;
7
+ export type WorkflowDir = Brand<string, 'WorkflowDir'>;
8
+ export type DashboardPort = Brand<number, 'DashboardPort'>;
9
+ export type DashboardMode = {
10
+ readonly kind: 'unified';
11
+ } | {
12
+ readonly kind: 'legacy';
13
+ };
14
+ export type BrowserBehavior = {
15
+ readonly kind: 'auto_open';
16
+ } | {
17
+ readonly kind: 'manual';
18
+ };
19
+ export interface AppConfig {
20
+ readonly cache: {
21
+ readonly ttlMs: CacheTtlMs;
22
+ };
23
+ readonly paths: {
24
+ readonly projectPath: ProjectPath;
25
+ readonly workflowDir: WorkflowDir;
26
+ };
27
+ readonly dashboard: {
28
+ readonly mode: DashboardMode;
29
+ readonly browserBehavior: BrowserBehavior;
30
+ readonly port: DashboardPort;
31
+ };
32
+ }
33
+ export type ValidatedConfig = ValidatedAppConfig<AppConfig>;
34
+ export interface LoadConfigOptions {
35
+ readonly env: Record<string, string | undefined>;
36
+ readonly projectPath: string;
37
+ }
38
+ export type LoadConfigResult = Result<ValidatedConfig, ReturnType<typeof Err.configInvalid>>;
39
+ export declare function loadConfig(options: LoadConfigOptions): LoadConfigResult;
40
+ export declare function createValidatedConfig(value: AppConfig): ValidatedConfig;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadConfig = loadConfig;
4
+ exports.createValidatedConfig = createValidatedConfig;
5
+ const zod_1 = require("zod");
6
+ const result_js_1 = require("../runtime/result.js");
7
+ const factories_js_1 = require("../errors/factories.js");
8
+ const EnvSchema = zod_1.z.object({
9
+ CACHE_TTL: zod_1.z
10
+ .string()
11
+ .optional()
12
+ .transform((v) => (v === undefined ? undefined : Number(v)))
13
+ .pipe(zod_1.z
14
+ .number()
15
+ .min(0, 'CACHE_TTL cannot be negative')
16
+ .max(86400000, 'CACHE_TTL cannot exceed 24 hours (86400000ms)')
17
+ .default(300000)),
18
+ WORKRAIL_WORKFLOWS_DIR: zod_1.z.string().optional(),
19
+ WORKRAIL_DISABLE_UNIFIED_DASHBOARD: zod_1.z.enum(['0', '1']).default('0'),
20
+ WORKRAIL_DISABLE_AUTO_OPEN: zod_1.z.enum(['0', '1']).default('0'),
21
+ WORKRAIL_DASHBOARD_PORT: zod_1.z
22
+ .string()
23
+ .optional()
24
+ .transform((v) => (v === undefined ? undefined : Number(v)))
25
+ .pipe(zod_1.z.number().int().min(1024, 'Port must be >= 1024').max(65535, 'Port must be <= 65535').default(3456)),
26
+ });
27
+ function loadConfig(options) {
28
+ const parsed = EnvSchema.safeParse(options.env);
29
+ if (!parsed.success) {
30
+ return (0, result_js_1.err)(factories_js_1.Err.configInvalid(toConfigIssues(parsed.error)));
31
+ }
32
+ return (0, result_js_1.ok)(buildConfig(parsed.data, options.projectPath));
33
+ }
34
+ function createValidatedConfig(value) {
35
+ return value;
36
+ }
37
+ function buildConfig(env, projectPath) {
38
+ const dashboardMode = env.WORKRAIL_DISABLE_UNIFIED_DASHBOARD === '1' ? { kind: 'legacy' } : { kind: 'unified' };
39
+ const browserBehavior = env.WORKRAIL_DISABLE_AUTO_OPEN === '1' ? { kind: 'manual' } : { kind: 'auto_open' };
40
+ return {
41
+ cache: { ttlMs: env.CACHE_TTL },
42
+ paths: {
43
+ projectPath: projectPath,
44
+ workflowDir: (env.WORKRAIL_WORKFLOWS_DIR ?? projectPath),
45
+ },
46
+ dashboard: {
47
+ mode: dashboardMode,
48
+ browserBehavior,
49
+ port: env.WORKRAIL_DASHBOARD_PORT,
50
+ },
51
+ };
52
+ }
53
+ function toConfigIssues(error) {
54
+ return error.errors.map((issue) => ({
55
+ path: issue.path.length ? issue.path.join('.') : '(root)',
56
+ message: issue.message,
57
+ }));
58
+ }
@@ -18,7 +18,15 @@ export interface IFeatureFlagProvider {
18
18
  }
19
19
  export declare class EnvironmentFeatureFlagProvider implements IFeatureFlagProvider {
20
20
  private readonly flags;
21
- constructor(env?: Record<string, string | undefined>);
21
+ constructor();
22
+ static withEnv(env: Record<string, string | undefined>): IFeatureFlagProvider;
23
+ isEnabled(key: FeatureFlagKey): boolean;
24
+ getAll(): FeatureFlags;
25
+ getSummary(): string;
26
+ }
27
+ export declare class CustomEnvFeatureFlagProvider implements IFeatureFlagProvider {
28
+ private readonly flags;
29
+ constructor(env: Record<string, string | undefined>);
22
30
  isEnabled(key: FeatureFlagKey): boolean;
23
31
  getAll(): FeatureFlags;
24
32
  getSummary(): string;
@@ -30,4 +38,4 @@ export declare class StaticFeatureFlagProvider implements IFeatureFlagProvider {
30
38
  getAll(): FeatureFlags;
31
39
  getSummary(): string;
32
40
  }
33
- export declare function createFeatureFlagProvider(env?: Record<string, string | undefined>): IFeatureFlagProvider;
41
+ export declare function createFeatureFlagProvider(): never;