@viewportai/daemon 0.25.12 → 0.25.13

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 (123) hide show
  1. package/dist/cli/check-command.d.ts +2 -0
  2. package/dist/cli/check-command.d.ts.map +1 -0
  3. package/dist/cli/check-command.js +168 -0
  4. package/dist/cli/check-command.js.map +1 -0
  5. package/dist/cli/commands.d.ts +2 -0
  6. package/dist/cli/commands.d.ts.map +1 -1
  7. package/dist/cli/commands.js +2 -0
  8. package/dist/cli/commands.js.map +1 -1
  9. package/dist/cli/diagnostic-command.d.ts +2 -0
  10. package/dist/cli/diagnostic-command.d.ts.map +1 -0
  11. package/dist/cli/diagnostic-command.js +102 -0
  12. package/dist/cli/diagnostic-command.js.map +1 -0
  13. package/dist/cli/lifecycle-commands.d.ts.map +1 -1
  14. package/dist/cli/lifecycle-commands.js +2 -1
  15. package/dist/cli/lifecycle-commands.js.map +1 -1
  16. package/dist/cli/lifecycle-pair-command.d.ts.map +1 -1
  17. package/dist/cli/lifecycle-pair-command.js +31 -0
  18. package/dist/cli/lifecycle-pair-command.js.map +1 -1
  19. package/dist/cli/policy-schema-validator.d.ts +221 -0
  20. package/dist/cli/policy-schema-validator.d.ts.map +1 -0
  21. package/dist/cli/policy-schema-validator.js +280 -0
  22. package/dist/cli/policy-schema-validator.js.map +1 -0
  23. package/dist/cli/support-packet.d.ts +7 -0
  24. package/dist/cli/support-packet.d.ts.map +1 -0
  25. package/dist/cli/support-packet.js +19 -0
  26. package/dist/cli/support-packet.js.map +1 -0
  27. package/dist/cli/worker-command.d.ts.map +1 -1
  28. package/dist/cli/worker-command.js +367 -14
  29. package/dist/cli/worker-command.js.map +1 -1
  30. package/dist/cli/worker-process-lock.d.ts +27 -0
  31. package/dist/cli/worker-process-lock.d.ts.map +1 -0
  32. package/dist/cli/worker-process-lock.js +150 -0
  33. package/dist/cli/worker-process-lock.js.map +1 -0
  34. package/dist/cli/worker-profile.d.ts +20 -0
  35. package/dist/cli/worker-profile.d.ts.map +1 -1
  36. package/dist/cli/worker-profile.js +38 -0
  37. package/dist/cli/worker-profile.js.map +1 -1
  38. package/dist/cli/worker-runtime.d.ts +2 -1
  39. package/dist/cli/worker-runtime.d.ts.map +1 -1
  40. package/dist/cli/worker-runtime.js +282 -88
  41. package/dist/cli/worker-runtime.js.map +1 -1
  42. package/dist/cli/workflow-managed-worker-format.d.ts.map +1 -1
  43. package/dist/cli/workflow-managed-worker-format.js +3 -1
  44. package/dist/cli/workflow-managed-worker-format.js.map +1 -1
  45. package/dist/cli/workflow-managed-worker.d.ts.map +1 -1
  46. package/dist/cli/workflow-managed-worker.js +157 -20
  47. package/dist/cli/workflow-managed-worker.js.map +1 -1
  48. package/dist/core/logger.d.ts.map +1 -1
  49. package/dist/core/logger.js +6 -0
  50. package/dist/core/logger.js.map +1 -1
  51. package/dist/core/output.d.ts.map +1 -1
  52. package/dist/core/output.js +5 -4
  53. package/dist/core/output.js.map +1 -1
  54. package/dist/core/redaction.d.ts +4 -0
  55. package/dist/core/redaction.d.ts.map +1 -0
  56. package/dist/core/redaction.js +76 -0
  57. package/dist/core/redaction.js.map +1 -0
  58. package/dist/index.d.ts +2 -0
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +5 -1
  61. package/dist/index.js.map +1 -1
  62. package/dist/workflows/action-provider-adapters.js +52 -4
  63. package/dist/workflows/action-provider-adapters.js.map +1 -1
  64. package/dist/workflows/checkout-node.d.ts +1 -0
  65. package/dist/workflows/checkout-node.d.ts.map +1 -1
  66. package/dist/workflows/checkout-node.js +9 -4
  67. package/dist/workflows/checkout-node.js.map +1 -1
  68. package/dist/workflows/event-types.d.ts +1 -1
  69. package/dist/workflows/event-types.d.ts.map +1 -1
  70. package/dist/workflows/git-publish-node.d.ts +20 -0
  71. package/dist/workflows/git-publish-node.d.ts.map +1 -1
  72. package/dist/workflows/git-publish-node.js +87 -3
  73. package/dist/workflows/git-publish-node.js.map +1 -1
  74. package/dist/workflows/node-executor.d.ts +6 -0
  75. package/dist/workflows/node-executor.d.ts.map +1 -1
  76. package/dist/workflows/node-executor.js +53 -2
  77. package/dist/workflows/node-executor.js.map +1 -1
  78. package/dist/workflows/node-registry.d.ts +2 -2
  79. package/dist/workflows/node-registry.d.ts.map +1 -1
  80. package/dist/workflows/node-registry.js +129 -5
  81. package/dist/workflows/node-registry.js.map +1 -1
  82. package/dist/workflows/parser.d.ts.map +1 -1
  83. package/dist/workflows/parser.js +17 -1
  84. package/dist/workflows/parser.js.map +1 -1
  85. package/dist/workflows/platform-command-applier.d.ts +4 -0
  86. package/dist/workflows/platform-command-applier.d.ts.map +1 -1
  87. package/dist/workflows/platform-command-applier.js +152 -1
  88. package/dist/workflows/platform-command-applier.js.map +1 -1
  89. package/dist/workflows/platform-runtime-command.d.ts +2 -0
  90. package/dist/workflows/platform-runtime-command.d.ts.map +1 -1
  91. package/dist/workflows/platform-runtime-command.js +2 -0
  92. package/dist/workflows/platform-runtime-command.js.map +1 -1
  93. package/dist/workflows/platform-sync-payload.js +18 -4
  94. package/dist/workflows/platform-sync-payload.js.map +1 -1
  95. package/dist/workflows/platform-sync.js +7 -2
  96. package/dist/workflows/platform-sync.js.map +1 -1
  97. package/dist/workflows/policy-enforcement.d.ts +43 -0
  98. package/dist/workflows/policy-enforcement.d.ts.map +1 -0
  99. package/dist/workflows/policy-enforcement.js +0 -0
  100. package/dist/workflows/policy-enforcement.js.map +1 -0
  101. package/dist/workflows/run-types.d.ts +1 -0
  102. package/dist/workflows/run-types.d.ts.map +1 -1
  103. package/dist/workflows/runner.d.ts +4 -1
  104. package/dist/workflows/runner.d.ts.map +1 -1
  105. package/dist/workflows/runner.js +46 -12
  106. package/dist/workflows/runner.js.map +1 -1
  107. package/dist/workflows/types.d.ts +33 -0
  108. package/dist/workflows/types.d.ts.map +1 -1
  109. package/dist/workflows/workflow-authority-contract.d.ts +1 -1
  110. package/dist/workflows/workflow-authority-contract.d.ts.map +1 -1
  111. package/dist/workflows/workflow-authority-contract.js +23 -0
  112. package/dist/workflows/workflow-authority-contract.js.map +1 -1
  113. package/dist/workflows/workflow-production-schema.d.ts +13 -0
  114. package/dist/workflows/workflow-production-schema.d.ts.map +1 -1
  115. package/dist/workflows/workflow-production-schema.js +26 -0
  116. package/dist/workflows/workflow-production-schema.js.map +1 -1
  117. package/dist/workflows/workflow-production-types.d.ts +6 -0
  118. package/dist/workflows/workflow-production-types.d.ts.map +1 -1
  119. package/dist/workflows/workflow-schema.d.ts +50 -0
  120. package/dist/workflows/workflow-schema.d.ts.map +1 -1
  121. package/dist/workflows/workflow-schema.js +41 -0
  122. package/dist/workflows/workflow-schema.js.map +1 -1
  123. package/package.json +6 -3
