@elie-laloum/outpost 7.0.0 → 9.0.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 (963) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +95 -35
  3. package/SECURITY.md +4 -2
  4. package/dist/adapters/agents/agent-descriptor.types.d.ts +56 -0
  5. package/dist/adapters/agents/agent-descriptor.types.js +2 -0
  6. package/dist/adapters/agents/agent-descriptor.types.js.map +1 -0
  7. package/dist/adapters/agents/antigravity/antigravity-adapter.d.ts +3 -0
  8. package/dist/adapters/agents/antigravity/antigravity-adapter.js +48 -0
  9. package/dist/adapters/agents/antigravity/antigravity-adapter.js.map +1 -0
  10. package/dist/adapters/agents/antigravity/antigravity-authentication.d.ts +2 -0
  11. package/dist/adapters/agents/{antigravity-authentication.js → antigravity/antigravity-authentication.js} +5 -5
  12. package/dist/adapters/agents/antigravity/antigravity-authentication.js.map +1 -0
  13. package/dist/adapters/agents/antigravity/antigravity-descriptor.d.ts +37 -0
  14. package/dist/adapters/agents/antigravity/antigravity-descriptor.js +38 -0
  15. package/dist/adapters/agents/antigravity/antigravity-descriptor.js.map +1 -0
  16. package/dist/adapters/agents/{antigravity-diagnostics.d.ts → antigravity/antigravity-diagnostics.d.ts} +1 -1
  17. package/dist/adapters/agents/{antigravity-diagnostics.js → antigravity/antigravity-diagnostics.js} +1 -1
  18. package/dist/adapters/agents/antigravity/antigravity-diagnostics.js.map +1 -0
  19. package/dist/adapters/agents/{antigravity-events.d.ts → antigravity/antigravity-events.d.ts} +1 -1
  20. package/dist/adapters/agents/{antigravity-events.js → antigravity/antigravity-events.js} +3 -3
  21. package/dist/adapters/agents/antigravity/antigravity-events.js.map +1 -0
  22. package/dist/adapters/agents/antigravity/antigravity-install.constants.js.map +1 -0
  23. package/dist/{providers → adapters/agents/antigravity}/antigravity-install.js +1 -1
  24. package/dist/adapters/agents/antigravity/antigravity-install.js.map +1 -0
  25. package/dist/adapters/agents/antigravity/antigravity-install.types.js.map +1 -0
  26. package/dist/adapters/agents/antigravity/antigravity-mcp.d.ts +3 -0
  27. package/dist/adapters/agents/antigravity/antigravity-mcp.js +27 -0
  28. package/dist/adapters/agents/antigravity/antigravity-mcp.js.map +1 -0
  29. package/dist/adapters/agents/antigravity/antigravity-protocol.constants.d.ts +2 -0
  30. package/dist/adapters/agents/antigravity/antigravity-protocol.constants.js +56 -0
  31. package/dist/adapters/agents/antigravity/antigravity-protocol.constants.js.map +1 -0
  32. package/dist/adapters/agents/antigravity/antigravity-request.d.ts +5 -0
  33. package/dist/adapters/agents/{antigravity-request.js → antigravity/antigravity-request.js} +2 -2
  34. package/dist/adapters/agents/antigravity/antigravity-request.js.map +1 -0
  35. package/dist/adapters/agents/antigravity/antigravity.constants.d.ts +14 -0
  36. package/dist/adapters/agents/antigravity/antigravity.constants.js +31 -0
  37. package/dist/adapters/agents/antigravity/antigravity.constants.js.map +1 -0
  38. package/dist/adapters/agents/antigravity/antigravity.types.d.ts +9 -0
  39. package/dist/adapters/agents/antigravity/antigravity.types.js.map +1 -0
  40. package/dist/adapters/agents/authentication.constants.d.ts +0 -20
  41. package/dist/adapters/agents/authentication.constants.js +0 -9
  42. package/dist/adapters/agents/authentication.constants.js.map +1 -1
  43. package/dist/adapters/agents/catalog.d.ts +160 -0
  44. package/dist/adapters/agents/catalog.js +30 -0
  45. package/dist/adapters/agents/catalog.js.map +1 -0
  46. package/dist/adapters/agents/catalog.types.d.ts +8 -0
  47. package/dist/adapters/agents/catalog.types.js +2 -0
  48. package/dist/adapters/agents/catalog.types.js.map +1 -0
  49. package/dist/adapters/agents/claude/claude-adapter.d.ts +3 -0
  50. package/dist/adapters/agents/claude/claude-adapter.js +63 -0
  51. package/dist/adapters/agents/claude/claude-adapter.js.map +1 -0
  52. package/dist/adapters/agents/claude/claude-authentication.d.ts +2 -0
  53. package/dist/adapters/agents/{claude-authentication.js → claude/claude-authentication.js} +6 -9
  54. package/dist/adapters/agents/claude/claude-authentication.js.map +1 -0
  55. package/dist/adapters/agents/claude/claude-conversations.d.ts +5 -0
  56. package/dist/adapters/agents/claude/claude-conversations.js +22 -0
  57. package/dist/adapters/agents/claude/claude-conversations.js.map +1 -0
  58. package/dist/adapters/agents/claude/claude-descriptor.d.ts +36 -0
  59. package/dist/adapters/agents/claude/claude-descriptor.js +41 -0
  60. package/dist/adapters/agents/claude/claude-descriptor.js.map +1 -0
  61. package/dist/adapters/agents/claude/claude-diagnostics.d.ts +1 -0
  62. package/dist/adapters/agents/{claude-diagnostics.js → claude/claude-diagnostics.js} +2 -2
  63. package/dist/adapters/agents/claude/claude-diagnostics.js.map +1 -0
  64. package/dist/adapters/agents/{claude-events.d.ts → claude/claude-events.d.ts} +1 -1
  65. package/dist/adapters/agents/{claude-events.js → claude/claude-events.js} +29 -5
  66. package/dist/adapters/agents/claude/claude-events.js.map +1 -0
  67. package/dist/adapters/agents/claude/claude-input.d.ts +5 -0
  68. package/dist/adapters/agents/claude/claude-input.js +21 -0
  69. package/dist/adapters/agents/claude/claude-input.js.map +1 -0
  70. package/dist/adapters/agents/claude/claude-mcp.d.ts +4 -0
  71. package/dist/adapters/agents/claude/claude-mcp.js +44 -0
  72. package/dist/adapters/agents/claude/claude-mcp.js.map +1 -0
  73. package/dist/adapters/agents/claude/claude-protocol.constants.d.ts +2 -0
  74. package/dist/adapters/agents/claude/claude-protocol.constants.js +35 -0
  75. package/dist/adapters/agents/claude/claude-protocol.constants.js.map +1 -0
  76. package/dist/adapters/agents/claude/claude-request.d.ts +4 -0
  77. package/dist/adapters/agents/{claude-request.js → claude/claude-request.js} +11 -3
  78. package/dist/adapters/agents/claude/claude-request.js.map +1 -0
  79. package/dist/adapters/agents/claude/claude.constants.d.ts +26 -0
  80. package/dist/adapters/agents/claude/claude.constants.js +42 -0
  81. package/dist/adapters/agents/claude/claude.constants.js.map +1 -0
  82. package/dist/adapters/agents/cli-diagnostics.constants.d.ts +0 -10
  83. package/dist/adapters/agents/cli-diagnostics.constants.js +0 -10
  84. package/dist/adapters/agents/cli-diagnostics.constants.js.map +1 -1
  85. package/dist/adapters/agents/codex/codex-adapter.d.ts +3 -0
  86. package/dist/adapters/agents/codex/codex-adapter.js +48 -0
  87. package/dist/adapters/agents/codex/codex-adapter.js.map +1 -0
  88. package/dist/adapters/agents/codex/codex-app-events.d.ts +4 -0
  89. package/dist/adapters/agents/codex/codex-app-events.js +105 -0
  90. package/dist/adapters/agents/codex/codex-app-events.js.map +1 -0
  91. package/dist/adapters/agents/codex/codex-app-session.d.ts +6 -0
  92. package/dist/adapters/agents/codex/codex-app-session.js +136 -0
  93. package/dist/adapters/agents/codex/codex-app-session.js.map +1 -0
  94. package/dist/adapters/agents/codex/codex-app.constants.d.ts +17 -0
  95. package/dist/adapters/agents/codex/codex-app.constants.js +18 -0
  96. package/dist/adapters/agents/codex/codex-app.constants.js.map +1 -0
  97. package/dist/adapters/agents/codex/codex-authentication.d.ts +3 -0
  98. package/dist/adapters/agents/{codex-authentication.js → codex/codex-authentication.js} +7 -7
  99. package/dist/adapters/agents/codex/codex-authentication.js.map +1 -0
  100. package/dist/adapters/agents/codex/codex-conversations.d.ts +5 -0
  101. package/dist/adapters/agents/codex/codex-conversations.js +21 -0
  102. package/dist/adapters/agents/codex/codex-conversations.js.map +1 -0
  103. package/dist/adapters/agents/codex/codex-descriptor.d.ts +31 -0
  104. package/dist/adapters/agents/codex/codex-descriptor.js +32 -0
  105. package/dist/adapters/agents/codex/codex-descriptor.js.map +1 -0
  106. package/dist/adapters/agents/codex/codex-diagnostics.d.ts +1 -0
  107. package/dist/adapters/agents/{codex-diagnostics.js → codex/codex-diagnostics.js} +2 -2
  108. package/dist/adapters/agents/codex/codex-diagnostics.js.map +1 -0
  109. package/dist/adapters/agents/codex/codex-events.d.ts +2 -0
  110. package/dist/adapters/agents/{codex-events.js → codex/codex-events.js} +18 -5
  111. package/dist/adapters/agents/codex/codex-events.js.map +1 -0
  112. package/dist/adapters/agents/codex/codex-mcp.d.ts +4 -0
  113. package/dist/adapters/agents/codex/codex-mcp.js +72 -0
  114. package/dist/adapters/agents/codex/codex-mcp.js.map +1 -0
  115. package/dist/adapters/agents/codex/codex-protocol.constants.d.ts +2 -0
  116. package/dist/adapters/agents/codex/codex-protocol.constants.js +32 -0
  117. package/dist/adapters/agents/codex/codex-protocol.constants.js.map +1 -0
  118. package/dist/adapters/agents/{codex-provider.d.ts → codex/codex-provider.d.ts} +1 -1
  119. package/dist/adapters/agents/{codex-provider.js → codex/codex-provider.js} +1 -1
  120. package/dist/adapters/agents/codex/codex-provider.js.map +1 -0
  121. package/dist/adapters/agents/codex/codex-request.d.ts +4 -0
  122. package/dist/adapters/agents/{codex-request.js → codex/codex-request.js} +11 -2
  123. package/dist/adapters/agents/codex/codex-request.js.map +1 -0
  124. package/dist/adapters/agents/codex/codex.constants.d.ts +22 -0
  125. package/dist/adapters/agents/codex/codex.constants.js +38 -0
  126. package/dist/adapters/agents/codex/codex.constants.js.map +1 -0
  127. package/dist/adapters/agents/conversation-settings.d.ts +5 -0
  128. package/dist/adapters/agents/conversation-settings.js +13 -0
  129. package/dist/adapters/agents/conversation-settings.js.map +1 -0
  130. package/dist/adapters/agents/copilot/copilot-adapter.d.ts +3 -0
  131. package/dist/adapters/agents/copilot/copilot-adapter.js +53 -0
  132. package/dist/adapters/agents/copilot/copilot-adapter.js.map +1 -0
  133. package/dist/adapters/agents/copilot/copilot-authentication.d.ts +2 -0
  134. package/dist/adapters/agents/{copilot-authentication.js → copilot/copilot-authentication.js} +6 -6
  135. package/dist/adapters/agents/copilot/copilot-authentication.js.map +1 -0
  136. package/dist/adapters/agents/copilot/copilot-conversations.d.ts +5 -0
  137. package/dist/adapters/agents/copilot/copilot-conversations.js +32 -0
  138. package/dist/adapters/agents/copilot/copilot-conversations.js.map +1 -0
  139. package/dist/adapters/agents/copilot/copilot-descriptor.d.ts +36 -0
  140. package/dist/adapters/agents/copilot/copilot-descriptor.js +35 -0
  141. package/dist/adapters/agents/copilot/copilot-descriptor.js.map +1 -0
  142. package/dist/adapters/agents/{copilot-diagnostics.d.ts → copilot/copilot-diagnostics.d.ts} +1 -1
  143. package/dist/adapters/agents/{copilot-diagnostics.js → copilot/copilot-diagnostics.js} +1 -1
  144. package/dist/adapters/agents/copilot/copilot-diagnostics.js.map +1 -0
  145. package/dist/adapters/agents/{copilot-events.d.ts → copilot/copilot-events.d.ts} +1 -1
  146. package/dist/adapters/agents/{copilot-events.js → copilot/copilot-events.js} +10 -6
  147. package/dist/adapters/agents/copilot/copilot-events.js.map +1 -0
  148. package/dist/adapters/agents/copilot/copilot-mcp.d.ts +2 -0
  149. package/dist/adapters/agents/copilot/copilot-mcp.js +30 -0
  150. package/dist/adapters/agents/copilot/copilot-mcp.js.map +1 -0
  151. package/dist/adapters/agents/copilot/copilot-protocol.constants.d.ts +2 -0
  152. package/dist/adapters/agents/copilot/copilot-protocol.constants.js +56 -0
  153. package/dist/adapters/agents/copilot/copilot-protocol.constants.js.map +1 -0
  154. package/dist/adapters/agents/copilot/copilot-request.d.ts +5 -0
  155. package/dist/adapters/agents/{copilot-request.js → copilot/copilot-request.js} +4 -3
  156. package/dist/adapters/agents/copilot/copilot-request.js.map +1 -0
  157. package/dist/adapters/agents/{copilot-usage.d.ts → copilot/copilot-usage.d.ts} +1 -1
  158. package/dist/adapters/agents/{copilot-usage.js → copilot/copilot-usage.js} +3 -3
  159. package/dist/adapters/agents/copilot/copilot-usage.js.map +1 -0
  160. package/dist/adapters/agents/copilot/copilot.constants.d.ts +11 -0
  161. package/dist/adapters/agents/copilot/copilot.constants.js +29 -0
  162. package/dist/adapters/agents/copilot/copilot.constants.js.map +1 -0
  163. package/dist/adapters/agents/copilot/copilot.types.d.ts +10 -0
  164. package/dist/adapters/agents/copilot/copilot.types.js.map +1 -0
  165. package/dist/adapters/agents/kimi/kimi-adapter.d.ts +3 -0
  166. package/dist/adapters/agents/kimi/kimi-adapter.js +59 -0
  167. package/dist/adapters/agents/kimi/kimi-adapter.js.map +1 -0
  168. package/dist/adapters/agents/{kimi-authentication.d.ts → kimi/kimi-authentication.d.ts} +1 -1
  169. package/dist/adapters/agents/{kimi-authentication.js → kimi/kimi-authentication.js} +6 -7
  170. package/dist/adapters/agents/kimi/kimi-authentication.js.map +1 -0
  171. package/dist/adapters/agents/kimi/kimi-conversations.d.ts +5 -0
  172. package/dist/adapters/agents/kimi/kimi-conversations.js +49 -0
  173. package/dist/adapters/agents/kimi/kimi-conversations.js.map +1 -0
  174. package/dist/adapters/agents/kimi/kimi-descriptor.d.ts +30 -0
  175. package/dist/adapters/agents/kimi/kimi-descriptor.js +31 -0
  176. package/dist/adapters/agents/kimi/kimi-descriptor.js.map +1 -0
  177. package/dist/adapters/agents/{kimi-diagnostics.d.ts → kimi/kimi-diagnostics.d.ts} +1 -1
  178. package/dist/adapters/agents/{kimi-diagnostics.js → kimi/kimi-diagnostics.js} +1 -1
  179. package/dist/adapters/agents/kimi/kimi-diagnostics.js.map +1 -0
  180. package/dist/adapters/agents/kimi/kimi-events.d.ts +2 -0
  181. package/dist/adapters/agents/{kimi-events.js → kimi/kimi-events.js} +3 -3
  182. package/dist/adapters/agents/kimi/kimi-events.js.map +1 -0
  183. package/dist/adapters/agents/kimi/kimi-fork.d.ts +2 -0
  184. package/dist/adapters/agents/{kimi-fork.js → kimi/kimi-fork.js} +3 -3
  185. package/dist/adapters/agents/kimi/kimi-fork.js.map +1 -0
  186. package/dist/adapters/agents/kimi/kimi-mcp.d.ts +6 -0
  187. package/dist/adapters/agents/kimi/kimi-mcp.js +65 -0
  188. package/dist/adapters/agents/kimi/kimi-mcp.js.map +1 -0
  189. package/dist/adapters/agents/kimi/kimi-protocol.constants.d.ts +2 -0
  190. package/dist/adapters/agents/kimi/kimi-protocol.constants.js +50 -0
  191. package/dist/adapters/agents/kimi/kimi-protocol.constants.js.map +1 -0
  192. package/dist/adapters/agents/kimi/kimi-request.d.ts +5 -0
  193. package/dist/adapters/agents/{kimi-request.js → kimi/kimi-request.js} +3 -3
  194. package/dist/adapters/agents/kimi/kimi-request.js.map +1 -0
  195. package/dist/adapters/agents/kimi/kimi-usage.d.ts +2 -0
  196. package/dist/adapters/agents/{kimi-usage.js → kimi/kimi-usage.js} +2 -2
  197. package/dist/adapters/agents/kimi/kimi-usage.js.map +1 -0
  198. package/dist/adapters/agents/kimi/kimi.constants.d.ts +28 -0
  199. package/dist/adapters/agents/kimi/kimi.constants.js +51 -0
  200. package/dist/adapters/agents/kimi/kimi.constants.js.map +1 -0
  201. package/dist/adapters/agents/kimi/kimi.types.d.ts +11 -0
  202. package/dist/adapters/agents/kimi/kimi.types.js.map +1 -0
  203. package/dist/adapters/agents/mcp-configuration.d.ts +12 -0
  204. package/dist/adapters/agents/mcp-configuration.js +57 -0
  205. package/dist/adapters/agents/mcp-configuration.js.map +1 -0
  206. package/dist/adapters/agents/mcp-support.types.d.ts +7 -0
  207. package/dist/adapters/agents/mcp-support.types.js +2 -0
  208. package/dist/adapters/agents/mcp-support.types.js.map +1 -0
  209. package/dist/adapters/agents/model-support.constants.d.ts +0 -7
  210. package/dist/adapters/agents/model-support.constants.js +0 -26
  211. package/dist/adapters/agents/model-support.constants.js.map +1 -1
  212. package/dist/adapters/agents/model-support.d.ts +2 -1
  213. package/dist/adapters/agents/model-support.js +12 -1
  214. package/dist/adapters/agents/model-support.js.map +1 -1
  215. package/dist/adapters/agents/protocol-fixtures.types.d.ts +0 -1
  216. package/dist/adapters/agents/protocol-fixtures.types.js.map +1 -1
  217. package/dist/adapters/agents/settings.types.d.ts +12 -0
  218. package/dist/adapters/agents/settings.types.js.map +1 -1
  219. package/dist/adapters/agents/text-matcher.d.ts +1 -0
  220. package/dist/adapters/agents/text-matcher.js +5 -0
  221. package/dist/adapters/agents/text-matcher.js.map +1 -0
  222. package/dist/adapters/agents/unavailable.constants.d.ts +3 -0
  223. package/dist/adapters/agents/unavailable.constants.js +13 -0
  224. package/dist/adapters/agents/unavailable.constants.js.map +1 -0
  225. package/dist/adapters/models/anthropic-model-provider.d.ts +1 -1
  226. package/dist/adapters/models/anthropic-model-provider.js +1 -1
  227. package/dist/adapters/models/anthropic-model-provider.js.map +1 -1
  228. package/dist/adapters/models/http-provider.js +12 -3
  229. package/dist/adapters/models/http-provider.js.map +1 -1
  230. package/dist/adapters/models/model.constants.d.ts +5 -0
  231. package/dist/adapters/models/model.constants.js +15 -0
  232. package/dist/adapters/models/model.constants.js.map +1 -1
  233. package/dist/adapters/models/openai-model-provider.d.ts +1 -1
  234. package/dist/adapters/models/openai-model-provider.js +1 -1
  235. package/dist/adapters/models/openai-model-provider.js.map +1 -1
  236. package/dist/adapters/models/stream-events.js +14 -5
  237. package/dist/adapters/models/stream-events.js.map +1 -1
  238. package/dist/adapters/tools/edit-tools.d.ts +1 -1
  239. package/dist/adapters/tools/edit-tools.js +1 -1
  240. package/dist/adapters/tools/edit-tools.js.map +1 -1
  241. package/dist/adapters/tools/file-tools.d.ts +1 -1
  242. package/dist/adapters/tools/file-tools.js +1 -1
  243. package/dist/adapters/tools/file-tools.js.map +1 -1
  244. package/dist/adapters/tools/git-tools.d.ts +1 -1
  245. package/dist/adapters/tools/git-tools.js +1 -1
  246. package/dist/adapters/tools/git-tools.js.map +1 -1
  247. package/dist/adapters/tools/mcp-connection.d.ts +2 -0
  248. package/dist/adapters/tools/mcp-connection.js +93 -0
  249. package/dist/adapters/tools/mcp-connection.js.map +1 -0
  250. package/dist/adapters/tools/mcp-content.d.ts +4 -0
  251. package/dist/adapters/tools/mcp-content.js +24 -0
  252. package/dist/adapters/tools/mcp-content.js.map +1 -0
  253. package/dist/adapters/tools/mcp-launcher.constants.d.ts +1 -0
  254. package/dist/adapters/tools/mcp-launcher.constants.js +210 -0
  255. package/dist/adapters/tools/mcp-launcher.constants.js.map +1 -0
  256. package/dist/adapters/tools/mcp-process.d.ts +4 -0
  257. package/dist/adapters/tools/mcp-process.js +65 -0
  258. package/dist/adapters/tools/mcp-process.js.map +1 -0
  259. package/dist/adapters/tools/mcp-resources.d.ts +5 -0
  260. package/dist/adapters/tools/mcp-resources.js +157 -0
  261. package/dist/adapters/tools/mcp-resources.js.map +1 -0
  262. package/dist/adapters/tools/mcp-tools.d.ts +6 -0
  263. package/dist/adapters/tools/mcp-tools.js +98 -0
  264. package/dist/adapters/tools/mcp-tools.js.map +1 -0
  265. package/dist/adapters/tools/mcp.constants.d.ts +22 -0
  266. package/dist/adapters/tools/mcp.constants.js +24 -0
  267. package/dist/adapters/tools/mcp.constants.js.map +1 -0
  268. package/dist/adapters/tools/mcp.d.ts +4 -0
  269. package/dist/adapters/tools/mcp.js +88 -0
  270. package/dist/adapters/tools/mcp.js.map +1 -0
  271. package/dist/adapters/tools/mcp.types.d.ts +55 -0
  272. package/dist/adapters/tools/mcp.types.js +2 -0
  273. package/dist/adapters/tools/mcp.types.js.map +1 -0
  274. package/dist/adapters/tools/search-tools.d.ts +1 -1
  275. package/dist/adapters/tools/search-tools.js +1 -1
  276. package/dist/adapters/tools/search-tools.js.map +1 -1
  277. package/dist/adapters/tools/shell-tools.d.ts +1 -1
  278. package/dist/adapters/tools/shell-tools.js +1 -1
  279. package/dist/adapters/tools/shell-tools.js.map +1 -1
  280. package/dist/adapters/triggers/github-webhook.d.ts +4 -0
  281. package/dist/adapters/triggers/github-webhook.js +41 -0
  282. package/dist/adapters/triggers/github-webhook.js.map +1 -0
  283. package/dist/adapters/triggers/gitlab-webhook.d.ts +4 -0
  284. package/dist/adapters/triggers/gitlab-webhook.js +48 -0
  285. package/dist/adapters/triggers/gitlab-webhook.js.map +1 -0
  286. package/dist/adapters/triggers/slack-request.d.ts +4 -0
  287. package/dist/adapters/triggers/slack-request.js +55 -0
  288. package/dist/adapters/triggers/slack-request.js.map +1 -0
  289. package/dist/adapters/triggers/standard-webhook.d.ts +6 -0
  290. package/dist/adapters/triggers/standard-webhook.js +50 -0
  291. package/dist/adapters/triggers/standard-webhook.js.map +1 -0
  292. package/dist/adapters/triggers/trigger-body.d.ts +5 -0
  293. package/dist/adapters/triggers/trigger-body.js +16 -0
  294. package/dist/adapters/triggers/trigger-body.js.map +1 -0
  295. package/dist/adapters/triggers/trigger-events.d.ts +6 -0
  296. package/dist/adapters/triggers/trigger-events.js +91 -0
  297. package/dist/adapters/triggers/trigger-events.js.map +1 -0
  298. package/dist/adapters/triggers/triggers.types.d.ts +47 -0
  299. package/dist/adapters/triggers/triggers.types.js +2 -0
  300. package/dist/adapters/triggers/triggers.types.js.map +1 -0
  301. package/dist/application/agent-bootstrap.js +16 -19
  302. package/dist/application/agent-bootstrap.js.map +1 -1
  303. package/dist/application/agent-bootstrap.types.d.ts +2 -11
  304. package/dist/application/agent-bootstrap.types.js.map +1 -1
  305. package/dist/application/agent-configuration.d.ts +4 -0
  306. package/dist/application/agent-configuration.js +50 -0
  307. package/dist/application/agent-configuration.js.map +1 -0
  308. package/dist/application/agent-failure.d.ts +11 -0
  309. package/dist/application/agent-failure.js +48 -0
  310. package/dist/application/agent-failure.js.map +1 -0
  311. package/dist/application/agent-fallback.d.ts +5 -0
  312. package/dist/application/agent-fallback.js +90 -0
  313. package/dist/application/agent-fallback.js.map +1 -0
  314. package/dist/application/agent-fallback.types.d.ts +9 -0
  315. package/dist/application/agent-fallback.types.js +2 -0
  316. package/dist/application/agent-fallback.types.js.map +1 -0
  317. package/dist/application/agent-output.js +19 -2
  318. package/dist/application/agent-output.js.map +1 -1
  319. package/dist/application/agent-storage.js +5 -10
  320. package/dist/application/agent-storage.js.map +1 -1
  321. package/dist/application/agent-turn.js +54 -22
  322. package/dist/application/agent-turn.js.map +1 -1
  323. package/dist/application/artifact-tasks.d.ts +1 -1
  324. package/dist/application/artifact-tasks.js +3 -3
  325. package/dist/application/artifact-tasks.js.map +1 -1
  326. package/dist/application/cli-steering.d.ts +6 -0
  327. package/dist/application/cli-steering.js +107 -0
  328. package/dist/application/cli-steering.js.map +1 -0
  329. package/dist/application/cli-steering.types.d.ts +15 -0
  330. package/dist/application/cli-steering.types.js +2 -0
  331. package/dist/application/cli-steering.types.js.map +1 -0
  332. package/dist/application/configuration-installer.constants.d.ts +1 -0
  333. package/dist/application/configuration-installer.constants.js +37 -0
  334. package/dist/application/configuration-installer.constants.js.map +1 -0
  335. package/dist/application/conversation-stores.d.ts +13 -0
  336. package/dist/application/conversation-stores.js +15 -0
  337. package/dist/application/conversation-stores.js.map +1 -0
  338. package/dist/application/custom-turn.js +11 -4
  339. package/dist/application/custom-turn.js.map +1 -1
  340. package/dist/application/dispatch-observation.js +14 -1
  341. package/dist/application/dispatch-observation.js.map +1 -1
  342. package/dist/application/dispatch-validation.js +10 -1
  343. package/dist/application/dispatch-validation.js.map +1 -1
  344. package/dist/application/dispatch.d.ts +2 -4
  345. package/dist/application/dispatch.js +20 -5
  346. package/dist/application/dispatch.js.map +1 -1
  347. package/dist/application/doctor-agent.constants.d.ts +2 -2
  348. package/dist/application/doctor-agent.constants.js +11 -45
  349. package/dist/application/doctor-agent.constants.js.map +1 -1
  350. package/dist/application/doctor-protocol.js +1 -2
  351. package/dist/application/doctor-protocol.js.map +1 -1
  352. package/dist/application/doctor.types.d.ts +4 -1
  353. package/dist/application/doctor.types.js.map +1 -1
  354. package/dist/application/execution.constants.d.ts +2 -0
  355. package/dist/application/execution.constants.js +2 -0
  356. package/dist/application/execution.constants.js.map +1 -1
  357. package/dist/application/execution.js +13 -5
  358. package/dist/application/execution.js.map +1 -1
  359. package/dist/application/execution.types.d.ts +11 -2
  360. package/dist/application/execution.types.js.map +1 -1
  361. package/dist/application/harness-loop.js +20 -5
  362. package/dist/application/harness-loop.js.map +1 -1
  363. package/dist/application/harness-mcp.d.ts +4 -0
  364. package/dist/application/harness-mcp.js +16 -0
  365. package/dist/application/harness-mcp.js.map +1 -0
  366. package/dist/application/harness-steering.d.ts +4 -0
  367. package/dist/application/harness-steering.js +16 -0
  368. package/dist/application/harness-steering.js.map +1 -0
  369. package/dist/application/harness-subagent.js +9 -4
  370. package/dist/application/harness-subagent.js.map +1 -1
  371. package/dist/application/harness.types.d.ts +12 -0
  372. package/dist/application/harness.types.js.map +1 -1
  373. package/dist/application/interactive-task-execution.d.ts +3 -0
  374. package/dist/application/interactive-task-execution.js +76 -0
  375. package/dist/application/interactive-task-execution.js.map +1 -0
  376. package/dist/application/interactive-task-protocol.d.ts +4 -0
  377. package/dist/application/interactive-task-protocol.js +56 -0
  378. package/dist/application/interactive-task-protocol.js.map +1 -0
  379. package/dist/application/interactive-task.constants.d.ts +4 -0
  380. package/dist/application/interactive-task.constants.js +7 -0
  381. package/dist/application/interactive-task.constants.js.map +1 -0
  382. package/dist/application/interactive-task.d.ts +3 -0
  383. package/dist/application/interactive-task.js +84 -0
  384. package/dist/application/interactive-task.js.map +1 -0
  385. package/dist/application/interactive-task.types.d.ts +44 -0
  386. package/dist/application/interactive-task.types.js +2 -0
  387. package/dist/application/interactive-task.types.js.map +1 -0
  388. package/dist/application/outpost.types.d.ts +8 -2
  389. package/dist/application/outpost.types.js.map +1 -1
  390. package/dist/application/queue-worker.js +19 -1
  391. package/dist/application/queue-worker.js.map +1 -1
  392. package/dist/application/queued-task.d.ts +1 -1
  393. package/dist/application/queued-task.js +20 -5
  394. package/dist/application/queued-task.js.map +1 -1
  395. package/dist/application/quota-resume.constants.d.ts +1 -0
  396. package/dist/application/quota-resume.constants.js +2 -0
  397. package/dist/application/quota-resume.constants.js.map +1 -0
  398. package/dist/application/quota-resume.d.ts +9 -0
  399. package/dist/application/quota-resume.js +38 -0
  400. package/dist/application/quota-resume.js.map +1 -0
  401. package/dist/application/quota-resume.types.d.ts +1 -0
  402. package/dist/application/quota-resume.types.js +2 -0
  403. package/dist/application/quota-resume.types.js.map +1 -0
  404. package/dist/application/recovery-retention-policy.js +1 -1
  405. package/dist/application/recovery-retention-policy.js.map +1 -1
  406. package/dist/application/recovery-retention.js +3 -3
  407. package/dist/application/recovery-retention.js.map +1 -1
  408. package/dist/application/recovery-retention.types.d.ts +1 -1
  409. package/dist/application/recovery-retention.types.js.map +1 -1
  410. package/dist/application/remote-workspace.js +2 -1
  411. package/dist/application/remote-workspace.js.map +1 -1
  412. package/dist/application/replay-recording.d.ts +2 -0
  413. package/dist/application/replay-recording.js +22 -0
  414. package/dist/application/replay-recording.js.map +1 -0
  415. package/dist/application/replay-turn.d.ts +4 -0
  416. package/dist/application/replay-turn.js +67 -0
  417. package/dist/application/replay-turn.js.map +1 -0
  418. package/dist/application/replay-workspace.d.ts +4 -0
  419. package/dist/application/replay-workspace.js +71 -0
  420. package/dist/application/replay-workspace.js.map +1 -0
  421. package/dist/application/replay-workspace.types.d.ts +6 -0
  422. package/dist/application/replay-workspace.types.js +2 -0
  423. package/dist/application/replay-workspace.types.js.map +1 -0
  424. package/dist/application/repository-fingerprint.d.ts +1 -0
  425. package/dist/application/repository-fingerprint.js +18 -0
  426. package/dist/application/repository-fingerprint.js.map +1 -0
  427. package/dist/application/sandbox-agents.js +8 -6
  428. package/dist/application/sandbox-agents.js.map +1 -1
  429. package/dist/application/sandbox-attach.js +6 -6
  430. package/dist/application/sandbox-attach.js.map +1 -1
  431. package/dist/application/sandbox-dispatch.js +86 -42
  432. package/dist/application/sandbox-dispatch.js.map +1 -1
  433. package/dist/application/sandbox-provision.js +6 -4
  434. package/dist/application/sandbox-provision.js.map +1 -1
  435. package/dist/application/sandbox-session.types.d.ts +20 -0
  436. package/dist/application/sandbox-session.types.js.map +1 -1
  437. package/dist/application/sandbox.js +3 -2
  438. package/dist/application/sandbox.js.map +1 -1
  439. package/dist/application/schedules.constants.d.ts +3 -0
  440. package/dist/application/schedules.constants.js +4 -0
  441. package/dist/application/schedules.constants.js.map +1 -0
  442. package/dist/application/schedules.d.ts +5 -0
  443. package/dist/application/schedules.js +80 -0
  444. package/dist/application/schedules.js.map +1 -0
  445. package/dist/application/schedules.types.d.ts +30 -0
  446. package/dist/application/schedules.types.js +2 -0
  447. package/dist/application/schedules.types.js.map +1 -0
  448. package/dist/application/speculation-checkpoint.js +19 -2
  449. package/dist/application/speculation-checkpoint.js.map +1 -1
  450. package/dist/application/speculation-checkpoint.types.d.ts +1 -1
  451. package/dist/application/speculation-checkpoint.types.js.map +1 -1
  452. package/dist/application/speculation-resume.js +21 -0
  453. package/dist/application/speculation-resume.js.map +1 -1
  454. package/dist/application/speculation-run.js +18 -1
  455. package/dist/application/speculation-run.js.map +1 -1
  456. package/dist/application/speculation.types.d.ts +9 -4
  457. package/dist/application/speculation.types.js.map +1 -1
  458. package/dist/application/steering-scope.d.ts +7 -0
  459. package/dist/application/steering-scope.js +33 -0
  460. package/dist/application/steering-scope.js.map +1 -0
  461. package/dist/application/steering-turns.d.ts +4 -0
  462. package/dist/application/steering-turns.js +47 -0
  463. package/dist/application/steering-turns.js.map +1 -0
  464. package/dist/application/steering-turns.types.d.ts +7 -0
  465. package/dist/application/steering-turns.types.js +2 -0
  466. package/dist/application/steering-turns.types.js.map +1 -0
  467. package/dist/application/stop-reason.js +3 -0
  468. package/dist/application/stop-reason.js.map +1 -1
  469. package/dist/application/tasks.d.ts +3 -3
  470. package/dist/application/tasks.js +18 -11
  471. package/dist/application/tasks.js.map +1 -1
  472. package/dist/application/tasks.types.d.ts +7 -2
  473. package/dist/application/tasks.types.js.map +1 -1
  474. package/dist/application/tool-execution.js +1 -0
  475. package/dist/application/tool-execution.js.map +1 -1
  476. package/dist/application/transport-inspection.constants.js +1 -0
  477. package/dist/application/transport-inspection.constants.js.map +1 -1
  478. package/dist/application/transport-retention.js +33 -1
  479. package/dist/application/transport-retention.js.map +1 -1
  480. package/dist/application/workflow-job.d.ts +4 -0
  481. package/dist/application/workflow-job.js +83 -0
  482. package/dist/application/workflow-job.js.map +1 -0
  483. package/dist/application/workflow-job.types.d.ts +21 -0
  484. package/dist/application/workflow-job.types.js +2 -0
  485. package/dist/application/workflow-job.types.js.map +1 -0
  486. package/dist/cli/image-recipe.d.ts +4 -0
  487. package/dist/cli/image-recipe.js +28 -0
  488. package/dist/cli/image-recipe.js.map +1 -0
  489. package/dist/cli/init-authentication.d.ts +2 -1
  490. package/dist/cli/init-authentication.js +2 -4
  491. package/dist/cli/init-authentication.js.map +1 -1
  492. package/dist/cli/init-command.js +4 -3
  493. package/dist/cli/init-command.js.map +1 -1
  494. package/dist/cli/main.constants.d.ts +2 -59
  495. package/dist/cli/main.constants.js +3 -75
  496. package/dist/cli/main.constants.js.map +1 -1
  497. package/dist/cli/main.js +0 -0
  498. package/dist/cli/scaffold-validation.js +7 -13
  499. package/dist/cli/scaffold-validation.js.map +1 -1
  500. package/dist/cli/scaffold.constants.js +3 -7
  501. package/dist/cli/scaffold.constants.js.map +1 -1
  502. package/dist/cli/scaffold.types.d.ts +4 -8
  503. package/dist/cli/scaffold.types.js.map +1 -1
  504. package/dist/cli/starters.js +13 -5
  505. package/dist/cli/starters.js.map +1 -1
  506. package/dist/domain/agent-observation.js +1 -0
  507. package/dist/domain/agent-observation.js.map +1 -1
  508. package/dist/domain/agent.d.ts +3 -3
  509. package/dist/domain/agent.js +2 -2
  510. package/dist/domain/agent.js.map +1 -1
  511. package/dist/domain/agent.types.d.ts +61 -3
  512. package/dist/domain/agent.types.js.map +1 -1
  513. package/dist/domain/artifact.d.ts +2 -4
  514. package/dist/domain/artifact.js +38 -40
  515. package/dist/domain/artifact.js.map +1 -1
  516. package/dist/domain/command.types.d.ts +2 -0
  517. package/dist/domain/command.types.js.map +1 -1
  518. package/dist/domain/conversation.d.ts +3 -0
  519. package/dist/domain/conversation.js +18 -0
  520. package/dist/domain/conversation.js.map +1 -0
  521. package/dist/domain/conversation.types.d.ts +9 -0
  522. package/dist/domain/conversation.types.js.map +1 -1
  523. package/dist/domain/cron.constants.d.ts +10 -0
  524. package/dist/domain/cron.constants.js +47 -0
  525. package/dist/domain/cron.constants.js.map +1 -0
  526. package/dist/domain/cron.d.ts +2 -0
  527. package/dist/domain/cron.js +169 -0
  528. package/dist/domain/cron.js.map +1 -0
  529. package/dist/domain/cron.types.d.ts +27 -0
  530. package/dist/domain/cron.types.js +2 -0
  531. package/dist/domain/cron.types.js.map +1 -0
  532. package/dist/domain/errors.constants.d.ts +1 -0
  533. package/dist/domain/errors.constants.js +2 -0
  534. package/dist/domain/errors.constants.js.map +1 -0
  535. package/dist/domain/errors.d.ts +2 -0
  536. package/dist/domain/errors.js +13 -0
  537. package/dist/domain/errors.js.map +1 -1
  538. package/dist/domain/errors.types.d.ts +1 -1
  539. package/dist/domain/errors.types.js.map +1 -1
  540. package/dist/domain/fallback-agent.constants.d.ts +3 -0
  541. package/dist/domain/fallback-agent.constants.js +10 -0
  542. package/dist/domain/fallback-agent.constants.js.map +1 -0
  543. package/dist/domain/fallback-agent.d.ts +7 -0
  544. package/dist/domain/fallback-agent.js +46 -0
  545. package/dist/domain/fallback-agent.js.map +1 -0
  546. package/dist/domain/fallback-agent.types.d.ts +37 -0
  547. package/dist/domain/fallback-agent.types.js +2 -0
  548. package/dist/domain/fallback-agent.types.js.map +1 -0
  549. package/dist/domain/harness.constants.js +1 -0
  550. package/dist/domain/harness.constants.js.map +1 -1
  551. package/dist/domain/harness.d.ts +1 -1
  552. package/dist/domain/harness.js +15 -9
  553. package/dist/domain/harness.js.map +1 -1
  554. package/dist/domain/harness.types.d.ts +7 -0
  555. package/dist/domain/harness.types.js.map +1 -1
  556. package/dist/domain/mcp-prompt.d.ts +3 -0
  557. package/dist/domain/mcp-prompt.js +21 -0
  558. package/dist/domain/mcp-prompt.js.map +1 -0
  559. package/dist/domain/mcp-prompt.types.d.ts +5 -0
  560. package/dist/domain/mcp-prompt.types.js +2 -0
  561. package/dist/domain/mcp-prompt.types.js.map +1 -0
  562. package/dist/domain/mcp-server.constants.d.ts +11 -0
  563. package/dist/domain/mcp-server.constants.js +37 -0
  564. package/dist/domain/mcp-server.constants.js.map +1 -0
  565. package/dist/domain/mcp-server.d.ts +7 -0
  566. package/dist/domain/mcp-server.js +186 -0
  567. package/dist/domain/mcp-server.js.map +1 -0
  568. package/dist/domain/mcp-server.types.d.ts +29 -0
  569. package/dist/domain/mcp-server.types.js +2 -0
  570. package/dist/domain/mcp-server.types.js.map +1 -0
  571. package/dist/domain/observation.types.d.ts +6 -1
  572. package/dist/domain/observation.types.js.map +1 -1
  573. package/dist/domain/ports.d.ts +2 -2
  574. package/dist/domain/ports.js.map +1 -1
  575. package/dist/domain/quota.d.ts +4 -0
  576. package/dist/domain/quota.js +21 -0
  577. package/dist/domain/quota.js.map +1 -0
  578. package/dist/domain/quota.types.d.ts +7 -0
  579. package/dist/domain/quota.types.js +2 -0
  580. package/dist/domain/quota.types.js.map +1 -0
  581. package/dist/domain/replay.constants.d.ts +11 -0
  582. package/dist/domain/replay.constants.js +44 -0
  583. package/dist/domain/replay.constants.js.map +1 -0
  584. package/dist/domain/replay.d.ts +11 -0
  585. package/dist/domain/replay.js +308 -0
  586. package/dist/domain/replay.js.map +1 -0
  587. package/dist/domain/replay.types.d.ts +103 -0
  588. package/dist/domain/replay.types.js +2 -0
  589. package/dist/domain/replay.types.js.map +1 -0
  590. package/dist/domain/response.d.ts +2 -4
  591. package/dist/domain/response.js +7 -5
  592. package/dist/domain/response.js.map +1 -1
  593. package/dist/domain/sandbox.types.d.ts +2 -0
  594. package/dist/domain/sandbox.types.js.map +1 -1
  595. package/dist/domain/steering.d.ts +10 -0
  596. package/dist/domain/steering.js +88 -0
  597. package/dist/domain/steering.js.map +1 -0
  598. package/dist/domain/steering.types.d.ts +42 -0
  599. package/dist/domain/steering.types.js +2 -0
  600. package/dist/domain/steering.types.js.map +1 -0
  601. package/dist/domain/subagent.js +2 -2
  602. package/dist/domain/subagent.js.map +1 -1
  603. package/dist/domain/task-queue.js +18 -0
  604. package/dist/domain/task-queue.js.map +1 -1
  605. package/dist/domain/task-queue.types.d.ts +9 -0
  606. package/dist/domain/task-queue.types.js.map +1 -1
  607. package/dist/domain/trigger-job.constants.d.ts +2 -0
  608. package/dist/domain/trigger-job.constants.js +3 -0
  609. package/dist/domain/trigger-job.constants.js.map +1 -0
  610. package/dist/domain/trigger-job.d.ts +5 -0
  611. package/dist/domain/trigger-job.js +22 -0
  612. package/dist/domain/trigger-job.js.map +1 -0
  613. package/dist/domain/trigger-job.types.d.ts +14 -0
  614. package/dist/domain/trigger-job.types.js +2 -0
  615. package/dist/domain/trigger-job.types.js.map +1 -0
  616. package/dist/domain/trigger.constants.d.ts +5 -0
  617. package/dist/domain/trigger.constants.js +6 -0
  618. package/dist/domain/trigger.constants.js.map +1 -0
  619. package/dist/domain/trigger.d.ts +8 -0
  620. package/dist/domain/trigger.js +32 -0
  621. package/dist/domain/trigger.js.map +1 -0
  622. package/dist/domain/trigger.types.d.ts +35 -0
  623. package/dist/domain/trigger.types.js +2 -0
  624. package/dist/domain/trigger.types.js.map +1 -0
  625. package/dist/domain/unavailable.d.ts +3 -0
  626. package/dist/domain/unavailable.js +9 -0
  627. package/dist/domain/unavailable.js.map +1 -0
  628. package/dist/domain/unavailable.types.d.ts +4 -0
  629. package/dist/domain/unavailable.types.js +2 -0
  630. package/dist/domain/unavailable.types.js.map +1 -0
  631. package/dist/domain/workflow/canonical-json.d.ts +3 -0
  632. package/dist/domain/workflow/canonical-json.js +13 -0
  633. package/dist/domain/workflow/canonical-json.js.map +1 -0
  634. package/dist/domain/workflow/checkpoint-validation.js +14 -1
  635. package/dist/domain/workflow/checkpoint-validation.js.map +1 -1
  636. package/dist/domain/workflow/checkpoint.js +13 -2
  637. package/dist/domain/workflow/checkpoint.js.map +1 -1
  638. package/dist/domain/workflow/gate-validation.js +2 -1
  639. package/dist/domain/workflow/gate-validation.js.map +1 -1
  640. package/dist/domain/workflow/gates.d.ts +2 -2
  641. package/dist/domain/workflow/gates.js +4 -4
  642. package/dist/domain/workflow/gates.js.map +1 -1
  643. package/dist/domain/workflow/input-validation.d.ts +7 -0
  644. package/dist/domain/workflow/input-validation.js +82 -0
  645. package/dist/domain/workflow/input-validation.js.map +1 -0
  646. package/dist/domain/workflow/input.d.ts +10 -0
  647. package/dist/domain/workflow/input.js +93 -0
  648. package/dist/domain/workflow/input.js.map +1 -0
  649. package/dist/domain/workflow/input.types.d.ts +37 -0
  650. package/dist/domain/workflow/input.types.js +2 -0
  651. package/dist/domain/workflow/input.types.js.map +1 -0
  652. package/dist/domain/workflow/loop-runner.d.ts +3 -0
  653. package/dist/domain/workflow/loop-runner.js +91 -0
  654. package/dist/domain/workflow/loop-runner.js.map +1 -0
  655. package/dist/domain/workflow/loop-task.d.ts +10 -0
  656. package/dist/domain/workflow/loop-task.js +39 -0
  657. package/dist/domain/workflow/loop-task.js.map +1 -0
  658. package/dist/domain/workflow/loop-task.types.d.ts +28 -0
  659. package/dist/domain/workflow/loop-task.types.js +2 -0
  660. package/dist/domain/workflow/loop-task.types.js.map +1 -0
  661. package/dist/domain/workflow/loop-validation.d.ts +4 -0
  662. package/dist/domain/workflow/loop-validation.js +62 -0
  663. package/dist/domain/workflow/loop-validation.js.map +1 -0
  664. package/dist/domain/workflow/quota-pause.d.ts +7 -0
  665. package/dist/domain/workflow/quota-pause.js +83 -0
  666. package/dist/domain/workflow/quota-pause.js.map +1 -0
  667. package/dist/domain/workflow/quota-pause.types.d.ts +14 -0
  668. package/dist/domain/workflow/quota-pause.types.js +2 -0
  669. package/dist/domain/workflow/quota-pause.types.js.map +1 -0
  670. package/dist/domain/workflow/quota-validation.d.ts +2 -0
  671. package/dist/domain/workflow/quota-validation.js +30 -0
  672. package/dist/domain/workflow/quota-validation.js.map +1 -0
  673. package/dist/domain/workflow/task-cache-entry.d.ts +3 -0
  674. package/dist/domain/workflow/task-cache-entry.js +47 -0
  675. package/dist/domain/workflow/task-cache-entry.js.map +1 -0
  676. package/dist/domain/workflow/task-cache.constants.d.ts +3 -0
  677. package/dist/domain/workflow/task-cache.constants.js +3 -0
  678. package/dist/domain/workflow/task-cache.constants.js.map +1 -0
  679. package/dist/domain/workflow/task-cache.d.ts +6 -0
  680. package/dist/domain/workflow/task-cache.js +92 -0
  681. package/dist/domain/workflow/task-cache.js.map +1 -0
  682. package/dist/domain/workflow/task-cache.types.d.ts +35 -0
  683. package/dist/domain/workflow/task-cache.types.js +2 -0
  684. package/dist/domain/workflow/task-cache.types.js.map +1 -0
  685. package/dist/domain/workflow/task-runner.js +100 -34
  686. package/dist/domain/workflow/task-runner.js.map +1 -1
  687. package/dist/domain/workflow/task.d.ts +1 -1
  688. package/dist/domain/workflow/task.js +22 -1
  689. package/dist/domain/workflow/task.js.map +1 -1
  690. package/dist/domain/workflow/validation.js +13 -2
  691. package/dist/domain/workflow/validation.js.map +1 -1
  692. package/dist/domain/workflow/workflow-scheduler.js +27 -2
  693. package/dist/domain/workflow/workflow-scheduler.js.map +1 -1
  694. package/dist/domain/workflow/workflow-state.js +20 -3
  695. package/dist/domain/workflow/workflow-state.js.map +1 -1
  696. package/dist/domain/workflow.d.ts +2 -2
  697. package/dist/domain/workflow.js +2 -2
  698. package/dist/domain/workflow.js.map +1 -1
  699. package/dist/domain/workflow.types.d.ts +26 -3
  700. package/dist/domain/workflow.types.js.map +1 -1
  701. package/dist/index.d.ts +78 -32
  702. package/dist/index.js +51 -28
  703. package/dist/index.js.map +1 -1
  704. package/dist/infrastructure/conversations/harness-store.d.ts +1 -1
  705. package/dist/infrastructure/conversations/harness-store.js +2 -1
  706. package/dist/infrastructure/conversations/harness-store.js.map +1 -1
  707. package/dist/infrastructure/conversations/layout.types.d.ts +6 -1
  708. package/dist/infrastructure/conversations/layout.types.js.map +1 -1
  709. package/dist/infrastructure/conversations/session-bundle.constants.js +36 -62
  710. package/dist/infrastructure/conversations/session-bundle.constants.js.map +1 -1
  711. package/dist/infrastructure/conversations/session-bundle.d.ts +8 -5
  712. package/dist/infrastructure/conversations/session-bundle.js +64 -7
  713. package/dist/infrastructure/conversations/session-bundle.js.map +1 -1
  714. package/dist/infrastructure/conversations/session-bundle.types.d.ts +48 -1
  715. package/dist/infrastructure/conversations/session-bundle.types.js.map +1 -1
  716. package/dist/infrastructure/conversations/transcript-store.d.ts +4 -0
  717. package/dist/infrastructure/conversations/transcript-store.js +134 -0
  718. package/dist/infrastructure/conversations/transcript-store.js.map +1 -0
  719. package/dist/infrastructure/conversations.d.ts +6 -29
  720. package/dist/infrastructure/conversations.js +5 -37
  721. package/dist/infrastructure/conversations.js.map +1 -1
  722. package/dist/infrastructure/conversations.types.d.ts +2 -2
  723. package/dist/infrastructure/conversations.types.js.map +1 -1
  724. package/dist/infrastructure/custom-reporter.d.ts +1 -1
  725. package/dist/infrastructure/custom-reporter.js +1 -1
  726. package/dist/infrastructure/custom-reporter.js.map +1 -1
  727. package/dist/infrastructure/git/command.d.ts +2 -1
  728. package/dist/infrastructure/git/command.js +2 -2
  729. package/dist/infrastructure/git/command.js.map +1 -1
  730. package/dist/infrastructure/git/lock.constants.d.ts +4 -0
  731. package/dist/infrastructure/git/lock.constants.js +5 -0
  732. package/dist/infrastructure/git/lock.constants.js.map +1 -0
  733. package/dist/infrastructure/git/lock.js +19 -2
  734. package/dist/infrastructure/git/lock.js.map +1 -1
  735. package/dist/infrastructure/git/replay-commits.constants.d.ts +5 -0
  736. package/dist/infrastructure/git/replay-commits.constants.js +6 -0
  737. package/dist/infrastructure/git/replay-commits.constants.js.map +1 -0
  738. package/dist/infrastructure/git/replay-commits.d.ts +2 -0
  739. package/dist/infrastructure/git/replay-commits.js +92 -0
  740. package/dist/infrastructure/git/replay-commits.js.map +1 -0
  741. package/dist/infrastructure/inspection-file.d.ts +4 -0
  742. package/dist/infrastructure/inspection-file.js +9 -2
  743. package/dist/infrastructure/inspection-file.js.map +1 -1
  744. package/dist/infrastructure/journal.js +2 -2
  745. package/dist/infrastructure/journal.js.map +1 -1
  746. package/dist/infrastructure/journal.types.d.ts +1 -0
  747. package/dist/infrastructure/journal.types.js.map +1 -1
  748. package/dist/infrastructure/local-transport.d.ts +1 -1
  749. package/dist/infrastructure/local-transport.js +33 -7
  750. package/dist/infrastructure/local-transport.js.map +1 -1
  751. package/dist/infrastructure/opentelemetry.d.ts +1 -1
  752. package/dist/infrastructure/opentelemetry.js +1 -1
  753. package/dist/infrastructure/opentelemetry.js.map +1 -1
  754. package/dist/infrastructure/process.js +19 -5
  755. package/dist/infrastructure/process.js.map +1 -1
  756. package/dist/infrastructure/reporter.d.ts +1 -1
  757. package/dist/infrastructure/reporter.js +15 -1
  758. package/dist/infrastructure/reporter.js.map +1 -1
  759. package/dist/infrastructure/repository-transport.js +2 -2
  760. package/dist/infrastructure/repository-transport.js.map +1 -1
  761. package/dist/infrastructure/s3-transport.d.ts +1 -1
  762. package/dist/infrastructure/s3-transport.js +1 -1
  763. package/dist/infrastructure/s3-transport.js.map +1 -1
  764. package/dist/infrastructure/storage-inventory.types.d.ts +1 -1
  765. package/dist/infrastructure/storage-inventory.types.js.map +1 -1
  766. package/dist/infrastructure/task-queue-bullmq.d.ts +1 -1
  767. package/dist/infrastructure/task-queue-bullmq.js +1 -1
  768. package/dist/infrastructure/task-queue-bullmq.js.map +1 -1
  769. package/dist/infrastructure/task-queue-http.d.ts +1 -1
  770. package/dist/infrastructure/task-queue-http.js +1 -1
  771. package/dist/infrastructure/task-queue-http.js.map +1 -1
  772. package/dist/infrastructure/task-queue.d.ts +1 -1
  773. package/dist/infrastructure/task-queue.js +1 -1
  774. package/dist/infrastructure/task-queue.js.map +1 -1
  775. package/dist/infrastructure/transport-artifact-store.d.ts +1 -1
  776. package/dist/infrastructure/transport-artifact-store.js +1 -1
  777. package/dist/infrastructure/transport-artifact-store.js.map +1 -1
  778. package/dist/infrastructure/transport-checkpoint.d.ts +1 -1
  779. package/dist/infrastructure/transport-checkpoint.js +1 -1
  780. package/dist/infrastructure/transport-checkpoint.js.map +1 -1
  781. package/dist/infrastructure/transport-conversations.d.ts +2 -2
  782. package/dist/infrastructure/transport-conversations.js +11 -15
  783. package/dist/infrastructure/transport-conversations.js.map +1 -1
  784. package/dist/infrastructure/transport-task-cache.constants.d.ts +2 -0
  785. package/dist/infrastructure/transport-task-cache.constants.js +3 -0
  786. package/dist/infrastructure/transport-task-cache.constants.js.map +1 -0
  787. package/dist/infrastructure/transport-task-cache.d.ts +3 -0
  788. package/dist/infrastructure/transport-task-cache.js +56 -0
  789. package/dist/infrastructure/transport-task-cache.js.map +1 -0
  790. package/dist/infrastructure/transport-task-cache.types.d.ts +4 -0
  791. package/dist/infrastructure/transport-task-cache.types.js +2 -0
  792. package/dist/infrastructure/transport-task-cache.types.js.map +1 -0
  793. package/dist/infrastructure/transport.constants.d.ts +2 -0
  794. package/dist/infrastructure/transport.constants.js +2 -0
  795. package/dist/infrastructure/transport.constants.js.map +1 -1
  796. package/dist/infrastructure/trigger-server.constants.d.ts +2 -0
  797. package/dist/infrastructure/trigger-server.constants.js +3 -0
  798. package/dist/infrastructure/trigger-server.constants.js.map +1 -0
  799. package/dist/infrastructure/trigger-server.d.ts +3 -0
  800. package/dist/infrastructure/trigger-server.js +153 -0
  801. package/dist/infrastructure/trigger-server.js.map +1 -0
  802. package/dist/infrastructure/trigger-server.types.d.ts +30 -0
  803. package/dist/infrastructure/trigger-server.types.js +2 -0
  804. package/dist/infrastructure/trigger-server.types.js.map +1 -0
  805. package/dist/infrastructure/webhook-signature.d.ts +8 -0
  806. package/dist/infrastructure/webhook-signature.js +43 -0
  807. package/dist/infrastructure/webhook-signature.js.map +1 -0
  808. package/dist/infrastructure/workflow-decision-signature.d.ts +1 -1
  809. package/dist/infrastructure/workflow-decision-signature.js +1 -1
  810. package/dist/infrastructure/workflow-decision-signature.js.map +1 -1
  811. package/dist/providers/agents.d.ts +8 -8
  812. package/dist/providers/agents.js +5 -5
  813. package/dist/providers/agents.js.map +1 -1
  814. package/dist/providers/cloud-input.constants.d.ts +2 -0
  815. package/dist/providers/cloud-input.constants.js +24 -0
  816. package/dist/providers/cloud-input.constants.js.map +1 -0
  817. package/dist/providers/cloud-input.d.ts +8 -0
  818. package/dist/providers/cloud-input.js +42 -0
  819. package/dist/providers/cloud-input.js.map +1 -0
  820. package/dist/providers/cloud-input.types.d.ts +4 -0
  821. package/dist/providers/cloud-input.types.js +2 -0
  822. package/dist/providers/cloud-input.types.js.map +1 -0
  823. package/dist/providers/container.js +1 -0
  824. package/dist/providers/container.js.map +1 -1
  825. package/dist/providers/daytona-command.js +31 -13
  826. package/dist/providers/daytona-command.js.map +1 -1
  827. package/dist/providers/daytona.d.ts +1 -1
  828. package/dist/providers/daytona.js +2 -2
  829. package/dist/providers/daytona.js.map +1 -1
  830. package/dist/providers/docker.d.ts +1 -1
  831. package/dist/providers/docker.js +1 -1
  832. package/dist/providers/docker.js.map +1 -1
  833. package/dist/providers/factories.d.ts +2 -2
  834. package/dist/providers/factories.js +2 -2
  835. package/dist/providers/factories.js.map +1 -1
  836. package/dist/providers/firecracker.d.ts +1 -1
  837. package/dist/providers/firecracker.js +2 -1
  838. package/dist/providers/firecracker.js.map +1 -1
  839. package/dist/providers/local.d.ts +1 -1
  840. package/dist/providers/local.js +2 -1
  841. package/dist/providers/local.js.map +1 -1
  842. package/dist/providers/podman.d.ts +1 -1
  843. package/dist/providers/podman.js +1 -1
  844. package/dist/providers/podman.js.map +1 -1
  845. package/dist/providers/vercel-command.js +51 -14
  846. package/dist/providers/vercel-command.js.map +1 -1
  847. package/dist/providers/vercel.d.ts +1 -1
  848. package/dist/providers/vercel.js +2 -2
  849. package/dist/providers/vercel.js.map +1 -1
  850. package/dist/providers/versions.constants.d.ts +1 -7
  851. package/dist/providers/versions.constants.js +2 -7
  852. package/dist/providers/versions.constants.js.map +1 -1
  853. package/package.json +17 -16
  854. package/dist/adapters/agents/antigravity-adapter.d.ts +0 -3
  855. package/dist/adapters/agents/antigravity-adapter.js +0 -41
  856. package/dist/adapters/agents/antigravity-adapter.js.map +0 -1
  857. package/dist/adapters/agents/antigravity-authentication.d.ts +0 -2
  858. package/dist/adapters/agents/antigravity-authentication.js.map +0 -1
  859. package/dist/adapters/agents/antigravity-diagnostics.js.map +0 -1
  860. package/dist/adapters/agents/antigravity-events.js.map +0 -1
  861. package/dist/adapters/agents/antigravity-request.d.ts +0 -5
  862. package/dist/adapters/agents/antigravity-request.js.map +0 -1
  863. package/dist/adapters/agents/antigravity.constants.d.ts +0 -3
  864. package/dist/adapters/agents/antigravity.constants.js +0 -4
  865. package/dist/adapters/agents/antigravity.constants.js.map +0 -1
  866. package/dist/adapters/agents/antigravity.types.d.ts +0 -7
  867. package/dist/adapters/agents/antigravity.types.js.map +0 -1
  868. package/dist/adapters/agents/claude-adapter.d.ts +0 -3
  869. package/dist/adapters/agents/claude-adapter.js +0 -45
  870. package/dist/adapters/agents/claude-adapter.js.map +0 -1
  871. package/dist/adapters/agents/claude-authentication.d.ts +0 -2
  872. package/dist/adapters/agents/claude-authentication.js.map +0 -1
  873. package/dist/adapters/agents/claude-diagnostics.d.ts +0 -1
  874. package/dist/adapters/agents/claude-diagnostics.js.map +0 -1
  875. package/dist/adapters/agents/claude-events.js.map +0 -1
  876. package/dist/adapters/agents/claude-request.d.ts +0 -4
  877. package/dist/adapters/agents/claude-request.js.map +0 -1
  878. package/dist/adapters/agents/codex-adapter.d.ts +0 -3
  879. package/dist/adapters/agents/codex-adapter.js +0 -34
  880. package/dist/adapters/agents/codex-adapter.js.map +0 -1
  881. package/dist/adapters/agents/codex-authentication.d.ts +0 -3
  882. package/dist/adapters/agents/codex-authentication.js.map +0 -1
  883. package/dist/adapters/agents/codex-diagnostics.d.ts +0 -1
  884. package/dist/adapters/agents/codex-diagnostics.js.map +0 -1
  885. package/dist/adapters/agents/codex-events.d.ts +0 -2
  886. package/dist/adapters/agents/codex-events.js.map +0 -1
  887. package/dist/adapters/agents/codex-provider.js.map +0 -1
  888. package/dist/adapters/agents/codex-request.d.ts +0 -4
  889. package/dist/adapters/agents/codex-request.js.map +0 -1
  890. package/dist/adapters/agents/copilot-adapter.d.ts +0 -3
  891. package/dist/adapters/agents/copilot-adapter.js +0 -45
  892. package/dist/adapters/agents/copilot-adapter.js.map +0 -1
  893. package/dist/adapters/agents/copilot-authentication.d.ts +0 -2
  894. package/dist/adapters/agents/copilot-authentication.js.map +0 -1
  895. package/dist/adapters/agents/copilot-diagnostics.js.map +0 -1
  896. package/dist/adapters/agents/copilot-events.js.map +0 -1
  897. package/dist/adapters/agents/copilot-request.d.ts +0 -5
  898. package/dist/adapters/agents/copilot-request.js.map +0 -1
  899. package/dist/adapters/agents/copilot-usage.js.map +0 -1
  900. package/dist/adapters/agents/copilot.types.d.ts +0 -6
  901. package/dist/adapters/agents/copilot.types.js.map +0 -1
  902. package/dist/adapters/agents/kimi-adapter.d.ts +0 -3
  903. package/dist/adapters/agents/kimi-adapter.js +0 -51
  904. package/dist/adapters/agents/kimi-adapter.js.map +0 -1
  905. package/dist/adapters/agents/kimi-authentication.js.map +0 -1
  906. package/dist/adapters/agents/kimi-diagnostics.js.map +0 -1
  907. package/dist/adapters/agents/kimi-events.d.ts +0 -2
  908. package/dist/adapters/agents/kimi-events.js.map +0 -1
  909. package/dist/adapters/agents/kimi-fork.d.ts +0 -2
  910. package/dist/adapters/agents/kimi-fork.js.map +0 -1
  911. package/dist/adapters/agents/kimi-request.d.ts +0 -5
  912. package/dist/adapters/agents/kimi-request.js.map +0 -1
  913. package/dist/adapters/agents/kimi-usage.d.ts +0 -2
  914. package/dist/adapters/agents/kimi-usage.js.map +0 -1
  915. package/dist/adapters/agents/kimi.constants.d.ts +0 -13
  916. package/dist/adapters/agents/kimi.constants.js +0 -14
  917. package/dist/adapters/agents/kimi.constants.js.map +0 -1
  918. package/dist/adapters/agents/kimi.types.d.ts +0 -7
  919. package/dist/adapters/agents/kimi.types.js.map +0 -1
  920. package/dist/adapters/agents/protocol-fixtures.constants.d.ts +0 -2
  921. package/dist/adapters/agents/protocol-fixtures.constants.js +0 -227
  922. package/dist/adapters/agents/protocol-fixtures.constants.js.map +0 -1
  923. package/dist/application/agent-bootstrap.constants.d.ts +0 -2
  924. package/dist/application/agent-bootstrap.constants.js +0 -30
  925. package/dist/application/agent-bootstrap.constants.js.map +0 -1
  926. package/dist/infrastructure/conversations/capture.d.ts +0 -4
  927. package/dist/infrastructure/conversations/capture.js +0 -87
  928. package/dist/infrastructure/conversations/capture.js.map +0 -1
  929. package/dist/infrastructure/conversations/capture.types.d.ts +0 -5
  930. package/dist/infrastructure/conversations/capture.types.js +0 -2
  931. package/dist/infrastructure/conversations/capture.types.js.map +0 -1
  932. package/dist/infrastructure/conversations/claude-layout.d.ts +0 -2
  933. package/dist/infrastructure/conversations/claude-layout.js +0 -18
  934. package/dist/infrastructure/conversations/claude-layout.js.map +0 -1
  935. package/dist/infrastructure/conversations/codex-layout.d.ts +0 -2
  936. package/dist/infrastructure/conversations/codex-layout.js +0 -17
  937. package/dist/infrastructure/conversations/codex-layout.js.map +0 -1
  938. package/dist/infrastructure/conversations/layout.d.ts +0 -3
  939. package/dist/infrastructure/conversations/layout.js +0 -9
  940. package/dist/infrastructure/conversations/layout.js.map +0 -1
  941. package/dist/infrastructure/conversations/locate.d.ts +0 -2
  942. package/dist/infrastructure/conversations/locate.js +0 -24
  943. package/dist/infrastructure/conversations/locate.js.map +0 -1
  944. package/dist/infrastructure/conversations/native-store.d.ts +0 -3
  945. package/dist/infrastructure/conversations/native-store.js +0 -27
  946. package/dist/infrastructure/conversations/native-store.js.map +0 -1
  947. package/dist/infrastructure/conversations/paths.d.ts +0 -4
  948. package/dist/infrastructure/conversations/paths.js +0 -11
  949. package/dist/infrastructure/conversations/paths.js.map +0 -1
  950. package/dist/infrastructure/conversations/restore.d.ts +0 -3
  951. package/dist/infrastructure/conversations/restore.js +0 -42
  952. package/dist/infrastructure/conversations/restore.js.map +0 -1
  953. package/dist/providers/antigravity-install.constants.js.map +0 -1
  954. package/dist/providers/antigravity-install.js.map +0 -1
  955. package/dist/providers/antigravity-install.types.js.map +0 -1
  956. /package/dist/{providers → adapters/agents/antigravity}/antigravity-install.constants.d.ts +0 -0
  957. /package/dist/{providers → adapters/agents/antigravity}/antigravity-install.constants.js +0 -0
  958. /package/dist/{providers → adapters/agents/antigravity}/antigravity-install.d.ts +0 -0
  959. /package/dist/{providers → adapters/agents/antigravity}/antigravity-install.types.d.ts +0 -0
  960. /package/dist/{providers → adapters/agents/antigravity}/antigravity-install.types.js +0 -0
  961. /package/dist/adapters/agents/{antigravity.types.js → antigravity/antigravity.types.js} +0 -0
  962. /package/dist/adapters/agents/{copilot.types.js → copilot/copilot.types.js} +0 -0
  963. /package/dist/adapters/agents/{kimi.types.js → kimi/kimi.types.js} +0 -0
