@relayflows/sdk 2.0.29 → 2.0.31

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 (393) hide show
  1. package/dist/agent-artifacts.d.ts.map +1 -1
  2. package/dist/agent-artifacts.js +2 -9
  3. package/dist/agent-artifacts.js.map +1 -1
  4. package/dist/agent-cwd.d.ts +69 -0
  5. package/dist/agent-cwd.d.ts.map +1 -0
  6. package/dist/agent-cwd.js +140 -0
  7. package/dist/agent-cwd.js.map +1 -0
  8. package/dist/artifact-scan-policy.d.ts +35 -0
  9. package/dist/artifact-scan-policy.d.ts.map +1 -0
  10. package/dist/artifact-scan-policy.js +49 -0
  11. package/dist/artifact-scan-policy.js.map +1 -0
  12. package/dist/authored-completion-record.d.ts +35 -0
  13. package/dist/authored-completion-record.d.ts.map +1 -0
  14. package/dist/authored-completion-record.js +92 -0
  15. package/dist/authored-completion-record.js.map +1 -0
  16. package/dist/authored-completion.d.ts +99 -0
  17. package/dist/authored-completion.d.ts.map +1 -0
  18. package/dist/authored-completion.js +184 -0
  19. package/dist/authored-completion.js.map +1 -0
  20. package/dist/authored-flow-error.d.ts +13 -1
  21. package/dist/authored-flow-error.d.ts.map +1 -1
  22. package/dist/authored-flow-error.js +12 -0
  23. package/dist/authored-flow-error.js.map +1 -1
  24. package/dist/authored-flow-executor.d.ts +7 -30
  25. package/dist/authored-flow-executor.d.ts.map +1 -1
  26. package/dist/authored-flow-executor.js +64 -48
  27. package/dist/authored-flow-executor.js.map +1 -1
  28. package/dist/authored-human.d.ts.map +1 -1
  29. package/dist/authored-human.js +1 -3
  30. package/dist/authored-human.js.map +1 -1
  31. package/dist/authored-node-entry.js +4 -1
  32. package/dist/authored-node-entry.js.map +1 -1
  33. package/dist/authored-node-runner.d.ts +9 -1
  34. package/dist/authored-node-runner.d.ts.map +1 -1
  35. package/dist/authored-node-runner.js +92 -17
  36. package/dist/authored-node-runner.js.map +1 -1
  37. package/dist/authored-root.d.ts +5 -0
  38. package/dist/authored-root.d.ts.map +1 -1
  39. package/dist/authored-root.js +20 -2
  40. package/dist/authored-root.js.map +1 -1
  41. package/dist/authored-step-output.d.ts +35 -10
  42. package/dist/authored-step-output.d.ts.map +1 -1
  43. package/dist/authored-step-output.js +108 -40
  44. package/dist/authored-step-output.js.map +1 -1
  45. package/dist/authored-verdict.d.ts +28 -0
  46. package/dist/authored-verdict.d.ts.map +1 -0
  47. package/dist/authored-verdict.js +79 -0
  48. package/dist/authored-verdict.js.map +1 -0
  49. package/dist/authored-worker-step.d.ts +5 -2
  50. package/dist/authored-worker-step.d.ts.map +1 -1
  51. package/dist/authored-worker-step.js +48 -11
  52. package/dist/authored-worker-step.js.map +1 -1
  53. package/dist/bundle-extensions.d.ts.map +1 -1
  54. package/dist/bundle-extensions.js +4 -7
  55. package/dist/bundle-extensions.js.map +1 -1
  56. package/dist/bundle.d.ts.map +1 -1
  57. package/dist/bundle.js +41 -7
  58. package/dist/bundle.js.map +1 -1
  59. package/dist/canonical.d.ts.map +1 -1
  60. package/dist/canonical.js +18 -6
  61. package/dist/canonical.js.map +1 -1
  62. package/dist/cli/check-worker-surface.d.ts +27 -0
  63. package/dist/cli/check-worker-surface.d.ts.map +1 -0
  64. package/dist/cli/check-worker-surface.js +63 -0
  65. package/dist/cli/check-worker-surface.js.map +1 -0
  66. package/dist/cli/check.d.ts +19 -2
  67. package/dist/cli/check.d.ts.map +1 -1
  68. package/dist/cli/check.js +12 -4
  69. package/dist/cli/check.js.map +1 -1
  70. package/dist/cli/cloud-format.d.ts +9 -0
  71. package/dist/cli/cloud-format.d.ts.map +1 -0
  72. package/dist/cli/cloud-format.js +77 -0
  73. package/dist/cli/cloud-format.js.map +1 -0
  74. package/dist/cli/cloud-live.d.ts +39 -0
  75. package/dist/cli/cloud-live.d.ts.map +1 -0
  76. package/dist/cli/cloud-live.js +325 -0
  77. package/dist/cli/cloud-live.js.map +1 -0
  78. package/dist/cli/cloud-read.d.ts +3 -7
  79. package/dist/cli/cloud-read.d.ts.map +1 -1
  80. package/dist/cli/cloud-read.js +14 -266
  81. package/dist/cli/cloud-read.js.map +1 -1
  82. package/dist/cli/cloud-refusal.d.ts +39 -0
  83. package/dist/cli/cloud-refusal.d.ts.map +1 -0
  84. package/dist/cli/cloud-refusal.js +95 -0
  85. package/dist/cli/cloud-refusal.js.map +1 -0
  86. package/dist/cli/cloud-status-view.d.ts +7 -0
  87. package/dist/cli/cloud-status-view.d.ts.map +1 -0
  88. package/dist/cli/cloud-status-view.js +214 -0
  89. package/dist/cli/cloud-status-view.js.map +1 -0
  90. package/dist/cli/direct-run.d.ts.map +1 -1
  91. package/dist/cli/direct-run.js +16 -2
  92. package/dist/cli/direct-run.js.map +1 -1
  93. package/dist/cli/hn-monitor.d.ts +0 -13
  94. package/dist/cli/hn-monitor.d.ts.map +1 -1
  95. package/dist/cli/hn-monitor.js +2 -1
  96. package/dist/cli/hn-monitor.js.map +1 -1
  97. package/dist/cli/local-agent-remedy.d.ts +80 -0
  98. package/dist/cli/local-agent-remedy.d.ts.map +1 -0
  99. package/dist/cli/local-agent-remedy.js +116 -0
  100. package/dist/cli/local-agent-remedy.js.map +1 -0
  101. package/dist/cli/observer-session.d.ts +41 -0
  102. package/dist/cli/observer-session.d.ts.map +1 -0
  103. package/dist/cli/observer-session.js +78 -0
  104. package/dist/cli/observer-session.js.map +1 -0
  105. package/dist/cli/run.d.ts +30 -2
  106. package/dist/cli/run.d.ts.map +1 -1
  107. package/dist/cli/run.js +186 -24
  108. package/dist/cli/run.js.map +1 -1
  109. package/dist/cli/status.d.ts +9 -0
  110. package/dist/cli/status.d.ts.map +1 -1
  111. package/dist/cli/status.js +31 -2
  112. package/dist/cli/status.js.map +1 -1
  113. package/dist/cli/step-evidence.d.ts +90 -0
  114. package/dist/cli/step-evidence.d.ts.map +1 -0
  115. package/dist/cli/step-evidence.js +259 -0
  116. package/dist/cli/step-evidence.js.map +1 -0
  117. package/dist/cli/step-failure.d.ts +14 -4
  118. package/dist/cli/step-failure.d.ts.map +1 -1
  119. package/dist/cli/step-failure.js +41 -76
  120. package/dist/cli/step-failure.js.map +1 -1
  121. package/dist/cli-commands.d.ts +6 -0
  122. package/dist/cli-commands.d.ts.map +1 -1
  123. package/dist/cli-commands.js +2 -0
  124. package/dist/cli-commands.js.map +1 -1
  125. package/dist/cli.d.ts +10 -0
  126. package/dist/cli.d.ts.map +1 -1
  127. package/dist/cli.js +53 -42
  128. package/dist/cli.js.map +1 -1
  129. package/dist/cloud-read.d.ts +15 -0
  130. package/dist/cloud-read.d.ts.map +1 -1
  131. package/dist/cloud-read.js +20 -1
  132. package/dist/cloud-read.js.map +1 -1
  133. package/dist/cloud-run-record.d.ts +27 -0
  134. package/dist/cloud-run-record.d.ts.map +1 -0
  135. package/dist/cloud-run-record.js +56 -0
  136. package/dist/cloud-run-record.js.map +1 -0
  137. package/dist/cloud-run.d.ts +2 -9
  138. package/dist/cloud-run.d.ts.map +1 -1
  139. package/dist/cloud-run.js +3 -20
  140. package/dist/cloud-run.js.map +1 -1
  141. package/dist/communication/local.d.ts.map +1 -1
  142. package/dist/communication/local.js +2 -1
  143. package/dist/communication/local.js.map +1 -1
  144. package/dist/communication/worker.d.ts +1 -1
  145. package/dist/communication/worker.d.ts.map +1 -1
  146. package/dist/communication/worker.js +13 -5
  147. package/dist/communication/worker.js.map +1 -1
  148. package/dist/compile.d.ts.map +1 -1
  149. package/dist/compile.js +28 -6
  150. package/dist/compile.js.map +1 -1
  151. package/dist/direct-input.d.ts.map +1 -1
  152. package/dist/direct-input.js +21 -1
  153. package/dist/direct-input.js.map +1 -1
  154. package/dist/failure-kinds.d.ts +96 -6
  155. package/dist/failure-kinds.d.ts.map +1 -1
  156. package/dist/failure-kinds.js +29 -2
  157. package/dist/failure-kinds.js.map +1 -1
  158. package/dist/flow-extension-compat.d.ts.map +1 -1
  159. package/dist/flow-extension-compat.js +26 -8
  160. package/dist/flow-extension-compat.js.map +1 -1
  161. package/dist/flow-extension-loader.d.ts +7 -0
  162. package/dist/flow-extension-loader.d.ts.map +1 -1
  163. package/dist/flow-extension-loader.js +48 -22
  164. package/dist/flow-extension-loader.js.map +1 -1
  165. package/dist/flow-requirements.d.ts.map +1 -1
  166. package/dist/flow-requirements.js +24 -9
  167. package/dist/flow-requirements.js.map +1 -1
  168. package/dist/fs-descriptor.d.ts +17 -0
  169. package/dist/fs-descriptor.d.ts.map +1 -0
  170. package/dist/fs-descriptor.js +96 -0
  171. package/dist/fs-descriptor.js.map +1 -0
  172. package/dist/gate-contract.d.ts +7 -0
  173. package/dist/gate-contract.d.ts.map +1 -1
  174. package/dist/gate-contract.js +6 -1
  175. package/dist/gate-contract.js.map +1 -1
  176. package/dist/helper-preflight.d.ts.map +1 -1
  177. package/dist/helper-preflight.js +10 -3
  178. package/dist/helper-preflight.js.map +1 -1
  179. package/dist/helper-reference.d.ts +25 -0
  180. package/dist/helper-reference.d.ts.map +1 -0
  181. package/dist/helper-reference.js +129 -0
  182. package/dist/helper-reference.js.map +1 -0
  183. package/dist/hosted-base-snapshot.d.ts +25 -0
  184. package/dist/hosted-base-snapshot.d.ts.map +1 -0
  185. package/dist/hosted-base-snapshot.js +278 -0
  186. package/dist/hosted-base-snapshot.js.map +1 -0
  187. package/dist/hosted-extension-declarations.d.ts +10 -0
  188. package/dist/hosted-extension-declarations.d.ts.map +1 -0
  189. package/dist/hosted-extension-declarations.js +272 -0
  190. package/dist/hosted-extension-declarations.js.map +1 -0
  191. package/dist/hosted-extension-isolation.d.ts +82 -0
  192. package/dist/hosted-extension-isolation.d.ts.map +1 -0
  193. package/dist/hosted-extension-isolation.js +322 -0
  194. package/dist/hosted-extension-isolation.js.map +1 -0
  195. package/dist/hosted-extension-manifest.d.ts +9 -0
  196. package/dist/hosted-extension-manifest.d.ts.map +1 -0
  197. package/dist/hosted-extension-manifest.js +235 -0
  198. package/dist/hosted-extension-manifest.js.map +1 -0
  199. package/dist/hosted-extension-protocol.d.ts +16 -0
  200. package/dist/hosted-extension-protocol.d.ts.map +1 -0
  201. package/dist/hosted-extension-protocol.js +224 -0
  202. package/dist/hosted-extension-protocol.js.map +1 -0
  203. package/dist/hosted-extension-runtime.d.ts +30 -0
  204. package/dist/hosted-extension-runtime.d.ts.map +1 -0
  205. package/dist/hosted-extension-runtime.js +167 -0
  206. package/dist/hosted-extension-runtime.js.map +1 -0
  207. package/dist/hosted-extension-sandbox-source.d.ts +9 -0
  208. package/dist/hosted-extension-sandbox-source.d.ts.map +1 -0
  209. package/dist/hosted-extension-sandbox-source.js +95 -0
  210. package/dist/hosted-extension-sandbox-source.js.map +1 -0
  211. package/dist/hosted-extension-sandbox.d.ts +39 -0
  212. package/dist/hosted-extension-sandbox.d.ts.map +1 -0
  213. package/dist/hosted-extension-sandbox.js +418 -0
  214. package/dist/hosted-extension-sandbox.js.map +1 -0
  215. package/dist/hosted-project.d.ts +3 -0
  216. package/dist/hosted-project.d.ts.map +1 -0
  217. package/dist/hosted-project.js +19 -0
  218. package/dist/hosted-project.js.map +1 -0
  219. package/dist/hosted-promise-safety.d.ts +12 -0
  220. package/dist/hosted-promise-safety.d.ts.map +1 -0
  221. package/dist/hosted-promise-safety.js +63 -0
  222. package/dist/hosted-promise-safety.js.map +1 -0
  223. package/dist/index.d.ts +3 -1
  224. package/dist/index.d.ts.map +1 -1
  225. package/dist/index.js +2 -0
  226. package/dist/index.js.map +1 -1
  227. package/dist/intrinsic-array.d.ts +3 -0
  228. package/dist/intrinsic-array.d.ts.map +1 -0
  229. package/dist/intrinsic-array.js +14 -0
  230. package/dist/intrinsic-array.js.map +1 -0
  231. package/dist/journal-client.d.ts +3 -1
  232. package/dist/journal-client.d.ts.map +1 -1
  233. package/dist/journal-client.js +17 -2
  234. package/dist/journal-client.js.map +1 -1
  235. package/dist/journal-projection.d.ts +16 -0
  236. package/dist/journal-projection.d.ts.map +1 -0
  237. package/dist/journal-projection.js +108 -0
  238. package/dist/journal-projection.js.map +1 -0
  239. package/dist/json-value.d.ts +6 -1
  240. package/dist/json-value.d.ts.map +1 -1
  241. package/dist/json-value.js +155 -36
  242. package/dist/json-value.js.map +1 -1
  243. package/dist/llm-worker.d.ts +9 -0
  244. package/dist/llm-worker.d.ts.map +1 -1
  245. package/dist/llm-worker.js +16 -2
  246. package/dist/llm-worker.js.map +1 -1
  247. package/dist/local-agent.d.ts +1 -1
  248. package/dist/local-agent.d.ts.map +1 -1
  249. package/dist/local-agent.js +4 -3
  250. package/dist/local-agent.js.map +1 -1
  251. package/dist/named-gate-lowering.js +35 -5
  252. package/dist/named-gate-lowering.js.map +1 -1
  253. package/dist/named-gate-preflight.d.ts +27 -0
  254. package/dist/named-gate-preflight.d.ts.map +1 -0
  255. package/dist/named-gate-preflight.js +47 -0
  256. package/dist/named-gate-preflight.js.map +1 -0
  257. package/dist/named-gates.d.ts +1 -1
  258. package/dist/named-gates.d.ts.map +1 -1
  259. package/dist/named-gates.js +3 -0
  260. package/dist/named-gates.js.map +1 -1
  261. package/dist/observer-link.d.ts +7 -0
  262. package/dist/observer-link.d.ts.map +1 -1
  263. package/dist/observer-link.js +3 -1
  264. package/dist/observer-link.js.map +1 -1
  265. package/dist/plugin-store.d.ts +8 -2
  266. package/dist/plugin-store.d.ts.map +1 -1
  267. package/dist/plugin-store.js +233 -56
  268. package/dist/plugin-store.js.map +1 -1
  269. package/dist/preflight.d.ts.map +1 -1
  270. package/dist/preflight.js +7 -0
  271. package/dist/preflight.js.map +1 -1
  272. package/dist/protocol.d.ts +2 -0
  273. package/dist/protocol.d.ts.map +1 -1
  274. package/dist/redact.d.ts +42 -0
  275. package/dist/redact.d.ts.map +1 -1
  276. package/dist/redact.js +128 -0
  277. package/dist/redact.js.map +1 -1
  278. package/dist/run-projection.d.ts +83 -0
  279. package/dist/run-projection.d.ts.map +1 -0
  280. package/dist/run-projection.js +199 -0
  281. package/dist/run-projection.js.map +1 -0
  282. package/dist/semver-range.d.ts.map +1 -1
  283. package/dist/semver-range.js +27 -15
  284. package/dist/semver-range.js.map +1 -1
  285. package/dist/shell-word.d.ts +19 -0
  286. package/dist/shell-word.d.ts.map +1 -0
  287. package/dist/shell-word.js +23 -0
  288. package/dist/shell-word.js.map +1 -0
  289. package/dist/spec.d.ts +52 -3
  290. package/dist/spec.d.ts.map +1 -1
  291. package/dist/spec.js.map +1 -1
  292. package/dist/step-fields.d.ts +1 -1
  293. package/dist/step-fields.js +1 -1
  294. package/dist/step-fields.js.map +1 -1
  295. package/dist/steps-green.d.ts +27 -0
  296. package/dist/steps-green.d.ts.map +1 -0
  297. package/dist/steps-green.js +164 -0
  298. package/dist/steps-green.js.map +1 -0
  299. package/dist/validate.d.ts.map +1 -1
  300. package/dist/validate.js +39 -8
  301. package/dist/validate.js.map +1 -1
  302. package/dist/worker-lease.d.ts +8 -1
  303. package/dist/worker-lease.d.ts.map +1 -1
  304. package/dist/worker-lease.js +34 -4
  305. package/dist/worker-lease.js.map +1 -1
  306. package/dist/worker.d.ts +8 -0
  307. package/dist/worker.d.ts.map +1 -1
  308. package/dist/worker.js +17 -9
  309. package/dist/worker.js.map +1 -1
  310. package/package.json +3 -7
  311. package/src/agent-artifacts.ts +2 -10
  312. package/src/agent-cwd.ts +139 -0
  313. package/src/artifact-scan-policy.ts +51 -0
  314. package/src/authored-completion-record.ts +119 -0
  315. package/src/authored-completion.ts +203 -0
  316. package/src/authored-flow-error.ts +13 -1
  317. package/src/authored-flow-executor.ts +101 -59
  318. package/src/authored-human.ts +1 -4
  319. package/src/authored-node-entry.ts +4 -1
  320. package/src/authored-node-runner.ts +96 -22
  321. package/src/authored-root.ts +20 -2
  322. package/src/authored-step-output.ts +139 -42
  323. package/src/authored-verdict.ts +87 -0
  324. package/src/authored-worker-step.ts +60 -12
  325. package/src/bundle-extensions.ts +6 -5
  326. package/src/bundle.ts +52 -7
  327. package/src/canonical.ts +20 -6
  328. package/src/cli/check-worker-surface.ts +66 -0
  329. package/src/cli/check.ts +35 -4
  330. package/src/cli/cloud-format.ts +82 -0
  331. package/src/cli/cloud-live.ts +366 -0
  332. package/src/cli/cloud-read.ts +13 -282
  333. package/src/cli/cloud-refusal.ts +113 -0
  334. package/src/cli/cloud-status-view.ts +213 -0
  335. package/src/cli/direct-run.ts +19 -2
  336. package/src/cli/hn-monitor.ts +2 -1
  337. package/src/cli/local-agent-remedy.ts +160 -0
  338. package/src/cli/observer-session.ts +107 -0
  339. package/src/cli/run.ts +233 -28
  340. package/src/cli/status.ts +59 -3
  341. package/src/cli/step-evidence.ts +310 -0
  342. package/src/cli/step-failure.ts +57 -81
  343. package/src/cli-commands.ts +2 -0
  344. package/src/cli.ts +64 -44
  345. package/src/cloud-read.ts +25 -1
  346. package/src/cloud-run-record.ts +64 -0
  347. package/src/cloud-run.ts +5 -24
  348. package/src/communication/local.ts +2 -1
  349. package/src/communication/worker.ts +13 -5
  350. package/src/compile.ts +28 -6
  351. package/src/direct-input.ts +22 -1
  352. package/src/failure-kinds.ts +104 -2
  353. package/src/flow-extension-compat.ts +32 -7
  354. package/src/flow-extension-loader.ts +56 -21
  355. package/src/flow-requirements.ts +24 -9
  356. package/src/fs-descriptor.ts +127 -0
  357. package/src/gate-contract.ts +13 -1
  358. package/src/helper-preflight.ts +10 -3
  359. package/src/helper-reference.ts +130 -0
  360. package/src/hosted-base-snapshot.ts +351 -0
  361. package/src/hosted-extension-declarations.ts +387 -0
  362. package/src/hosted-extension-isolation.ts +457 -0
  363. package/src/hosted-extension-manifest.ts +249 -0
  364. package/src/hosted-extension-protocol.ts +262 -0
  365. package/src/hosted-extension-runtime.ts +266 -0
  366. package/src/hosted-extension-sandbox-source.ts +94 -0
  367. package/src/hosted-extension-sandbox.ts +489 -0
  368. package/src/hosted-project.ts +18 -0
  369. package/src/hosted-promise-safety.ts +68 -0
  370. package/src/index.ts +20 -0
  371. package/src/intrinsic-array.ts +14 -0
  372. package/src/journal-client.ts +19 -2
  373. package/src/journal-projection.ts +106 -0
  374. package/src/json-value.ts +184 -32
  375. package/src/llm-worker.ts +16 -2
  376. package/src/local-agent.ts +4 -2
  377. package/src/named-gate-lowering.ts +35 -5
  378. package/src/named-gate-preflight.ts +47 -0
  379. package/src/named-gates.ts +3 -0
  380. package/src/observer-link.ts +10 -1
  381. package/src/plugin-store.ts +323 -56
  382. package/src/preflight.ts +7 -0
  383. package/src/protocol.ts +2 -0
  384. package/src/redact.ts +111 -0
  385. package/src/run-projection.ts +247 -0
  386. package/src/semver-range.ts +39 -14
  387. package/src/shell-word.ts +24 -0
  388. package/src/spec.ts +54 -3
  389. package/src/step-fields.ts +1 -1
  390. package/src/steps-green.ts +168 -0
  391. package/src/validate.ts +35 -8
  392. package/src/worker-lease.ts +35 -5
  393. package/src/worker.ts +27 -11
