@farmslot/protocol 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/LICENSE +21 -0
  3. package/README.md +47 -45
  4. package/dist/{agent-roles.d.ts → agents/roles.d.ts} +2 -2
  5. package/dist/{agent-roles.d.ts.map → agents/roles.d.ts.map} +1 -1
  6. package/dist/{agent-roles.js → agents/roles.js} +2 -2
  7. package/dist/{agent-roles.js.map → agents/roles.js.map} +1 -1
  8. package/dist/{types → contracts}/agents.d.ts +22 -0
  9. package/dist/contracts/agents.d.ts.map +1 -0
  10. package/dist/contracts/agents.js.map +1 -0
  11. package/dist/contracts/analytics.d.ts +161 -0
  12. package/dist/contracts/analytics.d.ts.map +1 -0
  13. package/dist/contracts/analytics.js +27 -0
  14. package/dist/contracts/analytics.js.map +1 -0
  15. package/dist/{types → contracts}/backlog.d.ts +28 -0
  16. package/dist/contracts/backlog.d.ts.map +1 -0
  17. package/dist/contracts/backlog.js.map +1 -0
  18. package/dist/contracts/chat.d.ts.map +1 -0
  19. package/dist/contracts/chat.js.map +1 -0
  20. package/dist/contracts/common.d.ts.map +1 -0
  21. package/dist/{types → contracts}/common.js.map +1 -1
  22. package/dist/{types → contracts}/config.d.ts +64 -0
  23. package/dist/contracts/config.d.ts.map +1 -0
  24. package/dist/contracts/config.js +15 -0
  25. package/dist/contracts/config.js.map +1 -0
  26. package/dist/{types → contracts}/dispatch.d.ts +11 -0
  27. package/dist/contracts/dispatch.d.ts.map +1 -0
  28. package/dist/{types → contracts}/dispatch.js.map +1 -1
  29. package/dist/{types → contracts}/evals.d.ts +1 -1
  30. package/dist/contracts/evals.d.ts.map +1 -0
  31. package/dist/contracts/evals.js.map +1 -0
  32. package/dist/contracts/family.d.ts.map +1 -0
  33. package/dist/contracts/family.js.map +1 -0
  34. package/dist/{types → contracts}/index.d.ts +5 -0
  35. package/dist/contracts/index.d.ts.map +1 -0
  36. package/dist/{types → contracts}/index.js +5 -0
  37. package/dist/contracts/index.js.map +1 -0
  38. package/dist/{types → contracts}/recipes.d.ts +1 -1
  39. package/dist/contracts/recipes.d.ts.map +1 -0
  40. package/dist/{types → contracts}/recipes.js +1 -1
  41. package/dist/contracts/recipes.js.map +1 -0
  42. package/dist/contracts/resources.d.ts.map +1 -0
  43. package/dist/contracts/resources.js.map +1 -0
  44. package/dist/contracts/reviews.d.ts.map +1 -0
  45. package/dist/contracts/reviews.js.map +1 -0
  46. package/dist/contracts/roadmap.d.ts +45 -0
  47. package/dist/contracts/roadmap.d.ts.map +1 -0
  48. package/dist/contracts/roadmap.js +10 -0
  49. package/dist/contracts/roadmap.js.map +1 -0
  50. package/dist/contracts/run-bundles.d.ts +72 -0
  51. package/dist/contracts/run-bundles.d.ts.map +1 -0
  52. package/dist/contracts/run-bundles.js +24 -0
  53. package/dist/contracts/run-bundles.js.map +1 -0
  54. package/dist/{types → contracts}/runs.d.ts +245 -8
  55. package/dist/contracts/runs.d.ts.map +1 -0
  56. package/dist/{types → contracts}/runs.js +54 -2
  57. package/dist/contracts/runs.js.map +1 -0
  58. package/dist/{types → contracts}/slots.d.ts +20 -0
  59. package/dist/contracts/slots.d.ts.map +1 -0
  60. package/dist/contracts/slots.js +12 -0
  61. package/dist/contracts/slots.js.map +1 -0
  62. package/dist/contracts/task.d.ts.map +1 -0
  63. package/dist/{methods → contracts}/task.js.map +1 -1
  64. package/dist/{types → contracts}/terminal.d.ts +1 -1
  65. package/dist/contracts/terminal.d.ts.map +1 -0
  66. package/dist/{methods → contracts}/terminal.js.map +1 -1
  67. package/dist/contracts/validation-plan.d.ts +19 -0
  68. package/dist/contracts/validation-plan.d.ts.map +1 -0
  69. package/dist/contracts/validation-plan.js +2 -0
  70. package/dist/contracts/validation-plan.js.map +1 -0
  71. package/dist/contracts/work-graph.d.ts +182 -0
  72. package/dist/contracts/work-graph.d.ts.map +1 -0
  73. package/dist/contracts/work-graph.js +2 -0
  74. package/dist/contracts/work-graph.js.map +1 -0
  75. package/dist/contracts/workspace.d.ts.map +1 -0
  76. package/dist/{methods → contracts}/workspace.js.map +1 -1
  77. package/dist/index.d.ts +18 -12
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +18 -12
  80. package/dist/index.js.map +1 -1
  81. package/dist/{github-ref.d.ts → integrations/github-ref.d.ts} +1 -1
  82. package/dist/integrations/github-ref.d.ts.map +1 -0
  83. package/dist/integrations/github-ref.js.map +1 -0
  84. package/dist/node/capture-helper-path.d.ts +3 -0
  85. package/dist/node/capture-helper-path.d.ts.map +1 -0
  86. package/dist/node/capture-helper-path.js +77 -0
  87. package/dist/node/capture-helper-path.js.map +1 -0
  88. package/dist/pairing/index.d.ts +2 -0
  89. package/dist/pairing/index.d.ts.map +1 -0
  90. package/dist/pairing/index.js +2 -0
  91. package/dist/pairing/index.js.map +1 -0
  92. package/dist/pairing/tailscale.d.ts +4 -0
  93. package/dist/pairing/tailscale.d.ts.map +1 -0
  94. package/dist/pairing/tailscale.js +27 -0
  95. package/dist/pairing/tailscale.js.map +1 -0
  96. package/dist/recipe/artifact.d.ts +8 -0
  97. package/dist/recipe/artifact.d.ts.map +1 -0
  98. package/dist/recipe/artifact.js +161 -0
  99. package/dist/recipe/artifact.js.map +1 -0
  100. package/dist/{recipe-compat.d.ts → recipe/common.d.ts} +33 -21
  101. package/dist/recipe/common.d.ts.map +1 -0
  102. package/dist/recipe/common.js +86 -0
  103. package/dist/recipe/common.js.map +1 -0
  104. package/dist/recipe/document.d.ts +4 -0
  105. package/dist/recipe/document.d.ts.map +1 -0
  106. package/dist/recipe/document.js +53 -0
  107. package/dist/recipe/document.js.map +1 -0
  108. package/dist/recipe/index.d.ts +6 -0
  109. package/dist/recipe/index.d.ts.map +1 -0
  110. package/dist/recipe/index.js +6 -0
  111. package/dist/recipe/index.js.map +1 -0
  112. package/dist/recipe/manifest.d.ts +5 -0
  113. package/dist/recipe/manifest.d.ts.map +1 -0
  114. package/dist/recipe/manifest.js +248 -0
  115. package/dist/recipe/manifest.js.map +1 -0
  116. package/dist/recipe/workflow.d.ts +29 -0
  117. package/dist/recipe/workflow.d.ts.map +1 -0
  118. package/dist/{recipe-compat.js → recipe/workflow.js} +68 -452
  119. package/dist/recipe/workflow.js.map +1 -0
  120. package/dist/{step-io.d.ts → recipes/step-io.d.ts} +28 -2
  121. package/dist/recipes/step-io.d.ts.map +1 -0
  122. package/dist/{step-io.js → recipes/step-io.js} +19 -0
  123. package/dist/recipes/step-io.js.map +1 -0
  124. package/dist/{methods → rpc}/auth.d.ts +11 -0
  125. package/dist/rpc/auth.d.ts.map +1 -0
  126. package/dist/rpc/auth.js.map +1 -0
  127. package/dist/{methods → rpc}/backlog.d.ts +3 -2
  128. package/dist/rpc/backlog.d.ts.map +1 -0
  129. package/dist/rpc/backlog.js.map +1 -0
  130. package/dist/{methods → rpc}/chat.d.ts +12 -12
  131. package/dist/rpc/chat.d.ts.map +1 -0
  132. package/dist/rpc/chat.js.map +1 -0
  133. package/dist/{methods → rpc}/config.d.ts +18 -1
  134. package/dist/rpc/config.d.ts.map +1 -0
  135. package/dist/rpc/config.js.map +1 -0
  136. package/dist/rpc/copilot.d.ts.map +1 -0
  137. package/dist/rpc/copilot.js.map +1 -0
  138. package/dist/{methods → rpc}/decisions.d.ts +1 -1
  139. package/dist/rpc/decisions.d.ts.map +1 -0
  140. package/dist/{methods → rpc}/decisions.js.map +1 -1
  141. package/dist/{methods → rpc}/diagnostics.d.ts +1 -1
  142. package/dist/rpc/diagnostics.d.ts.map +1 -0
  143. package/dist/{methods → rpc}/diagnostics.js.map +1 -1
  144. package/dist/{methods → rpc}/dispatch.d.ts +25 -12
  145. package/dist/rpc/dispatch.d.ts.map +1 -0
  146. package/dist/rpc/dispatch.js.map +1 -0
  147. package/dist/{methods → rpc}/eval.d.ts +2 -2
  148. package/dist/rpc/eval.d.ts.map +1 -0
  149. package/dist/rpc/eval.js.map +1 -0
  150. package/dist/{methods → rpc}/fleet.d.ts +1 -1
  151. package/dist/rpc/fleet.d.ts.map +1 -0
  152. package/dist/rpc/fleet.js.map +1 -0
  153. package/dist/{methods → rpc}/fs.d.ts +1 -1
  154. package/dist/rpc/fs.d.ts.map +1 -0
  155. package/dist/{methods → rpc}/fs.js.map +1 -1
  156. package/dist/rpc/gateway.d.ts +87 -0
  157. package/dist/rpc/gateway.d.ts.map +1 -0
  158. package/dist/rpc/gateway.js +7 -0
  159. package/dist/rpc/gateway.js.map +1 -0
  160. package/dist/{methods → rpc}/git.d.ts +2 -2
  161. package/dist/rpc/git.d.ts.map +1 -0
  162. package/dist/{methods → rpc}/git.js.map +1 -1
  163. package/dist/{methods → rpc}/index.d.ts +3 -0
  164. package/dist/rpc/index.d.ts.map +1 -0
  165. package/dist/{methods → rpc}/index.js +4 -1
  166. package/dist/rpc/index.js.map +1 -0
  167. package/dist/{methods → rpc}/intelligence.d.ts +3 -3
  168. package/dist/rpc/intelligence.d.ts.map +1 -0
  169. package/dist/rpc/intelligence.js.map +1 -0
  170. package/dist/rpc/nodes.d.ts.map +1 -0
  171. package/dist/{methods → rpc}/nodes.js.map +1 -1
  172. package/dist/{methods → rpc}/pr.d.ts +2 -2
  173. package/dist/{methods → rpc}/pr.d.ts.map +1 -1
  174. package/dist/{methods → rpc}/pr.js.map +1 -1
  175. package/dist/{methods → rpc}/registry.d.ts +33 -0
  176. package/dist/{methods → rpc}/registry.d.ts.map +1 -1
  177. package/dist/{methods → rpc}/registry.js +37 -0
  178. package/dist/rpc/registry.js.map +1 -0
  179. package/dist/{methods → rpc}/resources.d.ts +44 -5
  180. package/dist/rpc/resources.d.ts.map +1 -0
  181. package/dist/{methods → rpc}/resources.js +2 -0
  182. package/dist/rpc/resources.js.map +1 -0
  183. package/dist/rpc/roadmap.d.ts +84 -0
  184. package/dist/rpc/roadmap.d.ts.map +1 -0
  185. package/dist/rpc/roadmap.js +10 -0
  186. package/dist/rpc/roadmap.js.map +1 -0
  187. package/dist/{methods → rpc}/run.d.ts +96 -22
  188. package/dist/rpc/run.d.ts.map +1 -0
  189. package/dist/{methods → rpc}/run.js +4 -0
  190. package/dist/rpc/run.js.map +1 -0
  191. package/dist/{methods → rpc}/search.d.ts +1 -1
  192. package/dist/rpc/search.d.ts.map +1 -0
  193. package/dist/{methods → rpc}/search.js.map +1 -1
  194. package/dist/{methods → rpc}/slot.d.ts +90 -5
  195. package/dist/rpc/slot.d.ts.map +1 -0
  196. package/dist/{methods → rpc}/slot.js +1 -0
  197. package/dist/rpc/slot.js.map +1 -0
  198. package/dist/{methods → rpc}/task.d.ts +2 -2
  199. package/dist/rpc/task.d.ts.map +1 -0
  200. package/dist/{types → rpc}/task.js.map +1 -1
  201. package/dist/{methods → rpc}/terminal.d.ts +1 -1
  202. package/dist/rpc/terminal.d.ts.map +1 -0
  203. package/dist/{types → rpc}/terminal.js.map +1 -1
  204. package/dist/{methods → rpc}/tmux.d.ts +10 -0
  205. package/dist/rpc/tmux.d.ts.map +1 -0
  206. package/dist/{methods → rpc}/tmux.js.map +1 -1
  207. package/dist/rpc/work-graph.d.ts +85 -0
  208. package/dist/rpc/work-graph.d.ts.map +1 -0
  209. package/dist/rpc/work-graph.js +16 -0
  210. package/dist/rpc/work-graph.js.map +1 -0
  211. package/dist/{methods → rpc}/workspace.d.ts +1 -1
  212. package/dist/rpc/workspace.d.ts.map +1 -0
  213. package/dist/{types → rpc}/workspace.js.map +1 -1
  214. package/dist/runs/evidence-summary.d.ts +14 -0
  215. package/dist/runs/evidence-summary.d.ts.map +1 -0
  216. package/dist/runs/evidence-summary.js +157 -0
  217. package/dist/runs/evidence-summary.js.map +1 -0
  218. package/dist/runs/family-iteration-ledger.d.ts +35 -0
  219. package/dist/runs/family-iteration-ledger.d.ts.map +1 -0
  220. package/dist/runs/family-iteration-ledger.js +217 -0
  221. package/dist/runs/family-iteration-ledger.js.map +1 -0
  222. package/dist/{run-family-readiness.d.ts → runs/family-readiness.d.ts} +3 -3
  223. package/dist/runs/family-readiness.d.ts.map +1 -0
  224. package/dist/{run-family-readiness.js → runs/family-readiness.js} +3 -4
  225. package/dist/runs/family-readiness.js.map +1 -0
  226. package/dist/runs/portable-bundle.d.ts +11 -0
  227. package/dist/runs/portable-bundle.d.ts.map +1 -0
  228. package/dist/runs/portable-bundle.js +103 -0
  229. package/dist/runs/portable-bundle.js.map +1 -0
  230. package/dist/runs/run-mode.d.ts +27 -0
  231. package/dist/runs/run-mode.d.ts.map +1 -0
  232. package/dist/runs/run-mode.js +53 -0
  233. package/dist/runs/run-mode.js.map +1 -0
  234. package/dist/slots/dispatch-scoring.d.ts +4 -0
  235. package/dist/slots/dispatch-scoring.d.ts.map +1 -0
  236. package/dist/slots/dispatch-scoring.js +6 -0
  237. package/dist/slots/dispatch-scoring.js.map +1 -0
  238. package/dist/slots/tracking-branch.d.ts +30 -0
  239. package/dist/slots/tracking-branch.d.ts.map +1 -0
  240. package/dist/slots/tracking-branch.js +41 -0
  241. package/dist/slots/tracking-branch.js.map +1 -0
  242. package/dist/{surfaces.d.ts → surfaces/command-center.d.ts} +2 -2
  243. package/dist/surfaces/command-center.d.ts.map +1 -0
  244. package/dist/{surfaces.js → surfaces/command-center.js} +8 -2
  245. package/dist/surfaces/command-center.js.map +1 -0
  246. package/dist/{events.d.ts → transport/events.d.ts} +22 -4
  247. package/dist/transport/events.d.ts.map +1 -0
  248. package/dist/{events.js → transport/events.js} +8 -0
  249. package/dist/transport/events.js.map +1 -0
  250. package/dist/transport/frames.d.ts.map +1 -0
  251. package/dist/transport/frames.js.map +1 -0
  252. package/dist/transport/signal.d.ts +47 -0
  253. package/dist/transport/signal.d.ts.map +1 -0
  254. package/dist/transport/signal.js.map +1 -0
  255. package/dist/version.d.ts +1 -1
  256. package/dist/version.js +1 -1
  257. package/dist/{tmux-worker-watchlist.d.ts → workers/tmux-worker-watchlist.d.ts} +1 -1
  258. package/dist/workers/tmux-worker-watchlist.d.ts.map +1 -0
  259. package/dist/workers/tmux-worker-watchlist.js.map +1 -0
  260. package/package.json +317 -55
  261. package/dist/events.d.ts.map +0 -1
  262. package/dist/events.js.map +0 -1
  263. package/dist/frames.d.ts.map +0 -1
  264. package/dist/frames.js.map +0 -1
  265. package/dist/github-ref.d.ts.map +0 -1
  266. package/dist/github-ref.js.map +0 -1
  267. package/dist/methods/auth.d.ts.map +0 -1
  268. package/dist/methods/auth.js.map +0 -1
  269. package/dist/methods/backlog.d.ts.map +0 -1
  270. package/dist/methods/backlog.js.map +0 -1
  271. package/dist/methods/chat.d.ts.map +0 -1
  272. package/dist/methods/chat.js.map +0 -1
  273. package/dist/methods/config.d.ts.map +0 -1
  274. package/dist/methods/config.js.map +0 -1
  275. package/dist/methods/copilot.d.ts.map +0 -1
  276. package/dist/methods/copilot.js.map +0 -1
  277. package/dist/methods/decisions.d.ts.map +0 -1
  278. package/dist/methods/diagnostics.d.ts.map +0 -1
  279. package/dist/methods/dispatch.d.ts.map +0 -1
  280. package/dist/methods/dispatch.js.map +0 -1
  281. package/dist/methods/eval.d.ts.map +0 -1
  282. package/dist/methods/eval.js.map +0 -1
  283. package/dist/methods/fleet.d.ts.map +0 -1
  284. package/dist/methods/fleet.js.map +0 -1
  285. package/dist/methods/fs.d.ts.map +0 -1
  286. package/dist/methods/git.d.ts.map +0 -1
  287. package/dist/methods/index.d.ts.map +0 -1
  288. package/dist/methods/index.js.map +0 -1
  289. package/dist/methods/intelligence.d.ts.map +0 -1
  290. package/dist/methods/intelligence.js.map +0 -1
  291. package/dist/methods/nodes.d.ts.map +0 -1
  292. package/dist/methods/registry.js.map +0 -1
  293. package/dist/methods/resources.d.ts.map +0 -1
  294. package/dist/methods/resources.js.map +0 -1
  295. package/dist/methods/run.d.ts.map +0 -1
  296. package/dist/methods/run.js.map +0 -1
  297. package/dist/methods/search.d.ts.map +0 -1
  298. package/dist/methods/slot.d.ts.map +0 -1
  299. package/dist/methods/slot.js.map +0 -1
  300. package/dist/methods/task.d.ts.map +0 -1
  301. package/dist/methods/terminal.d.ts.map +0 -1
  302. package/dist/methods/tmux.d.ts.map +0 -1
  303. package/dist/methods/workspace.d.ts.map +0 -1
  304. package/dist/methods.d.ts +0 -2
  305. package/dist/methods.d.ts.map +0 -1
  306. package/dist/methods.js +0 -3
  307. package/dist/methods.js.map +0 -1
  308. package/dist/recipe-compat.d.ts.map +0 -1
  309. package/dist/recipe-compat.js.map +0 -1
  310. package/dist/run-family-readiness.d.ts.map +0 -1
  311. package/dist/run-family-readiness.js.map +0 -1
  312. package/dist/signal.d.ts +0 -14
  313. package/dist/signal.d.ts.map +0 -1
  314. package/dist/signal.js.map +0 -1
  315. package/dist/step-io.d.ts.map +0 -1
  316. package/dist/step-io.js.map +0 -1
  317. package/dist/surfaces.d.ts.map +0 -1
  318. package/dist/surfaces.js.map +0 -1
  319. package/dist/tmux-worker-watchlist.d.ts.map +0 -1
  320. package/dist/tmux-worker-watchlist.js.map +0 -1
  321. package/dist/types/agents.d.ts.map +0 -1
  322. package/dist/types/agents.js.map +0 -1
  323. package/dist/types/backlog.d.ts.map +0 -1
  324. package/dist/types/backlog.js.map +0 -1
  325. package/dist/types/chat.d.ts.map +0 -1
  326. package/dist/types/chat.js.map +0 -1
  327. package/dist/types/common.d.ts.map +0 -1
  328. package/dist/types/config.d.ts.map +0 -1
  329. package/dist/types/config.js +0 -2
  330. package/dist/types/config.js.map +0 -1
  331. package/dist/types/dispatch.d.ts.map +0 -1
  332. package/dist/types/evals.d.ts.map +0 -1
  333. package/dist/types/evals.js.map +0 -1
  334. package/dist/types/family.d.ts.map +0 -1
  335. package/dist/types/family.js.map +0 -1
  336. package/dist/types/index.d.ts.map +0 -1
  337. package/dist/types/index.js.map +0 -1
  338. package/dist/types/recipes.d.ts.map +0 -1
  339. package/dist/types/recipes.js.map +0 -1
  340. package/dist/types/resources.d.ts.map +0 -1
  341. package/dist/types/resources.js.map +0 -1
  342. package/dist/types/reviews.d.ts.map +0 -1
  343. package/dist/types/reviews.js.map +0 -1
  344. package/dist/types/runs.d.ts.map +0 -1
  345. package/dist/types/runs.js.map +0 -1
  346. package/dist/types/slots.d.ts.map +0 -1
  347. package/dist/types/slots.js +0 -2
  348. package/dist/types/slots.js.map +0 -1
  349. package/dist/types/task.d.ts.map +0 -1
  350. package/dist/types/terminal.d.ts.map +0 -1
  351. package/dist/types/workspace.d.ts.map +0 -1
  352. package/dist/types.d.ts +0 -2
  353. package/dist/types.d.ts.map +0 -1
  354. package/dist/types.js +0 -3
  355. package/dist/types.js.map +0 -1
  356. /package/dist/{types → contracts}/agents.js +0 -0
  357. /package/dist/{types → contracts}/backlog.js +0 -0
  358. /package/dist/{types → contracts}/chat.d.ts +0 -0
  359. /package/dist/{types → contracts}/chat.js +0 -0
  360. /package/dist/{types → contracts}/common.d.ts +0 -0
  361. /package/dist/{types → contracts}/common.js +0 -0
  362. /package/dist/{types → contracts}/dispatch.js +0 -0
  363. /package/dist/{types → contracts}/evals.js +0 -0
  364. /package/dist/{types → contracts}/family.d.ts +0 -0
  365. /package/dist/{types → contracts}/family.js +0 -0
  366. /package/dist/{types → contracts}/resources.d.ts +0 -0
  367. /package/dist/{types → contracts}/resources.js +0 -0
  368. /package/dist/{types → contracts}/reviews.d.ts +0 -0
  369. /package/dist/{types → contracts}/reviews.js +0 -0
  370. /package/dist/{types → contracts}/task.d.ts +0 -0
  371. /package/dist/{methods → contracts}/task.js +0 -0
  372. /package/dist/{methods → contracts}/terminal.js +0 -0
  373. /package/dist/{types → contracts}/workspace.d.ts +0 -0
  374. /package/dist/{methods → contracts}/workspace.js +0 -0
  375. /package/dist/{github-ref.js → integrations/github-ref.js} +0 -0
  376. /package/dist/{methods → rpc}/auth.js +0 -0
  377. /package/dist/{methods → rpc}/backlog.js +0 -0
  378. /package/dist/{methods → rpc}/chat.js +0 -0
  379. /package/dist/{methods → rpc}/config.js +0 -0
  380. /package/dist/{methods → rpc}/copilot.d.ts +0 -0
  381. /package/dist/{methods → rpc}/copilot.js +0 -0
  382. /package/dist/{methods → rpc}/decisions.js +0 -0
  383. /package/dist/{methods → rpc}/diagnostics.js +0 -0
  384. /package/dist/{methods → rpc}/dispatch.js +0 -0
  385. /package/dist/{methods → rpc}/eval.js +0 -0
  386. /package/dist/{methods → rpc}/fleet.js +0 -0
  387. /package/dist/{methods → rpc}/fs.js +0 -0
  388. /package/dist/{methods → rpc}/git.js +0 -0
  389. /package/dist/{methods → rpc}/intelligence.js +0 -0
  390. /package/dist/{methods → rpc}/nodes.d.ts +0 -0
  391. /package/dist/{methods → rpc}/nodes.js +0 -0
  392. /package/dist/{methods → rpc}/pr.js +0 -0
  393. /package/dist/{methods → rpc}/search.js +0 -0
  394. /package/dist/{types → rpc}/task.js +0 -0
  395. /package/dist/{types → rpc}/terminal.js +0 -0
  396. /package/dist/{methods → rpc}/tmux.js +0 -0
  397. /package/dist/{types → rpc}/workspace.js +0 -0
  398. /package/dist/{frames.d.ts → transport/frames.d.ts} +0 -0
  399. /package/dist/{frames.js → transport/frames.js} +0 -0
  400. /package/dist/{signal.js → transport/signal.js} +0 -0
  401. /package/dist/{tmux-worker-watchlist.js → workers/tmux-worker-watchlist.js} +0 -0
