@kb-labs/rest-api-app 1.3.0 → 1.4.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 (257) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.js +8151 -0
  3. package/dist/index.js.map +1 -0
  4. package/package.json +7 -4
  5. package/.kb/agents/sessions/session-1771531145393-ws3uh6q/turns.json +0 -42
  6. package/.kb/agents/sessions/session-1771548930486-ui6rtvm/turns.json +0 -33
  7. package/.kb/agents/sessions/session-1771549691485-nibqroq/turns.json +0 -133
  8. package/.kb/agents/sessions/session-1771550943182-dkwqdjc/turns.json +0 -130
  9. package/.kb/agents/sessions/session-1771551564182-cr4bwzn/turns.json +0 -349
  10. package/.kb/agents/sessions/session-1771552401370-g4ztwd1/turns.json +0 -206
  11. package/.kb/commit/current/plan.json +0 -248
  12. package/.kb/commit/current/status.json +0 -472
  13. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/health.d.ts +0 -10
  14. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/health.js +0 -215
  15. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/health.js.map +0 -1
  16. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/list.d.ts +0 -10
  17. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/list.js +0 -271
  18. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/list.js.map +0 -1
  19. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/logs.d.ts +0 -10
  20. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/logs.js +0 -230
  21. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/logs.js.map +0 -1
  22. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/metrics.d.ts +0 -10
  23. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/metrics.js +0 -228
  24. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/metrics.js.map +0 -1
  25. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/run.d.ts +0 -11
  26. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/run.js +0 -281
  27. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/run.js.map +0 -1
  28. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/status.d.ts +0 -10
  29. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/status.js +0 -266
  30. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/status.js.map +0 -1
  31. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/workflow-run.d.ts +0 -11
  32. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/workflow-run.js +0 -284
  33. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/commands/workflow-run.js.map +0 -1
  34. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/flags-WLdpSZl4.d.ts +0 -77
  35. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/index.d.ts +0 -2
  36. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/index.js +0 -441
  37. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/index.js.map +0 -1
  38. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/manifest.d.ts +0 -196
  39. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/manifest.js +0 -441
  40. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/manifest.js.map +0 -1
  41. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/cron-list-handler.d.ts +0 -19
  42. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/cron-list-handler.js +0 -48
  43. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/cron-list-handler.js.map +0 -1
  44. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/index.d.ts +0 -6
  45. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/index.js +0 -170
  46. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/index.js.map +0 -1
  47. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/job-cancel-handler.d.ts +0 -12
  48. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/job-cancel-handler.js +0 -52
  49. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/job-cancel-handler.js.map +0 -1
  50. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/job-detail-handler.d.ts +0 -22
  51. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/job-detail-handler.js +0 -52
  52. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/job-detail-handler.js.map +0 -1
  53. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/job-logs-handler.d.ts +0 -13
  54. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/job-logs-handler.js +0 -52
  55. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/job-logs-handler.js.map +0 -1
  56. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/job-steps-handler.d.ts +0 -9
  57. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/job-steps-handler.js +0 -43
  58. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/job-steps-handler.js.map +0 -1
  59. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/jobs-list-handler.d.ts +0 -26
  60. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/jobs-list-handler.js +0 -63
  61. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/jobs-list-handler.js.map +0 -1
  62. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/pending-approvals-handler.d.ts +0 -9
  63. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/pending-approvals-handler.js +0 -46
  64. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/pending-approvals-handler.js.map +0 -1
  65. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/resolve-approval-handler.d.ts +0 -16
  66. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/resolve-approval-handler.js +0 -58
  67. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/resolve-approval-handler.js.map +0 -1
  68. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/run-detail-handler.d.ts +0 -9
  69. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/run-detail-handler.js +0 -46
  70. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/run-detail-handler.js.map +0 -1
  71. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/runs-list-handler.d.ts +0 -11
  72. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/runs-list-handler.js +0 -50
  73. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/runs-list-handler.js.map +0 -1
  74. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/stats-handler.d.ts +0 -7
  75. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/stats-handler.js +0 -39
  76. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/stats-handler.js.map +0 -1
  77. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/workflow-detail-handler.d.ts +0 -10
  78. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/workflow-detail-handler.js +0 -46
  79. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/workflow-detail-handler.js.map +0 -1
  80. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/workflow-run-cancel-handler.d.ts +0 -13
  81. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/workflow-run-cancel-handler.js +0 -47
  82. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/workflow-run-cancel-handler.js.map +0 -1
  83. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/workflow-run-handler.d.ts +0 -14
  84. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/workflow-run-handler.js +0 -53
  85. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/workflow-run-handler.js.map +0 -1
  86. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/workflow-runs-handler.d.ts +0 -13
  87. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/workflow-runs-handler.js +0 -54
  88. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/workflow-runs-handler.js.map +0 -1
  89. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/workflows-list-handler.d.ts +0 -12
  90. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/workflows-list-handler.js +0 -51
  91. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/rest/workflows-list-handler.js.map +0 -1
  92. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/ws/logs-channel.d.ts +0 -17
  93. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/ws/logs-channel.js +0 -133
  94. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/ws/logs-channel.js.map +0 -1
  95. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/ws/progress-channel.d.ts +0 -11
  96. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/ws/progress-channel.js +0 -46
  97. package/.kb/runtime/workspaces/ws_94c2deab-4cf9-49cb-94ac-3958062754a1/ws/progress-channel.js.map +0 -1
  98. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/health.d.ts +0 -10
  99. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/health.js +0 -215
  100. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/health.js.map +0 -1
  101. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/list.d.ts +0 -10
  102. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/list.js +0 -271
  103. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/list.js.map +0 -1
  104. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/logs.d.ts +0 -10
  105. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/logs.js +0 -230
  106. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/logs.js.map +0 -1
  107. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/metrics.d.ts +0 -10
  108. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/metrics.js +0 -228
  109. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/metrics.js.map +0 -1
  110. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/run.d.ts +0 -11
  111. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/run.js +0 -281
  112. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/run.js.map +0 -1
  113. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/status.d.ts +0 -10
  114. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/status.js +0 -266
  115. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/status.js.map +0 -1
  116. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/workflow-run.d.ts +0 -11
  117. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/workflow-run.js +0 -284
  118. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/commands/workflow-run.js.map +0 -1
  119. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/flags-WLdpSZl4.d.ts +0 -77
  120. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/index.d.ts +0 -2
  121. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/index.js +0 -441
  122. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/index.js.map +0 -1
  123. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/manifest.d.ts +0 -196
  124. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/manifest.js +0 -441
  125. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/manifest.js.map +0 -1
  126. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/cron-list-handler.d.ts +0 -19
  127. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/cron-list-handler.js +0 -48
  128. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/cron-list-handler.js.map +0 -1
  129. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/index.d.ts +0 -6
  130. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/index.js +0 -170
  131. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/index.js.map +0 -1
  132. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/job-cancel-handler.d.ts +0 -12
  133. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/job-cancel-handler.js +0 -52
  134. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/job-cancel-handler.js.map +0 -1
  135. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/job-detail-handler.d.ts +0 -22
  136. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/job-detail-handler.js +0 -52
  137. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/job-detail-handler.js.map +0 -1
  138. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/job-logs-handler.d.ts +0 -13
  139. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/job-logs-handler.js +0 -52
  140. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/job-logs-handler.js.map +0 -1
  141. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/job-steps-handler.d.ts +0 -9
  142. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/job-steps-handler.js +0 -43
  143. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/job-steps-handler.js.map +0 -1
  144. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/jobs-list-handler.d.ts +0 -26
  145. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/jobs-list-handler.js +0 -63
  146. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/jobs-list-handler.js.map +0 -1
  147. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/pending-approvals-handler.d.ts +0 -9
  148. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/pending-approvals-handler.js +0 -46
  149. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/pending-approvals-handler.js.map +0 -1
  150. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/resolve-approval-handler.d.ts +0 -16
  151. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/resolve-approval-handler.js +0 -58
  152. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/resolve-approval-handler.js.map +0 -1
  153. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/run-detail-handler.d.ts +0 -9
  154. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/run-detail-handler.js +0 -46
  155. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/run-detail-handler.js.map +0 -1
  156. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/runs-list-handler.d.ts +0 -11
  157. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/runs-list-handler.js +0 -50
  158. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/runs-list-handler.js.map +0 -1
  159. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/stats-handler.d.ts +0 -7
  160. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/stats-handler.js +0 -39
  161. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/stats-handler.js.map +0 -1
  162. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/workflow-detail-handler.d.ts +0 -10
  163. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/workflow-detail-handler.js +0 -46
  164. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/workflow-detail-handler.js.map +0 -1
  165. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/workflow-run-cancel-handler.d.ts +0 -13
  166. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/workflow-run-cancel-handler.js +0 -47
  167. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/workflow-run-cancel-handler.js.map +0 -1
  168. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/workflow-run-handler.d.ts +0 -14
  169. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/workflow-run-handler.js +0 -53
  170. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/workflow-run-handler.js.map +0 -1
  171. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/workflow-runs-handler.d.ts +0 -13
  172. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/workflow-runs-handler.js +0 -54
  173. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/workflow-runs-handler.js.map +0 -1
  174. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/workflows-list-handler.d.ts +0 -12
  175. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/workflows-list-handler.js +0 -51
  176. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/rest/workflows-list-handler.js.map +0 -1
  177. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/ws/logs-channel.d.ts +0 -17
  178. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/ws/logs-channel.js +0 -133
  179. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/ws/logs-channel.js.map +0 -1
  180. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/ws/progress-channel.d.ts +0 -11
  181. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/ws/progress-channel.js +0 -46
  182. package/.kb/runtime/workspaces/ws_f0f301b8-388d-4dc4-b301-475f2bc95f02/ws/progress-channel.js.map +0 -1
  183. package/eslint.config.js +0 -23
  184. package/src/.kb/agents/sessions/session-1773470583796-ximqnfk/kpi-baseline.json +0 -17
  185. package/src/.kb/memory/sessions/session-1773470583796-ximqnfk/fact-sheet.json +0 -1
  186. package/src/bootstrap.ts +0 -233
  187. package/src/diagnostics/header-debug.ts +0 -37
  188. package/src/events/hub.ts +0 -60
  189. package/src/events/index.ts +0 -1
  190. package/src/index.ts +0 -13
  191. package/src/manifest.ts +0 -21
  192. package/src/middleware/__tests__/cache.spec.ts +0 -184
  193. package/src/middleware/__tests__/envelope.spec.ts +0 -268
  194. package/src/middleware/__tests__/metrics.redis.spec.ts +0 -64
  195. package/src/middleware/__tests__/rate-limit.spec.ts +0 -283
  196. package/src/middleware/__tests__/request-id.spec.ts +0 -160
  197. package/src/middleware/cache.ts +0 -67
  198. package/src/middleware/envelope.ts +0 -136
  199. package/src/middleware/error-guard.ts +0 -69
  200. package/src/middleware/index.ts +0 -37
  201. package/src/middleware/metrics.ts +0 -810
  202. package/src/middleware/mock-mode.ts +0 -44
  203. package/src/middleware/prom-metrics.ts +0 -284
  204. package/src/middleware/rate-limit-routes.ts +0 -73
  205. package/src/middleware/rate-limit.ts +0 -72
  206. package/src/middleware/request-id.ts +0 -41
  207. package/src/middleware/request-timeout.ts +0 -69
  208. package/src/middleware/security-headers.ts +0 -24
  209. package/src/middleware/startup-guard.ts +0 -107
  210. package/src/observability/service-contract.ts +0 -192
  211. package/src/plugins/index.ts +0 -118
  212. package/src/routes/__tests__/adapters-date-helpers.spec.ts +0 -332
  213. package/src/routes/__tests__/adapters.spec.ts +0 -680
  214. package/src/routes/__tests__/cache.spec.ts +0 -264
  215. package/src/routes/__tests__/events.spec.ts +0 -434
  216. package/src/routes/__tests__/health.spec.ts +0 -414
  217. package/src/routes/__tests__/logs.spec.ts +0 -494
  218. package/src/routes/__tests__/observability.spec.ts +0 -392
  219. package/src/routes/__tests__/plugins.spec.ts +0 -931
  220. package/src/routes/__tests__/workflow-management.spec.ts +0 -698
  221. package/src/routes/__tests__/workflows.spec.ts +0 -204
  222. package/src/routes/adapter-call.ts +0 -220
  223. package/src/routes/adapters.ts +0 -1206
  224. package/src/routes/analytics.ts +0 -328
  225. package/src/routes/cache.ts +0 -104
  226. package/src/routes/debug-routes.ts +0 -95
  227. package/src/routes/events.ts +0 -115
  228. package/src/routes/health.ts +0 -348
  229. package/src/routes/hello.ts +0 -47
  230. package/src/routes/index.ts +0 -395
  231. package/src/routes/jobs.ts +0 -253
  232. package/src/routes/logs.ts +0 -718
  233. package/src/routes/metrics.ts +0 -120
  234. package/src/routes/observability.ts +0 -1388
  235. package/src/routes/openapi.ts +0 -101
  236. package/src/routes/platform.ts +0 -143
  237. package/src/routes/plugins.ts +0 -998
  238. package/src/routes/readiness.ts +0 -83
  239. package/src/routes/workflow-management.ts +0 -469
  240. package/src/routes/workflows.ts +0 -256
  241. package/src/server.ts +0 -203
  242. package/src/services/historical-metrics.ts +0 -496
  243. package/src/services/incident-analyzer.ts +0 -289
  244. package/src/services/incident-detector.ts +0 -691
  245. package/src/services/incident-schema.sql +0 -76
  246. package/src/services/incident-storage.ts +0 -593
  247. package/src/services/system-metrics-collector.ts +0 -244
  248. package/src/types/fastify.d.ts +0 -58
  249. package/src/utils/__tests__/sse-auth.spec.ts +0 -113
  250. package/src/utils/path-helpers.ts +0 -15
  251. package/src/utils/repo.ts +0 -42
  252. package/src/utils/schema.ts +0 -20
  253. package/src/utils/sse-auth.ts +0 -81
  254. package/test-sandbox.sh +0 -105
  255. package/tsconfig.build.json +0 -15
  256. package/tsconfig.json +0 -9
  257. package/tsup.config.ts +0 -18