package/dist/redact.d.ts CHANGED
@@ -13,4 +13,46 @@ export declare function redact(text: string, env?: NodeJS.ProcessEnv): string;
13
13
  * those two names and the token pattern is unchanged.
14
14
  */
15
15
  export declare function redactRelayError(message: string, env?: NodeJS.ProcessEnv): string;
16
+ /**
17
+ * Where a named-credential context may still be half-arrived at the end of
18
+ * `text`.
19
+ *
20
+ * `openSecretStart` covers secret env *values*; this covers the credential
21
+ * *names* whose patterns can span a line break: a header released on one poll
22
+ * leaves its late-arriving value unrecognizable on the next, and a credential
23
+ * JSON field whose value string is not yet closed leaks its first fragment.
24
+ * Returns the earliest index at which such a context is open — the point past
25
+ * which nothing may be released until more of the stream arrives — or
26
+ * `text.length` when none is open. Holding back is line-granular upstream, so
27
+ * a false positive delays one line one poll rather than dropping it.
28
+ */
29
+ export declare function openCredentialStart(text: string): number;
30
+ /**
31
+ * Does `text` end on a bare credential header — a named credential line whose
32
+ * value, if it has one, begins on the NEXT line?
33
+ *
34
+ * The stream releaser needs this apart from `openCredentialStart`: that check
35
+ * sees only a header at the very end of the consumed text, but the danger is
36
+ * wider — a released block that *ends* on `x-callback-token:` prints the
37
+ * header now and its value, arriving on the next line in some later poll,
38
+ * without the context `redact` needs. `redact` folds the header's newline into
39
+ * its own named-pattern match, so the releaser's block-prefix check cannot
40
+ * detect the dependency on its own. Trailing whitespace-only lines after the
41
+ * header count as part of it — the value is still to come.
42
+ */
43
+ export declare function endsWithOpenCredentialHeader(text: string): boolean;
44
+ /**
45
+ * Where a secret value may still be half-arrived at the end of `text`.
46
+ *
47
+ * A stream is redacted in pieces, and `redact` only replaces a secret it can
48
+ * see whole: releasing text up to a point where a secret has begun but not
49
+ * ended would print the first half of it and never match the second. This
50
+ * returns the smallest index `i` for which `text.slice(i)` is a proper prefix
51
+ * of some secret env value — the point past which nothing may be released
52
+ * until more of the stream arrives — or `text.length` when no value is open.
53
+ *
54
+ * Values only, not the token and header *shapes*: those are bounded by
55
+ * whitespace, so a reader that releases whole lines cannot cut one in half.
56
+ */
57
+ export declare function openSecretStart(text: string, env?: NodeJS.ProcessEnv): number;
16
58
  //# sourceMappingURL=redact.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"AA4EA;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAQjF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAM9F"}