@@ -0,0 +1,161 @@
1
+ import { addFinding, ARTIFACT_TYPES, createContext, finishResult, isNonEmptyString, isRecord, isRelativeArtifactPath, TERMINAL_STATUSES, } from './common.js';
2
+ import { getRecipeWorkflowNodeIds } from './workflow.js';
3
+ export function validateArtifactManifestDocument(manifest, options = {}) {
4
+ const ctx = createContext();
5
+ if (!isRecord(manifest)) {
6
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_document', '$', 'artifact-manifest.json must be a JSON object.');
7
+ return finishResult(ctx);
8
+ }
9
+ if (manifest.version !== 1) {
10
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_version', 'version', 'artifact-manifest.json version must equal 1.');
11
+ }
12
+ if (manifest.runStatus != null &&
13
+ (typeof manifest.runStatus !== 'string' || !TERMINAL_STATUSES.has(manifest.runStatus))) {
14
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_run_status', 'runStatus', 'runStatus must be pass, fail, or unknown when present.');
15
+ }
16
+ if (manifest.provenance != null) {
17
+ if (!isRecord(manifest.provenance)) {
18
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_provenance', 'provenance', 'provenance must be an object when present.');
19
+ }
20
+ else if (manifest.provenance.runner != null) {
21
+ if (!isRecord(manifest.provenance.runner)) {
22
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_runner_provenance', 'provenance.runner', 'provenance.runner must be an object when present.');
23
+ }
24
+ else {
25
+ const runner = manifest.provenance.runner;
26
+ for (const requiredField of ['source', 'git_ref']) {
27
+ if (!isNonEmptyString(runner[requiredField])) {
28
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_runner_provenance_field', `provenance.runner.${requiredField}`, `provenance.runner.${requiredField} must be a non-empty string.`);
29
+ }
30
+ }
31
+ for (const optionalField of ['name', 'version']) {
32
+ const value = runner[optionalField];
33
+ if (value != null && typeof value !== 'string') {
34
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_runner_provenance_field', `provenance.runner.${optionalField}`, `provenance.runner.${optionalField} must be a string when present.`);
35
+ }
36
+ }
37
+ }
38
+ }
39
+ }
40
+ const artifacts = manifest.artifacts;
41
+ if (!Array.isArray(artifacts)) {
42
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_artifacts', 'artifacts', 'artifact-manifest.json must include an artifacts array.');
43
+ return finishResult(ctx);
44
+ }
45
+ const nodeIds = new Set(getRecipeWorkflowNodeIds(options.recipe));
46
+ const artifactPathSet = options.artifactPaths ? new Set(options.artifactPaths) : null;
47
+ artifacts.forEach((artifact, index) => {
48
+ const path = `artifacts[${index}]`;
49
+ if (!isRecord(artifact)) {
50
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_artifact', path, 'Artifact entries must be objects.');
51
+ return;
52
+ }
53
+ if (!isNonEmptyString(artifact.path)) {
54
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_path', `${path}.path`, 'Artifact path must be a non-empty string.');
55
+ }
56
+ else {
57
+ if (!isRelativeArtifactPath(artifact.path)) {
58
+ addFinding(ctx, 'error', 'artifact_manifest.unsafe_path', `${path}.path`, 'Artifact path must be relative and must not contain .. segments.');
59
+ }
60
+ if (artifactPathSet && !artifactPathSet.has(artifact.path)) {
61
+ addFinding(ctx, 'error', 'artifact_manifest.missing_file', `${path}.path`, `Artifact file ${artifact.path} was not found in the provided artifact path list.`);
62
+ }
63
+ }
64
+ if (!isNonEmptyString(artifact.type)) {
65
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_type', `${path}.type`, 'Artifact type must be a non-empty string.');
66
+ }
67
+ else if (!ARTIFACT_TYPES.has(artifact.type)) {
68
+ addFinding(ctx, 'warning', 'artifact_manifest.unknown_type', `${path}.type`, `Artifact type ${artifact.type} is not in the v1 core type vocabulary.`);
69
+ }
70
+ for (const optionalField of ['label', 'nodeId', 'mimeType', 'category', 'proofTarget']) {
71
+ const value = artifact[optionalField];
72
+ if (value != null && typeof value !== 'string') {
73
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_optional_field', `${path}.${optionalField}`, `${optionalField} must be a string when present.`);
74
+ }
75
+ }
76
+ if (artifact.covers != null) {
77
+ if (!Array.isArray(artifact.covers) ||
78
+ artifact.covers.some((cover) => !isNonEmptyString(cover))) {
79
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_covers', `${path}.covers`, 'covers must be an array of non-empty strings when present.');
80
+ }
81
+ }
82
+ if (artifact.record != null) {
83
+ if (typeof artifact.record !== 'string') {
84
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_record', `${path}.record`, 'record must be a string when present.');
85
+ }
86
+ else if (artifact.record !== 'full_run') {
87
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_record', `${path}.record`, 'record must be full_run when present; focused proof-window recording is reserved.');
88
+ }
89
+ }
90
+ if (artifact.maxFps != null &&
91
+ (typeof artifact.maxFps !== 'number' ||
92
+ !Number.isFinite(artifact.maxFps) ||
93
+ artifact.maxFps <= 0)) {
94
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_max_fps', `${path}.maxFps`, 'maxFps must be a positive number when present.');
95
+ }
96
+ if (artifact.recorder != null) {
97
+ if (!isRecord(artifact.recorder)) {
98
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_recorder', `${path}.recorder`, 'recorder must be an object when present.');
99
+ }
100
+ else {
101
+ for (const recorderField of ['name', 'version', 'platform']) {
102
+ const value = artifact.recorder[recorderField];
103
+ if (value != null && typeof value !== 'string') {
104
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_recorder_field', `${path}.recorder.${recorderField}`, `${recorderField} must be a string when present.`);
105
+ }
106
+ }
107
+ if (artifact.recorder.target != null) {
108
+ if (!isRecord(artifact.recorder.target)) {
109
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_recorder_target', `${path}.recorder.target`, 'recorder.target must be an object when present.');
110
+ }
111
+ else {
112
+ for (const targetField of ['selector', 'value']) {
113
+ if (!isNonEmptyString(artifact.recorder.target[targetField])) {
114
+ addFinding(ctx, 'error', 'artifact_manifest.invalid_recorder_target_field', `${path}.recorder.target.${targetField}`, `recorder.target.${targetField} must be a non-empty string when present.`);
115
+ }
116
+ }
117
+ }
118
+ }
119
+ }
120
+ }
121
+ if (typeof artifact.nodeId === 'string' && nodeIds.size > 0 && !nodeIds.has(artifact.nodeId)) {
122
+ addFinding(ctx, 'warning', 'artifact_manifest.unknown_node', `${path}.nodeId`, `Artifact references nodeId ${artifact.nodeId}, which is not present in the recipe graph.`);
123
+ }
124
+ });
125
+ return finishResult(ctx);
126
+ }
127
+ export function validateRecipeArtifactPackage(input) {
128
+ const ctx = createContext();
129
+ const artifactPaths = new Set(input.artifactPaths ?? []);
130
+ if (input.artifactPaths != null) {
131
+ const requiredPaths = ['summary.json', 'trace.json'];
132
+ if (input.manifest != null)
133
+ requiredPaths.push('artifact-manifest.json');
134
+ if (input.recipe != null)
135
+ requiredPaths.push('recipe.json');
136
+ for (const requiredPath of requiredPaths) {
137
+ if (!artifactPaths.has(requiredPath)) {
138
+ addFinding(ctx, 'error', 'artifact_package.missing_required_file', requiredPath, `Recipe artifact package must include ${requiredPath}.`);
139
+ }
140
+ }
141
+ }
142
+ if (input.manifest == null) {
143
+ addFinding(ctx, 'error', 'artifact_package.missing_manifest', 'artifact-manifest.json', 'Recipe artifact package must include artifact-manifest.json.');
144
+ }
145
+ else {
146
+ const manifestResult = validateArtifactManifestDocument(input.manifest, {
147
+ recipe: input.recipe,
148
+ artifactPaths: input.artifactPaths,
149
+ });
150
+ ctx.findings.push(...manifestResult.findings);
151
+ }
152
+ return finishResult(ctx);
153
+ }
154
+ export function mergeRecipeValidationResults(results) {
155
+ const ctx = createContext();
156
+ for (const result of results) {
157
+ ctx.findings.push(...result.findings);
158
+ }
159
+ return finishResult(ctx);
160
+ }
161
+ //# sourceMappingURL=artifact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact.js","sourceRoot":"","sources":["../../src/recipe/artifact.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,15 @@ export interface RecipeNativeBindingDeclaration {
40
40
  action: RecipeActionName;