@@ -100,7 +100,9 @@ export function approvalActor(node) {
100
100
  export function approvalExpectedActionDigest(node) {
101
101
  const approval = node.metadata?.['approval'];
102
102
  if (approval && typeof approval === 'object') {
103
- const digest = approval.actionDigest;
103
+ const digest = approval.expectedActionDigest ??
104
+ approval.expected_action_digest ??
105
+ approval.actionDigest;
104
106
  if (typeof digest === 'string' && digest.trim() !== '')
105
107
  return digest;
106
108
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-managed-worker-format.js","sourceRoot":"","sources":["../../src/cli/workflow-managed-worker-format.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAG/E,OAAO,EAAE,wBAAwB,IAAI,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE1G,MAAM,UAAU,iBAAiB,CAC/B,YAAuC;IAEvC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,sBAAsB,CACnC,YAAY,CAAC,MAAM,EACnB,YAAY,CAAC,MAAM,EACnB,KAAK,EACL,YAAY,CAAC,WAAW,CACzB,CAAC;IAEF,OAAO;QACL,KAAK;QACL,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,GAAG,CAAC,CAAC,YAAY,CAAC,aAAa,IAAI,YAAY,CAAC,eAAe,CAAC;YAChE,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YAClC,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,CAAC,YAAY,EAAE;YAC9C,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9E,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAAgB,EAChB,MAAgB,EAChB,KAAe,EACf,WAAiD;IAEjD,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACjF,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAEjF,OAAO,MAAM,CAAC,WAAW,CACvB,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACzB,MAAM,cAAc,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,YAAY,GAChB,cAAc,CAAC,MAAM,GAAG,CAAC;YACvB,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC3E,MAAM,cAAc,GAClB,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;QAEnF,OAAO;YACL,KAAK;YACL;gBACE,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,cAAc;gBACtB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC;gBAClC,kBAAkB,EAAE,KAAK,KAAK,QAAQ;aACvC;SACF,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAAgB;IACrC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa,EAAE,KAAa;IAC1D,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5C,IAAI,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,CACL,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAClC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC;YAChC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAClC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAClC,CAAC;IACJ,CAAC;IACD,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5E,OAAO,CACL,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC/B,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC;YACjC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC/B,CAAC;IACJ,CAAC;IACD,IAAI,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,KAAe;IACnD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC7B,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAa;IACpC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACvD,OAAQ,IAA0B,CAAC,IAAI,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAa;IACnC,MAAM,GAAG,GACP,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,CAAE,IAAyB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5F,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAQ,GAAwB,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QACxF,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,GAAwB,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAqD;IACnF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QACtE,MAAM,OAAO,GAAI,QAAkC,CAAC,OAAO,CAAC;QAC5D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,OAAO,CAAC;IAC3E,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,IAAI,wBAAwB,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAAqD;IAErD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,KAAK,GACT,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAE,QAAgC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5F,OAAO,6BAA6B,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,IAAqD;IAErD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAI,QAAuC,CAAC,YAAY,CAAC;QACrE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,MAAM,CAAC;IACxE,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACzC,MAAM,MAAM,GAAI,MAA+B,CAAC,MAAM,CAAC;QACvD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,MAAM,CAAC;IACxE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,IAAqD;IAErD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,KAAK,GACR,QAAoE,CAAC,cAAc;QACnF,QAA0C,CAAC,eAAe,CAAC;IAC9D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,OAAO;QACL,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,MAAM;QACN,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACrC,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAW,EAAE;YACjE,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAC9C,CAAC,CAAC,EAAE,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAW,EAAE;YACnF,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAW,EAAE;YAC3D,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,IAAqD;IAErD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,QAAQ,GAAI,QAAmC,CAAC,QAAQ,CAAC;IAC/D,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAE3F,OAAO,QAAmC,CAAC;AAC7C,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAAoB;IACtD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC"}
1
+ {"version":3,"file":"workflow-managed-worker-format.js","sourceRoot":"","sources":["../../src/cli/workflow-managed-worker-format.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-managed-worker.d.ts","sourceRoot":"","sources":["../../src/cli/workflow-managed-worker.ts"],"names":[],"mappings":"AAwDA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA6LpD"}
1
+ {"version":3,"file":"workflow-managed-worker.d.ts","sourceRoot":"","sources":["../../src/cli/workflow-managed-worker.ts"],"names":[],"mappings":"AAyDA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA4NpD"}
@@ -13,6 +13,7 @@ import { executeProviderAction, WorkflowActionError, } from '../workflows/action
13
13
  import { envNameForCredentialRef } from '../workflows/action-provider-utils.js';
14
14
  import { sanitizeActionInput } from '../workflows/action-digest.js';
15
15
  import { approvalActor, approvalExecutionGrant, approvalFeedback, approvalExpectedActionDigest, approvalMessage, capabilityPayload, dataFrom, localRunToSyncPayload, progressSyncEveryMs, readRun, } from './workflow-managed-worker-format.js';
16
+ import { acquireWorkerProcessLock } from './worker-process-lock.js';
16
17
  export async function workflowWorker() {
17
18
  if (hasFlag('help') || getArgs().includes('-h')) {
18
19
  console.log(workflowWorkerUsage());
@@ -63,6 +64,7 @@ export async function workflowWorker() {
63
64
  failed: 0,
64
65
  };
65
66
  let failed = false;
67
+ const processLock = options.once ? undefined : acquireWorkerProcessLock(options);
66
68
  try {
67
69
  do {
68
70
  await heartbeat(options, 'online', 'idle');
@@ -91,6 +93,17 @@ export async function workflowWorker() {
91
93
  continue;
92
94
  }
93
95
  stats.claimed += 1;
96
+ if (assignment.status === 'canceled') {
97
+ const canceledRun = assignmentCanceledBeforeStartRun(assignment);
98
+ clearRunCredentialMaterial(assignment.id);
99
+ await syncLocalRun(options, assignment.id, canceledRun, assignment.assignment_claim_token);
100
+ stats.failed += 1;
101
+ if (options.once ||
102
+ (options.maxRuns !== undefined && totalClaimed(stats) >= options.maxRuns)) {
103
+ break;
104
+ }
105
+ continue;
106
+ }
94
107
  let localRun;
95
108
  try {
96
109
  localRun = await runAssignmentLocally(options, assignment);
@@ -131,7 +144,21 @@ export async function workflowWorker() {
131
144
  continue;
132
145
  }
133
146
  }
134
- const synced = await syncLocalRun(options, assignment.id, localRun, assignment.assignment_claim_token);
147
+ let synced;
148
+ try {
149
+ synced = await syncLocalRun(options, assignment.id, localRun, assignment.assignment_claim_token);
150
+ }
151
+ catch (error) {
152
+ if (localRun.status === 'canceled' && isPlatformAccessDenied(error)) {
153
+ stats.failed += 1;
154
+ if (options.once ||
155
+ (options.maxRuns !== undefined && totalClaimed(stats) >= options.maxRuns)) {
156
+ break;
157
+ }
158
+ continue;
159
+ }
160
+ throw error;
161
+ }
135
162
  if (synced.status === 'blocked') {
136
163
  stats.blocked += 1;
137
164
  if (!options.once) {
@@ -158,6 +185,7 @@ export async function workflowWorker() {
158
185
  throw error;
159
186
  }
160
187
  finally {
188
+ processLock?.release();
161
189
  await safeHeartbeat(options, 'offline', failed ? 'degraded' : 'offline');
162
190
  }
163
191
  if (isJsonMode()) {
@@ -208,6 +236,9 @@ async function syncDaemonModelCapabilities(options) {
208
236
  if (allModels.length === 0) {
209
237
  return;
210
238
  }
239
+ if (options.capabilities.agents.length === 0) {
240
+ options.capabilities.agents = Object.keys(catalog);
241
+ }
211
242
  options.capabilities.models = allModels;
212
243
  options.capabilities.agentModels = catalog;
213
244
  }
@@ -950,7 +981,16 @@ async function runAssignmentLocally(options, assignment) {
950
981
  if (existingRun) {
951
982
  if (existingRun.status === 'running' || existingRun.status === 'queued') {
952
983
  const completed = await pollLocalRun(existingRun.id, async (run) => {
953
- await syncLocalRun(options, assignment.id, run, assignment.assignment_claim_token);
984
+ try {
985
+ await syncLocalRun(options, assignment.id, run, assignment.assignment_claim_token);
986
+ }
987
+ catch (error) {
988
+ if (isPlatformAccessDenied(error)) {
989
+ return cancelLocalRun(existingRun.id);
990
+ }
991
+ throw error;
992
+ }
993
+ return cancelLocalRunIfAssignmentCanceled(options, assignment.id, existingRun.id, assignment.assignment_claim_token);
954
994
  }, progressSyncEveryMs(options.leaseSeconds));
955
995
  if (terminalRunStatus(completed.status)) {
956
996
  clearRunCredentialMaterial(assignment.id);
@@ -990,7 +1030,16 @@ async function runAssignmentLocally(options, assignment) {
990
1030
  });
991
1031
  const runId = readRun(started).id;
992
1032
  const completed = await pollLocalRun(runId, async (run) => {
993
- await syncLocalRun(options, assignment.id, run, assignment.assignment_claim_token);
1033
+ try {
1034
+ await syncLocalRun(options, assignment.id, run, assignment.assignment_claim_token);
1035
+ }
1036
+ catch (error) {
1037
+ if (isPlatformAccessDenied(error)) {
1038
+ return cancelLocalRun(runId);
1039
+ }
1040
+ throw error;
1041
+ }
1042
+ return cancelLocalRunIfAssignmentCanceled(options, assignment.id, runId, assignment.assignment_claim_token);
994
1043
  }, progressSyncEveryMs(options.leaseSeconds));
995
1044
  if (terminalRunStatus(completed.status)) {
996
1045
  clearRunCredentialMaterial(assignment.id);
@@ -1131,6 +1180,65 @@ function assignmentExecutionFailureRun(assignment, error) {
1131
1180
  error: message,
1132
1181
  };
1133
1182
  }
1183
+ function assignmentCanceledBeforeStartRun(assignment) {
1184
+ const now = Date.now();
1185
+ const runtimeRunId = `assignment-canceled-before-start-${assignment.id}`;
1186
+ const message = 'Managed workflow assignment was canceled before local execution started.';
1187
+ return {
1188
+ id: runtimeRunId,
1189
+ workflowName: 'managed-assignment-canceled',
1190
+ sourceType: 'viewport_snapshot',
1191
+ sourcePath: assignment.source_ref ?? `viewport://managed-executor/${assignment.id}`,
1192
+ digest: `managed-assignment-canceled:${assignment.id}`,
1193
+ schema: 'viewport.workflow/v1',
1194
+ yamlSnapshot: assignment.yaml_snapshot ?? '',
1195
+ directoryId: 'managed-assignment-canceled',
1196
+ directoryPath: assignment.directory_path ?? process.cwd(),
1197
+ resourceId: undefined,
1198
+ runtimeTargetId: assignment.runtime_target_id ?? undefined,
1199
+ platformRunId: assignment.id,
1200
+ machineId: 'managed-executor',
1201
+ dataCapturePolicy: {
1202
+ transcripts: assignment.data_capture_policy?.transcripts ?? 'none',
1203
+ logs: assignment.data_capture_policy?.logs ?? 'metadata',
1204
+ artifacts: assignment.data_capture_policy?.artifacts ?? 'metadata',
1205
+ },
1206
+ initiation: 'cli',
1207
+ status: 'canceled',
1208
+ inputs: assignment.input_snapshot ?? {},
1209
+ preflight: {
1210
+ ok: false,
1211
+ issues: [
1212
+ {
1213
+ kind: 'node',
1214
+ name: 'managed-assignment-canceled',
1215
+ message,
1216
+ },
1217
+ ],
1218
+ },
1219
+ nodes: {},
1220
+ artifacts: [],
1221
+ events: [
1222
+ {
1223
+ id: 'managed-assignment-canceled-before-start',
1224
+ runId: runtimeRunId,
1225
+ timestamp: now,
1226
+ type: 'run-canceled',
1227
+ message,
1228
+ data: {
1229
+ platform_run_id: assignment.id,
1230
+ runtime_run_id: runtimeRunId,
1231
+ recovery_policy: 'skip_local_execution_for_canceled_assignment',
1232
+ },
1233
+ },
1234
+ ],
1235
+ createdAt: now,
1236
+ startedAt: now,
1237
+ updatedAt: now,
1238
+ completedAt: now,
1239
+ error: message,
1240
+ };
1241
+ }
1134
1242
  function recordChildValue(value, key) {
1135
1243
  if (!value || typeof value !== 'object' || Array.isArray(value))
1136
1244
  return undefined;
@@ -1305,9 +1413,13 @@ async function materializeCredential(options, assignment, handle) {
1305
1413
  return data;
1306
1414
  }
1307
1415
  function repositoryForCredentialMaterialization(assignment, handle) {
1308
- const actionRepository = repositoryFromActionCredentialRef(assignment, handle);
1309
- if (actionRepository)
1310
- return { repository: actionRepository };
1416
+ const actionRepositories = repositoriesFromActionCredentialRef(assignment, handle);
1417
+ if (actionRepositories.length === 1 && actionRepositories[0]) {
1418
+ return { repository: actionRepositories[0] };
1419
+ }
1420
+ if (actionRepositories.length > 1) {
1421
+ return { repositories: actionRepositories };
1422
+ }
1311
1423
  const checkoutEntries = [
1312
1424
  ...credentialEntriesFrom(pathValue(asRecord(assignment.execution_profile_snapshot), ['credentials', 'repo_checkout'])),
1313
1425
  ...credentialEntriesFrom(pathValue(asRecord(assignment.workflow_snapshot), ['credentials', 'repo_checkout'])),
@@ -1427,11 +1539,12 @@ function actionCredentialRefs(nodes) {
1427
1539
  return credentialRef ? [credentialRef] : [];
1428
1540
  });
1429
1541
  }
1430
- function repositoryFromActionCredentialRef(assignment, handle) {
1542
+ function repositoriesFromActionCredentialRef(assignment, handle) {
1431
1543
  const workflow = yamlSnapshotDocument(assignment);
1432
1544
  const nodes = isRecord(workflow) ? workflow['nodes'] : undefined;
1433
1545
  if (!isRecord(nodes))
1434
- return null;
1546
+ return [];
1547
+ const repositories = new Set();
1435
1548
  for (const node of Object.values(nodes)) {
1436
1549
  if (!isRecord(node) || stringField(node, 'type') !== 'action')
1437
1550
  continue;
@@ -1442,9 +1555,9 @@ function repositoryFromActionCredentialRef(assignment, handle) {
1442
1555
  const repository = stringField(withValue, 'repository') ?? stringField(withValue, 'repo');
1443
1556
  const rendered = renderCredentialTemplate(repository, assignment);
1444
1557
  if (rendered)
1445
- return rendered;
1558
+ repositories.add(rendered);
1446
1559
  }
1447
- return null;
1560
+ return [...repositories].sort();
1448
1561
  }
1449
1562
  function renderCredentialTemplate(value, assignment) {
1450
1563
  if (!value)
@@ -1532,11 +1645,7 @@ async function waitForApprovalAndResume(options, platformRunId, localRunId, assi
1532
1645
  }
1533
1646
  }
1534
1647
  if (assignment.status === 'canceled' || assignment.status === 'failed') {
1535
- const canceled = await daemonJson('POST', `/api/workflows/runs/${encodeURIComponent(localRunId)}/cancel`, {
1536
- message: 'Managed workflow assignment was canceled from Viewport.',
1537
- actor: { name: 'Viewport', source: 'managed-executor' },
1538
- });
1539
- const run = readRun(canceled);
1648
+ const run = await cancelLocalRun(localRunId);
1540
1649
  await syncLocalRun(options, platformRunId, run, assignmentClaimToken);
1541
1650
  return run;
1542
1651
  }
@@ -1547,6 +1656,19 @@ async function waitForApprovalAndResume(options, platformRunId, localRunId, assi
1547
1656
  await delay(options.commandSleepSeconds * 1000);
1548
1657
  }
1549
1658
  }
1659
+ async function cancelLocalRunIfAssignmentCanceled(options, platformRunId, localRunId, assignmentClaimToken) {
1660
+ const assignment = await getAssignment(options, platformRunId, assignmentClaimToken);
1661
+ if (assignment.status !== 'canceled' && assignment.status !== 'failed')
1662
+ return undefined;
1663
+ return cancelLocalRun(localRunId);
1664
+ }
1665
+ async function cancelLocalRun(localRunId) {
1666
+ const canceled = await daemonJson('POST', `/api/workflows/runs/${encodeURIComponent(localRunId)}/cancel`, {
1667
+ message: 'Managed workflow assignment was canceled from Viewport.',
1668
+ actor: { name: 'Viewport', source: 'managed-executor' },
1669
+ });
1670
+ return readRun(canceled);
1671
+ }
1550
1672
  async function applyBrokerActionCompletedCommands(options, platformRunId, assignment, localRunId, assignmentClaimToken) {
1551
1673
  const localRun = await readExistingLocalRun(localRunId);
1552
1674
  const commands = (assignment.runtime_commands ?? []).filter((command) => command['type'] === 'workflow.action_completed' &&
@@ -1659,7 +1781,7 @@ async function resumeApprovedLocalRun(options, platformRunId, localRunId, approv
1659
1781
  });
1660
1782
  }
1661
1783
  catch (error) {
1662
- if (!isAlreadyResolvedApprovalError(error))
1784
+ if (!isNonFatalApprovalResumeError(error))
1663
1785
  throw error;
1664
1786
  const current = await readExistingLocalRun(localRunId);
1665
1787
  if (!current)
@@ -1735,9 +1857,10 @@ function assignmentWorkflowAuthorityContracts(assignment) {
1735
1857
  recordChildValue(recordChildValue(asRecord(assignment.input_snapshot), 'viewport'), 'workflowAuthorityContract'),
1736
1858
  ].filter(isRecord);
1737
1859
  }
1738
- function isAlreadyResolvedApprovalError(error) {
1860
+ function isNonFatalApprovalResumeError(error) {
1739
1861
  const message = error instanceof Error ? error.message : String(error);
1740
- return message.includes('Workflow node is not awaiting approval');
1862
+ return (message.includes('Workflow node is not awaiting approval') ||
1863
+ message.includes('The proposed action changed before approval'));
1741
1864
  }
1742
1865
  function isResolvedManagedGateNode(node) {
1743
1866
  if (!['approval', 'gate', 'plan'].includes(String(node.type ?? '')))
@@ -1800,6 +1923,7 @@ async function ensureDirectory(directoryPath) {
1800
1923
  const existing = directories.find((directory) => directory.path === resolvedPath);
1801
1924
  if (existing)
1802
1925
  return existing;
1926
+ await fs.promises.mkdir(resolvedPath, { recursive: true, mode: 0o700 });
1803
1927
  const created = (await daemonJson('POST', '/api/directories', { path: resolvedPath }));
1804
1928
  if (!created.id)
1805
1929
  throw new Error(`Failed to register workflow worker directory: ${resolvedPath}`);
@@ -1813,12 +1937,25 @@ async function pollLocalRun(runId, onProgress, progressEveryMs = 30_000) {
1813
1937
  if (['completed', 'failed', 'blocked', 'canceled'].includes(run.status))
1814
1938
  return run;
1815
1939
  if (onProgress && Date.now() >= nextProgressAt) {
1816
- await onProgress(run);
1940
+ const progressRun = await onProgress(run);
1941
+ if (progressRun)
1942
+ return progressRun;
1817
1943
  nextProgressAt = Date.now() + progressEveryMs;
1818
1944
  }
1819
1945
  await delay(500);
1820
1946
  }
1821
1947
  }
1948
+ class PlatformRequestError extends Error {
1949
+ status;
1950
+ constructor(status, message) {
1951
+ super(message);
1952
+ this.status = status;
1953
+ this.name = 'PlatformRequestError';
1954
+ }
1955
+ }
1956
+ function isPlatformAccessDenied(error) {
1957
+ return error instanceof PlatformRequestError && [401, 402, 403, 404].includes(error.status);
1958
+ }
1822
1959
  async function daemonJson(method, urlPath, body) {
1823
1960
  const response = await daemonFetch(urlPath, {
1824
1961
  method,
@@ -1855,7 +1992,7 @@ async function platformFetch(options, method, pathSuffix, body, assignmentClaimT
1855
1992
  tlsPins: parseCsvList(process.env['VPD_SERVER_TLS_PINS']),
1856
1993
  });
1857
1994
  if (!response.ok && response.status !== 204) {
1858
- throw new Error(`Platform request failed: HTTP ${response.status} ${await response.text()}`);
1995
+ throw new PlatformRequestError(response.status, `Platform request failed: HTTP ${response.status} ${await response.text()}`);
1859
1996
  }
1860
1997
  return response;
1861
1998
  }