1
+ {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"AA4EA;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAQjF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAM9F;AAwBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4BxD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIlE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAY1F"}
package/dist/redact.js CHANGED
@@ -101,4 +101,132 @@ export function redactRelayError(message, env = process.env) {
101
101
  }
102
102
  return redact(message, env);
103
103
  }
104
+ /**
105
+ * Credential heads whose value may continue past a line boundary.
106
+ *
107
+ * Every NAMED_VALUE pattern puts `\s` between the name and the value, and
108
+ * `\s` matches newlines: `authorization:` alone at the end of a poll is a
109
+ * complete, unredacted line, while the opaque value that lands on the next
110
+ * poll arrives with no recognizable credential context and would print
111
+ * verbatim. A trailing header — the colon plus only whitespace, or for
112
+ * `authorization` one scheme word — is therefore an open context. A header
113
+ * already followed by a non-space word has its value on that line and is not
114
+ * open. `Bearer` is the one bare scheme word the patterns treat as a name.
115
+ */
116
+ const OPEN_HEADER_PATTERNS = [
117
+ /\bauthorization:(?:\s+\w+)?\s*$/i,
118
+ /\bx-callback-token:\s*$/i,
119
+ /\bx-nightcto-evidence-token:\s*$/i,
120
+ /\bBearer\s*$/,
121
+ ];
122
+ /** A quoted JSON field name; the value side is inspected by the scanner. */
123
+ const JSON_FIELD_HEAD = /"([A-Za-z0-9_.\-]{1,64})"/g;
124
+ /**
125
+ * Where a named-credential context may still be half-arrived at the end of
126
+ * `text`.
127
+ *
128
+ * `openSecretStart` covers secret env *values*; this covers the credential
129
+ * *names* whose patterns can span a line break: a header released on one poll
130
+ * leaves its late-arriving value unrecognizable on the next, and a credential
131
+ * JSON field whose value string is not yet closed leaks its first fragment.
132
+ * Returns the earliest index at which such a context is open — the point past
133
+ * which nothing may be released until more of the stream arrives — or
134
+ * `text.length` when none is open. Holding back is line-granular upstream, so
135
+ * a false positive delays one line one poll rather than dropping it.
136
+ */
137
+ export function openCredentialStart(text) {
138
+ let hold = text.length;
139
+ for (const pattern of OPEN_HEADER_PATTERNS) {
140
+ const match = pattern.exec(text);
141
+ if (match && match.index < hold)
142
+ hold = match.index;
143
+ }
144
+ JSON_FIELD_HEAD.lastIndex = 0;
145
+ let head;
146
+ while ((head = JSON_FIELD_HEAD.exec(text)) !== null) {
147
+ if (!isCredentialName(head[1]))
148
+ continue;
149
+ let i = head.index + head[0].length;
150
+ while (i < text.length && /\s/.test(text[i]))
151
+ i++;
152
+ if (i >= text.length) {
153
+ hold = Math.min(hold, head.index);
154
+ continue;
155
+ }
156
+ if (text[i] !== ':')
157
+ continue;
158
+ i++;
159
+ while (i < text.length && /\s/.test(text[i]))
160
+ i++;
161
+ if (i >= text.length) {
162
+ hold = Math.min(hold, head.index);
163
+ continue;
164
+ }
165
+ if (text.startsWith('[redacted]', i) || text[i] !== '"')
166
+ continue;
167
+ i++;
168
+ let closed = false;
169
+ while (i < text.length) {
170
+ if (text[i] === '\\') {
171
+ i += 2;
172
+ continue;
173
+ }
174
+ if (text[i] === '"') {
175
+ closed = true;
176
+ break;
177
+ }
178
+ i++;
179
+ }
180
+ if (!closed)
181
+ hold = Math.min(hold, head.index);
182
+ }
183
+ return hold;
184
+ }
185
+ /**
186
+ * Does `text` end on a bare credential header — a named credential line whose
187
+ * value, if it has one, begins on the NEXT line?
188
+ *
189
+ * The stream releaser needs this apart from `openCredentialStart`: that check
190
+ * sees only a header at the very end of the consumed text, but the danger is
191
+ * wider — a released block that *ends* on `x-callback-token:` prints the
192
+ * header now and its value, arriving on the next line in some later poll,
193
+ * without the context `redact` needs. `redact` folds the header's newline into
194
+ * its own named-pattern match, so the releaser's block-prefix check cannot
195
+ * detect the dependency on its own. Trailing whitespace-only lines after the
196
+ * header count as part of it — the value is still to come.
197
+ */
198
+ export function endsWithOpenCredentialHeader(text) {
199
+ const stripped = text.replace(/\s+$/, '');
200
+ const lastLine = stripped.slice(stripped.lastIndexOf('\n') + 1);
201
+ return OPEN_HEADER_PATTERNS.some((pattern) => pattern.test(lastLine));
202
+ }
203
+ /**
204
+ * Where a secret value may still be half-arrived at the end of `text`.
205
+ *
206
+ * A stream is redacted in pieces, and `redact` only replaces a secret it can
207
+ * see whole: releasing text up to a point where a secret has begun but not
208
+ * ended would print the first half of it and never match the second. This
209
+ * returns the smallest index `i` for which `text.slice(i)` is a proper prefix
210
+ * of some secret env value — the point past which nothing may be released
211
+ * until more of the stream arrives — or `text.length` when no value is open.
212
+ *
213
+ * Values only, not the token and header *shapes*: those are bounded by
214
+ * whitespace, so a reader that releases whole lines cannot cut one in half.
215
+ */
216
+ export function openSecretStart(text, env = process.env) {
217
+ let start = text.length;
218
+ for (const [, value] of secretEnvValues(env)) {
219
+ // A proper prefix is shorter than the value, so it can only begin inside
220
+ // the last `value.length - 1` characters; the first character narrows the
221
+ // scan to the few positions worth comparing.
222
+ const first = Math.max(0, text.length - value.length + 1);
223
+ for (let at = text.indexOf(value[0], first); at >= 0 && at < start; at = text.indexOf(value[0], at + 1)) {
224
+ if (value.startsWith(text.slice(at))) {
225
+ start = at;
226
+ break;
227
+ }
228
+ }
229
+ }
230
+ return start;
231
+ }
104
232
  //# sourceMappingURL=redact.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"redact.js","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,yEAAyE;AACzE,oEAAoE;AACpE,EAAE;AACF,6EAA6E;AAC7E,4DAA4D;AAE5D,8EAA8E;AAC9E,MAAM,WAAW,GAAG,mDAAmD,CAAC;AAExE,0EAA0E;AAC1E,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B;;;;GAIG;AACH,MAAM,cAAc,GAAsB;IACxC,oDAAoD;IACpD,0BAA0B;IAC1B,yBAAyB;IACzB,2BAA2B;CAC5B,CAAC;AAEF;;;;GAIG;AACH,MAAM,oBAAoB,GAAsB;IAC9C,qDAAqD;IACrD,iCAAiC;IACjC,6CAA6C;IAC7C,sDAAsD;IACtD,iEAAiE;CAClE,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,iBAAiB,GAAG,2EAA2E,CAAC;AACtG,MAAM,eAAe,GAAG,6DAA6D,CAAC;AAEtF,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,eAAe;QAAE,OAAO,IAAI,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAC7F,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,IAAI,KAAK,SAAS,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1D,CAAC;AAED,2FAA2F;AAC3F,SAAS,eAAe,CAAC,GAAsB;IAC7C,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,iBAAiB;YAAE,SAAS;QAC5E,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,MAAyB,OAAO,CAAC,GAAG;IACvE,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,aAAa,IAAI,GAAG,CAAC,CAAC;IACpG,KAAK,MAAM,OAAO,IAAI,cAAc;QAAE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC/E,KAAK,MAAM,OAAO,IAAI,oBAAoB;QAAE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACvF,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,MAAc,EAAE,KAAa,EAAE,EAAE,CACxG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,aAAa,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChE,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,MAAyB,OAAO,CAAC,GAAG;IACpF,KAAK,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,MAAM;YAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"redact.js","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,yEAAyE;AACzE,oEAAoE;AACpE,EAAE;AACF,6EAA6E;AAC7E,4DAA4D;AAE5D,8EAA8E;AAC9E,MAAM,WAAW,GAAG,mDAAmD,CAAC;AAExE,0EAA0E;AAC1E,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B;;;;GAIG;AACH,MAAM,cAAc,GAAsB;IACxC,oDAAoD;IACpD,0BAA0B;IAC1B,yBAAyB;IACzB,2BAA2B;CAC5B,CAAC;AAEF;;;;GAIG;AACH,MAAM,oBAAoB,GAAsB;IAC9C,qDAAqD;IACrD,iCAAiC;IACjC,6CAA6C;IAC7C,sDAAsD;IACtD,iEAAiE;CAClE,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,iBAAiB,GAAG,2EAA2E,CAAC;AACtG,MAAM,eAAe,GAAG,6DAA6D,CAAC;AAEtF,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,eAAe;QAAE,OAAO,IAAI,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAC7F,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,IAAI,KAAK,SAAS,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1D,CAAC;AAED,2FAA2F;AAC3F,SAAS,eAAe,CAAC,GAAsB;IAC7C,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,iBAAiB;YAAE,SAAS;QAC5E,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,MAAyB,OAAO,CAAC,GAAG;IACvE,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,aAAa,IAAI,GAAG,CAAC,CAAC;IACpG,KAAK,MAAM,OAAO,IAAI,cAAc;QAAE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC/E,KAAK,MAAM,OAAO,IAAI,oBAAoB;QAAE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACvF,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,MAAc,EAAE,KAAa,EAAE,EAAE,CACxG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,aAAa,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChE,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,MAAyB,OAAO,CAAC,GAAG;IACpF,KAAK,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,MAAM;YAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,oBAAoB,GAAsB;IAC9C,kCAAkC;IAClC,0BAA0B;IAC1B,mCAAmC;IACnC,cAAc;CACf,CAAC;AAEF,4EAA4E;AAC5E,MAAM,eAAe,GAAG,4BAA4B,CAAC;AAErD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;IACvB,KAAK,MAAM,OAAO,IAAI,oBAAoB,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI;YAAE,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;IACtD,CAAC;IACD,eAAe,CAAC,SAAS,GAAG,CAAC,CAAC;IAC9B,IAAI,IAA4B,CAAC;IACjC,OAAO,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACpD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;YAAE,SAAS;QAC1C,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACpC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;YAAE,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACtE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,SAAS;QAC9B,CAAC,EAAE,CAAC;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;YAAE,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACtE,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,SAAS;QAClE,CAAC,EAAE,CAAC;QACJ,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAAC,CAAC,IAAI,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC3C,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAAC,MAAM,GAAG,IAAI,CAAC;gBAAC,MAAM;YAAC,CAAC;YAC9C,CAAC,EAAE,CAAC;QACN,CAAC;QACD,IAAI,CAAC,MAAM;YAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAAY;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,MAAyB,OAAO,CAAC,GAAG;IAChF,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IACxB,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,yEAAyE;QACzE,0EAA0E;QAC1E,6CAA6C;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1D,KAAK,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;YAC1G,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAAC,KAAK,GAAG,EAAE,CAAC;gBAAC,MAAM;YAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Project a run's lifecycle into its Relaycast channel, `wf-<runId>`, so the