41
41
  implementation: string;
42
42
  }
43
+ export interface RecipeRuntimeCapabilityDeclaration {
44
+ capability: string;
45
+ status: 'supported' | 'unsupported' | 'partial' | 'planned';
46
+ provider?: string;
47
+ reason?: string;
48
+ platforms?: string[];
49
+ modes?: string[];
50
+ artifactTypes?: string[];
51
+ }
43
52
  export interface RecipeActionManifestDocument {
44
53
  runner_protocol_version: 1;
45
54
  action_registry_version: 1;
@@ -50,22 +59,26 @@ export interface RecipeActionManifestDocument {
50
59
  state_refs?: RecipeStateRefDeclaration[];
51
60
  pre_conditions?: RecipePreconditionDeclaration[];
52
61
  native_bindings?: RecipeNativeBindingDeclaration[];
62
+ capabilities?: RecipeRuntimeCapabilityDeclaration[];
53
63
  }
54
- export type RecipeCompatibilitySeverity = 'error' | 'warning';
55
- export type RecipeCompatibilityStatus = 'v1-compatible' | 'legacy-compatible' | 'invalid';
56
- export interface RecipeCompatibilityFinding {
57
- severity: RecipeCompatibilitySeverity;
64
+ export declare const PLAYBACK_MODES: Set<string>;
65
+ export declare const TERMINAL_STATUSES: Set<string>;
66
+ export declare const ARTIFACT_TYPES: Set<string>;
67
+ export declare const OFFICIAL_ACTION_SET: Set<string>;
68
+ export type RecipeValidationSeverity = 'error' | 'warning';
69
+ export type RecipeValidationStatus = 'valid' | 'invalid';
70
+ export interface RecipeValidationFinding {
71
+ severity: RecipeValidationSeverity;
58
72
  code: string;
59
73
  path: string;
60
74
  message: string;
61
75
  }
62
- export interface RecipeCompatibilityResult {
63
- status: RecipeCompatibilityStatus;
64
- findings: RecipeCompatibilityFinding[];
76
+ export interface RecipeValidationResult {
77
+ status: RecipeValidationStatus;
78
+ findings: RecipeValidationFinding[];
65
79
  summary: {
66
80
  errors: number;
67
81
  warnings: number;
68
- legacy: boolean;
69
82
  };
70
83
  }
71
84
  export interface RecipeArtifactPackageInput {
@@ -73,17 +86,16 @@ export interface RecipeArtifactPackageInput {
73
86
  artifactPaths?: readonly string[];
74
87
  recipe?: unknown;
75
88
  }
89
+ export interface MutableValidationContext {
90
+ findings: RecipeValidationFinding[];
91
+ }
92
+ export declare function createContext(): MutableValidationContext;
93
+ export declare function addFinding(ctx: MutableValidationContext, severity: RecipeValidationSeverity, code: string, path: string, message: string): void;
76
94
  export declare function isRecord(value: unknown): value is Record<string, unknown>;
77
- export declare function getRecipeWorkflowNodeIds(recipe: unknown): string[];
78
- export declare function getRecipeWorkflowActions(recipe: unknown): string[];
79
- export declare function getRecipeActionManifestActionNames(manifest: unknown): string[];
80
- export declare function validateRecipeActionManifestDocument(manifest: unknown): RecipeCompatibilityResult;
81
- export declare function validateRecipeWithManifest(recipe: unknown, manifest: unknown): RecipeCompatibilityResult;
82
- export declare function validateRecipeDocument(recipe: unknown): RecipeCompatibilityResult;
83
- export declare function validateArtifactManifestDocument(manifest: unknown, options?: {
84
- recipe?: unknown;
85
- artifactPaths?: readonly string[];
86
- }): RecipeCompatibilityResult;
87
- export declare function validateRecipeArtifactPackage(input: RecipeArtifactPackageInput): RecipeCompatibilityResult;
88
- export declare function mergeRecipeCompatibilityResults(results: readonly RecipeCompatibilityResult[]): RecipeCompatibilityResult;
89
- //# sourceMappingURL=recipe-compat.d.ts.map
95
+ export declare function hasOwn(value: Record<string, unknown>, key: string): boolean;
96
+ export declare function isNonEmptyString(value: unknown): value is string;
97
+ export declare function isRelativeArtifactPath(value: string): boolean;
98
+ export declare function finishResult(ctx: MutableValidationContext): RecipeValidationResult;
99
+ export declare function requireStringField(ctx: MutableValidationContext, document: Record<string, unknown>, field: string, path: string): void;
100
+ export declare function validateOptionalStringField(ctx: MutableValidationContext, document: Record<string, unknown>, field: string, path: string): void;
101
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/recipe/common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import { RECIPE_ARTIFACT_TYPES } from '../recipes/step-io.js';
2
+ export const RECIPE_PROTOCOL_SCHEMA_VERSION = 1;
3
+ export const RECIPE_PLAYBACK_SLOW_MS_MIN = 100;
4
+ export const RECIPE_PLAYBACK_SLOW_MS_MAX = 60_000;
5
+ export const OFFICIAL_RECIPE_ACTIONS = [
6
+ 'command',
7
+ 'wait',
8
+ 'assert_file',
9
+ 'assert_json',
10
+ 'assert_exit_code',
11
+ 'assert_output',
12
+ 'state_read',
13
+ 'watch_logs',
14
+ 'index_artifacts',
15
+ 'call',
16
+ 'switch',
17
+ 'manual',
18
+ 'end',
19
+ 'ui.navigate',
20
+ 'ui.press',
21
+ 'ui.key_press',
22
+ 'ui.set_input',
23
+ 'ui.scroll',
24
+ 'ui.gesture',
25
+ 'ui.wait_for',
26
+ 'ui.screenshot',
27
+ 'app.status',
28
+ 'app.lifecycle',
29
+ 'app.hud',
30
+ 'app.trace',
31
+ 'cdp.target',
32
+ 'cdp.storage',
33
+ 'cdp.network',
34
+ 'cdp.emulation',
35
+ 'cdp.metrics',
36
+ 'cdp.trace',
37
+ ];
38
+ export const PLAYBACK_MODES = new Set(['off', 'auto', 'step']);
39
+ export const TERMINAL_STATUSES = new Set(['pass', 'fail', 'unknown']);
40
+ export const ARTIFACT_TYPES = new Set(RECIPE_ARTIFACT_TYPES);
41
+ export const OFFICIAL_ACTION_SET = new Set(OFFICIAL_RECIPE_ACTIONS);
42
+ export function createContext() {
43
+ return { findings: [] };
44
+ }
45
+ export function addFinding(ctx, severity, code, path, message) {
46
+ ctx.findings.push({ severity, code, path, message });
47
+ }
48
+ export function isRecord(value) {
49
+ return Boolean(value && typeof value === 'object' && !Array.isArray(value));
50
+ }
51
+ export function hasOwn(value, key) {
52
+ return Object.prototype.hasOwnProperty.call(value, key);
53
+ }
54
+ export function isNonEmptyString(value) {
55
+ return typeof value === 'string' && value.trim().length > 0;
56
+ }
57
+ export function isRelativeArtifactPath(value) {
58
+ if (value.startsWith('/') || value.startsWith('\\'))
59
+ return false;
60
+ if (/^[A-Za-z]:/.test(value))
61
+ return false;
62
+ return !value.split(/[\\/]+/).some((segment) => segment === '..');
63
+ }
64
+ export function finishResult(ctx) {
65
+ const errors = ctx.findings.filter((finding) => finding.severity === 'error').length;
66
+ const warnings = ctx.findings.length - errors;
67
+ const status = errors ? 'invalid' : 'valid';
68
+ return { status, findings: ctx.findings, summary: { errors, warnings } };
69
+ }
70
+ export function requireStringField(ctx, document, field, path) {
71
+ if (isNonEmptyString(document[field]))
72
+ return;
73
+ if (!hasOwn(document, field)) {
74
+ addFinding(ctx, 'error', `recipe.missing_${field}`, path, `Recipe requires ${path}.`);
75
+ return;
76
+ }
77
+ addFinding(ctx, 'error', `recipe.invalid_${field}`, path, `${path} must be a non-empty string.`);
78
+ }
79
+ export function validateOptionalStringField(ctx, document, field, path) {
80
+ if (!hasOwn(document, field) || document[field] == null)
81
+ return;
82
+ if (isNonEmptyString(document[field]))
83
+ return;
84
+ addFinding(ctx, 'error', `recipe.invalid_${field}`, path, `${path} must be a non-empty string.`);
85
+ }
86
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/recipe/common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type RecipeValidationResult } from './common.js';
2
+ export declare function validateRecipeWithManifest(recipe: unknown, manifest: unknown): RecipeValidationResult;
3
+ export declare function validateRecipeDocument(recipe: unknown): RecipeValidationResult;
4
+ //# sourceMappingURL=document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/recipe/document.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,sBAAsB,EAE5B,MAAM,aAAa,CAAC;AAgBrB,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,OAAO,GAChB,sBAAsB,CAoCxB;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,sBAAsB,CA+C9E"}
@@ -0,0 +1,53 @@
1
+ import { addFinding, createContext, finishResult, hasOwn, isRecord, RECIPE_PROTOCOL_SCHEMA_VERSION, validateOptionalStringField, } from './common.js';
2
+ import { getRecipeActionManifestActionNames, getRecipeActionManifestPreconditionIds, validateRecipeActionManifestDocument, } from './manifest.js';
3
+ import { extractWorkflow, getRecipeWorkflowActionEntries, getRecipeWorkflowPreconditionEntries, validateFlowCalls, validateInlineFlows, validateWorkflowGraph, validateWorkflowPreconditions, } from './workflow.js';
4
+ export function validateRecipeWithManifest(recipe, manifest) {
5
+ const ctx = createContext();
6
+ const recipeResult = validateRecipeDocument(recipe);
7
+ const manifestResult = validateRecipeActionManifestDocument(manifest);
8
+ ctx.findings.push(...recipeResult.findings, ...manifestResult.findings);
9
+ const declaredActions = new Set(getRecipeActionManifestActionNames(manifest));
10
+ if (declaredActions.size > 0) {
11
+ const actions = getRecipeWorkflowActionEntries(recipe);
12
+ actions.forEach(({ action, path }) => {
13
+ if (!declaredActions.has(action)) {
14
+ addFinding(ctx, 'error', 'recipe.action_not_declared_by_manifest', path, `Recipe action ${action} is not declared by the runner action manifest.`);
15
+ }
16
+ });
17
+ }
18
+ const declaredPreconditions = new Set(getRecipeActionManifestPreconditionIds(manifest));
19
+ for (const gate of getRecipeWorkflowPreconditionEntries(recipe)) {
20
+ if (!declaredPreconditions.has(gate.id)) {
21
+ addFinding(ctx, 'error', 'recipe.precondition_not_declared_by_manifest', gate.path, `Recipe precondition ${gate.id} is not declared by the runner action manifest.`);
22
+ }
23
+ }
24
+ return finishResult(ctx);
25
+ }
26
+ export function validateRecipeDocument(recipe) {
27
+ const ctx = createContext();
28
+ if (!isRecord(recipe)) {
29
+ addFinding(ctx, 'error', 'recipe.invalid_document', '$', 'Recipe document must be a JSON object.');
30
+ return finishResult(ctx);
31
+ }
32
+ const schemaVersion = recipe.schema_version;
33
+ const schemaVersionIsV1 = schemaVersion === RECIPE_PROTOCOL_SCHEMA_VERSION;
34
+ if (!hasOwn(recipe, 'schema_version')) {
35
+ addFinding(ctx, 'error', 'recipe.missing_schema_version', 'schema_version', `Recipe must set schema_version: ${RECIPE_PROTOCOL_SCHEMA_VERSION}.`);
36
+ }
37
+ else if (!schemaVersionIsV1) {
38
+ addFinding(ctx, 'error', 'recipe.unsupported_schema_version', 'schema_version', `Unsupported schema_version ${JSON.stringify(schemaVersion)}; supported value is ${RECIPE_PROTOCOL_SCHEMA_VERSION}.`);
39
+ }
40
+ validateOptionalStringField(ctx, recipe, 'title', 'title');
41
+ validateOptionalStringField(ctx, recipe, 'description', 'description');
42
+ const validate = recipe.validate;
43
+ const rawWorkflow = isRecord(validate) && isRecord(validate.workflow) ? validate.workflow : null;
44
+ const workflow = extractWorkflow(ctx, recipe);
45
+ if (workflow && rawWorkflow) {
46
+ validateWorkflowPreconditions(ctx, rawWorkflow);
47
+ validateWorkflowGraph(ctx, workflow, rawWorkflow);
48
+ validateFlowCalls(ctx, recipe, workflow);
49
+ }
50
+ validateInlineFlows(ctx, recipe);
51
+ return finishResult(ctx);
52
+ }
53
+ //# sourceMappingURL=document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/recipe/document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { mergeRecipeValidationResults, validateArtifactManifestDocument, validateRecipeArtifactPackage, } from './artifact.js';
2
+ export { isRecord, OFFICIAL_RECIPE_ACTIONS, type OfficialActionName, RECIPE_PLAYBACK_SLOW_MS_MAX, RECIPE_PLAYBACK_SLOW_MS_MIN, RECIPE_PROTOCOL_SCHEMA_VERSION, type RecipeActionCatalogEntry, type RecipeActionCatalogExample, type RecipeActionManifestDocument, type RecipeActionName, type RecipeArtifactPackageInput, type RecipeCustomActionDeclaration, type RecipeNamedDeclaration, type RecipeNativeBindingDeclaration, type RecipePreconditionDeclaration, type RecipeRuntimeCapabilityDeclaration, type RecipeStateRefDeclaration, type RecipeValidationFinding, type RecipeValidationResult, type RecipeValidationSeverity, type RecipeValidationStatus, } from './common.js';
3
+ export { validateRecipeDocument, validateRecipeWithManifest } from './document.js';
4
+ export { getRecipeActionManifestActionNames, validateRecipeActionManifestDocument, } from './manifest.js';
5
+ export { getRecipeWorkflowActions, getRecipeWorkflowNodeIds } from './workflow.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/recipe/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,6BAA6B,GAC9B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,QAAQ,EACR,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,2BAA2B,EAC3B,2BAA2B,EAC3B,8BAA8B,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,EAClC,KAAK,sBAAsB,EAC3B,KAAK,8BAA8B,EACnC,KAAK,6BAA6B,EAClC,KAAK,kCAAkC,EACvC,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,GAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EACL,kCAAkC,EAClC,oCAAoC,GACrC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { mergeRecipeValidationResults, validateArtifactManifestDocument, validateRecipeArtifactPackage, } from './artifact.js';
2
+ export { isRecord, OFFICIAL_RECIPE_ACTIONS, RECIPE_PLAYBACK_SLOW_MS_MAX, RECIPE_PLAYBACK_SLOW_MS_MIN, RECIPE_PROTOCOL_SCHEMA_VERSION, } from './common.js';
3
+ export { validateRecipeDocument, validateRecipeWithManifest } from './document.js';
4
+ export { getRecipeActionManifestActionNames, validateRecipeActionManifestDocument, } from './manifest.js';
5
+ export { getRecipeWorkflowActions, getRecipeWorkflowNodeIds } from './workflow.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/recipe/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,6BAA6B,GAC9B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,QAAQ,EACR,uBAAuB,EAEvB,2BAA2B,EAC3B,2BAA2B,EAC3B,8BAA8B,GAgB/B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EACL,kCAAkC,EAClC,oCAAoC,GACrC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type RecipeValidationResult } from './common.js';
2
+ export declare function getRecipeActionManifestActionNames(manifest: unknown): string[];
3
+ export declare function validateRecipeActionManifestDocument(manifest: unknown): RecipeValidationResult;
4
+ export declare function getRecipeActionManifestPreconditionIds(manifest: unknown): string[];
5
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/recipe/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,sBAAsB,EAC5B,MAAM,aAAa,CAAC;AAErB,wBAAgB,kCAAkC,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,EAAE,CAc9E;AA+GD,wBAAgB,oCAAoC,CAAC,QAAQ,EAAE,OAAO,GAAG,sBAAsB,CAmX9F;AAED,wBAAgB,sCAAsC,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,EAAE,CAKlF"}