@uipath/maestro-tool 1.204.0 → 1.205.0-preview.258

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 (258) hide show
  1. package/README.md +3 -3
  2. package/dist/{DmnFactory-VWZOSZHH-ggnfcqpa.js → DmnFactory-L7MABUC6-qkvfv1cw.js} +143 -98
  3. package/dist/{KieDmnMarshaller-6TTUU5B4-6apscj68.js → KieDmnMarshaller-LGE63WDG-cybersk4.js} +3 -3
  4. package/dist/THIRD-PARTY-NOTICES.md +47 -23
  5. package/dist/{authoring-ed7fgg74.js → authoring-5xyc2bbq.js} +8 -6
  6. package/dist/{authoring-1qn6m2g3.js → authoring-ehed6df3.js} +8 -6
  7. package/dist/{authoring-ex7mq672.js → authoring-rw21p50g.js} +8 -6
  8. package/dist/{binding-service-dj04a6e6.js → binding-service-b2v8y2sb.js} +44 -35
  9. package/dist/{bpmn-action-type-validator-cja8vct2.js → bpmn-action-type-validator-xg4ncg63.js} +2 -2
  10. package/dist/{bpmn-binding-resolver-3v5223kx.js → bpmn-binding-resolver-wz7xk54x.js} +9 -7
  11. package/dist/{bpmn-branch-a25m8bc2.js → bpmn-branch-ywmc5egw.js} +48 -47
  12. package/dist/{bpmn-format-service-64fsaq4j.js → bpmn-format-service-aq8ekvy2.js} +7 -5
  13. package/dist/{bpmn-refresh-service-ytf3ngzm.js → bpmn-refresh-service-gy1ekx3m.js} +10 -8
  14. package/dist/{bpmn-update-metadata-service-jpz5mfk4.js → bpmn-update-metadata-service-rnf421er.js} +7 -5
  15. package/dist/bpmn-validate-service-7e3q83nh.js +16 -0
  16. package/dist/{business-rule-export-j6xxtp5s.js → business-rule-export-xa719ws5.js} +2 -2
  17. package/dist/canvas-notes-xc2ejzqj.js +23 -0
  18. package/dist/{case-api-bxcxbgm9.js → case-api-v64traxv.js} +9 -7
  19. package/dist/case-bindings-service-hwz2h03e.js +434 -0
  20. package/dist/case-debug-solution-projects-xae2d4vj.js +34 -0
  21. package/dist/{case-debug-studio-web-service-kt5efenk.js → case-debug-studio-web-service-5h6djff3.js} +22 -14
  22. package/dist/{case-described-io-service-kn3rvy53.js → case-described-io-service-tap9pk70.js} +41 -11
  23. package/dist/case-event-trigger-bindings-z4q1kzgv.js +20 -0
  24. package/dist/{case-format-service-k8rcv0wp.js → case-format-service-q42ba5pn.js} +6 -4
  25. package/dist/{case-pack-service-92trp8xj.js → case-pack-service-0j9r3cd2.js} +9 -7
  26. package/dist/case-schema-version-zs5qsr1b.js +20 -0
  27. package/dist/{case-shape-reader-ftc4ve13.js → case-shape-reader-14qzcj4v.js} +1 -1
  28. package/dist/{case-splice-service-7n51cpx3.js → case-splice-service-bk6rvr75.js} +60 -11
  29. package/dist/{case-validate-service-c8jcvw85.js → case-validate-service-80p52d8r.js} +134 -46
  30. package/dist/{connector-enrichment-service-ba0vq2sk.js → connector-enrichment-service-9p98gfmc.js} +32 -28
  31. package/dist/{connector-lookup-service-mzfsqb21.js → connector-lookup-service-v39ab3qh.js} +10 -8
  32. package/dist/{connector-service-8yk65k3n.js → connector-service-yz5c6xag.js} +229 -52
  33. package/dist/connector-task-shape-dcb3v2r5.js +14 -0
  34. package/dist/{connector-task-spec-bn3qaa1w.js → connector-task-spec-pvzzenwg.js} +206 -49
  35. package/dist/de-UZI7FJDO-awjpqfz0.js +200 -0
  36. package/dist/{de-MUJPA4EB-dpg7t2rw.js → de-UZI7FJDO-mwvc4cxe.js} +29 -2
  37. package/dist/{de-FGHEJRCI-rv513mfh.js → de-WLW6KWOJ-2qnsqdtw.js} +238 -31
  38. package/dist/debug-conversation-trigger-f4a07w23.js +33 -0
  39. package/dist/{debug-http-client-73errmgs.js → debug-http-client-8t7t701c.js} +7 -5
  40. package/dist/{debug-service-8kjtrm88.js → debug-service-c7y7f216.js} +8 -6
  41. package/dist/{edge-service-7092t84f.js → edge-service-vnn1p29d.js} +18 -13
  42. package/dist/{embedded-file-reader-v8c2yj2a.js → embedded-file-reader-r66242ey.js} +2 -2
  43. package/dist/en-EJCBA3LK-0wb3b1xy.js +146 -0
  44. package/dist/{en-FBPVNKFN-dqt573xn.js → en-EJCBA3LK-dtpdghgj.js} +12 -4
  45. package/dist/{en-BWGKA5OE-1qkvb9rn.js → en-M7GQYBV2-5nfmpnfz.js} +88 -6
  46. package/dist/{enrichment-service-yjv2eb8h.js → enrichment-service-njfr2m2s.js} +52 -15
  47. package/dist/{es-7SE7HX2X-8yh1aj2y.js → es-4UBUTCQA-m1ytpyx2.js} +29 -2
  48. package/dist/es-4UBUTCQA-t7hsackg.js +200 -0
  49. package/dist/{es-KR3ZSNMP-84zphx0x.js → es-5THCNRFN-tqwyrdgy.js} +235 -28
  50. package/dist/{es-MX-2MYFZU7X-3rek4r73.js → es-MX-5RELIXKI-9jhqtddc.js} +29 -2
  51. package/dist/es-MX-5RELIXKI-jtjbcxbb.js +200 -0
  52. package/dist/{es-MX-XXZJGC4R-2mr8jtgm.js → es-MX-TWZBRAXK-gqd9swzw.js} +237 -30
  53. package/dist/filter-engine-7ep90g7f.js +11 -0
  54. package/dist/{flow-api-y70m8n82.js → flow-api-qj89cv18.js} +17 -10
  55. package/dist/{flow-debug-service-f59xnvdf.js → flow-debug-service-a7vd9eht.js} +109 -71
  56. package/dist/{flow-eval-node-target-v1gra12k.js → flow-eval-node-target-fv15zc9f.js} +19 -18
  57. package/dist/flow-eval-run-api-3xt5n21a.js +16 -0
  58. package/dist/{flow-eval-run-service-hmfbng78.js → flow-eval-run-service-keqkwjg1.js} +92 -99
  59. package/dist/{flow-eval-service-7tpvhn9b.js → flow-eval-service-5j1rwx32.js} +169 -416
  60. package/dist/{flow-init-sdk-source-3gxfr40c.js → flow-init-sdk-source-spm577pw.js} +8 -6
  61. package/dist/{flow-init-service-jawbgb3b.js → flow-init-service-pz2b02z9.js} +25 -20
  62. package/dist/{flow-io-2qapk1ge.js → flow-io-0yftj03d.js} +17 -12
  63. package/dist/{flow-migrate-service-3vyydvyp.js → flow-migrate-service-f0cavrsr.js} +18 -13
  64. package/dist/{flow-pack-service-ypbwn9p1.js → flow-pack-service-seegwatd.js} +59 -45
  65. package/dist/{flow-validate-service-6ra3j72r.js → flow-validate-service-hgswxecb.js} +198 -93
  66. package/dist/{fr-Y6NPVODW-8vr1ja4b.js → fr-CERONSRC-edpxhbmb.js} +237 -30
  67. package/dist/{fr-MDFKNZ4C-h4a122k9.js → fr-VBM5WRC2-63z7w4mh.js} +29 -2
  68. package/dist/fr-VBM5WRC2-707ha692.js +200 -0
  69. package/dist/{governance-fetcher-09dgr70s.js → governance-fetcher-w11mhrn6.js} +8 -6
  70. package/dist/{headless-7rs6g9wg.js → headless-z9enfh9f.js} +4 -4
  71. package/dist/hitPolicyResult-CGCR73CW-tvmbx1r7.js +66 -0
  72. package/dist/{hitl-service-pc3xwzxh.js → hitl-service-zsnxqkhb.js} +17 -12
  73. package/dist/{index-48tf2e7y.js → index-1a83vhkx.js} +59 -35
  74. package/dist/{index-jmy02p6v.js → index-3366ft04.js} +44 -6
  75. package/dist/{index-wmffgzmr.js → index-5dxh9z60.js} +21751 -11098
  76. package/dist/{index-vj0f8thg.js → index-91v7sjfs.js} +7 -5
  77. package/dist/{index-cpgb4hp8.js → index-d60j7q07.js} +8 -6
  78. package/dist/{index-vhm7bexy.js → index-da0zh33m.js} +8 -6
  79. package/dist/{index-1htnjt3c.js → index-ewv0axs9.js} +1087 -213
  80. package/dist/index-f3pbfe53.js +67 -0
  81. package/dist/{index-ng2f77my.js → index-fyc0k5dd.js} +985 -617
  82. package/dist/{index-n7n2d0tb.js → index-gjg7tpcx.js} +66 -2230
  83. package/dist/index-gmkec7es.js +29 -0
  84. package/dist/{index-3bv3wtc0.js → index-n37fqnh7.js} +6 -5
  85. package/dist/{index-hhsf00x8.js → index-ngs0a2he.js} +1 -1
  86. package/dist/index-s6q9xjhw.js +25 -0
  87. package/dist/{index-j2r3jb6c.js → index-xq6ajhgq.js} +2 -2
  88. package/dist/index.js +2 -2
  89. package/dist/init-entry-points-g4za9kc0.js +102 -0
  90. package/dist/inline-entity-resolver-nzfs8hb6.js +46 -0
  91. package/dist/input-reader-3250qtv2.js +15 -0
  92. package/dist/input-reader-3398edew.js +15 -0
  93. package/dist/{ja-UTQEAP34-8e0q6swp.js → ja-43QL7CGO-c3q8gre9.js} +29 -2
  94. package/dist/ja-43QL7CGO-h6qfxfay.js +200 -0
  95. package/dist/{ja-Q5PXKJ2V-p4msxzjd.js → ja-U2MCNHGT-gz0ap1jk.js} +235 -28
  96. package/dist/{known-types-3dm8xfd0.js → known-types-g1bvvvcw.js} +5 -5
  97. package/dist/ko-TLL6Z6CD-ag6gjynr.js +200 -0
  98. package/dist/{ko-AXCHW2OK-askct7f6.js → ko-TLL6Z6CD-wrt3n8a9.js} +29 -2
  99. package/dist/{ko-AYBDSRZG-41mdmsg1.js → ko-XAUYQWDR-zp81gjp4.js} +237 -30
  100. package/dist/localSolutionDiscovery-3fs774b8.js +17 -0
  101. package/dist/{maestro-automate-entry-4qg1z689.js → maestro-automate-entry-wycktqqt.js} +2 -2
  102. package/dist/{maestro-debug-service-c81w1wrx.js → maestro-debug-service-5edvsets.js} +17 -15
  103. package/dist/{maestro-pack-service-9qbtap5h.js → maestro-pack-service-hpvmq8f9.js} +9 -7
  104. package/dist/migration-diagnosis-5tftr979.js +99 -0
  105. package/dist/{node-epyxn4nd.js → node-5g80as4s.js} +29 -15
  106. package/dist/node-service-gsq162p5.js +101 -0
  107. package/dist/{node-strategy-5pz40tee.js → node-strategy-v442hwgd.js} +1 -1
  108. package/dist/node-sync-service-qxhh9e5m.js +65 -0
  109. package/dist/out-target-666eg2kf.js +115 -0
  110. package/dist/{packager-tool-yphr25e9.js → packager-tool-0jn0my4b.js} +4 -2
  111. package/dist/packager-tool-0z498fh0.js +331 -0
  112. package/dist/{packager-tool-j6q8v3kc.js → packager-tool-1q0ee9ht.js} +5 -4
  113. package/dist/packager-tool-20592jhn.js +74 -0
  114. package/dist/{packager-tool-zvpkw29f.js → packager-tool-212khq09.js} +538 -16
  115. package/dist/{packager-tool-7msx23gd.js → packager-tool-2qywkm61.js} +13 -2
  116. package/dist/{packager-tool-b4t0wt7a.js → packager-tool-3kx2vrwn.js} +12 -13
  117. package/dist/{packager-tool-a0f48rfb.js → packager-tool-42xfgd4y.js} +6 -24
  118. package/dist/{packager-tool-myvay41d.js → packager-tool-57bbfe26.js} +3 -3
  119. package/dist/{packager-tool-vte7g48a.js → packager-tool-5hnx28q0.js} +5 -3
  120. package/dist/{packager-tool-xd3rq6k0.js → packager-tool-629qqbfp.js} +2 -2
  121. package/dist/packager-tool-6g510cab.js +1178 -0
  122. package/dist/packager-tool-6sm17vbx.js +336 -0
  123. package/dist/{packager-tool-yy101ck2.js → packager-tool-6tthp3g5.js} +52 -32
  124. package/dist/{packager-tool-d88rqwk8.js → packager-tool-6z1hsm2h.js} +13 -5
  125. package/dist/packager-tool-7hw344bt.js +107 -0
  126. package/dist/{packager-tool-6xrzgn0z.js → packager-tool-7vh4gasn.js} +1 -1
  127. package/dist/packager-tool-7ym4rqd1.js +153 -0
  128. package/dist/packager-tool-8p3ymd4v.js +14 -0
  129. package/dist/{packager-tool-kme3q8xv.js → packager-tool-8tv6dvs5.js} +18 -8
  130. package/dist/{packager-tool-c94w8xmz.js → packager-tool-9c2hte0h.js} +16110 -13031
  131. package/dist/{packager-tool-npr79108.js → packager-tool-ajhgr4bs.js} +51 -8
  132. package/dist/{packager-tool-8pydv61j.js → packager-tool-ajth6af3.js} +588 -16
  133. package/dist/{packager-tool-nct4k0y8.js → packager-tool-arbc078z.js} +280 -416
  134. package/dist/{packager-tool-k0bc2f6w.js → packager-tool-b84rs07t.js} +137 -45
  135. package/dist/{packager-tool-4tf3tq1b.js → packager-tool-bd7t6p8y.js} +6 -4
  136. package/dist/{packager-tool-q02t6n13.js → packager-tool-bhhym40d.js} +26 -3
  137. package/dist/packager-tool-bttxjdhx.js +94 -0
  138. package/dist/packager-tool-c4n4m87w.js +52 -0
  139. package/dist/{packager-tool-8xyea2av.js → packager-tool-cc2q603y.js} +2 -3
  140. package/dist/{packager-tool-8yjmkys9.js → packager-tool-cza49qc1.js} +1681 -459
  141. package/dist/{packager-tool-5jb06280.js → packager-tool-d1kd88zq.js} +1 -1
  142. package/dist/{packager-tool-w3d2891y.js → packager-tool-dpp8z5q3.js} +8 -5
  143. package/dist/{packager-tool-wbtykfb2.js → packager-tool-dzd3y9p0.js} +2 -2
  144. package/dist/{packager-tool-rs4cgyy5.js → packager-tool-f6bh7bsm.js} +9 -10
  145. package/dist/{packager-tool-83hg21mr.js → packager-tool-f7zn3gsf.js} +6 -6
  146. package/dist/{packager-tool-mtpztxtc.js → packager-tool-fwfh4zz7.js} +2 -1
  147. package/dist/packager-tool-g2b0zqch.js +217 -0
  148. package/dist/{packager-tool-xdxr3ync.js → packager-tool-hdxtgckw.js} +11 -1
  149. package/dist/{packager-tool-gtzw8sw4.js → packager-tool-jexxh6qf.js} +51 -6
  150. package/dist/{packager-tool-zq25fdcg.js → packager-tool-jt51hwvr.js} +5 -5
  151. package/dist/packager-tool-k7n4sf7v.js +16 -0
  152. package/dist/{packager-tool-fgaphqq0.js → packager-tool-kd0whk4p.js} +1 -1
  153. package/dist/{packager-tool-3t417qyw.js → packager-tool-ktnfjmbs.js} +6 -6
  154. package/dist/packager-tool-kvp4ttef.js +307 -0
  155. package/dist/packager-tool-m1901c0c.js +1256 -0
  156. package/dist/packager-tool-mgcz986r.js +143 -0
  157. package/dist/{packager-tool-8xhjr5ya.js → packager-tool-mrskd7mn.js} +1 -1
  158. package/dist/{packager-tool-5s7249f4.js → packager-tool-ms1smy5t.js} +1 -1
  159. package/dist/{packager-tool-kveaemqp.js → packager-tool-msecps3h.js} +74 -47
  160. package/dist/packager-tool-n90231c7.js +2 -0
  161. package/dist/{packager-tool-ajjpgh1s.js → packager-tool-nkbz7fsb.js} +161 -83
  162. package/dist/packager-tool-nsh0qg9g.js +40 -0
  163. package/dist/{packager-tool-7q6z6npd.js → packager-tool-pcvhcn2k.js} +93 -11
  164. package/dist/packager-tool-qrs1525h.js +69 -0
  165. package/dist/packager-tool-qs3gymeb.js +92 -0
  166. package/dist/{packager-tool-wf95q0fn.js → packager-tool-r6a4pjjh.js} +32 -13
  167. package/dist/{packager-tool-2wbgdx7c.js → packager-tool-rcx6mwf1.js} +5 -5
  168. package/dist/{packager-tool-zbrda9sn.js → packager-tool-rk25wp3c.js} +1 -1
  169. package/dist/{packager-tool-nase5ajk.js → packager-tool-rp7pny4t.js} +19 -5
  170. package/dist/packager-tool-s695j0qj.js +2 -0
  171. package/dist/packager-tool-s7c0dg22.js +1117 -0
  172. package/dist/{case-bindings-service-hpz8w81a.js → packager-tool-s7frnjqb.js} +20 -233
  173. package/dist/{packager-tool-2k0hp4st.js → packager-tool-sb08yxk6.js} +2 -2
  174. package/dist/{packager-tool-b39nrh8y.js → packager-tool-sga4h8yj.js} +5 -6
  175. package/dist/packager-tool-sm8ertv4.js +9 -0
  176. package/dist/{packager-tool-ts5t1nmn.js → packager-tool-sxqtxw0e.js} +15 -10
  177. package/dist/packager-tool-t4zrz5gd.js +18 -0
  178. package/dist/{packager-tool-pp11j8zp.js → packager-tool-t79p62kr.js} +3 -2
  179. package/dist/{packager-tool-ps84n76y.js → packager-tool-tgh9btcq.js} +2 -2
  180. package/dist/{packager-tool-x2py933t.js → packager-tool-tzc6xsp3.js} +1802 -378
  181. package/dist/packager-tool-v5ft7109.js +35 -0
  182. package/dist/{packager-tool-rkv04anh.js → packager-tool-vv9cf7n5.js} +12 -56
  183. package/dist/{packager-tool-z1qbc0qf.js → packager-tool-wv85dhy2.js} +2 -8
  184. package/dist/{packager-tool-znhjsec2.js → packager-tool-wwbk750c.js} +10804 -25507
  185. package/dist/packager-tool-xj0agqpk.js +11 -0
  186. package/dist/{packager-tool-t2xr2f9r.js → packager-tool-xqghssg3.js} +1 -1
  187. package/dist/{packager-tool-ma2ra4pe.js → packager-tool-xr5pkebd.js} +6 -6
  188. package/dist/packager-tool-y4tyghzf.js +26 -0
  189. package/dist/{packager-tool-9bt3hs56.js → packager-tool-y57r93yz.js} +721 -90
  190. package/dist/packager-tool-ygdbhb2b.js +62 -0
  191. package/dist/{packager-tool-v99ygh9f.js → packager-tool-yn33pw57.js} +124 -58
  192. package/dist/packager-tool-yp84p93n.js +41 -0
  193. package/dist/{packager-tool-yv10w46z.js → packager-tool-zgm0r4yp.js} +57 -205
  194. package/dist/packager-tool.js +26 -17
  195. package/dist/{project-artifacts-ygsyzgbk.js → project-artifacts-tedh0mf8.js} +1 -1
  196. package/dist/{project-validator-ndx5f8vg.js → project-validator-njsprtzv.js} +5 -4
  197. package/dist/{pt-BR-TKHNHMET-sn91xyq0.js → pt-BR-GNQNAAZ2-xadharv4.js} +237 -30
  198. package/dist/{pt-BR-Y6K6XHXK-mp3hwhw1.js → pt-BR-USP2T7GD-pedn77m1.js} +29 -2
  199. package/dist/pt-BR-USP2T7GD-rppy42ym.js +200 -0
  200. package/dist/{pt-3DIO5QWG-59b3f4bc.js → pt-RMIAKZB4-67enhx3m.js} +29 -2
  201. package/dist/pt-RMIAKZB4-t80exmp7.js +200 -0
  202. package/dist/{pt-ROXU257Y-2f6bxev4.js → pt-TO2DARY2-ftcce1bv.js} +237 -30
  203. package/dist/{resolved-check-r83pjq9y.js → resolved-check-8a1cr6j2.js} +1 -1
  204. package/dist/{resourcesSyncService-9b5nzx36.js → resourcesSyncService-rcbw245w.js} +43 -180
  205. package/dist/ro-GHOBYW2S-4zevc9dy.js +200 -0
  206. package/dist/{ro-BWR3ONRR-vzx3hy8a.js → ro-GHOBYW2S-mhnqsgaa.js} +29 -2
  207. package/dist/{ro-AVAWPKOO-b89pw79r.js → ro-WUYJV6OW-a8d9qy1n.js} +235 -28
  208. package/dist/ru-WBLQ5B2U-dpqvtfwr.js +10 -0
  209. package/dist/{sdd-convert-service-am4cs6zq.js → sdd-convert-service-btj95r5z.js} +690 -447
  210. package/dist/{sdd-lookup-12hfwqjq.js → sdd-lookup-x3fh6svg.js} +6 -4
  211. package/dist/{sdd-resolve-service-e56wtgxt.js → sdd-resolve-service-pzsm3mkz.js} +37 -10
  212. package/dist/sdd-resolve-siblings-wzhvhar8.js +57 -0
  213. package/dist/{shared-utils-611ah3tq.js → shared-utils-w643sejd.js} +6 -4
  214. package/dist/{solution-auth-kddmbm0p.js → solution-auth-30yycqtv.js} +3 -3
  215. package/dist/solution-discovery-pavd4zeb.js +47 -0
  216. package/dist/{strict-case-rules-pn3ypd97.js → strict-case-rules-vnyr3b3k.js} +3 -2
  217. package/dist/{strict-entry-points-a2cya540.js → strict-entry-points-xrddz82q.js} +33 -1
  218. package/dist/{strict-sdd-audit-nc7dk2hy.js → strict-sdd-audit-8deegzad.js} +11 -7
  219. package/dist/task-type-declaration-re9ba03j.js +46 -0
  220. package/dist/{tidy-service-thmayk2h.js → tidy-service-mepxtxqm.js} +144 -39
  221. package/dist/{tool-z7q74wa4.js → tool-13vrxcqw.js} +313 -123
  222. package/dist/{tool-rmcqxt09.js → tool-x8dmgc2y.js} +476 -339
  223. package/dist/tool.js +2 -2
  224. package/dist/{tr-5IIHSFW5-hw4cewew.js → tr-GDTLECMM-k5fhmq13.js} +29 -2
  225. package/dist/tr-GDTLECMM-kngksm3r.js +200 -0
  226. package/dist/{tr-JMIP7ZSL-c39b6pe4.js → tr-M3F5A6AU-bb0tg39m.js} +235 -28
  227. package/dist/{trigger-enrichment-service-fw97esz9.js → trigger-enrichment-service-pc8ecypw.js} +34 -30
  228. package/dist/trigger-entry-point-id-819hnfnn.js +15 -0
  229. package/dist/{variable-service-3gywh851.js → variable-service-8v0b9d66.js} +17 -12
  230. package/dist/{wait-for-flow-job-wdcjjk6p.js → wait-for-flow-job-5rjxh65w.js} +14 -11
  231. package/dist/{zh-CN-IFFXSEJS-9wm9gmrv.js → zh-CN-C5G4PC7C-ds9gkptg.js} +235 -28
  232. package/dist/zh-CN-I5D7WHBD-ge92tbx9.js +200 -0
  233. package/dist/{zh-CN-R2KU4U5L-tc1hat59.js → zh-CN-I5D7WHBD-sr5h0a98.js} +29 -2
  234. package/dist/{zh-TW-GNKMELBF-j674515r.js → zh-TW-2AVLM723-288pkc1z.js} +29 -2
  235. package/dist/zh-TW-2AVLM723-xsmap3gk.js +200 -0
  236. package/dist/{zh-TW-IYBNYAMG-8727c7v2.js → zh-TW-62HZIG6O-787kdwex.js} +234 -27
  237. package/package.json +2 -2
  238. package/dist/bpmn-validate-service-tanm0n47.js +0 -14
  239. package/dist/debug-conversation-trigger-zbxp49z7.js +0 -46
  240. package/dist/flow-eval-run-api-zg951w2f.js +0 -15
  241. package/dist/hitPolicyResult-4WDHTX4A-zpjwpxn1.js +0 -69
  242. package/dist/index-03h6hq69.js +0 -200
  243. package/dist/input-reader-sce4dejb.js +0 -13
  244. package/dist/input-reader-tf6xyfvt.js +0 -13
  245. package/dist/migration-diagnosis-fzj426fa.js +0 -71
  246. package/dist/node-service-3j6w3z2k.js +0 -89
  247. package/dist/node-sync-service-q7dsv2p0.js +0 -43
  248. package/dist/out-target-498z06v5.js +0 -72
  249. package/dist/packager-tool-0g6ktcsq.js +0 -32
  250. package/dist/packager-tool-3mvr6njb.js +0 -305
  251. package/dist/packager-tool-521x949f.js +0 -32
  252. package/dist/packager-tool-64zypey6.js +0 -521
  253. package/dist/packager-tool-7t0xj5pz.js +0 -64
  254. package/dist/packager-tool-j836z6mq.js +0 -208
  255. package/dist/packager-tool-p7eactax.js +0 -267
  256. package/dist/packager-tool-xjtv580j.js +0 -13
  257. package/dist/packager-tool-zm7thgdg.js +0 -456
  258. /package/dist/{localization-p76prk3f.js → localization-d151bzb1.js} +0 -0