3
+ * observer dashboard shows the flow: one message per step transition, each
4
+ * carrying the whole run snapshot under `metadata.relayflow` for a renderer
5
+ * that draws the step graph.
6
+ *
7
+ * A projection, never a source of truth (RFC-0001 settled decision 7): the
8
+ * journal is the record. Publication is serialized and fire-and-forget; a
9
+ * failure is reported once through `diagnostic` and never reaches the run.
10
+ */
11
+ import { type ProgressEvent } from './progress.js';
12
+ import type { StepType } from './spec.js';
13
+ export declare const RELAYFLOW_METADATA_VERSION = 1;
14
+ export type ProjectedStepState = 'pending' | 'running' | 'completed' | 'failed' | 'parked';
15
+ export interface ProjectedStep {
16
+ id: string;
17
+ type: StepType;
18
+ dependsOn: string[];
19
+ state: ProjectedStepState;
20
+ attempt?: number;
21
+ elapsedMs?: number;
22
+ completionReason?: string;
23
+ }
24
+ export interface RunSnapshot {
25
+ runId: string;
26
+ flow: string;
27
+ status: 'running' | 'completed' | 'failed' | 'parked' | 'canceled';
28
+ completionReason?: string;
29
+ steps: ProjectedStep[];
30
+ }
31
+ export interface DeclaredStep {
32
+ id: string;
33
+ type: StepType;
34
+ dependsOn?: string[];
35
+ }
36
+ export interface RunProjection {
37
+ readonly channel: string;
38
+ /** Apply a transition; `publish: false` folds replayed history into the snapshot silently. */
39
+ step(event: ProgressEvent & {
40
+ attempt?: number;
41
+ }, publish?: boolean): void;
42
+ /** Rebuild an epoch boundary from journal facts, never from old terminal state. */
43
+ epoch(states: Array<{
44
+ id: string;
45
+ state: ProjectedStepState;
46
+ attempt?: number;
47
+ completionReason?: string;
48
+ }>, publish?: boolean): void;
49
+ /** Close the run; only the first call publishes. */
50
+ finish(outcome: {
51
+ status: RunSnapshot['status'];
52
+ completionReason?: string;
53
+ }): void;
54
+ /** Resolves when every queued publication settled, or after `timeoutMs`. */
55
+ drain(timeoutMs: number): Promise<void>;
56
+ /** Stop publication and remove this session's publisher after its queue settles. */
57
+ close(timeoutMs: number): Promise<void>;
58
+ }
59
+ export type ProjectionFetch = (url: string, init: {
60
+ method: string;
61
+ headers: Record<string, string>;
62
+ body?: string;
63
+ signal?: AbortSignal;
64
+ }) => Promise<{
65
+ ok: boolean;
66
+ status: number;
67
+ json: () => Promise<unknown>;
68
+ }>;
69
+ export interface RunProjectionOptions {
70
+ workspaceKey: string;
71
+ /** Relaycast API base, default `https://cast.agentrelay.com`. */
72
+ baseUrl?: string;
73
+ fetch?: ProjectionFetch;
74
+ diagnostic: (message: string) => void;
75
+ }
76
+ export declare function runChannelName(runId: string): string;
77
+ export declare function createRunProjection(options: RunProjectionOptions, run: {
78
+ runId: string;
79
+ flow: string;
80
+ steps?: DeclaredStep[];
81
+ resumed?: boolean;
82
+ }): RunProjection;
83
+ //# sourceMappingURL=run-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-projection.d.ts","sourceRoot":"","sources":["../src/run-projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Project a run's lifecycle into its Relaycast channel, `wf-<runId>`, so the
3
+ * observer dashboard shows the flow: one message per step transition, each
4
+ * carrying the whole run snapshot under `metadata.relayflow` for a renderer
5
+ * that draws the step graph.
6
+ *
7
+ * A projection, never a source of truth (RFC-0001 settled decision 7): the
8
+ * journal is the record. Publication is serialized and fire-and-forget; a
9
+ * failure is reported once through `diagnostic` and never reaches the run.
10
+ */
11
+ import { randomUUID } from 'node:crypto';
12
+ import { renderProgress } from './progress.js';
13
+ export const RELAYFLOW_METADATA_VERSION = 1;
14
+ const DEFAULT_BASE_URL = 'https://cast.agentrelay.com';
15
+ const REQUEST_TIMEOUT_MS = 5_000;
16
+ export function runChannelName(runId) {
17
+ return `wf-${runId.toLowerCase()}`;
18
+ }
19
+ export function createRunProjection(options, run) {
20
+ const doFetch = options.fetch ?? globalThis.fetch;
21
+ const base = options.baseUrl ?? DEFAULT_BASE_URL;
22
+ const channel = runChannelName(run.runId);
23
+ const snapshot = {
24
+ runId: run.runId, flow: run.flow, status: 'running',
25
+ steps: (run.steps ?? []).map(step => ({
26
+ id: step.id, type: step.type, dependsOn: step.dependsOn ?? [], state: 'pending',
27
+ })),
28
+ };
29
+ const call = async (path, token, body, idempotencyKey, method) => {
30
+ const response = await doFetch(new URL(`/v1${path}`, base).toString(), {
31
+ method: method ?? (body === undefined ? 'GET' : 'POST'),
32
+ headers: {
33
+ Authorization: `Bearer ${token}`,
34
+ 'Content-Type': 'application/json',
35
+ ...(idempotencyKey === undefined ? {} : { 'Idempotency-Key': idempotencyKey }),
36
+ },
37
+ ...(body === undefined ? {} : { body: JSON.stringify(body) }),
38
+ signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
39
+ });
40
+ const parsed = await response.json().catch(() => undefined);
41
+ if (!response.ok) {
42
+ throw new RelaycastError(response.status, parsed?.error?.code ?? `http_${response.status}`);
43
+ }
44
+ return parsed?.data;
45
+ };
46
+ // A per-session publisher: agent names are unique per workspace, and a
47
+ // resumed run publishes from a fresh session into the same channel.
48
+ const publisherName = `flow-${randomUUID()}`;
49
+ let cleanup;
50
+ const removePublisher = (reportFailure = true) => cleanup ??= (async () => {
51
+ // The unique name is known before POST. A lost create response is not
52
+ // proof that creation failed: retire it even after an ambiguous outcome.
53
+ try {
54
+ await call(`/agents/${encodeURIComponent(publisherName)}`, options.workspaceKey, undefined, undefined, 'DELETE');
55
+ }
56
+ catch (error) {
57
+ if (error instanceof RelaycastError && error.status === 404)
58
+ return;
59
+ if (reportFailure)
60
+ options.diagnostic(`publisher cleanup for #${channel} failed; the run is unaffected`);
61
+ }
62
+ })();
63
+ const setup = (async () => {
64
+ const agent = await call('/agents', options.workspaceKey, {
65
+ name: publisherName, type: 'agent', auto_join_general: false,
66
+ });
67
+ if (typeof agent?.token !== 'string')
68
+ throw new RelaycastError(0, 'agent_token_missing');
69
+ const token = agent.token;
70
+ try {
71
+ await call('/channels', token, { name: channel, topic: `relayflow ${run.flow} · run ${run.runId}` });
72
+ }
73
+ catch (error) {
74
+ // Agent communication in the same run may have created it first.
75
+ if (!(error instanceof RelaycastError) || error.code !== 'channel_already_exists')
76
+ throw error;
77
+ await call(`/channels/${encodeURIComponent(channel)}/join`, token, {});
78
+ }
79
+ return token;
80
+ })().catch(async (error) => { await removePublisher(false); throw error; });
81
+ let queue = setup;
82
+ let failed = false;
83
+ let sequence = 0;
84
+ let closed = false;
85
+ const sessionId = randomUUID().slice(0, 8);
86
+ const publish = (event, text) => {
87
+ if (closed)
88
+ return;
89
+ const data = { relayflow: { version: RELAYFLOW_METADATA_VERSION, event, run: structuredClone(snapshot) } };
90
+ const key = `${sessionId}-${++sequence}`;
91
+ queue = queue.then(async () => {
92
+ if (failed)
93
+ return;
94
+ await call(`/channels/${encodeURIComponent(channel)}/messages`, await setup, { text, data }, key);
95
+ }).catch((error) => {
96
+ if (failed)
97
+ return;
98
+ failed = true;
99
+ options.diagnostic(`run projection to #${channel} failed (${errorMessage(error)}); `
100
+ + 'the observer will not show this run, which is unaffected');
101
+ });
102
+ };
103
+ const declared = snapshot.steps.length;
104
+ publish('run.started', `▶ ${run.flow} ${run.resumed ? 'resumed' : 'started'}`
105
+ + `${declared > 0 ? ` · ${declared} step${declared === 1 ? '' : 's'}` : ''} · run ${run.runId}`);
106
+ return {
107
+ channel,
108
+ epoch(states, shouldPublish = true) {
109
+ snapshot.status = 'running';
110
+ delete snapshot.completionReason;
111
+ for (const step of snapshot.steps) {
112
+ step.state = 'pending';
113
+ delete step.attempt;
114
+ delete step.elapsedMs;
115
+ delete step.completionReason;
116
+ const state = states.find(candidate => candidate.id === step.id);
117
+ if (state !== undefined)
118
+ Object.assign(step, state);
119
+ }
120
+ if (shouldPublish)
121
+ publish('run.started', `▶ ${run.flow} resumed · run ${run.runId}`);
122
+ },
123
+ step(event, shouldPublish = true) {
124
+ let step = snapshot.steps.find(candidate => candidate.id === event.stepId);
125
+ if (step === undefined) {
126
+ step = { id: event.stepId, type: event.stepType, dependsOn: [], state: 'pending' };
127
+ snapshot.steps.push(step);
128
+ }
129
+ step.state = STATE[event.type];
130
+ if (event.attempt !== undefined)
131
+ step.attempt = event.attempt;
132
+ if (event.type === 'step.started') {
133
+ delete step.elapsedMs;
134
+ delete step.completionReason;
135
+ }
136
+ else {
137
+ step.elapsedMs = Math.max(0, Math.round(event.elapsedMs));
138
+ }
139
+ if (event.completionReason !== undefined)
140
+ step.completionReason = event.completionReason;
141
+ if (!shouldPublish || event.type === 'step.running')
142
+ return;
143
+ publish(event.type, event.type === 'step.started'
144
+ ? `○ ${step.id} (${step.type}) started${step.attempt !== undefined && step.attempt > 1 ? ` · attempt ${step.attempt}` : ''}`
145
+ : renderProgress([event])[0]);
146
+ },
147
+ finish(outcome) {
148
+ if (snapshot.status !== 'running')
149
+ return;
150
+ snapshot.status = outcome.status;
151
+ if (outcome.completionReason !== undefined)
152
+ snapshot.completionReason = outcome.completionReason;
153
+ const icon = outcome.status === 'completed' ? '■' : outcome.status === 'parked' ? '⏸' : '✗';
154
+ publish('run.completed', `${icon} ${run.flow} ${outcome.status}`
155
+ + `${outcome.completionReason === undefined ? '' : ` · completionReason: ${outcome.completionReason}`}`);
156
+ },
157
+ async drain(timeoutMs) {
158
+ let timer;
159
+ await Promise.race([
160
+ queue,
161
+ new Promise(resolve => { timer = setTimeout(resolve, timeoutMs); timer.unref?.(); }),
162
+ ]);
163
+ clearTimeout(timer);
164
+ },
165
+ async close(timeoutMs) {
166
+ if (!closed) {
167
+ closed = true;
168
+ queue = queue.then(() => removePublisher(), () => removePublisher());
169
+ }
170
+ let timer;
171
+ try {
172
+ await Promise.race([queue, new Promise(resolve => { timer = setTimeout(resolve, timeoutMs); timer.unref?.(); })]);
173
+ }
174
+ finally {
175
+ clearTimeout(timer);
176
+ }
177
+ },
178
+ };
179
+ }
180
+ const STATE = {
181
+ 'step.started': 'running',
182
+ 'step.running': 'running',
183
+ 'step.completed': 'completed',
184
+ 'step.failed': 'failed',
185
+ 'step.parked': 'parked',
186
+ };
187
+ class RelaycastError extends Error {
188
+ status;
189
+ code;
190
+ constructor(status, code) {
191
+ super(status === 0 ? code : `HTTP ${status} ${code}`);
192
+ this.status = status;
193
+ this.code = code;
194
+ }
195
+ }
196
+ function errorMessage(error) {
197
+ return error instanceof Error ? error.message : String(error);
198
+ }
199
+ //# sourceMappingURL=run-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-projection.js","sourceRoot":"","sources":["../src/run-projection.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"semver-range.d.ts","sourceRoot":"","sources":["../src/semver-range.ts"],"names":[],"mappings":"AAYA,UAAU,MAAM;IAAG,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE;AAE9F,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM9D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD;AAgCD,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAgBtE"}
1
+ {"version":3,"file":"semver-range.d.ts","sourceRoot":"","sources":["../src/semver-range.ts"],"names":[],"mappings":"AAgCA,UAAU,MAAM;IAAG,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE;AAE9F,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ9D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD;AAgCD,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAmBtE"}
@@ -9,17 +9,26 @@
9
9
  */