@@ -1,266 +0,0 @@
1
- import { defineCommand } from '@kb-labs/sdk';
2
-
3
- // src/commands/status.ts
4
-
5
- // src/http-client.ts
6
- var DEFAULT_DAEMON_URL = "http://localhost:7778";
7
- var WorkflowDaemonClient = class {
8
- baseUrl;
9
- constructor(options = {}) {
10
- this.baseUrl = options.url ?? process.env.WORKFLOW_DAEMON_URL ?? DEFAULT_DAEMON_URL;
11
- }
12
- /**
13
- * Validate response Content-Type and parse JSON safely
14
- */
15
- async parseJsonResponse(response) {
16
- const contentType = response.headers.get("content-type");
17
- if (!contentType?.includes("application/json")) {
18
- throw new Error(`Invalid Content-Type: expected application/json, got ${contentType}`);
19
- }
20
- return response.json();
21
- }
22
- unwrapData(payload) {
23
- if (payload && typeof payload === "object" && "ok" in payload && payload.ok === true && "data" in payload) {
24
- return payload.data;
25
- }
26
- return payload;
27
- }
28
- /**
29
- * Validate and encode job ID to prevent path traversal attacks
30
- */
31
- validateAndEncodeJobId(jobId) {
32
- if (!/^[a-zA-Z0-9_-]+$/.test(jobId)) {
33
- throw new Error(`Invalid job ID format: ${jobId}`);
34
- }
35
- return encodeURIComponent(jobId);
36
- }
37
- /**
38
- * Health check
39
- */
40
- async health() {
41
- const response = await fetch(`${this.baseUrl}/health`);
42
- if (!response.ok) {
43
- throw new Error(`Health check failed: ${response.statusText}`);
44
- }
45
- return this.parseJsonResponse(response);
46
- }
47
- /**
48
- * Get workflow metrics
49
- */
50
- async getMetrics() {
51
- const response = await fetch(`${this.baseUrl}/metrics`);
52
- if (!response.ok) {
53
- throw new Error(`Failed to get metrics: ${response.statusText}`);
54
- }
55
- const data = await this.parseJsonResponse(response);
56
- return this.unwrapData(data);
57
- }
58
- /**
59
- * Get job status with full details (jobs, steps, outputs)
60
- */
61
- async getJobStatus(jobId) {
62
- const encodedJobId = this.validateAndEncodeJobId(jobId);
63
- const response = await fetch(`${this.baseUrl}/api/v1/jobs/${encodedJobId}`);
64
- if (response.status === 404) {
65
- throw new Error(`Job ${jobId} not found`);
66
- }
67
- if (!response.ok) {
68
- throw new Error(`Failed to get job status: ${response.statusText}`);
69
- }
70
- const data = await this.parseJsonResponse(response);
71
- return this.unwrapData(data);
72
- }
73
- /**
74
- * Get job steps with outputs
75
- */
76
- async getJobSteps(jobId) {
77
- const encodedJobId = this.validateAndEncodeJobId(jobId);
78
- const response = await fetch(`${this.baseUrl}/api/v1/jobs/${encodedJobId}/steps`);
79
- if (response.status === 404) {
80
- throw new Error(`Job ${jobId} not found`);
81
- }
82
- if (!response.ok) {
83
- throw new Error(`Failed to get job steps: ${response.statusText}`);
84
- }
85
- const data = await this.parseJsonResponse(response);
86
- return this.unwrapData(data);
87
- }
88
- /**
89
- * Get job logs
90
- */
91
- async getJobLogs(jobId) {
92
- const encodedJobId = this.validateAndEncodeJobId(jobId);
93
- const response = await fetch(`${this.baseUrl}/api/v1/jobs/${encodedJobId}/logs`);
94
- if (response.status === 404) {
95
- throw new Error(`Job ${jobId} not found`);
96
- }
97
- if (!response.ok) {
98
- throw new Error(`Failed to get job logs: ${response.statusText}`);
99
- }
100
- const data = await this.parseJsonResponse(response);
101
- const unwrapped = this.unwrapData(data);
102
- return unwrapped.logs ?? [];
103
- }
104
- /**
105
- * Get active executions
106
- */
107
- async getExecutions() {
108
- const response = await fetch(`${this.baseUrl}/api/v1/jobs`);
109
- if (!response.ok) {
110
- throw new Error(`Failed to get executions: ${response.statusText}`);
111
- }
112
- const data = await this.parseJsonResponse(response);
113
- const unwrapped = this.unwrapData(data);
114
- const jobs = unwrapped.jobs ?? [];
115
- return jobs.filter((job) => job.status === "running" || job.status === "pending");
116
- }
117
- /**
118
- * Get cron jobs
119
- */
120
- async getCronJobs() {
121
- const response = await fetch(`${this.baseUrl}/api/v1/cron`);
122
- if (!response.ok) {
123
- throw new Error(`Failed to get cron jobs: ${response.statusText}`);
124
- }
125
- const data = await this.parseJsonResponse(response);
126
- return this.unwrapData(data);
127
- }
128
- /**
129
- * Submit a job for execution
130
- */
131
- async submitJob(params) {
132
- const response = await fetch(`${this.baseUrl}/api/v1/jobs`, {
133
- method: "POST",
134
- headers: {
135
- "Content-Type": "application/json"
136
- },
137
- body: JSON.stringify({
138
- type: params.handler,
139
- payload: params.input,
140
- priority: params.priority
141
- })
142
- });
143
- if (!response.ok) {
144
- const error = await response.json().catch(() => ({ error: response.statusText }));
145
- throw new Error(error.error || `Failed to submit job: ${response.statusText}`);
146
- }
147
- const payload = await this.parseJsonResponse(response);
148
- const data = this.unwrapData(payload);
149
- return { id: data.jobId, status: "pending" };
150
- }
151
- /**
152
- * Run workflow by ID
153
- */
154
- async runWorkflow(workflowId, request = {}) {
155
- const response = await fetch(
156
- `${this.baseUrl}/api/v1/workflows/${encodeURIComponent(workflowId)}/run`,
157
- {
158
- method: "POST",
159
- headers: {
160
- "Content-Type": "application/json"
161
- },
162
- body: JSON.stringify(request)
163
- }
164
- );
165
- if (!response.ok) {
166
- const error = await response.json().catch(() => ({ error: response.statusText }));
167
- throw new Error(error.error || `Failed to run workflow: ${response.statusText}`);
168
- }
169
- const payload = await this.parseJsonResponse(response);
170
- return this.unwrapData(payload);
171
- }
172
- };
173
-
174
- // src/commands/status.ts
175
- var status_default = defineCommand({
176
- id: "workflow:status",
177
- description: "Get status of a workflow job",
178
- handler: {
179
- // eslint-disable-next-line sonarjs/cognitive-complexity -- Job status display with deep run/job/step traversal, multiple output formats (JSON/human), timing calculations, status color coding, and error aggregation
180
- async execute(ctx, input) {
181
- const flags = input.flags ?? input;
182
- const outputJson = flags.json ?? false;
183
- const jobId = flags["job-id"];
184
- if (!jobId) {
185
- if (outputJson) {
186
- ctx.ui?.json?.({ ok: false, error: "Missing required flag: --job-id" });
187
- } else {
188
- ctx.ui?.error?.("Missing required flag: --job-id");
189
- ctx.ui?.info?.("Usage: kb workflow status --job-id=<job-id>");
190
- }
191
- return { exitCode: 1 };
192
- }
193
- try {
194
- const client = new WorkflowDaemonClient();
195
- const status = await client.getJobStatus(jobId);
196
- if (outputJson) {
197
- ctx.ui?.json?.({ ok: true, data: status });
198
- } else {
199
- const statusItems = [
200
- `ID: ${status.id}`,
201
- `Status: ${status.status}`,
202
- `Type: ${status.type || "N/A"}`,
203
- `Started: ${status.startedAt || "N/A"}`,
204
- `Finished: ${status.finishedAt || "N/A"}`
205
- ];
206
- if (status.error) {
207
- statusItems.push(`Error: ${status.error}`);
208
- }
209
- if (status.result?.summary) {
210
- statusItems.push(`Summary: ${status.result.summary}`);
211
- }
212
- const sections = [
213
- { header: "Details", items: statusItems }
214
- ];
215
- if (status.jobs && status.jobs.length > 0) {
216
- for (const job of status.jobs) {
217
- const jobItems = [
218
- `Status: ${job.status}`,
219
- `Duration: ${job.durationMs ? `${job.durationMs}ms` : "N/A"}`
220
- ];
221
- if (job.error) {
222
- jobItems.push(`Error: ${job.error}`);
223
- }
224
- sections.push({ header: `Job: ${job.name}`, items: jobItems });
225
- if (job.steps && job.steps.length > 0) {
226
- const stepItems = [];
227
- for (const step of job.steps) {
228
- const statusIcon = step.status === "success" ? "\u2713" : step.status === "failed" ? "\u2717" : "\u25CB";
229
- const duration = step.durationMs ? ` (${step.durationMs}ms)` : "";
230
- stepItems.push(`${statusIcon} ${step.name}: ${step.status}${duration}`);
231
- if (step.outputs && Object.keys(step.outputs).length > 0) {
232
- const outputStr = JSON.stringify(step.outputs, null, 2);
233
- const truncated = outputStr.length > 500 ? outputStr.slice(0, 500) + "..." : outputStr;
234
- stepItems.push(` \u2514\u2500 Output: ${truncated}`);
235
- }
236
- if (step.error) {
237
- const errorMsg = typeof step.error === "object" ? step.error.message : step.error;
238
- stepItems.push(` \u2514\u2500 Error: ${errorMsg}`);
239
- }
240
- }
241
- sections.push({ header: ` Steps (${job.steps.length})`, items: stepItems });
242
- }
243
- }
244
- }
245
- ctx.ui?.success?.("Job Status Retrieved", {
246
- title: "Workflow Job",
247
- sections
248
- });
249
- }
250
- return { exitCode: 0 };
251
- } catch (error) {
252
- const message = error instanceof Error ? error.message : String(error);
253
- if (outputJson) {
254
- ctx.ui?.json?.({ ok: false, error: message });
255
- } else {
256
- ctx.ui?.error?.(`Failed to get job status: ${message}`);
257
- }
258
- return { exitCode: 1 };
259
- }
260
- }
261
- }
262
- });
263
-
264
- export { status_default as default };
265
- //# sourceMappingURL=status.js.map
266
- //# sourceMappingURL=status.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/http-client.ts","../../src/commands/status.ts"],"names":[],"mappings":"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","file":"status.js","sourcesContent":["/**\n * HTTP client for interacting with Workflow Daemon\n */\nimport type { WorkflowRunRequest } from '@kb-labs/workflow-contracts';\n\nconst DEFAULT_DAEMON_URL = 'http://localhost:7778';\n\nexport interface DaemonClientOptions {\n url?: string;\n}\n\n/**\n * Get workflow daemon URL from environment or default\n */\nexport function getWorkflowDaemonUrl(): string {\n return process.env.WORKFLOW_DAEMON_URL ?? DEFAULT_DAEMON_URL;\n}\n\nexport class WorkflowDaemonClient {\n private readonly baseUrl: string;\n\n constructor(options: DaemonClientOptions = {}) {\n this.baseUrl = options.url ?? process.env.WORKFLOW_DAEMON_URL ?? DEFAULT_DAEMON_URL;\n }\n\n /**\n * Validate response Content-Type and parse JSON safely\n */\n private async parseJsonResponse<T>(response: Response): Promise<T> {\n const contentType = response.headers.get('content-type');\n if (!contentType?.includes('application/json')) {\n throw new Error(`Invalid Content-Type: expected application/json, got ${contentType}`);\n }\n return response.json() as Promise<T>;\n }\n\n private unwrapData<T>(payload: unknown): T {\n if (\n payload\n && typeof payload === 'object'\n && 'ok' in payload\n && (payload as any).ok === true\n && 'data' in payload\n ) {\n return (payload as { data: T }).data;\n }\n return payload as T;\n }\n\n /**\n * Validate and encode job ID to prevent path traversal attacks\n */\n private validateAndEncodeJobId(jobId: string): string {\n // Validate job ID format (alphanumeric, hyphens, underscores only)\n if (!/^[a-zA-Z0-9_-]+$/.test(jobId)) {\n throw new Error(`Invalid job ID format: ${jobId}`);\n }\n // Encode for URL safety (defense in depth)\n return encodeURIComponent(jobId);\n }\n\n /**\n * Health check\n */\n async health(): Promise<{ ok: boolean; service: string }> {\n const response = await fetch(`${this.baseUrl}/health`);\n if (!response.ok) {\n throw new Error(`Health check failed: ${response.statusText}`);\n }\n return this.parseJsonResponse(response);\n }\n\n /**\n * Get workflow metrics\n */\n async getMetrics(): Promise<any> {\n const response = await fetch(`${this.baseUrl}/metrics`);\n if (!response.ok) {\n throw new Error(`Failed to get metrics: ${response.statusText}`);\n }\n const data = await this.parseJsonResponse<any>(response);\n return this.unwrapData(data);\n }\n\n /**\n * Get job status with full details (jobs, steps, outputs)\n */\n async getJobStatus(jobId: string): Promise<any> {\n const encodedJobId = this.validateAndEncodeJobId(jobId);\n const response = await fetch(`${this.baseUrl}/api/v1/jobs/${encodedJobId}`);\n if (response.status === 404) {\n throw new Error(`Job ${jobId} not found`);\n }\n if (!response.ok) {\n throw new Error(`Failed to get job status: ${response.statusText}`);\n }\n const data = await this.parseJsonResponse<any>(response);\n return this.unwrapData(data);\n }\n\n /**\n * Get job steps with outputs\n */\n async getJobSteps(jobId: string): Promise<any> {\n const encodedJobId = this.validateAndEncodeJobId(jobId);\n const response = await fetch(`${this.baseUrl}/api/v1/jobs/${encodedJobId}/steps`);\n if (response.status === 404) {\n throw new Error(`Job ${jobId} not found`);\n }\n if (!response.ok) {\n throw new Error(`Failed to get job steps: ${response.statusText}`);\n }\n const data = await this.parseJsonResponse<any>(response);\n return this.unwrapData(data);\n }\n\n /**\n * Get job logs\n */\n async getJobLogs(jobId: string): Promise<any[]> {\n const encodedJobId = this.validateAndEncodeJobId(jobId);\n const response = await fetch(`${this.baseUrl}/api/v1/jobs/${encodedJobId}/logs`);\n if (response.status === 404) {\n throw new Error(`Job ${jobId} not found`);\n }\n if (!response.ok) {\n throw new Error(`Failed to get job logs: ${response.statusText}`);\n }\n const data = await this.parseJsonResponse<any>(response);\n const unwrapped = this.unwrapData<{ logs: any[] }>(data);\n return unwrapped.logs ?? [];\n }\n\n /**\n * Get active executions\n */\n async getExecutions(): Promise<any[]> {\n const response = await fetch(`${this.baseUrl}/api/v1/jobs`);\n if (!response.ok) {\n throw new Error(`Failed to get executions: ${response.statusText}`);\n }\n const data = await this.parseJsonResponse<any>(response);\n const unwrapped = this.unwrapData<{ jobs?: any[] }>(data);\n const jobs = unwrapped.jobs ?? [];\n return jobs.filter((job: any) => job.status === 'running' || job.status === 'pending');\n }\n\n /**\n * Get cron jobs\n */\n async getCronJobs(): Promise<{\n crons: any[];\n }> {\n const response = await fetch(`${this.baseUrl}/api/v1/cron`);\n if (!response.ok) {\n throw new Error(`Failed to get cron jobs: ${response.statusText}`);\n }\n const data = await this.parseJsonResponse<any>(response);\n return this.unwrapData(data);\n }\n\n /**\n * Submit a job for execution\n */\n async submitJob(params: {\n handler: string;\n input?: unknown;\n priority?: number;\n }): Promise<{ id: string; status: string }> {\n const response = await fetch(`${this.baseUrl}/api/v1/jobs`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n type: params.handler,\n payload: params.input,\n priority: params.priority,\n }),\n });\n\n if (!response.ok) {\n const error = (await response.json().catch(() => ({ error: response.statusText }))) as {\n error?: string;\n };\n throw new Error(error.error || `Failed to submit job: ${response.statusText}`);\n }\n\n const payload = await this.parseJsonResponse<any>(response);\n const data = this.unwrapData<{ jobId: string }>(payload);\n return { id: data.jobId, status: 'pending' };\n }\n\n /**\n * Run workflow by ID\n */\n async runWorkflow(\n workflowId: string,\n request: WorkflowRunRequest = {}\n ): Promise<{ runId: string; status: string }> {\n const response = await fetch(\n `${this.baseUrl}/api/v1/workflows/${encodeURIComponent(workflowId)}/run`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n }\n );\n\n if (!response.ok) {\n const error = (await response.json().catch(() => ({ error: response.statusText }))) as {\n error?: string;\n };\n throw new Error(error.error || `Failed to run workflow: ${response.statusText}`);\n }\n\n const payload = await this.parseJsonResponse<{ ok: boolean; data?: { runId: string; status: string } }>(response);\n return this.unwrapData<{ runId: string; status: string }>(payload);\n }\n}\n","/**\n * workflow:status command - Get job status\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport { type StatusFlags } from '@kb-labs/workflow-contracts';\nimport { WorkflowDaemonClient } from '../http-client.js';\n\ntype StatusInput = StatusFlags & { argv?: string[] };\n\nexport default defineCommand<unknown, StatusInput, { exitCode: number }>({\n id: 'workflow:status',\n description: 'Get status of a workflow job',\n\n handler: {\n // eslint-disable-next-line sonarjs/cognitive-complexity -- Job status display with deep run/job/step traversal, multiple output formats (JSON/human), timing calculations, status color coding, and error aggregation\n async execute(ctx: PluginContextV3, input: StatusInput): Promise<{ exitCode: number }> {\n const flags = (input as any).flags ?? input;\n const outputJson = flags.json ?? false;\n const jobId = flags['job-id'];\n\n if (!jobId) {\n if (outputJson) {\n ctx.ui?.json?.({ ok: false, error: 'Missing required flag: --job-id' });\n } else {\n ctx.ui?.error?.('Missing required flag: --job-id');\n ctx.ui?.info?.('Usage: kb workflow status --job-id=<job-id>');\n }\n return { exitCode: 1 };\n }\n\n try {\n const client = new WorkflowDaemonClient();\n const status = await client.getJobStatus(jobId);\n\n if (outputJson) {\n ctx.ui?.json?.({ ok: true, data: status });\n } else {\n const statusItems = [\n `ID: ${status.id}`,\n `Status: ${status.status}`,\n `Type: ${status.type || 'N/A'}`,\n `Started: ${status.startedAt || 'N/A'}`,\n `Finished: ${status.finishedAt || 'N/A'}`,\n ];\n\n // Add error if present\n if (status.error) {\n statusItems.push(`Error: ${status.error}`);\n }\n\n // Add result summary if present\n if (status.result?.summary) {\n statusItems.push(`Summary: ${status.result.summary}`);\n }\n\n const sections: Array<{ header: string; items: string[] }> = [\n { header: 'Details', items: statusItems },\n ];\n\n // Add jobs and steps details\n if (status.jobs && status.jobs.length > 0) {\n for (const job of status.jobs) {\n const jobItems = [\n `Status: ${job.status}`,\n `Duration: ${job.durationMs ? `${job.durationMs}ms` : 'N/A'}`,\n ];\n\n if (job.error) {\n jobItems.push(`Error: ${job.error}`);\n }\n\n sections.push({ header: `Job: ${job.name}`, items: jobItems });\n\n // Add steps for this job\n if (job.steps && job.steps.length > 0) {\n const stepItems: string[] = [];\n for (const step of job.steps) {\n const statusIcon = step.status === 'success' ? '✓' : step.status === 'failed' ? '✗' : '○';\n const duration = step.durationMs ? ` (${step.durationMs}ms)` : '';\n stepItems.push(`${statusIcon} ${step.name}: ${step.status}${duration}`);\n\n // Show outputs if present\n if (step.outputs && Object.keys(step.outputs).length > 0) {\n const outputStr = JSON.stringify(step.outputs, null, 2);\n // Truncate long outputs\n const truncated = outputStr.length > 500 ? outputStr.slice(0, 500) + '...' : outputStr;\n stepItems.push(` └─ Output: ${truncated}`);\n }\n\n // Show error if present\n if (step.error) {\n const errorMsg = typeof step.error === 'object' ? (step.error as any).message : step.error;\n stepItems.push(` └─ Error: ${errorMsg}`);\n }\n }\n sections.push({ header: ` Steps (${job.steps.length})`, items: stepItems });\n }\n }\n }\n\n ctx.ui?.success?.('Job Status Retrieved', {\n title: 'Workflow Job',\n sections,\n });\n }\n\n return { exitCode: 0 };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n\n if (outputJson) {\n ctx.ui?.json?.({ ok: false, error: message });\n } else {\n ctx.ui?.error?.(`Failed to get job status: ${message}`);\n }\n\n return { exitCode: 1 };\n }\n },\n },\n});\n\n"]}
@@ -1,11 +0,0 @@
1
- import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
- import { W as WorkflowRunFlags } from '../flags-WLdpSZl4.js';
3
-
4
- type WorkflowRunInput = WorkflowRunFlags & {
5
- argv?: string[];
6
- };
7
- declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, WorkflowRunInput, {
8
- exitCode: number;
9
- }>;
10
-
11
- export { _default as default };
@@ -1,284 +0,0 @@
1
- import { defineCommand } from '@kb-labs/sdk';
2
-
3
- // src/commands/workflow-run.ts
4
-
5
- // src/http-client.ts
6
- var DEFAULT_DAEMON_URL = "http://localhost:7778";
7
- var WorkflowDaemonClient = class {
8
- baseUrl;
9
- constructor(options = {}) {
10
- this.baseUrl = options.url ?? process.env.WORKFLOW_DAEMON_URL ?? DEFAULT_DAEMON_URL;
11
- }
12
- /**
13
- * Validate response Content-Type and parse JSON safely
14
- */
15
- async parseJsonResponse(response) {
16
- const contentType = response.headers.get("content-type");
17
- if (!contentType?.includes("application/json")) {
18
- throw new Error(`Invalid Content-Type: expected application/json, got ${contentType}`);
19
- }
20
- return response.json();
21
- }
22
- unwrapData(payload) {
23
- if (payload && typeof payload === "object" && "ok" in payload && payload.ok === true && "data" in payload) {
24
- return payload.data;
25
- }
26
- return payload;
27
- }
28
- /**
29
- * Validate and encode job ID to prevent path traversal attacks
30
- */
31
- validateAndEncodeJobId(jobId) {
32
- if (!/^[a-zA-Z0-9_-]+$/.test(jobId)) {
33
- throw new Error(`Invalid job ID format: ${jobId}`);
34
- }
35
- return encodeURIComponent(jobId);
36
- }
37
- /**
38
- * Health check
39
- */
40
- async health() {
41
- const response = await fetch(`${this.baseUrl}/health`);
42
- if (!response.ok) {
43
- throw new Error(`Health check failed: ${response.statusText}`);
44
- }
45
- return this.parseJsonResponse(response);
46
- }
47
- /**
48
- * Get workflow metrics
49
- */
50
- async getMetrics() {
51
- const response = await fetch(`${this.baseUrl}/metrics`);
52
- if (!response.ok) {
53
- throw new Error(`Failed to get metrics: ${response.statusText}`);
54
- }
55
- const data = await this.parseJsonResponse(response);
56
- return this.unwrapData(data);
57
- }
58
- /**
59
- * Get job status with full details (jobs, steps, outputs)
60
- */
61
- async getJobStatus(jobId) {
62
- const encodedJobId = this.validateAndEncodeJobId(jobId);
63
- const response = await fetch(`${this.baseUrl}/api/v1/jobs/${encodedJobId}`);
64
- if (response.status === 404) {
65
- throw new Error(`Job ${jobId} not found`);
66
- }
67
- if (!response.ok) {
68
- throw new Error(`Failed to get job status: ${response.statusText}`);
69
- }
70
- const data = await this.parseJsonResponse(response);
71
- return this.unwrapData(data);
72
- }
73
- /**
74
- * Get job steps with outputs
75
- */
76
- async getJobSteps(jobId) {
77
- const encodedJobId = this.validateAndEncodeJobId(jobId);
78
- const response = await fetch(`${this.baseUrl}/api/v1/jobs/${encodedJobId}/steps`);
79
- if (response.status === 404) {
80
- throw new Error(`Job ${jobId} not found`);
81
- }
82
- if (!response.ok) {
83
- throw new Error(`Failed to get job steps: ${response.statusText}`);
84
- }
85
- const data = await this.parseJsonResponse(response);
86
- return this.unwrapData(data);
87
- }
88
- /**
89
- * Get job logs
90
- */
91
- async getJobLogs(jobId) {
92
- const encodedJobId = this.validateAndEncodeJobId(jobId);
93
- const response = await fetch(`${this.baseUrl}/api/v1/jobs/${encodedJobId}/logs`);
94
- if (response.status === 404) {
95
- throw new Error(`Job ${jobId} not found`);
96
- }
97
- if (!response.ok) {
98
- throw new Error(`Failed to get job logs: ${response.statusText}`);
99
- }
100
- const data = await this.parseJsonResponse(response);
101
- const unwrapped = this.unwrapData(data);
102
- return unwrapped.logs ?? [];
103
- }
104
- /**
105
- * Get active executions
106
- */
107
- async getExecutions() {
108
- const response = await fetch(`${this.baseUrl}/api/v1/jobs`);
109
- if (!response.ok) {
110
- throw new Error(`Failed to get executions: ${response.statusText}`);
111
- }
112
- const data = await this.parseJsonResponse(response);
113
- const unwrapped = this.unwrapData(data);
114
- const jobs = unwrapped.jobs ?? [];
115
- return jobs.filter((job) => job.status === "running" || job.status === "pending");
116
- }
117
- /**
118
- * Get cron jobs
119
- */
120
- async getCronJobs() {
121
- const response = await fetch(`${this.baseUrl}/api/v1/cron`);
122
- if (!response.ok) {
123
- throw new Error(`Failed to get cron jobs: ${response.statusText}`);
124
- }
125
- const data = await this.parseJsonResponse(response);
126
- return this.unwrapData(data);
127
- }
128
- /**
129
- * Submit a job for execution
130
- */
131
- async submitJob(params) {
132
- const response = await fetch(`${this.baseUrl}/api/v1/jobs`, {
133
- method: "POST",
134
- headers: {
135
- "Content-Type": "application/json"
136
- },
137
- body: JSON.stringify({
138
- type: params.handler,
139
- payload: params.input,
140
- priority: params.priority
141
- })
142
- });
143
- if (!response.ok) {
144
- const error = await response.json().catch(() => ({ error: response.statusText }));
145
- throw new Error(error.error || `Failed to submit job: ${response.statusText}`);
146
- }
147
- const payload = await this.parseJsonResponse(response);
148
- const data = this.unwrapData(payload);
149
- return { id: data.jobId, status: "pending" };
150
- }
151
- /**
152
- * Run workflow by ID
153
- */
154
- async runWorkflow(workflowId, request = {}) {
155
- const response = await fetch(
156
- `${this.baseUrl}/api/v1/workflows/${encodeURIComponent(workflowId)}/run`,
157
- {
158
- method: "POST",
159
- headers: {
160
- "Content-Type": "application/json"
161
- },
162
- body: JSON.stringify(request)
163
- }
164
- );
165
- if (!response.ok) {
166
- const error = await response.json().catch(() => ({ error: response.statusText }));
167
- throw new Error(error.error || `Failed to run workflow: ${response.statusText}`);
168
- }
169
- const payload = await this.parseJsonResponse(response);
170
- return this.unwrapData(payload);
171
- }
172
- };
173
-
174
- // src/commands/workflow-run.ts
175
- function parseJsonInput(value) {
176
- if (!value) {
177
- return void 0;
178
- }
179
- return JSON.parse(value);
180
- }
181
- function parseIsolation(value) {
182
- if (!value) {
183
- return void 0;
184
- }
185
- if (value === "strict" || value === "balanced" || value === "relaxed") {
186
- return value;
187
- }
188
- throw new Error(`Invalid isolation value: ${value}. Expected strict|balanced|relaxed`);
189
- }
190
- function parseTriggerType(value) {
191
- if (!value) {
192
- return void 0;
193
- }
194
- if (value === "manual" || value === "api" || value === "cron") {
195
- return { type: value };
196
- }
197
- throw new Error(`Invalid trigger type: ${value}. Expected manual|api|cron`);
198
- }
199
- var workflow_run_default = defineCommand({
200
- id: "workflow:run",
201
- description: "Run workflow by ID with optional target/isolation overrides",
202
- handler: {
203
- async execute(ctx, input) {
204
- const flags = input.flags ?? input;
205
- const outputJson = flags.json ?? false;
206
- const workflowId = flags["workflow-id"];
207
- if (!workflowId) {
208
- const message = "Missing required flag: --workflow-id";
209
- if (outputJson) {
210
- ctx.ui?.json?.({ ok: false, error: message });
211
- } else {
212
- ctx.ui?.error?.(message);
213
- }
214
- return { exitCode: 1 };
215
- }
216
- try {
217
- const request = {};
218
- const inputPayload = parseJsonInput(flags.input);
219
- if (inputPayload !== void 0) {
220
- request.input = inputPayload;
221
- }
222
- const isolation = parseIsolation(flags.isolation);
223
- if (isolation) {
224
- request.isolation = isolation;
225
- }
226
- const trigger = parseTriggerType(flags["trigger-type"]);
227
- if (trigger) {
228
- request.trigger = {
229
- ...trigger,
230
- user: flags["trigger-user"]
231
- };
232
- } else if (flags["trigger-user"]) {
233
- request.trigger = {
234
- type: "manual",
235
- user: flags["trigger-user"]
236
- };
237
- }
238
- const target = {
239
- environmentId: flags["target-environment-id"],
240
- workspaceId: flags["target-workspace-id"],
241
- namespace: flags["target-namespace"],
242
- workdir: flags["target-workdir"]
243
- };
244
- if (target.environmentId || target.workspaceId || target.namespace || target.workdir) {
245
- request.target = target;
246
- }
247
- const client = new WorkflowDaemonClient();
248
- const result = await client.runWorkflow(workflowId, request);
249
- if (outputJson) {
250
- ctx.ui?.json?.({ ok: true, data: result });
251
- } else {
252
- ctx.ui?.success?.("Workflow run submitted", {
253
- title: "Workflow Engine",
254
- sections: [{
255
- header: "Details",
256
- items: [
257
- `Workflow ID: ${workflowId}`,
258
- `Run ID: ${result.runId}`,
259
- `Status: ${result.status}`,
260
- ...request.isolation ? [`Isolation: ${request.isolation}`] : [],
261
- ...request.target?.namespace ? [`Target Namespace: ${request.target.namespace}`] : [],
262
- ...request.target?.environmentId ? [`Target Environment: ${request.target.environmentId}`] : [],
263
- ...request.target?.workspaceId ? [`Target Workspace: ${request.target.workspaceId}`] : []
264
- ]
265
- }]
266
- });
267
- }
268
- return { exitCode: 0 };
269
- } catch (error) {
270
- const message = error instanceof Error ? error.message : String(error);
271
- if (outputJson) {
272
- ctx.ui?.json?.({ ok: false, error: message });
273
- } else {
274
- ctx.ui?.error?.(`Failed to run workflow: ${message}`);
275
- }
276
- return { exitCode: 1 };
277
- }
278
- }
279
- }
280
- });
281
-
282
- export { workflow_run_default as default };
283
- //# sourceMappingURL=workflow-run.js.map
284
- //# sourceMappingURL=workflow-run.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/http-client.ts","../../src/commands/workflow-run.ts"],"names":[],"mappings":";;;;;AAKA,IAAM,kBAAA,GAAqB,uBAAA;AAapB,IAAM,uBAAN,MAA2B;AAAA,EACf,OAAA;AAAA,EAEjB,WAAA,CAAY,OAAA,GAA+B,EAAC,EAAG;AAC7C,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,IAAI,mBAAA,IAAuB,kBAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,kBAAqB,QAAA,EAAgC;AACjE,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA;AACvD,IAAA,IAAI,CAAC,WAAA,EAAa,QAAA,CAAS,kBAAkB,CAAA,EAAG;AAC9C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qDAAA,EAAwD,WAAW,CAAA,CAAE,CAAA;AAAA,IACvF;AACA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACvB;AAAA,EAEQ,WAAc,OAAA,EAAqB;AACzC,IAAA,IACE,OAAA,IACG,OAAO,OAAA,KAAY,QAAA,IACnB,IAAA,IAAQ,WACP,OAAA,CAAgB,EAAA,KAAO,IAAA,IACxB,MAAA,IAAU,OAAA,EACb;AACA,MAAA,OAAQ,OAAA,CAAwB,IAAA;AAAA,IAClC;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAAuB,KAAA,EAAuB;AAEpD,IAAA,IAAI,CAAC,kBAAA,CAAmB,IAAA,CAAK,KAAK,CAAA,EAAG;AACnC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,KAAK,CAAA,CAAE,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAA,GAAoD;AACxD,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,OAAA,CAAS,CAAA;AACrD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IAC/D;AACA,IAAA,OAAO,IAAA,CAAK,kBAAkB,QAAQ,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,GAA2B;AAC/B,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,QAAA,CAAU,CAAA;AACtD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACjE;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,iBAAA,CAAuB,QAAQ,CAAA;AACvD,IAAA,OAAO,IAAA,CAAK,WAAW,IAAI,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,KAAA,EAA6B;AAC9C,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,sBAAA,CAAuB,KAAK,CAAA;AACtD,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,KAAK,OAAO,CAAA,aAAA,EAAgB,YAAY,CAAA,CAAE,CAAA;AAC1E,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,IAAA,EAAO,KAAK,CAAA,UAAA,CAAY,CAAA;AAAA,IAC1C;AACA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACpE;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,iBAAA,CAAuB,QAAQ,CAAA;AACvD,IAAA,OAAO,IAAA,CAAK,WAAW,IAAI,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,KAAA,EAA6B;AAC7C,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,sBAAA,CAAuB,KAAK,CAAA;AACtD,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,KAAK,OAAO,CAAA,aAAA,EAAgB,YAAY,CAAA,MAAA,CAAQ,CAAA;AAChF,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,IAAA,EAAO,KAAK,CAAA,UAAA,CAAY,CAAA;AAAA,IAC1C;AACA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACnE;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,iBAAA,CAAuB,QAAQ,CAAA;AACvD,IAAA,OAAO,IAAA,CAAK,WAAW,IAAI,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,KAAA,EAA+B;AAC9C,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,sBAAA,CAAuB,KAAK,CAAA;AACtD,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,KAAK,OAAO,CAAA,aAAA,EAAgB,YAAY,CAAA,KAAA,CAAO,CAAA;AAC/E,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,IAAA,EAAO,KAAK,CAAA,UAAA,CAAY,CAAA;AAAA,IAC1C;AACA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IAClE;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,iBAAA,CAAuB,QAAQ,CAAA;AACvD,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,UAAA,CAA4B,IAAI,CAAA;AACvD,IAAA,OAAO,SAAA,CAAU,QAAQ,EAAC;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,GAAgC;AACpC,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,YAAA,CAAc,CAAA;AAC1D,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACpE;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,iBAAA,CAAuB,QAAQ,CAAA;AACvD,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,UAAA,CAA6B,IAAI,CAAA;AACxD,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,IAAA,IAAQ,EAAC;AAChC,IAAA,OAAO,IAAA,CAAK,OAAO,CAAC,GAAA,KAAa,IAAI,MAAA,KAAW,SAAA,IAAa,GAAA,CAAI,MAAA,KAAW,SAAS,CAAA;AAAA,EACvF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,GAEH;AACD,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,YAAA,CAAc,CAAA;AAC1D,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACnE;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,iBAAA,CAAuB,QAAQ,CAAA;AACvD,IAAA,OAAO,IAAA,CAAK,WAAW,IAAI,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,MAAA,EAI4B;AAC1C,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,YAAA,CAAA,EAAgB;AAAA,MAC1D,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB;AAAA,OAClB;AAAA,MACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACnB,MAAM,MAAA,CAAO,OAAA;AAAA,QACb,SAAS,MAAA,CAAO,KAAA;AAAA,QAChB,UAAU,MAAA,CAAO;AAAA,OAClB;AAAA,KACF,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,KAAA,GAAS,MAAM,QAAA,CAAS,IAAA,EAAK,CAAE,KAAA,CAAM,OAAO,EAAE,KAAA,EAAO,QAAA,CAAS,UAAA,EAAW,CAAE,CAAA;AAGjF,MAAA,MAAM,IAAI,KAAA,CAAM,KAAA,CAAM,SAAS,CAAA,sBAAA,EAAyB,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IAC/E;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,iBAAA,CAAuB,QAAQ,CAAA;AAC1D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAA8B,OAAO,CAAA;AACvD,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,CAAK,KAAA,EAAO,QAAQ,SAAA,EAAU;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CACJ,UAAA,EACA,OAAA,GAA8B,EAAC,EACa;AAC5C,IAAA,MAAM,WAAW,MAAM,KAAA;AAAA,MACrB,GAAG,IAAA,CAAK,OAAO,CAAA,kBAAA,EAAqB,kBAAA,CAAmB,UAAU,CAAC,CAAA,IAAA,CAAA;AAAA,MAClE;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB;AAAA,SAClB;AAAA,QACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA;AAC9B,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,KAAA,GAAS,MAAM,QAAA,CAAS,IAAA,EAAK,CAAE,KAAA,CAAM,OAAO,EAAE,KAAA,EAAO,QAAA,CAAS,UAAA,EAAW,CAAE,CAAA;AAGjF,MAAA,MAAM,IAAI,KAAA,CAAM,KAAA,CAAM,SAAS,CAAA,wBAAA,EAA2B,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACjF;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,iBAAA,CAA6E,QAAQ,CAAA;AAChH,IAAA,OAAO,IAAA,CAAK,WAA8C,OAAO,CAAA;AAAA,EACnE;AACF,CAAA;;;AClNA,SAAS,eAAe,KAAA,EAAoC;AAC1D,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AACzB;AAEA,SAAS,eAAe,KAAA,EAA4D;AAClF,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,UAAA,IAAc,UAAU,SAAA,EAAW;AACrE,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,KAAK,CAAA,kCAAA,CAAoC,CAAA;AACvF;AAEA,SAAS,iBAAiB,KAAA,EAA0D;AAClF,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,KAAA,IAAS,UAAU,MAAA,EAAQ;AAC7D,IAAA,OAAO,EAAE,MAAM,KAAA,EAAM;AAAA,EACvB;AACA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,KAAK,CAAA,0BAAA,CAA4B,CAAA;AAC5E;AAEA,IAAO,uBAAQ,aAAA,CAA+D;AAAA,EAC5E,EAAA,EAAI,cAAA;AAAA,EACJ,WAAA,EAAa,6DAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAwD;AAC1F,MAAA,MAAM,KAAA,GAAS,MAAc,KAAA,IAAS,KAAA;AACtC,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,IAAQ,KAAA;AACjC,MAAA,MAAM,UAAA,GAAa,MAAM,aAAa,CAAA;AAEtC,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,OAAA,GAAU,sCAAA;AAChB,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,KAAA,EAAO,KAAA,EAAO,SAAS,CAAA;AAAA,QAC9C,CAAA,MAAO;AACL,UAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,OAAO,CAAA;AAAA,QACzB;AACA,QAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,MACvB;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,UAA8B,EAAC;AAErC,QAAA,MAAM,YAAA,GAAe,cAAA,CAAe,KAAA,CAAM,KAAK,CAAA;AAC/C,QAAA,IAAI,iBAAiB,KAAA,CAAA,EAAW;AAC9B,UAAA,OAAA,CAAQ,KAAA,GAAQ,YAAA;AAAA,QAClB;AAEA,QAAA,MAAM,SAAA,GAAY,cAAA,CAAe,KAAA,CAAM,SAAS,CAAA;AAChD,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,OAAA,CAAQ,SAAA,GAAY,SAAA;AAAA,QACtB;AAEA,QAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,KAAA,CAAM,cAAc,CAAC,CAAA;AACtD,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,OAAA,CAAQ,OAAA,GAAU;AAAA,YAChB,GAAG,OAAA;AAAA,YACH,IAAA,EAAM,MAAM,cAAc;AAAA,WAC5B;AAAA,QACF,CAAA,MAAA,IAAW,KAAA,CAAM,cAAc,CAAA,EAAG;AAChC,UAAA,OAAA,CAAQ,OAAA,GAAU;AAAA,YAChB,IAAA,EAAM,QAAA;AAAA,YACN,IAAA,EAAM,MAAM,cAAc;AAAA,WAC5B;AAAA,QACF;AAEA,QAAA,MAAM,MAAA,GAAS;AAAA,UACb,aAAA,EAAe,MAAM,uBAAuB,CAAA;AAAA,UAC5C,WAAA,EAAa,MAAM,qBAAqB,CAAA;AAAA,UACxC,SAAA,EAAW,MAAM,kBAAkB,CAAA;AAAA,UACnC,OAAA,EAAS,MAAM,gBAAgB;AAAA,SACjC;AACA,QAAA,IAAI,OAAO,aAAA,IAAiB,MAAA,CAAO,eAAe,MAAA,CAAO,SAAA,IAAa,OAAO,OAAA,EAAS;AACpF,UAAA,OAAA,CAAQ,MAAA,GAAS,MAAA;AAAA,QACnB;AAEA,QAAA,MAAM,MAAA,GAAS,IAAI,oBAAA,EAAqB;AACxC,QAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,WAAA,CAAY,YAAY,OAAO,CAAA;AAE3D,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AAAA,QAC3C,CAAA,MAAO;AACL,UAAA,GAAA,CAAI,EAAA,EAAI,UAAU,wBAAA,EAA0B;AAAA,YAC1C,KAAA,EAAO,iBAAA;AAAA,YACP,UAAU,CAAC;AAAA,cACT,MAAA,EAAQ,SAAA;AAAA,cACR,KAAA,EAAO;AAAA,gBACL,gBAAgB,UAAU,CAAA,CAAA;AAAA,gBAC1B,CAAA,QAAA,EAAW,OAAO,KAAK,CAAA,CAAA;AAAA,gBACvB,CAAA,QAAA,EAAW,OAAO,MAAM,CAAA,CAAA;AAAA,gBACxB,GAAI,QAAQ,SAAA,GAAY,CAAC,cAAc,OAAA,CAAQ,SAAS,CAAA,CAAE,CAAA,GAAI,EAAC;AAAA,gBAC/D,GAAI,OAAA,CAAQ,MAAA,EAAQ,SAAA,GAAY,CAAC,CAAA,kBAAA,EAAqB,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,CAAE,CAAA,GAAI,EAAC;AAAA,gBACrF,GAAI,OAAA,CAAQ,MAAA,EAAQ,aAAA,GAAgB,CAAC,CAAA,oBAAA,EAAuB,OAAA,CAAQ,MAAA,CAAO,aAAa,CAAA,CAAE,CAAA,GAAI,EAAC;AAAA,gBAC/F,GAAI,OAAA,CAAQ,MAAA,EAAQ,WAAA,GAAc,CAAC,CAAA,kBAAA,EAAqB,OAAA,CAAQ,MAAA,CAAO,WAAW,CAAA,CAAE,CAAA,GAAI;AAAC;AAC3F,aACD;AAAA,WACF,CAAA;AAAA,QACH;AAEA,QAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,MACvB,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,EAAE,IAAI,KAAA,EAAO,KAAA,EAAO,SAAS,CAAA;AAAA,QAC9C,CAAA,MAAO;AACL,UAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,CAAA,wBAAA,EAA2B,OAAO,CAAA,CAAE,CAAA;AAAA,QACtD;AACA,QAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,MACvB;AAAA,IACF;AAAA;AAEJ,CAAC","file":"workflow-run.js","sourcesContent":["/**\n * HTTP client for interacting with Workflow Daemon\n */\nimport type { WorkflowRunRequest } from '@kb-labs/workflow-contracts';\n\nconst DEFAULT_DAEMON_URL = 'http://localhost:7778';\n\nexport interface DaemonClientOptions {\n url?: string;\n}\n\n/**\n * Get workflow daemon URL from environment or default\n */\nexport function getWorkflowDaemonUrl(): string {\n return process.env.WORKFLOW_DAEMON_URL ?? DEFAULT_DAEMON_URL;\n}\n\nexport class WorkflowDaemonClient {\n private readonly baseUrl: string;\n\n constructor(options: DaemonClientOptions = {}) {\n this.baseUrl = options.url ?? process.env.WORKFLOW_DAEMON_URL ?? DEFAULT_DAEMON_URL;\n }\n\n /**\n * Validate response Content-Type and parse JSON safely\n */\n private async parseJsonResponse<T>(response: Response): Promise<T> {\n const contentType = response.headers.get('content-type');\n if (!contentType?.includes('application/json')) {\n throw new Error(`Invalid Content-Type: expected application/json, got ${contentType}`);\n }\n return response.json() as Promise<T>;\n }\n\n private unwrapData<T>(payload: unknown): T {\n if (\n payload\n && typeof payload === 'object'\n && 'ok' in payload\n && (payload as any).ok === true\n && 'data' in payload\n ) {\n return (payload as { data: T }).data;\n }\n return payload as T;\n }\n\n /**\n * Validate and encode job ID to prevent path traversal attacks\n */\n private validateAndEncodeJobId(jobId: string): string {\n // Validate job ID format (alphanumeric, hyphens, underscores only)\n if (!/^[a-zA-Z0-9_-]+$/.test(jobId)) {\n throw new Error(`Invalid job ID format: ${jobId}`);\n }\n // Encode for URL safety (defense in depth)\n return encodeURIComponent(jobId);\n }\n\n /**\n * Health check\n */\n async health(): Promise<{ ok: boolean; service: string }> {\n const response = await fetch(`${this.baseUrl}/health`);\n if (!response.ok) {\n throw new Error(`Health check failed: ${response.statusText}`);\n }\n return this.parseJsonResponse(response);\n }\n\n /**\n * Get workflow metrics\n */\n async getMetrics(): Promise<any> {\n const response = await fetch(`${this.baseUrl}/metrics`);\n if (!response.ok) {\n throw new Error(`Failed to get metrics: ${response.statusText}`);\n }\n const data = await this.parseJsonResponse<any>(response);\n return this.unwrapData(data);\n }\n\n /**\n * Get job status with full details (jobs, steps, outputs)\n */\n async getJobStatus(jobId: string): Promise<any> {\n const encodedJobId = this.validateAndEncodeJobId(jobId);\n const response = await fetch(`${this.baseUrl}/api/v1/jobs/${encodedJobId}`);\n if (response.status === 404) {\n throw new Error(`Job ${jobId} not found`);\n }\n if (!response.ok) {\n throw new Error(`Failed to get job status: ${response.statusText}`);\n }\n const data = await this.parseJsonResponse<any>(response);\n return this.unwrapData(data);\n }\n\n /**\n * Get job steps with outputs\n */\n async getJobSteps(jobId: string): Promise<any> {\n const encodedJobId = this.validateAndEncodeJobId(jobId);\n const response = await fetch(`${this.baseUrl}/api/v1/jobs/${encodedJobId}/steps`);\n if (response.status === 404) {\n throw new Error(`Job ${jobId} not found`);\n }\n if (!response.ok) {\n throw new Error(`Failed to get job steps: ${response.statusText}`);\n }\n const data = await this.parseJsonResponse<any>(response);\n return this.unwrapData(data);\n }\n\n /**\n * Get job logs\n */\n async getJobLogs(jobId: string): Promise<any[]> {\n const encodedJobId = this.validateAndEncodeJobId(jobId);\n const response = await fetch(`${this.baseUrl}/api/v1/jobs/${encodedJobId}/logs`);\n if (response.status === 404) {\n throw new Error(`Job ${jobId} not found`);\n }\n if (!response.ok) {\n throw new Error(`Failed to get job logs: ${response.statusText}`);\n }\n const data = await this.parseJsonResponse<any>(response);\n const unwrapped = this.unwrapData<{ logs: any[] }>(data);\n return unwrapped.logs ?? [];\n }\n\n /**\n * Get active executions\n */\n async getExecutions(): Promise<any[]> {\n const response = await fetch(`${this.baseUrl}/api/v1/jobs`);\n if (!response.ok) {\n throw new Error(`Failed to get executions: ${response.statusText}`);\n }\n const data = await this.parseJsonResponse<any>(response);\n const unwrapped = this.unwrapData<{ jobs?: any[] }>(data);\n const jobs = unwrapped.jobs ?? [];\n return jobs.filter((job: any) => job.status === 'running' || job.status === 'pending');\n }\n\n /**\n * Get cron jobs\n */\n async getCronJobs(): Promise<{\n crons: any[];\n }> {\n const response = await fetch(`${this.baseUrl}/api/v1/cron`);\n if (!response.ok) {\n throw new Error(`Failed to get cron jobs: ${response.statusText}`);\n }\n const data = await this.parseJsonResponse<any>(response);\n return this.unwrapData(data);\n }\n\n /**\n * Submit a job for execution\n */\n async submitJob(params: {\n handler: string;\n input?: unknown;\n priority?: number;\n }): Promise<{ id: string; status: string }> {\n const response = await fetch(`${this.baseUrl}/api/v1/jobs`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n type: params.handler,\n payload: params.input,\n priority: params.priority,\n }),\n });\n\n if (!response.ok) {\n const error = (await response.json().catch(() => ({ error: response.statusText }))) as {\n error?: string;\n };\n throw new Error(error.error || `Failed to submit job: ${response.statusText}`);\n }\n\n const payload = await this.parseJsonResponse<any>(response);\n const data = this.unwrapData<{ jobId: string }>(payload);\n return { id: data.jobId, status: 'pending' };\n }\n\n /**\n * Run workflow by ID\n */\n async runWorkflow(\n workflowId: string,\n request: WorkflowRunRequest = {}\n ): Promise<{ runId: string; status: string }> {\n const response = await fetch(\n `${this.baseUrl}/api/v1/workflows/${encodeURIComponent(workflowId)}/run`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n }\n );\n\n if (!response.ok) {\n const error = (await response.json().catch(() => ({ error: response.statusText }))) as {\n error?: string;\n };\n throw new Error(error.error || `Failed to run workflow: ${response.statusText}`);\n }\n\n const payload = await this.parseJsonResponse<{ ok: boolean; data?: { runId: string; status: string } }>(response);\n return this.unwrapData<{ runId: string; status: string }>(payload);\n }\n}\n","/**\n * workflow:run command - Run workflow by workflow ID\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport type { WorkflowRunRequest } from '@kb-labs/workflow-contracts';\nimport { WorkflowDaemonClient } from '../http-client.js';\nimport { type WorkflowRunFlags } from '../flags.js';\n\ntype WorkflowRunInput = WorkflowRunFlags & { argv?: string[] };\n\nfunction parseJsonInput(value: string | undefined): unknown {\n if (!value) {\n return undefined;\n }\n return JSON.parse(value);\n}\n\nfunction parseIsolation(value: string | undefined): WorkflowRunRequest['isolation'] {\n if (!value) {\n return undefined;\n }\n if (value === 'strict' || value === 'balanced' || value === 'relaxed') {\n return value;\n }\n throw new Error(`Invalid isolation value: ${value}. Expected strict|balanced|relaxed`);\n}\n\nfunction parseTriggerType(value: string | undefined): WorkflowRunRequest['trigger'] {\n if (!value) {\n return undefined;\n }\n if (value === 'manual' || value === 'api' || value === 'cron') {\n return { type: value };\n }\n throw new Error(`Invalid trigger type: ${value}. Expected manual|api|cron`);\n}\n\nexport default defineCommand<unknown, WorkflowRunInput, { exitCode: number }>({\n id: 'workflow:run',\n description: 'Run workflow by ID with optional target/isolation overrides',\n\n handler: {\n async execute(ctx: PluginContextV3, input: WorkflowRunInput): Promise<{ exitCode: number }> {\n const flags = (input as any).flags ?? input;\n const outputJson = flags.json ?? false;\n const workflowId = flags['workflow-id'];\n\n if (!workflowId) {\n const message = 'Missing required flag: --workflow-id';\n if (outputJson) {\n ctx.ui?.json?.({ ok: false, error: message });\n } else {\n ctx.ui?.error?.(message);\n }\n return { exitCode: 1 };\n }\n\n try {\n const request: WorkflowRunRequest = {};\n\n const inputPayload = parseJsonInput(flags.input);\n if (inputPayload !== undefined) {\n request.input = inputPayload;\n }\n\n const isolation = parseIsolation(flags.isolation);\n if (isolation) {\n request.isolation = isolation;\n }\n\n const trigger = parseTriggerType(flags['trigger-type']);\n if (trigger) {\n request.trigger = {\n ...trigger,\n user: flags['trigger-user'],\n };\n } else if (flags['trigger-user']) {\n request.trigger = {\n type: 'manual',\n user: flags['trigger-user'],\n };\n }\n\n const target = {\n environmentId: flags['target-environment-id'],\n workspaceId: flags['target-workspace-id'],\n namespace: flags['target-namespace'],\n workdir: flags['target-workdir'],\n };\n if (target.environmentId || target.workspaceId || target.namespace || target.workdir) {\n request.target = target;\n }\n\n const client = new WorkflowDaemonClient();\n const result = await client.runWorkflow(workflowId, request);\n\n if (outputJson) {\n ctx.ui?.json?.({ ok: true, data: result });\n } else {\n ctx.ui?.success?.('Workflow run submitted', {\n title: 'Workflow Engine',\n sections: [{\n header: 'Details',\n items: [\n `Workflow ID: ${workflowId}`,\n `Run ID: ${result.runId}`,\n `Status: ${result.status}`,\n ...(request.isolation ? [`Isolation: ${request.isolation}`] : []),\n ...(request.target?.namespace ? [`Target Namespace: ${request.target.namespace}`] : []),\n ...(request.target?.environmentId ? [`Target Environment: ${request.target.environmentId}`] : []),\n ...(request.target?.workspaceId ? [`Target Workspace: ${request.target.workspaceId}`] : []),\n ],\n }],\n });\n }\n\n return { exitCode: 0 };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (outputJson) {\n ctx.ui?.json?.({ ok: false, error: message });\n } else {\n ctx.ui?.error?.(`Failed to run workflow: ${message}`);\n }\n return { exitCode: 1 };\n }\n },\n },\n});\n"]}