@@ -2,9 +2,16 @@ import {
2
2
  ledgerMissFor
3
3
  } from "./packager-tool-zk7ntkba.js";
4
4
  import {
5
- isAnyTriggerNode,
6
- isStageNode
7
- } from "./packager-tool-qmxmg1yv.js";
5
+ dedupedId,
6
+ exactKey,
7
+ indexKey,
8
+ lookupOutput,
9
+ modelKey,
10
+ stageSpellings
11
+ } from "./packager-tool-20592jhn.js";
12
+ import {
13
+ outputSourceFor
14
+ } from "./packager-tool-bhhym40d.js";
8
15
  import {
9
16
  comparableFolder
10
17
  } from "./packager-tool-szn7gaaz.js";
@@ -12,21 +19,29 @@ import {
12
19
  cellAt,
13
20
  columnField,
14
21
  columnIndex,
22
+ fenceOf,
15
23
  field,
16
24
  firstTable,
17
25
  isBlank,
18
26
  isDigit,
19
27
  isLetter,
20
28
  isLowerLetter,
29
+ isSeparatorCell,
21
30
  namedValue,
22
31
  norm,
32
+ pipeTables,
33
+ splitRowCells,
23
34
  stripTicks,
24
35
  trimQuotes,
25
36
  withoutAnnotation
26
- } from "./packager-tool-gtzw8sw4.js";
37
+ } from "./packager-tool-jexxh6qf.js";
38
+ import {
39
+ isAnyTriggerNode,
40
+ isStageNode
41
+ } from "./packager-tool-qmxmg1yv.js";
27
42
  import {
28
43
  catchError
29
- } from "./packager-tool-z1qbc0qf.js";
44
+ } from "./packager-tool-wv85dhy2.js";
30
45
 