10
10
  const VERSION = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/;
11
11
  const RANGE = /^(\*|(?:[\^~]|>=)?\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?: <\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)?)$/;
12
+ const MATH_MAX = Math.max;
13
+ const NUMBER = Number;
14
+ const NUMBER_IS_SAFE_INTEGER = Number.isSafeInteger;
15
+ const REGEXP_EXEC = Function.prototype.call.bind(RegExp.prototype.exec);
16
+ const REGEXP_TEST = Function.prototype.call.bind(RegExp.prototype.test);
17
+ const STRING_SLICE = Function.prototype.call.bind(String.prototype.slice);
18
+ const STRING_SPLIT = Function.prototype.call.bind(String.prototype.split);
12
19
  export function parseVersion(value) {
13
- const m = VERSION.exec(value);
20
+ const m = REGEXP_EXEC(VERSION, value);
14
21
  if (!m)
15
22
  return undefined;
16
- const triple = [Number(m[1]), Number(m[2]), Number(m[3])];
17
- if (triple.some(n => !Number.isSafeInteger(n)))
18
- return undefined;
23
+ const triple = [NUMBER(m[1]), NUMBER(m[2]), NUMBER(m[3])];
24
+ for (let index = 0; index < triple.length; index += 1) {
25
+ if (!NUMBER_IS_SAFE_INTEGER(triple[index]))
26
+ return undefined;
27
+ }
19
28
  return m[4] === undefined ? { triple } : { triple, pre: m[4] };
20
29
  }
