@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,133 +0,0 @@
1
- import { defineMessage, defineWebSocket, MessageRouter } from '@kb-labs/sdk';
2
-
3
- // src/ws/logs-channel.ts
4
- var SubscribeMsg = defineMessage("subscribe");
5
- var UnsubscribeMsg = defineMessage("unsubscribe");
6
- var LogMsg = defineMessage("log");
7
- var ErrorMsg = defineMessage("error");
8
- var subscriptions = /* @__PURE__ */ new Map();
9
- function normalizeLevel(level) {
10
- switch (level) {
11
- case "trace":
12
- case "debug":
13
- return "debug";
14
- case "info":
15
- return "info";
16
- case "warn":
17
- return "warn";
18
- case "error":
19
- case "fatal":
20
- return "error";
21
- default:
22
- return "info";
23
- }
24
- }
25
- function levelMatches(logLevel, filterLevel) {
26
- if (!filterLevel || filterLevel === "all") {
27
- return true;
28
- }
29
- const levelOrder = {
30
- debug: 0,
31
- trace: 0,
32
- info: 1,
33
- warn: 2,
34
- error: 3,
35
- fatal: 3
36
- };
37
- const logPriority = levelOrder[logLevel] ?? 1;
38
- const filterPriority = levelOrder[filterLevel] ?? 0;
39
- return logPriority >= filterPriority;
40
- }
41
- var logs_channel_default = defineWebSocket({
42
- path: "/logs/:jobId",
43
- description: "Real-time job logs streaming",
44
- handler: {
45
- async onConnect(ctx, sender) {
46
- const connectionId = sender.getConnectionId();
47
- ctx.platform.logger.info("[logs-channel] Client connected", { connectionId });
48
- const capabilities = ctx.platform.logs.getCapabilities();
49
- if (!capabilities.hasStreaming) {
50
- await sender.send(
51
- ErrorMsg.create({
52
- error: "Log streaming not available. Enable logRingBuffer adapter in config."
53
- })
54
- );
55
- sender.close(1011, "Streaming not available");
56
- }
57
- },
58
- async onMessage(ctx, message, sender) {
59
- const connectionId = sender.getConnectionId();
60
- const router = new MessageRouter().on(SubscribeMsg, async (ctx2, payload, _rawSender) => {
61
- const { jobId, level } = payload;
62
- ctx2.platform.logger.info("[logs-channel] Subscribing to logs", { connectionId, jobId, level });
63
- const existingUnsubscribe = subscriptions.get(connectionId);
64
- if (existingUnsubscribe) {
65
- existingUnsubscribe();
66
- }
67
- const filter = {
68
- source: jobId
69
- // Logs are tagged with jobId as source
70
- };
71
- const unsubscribe = ctx2.platform.logs.subscribe((log) => {
72
- if (!levelMatches(log.level, level)) {
73
- return;
74
- }
75
- const logJobId = log.fields?.jobId ?? log.fields?.runId ?? log.source;
76
- if (logJobId !== jobId) {
77
- return;
78
- }
79
- sender.send(
80
- LogMsg.create({
81
- timestamp: new Date(log.timestamp).toISOString(),
82
- level: normalizeLevel(log.level),
83
- message: log.message,
84
- context: log.fields
85
- })
86
- ).catch((err) => {
87
- ctx2.platform.logger.error("[logs-channel] Failed to send log", err instanceof Error ? err : void 0);
88
- });
89
- }, filter);
90
- subscriptions.set(connectionId, unsubscribe);
91
- await sender.send(
92
- LogMsg.create({
93
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
94
- level: "info",
95
- message: `Subscribed to logs for job ${jobId} (level: ${level || "all"})`
96
- })
97
- );
98
- }).on(UnsubscribeMsg, async (ctx2, _payload, _rawSender) => {
99
- ctx2.platform.logger.info("[logs-channel] Unsubscribing from logs", { connectionId });
100
- const unsubscribe = subscriptions.get(connectionId);
101
- if (unsubscribe) {
102
- unsubscribe();
103
- subscriptions.delete(connectionId);
104
- }
105
- await sender.send(
106
- LogMsg.create({
107
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
108
- level: "info",
109
- message: "Unsubscribed from logs"
110
- })
111
- );
112
- });
113
- await router.handle(ctx, message, sender.raw);
114
- },
115
- async onDisconnect(ctx, code, reason) {
116
- ctx.platform.logger.info("[logs-channel] Client disconnected", { code, reason });
117
- },
118
- async onError(ctx, error, sender) {
119
- ctx.platform.logger.error("[logs-channel] Error", error);
120
- try {
121
- await sender.send(ErrorMsg.create({ error: error.message }));
122
- } catch (sendError) {
123
- ctx.platform.logger.error("[logs-channel] Failed to send error message", sendError instanceof Error ? sendError : void 0);
124
- }
125
- },
126
- cleanup() {
127
- }
128
- }
129
- });
130
-
131
- export { logs_channel_default as default, levelMatches, normalizeLevel, subscriptions };
132
- //# sourceMappingURL=logs-channel.js.map
133
- //# sourceMappingURL=logs-channel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ws/logs-channel.ts"],"names":["ctx"],"mappings":"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","file":"logs-channel.js","sourcesContent":["/**\n * @module @kb-labs/workflow-cli/ws/logs-channel\n * WebSocket channel for real-time job logs streaming\n *\n * Uses platform.logs.subscribe() to stream logs filtered by jobId (runId).\n * Clients send Subscribe message with jobId to start receiving logs.\n */\n\nimport { defineWebSocket, defineMessage, MessageRouter } from '@kb-labs/sdk';\nimport type { LogRecord, LogQuery } from '@kb-labs/core-platform';\n\n// Define typed messages\nconst SubscribeMsg = defineMessage<{ jobId: string; level?: string }>('subscribe');\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nconst UnsubscribeMsg = defineMessage<{}>('unsubscribe');\n\nconst LogMsg = defineMessage<{\n timestamp: string;\n level: 'info' | 'warn' | 'error' | 'debug';\n message: string;\n context?: Record<string, unknown>;\n}>('log');\n\nconst ErrorMsg = defineMessage<{ error: string }>('error');\n\n// Incoming/Outgoing types (discriminated unions)\ntype Incoming = ReturnType<typeof SubscribeMsg.create> | ReturnType<typeof UnsubscribeMsg.create>;\n\ntype Outgoing =\n | ReturnType<typeof LogMsg.create>\n | ReturnType<ReturnType<typeof defineMessage<{ jobId: string; status: string }>>['create']>\n | ReturnType<typeof ErrorMsg.create>;\n\n// Store active subscriptions per connection\nconst subscriptions = new Map<string, () => void>();\n\n/**\n * Convert LogRecord level to channel level type\n */\nfunction normalizeLevel(level: LogRecord['level']): 'info' | 'warn' | 'error' | 'debug' {\n switch (level) {\n case 'trace':\n case 'debug':\n return 'debug';\n case 'info':\n return 'info';\n case 'warn':\n return 'warn';\n case 'error':\n case 'fatal':\n return 'error';\n default:\n return 'info';\n }\n}\n\n/**\n * Check if log level matches filter\n */\nfunction levelMatches(logLevel: LogRecord['level'], filterLevel?: string): boolean {\n if (!filterLevel || filterLevel === 'all') {\n return true;\n }\n\n const levelOrder: Record<string, number> = {\n debug: 0,\n trace: 0,\n info: 1,\n warn: 2,\n error: 3,\n fatal: 3,\n };\n\n const logPriority = levelOrder[logLevel] ?? 1;\n const filterPriority = levelOrder[filterLevel] ?? 0;\n\n return logPriority >= filterPriority;\n}\n\nexport default defineWebSocket<unknown, Incoming, Outgoing>({\n path: '/logs/:jobId',\n description: 'Real-time job logs streaming',\n\n handler: {\n async onConnect(ctx, sender) {\n const connectionId = sender.getConnectionId();\n ctx.platform.logger.info('[logs-channel] Client connected', { connectionId });\n\n // Check if streaming is available\n const capabilities = ctx.platform.logs.getCapabilities();\n if (!capabilities.hasStreaming) {\n await sender.send(\n ErrorMsg.create({\n error: 'Log streaming not available. Enable logRingBuffer adapter in config.',\n })\n );\n sender.close(1011, 'Streaming not available');\n }\n },\n\n async onMessage(ctx, message, sender) {\n const connectionId = sender.getConnectionId();\n\n const router = new MessageRouter()\n .on(SubscribeMsg, async (ctx, payload, _rawSender) => {\n const { jobId, level } = payload;\n\n ctx.platform.logger.info('[logs-channel] Subscribing to logs', { connectionId, jobId, level });\n\n // Unsubscribe from previous subscription if exists\n const existingUnsubscribe = subscriptions.get(connectionId);\n if (existingUnsubscribe) {\n existingUnsubscribe();\n }\n\n // Build filter for job logs\n const filter: LogQuery = {\n source: jobId, // Logs are tagged with jobId as source\n };\n\n // Subscribe to log stream\n const unsubscribe = ctx.platform.logs.subscribe((log: LogRecord) => {\n // Additional filtering by level\n if (!levelMatches(log.level, level)) {\n return;\n }\n\n // Also check if log belongs to this job via fields\n const logJobId = log.fields?.jobId ?? log.fields?.runId ?? log.source;\n if (logJobId !== jobId) {\n return;\n }\n\n // Send log to client\n sender.send(\n LogMsg.create({\n timestamp: new Date(log.timestamp).toISOString(),\n level: normalizeLevel(log.level),\n message: log.message,\n context: log.fields,\n })\n ).catch((err) => {\n ctx.platform.logger.error('[logs-channel] Failed to send log', err instanceof Error ? err : undefined);\n });\n }, filter);\n\n // Store unsubscribe function\n subscriptions.set(connectionId, unsubscribe);\n\n // Send confirmation\n await sender.send(\n LogMsg.create({\n timestamp: new Date().toISOString(),\n level: 'info',\n message: `Subscribed to logs for job ${jobId} (level: ${level || 'all'})`,\n })\n );\n })\n .on(UnsubscribeMsg, async (ctx, _payload, _rawSender) => {\n ctx.platform.logger.info('[logs-channel] Unsubscribing from logs', { connectionId });\n\n // Cleanup subscription\n const unsubscribe = subscriptions.get(connectionId);\n if (unsubscribe) {\n unsubscribe();\n subscriptions.delete(connectionId);\n }\n\n await sender.send(\n LogMsg.create({\n timestamp: new Date().toISOString(),\n level: 'info',\n message: 'Unsubscribed from logs',\n })\n );\n });\n\n await router.handle(ctx, message as any, sender.raw);\n },\n\n async onDisconnect(ctx, code, reason) {\n // Note: We don't have access to sender here, need to cleanup by other means\n // The connectionId would need to be stored during onConnect\n ctx.platform.logger.info('[logs-channel] Client disconnected', { code, reason });\n\n // Cleanup is handled automatically when connection is removed from registry\n // The subscription will be cleaned up when the socket closes\n },\n\n async onError(ctx, error, sender) {\n ctx.platform.logger.error('[logs-channel] Error', error);\n try {\n await sender.send(ErrorMsg.create({ error: error.message }));\n } catch (sendError) {\n ctx.platform.logger.error('[logs-channel] Failed to send error message', sendError instanceof Error ? sendError : undefined);\n }\n },\n\n cleanup() {\n // Note: This is called after each lifecycle event, not on final cleanup\n // For connection-specific cleanup, we handle it in onDisconnect and onMessage\n },\n },\n});\n\n// Export for testing\nexport { subscriptions, normalizeLevel, levelMatches };\n"]}
@@ -1,11 +0,0 @@
1
- import * as _kb_labs_plugin_contracts from '@kb-labs/plugin-contracts';
2
-
3
- /**
4
- * @module @kb-labs/workflow-cli/ws/progress-channel
5
- * WebSocket channel for real-time job progress updates
6
- */
7
- declare const _default: {
8
- execute(context: _kb_labs_plugin_contracts.PluginContextV3<unknown>, input: _kb_labs_plugin_contracts.WSInput): Promise<_kb_labs_plugin_contracts.CommandResult | void>;
9
- };
10
-
11
- export { _default as default };
@@ -1,46 +0,0 @@
1
- import { defineMessage, defineWebSocket, MessageRouter } from '@kb-labs/sdk';
2
-
3
- // src/ws/progress-channel.ts
4
- var SubscribeMsg = defineMessage("subscribe");
5
- var UnsubscribeMsg = defineMessage("unsubscribe");
6
- var StepStartMsg = defineMessage("step_start");
7
- var ErrorMsg = defineMessage("error");
8
- var progress_channel_default = defineWebSocket({
9
- path: "/progress/:jobId",
10
- description: "Real-time job progress updates",
11
- handler: {
12
- async onConnect(ctx, sender) {
13
- ctx.platform.logger.info("[progress-channel] Client connected", { connectionId: sender.getConnectionId() });
14
- },
15
- async onMessage(ctx, message, sender) {
16
- const router = new MessageRouter().on(SubscribeMsg, async (ctx2, payload, _rawSender) => {
17
- const { jobId } = payload;
18
- ctx2.platform.logger.info("[progress-channel] Subscribed to progress updates", { jobId });
19
- await sender.send(
20
- StepStartMsg.create({
21
- stepName: "initialization",
22
- stepIndex: 0
23
- })
24
- );
25
- }).on(UnsubscribeMsg, async (ctx2, _payload, _rawSender) => {
26
- ctx2.platform.logger.info("[progress-channel] Unsubscribed from progress updates");
27
- });
28
- await router.handle(ctx, message, sender.raw);
29
- },
30
- async onDisconnect(ctx, code, reason) {
31
- ctx.platform.logger.info("[progress-channel] Client disconnected", { code, reason });
32
- },
33
- async onError(ctx, error, sender) {
34
- ctx.platform.logger.error("[progress-channel] Error", error);
35
- try {
36
- await sender.send(ErrorMsg.create({ error: error.message }));
37
- } catch (sendError) {
38
- ctx.platform.logger.error("[progress-channel] Failed to send error message", sendError instanceof Error ? sendError : void 0);
39
- }
40
- }
41
- }
42
- });
43
-
44
- export { progress_channel_default as default };
45
- //# sourceMappingURL=progress-channel.js.map
46
- //# sourceMappingURL=progress-channel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ws/progress-channel.ts"],"names":["ctx"],"mappings":";;;AAQA,IAAM,YAAA,GAAe,cAAiC,WAAW,CAAA;AAEjE,IAAM,cAAA,GAAiB,cAAkB,aAAa,CAAA;AAEtD,IAAM,YAAA,GAAe,cAAuD,YAAY,CAAA;AAYxF,IAAM,QAAA,GAAW,cAAiC,OAAO,CAAA;AAYzD,IAAO,2BAAQ,eAAA,CAA6C;AAAA,EAC1D,IAAA,EAAM,kBAAA;AAAA,EACN,WAAA,EAAa,gCAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,SAAA,CAAU,GAAA,EAAK,MAAA,EAAQ;AAE3B,MAAA,GAAA,CAAI,QAAA,CAAS,OAAO,IAAA,CAAK,qCAAA,EAAuC,EAAE,YAAA,EAAc,MAAA,CAAO,eAAA,EAAgB,EAAG,CAAA;AAAA,IAI5G,CAAA;AAAA,IAEA,MAAM,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,MAAA,EAAQ;AACpC,MAAA,MAAM,MAAA,GAAS,IAAI,aAAA,EAAc,CAC9B,GAAG,YAAA,EAAc,OAAOA,IAAAA,EAAK,OAAA,EAAS,UAAA,KAAe;AACpD,QAAA,MAAM,EAAE,OAAM,GAAI,OAAA;AAElB,QAAAA,KAAI,QAAA,CAAS,MAAA,CAAO,KAAK,mDAAA,EAAqD,EAAE,OAAO,CAAA;AAIvF,QAAA,MAAM,MAAA,CAAO,IAAA;AAAA,UACX,aAAa,MAAA,CAAO;AAAA,YAClB,QAAA,EAAU,gBAAA;AAAA,YACV,SAAA,EAAW;AAAA,WACZ;AAAA,SACH;AAAA,MACF,CAAC,CAAA,CACA,EAAA,CAAG,gBAAgB,OAAOA,IAAAA,EAAK,UAAU,UAAA,KAAe;AACvD,QAAAA,IAAAA,CAAI,QAAA,CAAS,MAAA,CAAO,IAAA,CAAK,uDAAuD,CAAA;AAAA,MAElF,CAAC,CAAA;AAEH,MAAA,MAAM,MAAA,CAAO,MAAA,CAAO,GAAA,EAAK,OAAA,EAAgB,OAAO,GAAG,CAAA;AAAA,IACrD,CAAA;AAAA,IAEA,MAAM,YAAA,CAAa,GAAA,EAAK,IAAA,EAAM,MAAA,EAAQ;AACpC,MAAA,GAAA,CAAI,SAAS,MAAA,CAAO,IAAA,CAAK,0CAA0C,EAAE,IAAA,EAAM,QAAQ,CAAA;AAAA,IAErF,CAAA;AAAA,IAEA,MAAM,OAAA,CAAQ,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ;AAChC,MAAA,GAAA,CAAI,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,0BAAA,EAA4B,KAAK,CAAA;AAC3D,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,CAAO,KAAK,QAAA,CAAS,MAAA,CAAO,EAAE,KAAA,EAAO,KAAA,CAAM,OAAA,EAAS,CAAC,CAAA;AAAA,MAC7D,SAAS,SAAA,EAAW;AAClB,QAAA,GAAA,CAAI,SAAS,MAAA,CAAO,KAAA,CAAM,mDAAmD,SAAA,YAAqB,KAAA,GAAQ,YAAY,MAAS,CAAA;AAAA,MACjI;AAAA,IACF;AAAA;AAEJ,CAAC","file":"progress-channel.js","sourcesContent":["/**\n * @module @kb-labs/workflow-cli/ws/progress-channel\n * WebSocket channel for real-time job progress updates\n */\n\nimport { defineWebSocket, defineMessage, MessageRouter } from '@kb-labs/sdk';\n\n// Define typed messages\nconst SubscribeMsg = defineMessage<{ jobId: string }>('subscribe');\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nconst UnsubscribeMsg = defineMessage<{}>('unsubscribe');\n\nconst StepStartMsg = defineMessage<{ stepName: string; stepIndex: number }>('step_start');\n\n// Type-only message definitions (used only in type unions)\ntype StepProgressMsg = ReturnType<typeof defineMessage<{ stepName: string; progress: number; message?: string }>>;\ntype StepCompleteMsg = ReturnType<typeof defineMessage<{\n stepName: string;\n status: 'completed' | 'failed';\n durationMs: number;\n error?: string;\n}>>;\ntype JobCompleteMsg = ReturnType<typeof defineMessage<{ jobId: string; status: string; durationMs: number }>>;\n\nconst ErrorMsg = defineMessage<{ error: string }>('error');\n\n// Incoming/Outgoing types\ntype Incoming = ReturnType<typeof SubscribeMsg.create> | ReturnType<typeof UnsubscribeMsg.create>;\n\ntype Outgoing =\n | ReturnType<typeof StepStartMsg.create>\n | StepProgressMsg\n | StepCompleteMsg\n | JobCompleteMsg\n | ReturnType<typeof ErrorMsg.create>;\n\nexport default defineWebSocket<unknown, Incoming, Outgoing>({\n path: '/progress/:jobId',\n description: 'Real-time job progress updates',\n\n handler: {\n async onConnect(ctx, sender) {\n // Note: jobId will come from path params via runtime, not ctx.params\n ctx.platform.logger.info('[progress-channel] Client connected', { connectionId: sender.getConnectionId() });\n\n // TODO: Subscribe to progress events from daemon/engine\n // Client needs to send Subscribe message with jobId\n },\n\n async onMessage(ctx, message, sender) {\n const router = new MessageRouter()\n .on(SubscribeMsg, async (ctx, payload, _rawSender) => {\n const { jobId } = payload;\n\n ctx.platform.logger.info('[progress-channel] Subscribed to progress updates', { jobId });\n\n // TODO: Start streaming progress updates from engine\n // For now, send confirmation via step start message\n await sender.send(\n StepStartMsg.create({\n stepName: 'initialization',\n stepIndex: 0,\n })\n );\n })\n .on(UnsubscribeMsg, async (ctx, _payload, _rawSender) => {\n ctx.platform.logger.info('[progress-channel] Unsubscribed from progress updates');\n // TODO: Stop streaming\n });\n\n await router.handle(ctx, message as any, sender.raw);\n },\n\n async onDisconnect(ctx, code, reason) {\n ctx.platform.logger.info('[progress-channel] Client disconnected', { code, reason });\n // TODO: Cleanup subscriptions\n },\n\n async onError(ctx, error, sender) {\n ctx.platform.logger.error('[progress-channel] Error', error);\n try {\n await sender.send(ErrorMsg.create({ error: error.message }));\n } catch (sendError) {\n ctx.platform.logger.error('[progress-channel] Failed to send error message', sendError instanceof Error ? sendError : undefined);\n }\n },\n },\n});\n"]}
@@ -1,10 +0,0 @@
1
- import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
-
3
- /**
4
- * workflow:health command - Check daemon health
5
- */
6
- declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, any, {
7
- exitCode: number;
8
- }>;
9
-
10
- export { _default as default };
@@ -1,215 +0,0 @@
1
- import { defineCommand } from '@kb-labs/sdk';
2
-
3
- // src/commands/health.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/health.ts
175
- var health_default = defineCommand({
176
- id: "workflow:health",
177
- description: "Check workflow daemon health status",
178
- handler: {
179
- async execute(ctx, input) {
180
- const flags = input.flags ?? input;
181
- const outputJson = flags.json ?? false;
182
- try {
183
- const client = new WorkflowDaemonClient();
184
- const health = await client.health();
185
- if (outputJson) {
186
- ctx.ui?.json?.({ ok: true, data: health });
187
- } else {
188
- ctx.ui?.success?.("Daemon is healthy", {
189
- title: "Workflow Daemon",
190
- sections: [
191
- {
192
- header: "Status",
193
- items: [`Service: ${health.service}`, "Health: OK"]
194
- }
195
- ]
196
- });
197
- }
198
- return { exitCode: 0 };
199
- } catch (error) {
200
- const message = error instanceof Error ? error.message : String(error);
201
- if (outputJson) {
202
- ctx.ui?.json?.({ ok: false, error: message });
203
- } else {
204
- ctx.ui?.error?.(`Failed to check daemon health: ${message}`);
205
- ctx.ui?.warn?.(`Make sure workflow daemon is running: kb-workflow`);
206
- }
207
- return { exitCode: 1 };
208
- }
209
- }
210
- }
211
- });
212
-
213
- export { health_default as default };
214
- //# sourceMappingURL=health.js.map
215
- //# sourceMappingURL=health.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/http-client.ts","../../src/commands/health.ts"],"names":[],"mappings":"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","file":"health.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:health command - Check daemon health\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport { type HealthFlags } from '@kb-labs/workflow-contracts';\nimport { WorkflowDaemonClient } from '../http-client.js';\n\ntype HealthInput = HealthFlags & { argv?: string[] };\n\nexport default defineCommand<unknown, HealthInput, { exitCode: number }>({\n id: 'workflow:health',\n description: 'Check workflow daemon health status',\n\n handler: {\n async execute(ctx: PluginContextV3, input: HealthInput): Promise<{ exitCode: number }> {\n const flags = (input as any).flags ?? input;\n const outputJson = flags.json ?? false;\n\n try {\n const client = new WorkflowDaemonClient();\n const health = await client.health();\n\n if (outputJson) {\n ctx.ui?.json?.({ ok: true, data: health });\n } else {\n ctx.ui?.success?.('Daemon is healthy', {\n title: 'Workflow Daemon',\n sections: [\n {\n header: 'Status',\n items: [`Service: ${health.service}`, 'Health: OK'],\n },\n ],\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 check daemon health: ${message}`);\n ctx.ui?.warn?.(`Make sure workflow daemon is running: kb-workflow`);\n }\n\n return { exitCode: 1 };\n }\n },\n },\n});\n"]}
@@ -1,10 +0,0 @@
1
- import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
-
3
- /**
4
- * workflow:list command - List active executions
5
- */
6
- declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, any, {
7
- exitCode: number;
8
- }>;
9
-
10
- export { _default as default };