@@ -2,6 +2,9 @@ import type { Harness } from "./harness.types.ts";
2
2
  import type { AgentModel, ModelSpec } from "./model.types.ts";
3
3
  import type { Command, CommandResult, Variables } from "./command.types.ts";
4
4
  import type { ConversationStore } from "./conversation.types.ts";
5
+ import type { ReplayAgent } from "./replay.types.ts";
6
+ import type { SteeringMode } from "./steering.types.ts";
7
+ import type { FallbackCandidate, FallbackTrigger } from "./fallback-agent.types.ts";
5
8
  export interface Usage {
6
9
  readonly complete?: boolean;
7
10
  readonly input: number;
@@ -30,7 +33,11 @@ export type AgentEventDetails = {
30
33
  readonly truncated?: boolean;
31
34
  } | {
32
35
  readonly kind: "stopped";
33
- readonly reason: "completion" | "idle-timeout" | "deadline" | "aborted" | "oversized-event";
36
+ readonly reason: "completion" | "idle-timeout" | "deadline" | "aborted" | "oversized-event" | "steered";
37
+ } | {
38
+ readonly kind: "steer";
39
+ readonly text: string;
40
+ readonly mode: SteeringMode;
34
41
  } | {
35
42
  readonly kind: "reasoning";
36
43
  readonly text: string;
@@ -132,6 +139,17 @@ export type AgentEventDetails = {
132
139
  } | {
133
140
  readonly kind: "failure";
134
141
  readonly message: string;
142
+ } | {
143
+ readonly kind: "quota";
144
+ readonly message: string;
145
+ readonly resetAt?: string;
146
+ } | {
147
+ readonly kind: "fallback";
148
+ readonly from: FallbackCandidate;
149
+ readonly to: FallbackCandidate;
150
+ readonly failure: FallbackTrigger;
151
+ readonly message: string;
152
+ readonly resetAt?: string;
135
153
  } | {
136
154
  readonly kind: "finished";
137
155
  } | {
@@ -155,6 +173,8 @@ export type AgentEventHandlers = {
155
173
  export interface AgentInput {
156
174
  readonly text?: string;
157
175
  readonly interactive?: boolean;
176
+ /** Requests the liveInput protocol: stdin carries the encoded prompt and stays open. */
177
+ readonly liveInput?: boolean;
158
178
  readonly continuation?: {
159
179
  readonly id: string;
160
180
  readonly fork?: boolean;
@@ -166,7 +186,6 @@ export interface AgentFeatures {
166
186
  readonly requiresFinishedEvent?: boolean;
167
187
  readonly usage?: "events" | "session" | "unavailable";
168
188
  readonly variables?: Variables;
169
- readonly conversations?: "claude" | "codex" | "copilot" | "kimi";
170
189
  readonly storage?: ConversationStore;
171
190
  readonly capture?: boolean;
172
191
  readonly resumable?: boolean;
@@ -176,10 +195,32 @@ export interface AgentFeatures {
176
195
  export interface AgentAdapter extends AgentFeatures {
177
196
  fork?(id: string, invoke: (command: Command) => Promise<CommandResult>): Promise<string>;
178
197
  credentials?(variables: Variables): CredentialPlan;
198
+ /** Plans CLI configuration merged into the agent home; throws when a referenced variable is missing. */
199
+ configuration?(variables: Variables): AgentConfiguration;
179
200
  request(input: AgentInput): Command;
180
201
  events(line: string): readonly AgentEvent[];
202
+ /** Recognizes a usage-limit or rate-limit message in failure or stderr text. */
203
+ quota?(text: string): boolean;
204
+ /** Recognizes a terminal service outage or connection failure in failure or stderr text. */
205
+ unavailable?(text: string): boolean;
181
206
  usageCommand?(conversation: string): Command | undefined;
182
207
  usageResult?(text: string): Usage | undefined;
208
+ /** Protocol for adding user messages to a running turn through live stdin. */
209
+ readonly liveInput?: AgentLiveInput;
210
+ }
211
+ export interface AgentLiveInput {
212
+ /** Starts the protocol state of one turn requested with input. */
213
+ open(input: AgentInput): AgentLiveSession;
214
+ }
215
+ export interface AgentLiveSession {
216
+ /** Encodes one user message for stdin, or returns "" when the session sends it later. */
217
+ encode(text: string): string;
218
+ /** Reads one output line: user messages it confirms and protocol replies to write. */
219
+ read(line: string): AgentLiveRead;
220
+ }
221
+ export interface AgentLiveRead {
222
+ readonly consumed: number;
223
+ readonly replies: readonly string[];
183
224
  }
184
225
  export interface RequiredAgent {
185
226
  readonly agent: Agent;
@@ -201,7 +242,7 @@ export interface CustomAgent extends AgentFeatures {
201
242
  readonly harness: Harness;
202
243
  readonly model: AgentModel;
203
244
  }
204
- export type Agent = CliAgent | CustomAgent;
245
+ export type Agent = CliAgent | CustomAgent | ReplayAgent;
205
246
  export interface CliAgentOptions {
206
247
  readonly harness: CliHarness;
207
248
  readonly model?: ModelSpec;
@@ -250,6 +291,23 @@ export interface GeneratedCredential {
250
291
  readonly path: string;
251
292
  readonly content: string;
252
293
  }
294
+ export interface ConfigurationFile {
295
+ readonly path: string;
296
+ readonly section?: string;
297
+ readonly entries: Readonly<Record<string, unknown>>;
298
+ }
299
+ export interface HostConfiguration {
300
+ readonly source: HostCredentialPath;
301
+ readonly path: string;
302
+ readonly section?: string;
303
+ readonly optional?: boolean;
304
+ readonly login: string;
305
+ select(content: string): Readonly<Record<string, unknown>>;
306
+ }
307
+ export interface AgentConfiguration {
308
+ readonly files: readonly ConfigurationFile[];
309
+ readonly host?: readonly HostConfiguration[];
310
+ }
253
311
  export interface CredentialPlan {
254
312
  readonly variables: Variables;
255
313
  readonly host: readonly HostCredential[];
@@ -1 +1 @@
1
- {"version":3,"file":"agent.types.js","sourceRoot":"","sources":["../../src/domain/agent.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Harness } from \"./harness.types.ts\";\nimport type { AgentModel, ModelSpec } from \"./model.types.ts\";\nimport type { Command, CommandResult, Variables } from \"./command.types.ts\";\nimport type { ConversationStore } from \"./conversation.types.ts\";\n\nexport interface Usage {\n readonly complete?: boolean;\n readonly input: number;\n readonly cached: number;\n readonly cacheCreated?: number;\n readonly output: number;\n}\n\nexport type AgentEvent = AgentEventDetails & {\n readonly subagentId?: string;\n};\n\nexport type AgentEventDetails =\n | {\n readonly kind: \"subagent\";\n readonly id: string;\n readonly callId: string;\n readonly name: string;\n readonly status: \"started\" | \"finished\" | \"failed\";\n readonly conversation?: string;\n }\n | {\n readonly kind: \"message-usage\";\n readonly tokens: Usage;\n readonly messageId?: string;\n readonly parentCallId?: string;\n }\n | {\n readonly kind: \"stderr\";\n readonly text: string;\n readonly truncated?: boolean;\n }\n | {\n readonly kind: \"stopped\";\n readonly reason:\n | \"completion\"\n | \"idle-timeout\"\n | \"deadline\"\n | \"aborted\"\n | \"oversized-event\";\n }\n | {\n readonly kind: \"reasoning\";\n readonly text: string;\n readonly parentCallId?: string;\n }\n | {\n readonly kind: \"file-change\";\n readonly changes: unknown;\n readonly callId?: string;\n }\n | { readonly kind: \"model-request\"; readonly request: unknown }\n | { readonly kind: \"model-response\"; readonly response: unknown }\n | {\n readonly kind: \"model-retry\";\n readonly attempt: number;\n readonly message?: string;\n }\n | { readonly kind: \"model-error\"; readonly message: string }\n | { readonly kind: \"hook\"; readonly phase: string; readonly changed: boolean }\n | { readonly kind: \"instructions-loaded\"; readonly count: number }\n | { readonly kind: \"skills-loaded\"; readonly names: readonly string[] }\n | {\n readonly kind: \"tool-output\";\n readonly callId: string;\n readonly channel: \"stdout\" | \"stderr\";\n readonly text: string;\n }\n | {\n readonly kind: \"phase\";\n readonly name: string;\n readonly agent?: string;\n readonly branch?: string;\n readonly directory?: string;\n }\n | {\n readonly kind: \"summary\";\n readonly durationMs: number;\n readonly status: number;\n readonly tokens: Usage;\n }\n | { readonly kind: \"warning\"; readonly message: string }\n | { readonly kind: \"text\"; readonly text: string }\n | { readonly kind: \"text-delta\"; readonly text: string }\n | { readonly kind: \"result\"; readonly text: string }\n | { readonly kind: \"prompt\"; readonly text: string }\n | {\n readonly kind: \"tool\";\n readonly name: string;\n readonly input: unknown;\n readonly callId?: string;\n readonly parentCallId?: string;\n }\n | {\n readonly kind: \"tool-result\";\n readonly callId: string;\n readonly name: string;\n readonly isError: boolean;\n readonly preview: string;\n readonly characters: number;\n readonly parentCallId?: string;\n }\n | { readonly kind: \"step\"; readonly index: number }\n | {\n readonly kind: \"tool-denied\";\n readonly callId: string;\n readonly name: string;\n readonly reason: string;\n }\n | { readonly kind: \"stop-prevented\"; readonly message: string }\n | {\n readonly kind: \"compaction\";\n readonly strategy: string;\n readonly messages: number;\n }\n | { readonly kind: \"conversation\"; readonly id: string }\n | {\n readonly kind: \"usage\";\n readonly tokens: Usage;\n readonly cumulative?: boolean;\n }\n | { readonly kind: \"failure\"; readonly message: string }\n | { readonly kind: \"finished\" }\n | {\n readonly kind: \"raw\";\n readonly value: unknown;\n readonly bytes?: number;\n readonly truncated?: boolean;\n };\n\nexport type AgentObservation = AgentEvent & {\n readonly pass: number;\n readonly at: string;\n readonly seq?: number;\n readonly source?: import(\"./observation.types.ts\").ObservationSource;\n readonly scope?: import(\"./observation.types.ts\").ObservationScope;\n};\n\nexport type AgentEventHandlers = {\n readonly [Kind in AgentEvent[\"kind\"]]?: (\n event: Extract<AgentEvent, { kind: Kind }>,\n ) => void;\n};\n\nexport interface AgentInput {\n readonly text?: string;\n readonly interactive?: boolean;\n readonly continuation?: { readonly id: string; readonly fork?: boolean };\n}\n\nexport interface AgentFeatures {\n readonly name: string;\n readonly bootstrap?: string;\n readonly requiresFinishedEvent?: boolean;\n readonly usage?: \"events\" | \"session\" | \"unavailable\";\n readonly variables?: Variables;\n readonly conversations?: \"claude\" | \"codex\" | \"copilot\" | \"kimi\";\n readonly storage?: ConversationStore;\n readonly capture?: boolean;\n readonly resumable?: boolean;\n readonly forkable?: boolean;\n transcriptUsage?(text: string): Usage | undefined;\n}\n\nexport interface AgentAdapter extends AgentFeatures {\n fork?(\n id: string,\n invoke: (command: Command) => Promise<CommandResult>,\n ): Promise<string>;\n credentials?(variables: Variables): CredentialPlan;\n request(input: AgentInput): Command;\n events(line: string): readonly AgentEvent[];\n usageCommand?(conversation: string): Command | undefined;\n usageResult?(text: string): Usage | undefined;\n}\n\nexport interface RequiredAgent {\n readonly agent: Agent;\n}\n\nexport interface CliHarness {\n readonly kind: \"cli\";\n bind(model?: AgentModel): AgentAdapter;\n}\n\nexport type AgentHarness = CliHarness | Harness;\n\nexport interface CliAgent extends AgentAdapter {\n readonly kind: \"cli\";\n readonly harness: CliHarness;\n readonly model?: AgentModel;\n}\n\nexport interface CustomAgent extends AgentFeatures {\n readonly resumable: boolean;\n readonly capture: boolean;\n readonly kind: \"custom\";\n readonly harness: Harness;\n readonly model: AgentModel;\n}\n\nexport type Agent = CliAgent | CustomAgent;\n\nexport interface CliAgentOptions {\n readonly harness: CliHarness;\n readonly model?: ModelSpec;\n}\nexport interface CustomAgentOptions {\n readonly harness: Harness;\n readonly model: ModelSpec;\n}\nexport type AgentOptions = CliAgentOptions | CustomAgentOptions;\n\nexport type AccountCredential =\n | { readonly file: string }\n | { readonly key: string }\n | { readonly variable: string };\n\nexport type UsageCredential =\n { readonly key: string } | { readonly variable: string };\n\nexport type AgentAuthentication =\n | \"account\"\n | \"usage\"\n | { readonly account: AccountCredential }\n | { readonly usage: UsageCredential };\n\nexport interface HostCredentialPath {\n readonly path: string;\n readonly home?: { readonly variable: string; readonly path: string };\n}\n\nexport interface HostCredential {\n readonly source: HostCredentialPath;\n readonly destination:\n { readonly file: string } | { readonly variable: string };\n readonly login: string;\n readonly alternative?: string;\n select?(content: string): string;\n}\n\nexport interface GeneratedCredential {\n readonly path: string;\n readonly content: string;\n}\n\nexport interface CredentialPlan {\n readonly variables: Variables;\n readonly host: readonly HostCredential[];\n readonly files: readonly GeneratedCredential[];\n readonly commands: readonly Command[];\n}\n"]}
1
+ {"version":3,"file":"agent.types.js","sourceRoot":"","sources":["../../src/domain/agent.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Harness } from \"./harness.types.ts\";\nimport type { AgentModel, ModelSpec } from \"./model.types.ts\";\nimport type { Command, CommandResult, Variables } from \"./command.types.ts\";\nimport type { ConversationStore } from \"./conversation.types.ts\";\nimport type { ReplayAgent } from \"./replay.types.ts\";\nimport type { SteeringMode } from \"./steering.types.ts\";\nimport type {\n FallbackCandidate,\n FallbackTrigger,\n} from \"./fallback-agent.types.ts\";\n\nexport interface Usage {\n readonly complete?: boolean;\n readonly input: number;\n readonly cached: number;\n readonly cacheCreated?: number;\n readonly output: number;\n}\n\nexport type AgentEvent = AgentEventDetails & {\n readonly subagentId?: string;\n};\n\nexport type AgentEventDetails =\n | {\n readonly kind: \"subagent\";\n readonly id: string;\n readonly callId: string;\n readonly name: string;\n readonly status: \"started\" | \"finished\" | \"failed\";\n readonly conversation?: string;\n }\n | {\n readonly kind: \"message-usage\";\n readonly tokens: Usage;\n readonly messageId?: string;\n readonly parentCallId?: string;\n }\n | {\n readonly kind: \"stderr\";\n readonly text: string;\n readonly truncated?: boolean;\n }\n | {\n readonly kind: \"stopped\";\n readonly reason:\n | \"completion\"\n | \"idle-timeout\"\n | \"deadline\"\n | \"aborted\"\n | \"oversized-event\"\n | \"steered\";\n }\n | {\n readonly kind: \"steer\";\n readonly text: string;\n readonly mode: SteeringMode;\n }\n | {\n readonly kind: \"reasoning\";\n readonly text: string;\n readonly parentCallId?: string;\n }\n | {\n readonly kind: \"file-change\";\n readonly changes: unknown;\n readonly callId?: string;\n }\n | { readonly kind: \"model-request\"; readonly request: unknown }\n | { readonly kind: \"model-response\"; readonly response: unknown }\n | {\n readonly kind: \"model-retry\";\n readonly attempt: number;\n readonly message?: string;\n }\n | { readonly kind: \"model-error\"; readonly message: string }\n | { readonly kind: \"hook\"; readonly phase: string; readonly changed: boolean }\n | { readonly kind: \"instructions-loaded\"; readonly count: number }\n | { readonly kind: \"skills-loaded\"; readonly names: readonly string[] }\n | {\n readonly kind: \"tool-output\";\n readonly callId: string;\n readonly channel: \"stdout\" | \"stderr\";\n readonly text: string;\n }\n | {\n readonly kind: \"phase\";\n readonly name: string;\n readonly agent?: string;\n readonly branch?: string;\n readonly directory?: string;\n }\n | {\n readonly kind: \"summary\";\n readonly durationMs: number;\n readonly status: number;\n readonly tokens: Usage;\n }\n | { readonly kind: \"warning\"; readonly message: string }\n | { readonly kind: \"text\"; readonly text: string }\n | { readonly kind: \"text-delta\"; readonly text: string }\n | { readonly kind: \"result\"; readonly text: string }\n | { readonly kind: \"prompt\"; readonly text: string }\n | {\n readonly kind: \"tool\";\n readonly name: string;\n readonly input: unknown;\n readonly callId?: string;\n readonly parentCallId?: string;\n }\n | {\n readonly kind: \"tool-result\";\n readonly callId: string;\n readonly name: string;\n readonly isError: boolean;\n readonly preview: string;\n readonly characters: number;\n readonly parentCallId?: string;\n }\n | { readonly kind: \"step\"; readonly index: number }\n | {\n readonly kind: \"tool-denied\";\n readonly callId: string;\n readonly name: string;\n readonly reason: string;\n }\n | { readonly kind: \"stop-prevented\"; readonly message: string }\n | {\n readonly kind: \"compaction\";\n readonly strategy: string;\n readonly messages: number;\n }\n | { readonly kind: \"conversation\"; readonly id: string }\n | {\n readonly kind: \"usage\";\n readonly tokens: Usage;\n readonly cumulative?: boolean;\n }\n | { readonly kind: \"failure\"; readonly message: string }\n | {\n readonly kind: \"quota\";\n readonly message: string;\n readonly resetAt?: string;\n }\n | {\n readonly kind: \"fallback\";\n readonly from: FallbackCandidate;\n readonly to: FallbackCandidate;\n readonly failure: FallbackTrigger;\n readonly message: string;\n readonly resetAt?: string;\n }\n | { readonly kind: \"finished\" }\n | {\n readonly kind: \"raw\";\n readonly value: unknown;\n readonly bytes?: number;\n readonly truncated?: boolean;\n };\n\nexport type AgentObservation = AgentEvent & {\n readonly pass: number;\n readonly at: string;\n readonly seq?: number;\n readonly source?: import(\"./observation.types.ts\").ObservationSource;\n readonly scope?: import(\"./observation.types.ts\").ObservationScope;\n};\n\nexport type AgentEventHandlers = {\n readonly [Kind in AgentEvent[\"kind\"]]?: (\n event: Extract<AgentEvent, { kind: Kind }>,\n ) => void;\n};\n\nexport interface AgentInput {\n readonly text?: string;\n readonly interactive?: boolean;\n /** Requests the liveInput protocol: stdin carries the encoded prompt and stays open. */\n readonly liveInput?: boolean;\n readonly continuation?: { readonly id: string; readonly fork?: boolean };\n}\n\nexport interface AgentFeatures {\n readonly name: string;\n readonly bootstrap?: string;\n readonly requiresFinishedEvent?: boolean;\n readonly usage?: \"events\" | \"session\" | \"unavailable\";\n readonly variables?: Variables;\n readonly storage?: ConversationStore;\n readonly capture?: boolean;\n readonly resumable?: boolean;\n readonly forkable?: boolean;\n transcriptUsage?(text: string): Usage | undefined;\n}\n\nexport interface AgentAdapter extends AgentFeatures {\n fork?(\n id: string,\n invoke: (command: Command) => Promise<CommandResult>,\n ): Promise<string>;\n credentials?(variables: Variables): CredentialPlan;\n /** Plans CLI configuration merged into the agent home; throws when a referenced variable is missing. */\n configuration?(variables: Variables): AgentConfiguration;\n request(input: AgentInput): Command;\n events(line: string): readonly AgentEvent[];\n /** Recognizes a usage-limit or rate-limit message in failure or stderr text. */\n quota?(text: string): boolean;\n /** Recognizes a terminal service outage or connection failure in failure or stderr text. */\n unavailable?(text: string): boolean;\n usageCommand?(conversation: string): Command | undefined;\n usageResult?(text: string): Usage | undefined;\n /** Protocol for adding user messages to a running turn through live stdin. */\n readonly liveInput?: AgentLiveInput;\n}\n\nexport interface AgentLiveInput {\n /** Starts the protocol state of one turn requested with input. */\n open(input: AgentInput): AgentLiveSession;\n}\n\nexport interface AgentLiveSession {\n /** Encodes one user message for stdin, or returns \"\" when the session sends it later. */\n encode(text: string): string;\n /** Reads one output line: user messages it confirms and protocol replies to write. */\n read(line: string): AgentLiveRead;\n}\n\nexport interface AgentLiveRead {\n readonly consumed: number;\n readonly replies: readonly string[];\n}\n\nexport interface RequiredAgent {\n readonly agent: Agent;\n}\n\nexport interface CliHarness {\n readonly kind: \"cli\";\n bind(model?: AgentModel): AgentAdapter;\n}\n\nexport type AgentHarness = CliHarness | Harness;\n\nexport interface CliAgent extends AgentAdapter {\n readonly kind: \"cli\";\n readonly harness: CliHarness;\n readonly model?: AgentModel;\n}\n\nexport interface CustomAgent extends AgentFeatures {\n readonly resumable: boolean;\n readonly capture: boolean;\n readonly kind: \"custom\";\n readonly harness: Harness;\n readonly model: AgentModel;\n}\n\nexport type Agent = CliAgent | CustomAgent | ReplayAgent;\n\nexport interface CliAgentOptions {\n readonly harness: CliHarness;\n readonly model?: ModelSpec;\n}\nexport interface CustomAgentOptions {\n readonly harness: Harness;\n readonly model: ModelSpec;\n}\nexport type AgentOptions = CliAgentOptions | CustomAgentOptions;\n\nexport type AccountCredential =\n | { readonly file: string }\n | { readonly key: string }\n | { readonly variable: string };\n\nexport type UsageCredential =\n { readonly key: string } | { readonly variable: string };\n\nexport type AgentAuthentication =\n | \"account\"\n | \"usage\"\n | { readonly account: AccountCredential }\n | { readonly usage: UsageCredential };\n\nexport interface HostCredentialPath {\n readonly path: string;\n readonly home?: { readonly variable: string; readonly path: string };\n}\n\nexport interface HostCredential {\n readonly source: HostCredentialPath;\n readonly destination:\n { readonly file: string } | { readonly variable: string };\n readonly login: string;\n readonly alternative?: string;\n select?(content: string): string;\n}\n\nexport interface GeneratedCredential {\n readonly path: string;\n readonly content: string;\n}\n\nexport interface ConfigurationFile {\n readonly path: string;\n readonly section?: string;\n readonly entries: Readonly<Record<string, unknown>>;\n}\n\nexport interface HostConfiguration {\n readonly source: HostCredentialPath;\n readonly path: string;\n readonly section?: string;\n readonly optional?: boolean;\n readonly login: string;\n select(content: string): Readonly<Record<string, unknown>>;\n}\n\nexport interface AgentConfiguration {\n readonly files: readonly ConfigurationFile[];\n readonly host?: readonly HostConfiguration[];\n}\n\nexport interface CredentialPlan {\n readonly variables: Variables;\n readonly host: readonly HostCredential[];\n readonly files: readonly GeneratedCredential[];\n readonly commands: readonly Command[];\n}\n"]}
@@ -1,7 +1,5 @@
1
1
  import type { ArtifactContract, ArtifactContractOptions, ArtifactReference, ArtifactStore, JsonArtifactOptions, PublishArtifactOptions, ReadArtifactOptions } from "./artifact.types.ts";
2
- export declare const artifact: {
3
- json<T>(options: JsonArtifactOptions<T>): ArtifactContract<T>;
4
- binary(options: ArtifactContractOptions): ArtifactContract<Uint8Array>;
5
- };
2
+ export declare function defineJsonArtifact<T>(options: JsonArtifactOptions<T>): ArtifactContract<T>;
3
+ export declare function defineBinaryArtifact(options: ArtifactContractOptions): ArtifactContract<Uint8Array>;
6
4
  export declare function publishArtifact<T>(store: ArtifactStore, contract: ArtifactContract<T>, value: T, options: PublishArtifactOptions): Promise<ArtifactReference>;
7
5
  export declare function readStoredArtifact<T>(store: ArtifactStore, contract: ArtifactContract<T>, value: unknown, options?: ReadArtifactOptions): Promise<T>;
@@ -9,46 +9,44 @@ function identity(options) {
9
9
  throw new Error(`Artifact contract name and version must be nonempty and at most ${artifactLabelMaxLength} characters`);
10
10
  return { name: options.name, version: options.version };
11
11
  }
12
- export const artifact = {
13
- json(options) {
14
- const schema = options.schema;
15
- async function validate(value) {
16
- if (typeof schema === "function")
17
- return schema(value);
18
- const result = await schema["~standard"].validate(value);
19
- if (result.issues)
20
- throw new Error(`Artifact schema validation failed: ${JSON.stringify(result.issues)}`);
21
- return result.value;
22
- }
23
- return Object.freeze({
24
- ...identity(options),
25
- encoding: "json",
26
- async encode(value) {
27
- const checked = checkpointValue(await validate(value));
28
- if (checked.kind !== "json")
29
- throw new Error("Artifact payload must be JSON");
30
- return Buffer.from(JSON.stringify(checked.value));
31
- },
32
- async decode(bytes) {
33
- return validate(JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes)));
34
- },
35
- });
36
- },
37
- binary(options) {
38
- return Object.freeze({
39
- ...identity(options),
40
- encoding: "binary",
41
- async encode(value) {
42
- if (!(value instanceof Uint8Array))
43
- throw new Error("Artifact payload must be Uint8Array");
44
- return Uint8Array.from(value);
45
- },
46
- async decode(bytes) {
47
- return Uint8Array.from(bytes);
48
- },
49
- });
50
- },
51
- };
12
+ export function defineJsonArtifact(options) {
13
+ const schema = options.schema;
14
+ async function validate(value) {
15
+ if (typeof schema === "function")
16
+ return schema(value);
17
+ const result = await schema["~standard"].validate(value);
18
+ if (result.issues)
19
+ throw new Error(`Artifact schema validation failed: ${JSON.stringify(result.issues)}`);
20
+ return result.value;
21
+ }
22
+ return Object.freeze({
23
+ ...identity(options),
24
+ encoding: "json",
25
+ async encode(value) {
26
+ const checked = checkpointValue(await validate(value));
27
+ if (checked.kind !== "json")
28
+ throw new Error("Artifact payload must be JSON");
29
+ return Buffer.from(JSON.stringify(checked.value));
30
+ },
31
+ async decode(bytes) {
32
+ return validate(JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes)));
33
+ },
34
+ });
35
+ }
36
+ export function defineBinaryArtifact(options) {
37
+ return Object.freeze({
38
+ ...identity(options),
39
+ encoding: "binary",
40
+ async encode(value) {
41
+ if (!(value instanceof Uint8Array))
42
+ throw new Error("Artifact payload must be Uint8Array");
43
+ return Uint8Array.from(value);
44
+ },
45
+ async decode(bytes) {
46
+ return Uint8Array.from(bytes);
47
+ },
48
+ });
49
+ }
52
50
  export async function publishArtifact(store, contract, value, options) {
53
51
  options.signal?.throwIfAborted();
54
52
  const producer = { ...options.producer };
@@ -1 +1 @@
1
- {"version":3,"file":"artifact.js","sourceRoot":"","sources":["../../src/domain/artifact.ts"],"names":[],"mappings":"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","sourcesContent":["import { artifactLabelMaxLength } from \"./artifact.constants.ts\";\nimport {\n artifactDigest,\n artifactId,\n validateArtifactReference,\n} from \"./artifact-reference.ts\";\nimport { checkpointValue } from \"./workflow/checkpoint-value.ts\";\nimport type {\n ArtifactContract,\n ArtifactContractOptions,\n ArtifactReference,\n ArtifactStore,\n JsonArtifactOptions,\n PublishArtifactOptions,\n ReadArtifactOptions,\n} from \"./artifact.types.ts\";\n\nfunction identity(options: ArtifactContractOptions): ArtifactContractOptions {\n if (\n !options.name.trim() ||\n !options.version.trim() ||\n options.name.length > artifactLabelMaxLength ||\n options.version.length > artifactLabelMaxLength\n )\n throw new Error(\n `Artifact contract name and version must be nonempty and at most ${artifactLabelMaxLength} characters`,\n );\n return { name: options.name, version: options.version };\n}\n\nexport const artifact = {\n json<T>(options: JsonArtifactOptions<T>): ArtifactContract<T> {\n const schema = options.schema;\n async function validate(value: unknown): Promise<T> {\n if (typeof schema === \"function\") return schema(value);\n const result = await schema[\"~standard\"].validate(value);\n if (result.issues)\n throw new Error(\n `Artifact schema validation failed: ${JSON.stringify(result.issues)}`,\n );\n return result.value;\n }\n return Object.freeze({\n ...identity(options),\n encoding: \"json\",\n async encode(value: T) {\n const checked = checkpointValue(await validate(value));\n if (checked.kind !== \"json\")\n throw new Error(\"Artifact payload must be JSON\");\n return Buffer.from(JSON.stringify(checked.value));\n },\n async decode(bytes: Uint8Array) {\n return validate(\n JSON.parse(\n new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes),\n ) as unknown,\n );\n },\n });\n },\n binary(options: ArtifactContractOptions): ArtifactContract<Uint8Array> {\n return Object.freeze({\n ...identity(options),\n encoding: \"binary\",\n async encode(value: Uint8Array) {\n if (!(value instanceof Uint8Array))\n throw new Error(\"Artifact payload must be Uint8Array\");\n return Uint8Array.from(value);\n },\n async decode(bytes: Uint8Array) {\n return Uint8Array.from(bytes);\n },\n });\n },\n};\n\nexport async function publishArtifact<T>(\n store: ArtifactStore,\n contract: ArtifactContract<T>,\n value: T,\n options: PublishArtifactOptions,\n): Promise<ArtifactReference> {\n options.signal?.throwIfAborted();\n const producer = { ...options.producer };\n const parents = (options.parents ?? []).map(\n (parent) => validateArtifactReference(parent).id,\n );\n const bytes = Uint8Array.from(await contract.encode(value));\n options.signal?.throwIfAborted();\n const metadata = {\n format: 1 as const,\n digest: artifactDigest(bytes),\n size: bytes.length,\n contract: {\n name: contract.name,\n version: contract.version,\n encoding: contract.encoding,\n },\n producer,\n parents,\n };\n const reference = validateArtifactReference({\n ...metadata,\n id: artifactId(metadata),\n });\n await store.put(reference.id, bytes, options.signal);\n options.signal?.throwIfAborted();\n return reference;\n}\n\nexport async function readStoredArtifact<T>(\n store: ArtifactStore,\n contract: ArtifactContract<T>,\n value: unknown,\n options: ReadArtifactOptions = {},\n): Promise<T> {\n options.signal?.throwIfAborted();\n const reference = validateArtifactReference(value);\n if (\n reference.contract.name !== contract.name ||\n reference.contract.version !== contract.version ||\n reference.contract.encoding !== contract.encoding\n )\n throw new Error(\"Artifact contract mismatch\");\n const producer = options.producer;\n if (\n producer &&\n (reference.producer.executionId !== producer.executionId ||\n reference.producer.taskKey !== producer.taskKey ||\n reference.producer.attempt !== producer.attempt)\n )\n throw new Error(\"Artifact producer mismatch\");\n if (\n options.parents &&\n JSON.stringify(reference.parents) !==\n JSON.stringify(\n options.parents.map((parent) => validateArtifactReference(parent).id),\n )\n )\n throw new Error(\"Artifact lineage mismatch\");\n const bytes = await store.get(reference.id, options.signal);\n options.signal?.throwIfAborted();\n if (\n bytes.length !== reference.size ||\n artifactDigest(bytes) !== reference.digest\n )\n throw new Error(\"Artifact content integrity mismatch\");\n const result = await contract.decode(bytes);\n options.signal?.throwIfAborted();\n return result;\n}\n"]}
1
+ {"version":3,"file":"artifact.js","sourceRoot":"","sources":["../../src/domain/artifact.ts"],"names":[],"mappings":"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","sourcesContent":["import { artifactLabelMaxLength } from \"./artifact.constants.ts\";\nimport {\n artifactDigest,\n artifactId,\n validateArtifactReference,\n} from \"./artifact-reference.ts\";\nimport { checkpointValue } from \"./workflow/checkpoint-value.ts\";\nimport type {\n ArtifactContract,\n ArtifactContractOptions,\n ArtifactReference,\n ArtifactStore,\n JsonArtifactOptions,\n PublishArtifactOptions,\n ReadArtifactOptions,\n} from \"./artifact.types.ts\";\n\nfunction identity(options: ArtifactContractOptions): ArtifactContractOptions {\n if (\n !options.name.trim() ||\n !options.version.trim() ||\n options.name.length > artifactLabelMaxLength ||\n options.version.length > artifactLabelMaxLength\n )\n throw new Error(\n `Artifact contract name and version must be nonempty and at most ${artifactLabelMaxLength} characters`,\n );\n return { name: options.name, version: options.version };\n}\n\nexport function defineJsonArtifact<T>(\n options: JsonArtifactOptions<T>,\n): ArtifactContract<T> {\n const schema = options.schema;\n async function validate(value: unknown): Promise<T> {\n if (typeof schema === \"function\") return schema(value);\n const result = await schema[\"~standard\"].validate(value);\n if (result.issues)\n throw new Error(\n `Artifact schema validation failed: ${JSON.stringify(result.issues)}`,\n );\n return result.value;\n }\n return Object.freeze({\n ...identity(options),\n encoding: \"json\",\n async encode(value: T) {\n const checked = checkpointValue(await validate(value));\n if (checked.kind !== \"json\")\n throw new Error(\"Artifact payload must be JSON\");\n return Buffer.from(JSON.stringify(checked.value));\n },\n async decode(bytes: Uint8Array) {\n return validate(\n JSON.parse(\n new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes),\n ) as unknown,\n );\n },\n });\n}\n\nexport function defineBinaryArtifact(\n options: ArtifactContractOptions,\n): ArtifactContract<Uint8Array> {\n return Object.freeze({\n ...identity(options),\n encoding: \"binary\",\n async encode(value: Uint8Array) {\n if (!(value instanceof Uint8Array))\n throw new Error(\"Artifact payload must be Uint8Array\");\n return Uint8Array.from(value);\n },\n async decode(bytes: Uint8Array) {\n return Uint8Array.from(bytes);\n },\n });\n}\n\nexport async function publishArtifact<T>(\n store: ArtifactStore,\n contract: ArtifactContract<T>,\n value: T,\n options: PublishArtifactOptions,\n): Promise<ArtifactReference> {\n options.signal?.throwIfAborted();\n const producer = { ...options.producer };\n const parents = (options.parents ?? []).map(\n (parent) => validateArtifactReference(parent).id,\n );\n const bytes = Uint8Array.from(await contract.encode(value));\n options.signal?.throwIfAborted();\n const metadata = {\n format: 1 as const,\n digest: artifactDigest(bytes),\n size: bytes.length,\n contract: {\n name: contract.name,\n version: contract.version,\n encoding: contract.encoding,\n },\n producer,\n parents,\n };\n const reference = validateArtifactReference({\n ...metadata,\n id: artifactId(metadata),\n });\n await store.put(reference.id, bytes, options.signal);\n options.signal?.throwIfAborted();\n return reference;\n}\n\nexport async function readStoredArtifact<T>(\n store: ArtifactStore,\n contract: ArtifactContract<T>,\n value: unknown,\n options: ReadArtifactOptions = {},\n): Promise<T> {\n options.signal?.throwIfAborted();\n const reference = validateArtifactReference(value);\n if (\n reference.contract.name !== contract.name ||\n reference.contract.version !== contract.version ||\n reference.contract.encoding !== contract.encoding\n )\n throw new Error(\"Artifact contract mismatch\");\n const producer = options.producer;\n if (\n producer &&\n (reference.producer.executionId !== producer.executionId ||\n reference.producer.taskKey !== producer.taskKey ||\n reference.producer.attempt !== producer.attempt)\n )\n throw new Error(\"Artifact producer mismatch\");\n if (\n options.parents &&\n JSON.stringify(reference.parents) !==\n JSON.stringify(\n options.parents.map((parent) => validateArtifactReference(parent).id),\n )\n )\n throw new Error(\"Artifact lineage mismatch\");\n const bytes = await store.get(reference.id, options.signal);\n options.signal?.throwIfAborted();\n if (\n bytes.length !== reference.size ||\n artifactDigest(bytes) !== reference.digest\n )\n throw new Error(\"Artifact content integrity mismatch\");\n const result = await contract.decode(bytes);\n options.signal?.throwIfAborted();\n return result;\n}\n"]}
@@ -5,6 +5,8 @@ export interface Command {
5
5
  readonly executable: string;
6
6
  readonly arguments?: readonly string[];
7
7
  readonly stdin?: string;
8
+ /** Live stdin written after `stdin`; stdin closes when this stream ends. */
9
+ readonly input?: Readable;
8
10
  readonly directory?: string;
9
11
  readonly variables?: Variables;
10
12
  readonly signal?: AbortSignal;
@@ -1 +1 @@
1
- {"version":3,"file":"command.types.js","sourceRoot":"","sources":["../../src/domain/command.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Readable, Writable } from \"node:stream\";\n\nexport type Variables = Readonly<Record<string, string>>;\n\nexport type Channel = \"stdout\" | \"stderr\";\n\nexport interface Command {\n readonly executable: string;\n readonly arguments?: readonly string[];\n readonly stdin?: string;\n readonly directory?: string;\n readonly variables?: Variables;\n readonly signal?: AbortSignal;\n readonly deadlineMs?: number;\n readonly interactive?: boolean;\n readonly terminal?: {\n readonly input?: Readable;\n readonly output?: Writable;\n readonly error?: Writable;\n };\n readonly elevated?: boolean;\n readonly retain?: number;\n readonly observe?: (channel: Channel, text: string) => void;\n}\n\nexport interface CommandResult {\n readonly status: number;\n readonly stdout: string;\n readonly stderr: string;\n}\n"]}
1
+ {"version":3,"file":"command.types.js","sourceRoot":"","sources":["../../src/domain/command.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Readable, Writable } from \"node:stream\";\n\nexport type Variables = Readonly<Record<string, string>>;\n\nexport type Channel = \"stdout\" | \"stderr\";\n\nexport interface Command {\n readonly executable: string;\n readonly arguments?: readonly string[];\n readonly stdin?: string;\n /** Live stdin written after `stdin`; stdin closes when this stream ends. */\n readonly input?: Readable;\n readonly directory?: string;\n readonly variables?: Variables;\n readonly signal?: AbortSignal;\n readonly deadlineMs?: number;\n readonly interactive?: boolean;\n readonly terminal?: {\n readonly input?: Readable;\n readonly output?: Writable;\n readonly error?: Writable;\n };\n readonly elevated?: boolean;\n readonly retain?: number;\n readonly observe?: (channel: Channel, text: string) => void;\n}\n\nexport interface CommandResult {\n readonly status: number;\n readonly stdout: string;\n readonly stderr: string;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { ConversationStore } from "./conversation.types.ts";
2
+ export declare function isConversationStore(value: unknown): value is ConversationStore;
3
+ export declare function conversationFormat(owner: string, store: ConversationStore, format: string): void;
@@ -0,0 +1,18 @@
1
+ import { invariant } from "./errors.js";
2
+ export function isConversationStore(value) {
3
+ return (value !== null &&
4
+ typeof value === "object" &&
5
+ "locate" in value &&
6
+ "capture" in value &&
7
+ "restore" in value &&
8
+ typeof value.locate === "function" &&
9
+ typeof value.capture === "function" &&
10
+ typeof value.restore === "function" &&
11
+ (!("format" in value) ||
12
+ value.format === undefined ||
13
+ typeof value.format === "string"));
14
+ }
15
+ export function conversationFormat(owner, store, format) {
16
+ invariant(store.format === undefined || store.format === format, `${owner} conversations must use the "${format}" format, not "${store.format}"`);
17
+ }
18
+ //# sourceMappingURL=conversation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../src/domain/conversation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,UAAU,mBAAmB,CACjC,KAAc;IAEd,OAAO,CACL,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,QAAQ,IAAI,KAAK;QACjB,SAAS,IAAI,KAAK;QAClB,SAAS,IAAI,KAAK;QAClB,OAAO,KAAK,CAAC,MAAM,KAAK,UAAU;QAClC,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU;QACnC,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU;QACnC,CAAC,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC;YACnB,KAAK,CAAC,MAAM,KAAK,SAAS;YAC1B,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAAa,EACb,KAAwB,EACxB,MAAc;IAEd,SAAS,CACP,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EACrD,GAAG,KAAK,gCAAgC,MAAM,kBAAkB,KAAK,CAAC,MAAM,GAAG,CAChF,CAAC;AACJ,CAAC","sourcesContent":["import type { ConversationStore } from \"./conversation.types.ts\";\nimport { invariant } from \"./errors.ts\";\n\nexport function isConversationStore(\n value: unknown,\n): value is ConversationStore {\n return (\n value !== null &&\n typeof value === \"object\" &&\n \"locate\" in value &&\n \"capture\" in value &&\n \"restore\" in value &&\n typeof value.locate === \"function\" &&\n typeof value.capture === \"function\" &&\n typeof value.restore === \"function\" &&\n (!(\"format\" in value) ||\n value.format === undefined ||\n typeof value.format === \"string\")\n );\n}\n\nexport function conversationFormat(\n owner: string,\n store: ConversationStore,\n format: string,\n): void {\n invariant(\n store.format === undefined || store.format === format,\n `${owner} conversations must use the \"${format}\" format, not \"${store.format}\"`,\n );\n}\n"]}
@@ -16,7 +16,16 @@ export interface ConversationContext {
16
16
  }
17
17
  export interface ConversationStore {
18
18
  readonly name: string;
19
+ readonly format?: string;
19
20
  locate(id: string, repository: string, home?: string): Promise<ConversationRecord>;
20
21
  capture(id: string, context: ConversationContext): Promise<ConversationRecord>;
21
22
  restore(record: ConversationRecord, context: ConversationContext): Promise<void>;
22
23
  }
24
+ export interface NativeConversationStore extends ConversationStore {
25
+ /** Persisted format name, used in transport keys, bundles and records. */
26
+ readonly format: string;
27
+ /** Host directory that holds this format's captured conversations. */
28
+ directory(repository: string, home?: string): string;
29
+ /** Sandbox path that restoration writes for a captured conversation. */
30
+ destination(id: string, sandbox: SandboxLease, original: string): string;
31
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.types.js","sourceRoot":"","sources":["../../src/domain/conversation.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { TransportReference } from \"./transport.types.ts\";\nimport type { SandboxLease } from \"./sandbox.types.ts\";\n\nexport interface ConversationRecord {\n readonly id: string;\n readonly file: string;\n readonly reference?: TransportReference;\n readonly format: string;\n}\n\nexport interface ConversationContext {\n readonly repository: string;\n readonly sandbox: SandboxLease;\n readonly staging: string;\n readonly home?: string;\n readonly local?: boolean;\n readonly warn?: (message: string) => void;\n}\n\nexport interface ConversationStore {\n readonly name: string;\n locate(\n id: string,\n repository: string,\n home?: string,\n ): Promise<ConversationRecord>;\n capture(\n id: string,\n context: ConversationContext,\n ): Promise<ConversationRecord>;\n restore(\n record: ConversationRecord,\n context: ConversationContext,\n ): Promise<void>;\n}\n"]}
1
+ {"version":3,"file":"conversation.types.js","sourceRoot":"","sources":["../../src/domain/conversation.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { TransportReference } from \"./transport.types.ts\";\nimport type { SandboxLease } from \"./sandbox.types.ts\";\n\nexport interface ConversationRecord {\n readonly id: string;\n readonly file: string;\n readonly reference?: TransportReference;\n readonly format: string;\n}\n\nexport interface ConversationContext {\n readonly repository: string;\n readonly sandbox: SandboxLease;\n readonly staging: string;\n readonly home?: string;\n readonly local?: boolean;\n readonly warn?: (message: string) => void;\n}\n\nexport interface ConversationStore {\n readonly name: string;\n readonly format?: string;\n locate(\n id: string,\n repository: string,\n home?: string,\n ): Promise<ConversationRecord>;\n capture(\n id: string,\n context: ConversationContext,\n ): Promise<ConversationRecord>;\n restore(\n record: ConversationRecord,\n context: ConversationContext,\n ): Promise<void>;\n}\n\nexport interface NativeConversationStore extends ConversationStore {\n /** Persisted format name, used in transport keys, bundles and records. */\n readonly format: string;\n /** Host directory that holds this format's captured conversations. */\n directory(repository: string, home?: string): string;\n /** Sandbox path that restoration writes for a captured conversation. */\n destination(id: string, sandbox: SandboxLease, original: string): string;\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { CronField } from "./cron.types.ts";
2
+ export declare const cronFields: readonly CronField[];
3
+ export declare const cronMacros: Readonly<Record<string, string>>;
4
+ export declare const cronDefaultTimeZone = "UTC";
5
+ export declare const cronMaxExpressionLength = 256;
6
+ /** Covers a February 29 slot across a skipped leap year. */
7
+ export declare const cronSearchDays: number;
8
+ export declare const cronDayMs = 86400000;
9
+ /** Bounds every real UTC offset, so candidates outside it are skipped cheaply. */
10
+ export declare const cronOffsetBoundMs: number;
@@ -0,0 +1,47 @@
1
+ export const cronFields = [
2
+ { name: "minute", min: 0, max: 59 },
3
+ { name: "hour", min: 0, max: 23 },
4
+ { name: "day of month", min: 1, max: 31 },
5
+ {
6
+ name: "month",
7
+ min: 1,
8
+ max: 12,
9
+ names: [
10
+ "JAN",
11
+ "FEB",
12
+ "MAR",
13
+ "APR",
14
+ "MAY",
15
+ "JUN",
16
+ "JUL",
17
+ "AUG",
18
+ "SEP",
19
+ "OCT",
20
+ "NOV",
21
+ "DEC",
22
+ ],
23
+ },
24
+ {
25
+ name: "day of week",
26
+ min: 0,
27
+ max: 7,
28
+ names: ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"],
29
+ },
30
+ ];
31
+ export const cronMacros = {
32
+ "@yearly": "0 0 1 1 *",
33
+ "@annually": "0 0 1 1 *",
34
+ "@monthly": "0 0 1 * *",
35
+ "@weekly": "0 0 * * 0",
36
+ "@daily": "0 0 * * *",
37
+ "@midnight": "0 0 * * *",
38
+ "@hourly": "0 * * * *",
39
+ };
40
+ export const cronDefaultTimeZone = "UTC";
41
+ export const cronMaxExpressionLength = 256;
42
+ /** Covers a February 29 slot across a skipped leap year. */
43
+ export const cronSearchDays = 366 * 8 + 2;
44
+ export const cronDayMs = 86_400_000;
45
+ /** Bounds every real UTC offset, so candidates outside it are skipped cheaply. */
46
+ export const cronOffsetBoundMs = 15 * 3_600_000;
47
+ //# sourceMappingURL=cron.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.constants.js","sourceRoot":"","sources":["../../src/domain/cron.constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAyB;IAC9C,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IACnC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IACjC,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IACzC;QACE,IAAI,EAAE,OAAO;QACb,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,EAAE;QACP,KAAK,EAAE;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;SACN;KACF;IACD;QACE,IAAI,EAAE,aAAa;QACnB,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;KACzD;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAqC;IAC1D,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,WAAW;IACxB,UAAU,EAAE,WAAW;IACvB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,WAAW;IACrB,WAAW,EAAE,WAAW;IACxB,SAAS,EAAE,WAAW;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AACzC,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,4DAA4D;AAC5D,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1C,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;AACpC,kFAAkF;AAClF,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,GAAG,SAAS,CAAC","sourcesContent":["import type { CronField } from \"./cron.types.ts\";\n\nexport const cronFields: readonly CronField[] = [\n { name: \"minute\", min: 0, max: 59 },\n { name: \"hour\", min: 0, max: 23 },\n { name: \"day of month\", min: 1, max: 31 },\n {\n name: \"month\",\n min: 1,\n max: 12,\n names: [\n \"JAN\",\n \"FEB\",\n \"MAR\",\n \"APR\",\n \"MAY\",\n \"JUN\",\n \"JUL\",\n \"AUG\",\n \"SEP\",\n \"OCT\",\n \"NOV\",\n \"DEC\",\n ],\n },\n {\n name: \"day of week\",\n min: 0,\n max: 7,\n names: [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"],\n },\n];\n\nexport const cronMacros: Readonly<Record<string, string>> = {\n \"@yearly\": \"0 0 1 1 *\",\n \"@annually\": \"0 0 1 1 *\",\n \"@monthly\": \"0 0 1 * *\",\n \"@weekly\": \"0 0 * * 0\",\n \"@daily\": \"0 0 * * *\",\n \"@midnight\": \"0 0 * * *\",\n \"@hourly\": \"0 * * * *\",\n};\n\nexport const cronDefaultTimeZone = \"UTC\";\nexport const cronMaxExpressionLength = 256;\n/** Covers a February 29 slot across a skipped leap year. */\nexport const cronSearchDays = 366 * 8 + 2;\nexport const cronDayMs = 86_400_000;\n/** Bounds every real UTC offset, so candidates outside it are skipped cheaply. */\nexport const cronOffsetBoundMs = 15 * 3_600_000;\n"]}
@@ -0,0 +1,2 @@
1
+ import type { CronOptions, CronSchedule } from "./cron.types.ts";
2
+ export declare function createCronSchedule(expression: string, options?: CronOptions): CronSchedule;
@@ -0,0 +1,169 @@
1
+ import { cronDayMs, cronDefaultTimeZone, cronFields, cronMacros, cronMaxExpressionLength, cronOffsetBoundMs, cronSearchDays, } from "./cron.constants.js";
2
+ function fieldValue(token, field) {
3
+ const named = field.names?.indexOf(token.toUpperCase()) ?? -1;
4
+ if (named >= 0)
5
+ return field.min + named;
6
+ const value = /^\d{1,2}$/.test(token) ? Number(token) : Number.NaN;
7
+ if (!(value >= field.min && value <= field.max))
8
+ throw new Error(`Invalid cron ${field.name}: ${token}`);
9
+ return value;
10
+ }
11
+ function fieldRange(range, field, stepped) {
12
+ if (range === "*")
13
+ return [field.min, field.max];
14
+ const [first, last, extra] = range.split("-");
15
+ if (extra !== undefined || first === undefined)
16
+ throw new Error(`Invalid cron ${field.name}: ${range}`);
17
+ const start = fieldValue(first, field);
18
+ if (last !== undefined)
19
+ return [start, fieldValue(last, field)];
20
+ return [start, stepped ? field.max : start];
21
+ }
22
+ function parseField(text, field) {
23
+ const values = new Set();
24
+ for (const part of text.split(",")) {
25
+ const [range, stepText, extra] = part.split("/");
26
+ if (extra !== undefined || !range)
27
+ throw new Error(`Invalid cron ${field.name}: ${part}`);
28
+ const step = stepText === undefined ? 1 : Number(stepText);
29
+ if (!/^\d+$/.test(stepText ?? "1") || step < 1 || step > field.max)
30
+ throw new Error(`Invalid cron ${field.name} step: ${part}`);
31
+ const [start, end] = fieldRange(range, field, stepText !== undefined);
32
+ if (start > end)
33
+ throw new Error(`Invalid cron ${field.name}: ${part}`);
34
+ for (let value = start; value <= end; value += step)
35
+ values.add(value);
36
+ }
37
+ return values;
38
+ }
39
+ function parsePattern(expression) {
40
+ const fields = expression.split(" ");
41
+ if (fields.length !== cronFields.length)
42
+ throw new Error("Cron expressions require five fields");
43
+ const [minutes, hours, days, months, weekdays] = fields.map((text, index) => parseField(text, cronFields[index]));
44
+ if (weekdays.delete(7))
45
+ weekdays.add(0);
46
+ return Object.freeze({
47
+ minutes: [...minutes].sort((a, b) => a - b),
48
+ hours: [...hours].sort((a, b) => a - b),
49
+ days,
50
+ months,
51
+ weekdays,
52
+ eitherDay: !fields[2].startsWith("*") && !fields[4].startsWith("*"),
53
+ });
54
+ }
55
+ function matchesDay(pattern, date) {
56
+ if (!pattern.months.has(date.getUTCMonth() + 1))
57
+ return false;
58
+ const day = pattern.days.has(date.getUTCDate());
59
+ const weekday = pattern.weekdays.has(date.getUTCDay());
60
+ return pattern.eitherDay ? day || weekday : day && weekday;
61
+ }
62
+ function zoneFormatter(timeZone) {
63
+ try {
64
+ return new Intl.DateTimeFormat("en-US", {
65
+ timeZone,
66
+ hourCycle: "h23",
67
+ year: "numeric",
68
+ month: "numeric",
69
+ day: "numeric",
70
+ hour: "numeric",
71
+ minute: "numeric",
72
+ second: "numeric",
73
+ });
74
+ }
75
+ catch {
76
+ throw new Error(`Invalid cron time zone: ${timeZone}`);
77
+ }
78
+ }
79
+ function zoneClock(timeZone) {
80
+ const formatter = zoneFormatter(timeZone);
81
+ const utc = formatter.resolvedOptions().timeZone === "UTC";
82
+ function wallClock(instant) {
83
+ const parts = Object.fromEntries(formatter
84
+ .formatToParts(instant)
85
+ .map((part) => [part.type, Number(part.value)]));
86
+ return Date.UTC(parts.year, parts.month - 1, parts.day, parts.hour, parts.minute, parts.second);
87
+ }
88
+ /** Offsets observed around a local day; two values mark a DST transition. */
89
+ function offsets(day) {
90
+ if (utc)
91
+ return [0];
92
+ const probes = [-cronDayMs, 0, cronDayMs, 2 * cronDayMs].map((shift) => day + shift);
93
+ return [...new Set(probes.map((probe) => wallClock(probe) - probe))];
94
+ }
95
+ /** Earliest instant showing this wall-clock time; none inside a DST gap. */
96
+ function instant(local, around) {
97
+ if (around.length === 1)
98
+ return local - around[0];
99
+ const matches = around
100
+ .map((offset) => local - offset)
101
+ .filter((candidate) => wallClock(candidate) === local);
102
+ return matches.length ? Math.min(...matches) : undefined;
103
+ }
104
+ return {
105
+ timeZone: formatter.resolvedOptions().timeZone,
106
+ wallClock,
107
+ offsets,
108
+ instant,
109
+ };
110
+ }
111
+ function checkedTime(value, name) {
112
+ const time = value instanceof Date ? value.getTime() : Number.NaN;
113
+ if (!Number.isFinite(time))
114
+ throw new Error(`Invalid cron ${name} date`);
115
+ return time;
116
+ }
117
+ function localStart(wallClock) {
118
+ return wallClock - (wallClock % cronDayMs);
119
+ }
120
+ function localTimes(pattern, day) {
121
+ return pattern.hours.flatMap((hour) => pattern.minutes.map((minute) => day + hour * 3_600_000 + minute * 60_000));
122
+ }
123
+ function normalizedExpression(expression) {
124
+ if (typeof expression !== "string" ||
125
+ expression.length > cronMaxExpressionLength)
126
+ throw new Error("Invalid cron expression");
127
+ const text = expression.trim().split(/\s+/).join(" ");
128
+ return cronMacros[text.toLowerCase()] ?? text;
129
+ }
130
+ export function createCronSchedule(expression, options = {}) {
131
+ const text = normalizedExpression(expression);
132
+ const pattern = parsePattern(text);
133
+ const zone = zoneClock(options.timeZone ?? cronDefaultTimeZone);
134
+ function search(from, direction, accept) {
135
+ const first = localStart(zone.wallClock(from)) - direction * cronDayMs;
136
+ for (let index = 0; index < cronSearchDays; index++) {
137
+ const day = first + direction * index * cronDayMs;
138
+ if (!matchesDay(pattern, new Date(day)))
139
+ continue;
140
+ const times = localTimes(pattern, day);
141
+ if (direction < 0)
142
+ times.reverse();
143
+ const around = zone.offsets(day);
144
+ for (const local of times) {
145
+ if (direction * (local - from) < -cronOffsetBoundMs)
146
+ continue;
147
+ const at = zone.instant(local, around);
148
+ if (at !== undefined && accept(at))
149
+ return new Date(at);
150
+ }
151
+ }
152
+ throw new Error(`Cron expression has no occurrence: ${text}`);
153
+ }
154
+ const schedule = {
155
+ expression: text,
156
+ timeZone: zone.timeZone,
157
+ next(after) {
158
+ const from = checkedTime(after, "start");
159
+ return search(from, 1, (at) => at > from);
160
+ },
161
+ previous(at) {
162
+ const until = checkedTime(at, "end");
163
+ return search(until, -1, (candidate) => candidate <= until);
164
+ },
165
+ };
166
+ search(Date.UTC(2000, 0, 1), 1, () => true);
167
+ return Object.freeze(schedule);
168
+ }
169
+ //# sourceMappingURL=cron.js.map