31
46
  // ../case-tool/src/services/sdd-normalizer.ts
32
47
  var readSddHeading = (line) => {
@@ -40,19 +55,6 @@ var readSddHeading = (line) => {
40
55
  return;
41
56
  return { level, title: rest.trim() };
42
57
  };
43
- var fenceOf = (line) => {
44
- let at = 0;
45
- while (at < 3 && line[at] === " ")
46
- at += 1;
47
- const ch = line[at];
48
- if (ch !== "`" && ch !== "~")
49
- return;
50
- let run = 0;
51
- while (line[at + run] === ch)
52
- run += 1;
53
- const bare = line.slice(at + run).trim() === "";
54
- return run >= 3 ? { ch, run, bare } : undefined;
55
- };
56
58
  var readSddSections = (source) => {
57
59
  const headings = [];
58
60
  let offset = 0;
@@ -119,7 +121,11 @@ var afterBoldLabel = (block, ...labels) => {
119
121
  }
120
122
  }
121
123
  hits.sort((left, right) => left.at - right.at);
122
- return hits.map(({ from }, index) => block.slice(from, hits[index + 1]?.at ?? block.length));
124
+ const nextLabelLine = (from) => {
125
+ const rest = block.slice(from).search(/\n[ \t]*\*\*[^\s*]/);
126
+ return rest === -1 ? block.length : from + rest + 1;
127
+ };
128
+ return hits.map(({ from }, index) => block.slice(from, Math.min(hits[index + 1]?.at ?? block.length, nextLabelLine(from))));
123
129
  };