21
30
  export function isVersionRange(value) {
22
- return RANGE.test(value);
31
+ return REGEXP_TEST(RANGE, value);
23
32
  }
24
33
  function compare(a, b) {
25
34
  for (let i = 0; i < 3; i++)
@@ -34,9 +43,9 @@ function compare(a, b) {
34
43
  return comparePrerelease(a.pre, b.pre);
35
44
  }
36
45
  function comparePrerelease(a, b) {
37
- const as = a.split('.');
38
- const bs = b.split('.');
39
- const n = Math.max(as.length, bs.length);
46
+ const as = STRING_SPLIT(a, '.');
47
+ const bs = STRING_SPLIT(b, '.');
48
+ const n = MATH_MAX(as.length, bs.length);
40
49
  for (let i = 0; i < n; i++) {
41
50
  const left = as[i];
42
51
  const right = bs[i];
@@ -44,8 +53,8 @@ function comparePrerelease(a, b) {
44
53
  return -1;
45
54
  if (right === undefined)
46
55
  return 1;
47
- const leftNum = /^\d+$/.test(left) ? Number(left) : undefined;
48
- const rightNum = /^\d+$/.test(right) ? Number(right) : undefined;
56
+ const leftNum = REGEXP_TEST(/^\d+$/, left) ? NUMBER(left) : undefined;
57
+ const rightNum = REGEXP_TEST(/^\d+$/, right) ? NUMBER(right) : undefined;
49
58
  if (leftNum !== undefined && rightNum !== undefined) {
50
59
  if (leftNum !== rightNum)
51
60
  return leftNum - rightNum;
@@ -67,18 +76,21 @@ export function satisfiesRange(version, range) {
67
76
  return false;
68
77
  if (range === '*')
69
78
  return true;
70
- const [lowerText, upperText] = range.split(' ');
71
- const operator = /^[\^~]|^>=/.exec(lowerText)?.[0] ?? '';
72
- const lower = parseVersion(lowerText.slice(operator.length));
79
+ const parts = STRING_SPLIT(range, ' ');
80
+ const lowerText = parts[0];
81
+ const upperText = parts[1];
82
+ const operator = REGEXP_EXEC(/^[\^~]|^>=/, lowerText)?.[0] ?? '';
83
+ const lower = parseVersion(STRING_SLICE(lowerText, operator.length));
73
84
  if (compare(v, lower) < 0)
74
85
  return false;
75
86
  if (operator === '')
76
87
  return compare(v, lower) === 0;
77
88
  let upper;
78
89
  if (upperText !== undefined)
79
- upper = parseVersion(upperText.slice(1));
90
+ upper = parseVersion(STRING_SLICE(upperText, 1));
80
91
  else if (operator === '^') {
81
- const [major, minor] = lower.triple;
92
+ const major = lower.triple[0];
93
+ const minor = lower.triple[1];
82
94
  upper = major > 0 ? { triple: [major + 1, 0, 0] } : minor > 0 ? { triple: [0, minor + 1, 0] } : { triple: [0, 0, lower.triple[2] + 1] };
83
95
  }
84
96
  else if (operator === '~')
@@ -1 +1 @@
1
- {"version":3,"file":"semver-range.js","sourceRoot":"","sources":["../src/semver-range.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"semver-range.js","sourceRoot":"","sources":["../src/semver-range.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * POSIX shell quoting for the invocations diagnostics tell people to run.
3
+ *
4
+ * Dependency-free on purpose: every module that renders a command reaches for
5
+ * this, and two of them (`cli/run.ts` and `authored-human.ts`) already import
6
+ * each other's neighbours. A copy per call site is how one of them ends up
7
+ * emitting a path with a space in it unquoted.
8
+ */
9
+ /** `value` as a single word, quoted only when it would not survive a shell. */
10
+ export declare function shellWord(value: string): string;
11
+ /**
12
+ * `value` as a single-quoted word, always.
13
+ *
14
+ * Used where the rendered argument is arbitrary author data — a flow path or a
15
+ * JSON `--input` — and the quotes are worth keeping even when unnecessary, so
16
+ * the command reads the same for `a.flow.ts` and for `my flows/a.flow.ts`.
17
+ */
18
+ export declare function shellQuote(value: string): string;
19
+ //# sourceMappingURL=shell-word.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-word.d.ts","sourceRoot":"","sources":["../src/shell-word.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}