124
130
  var unwrapCodeSpan = (value) => {
125
131
  const text = value.trim();
@@ -229,6 +235,7 @@ var SLA_RESPONSE_MAP_HEADINGS = ["SLA Response Map"];
229
235
  var CASE_METADATA_HEADINGS = ["Case Metadata"];
230
236
  var CASE_SLA_PROPERTY = "Case-Level SLA";
231
237
  var CASE_VARIABLE_HEADINGS = ["Case Variables"];
238
+ var CANVAS_NOTE_HEADINGS = ["Canvas Notes", "Sticky Notes"];
232
239
  var STAGE_ENTRY_HEADINGS = ["Stage Entry Conditions"];
233
240
  var STAGE_EXIT_HEADINGS = [
234
241
  "Stage Exit Conditions",
@@ -457,6 +464,63 @@ var coverageFinding = (path, label, kind, rows, conditions) => {
457
464
  ];
458
465
  };
459
466
 
467
+ // ../case-tool/src/services/strict-sdd-audit/task-io-tables.ts
468
+ var INPUT_VALUE_COLUMNS = [
469
+ "Binding / Value",
470
+ "Binding",
471
+ "Value"
472
+ ];
473
+ var INPUT_NAME_COLUMNS = ["Name", "Input", "Field"];
474
+ var OUTPUT_NAME_COLUMNS = ["Field", "Name", "Output"];
475
+ var inputNameColumn = (header) => columnIndex(header, ...INPUT_NAME_COLUMNS) ?? columnIndex(header, "Variable");
476
+ var outputNameColumn = (header) => columnIndex(header, ...OUTPUT_NAME_COLUMNS) ?? columnIndex(header, "Variable");
477
+ var isIdentifier = (text) => {
478
+ const head = text.charAt(0);
479
+ if (!isLetter(head) && head !== "_")
480
+ return false;
481
+ for (const ch of text.slice(1)) {
482
+ if (!isWordChar(ch))
483
+ return false;
484
+ }
485
+ return true;
486
+ };
487
+ var customRowsOf = (header, rows) => {
488
+ const bindingAt = columnIndex(header, ...INPUT_VALUE_COLUMNS);
489
+ if (bindingAt === undefined)
490
+ return [];
491
+ const found = [];
492
+ for (const row of rows) {
493
+ const binding = unwrapCodeSpan(cellAt(row, bindingAt));
494
+ const at = binding.indexOf("=");
495
+ if (at <= 0)
496
+ continue;
497
+ const variable = binding.slice(0, at).trim();
498
+ const expression = binding.slice(at + 1).trim();
499
+ if (!isIdentifier(variable))
500
+ continue;
501
+ const emptyLiteral = /^(""|'')$/.test(expression);
502
+ if (!emptyLiteral && (!expression || isBlank(expression)))
503
+ continue;
504
+ found.push({ variable, expression });
505
+ }
506
+ return found;
507
+ };
508
+ var unreadIoTables = (block) => {
509
+ const unread = [];
510
+ const check = (labels, readable, wants) => {
511
+ for (const label of labels)
512
+ for (const part of afterBoldLabel(block, label)) {
513
+ const { header, rows } = firstTable(part);
514
+ if (rows.length === 0 || readable(header, rows))
515
+ continue;
516
+ unread.push(`the **${label}** table (header: ${header.join(" | ")}) has ${rows.length} row(s) and no ${wants} column, so none of them reached the task`);
517
+ }
518
+ };
519
+ check(INPUT_LABELS, (header) => inputNameColumn(header) !== undefined && columnIndex(header, ...INPUT_VALUE_COLUMNS) !== undefined, `name (${[...INPUT_NAME_COLUMNS, "Variable"].join("/")}) or value (${INPUT_VALUE_COLUMNS.join("/")})`);
520
+ check(OUTPUT_LABELS, (header, rows) => outputNameColumn(header) !== undefined || customRowsOf(header, rows).length > 0, `name (${[...OUTPUT_NAME_COLUMNS, "Variable"].join("/")}) column or \`<variable> = <expression>\` row in a value`);
521
+ return unread;
522
+ };
523
+
460
524
  // ../case-tool/src/services/strict-sdd-audit/producers.ts
461
525
  var PRODUCER_ARROW = "<-";
462
526
  var XREF_OPEN = "$xref(";
@@ -605,7 +669,7 @@ var xrefProducers = (document) => {
605
669
  const close = callCloseIndex(text, at);
606
670
  if (close === -1)
607
671
  break;
608
- const args = xrefArguments(text.slice(at, close + 1));
672
+ const args = xrefArguments(text.slice(at, close + 1).replace(/\\(["'\\])/g, "$1"));
609
673
  if (args.length === 3) {
610
674
  const key = `${norm(args[0])}|${norm(args[1])}|${args[1].trim()}|${norm(args[2])}`;
611
675
  if (!seen.has(key)) {
@@ -621,8 +685,8 @@ var detailProducerInputs = (block) => {
621
685
  const inputs = [];
622
686
  for (const sub of afterAnyLabel(block, INPUT_LABELS)) {
623
687
  const { header, rows } = firstTable(sub);
624
- const nameAt = columnIndex(header, "Name", "Input", "Field");
625
- const valueAt = columnIndex(header, "Binding / Value", "Binding", "Value");
688
+ const nameAt = inputNameColumn(header);
689
+ const valueAt = columnIndex(header, ...INPUT_VALUE_COLUMNS);
626
690
  if (nameAt === undefined || valueAt === undefined)
627
691
  continue;
628
692
  for (const row of rows) {
@@ -1213,6 +1277,58 @@ var resolveXrefExpression = (expression, index) => {
1213
1277
  }
1214
1278
  return { expected, tokens };
1215
1279
  };
1280
+ var expressionMatcher = (declared, index) => {
1281
+ const resolved = declared.includes(XREF_OPEN) ? resolveXrefPositions(declared, index) : undefined;
1282
+ if (resolved === undefined) {
1283
+ const wanted = comparableExpression(declared);
1284
+ return (actual) => comparableExpression(actual) === wanted;
1285
+ }
1286
+ const expected = comparableExpression(resolved.expected);
1287
+ const escapeRegExp = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1288
+ const placeholder = new RegExp(`${escapeRegExp(VARIABLE_PLACEHOLDER)}(\\d+)`, "g");
1289
+ let pattern = "";
1290
+ let cursor = 0;
1291
+ for (const found of expected.matchAll(placeholder)) {
1292
+ pattern += escapeRegExp(expected.slice(cursor, found.index));
1293
+ const tokens = [...resolved.groups[Number(found[1])]].sort((left, right) => right.length - left.length).map(escapeRegExp);
1294
+ pattern += `${escapeRegExp(VARS_PREFIX)}(?:${tokens.join("|")})(?![\\w$])`;
1295
+ cursor = (found.index ?? 0) + found[0].length;
1296
+ }
1297
+ pattern += escapeRegExp(expected.slice(cursor));
1298
+ const shape = new RegExp(`^${pattern}$`);
1299
+ return (actual) => shape.test(comparableExpression(actual));
1300
+ };
1301
+ var resolveXrefPositions = (expression, index) => {
1302
+ const marker = `${VARS_PREFIX}${XREF_OPEN}`;
1303
+ const groups = [];
1304
+ let expected = "";
1305
+ let cursor = 0;
1306
+ while (cursor < expression.length) {
1307
+ const at = expression.indexOf(marker, cursor);
1308
+ if (at === -1) {
1309
+ expected += expression.slice(cursor);
1310
+ break;
1311
+ }
1312
+ expected += expression.slice(cursor, at);
1313
+ const close = callCloseIndex(expression, at);
1314
+ if (close === -1)
1315
+ return;
1316
+ const args = xrefArguments(expression.slice(at + VARS_PREFIX.length, close + 1));
1317
+ if (args.length !== 3)
1318
+ return;
1319
+ const key = `${norm(args[0])}|${norm(args[1])}|${norm(args[2])}`;
1320
+ const candidates = index.get(key);
1321
+ if (candidates === undefined || candidates.length !== 1) {
1322
+ return;
1323
+ }
1324
+ let position = groups.indexOf(candidates[0]);
1325
+ if (position === -1)
1326
+ position = groups.push(candidates[0]) - 1;
1327
+ expected += `${VARIABLE_PLACEHOLDER}${position}`;
1328
+ cursor = close + 1;
1329
+ }
1330
+ return { expected, groups };
1331
+ };
1216
1332
  var ruleCarryingExpression = (condition) => {
1217
1333
  for (const lane of asArray(asRecord(condition)?.rules)) {
1218
1334
  for (const entry of asArray(lane)) {
@@ -1434,11 +1550,303 @@ var escalationFindings = (declared, rules, path, label, mapped) => {
1434
1550
  };
1435
1551
 
1436
1552
  // ../case-tool/src/services/strict-sdd-audit/sdd-model.ts
1553
+ var CANVAS_NOTE_COLORS = [
1554
+ "blue",
1555
+ "green",
1556
+ "yellow",
1557
+ "pink",
1558
+ "white"
1559
+ ];
1437
1560
  var noNameColumnNote = (title, wanted, header) => `section "${title}": the table has rows but no ${wanted.join("/")} ` + `column (header: ${header.join(" | ") || "<none>"}) — every row is ` + "skipped, so the section contributes nothing to audit";
1438
1561
  var capitalize = (text) => text.charAt(0).toUpperCase() + text.slice(1);
1439
1562
  var noCategoryColumnNote = (title, header) => `section "${title}": the table has rows but no Category column ` + `(header: ${header.join(" | ") || "<none>"}) — no row can be checked ` + "for `variables` group placement, so a formal argument missing half its " + "pair passes";
1440
1563
  var unrecognizedHeadingNote = (title, level) => `heading "${title}" (level ${level}) reads like an audited section but ` + "matches no accepted spelling — rename it to one of the canonical " + "headings, or the checks it feeds are skipped";
1441
1564
 
1565
+ // ../case-tool/src/services/sdd-convert/xrefs.ts
1566
+ var QUOTED = String.raw`(?:'((?:\\.|[^'\\])*)'|"((?:\\.|[^"\\])*)"|` + "`((?:\\\\.|[^`\\\\])*)`" + String.raw`|\u201c([^\u201d]*)\u201d)`;
1567
+ var XREF_CALL = new RegExp(String.raw`vars\.\$xref\(\s*${QUOTED}\s*,\s*${QUOTED}\s*,\s*${QUOTED}\s*\)`, "g");
1568
+ var argumentOf = (groups) => groups.find((value) => value !== undefined) ?? "";
1569
+ var unresolvedXrefDetail = (whole, found) => {
1570
+ if (found === undefined) {
1571
+ return `\`${whole}\` names an output this SDD does not declare, so the marker is left in place rather than pointed at a guess`;
1572
+ }
1573
+ const spellings = new Set(found.names);
1574
+ const listed = [...spellings].map((name) => `\`${name}\``).join(", ");
1575
+ if (spellings.size < found.names.length) {
1576
+ return `\`${whole}\` names a task that ${found.names.length} tasks in that stage answer to (${listed}), so the marker is left in place rather than pointed at one of them. Task names are unique across the case, so rename all but one`;
1577
+ }
1578
+ return `\`${whole}\` names its task in a spelling that ${found.names.length} tasks answer to (${listed}), so the marker is left in place rather than pointed at one of them — write the task's name as its heading spells it`;
1579
+ };
1580
+ var DOTTED_READ = /^\.[A-Za-z_$]/;
1581
+ var deferredOutputs = new WeakMap;
1582
+ var markDeferredOutputs = (index, ids) => {
1583
+ deferredOutputs.set(index, ids);
1584
+ };
1585
+ var expandXrefs = (text, context) => text.replace(XREF_CALL, (whole, ...rest) => {
1586
+ const offset = rest[rest.length - 2];
1587
+ const captured = rest.slice(0, -2);
1588
+ const stage = argumentOf(captured.slice(0, 4));
1589
+ const task = argumentOf(captured.slice(4, 8));
1590
+ const output = argumentOf(captured.slice(8, 12));
1591
+ const found = lookupOutput(context.outputs, `${indexKey(stage)}|${indexKey(task)}|${indexKey(output)}`, task);
1592
+ if (found !== undefined && "id" in found) {
1593
+ if (deferredOutputs.get(context.outputs)?.has(found.id)) {
1594
+ context.unresolved.push({
1595
+ kind: "placeholder",
1596
+ where: context.where,
1597
+ detail: `\`${whole}\` reads an output of a task the resolved file defers, so \`vars.${found.id}\` resolves to nothing until that task is filled`
1598
+ });
1599
+ }
1600
+ const after = text.slice(offset + whole.length);
1601
+ return DOTTED_READ.test(after) ? `vars.${found.id}?` : `vars.${found.id}`;
1602
+ }
1603
+ context.unresolved.push({
1604
+ kind: "producer-reference",
1605
+ where: context.where,
1606
+ detail: unresolvedXrefDetail(whole, found)
1607
+ });
1608
+ return whole;
1609
+ });
1610
+ var expandOutputMarkers = (output, context) => {
1611
+ const expand = (value2) => typeof value2 === "string" && value2.includes("$xref") ? expandXrefs(value2, context) : value2;
1612
+ const value = expand(output.value);
1613
+ const source = expand(output.source);
1614
+ return value === output.value && source === output.source ? output : { ...output, value, source };
1615
+ };
1616
+
1617
+ // ../case-tool/src/services/sdd-convert/io.ts
1618
+ var taskMatcher = (model, taskName) => {
1619
+ const mine = exactKey(taskName);
1620
+ const folded = indexKey(taskName);
1621
+ const filed = modelKey(taskName);
1622
+ let unique = true;
1623
+ let filedUnique = true;
1624
+ for (const stage of model.stages) {
1625
+ for (const other of stage.tasks) {
1626
+ const name = exactKey(String(other.name ?? ""));
1627
+ if (name === mine)
1628
+ continue;
1629
+ if (indexKey(name) === folded)
1630
+ unique = false;
1631
+ if (modelKey(name) === filed)
1632
+ filedUnique = false;
1633
+ }
1634
+ }
1635
+ return {
1636
+ names: (spelled) => exactKey(spelled) === mine || unique && indexKey(spelled) === folded,
1637
+ unique,
1638
+ filedUnique
1639
+ };
1640
+ };
1641
+ var declaredOutputs = (model, stageName, position, task) => {
1642
+ const taskName = String(task.name ?? "");
1643
+ const { names: own, slug, ordinal } = stageSpellings(stageName, position);
1644
+ const names = [...own, ...slug === undefined ? [] : [slug], ordinal].map(indexKey);
1645
+ const matcher = taskMatcher(model, taskName);
1646
+ const mine = (producer) => names.includes(indexKey(producer.stage)) && matcher.names(producer.task);
1647
+ const rows = (task.outputRows ?? []).map((row) => ({ row, aliases: [] }));
1648
+ const sameOutput = (a, b) => indexKey(a) === indexKey(b) || (!a.includes(".") || !b.includes(".")) && indexKey(emittedName(a)) === indexKey(emittedName(b));
1649
+ const dotted = (one) => [one.row, ...one.aliases].find((spelling) => spelling.includes("."));
1650
+ const takes = (one, name) => {
1651
+ if (!sameOutput(one.row, name))
1652
+ return false;
1653
+ if (!name.includes("."))
1654
+ return true;
1655
+ const held = dotted(one);
1656
+ return held === undefined || indexKey(held) === indexKey(name);
1657
+ };
1658
+ const add = (name) => {
1659
+ if (name === "")
1660
+ return;
1661
+ const found = rows.find((one) => takes(one, name));
1662
+ if (found === undefined)
1663
+ rows.push({ row: name, aliases: [] });
1664
+ else if (found.row !== name && !found.aliases.includes(name)) {
1665
+ found.aliases.push(name);
1666
+ }
1667
+ };
1668
+ if (matcher.filedUnique) {
1669
+ for (const name of model.resourceOutputs[modelKey(taskName)] ?? []) {
1670
+ add(name);
1671
+ }
1672
+ }
1673
+ for (const producer of model.xrefOutputs) {
1674
+ if (mine(producer))
1675
+ add(producer.output);
1676
+ }
1677
+ for (const stage of model.stages) {
1678
+ for (const other of stage.tasks) {
1679
+ for (const row of other.producerInputs ?? []) {
1680
+ const producer = row.producer;
1681
+ if (producer !== undefined && mine(producer)) {
1682
+ add(producer.output);
1683
+ }
1684
+ }
1685
+ }
1686
+ }
1687
+ return rows;
1688
+ };
1689
+ var emittedName = (row) => row.split(".").at(-1) ?? row;
1690
+ var OUTPUT_TYPES = new Map([
1691
+ ["string", "string"],
1692
+ ["object", "jsonSchema"],
1693
+ ["json", "jsonSchema"],
1694
+ ["jsonschema", "jsonSchema"]
1695
+ ]);
1696
+ var readsOutput = (reference, row) => indexKey(reference) === indexKey(row) || !reference.includes(".") && indexKey(reference) === indexKey(emittedName(row));
1697
+ var outputTypeFor = (model, stageNames, taskName, output) => {
1698
+ const matcher = taskMatcher(model, taskName);
1699
+ for (const stage of model.stages) {
1700
+ for (const task of stage.tasks) {
1701
+ for (const row of task.producerInputs ?? []) {
1702
+ const producer = row.producer;
1703
+ if (producer === undefined || row.direct !== true || typeof row.type !== "string" || !stageNames.includes(indexKey(producer.stage)) || !matcher.names(producer.task) || !readsOutput(producer.output, output)) {
1704
+ continue;
1705
+ }
1706
+ const mapped = OUTPUT_TYPES.get(row.type.trim().toLowerCase().replaceAll(" ", ""));
1707
+ if (mapped !== undefined)
1708
+ return mapped;
1709
+ }
1710
+ }
1711
+ }
1712
+ return;
1713
+ };
1714
+ var outputFor = (row, elementId, taken, type, taskType) => {
1715
+ const leaf = row.split(".").at(-1) ?? row;
1716
+ const base = leaf === "" ? leaf : `${leaf[0].toLowerCase()}${leaf.slice(1)}`;
1717
+ const id = dedupedId(base, taken);
1718
+ return {
1719
+ name: leaf,
1720
+ ...type !== undefined && { type },
1721
+ id,
1722
+ var: id,
1723
+ value: id,
1724
+ source: outputSourceFor(taskType, row),
1725
+ target: `=${id}`,
1726
+ elementId
1727
+ };
1728
+ };
1729
+ var variableOutputType = (model, variable) => {
1730
+ const declared = model.variableTypes[modelKey(variable)];
1731
+ if (typeof declared !== "string" || declared.trim() === "") {
1732
+ return;
1733
+ }
1734
+ const key = declared.trim().toLowerCase().replaceAll(" ", "");
1735
+ return OUTPUT_TYPES.get(key) ?? "string";
1736
+ };
1737
+ var extractOutputFor = (row, elementId, taken, type, taskType) => {
1738
+ const leaf = row.field.split(".").at(-1) ?? row.field;
1739
+ const base = leaf === "" ? leaf : `${leaf[0].toLowerCase()}${leaf.slice(1)}`;
1740
+ const id = dedupedId(base, taken);
1741
+ return {
1742
+ name: leaf,
1743
+ ...type !== undefined && { type },
1744
+ id,
1745
+ var: row.variable,
1746
+ value: row.variable,
1747
+ source: outputSourceFor(taskType, row.field),
1748
+ target: `=${id}`,
1749
+ originalVar: id,
1750
+ elementId
1751
+ };
1752
+ };
1753
+ var customOutputFor = (row, type) => ({
1754
+ name: row.variable,
1755
+ ...type !== undefined && { type },
1756
+ custom: true,
1757
+ var: row.variable,
1758
+ value: canonicalExpression(unquoteLiteral(row.expression)),
1759
+ source: canonicalExpression(unquoteLiteral(row.expression)),
1760
+ target: "",
1761
+ body: "",
1762
+ elementId: "root"
1763
+ });
1764
+ var canonicalExpression = (value) => value.startsWith("=metadata.") ? `=js:${value.slice(1)}` : value;
1765
+ var unquoteLiteral = (cell) => {
1766
+ const text = cell.trim();
1767
+ const quote = text[0];
1768
+ if (quote !== '"' && quote !== "'")
1769
+ return cell;
1770
+ if (text.length < 2 || text[text.length - 1] !== quote)
1771
+ return cell;
1772
+ const inner = text.slice(1, -1);
1773
+ for (let at = 0;at < inner.length; at += 1) {
1774
+ if (inner[at] === "\\") {
1775
+ at += 1;
1776
+ continue;
1777
+ }
1778
+ if (inner[at] === quote)
1779
+ return cell;
1780
+ }
1781
+ return inner.replaceAll(`\\${quote}`, quote);
1782
+ };
1783
+ var RANK_LITERAL = 1;
1784
+ var RANK_PRODUCER = 2;
1785
+ var RANK_EXPRESSION = 3;
1786
+ var unboundProducerDetail = (target, found) => {
1787
+ if (found === undefined) {
1788
+ return `the Inputs row reads an output (${target}) that no task in this SDD declares`;
1789
+ }
1790
+ const spellings = new Set(found.names);
1791
+ const listed = [...spellings].map((task) => `"${task}"`).join(", ");
1792
+ if (spellings.size < found.names.length) {
1793
+ return `the Inputs row reads an output (${target}) of a task that ${found.names.length} tasks in that stage answer to (${listed}), so it is left unbound rather than pointed at one of them. Task names are unique across the case, so rename all but one`;
1794
+ }
1795
+ return `the Inputs row reads an output (${target}) whose task spelling ${found.names.length} tasks answer to (${listed}), so it is left unbound rather than pointed at one of them`;
1796
+ };
1797
+ var inputsFor = (task, elementId, where, unresolved, outputs) => {
1798
+ const ranked = new Map;
1799
+ const offer = (name, rank, input) => {
1800
+ const existing = ranked.get(name);
1801
+ if (existing === undefined || rank > existing.rank) {
1802
+ ranked.set(name, { rank, input });
1803
+ }
1804
+ };
1805
+ for (const row of task.literalInputs ?? []) {
1806
+ offer(String(row.name ?? ""), RANK_LITERAL, {
1807
+ name: String(row.name ?? ""),
1808
+ value: unquoteLiteral(String(row.value ?? "")),
1809
+ elementId
1810
+ });
1811
+ }
1812
+ for (const row of task.expressionInputs ?? []) {
1813
+ offer(String(row.name ?? ""), RANK_EXPRESSION, {
1814
+ name: String(row.name ?? ""),
1815
+ value: canonicalExpression(expandXrefs(String(row.expression ?? row.value ?? ""), {
1816
+ outputs,
1817
+ where,
1818
+ unresolved
1819
+ })),
1820
+ elementId
1821
+ });
1822
+ }
1823
+ for (const row of task.producerInputs ?? []) {
1824
+ const name = String(row.name ?? "");
1825
+ const producer = row.producer;
1826
+ const found = producer === undefined ? undefined : lookupOutput(outputs, `${indexKey(producer.stage)}|${indexKey(producer.task)}|${indexKey(producer.output)}`, producer.task);
1827
+ if (found === undefined || !("id" in found)) {
1828
+ const target = producer === undefined ? "unnamed producer" : `"${producer.stage}"."${producer.task}".${producer.output}`;
1829
+ unresolved.push({
1830
+ kind: "producer-reference",
1831
+ where: `${where}.inputs[${name}]`,
1832
+ detail: unboundProducerDetail(target, found)
1833
+ });
1834
+ continue;
1835
+ }
1836
+ const id = found.id;
1837
+ offer(name, RANK_PRODUCER, {
1838
+ name,
1839
+ value: row.direct === false ? expandXrefs(String(row.value ?? `=js:vars.${id}`), {
1840
+ outputs,
1841
+ where,
1842
+ unresolved
1843
+ }) : `=vars.${id}`,
1844
+ elementId
1845
+ });
1846
+ }
1847
+ return [...ranked.values()].map((entry) => entry.input);
1848
+ };
1849
+
1442
1850
  // ../case-tool/src/services/strict-sdd-audit/sla-durations.ts
1443
1851
  var SLA_UNIT_CODES = new Map([
1444
1852
  ["min", "min"],
@@ -1482,14 +1890,90 @@ var parseDurationCell = (text) => {
1482
1890
  const units = acceptedUnitCodes(match[2]);
1483
1891
  return units.length === 0 ? undefined : { count, units };
1484
1892
  };
1485
- var conditionalSlaFindings = (declared, carried, path, label) => {
1893
+ var slaProducerIndex = (plan, stages, references) => {
1894
+ const index = producerIndex(plan);
1895
+ for (const stage of plan.stages) {
1896
+ for (const task of stage.tasks) {
1897
+ for (const entry of asArray(task.data.outputs)) {
1898
+ const output = asRecord(entry);
1899
+ const source = output?.source;
1900
+ const name = output?.name;
1901
+ if (typeof source !== "string" || !source.startsWith("=") || !source.includes(".") || typeof name !== "string") {
1902
+ continue;
1903
+ }
1904
+ const prefix = `${norm(stage.name)}|${norm(task.name)}|`;
1905
+ const own = index.get(`${prefix}${norm(name)}`)?.find((tokens) => tokens.has(String(output?.id ?? "")));
1906
+ const row = `${prefix}${norm(source.slice(1))}`;
1907
+ if (own !== undefined && !index.has(row)) {
1908
+ index.set(row, [own]);
1909
+ }
1910
+ }
1911
+ }
1912
+ }
1913
+ const entries = [...index.entries()];
1914
+ const spelled = stages.flatMap((stage, at) => {
1915
+ const { names, slug, ordinal } = stageSpellings(stage.name, at + 1);
1916
+ const filed = names.map(norm).find((name) => entries.some(([key]) => key.startsWith(`${name}|`)));
1917
+ return filed === undefined ? [] : [{ filed, names, slug, ordinal }];
1918
+ });
1919
+ const tiers = [
1920
+ (one) => one.names,
1921
+ (one) => one.slug === undefined ? [] : [one.slug],
1922
+ (one) => [one.ordinal]
1923
+ ];
1924
+ for (const tier of tiers) {
1925
+ for (const one of spelled) {
1926
+ for (const alias of tier(one)) {
1927
+ const prefix = norm(alias);
1928
+ if (prefix === one.filed)
1929
+ continue;
1930
+ for (const [key, value] of entries) {
1931
+ if (!key.startsWith(`${one.filed}|`))
1932
+ continue;
1933
+ const aliased = `${prefix}|${key.slice(one.filed.length + 1)}`;
1934
+ if (!index.has(aliased))
1935
+ index.set(aliased, value);
1936
+ }
1937
+ }
1938
+ }
1939
+ }
1940
+ for (const { stage, task, output } of references) {
1941
+ if (!output.includes("."))
1942
+ continue;
1943
+ const prefix = `${norm(stage)}|${norm(task)}|`;
1944
+ const leaf = index.get(`${prefix}${norm(output.slice(output.lastIndexOf(".") + 1))}`);
1945
+ const row = `${prefix}${norm(output)}`;
1946
+ if (leaf?.length === 1 && !index.has(row))
1947
+ index.set(row, leaf);
1948
+ }
1949
+ return index;
1950
+ };
1951
+ var slaReferences = (sdd) => [
1952
+ ...sdd.xrefOutputs,
1953
+ ...sdd.stages.flatMap((stage) => stage.tasks.flatMap((task) => task.producerInputs.map((input) => input.producer)))
1954
+ ];
1955
+ var withoutConditional = (rules, declared, plan, stages, references) => {
1956
+ const conditional = declared.filter((row) => !UNCONDITIONAL.test(row.expression.trim()));
1957
+ if (conditional.length === 0)
1958
+ return [...rules];
1959
+ const index = slaProducerIndex(plan, stages, references);
1960
+ const overrides = conditional.map((row) => expressionMatcher(canonicalExpression(row.expression.trim()), index));
1961
+ return rules.filter((entry) => {
1962
+ const rule = asRecord(entry);
1963
+ const expression = rule?.expression;
1964
+ return !(typeof expression === "string" && overrides.some((matches) => matches(expression)));
1965
+ });
1966
+ };
1967
+ var UNCONDITIONAL = /^=js:\s*true\s*$/;
1968
+ var conditionalSlaFindings = (declared, carried, path, label, plan, stages, references) => {
1486
1969
  if (declared.length === 0)
1487
1970
  return [];
1488
1971
  const findings = [];
1489
1972
  const rules = carried.map((entry) => asRecord(entry)).filter((entry) => entry !== undefined);
1973
+ const index = slaProducerIndex(plan, stages, references);
1490
1974
  for (const row of declared) {
1491
- const wanted = comparableExpression(row.expression);
1492
- const match = rules.find((rule) => typeof rule.expression === "string" && comparableExpression(rule.expression) === wanted);
1975
+ const matches = expressionMatcher(canonicalExpression(row.expression.trim()), index);
1976
+ const match = rules.find((rule) => typeof rule.expression === "string" && matches(rule.expression));
1493
1977
  const title = row.displayName === undefined ? `\`${row.expression}\`` : `"${row.displayName}"`;
1494
1978
  if (match === undefined) {
1495
1979
  findings.push(error("STRICT_SDD_SLA_CONDITIONAL_MISSING", path, `${label}: the SDD declares a conditional SLA rule ${title} and no rule on this target carries that expression. The override is what applies the stricter duration when the condition holds, so without it every case takes the default and nothing reports a gap. Add the rule ahead of the trailing \`=js:true\` default.`));
@@ -1515,7 +1999,7 @@ var slaDurationFindings = (sdd, plan) => {
1515
1999
  if (declared === undefined)
1516
2000
  return [];
1517
2001
  const findings = [];
1518
- plan.caseSlaRules.forEach((entry, index) => {
2002
+ withoutConditional(plan.caseSlaRules, sdd.caseConditionalSlas, plan, sdd.stages, slaReferences(sdd)).forEach((entry, index) => {
1519
2003
  const rule = asRecord(entry);
1520
2004
  if (rule === undefined)
1521
2005
  return;
@@ -1705,7 +2189,7 @@ var extractFindings = (task, found, path, label) => {
1705
2189
  const outputs = asArray(found.data.outputs).map(asRecord).filter((o) => o !== undefined);
1706
2190
  const findings = [];
1707
2191
  for (const declared of task.extractRows) {
1708
- const wanted = `=${declared.field}`;
2192
+ const wanted = outputSourceFor(found.type, declared.field);
1709
2193
  const present = outputs.some((o) => o.source === wanted && o.var === declared.variable);
1710
2194
  if (present)
1711
2195
  continue;
@@ -1786,15 +2270,16 @@ var compareCaseLevel = (sdd, plan) => {
1786
2270
  const issues = [
1787
2271
  ...coverageFinding("metadata.caseExitRules", "case", "exit", sdd.caseExitRows, plan.caseExitConditions),
1788
2272
  ...gatedSlaFindings(plan.caseSlaRules, "metadata.slaRules", "case"),
1789
- ...conditionalSlaFindings(sdd.caseConditionalSlas, plan.caseSlaRules, "metadata.slaRules", "case")
2273
+ ...conditionalSlaFindings(sdd.caseConditionalSlas, plan.caseSlaRules, "metadata.slaRules", "case", plan, sdd.stages, slaReferences(sdd))
1790
2274
  ];
1791
2275
  if (sdd.caseSla && !plan.caseSla) {
1792
2276
  issues.push(error("STRICT_SDD_SLA_MISSING", "metadata.slaRules", "case: the SDD declares Case-Level SLA Escalation Rules, the caseplan metadata.slaRules is empty."));
1793
2277
  }
1794
2278
  issues.push(...escalationFindings(sdd.caseSlaEscalations, plan.caseSlaRules, "metadata.slaRules", "case", sdd.caseSlaResponses), ...xrefOutputFindings(sdd, plan), ...conditionExpressionFindings(sdd.caseExitConditions, plan.caseExitConditions, plan, "metadata.caseExitRules", "case"), ...conditionNameFindings(sdd.caseExitConditions, plan.caseExitConditions, "metadata.caseExitRules", "case", namesDeclaredOnce(sdd)));
1795
2279
  issues.push(...slaDurationFindings(sdd, plan));
1796
- if (sdd.caseSla && plan.caseSlaRules.length > 1) {
1797
- issues.push(error("STRICT_SDD_SLA_EXTRA", "metadata.slaRules", `case: the SDD declares one case-level SLA and ${plan.caseSlaRules.length} SLA rules are present. Its escalations are the rows of that one table, so splitting them across rules leaves each rule with part of the SLA and the runtime applies whichever rule it reaches — the other escalations are lost. Carry one rule with every escalation the table declares.`));
2280
+ const caseDefaults = withoutConditional(plan.caseSlaRules, sdd.caseConditionalSlas, plan, sdd.stages, slaReferences(sdd));
2281
+ if (sdd.caseSla && caseDefaults.length > 1) {
2282
+ issues.push(error("STRICT_SDD_SLA_EXTRA", "metadata.slaRules", `case: the SDD declares one case-level SLA and ${caseDefaults.length} SLA rules are present. Its escalations are the rows of that one table, so splitting them across rules leaves each rule with part of the SLA and the runtime applies whichever rule it reaches — the other escalations are lost. Carry one rule with every escalation the table declares.`));
1798
2283
  }
1799
2284
  if (sdd.triggers && plan.triggers < sdd.triggers) {
1800
2285
  issues.push(error("STRICT_SDD_TRIGGER_MISSING", "nodes", plan.triggers === 0 ? `case: the SDD declares ${sdd.triggers} trigger(s), the caseplan has no trigger node.` : `case: the SDD declares ${sdd.triggers} trigger(s), the caseplan has ${plan.triggers}.`));
@@ -1961,6 +2446,60 @@ var slaDurationOf = (block) => {
1961
2446
  return;
1962
2447
  };
1963
2448
 
2449
+ // ../case-tool/src/services/strict-sdd-audit/http-request-detail.ts
2450
+ var readHttpRequest = (block) => {
2451
+ const read = (label) => {
2452
+ const raw = field(block, label);
2453
+ if (raw === undefined)
2454
+ return;
2455
+ const text = stripTicks(raw).trim();
2456
+ if (text === "")
2457
+ return;
2458
+ if (/^[{["=]/.test(text))
2459
+ return text;
2460
+ return isBlank(text) ? undefined : text;
2461
+ };
2462
+ const request = {
2463
+ method: read("Method"),
2464
+ url: read("URL"),
2465
+ headers: read("Headers"),
2466
+ query: read("Query"),
2467
+ body: read("Body")
2468
+ };
2469
+ const stated = Object.entries(request).filter(([, value]) => value !== undefined);
2470
+ return stated.length === 0 ? undefined : Object.fromEntries(stated);
2471
+ };
2472
+ var httpFields = (block) => {
2473
+ const http = readHttpRequest(block);
2474
+ return http === undefined ? {} : { http };
2475
+ };
2476
+
2477
+ // ../case-tool/src/services/strict-sdd-audit/resource-reference.ts
2478
+ var REFERENCE_LABELS = new Set([
2479
+ "Action App Reference",
2480
+ "Agent Reference",
2481
+ "Process Reference",
2482
+ "API Workflow Reference",
2483
+ "Function Reference",
2484
+ "Case Reference"
2485
+ ].map(norm));
2486
+ var resourceReference = (block) => {
2487
+ const cell = pipeTables(block).map((table) => firstTable(table)).flatMap(({ header, rows }) => [header, ...rows]).find((row) => REFERENCE_LABELS.has(norm(row[0] ?? "")))?.[1]?.trim();
2488
+ if (cell === undefined || isBlank(cell))
2489
+ return {};
2490
+ const part = (key) => {
2491
+ const found = new RegExp(`\\b${key}\\s+"([^"]*)"`, "i").exec(cell);
2492
+ const value = found?.[1].trim();
2493
+ return value === undefined || value === "" ? undefined : value;
2494
+ };
2495
+ const name = part("Name");
2496
+ const folder = part("Folder");
2497
+ return {
2498
+ ...name !== undefined && { name },
2499
+ ...folder !== undefined && { folder }
2500
+ };
2501
+ };
2502
+
1964
2503
  // ../case-tool/src/services/sdd-condition-cell.ts
1965
2504
  var STAGE_SELECTOR_RULES = new Set([
1966
2505
  "selected-stage-completed",
@@ -2061,22 +2600,12 @@ var entryConditionBlocks = (section) => {
2061
2600
  return blocks;
2062
2601
  };
2063
2602
  var detailEntryRows = (section) => entryConditionBlocks(section).reduce((most, text) => Math.max(most, firstTable(text).rows.length), 0);
2064
- var isIdentifier = (text) => {
2065
- const head = text.charAt(0);
2066
- if (!isLetter(head) && head !== "_")
2067
- return false;
2068
- for (const ch of text.slice(1)) {
2069
- if (!isWordChar(ch))
2070
- return false;
2071
- }
2072
- return true;
2073
- };
2074
2603
  var detailInputRows = (block) => {
2075
2604
  const rowsOut = [];
2076
2605
  for (const sub of afterAnyLabel(block, INPUT_LABELS)) {
2077
2606
  const { header, rows } = firstTable(sub);
2078
- const nameAt = columnIndex(header, "Name", "Input", "Field");
2079
- const valueAt = columnIndex(header, "Binding / Value", "Binding", "Value");
2607
+ const nameAt = inputNameColumn(header);
2608
+ const valueAt = columnIndex(header, ...INPUT_VALUE_COLUMNS);
2080
2609
  if (nameAt === undefined || valueAt === undefined)
2081
2610
  continue;
2082
2611
  for (const row of rows) {
@@ -2100,8 +2629,8 @@ var detailExpressionInputs = (block) => {
2100
2629
  const inputs = [];
2101
2630
  for (const sub of afterAnyLabel(block, INPUT_LABELS)) {
2102
2631
  const { header, rows } = firstTable(sub);
2103
- const nameAt = columnIndex(header, "Name", "Input", "Field");
2104
- const valueAt = columnIndex(header, "Binding / Value", "Binding", "Value");
2632
+ const nameAt = inputNameColumn(header);
2633
+ const valueAt = columnIndex(header, ...INPUT_VALUE_COLUMNS);
2105
2634
  if (nameAt === undefined || valueAt === undefined)
2106
2635
  continue;
2107
2636
  for (const row of rows) {
@@ -2237,7 +2766,7 @@ var detailOutputRows = (block) => {
2237
2766
  const names = [];
2238
2767
  for (const sub of afterAnyLabel(block, OUTPUT_LABELS)) {
2239
2768
  const { header, rows } = firstTable(sub);
2240
- const nameAt = columnIndex(header, "Field", "Name", "Output");
2769
+ const nameAt = outputNameColumn(header);
2241
2770
  if (nameAt === undefined)
2242
2771
  continue;
2243
2772
  for (const row of rows) {
@@ -2293,7 +2822,7 @@ var detailExtractRows = (block) => {
2293
2822
  const rows = [];
2294
2823
  for (const sub of afterAnyLabel(block, OUTPUT_LABELS)) {
2295
2824
  const { header, rows: tableRows } = firstTable(sub);
2296
- const fieldAt = columnIndex(header, "Field", "Name", "Output");
2825
+ const fieldAt = outputNameColumn(header);
2297
2826
  const bindingAt = columnIndex(header, "Binding / Value", "Binding", "Value");
2298
2827
  if (fieldAt === undefined || bindingAt === undefined)
2299
2828
  continue;
@@ -2310,30 +2839,10 @@ var detailExtractRows = (block) => {
2310
2839
  }
2311
2840
  return rows;
2312
2841
  };
2313
- var detailCustomRows = (block) => {
2314
- const rows = [];
2315
- for (const sub of afterAnyLabel(block, OUTPUT_LABELS)) {
2316
- const { header, rows: tableRows } = firstTable(sub);
2317
- const bindingAt = columnIndex(header, "Binding / Value", "Binding", "Value");
2318
- if (bindingAt === undefined)
2319
- continue;
2320
- for (const row of tableRows) {
2321
- const binding = unwrapCodeSpan(cellAt(row, bindingAt));
2322
- const at = binding.indexOf("=");
2323
- if (at <= 0)
2324
- continue;
2325
- const variable = binding.slice(0, at).trim();
2326
- const expression = binding.slice(at + 1).trim();
2327
- if (!isIdentifier(variable))
2328
- continue;
2329
- const emptyLiteral = /^(""|'')$/.test(expression);
2330
- if (!emptyLiteral && (!expression || isBlank(expression)))
2331
- continue;
2332
- rows.push({ variable, expression });
2333
- }
2334
- }
2335
- return rows;
2336
- };
2842
+ var detailCustomRows = (block) => afterAnyLabel(block, OUTPUT_LABELS).flatMap((sub) => {
2843
+ const { header, rows } = firstTable(sub);
2844
+ return customRowsOf(header, rows);
2845
+ });
2337
2846
  var timerFields = (block) => {
2338
2847
  const declared = stripTicks(field(block, "Timer") ?? "");
2339
2848
  if (!declared || isBlank(declared))
@@ -2384,7 +2893,7 @@ var resourceNameOf = (block) => {
2384
2893
  if (name !== "" && !isBlank(name))
2385
2894
  return name;
2386
2895
  }
2387
- return;
2896
+ return resourceReference(block).name;
2388
2897
  };
2389
2898
  var HTTP_METHODS = new Set([
2390
2899
  "GET",
@@ -2484,7 +2993,7 @@ var readTaskDetail = (section) => {
2484
2993
  type: stripTicks(field(block, "Type") ?? ""),
2485
2994
  resolvedResource: field(block, "Resolved Resource"),
2486
2995
  identityResolved: identity.length > 0 && !identity.some(hasUnresolvedMarker),
2487
- folder: field(block, "Deployment Folder") ?? field(block, "Folder Path"),
2996
+ folder: field(block, "Deployment Folder") ?? field(block, "Folder Path") ?? resourceReference(block).folder,
2488
2997
  ...(() => {
2489
2998
  const skip = namedValue(unwrapCodeSpan(field(block, "Skip Condition") ?? columnField(block, "Skip Condition") ?? ""));
2490
2999
  return skip === "" ? {} : { skipCondition: skip };
@@ -2511,7 +3020,9 @@ var readTaskDetail = (section) => {
2511
3020
  boundInputs: detailBoundInputs(block),
2512
3021
  extractRows: detailExtractRows(block),
2513
3022
  customRows: detailCustomRows(block),
2514
- ...timerFields(block)
3023
+ unreadTables: unreadIoTables(block),
3024
+ ...timerFields(block),
3025
+ ...httpFields(block)
2515
3026
  };
2516
3027
  };
2517
3028
  var TIMER_CONFIGURATION_TYPES = new Map([
@@ -2779,7 +3290,7 @@ var conditionShapeFindings = (declared, planConditions, path, label) => {
2779
3290
  };
2780
3291
 
2781
3292
  // ../case-tool/src/services/strict-sdd-audit/compare-task.ts
2782
- var compareTask = (plan, task, found, stagePath, label, selectors, ledger, stageSpellings = [], once = new Set) => {
3293
+ var compareTask = (plan, task, found, stagePath, label, selectors, ledger, stageSpellings2 = [], once = new Set) => {
2783
3294
  const issues = [];
2784
3295
  const taskPath = `${stagePath}.data.tasks[${found.name ?? task.name}]`;
2785
3296
  if (task.type && found.type && norm(task.type) !== norm(found.type)) {
@@ -2798,7 +3309,7 @@ var compareTask = (plan, task, found, stagePath, label, selectors, ledger, stage
2798
3309
  issues.push(error("STRICT_SDD_ENTRY_RULE_EMPTY", `${taskPath}.entryConditions`, `${label}: entryConditions carry no rules.`));
2799
3310
  }
2800
3311
  const isPlaceholder = Object.keys(found.data).length === 0;
2801
- const miss = isPlaceholder ? ledgerMissFor(ledger, stageSpellings, task.name) : undefined;
3312
+ const miss = isPlaceholder ? ledgerMissFor(ledger, stageSpellings2, task.name) : undefined;
2802
3313
  if (isPlaceholder && task.identityResolved && miss !== undefined) {
2803
3314
  issues.push(warning("STRICT_SDD_PLACEHOLDER_UNRESOLVABLE", `${taskPath}.data`, `${label}: placeholder task, and the run's registry ledger records no match for "${miss.query}"${miss.cacheFile ? ` in ${miss.cacheFile}` : ""} — so the placeholder is correct and the SDD names a resource this tenant does not have. Resolve it on a tenant that does, or leave the placeholder.`));
2804
3315
  } else if (isPlaceholder && task.identityResolved) {
@@ -2818,10 +3329,10 @@ var compareTask = (plan, task, found, stagePath, label, selectors, ledger, stage
2818
3329
  };
2819
3330
 
2820
3331
  // ../case-tool/src/services/strict-sdd-audit/compare.ts
2821
- var compareStage = (plan, stage, planStage, selectors, ledger, stagePosition, once = new Set) => {
3332
+ var compareStage = (plan, stage, planStage, selectors, ledger, stagePosition, once = new Set, sddStages = [stage], references = []) => {
2822
3333
  const stagePath = `nodes[${planStage.name ?? stage.name}]`;
2823
3334
  const ordinal = stagePosition === undefined ? undefined : `Stage ${stagePosition + 1}`;
2824
- const stageSpellings = [
3335
+ const stageSpellings2 = [
2825
3336
  stage.name,
2826
3337
  ordinal,
2827
3338
  ordinal === undefined ? undefined : `${ordinal}: ${stage.name}`,
@@ -2832,13 +3343,14 @@ var compareStage = (plan, stage, planStage, selectors, ledger, stagePosition, on
2832
3343
  ...coverageFinding(`${stagePath}.data.entryConditions`, stageLabel, "entry", stage.entryRows, planStage.entry),
2833
3344
  ...coverageFinding(`${stagePath}.data.exitConditions`, stageLabel, "exit", stage.exitRows, planStage.exit),
2834
3345
  ...gatedSlaFindings(planStage.sla, `${stagePath}.data.slaRules`, stageLabel),
2835
- ...conditionalSlaFindings(stage.conditionalSlas, planStage.sla, `${stagePath}.data.slaRules`, stageLabel)
3346
+ ...conditionalSlaFindings(stage.conditionalSlas, planStage.sla, `${stagePath}.data.slaRules`, stageLabel, plan, sddStages, references)
2836
3347
  ];
2837
3348
  if (stage.hasSla && planStage.sla.length === 0) {
2838
3349
  issues.push(error("STRICT_SDD_SLA_MISSING", `${stagePath}.data.slaRules`, `${stageLabel}: the SDD declares a Stage SLA, the caseplan has no slaRules.`));
2839
3350
  }
2840
- if (stage.hasSla && planStage.sla.length > 1) {
2841
- issues.push(error("STRICT_SDD_SLA_EXTRA", `${stagePath}.data.slaRules`, `${stageLabel}: the SDD declares one Stage SLA and ${planStage.sla.length} SLA rules are present. Its escalations belong to that one SLA, so splitting them across rules leaves each with part of it and the runtime applies whichever rule it reaches — the other escalations are lost. Carry one rule with every escalation the table declares.`));
3351
+ const stageDefaults = withoutConditional(planStage.sla, stage.conditionalSlas, plan, sddStages, references);
3352
+ if (stage.hasSla && stageDefaults.length > 1) {
3353
+ issues.push(error("STRICT_SDD_SLA_EXTRA", `${stagePath}.data.slaRules`, `${stageLabel}: the SDD declares one Stage SLA and ${stageDefaults.length} SLA rules are present. Its escalations belong to that one SLA, so splitting them across rules leaves each with part of it and the runtime applies whichever rule it reaches — the other escalations are lost. Carry one rule with every escalation the table declares.`));
2842
3354
  }
2843
3355
  issues.push(...conditionRuleFindings(stage.entryConditions, planStage.entry, `${stagePath}.data.entryConditions`, stageLabel, selectors), ...conditionRuleFindings(stage.exitConditions, planStage.exit, `${stagePath}.data.exitConditions`, stageLabel, selectors), ...conditionShapeFindings(stage.entryConditions, planStage.entry, `${stagePath}.data.entryConditions`, stageLabel), ...conditionShapeFindings(stage.exitConditions, planStage.exit, `${stagePath}.data.exitConditions`, stageLabel), ...conditionNameFindings(stage.entryConditions, planStage.entry, `${stagePath}.data.entryConditions`, stageLabel, once), ...conditionNameFindings(stage.exitConditions, planStage.exit, `${stagePath}.data.exitConditions`, stageLabel, once), ...conditionExpressionFindings(stage.entryConditions, planStage.entry, plan, `${stagePath}.data.entryConditions`, stageLabel), ...conditionExpressionFindings(stage.exitConditions, planStage.exit, plan, `${stagePath}.data.exitConditions`, stageLabel), ...escalationFindings(stage.slaEscalations, planStage.sla, `${stagePath}.data.slaRules`, stageLabel, stage.slaResponses));
2844
3356
  const bound = resolveTasks(stage.tasks, planStage.tasks);
@@ -2858,7 +3370,7 @@ var compareStage = (plan, stage, planStage, selectors, ledger, stagePosition, on
2858
3370
  issues.push(error("STRICT_SDD_TASK_MISSING", `${stagePath}.data.tasks[${task.name}]`, `${label} is declared in the SDD and absent from the caseplan.`));
2859
3371
  return;
2860
3372
  }
2861
- issues.push(...compareTask(plan, task, planStage.tasks[taskIndex], stagePath, label, selectors, ledger, stageSpellings, once));
3373
+ issues.push(...compareTask(plan, task, planStage.tasks[taskIndex], stagePath, label, selectors, ledger, stageSpellings2, once));
2862
3374
  });
2863
3375
  planStage.tasks.forEach((extra, index) => {
2864
3376
  if (bound.includes(index))
@@ -2951,7 +3463,7 @@ var compare = (sdd, plan, ledger) => {
2951
3463
  };
2952
3464
  const once = namesDeclaredOnce(sdd);
2953
3465
  for (const { stage, at, sddIndex } of pairs) {
2954
- issues.push(...compareStage(plan, stage, plan.stages[at], selectors, ledger, sddIndex, once));
3466
+ issues.push(...compareStage(plan, stage, plan.stages[at], selectors, ledger, sddIndex, once, sdd.stages, slaReferences(sdd)));
2955
3467
  }
2956
3468
  plan.stages.forEach((extra, index) => {
2957
3469
  if (stageBound.has(index))
@@ -2962,6 +3474,88 @@ var compare = (sdd, plan, ledger) => {
2962
3474
  return issues;
2963
3475
  };
2964
3476
 
3477
+ // ../case-tool/src/services/strict-sdd-audit/name-collisions.ts
3478
+ var nameCollisions = (declared) => {
3479
+ const firstOf = new Map;
3480
+ const found = [];
3481
+ for (const one of declared) {
3482
+ const { key } = one;
3483
+ const first = firstOf.get(key);
3484
+ if (first === undefined)
3485
+ firstOf.set(key, one);
3486
+ else
3487
+ found.push({ key, first, second: one });
3488
+ }
3489
+ return found;
3490
+ };
3491
+ var describe = ({ key, first, second }) => first.name === second.name ? `"${first.name}" is declared twice, on lines ${first.line} and ${second.line}` : `"${first.name}" on line ${first.line} and "${second.name}" on line ${second.line} both read as "${key}"`;
3492
+
3493
+ class SddNameCollisionError extends Error {
3494
+ collisions;
3495
+ constructor(collisions) {
3496
+ super(`the Case Variables table declares variables the parser cannot tell apart: ${collisions.map(describe).join("; ")}. Each pair would merge into one variable with one Category, Type and Default. Rename one of each pair so the names differ by more than case, punctuation or a trailing (annotation).`);
3497
+ this.collisions = collisions;
3498
+ this.name = "SddNameCollisionError";
3499
+ }
3500
+ }
3501
+
3502
+ // ../case-tool/src/services/strict-sdd-audit/canvas-notes-read.ts
3503
+ var cellsOf = (line) => splitRowCells(line.trim().replace(/^\|/, "").replace(/\|$/, ""));
3504
+ var noteTable = (table) => {
3505
+ const [head = "", ...rest] = table.split(`
3506
+ `).filter((line) => line.trim() !== "");
3507
+ const separator = rest.length > 0 && cellsOf(rest[0]).every((cell) => cell === "" || isSeparatorCell(cell)) && cellsOf(rest[0]).some(isSeparatorCell);
3508
+ return {
3509
+ header: cellsOf(head),
3510
+ rows: (separator ? rest.slice(1) : rest).map(cellsOf)
3511
+ };
3512
+ };
3513
+ var readCanvasNotes = (sdd, title, body) => {
3514
+ const { header, rows } = noteTable(body);
3515
+ const wanted = ["Content", "Note", "Text"];
3516
+ const contentAt = columnIndex(header, ...wanted);
3517
+ const colorAt = columnIndex(header, "Color", "Colour");
3518
+ if (contentAt === undefined) {
3519
+ if (rows.length > 0) {
3520
+ sdd.parseNotes.push(noNameColumnNote(title, wanted, header));
3521
+ }
3522
+ return;
3523
+ }
3524
+ const offered = new Set(CANVAS_NOTE_COLORS);
3525
+ for (const [at, row] of rows.entries()) {
3526
+ const content = cellAt(row, contentAt).trim();
3527
+ if (content === "") {
3528
+ sdd.parseNotes.push("canvas note row has no Content, so no note was written for it");
3529
+ continue;
3530
+ }
3531
+ const stated = stripTicks(cellAt(row, colorAt)).trim();
3532
+ const color = isBlank(stated) ? "" : stated.toLowerCase();
3533
+ if (color !== "" && !offered.has(color)) {
3534
+ sdd.parseNotes.push(`canvas note colour "${stated}" is not one the Case Designer offers (${CANVAS_NOTE_COLORS.join(", ")}); the note keeps the default colour`);
3535
+ }
3536
+ sdd.canvasNotes.push({
3537
+ row: at + 1,
3538
+ ...offered.has(color) && { color },
3539
+ content
3540
+ });
3541
+ }
3542
+ };
3543
+ var readCanvasNotesSection = (sdd, section, seen) => {
3544
+ const { title, body } = section;
3545
+ const own = section.children.length > 0 ? body.slice(0, section.children[0].start - section.contentStart) : body;
3546
+ const tables = pipeTables(own).filter((table) => noteTable(table).rows.some((row) => row.some((cell) => cell.trim() !== "")));
3547
+ if (tables.length === 0)
3548
+ return seen;
3549
+ const later = seen ? tables.length : tables.length - 1;
3550
+ if (later > 0) {
3551
+ sdd.parseNotes.push(`section "${title}": ${later === 1 ? "a second Canvas Notes table is" : `${later} more Canvas Notes tables are`} not read, because each note is named by its row and two tables would name two notes alike; put every note in one table`);
3552
+ }
3553
+ if (seen)
3554
+ return true;
3555
+ readCanvasNotes(sdd, title, tables[0]);
3556
+ return true;
3557
+ };
3558
+
2965
3559
  // ../case-tool/src/services/strict-sdd-audit/sdd-stage.ts
2966
3560
  var readTaskRows = (title, block, notes) => {
2967
3561
  const { header, rows } = firstTable(block);
@@ -3038,7 +3632,7 @@ var conditionalSlaRows = (block) => {
3038
3632
  const found = [];
3039
3633
  const nameAt = columnIndex(header, "Display Name", "Title");
3040
3634
  for (const row of rows) {
3041
- const expression = (row[expressionAt] ?? "").trim();
3635
+ const expression = unwrapCodeSpan(row[expressionAt] ?? "").trim();
3042
3636
  if (expression === "" || expression.startsWith("<"))
3043
3637
  continue;
3044
3638
  const count = (row[slaAt] ?? "").trim();
@@ -3148,6 +3742,7 @@ var parseStage = (name, section, notes) => {
3148
3742
  task.boundInputs = detail.boundInputs;
3149
3743
  task.extractRows = detail.extractRows;
3150
3744
  task.customRows = detail.customRows;
3745
+ task.unreadTables = detail.unreadTables;
3151
3746
  task.resolvedResource = detail.resolvedResource;
3152
3747
  task.identityResolved = detail.identityResolved;
3153
3748
  task.folder = detail.folder;
@@ -3173,6 +3768,8 @@ var parseStage = (name, section, notes) => {
3173
3768
  task.timerValue = detail.timerValue;
3174
3769
  if (!task.type && detail.type)
3175
3770
  task.type = detail.type;
3771
+ if (detail.http !== undefined && String(task.type ?? "").trim().toLowerCase() === "http-request")
3772
+ task.http = detail.http;
3176
3773
  }
3177
3774
  const empty = {
3178
3775
  conditions: !(stage.entryRows && stage.exitRows),
@@ -3191,7 +3788,7 @@ var parseStage = (name, section, notes) => {
3191
3788
  };
3192
3789
 
3193
3790
  // ../case-tool/src/services/strict-sdd-audit/sdd-parse.ts
3194
- var applyCaseSection = (sdd, title, body) => {
3791
+ var applyCaseSection = (sdd, title, body, headingLine, declaredNames) => {
3195
3792
  if (headingIs(title, CASE_EXIT_HEADINGS)) {
3196
3793
  const merged = addConditionTable(sdd.caseExitRows, sdd.caseExitConditions, body);
3197
3794
  sdd.caseExitRows = merged.rows;
@@ -3287,7 +3884,7 @@ var applyCaseSection = (sdd, title, body) => {
3287
3884
  }
3288
3885
  } else if (headingIs(title, CASE_VARIABLE_HEADINGS)) {
3289
3886
  sdd.sawVariableSection = true;
3290
- const { header, rows } = firstTable(body);
3887
+ const { header, rows, rowLines } = firstTable(body);
3291
3888
  const wanted = ["Name", "Variable", "Variable Name"];
3292
3889
  const nameAt = columnIndex(header, ...wanted);
3293
3890
  const categoryAt = columnIndex(header, "Category");
@@ -3300,10 +3897,15 @@ var applyCaseSection = (sdd, title, body) => {
3300
3897
  } else if (rows.length > 0 && categoryAt === undefined) {
3301
3898
  sdd.parseNotes.push(noCategoryColumnNote(title, header));
3302
3899
  }
3303
- for (const row of rows) {
3900
+ for (const [index, row] of rows.entries()) {
3304
3901
  const name = cellAt(row, nameAt);
3305
3902
  if (name && !isBlank(name)) {
3306
3903
  sdd.variables.push(stripTicks(name.trim()));
3904
+ declaredNames.push({
3905
+ name: stripTicks(name.trim()),
3906
+ key: norm(name),
3907
+ line: headingLine + rowLines[index]
3908
+ });
3307
3909
  const declaredType = stripTicks(cellAt(row, typeAt).trim()).trim();
3308
3910
  if (declaredType !== "" && !isBlank(declaredType)) {
3309
3911
  sdd.variableTypes.set(norm(name), declaredType);
@@ -3404,6 +4006,16 @@ var applySlaResponses = (sdd) => {
3404
4006
  stage.slaResponses = merge(stage.slaResponses, atRisk, breach);
3405
4007
  }
3406
4008
  };
4009
+ var lineAt = (text, offset) => {
4010
+ let line = 1;
4011
+ for (let at = text.indexOf(`
4012
+ `);at !== -1 && at < offset; ) {
4013
+ line += 1;
4014
+ at = text.indexOf(`
4015
+ `, at + 1);
4016
+ }
4017
+ return line;
4018
+ };
3407
4019
  var parseSdd = (text) => {
3408
4020
  const document = normalizeSdd(text);
3409
4021
  const sdd = {
@@ -3426,14 +4038,22 @@ var parseSdd = (text) => {
3426
4038
  caseConditionalSlas: [],
3427
4039
  xrefOutputs: xrefProducers(document),
3428
4040
  resourceOutputs: resourceOutputsByTask(document),
4041
+ canvasNotes: [],
3429
4042
  parseNotes: []
3430
4043
  };
3431
4044
  const lookalikes = [];
4045
+ const declaredNames = [];
4046
+ let sawCanvasNotes = false;
3432
4047
  for (const section of document.allSections) {
3433
4048
  const { level, title, body } = section;
4049
+ if ((level === 2 || level === 3) && headingIs(title, CANVAS_NOTE_HEADINGS)) {
4050
+ sawCanvasNotes = readCanvasNotesSection(sdd, section, sawCanvasNotes);
4051
+ continue;
4052
+ }
3434
4053
  if (level !== 3)
3435
4054
  continue;
3436
- if (applyCaseSection(sdd, title, body))
4055
+ const headingLine = lineAt(text, section.start);
4056
+ if (applyCaseSection(sdd, title, body, headingLine, declaredNames))
3437
4057
  continue;
3438
4058
  const stageName = readStageHeading(title);
3439
4059
  if (stageName !== undefined) {
@@ -3456,6 +4076,9 @@ var parseSdd = (text) => {
3456
4076
  if (empty[topic])
3457
4077
  sdd.parseNotes.push(unrecognizedHeadingNote(title, 3));
3458
4078
  }
4079
+ const collisions = nameCollisions(declaredNames);
4080
+ if (collisions.length > 0)
4081
+ throw new SddNameCollisionError(collisions);
3459
4082
  return sdd;
3460
4083
  };
3461
4084
 
@@ -3522,6 +4145,7 @@ var parseSddToJson = (text) => {
3522
4145
  ...sdd.caseDescription !== undefined && {
3523
4146
  caseDescription: sdd.caseDescription
3524
4147
  },
4148
+ ...sdd.canvasNotes.length > 0 && { canvasNotes: sdd.canvasNotes },
3525
4149
  intake: {
3526
4150
  caseExitRows: sdd.caseExitRows,
3527
4151
  sawVariableSection: sdd.sawVariableSection,
@@ -3530,7 +4154,14 @@ var parseSddToJson = (text) => {
3530
4154
  };
3531
4155
  };
3532
4156
  var auditCaseplanAgainstSdd = (parsed, sddText, sddName, ledger) => {
3533
- const sdd = parseSdd(sddText);
4157
+ const [parseError, sdd] = catchError(() => parseSdd(sddText));
4158
+ if (parseError instanceof SddNameCollisionError) {
4159
+ return [
4160
+ error("STRICT_SDD_NAME_COLLISION", sddName, `"${sddName}": ${parseError.message}`)
4161
+ ];
4162
+ }
4163
+ if (parseError)
4164
+ throw parseError;
3534
4165
  const issues = sdd.parseNotes.map((note) => warning("STRICT_SDD_PARSE_NOTE", sddName, note));
3535
4166
  if (sdd.stages.length === 0) {
3536
4167
  issues.push(error("STRICT_SDD_PARSE_EMPTY", sddName, `No stages parsed from "${sddName}", so every completeness check would pass without checking anything. Stage headings must read \`### Stage <n>: <name>\`.`));
@@ -3540,6 +4171,6 @@ var auditCaseplanAgainstSdd = (parsed, sddText, sddName, ledger) => {
3540
4171
  issues.push(...slaReferenceFindings(sddText, sddName));
3541
4172
  return issues;
3542
4173
  };
3543
- export { CASE_SLA_PROPERTY, VARIABLE_PLACEMENT, DEFAULT_GROUP, STAGE_SELECTOR_RULES, TASK_SELECTOR_RULES, parseIfCell, bodySchemaIn, parseSddToJson, auditCaseplanAgainstSdd };
4174
+ export { CASE_SLA_PROPERTY, VARIABLE_PLACEMENT, DEFAULT_GROUP, markDeferredOutputs, expandXrefs, expandOutputMarkers, declaredOutputs, outputTypeFor, outputFor, variableOutputType, extractOutputFor, customOutputFor, canonicalExpression, unquoteLiteral, inputsFor, STAGE_SELECTOR_RULES, TASK_SELECTOR_RULES, parseIfCell, bodySchemaIn, parseSddToJson, auditCaseplanAgainstSdd };
3544
4175
 
3545
- //# debugId=0113344A654DDCE664756E2164756E21
4176
+ //# debugId=2CDB1F719150BEAA64756E2164756E21