@wardby/cli 0.2.1 → 0.4.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 (555) hide show
  1. package/.env.example +53 -4
  2. package/README.md +52 -13
  3. package/dist/claude-coding-worker/driver.d.ts +6 -1
  4. package/dist/claude-coding-worker/driver.js +27 -1
  5. package/dist/claude-coding-worker/main.js +2 -0
  6. package/dist/claude-coding-worker/tool-socket.d.ts +9 -0
  7. package/dist/claude-coding-worker/tool-socket.js +26 -0
  8. package/dist/cli-help.d.ts +1 -1
  9. package/dist/cli-help.js +14 -4
  10. package/dist/cli.d.ts +1 -1
  11. package/dist/cli.js +284 -36
  12. package/dist/coding/base-commit.d.ts +6 -0
  13. package/dist/coding/base-commit.js +12 -0
  14. package/dist/coding/collect-exclude.d.ts +25 -0
  15. package/dist/coding/collect-exclude.js +76 -0
  16. package/dist/coding/profile.d.ts +67 -22
  17. package/dist/coding/profile.js +58 -25
  18. package/dist/coding/protected-path-wording.d.ts +24 -0
  19. package/dist/coding/protected-path-wording.js +55 -0
  20. package/dist/coding/protected-paths.d.ts +31 -0
  21. package/dist/coding/protected-paths.js +48 -0
  22. package/dist/coding/protocol.d.ts +91 -4
  23. package/dist/coding/protocol.js +123 -12
  24. package/dist/coding/provider.d.ts +6 -1
  25. package/dist/coding/provider.js +16 -9
  26. package/dist/coding/registry/adapters.d.ts +2 -0
  27. package/dist/coding/registry/adapters.js +9 -0
  28. package/dist/coding/registry/allowlist.d.ts +9 -0
  29. package/dist/coding/registry/allowlist.js +28 -0
  30. package/dist/coding/registry/json-scan.d.ts +55 -0
  31. package/dist/coding/registry/json-scan.js +191 -0
  32. package/dist/coding/registry/lockfiles.d.ts +6 -0
  33. package/dist/coding/registry/lockfiles.js +89 -0
  34. package/dist/coding/registry/npm-lockfile.d.ts +9 -0
  35. package/dist/coding/registry/npm-lockfile.js +73 -0
  36. package/dist/coding/registry/npm-plan.d.ts +29 -0
  37. package/dist/coding/registry/npm-plan.js +289 -0
  38. package/dist/coding/registry/npm.d.ts +7 -0
  39. package/dist/coding/registry/npm.js +252 -0
  40. package/dist/coding/registry/pypi.d.ts +4 -0
  41. package/dist/coding/registry/pypi.js +210 -0
  42. package/dist/coding/registry/report.d.ts +37 -0
  43. package/dist/coding/registry/report.js +31 -0
  44. package/dist/coding/registry/token.d.ts +4 -0
  45. package/dist/coding/registry/token.js +7 -0
  46. package/dist/coding/registry/types.d.ts +286 -0
  47. package/dist/coding/registry/types.js +19 -0
  48. package/dist/coding/registry/worker-config.d.ts +14 -0
  49. package/dist/coding/registry/worker-config.js +31 -0
  50. package/dist/coding/services/builtins.d.ts +22 -0
  51. package/dist/coding/services/builtins.js +85 -0
  52. package/dist/coding/services/catalog.d.ts +443 -0
  53. package/dist/coding/services/catalog.js +159 -0
  54. package/dist/coding/services/declaration.d.ts +11 -0
  55. package/dist/coding/services/declaration.js +114 -0
  56. package/dist/coding/services/note.d.ts +8 -0
  57. package/dist/coding/services/note.js +15 -0
  58. package/dist/coding/services/resolve.d.ts +25 -0
  59. package/dist/coding/services/resolve.js +50 -0
  60. package/dist/coding/services/wording.d.ts +25 -0
  61. package/dist/coding/services/wording.js +70 -0
  62. package/dist/coding-proxy/main.js +24 -4
  63. package/dist/coding-worker/artifact.d.ts +6 -0
  64. package/dist/coding-worker/debug-trace.d.ts +37 -0
  65. package/dist/coding-worker/debug-trace.js +117 -0
  66. package/dist/coding-worker/driver.d.ts +13 -1
  67. package/dist/coding-worker/driver.js +102 -13
  68. package/dist/coding-worker/errors.js +8 -0
  69. package/dist/coding-worker/main.js +10 -2
  70. package/dist/coding-worker/sdk.d.ts +2 -2
  71. package/dist/coding-worker/sdk.js +7 -2
  72. package/dist/coding-worker/types.d.ts +3 -0
  73. package/dist/config/providers.d.ts +66 -0
  74. package/dist/config/providers.js +137 -0
  75. package/dist/core/attribution.d.ts +101 -0
  76. package/dist/core/attribution.js +208 -0
  77. package/dist/core/budget-groups.d.ts +120 -10
  78. package/dist/core/budget-groups.js +133 -24
  79. package/dist/core/budget-wording.d.ts +22 -0
  80. package/dist/core/budget-wording.js +55 -0
  81. package/dist/core/coding-queue.d.ts +3 -0
  82. package/dist/core/coding-queue.js +6 -2
  83. package/dist/core/coding-service-status.d.ts +11 -0
  84. package/dist/core/coding-service-status.js +17 -0
  85. package/dist/core/cost-report.d.ts +88 -0
  86. package/dist/core/cost-report.js +248 -0
  87. package/dist/core/datastores.js +18 -2
  88. package/dist/core/db.d.ts +5 -1
  89. package/dist/core/db.js +8 -2
  90. package/dist/core/dispatch.d.ts +74 -7
  91. package/dist/core/dispatch.js +382 -47
  92. package/dist/core/engine-native.js +44 -14
  93. package/dist/core/glob.d.ts +10 -0
  94. package/dist/core/glob.js +33 -0
  95. package/dist/core/grants.d.ts +86 -0
  96. package/dist/core/grants.js +126 -0
  97. package/dist/core/host-events.d.ts +72 -0
  98. package/dist/core/host-events.js +597 -0
  99. package/dist/core/host-identity-links.d.ts +54 -0
  100. package/dist/core/host-identity-links.js +189 -0
  101. package/dist/core/host-status.d.ts +78 -0
  102. package/dist/core/host-status.js +228 -0
  103. package/dist/core/in-flight-runs.d.ts +8 -0
  104. package/dist/core/in-flight-runs.js +56 -0
  105. package/dist/core/issue-bridge.d.ts +60 -0
  106. package/dist/core/issue-bridge.js +189 -0
  107. package/dist/core/issue-dedupe.d.ts +70 -0
  108. package/dist/core/issue-dedupe.js +255 -0
  109. package/dist/core/issue-events.d.ts +42 -0
  110. package/dist/core/issue-events.js +155 -0
  111. package/dist/core/issue-status.d.ts +29 -0
  112. package/dist/core/issue-status.js +241 -0
  113. package/dist/core/issue-tracker-tools.d.ts +64 -0
  114. package/dist/core/issue-tracker-tools.js +850 -0
  115. package/dist/core/model-usage.d.ts +10 -0
  116. package/dist/core/model-usage.js +24 -0
  117. package/dist/core/provider-wording.d.ts +12 -0
  118. package/dist/core/provider-wording.js +44 -0
  119. package/dist/core/reconciler.d.ts +42 -2
  120. package/dist/core/reconciler.js +97 -2
  121. package/dist/core/repo-access.d.ts +99 -0
  122. package/dist/core/repo-access.js +136 -0
  123. package/dist/core/review-host-checks.d.ts +11 -0
  124. package/dist/core/review-host-checks.js +41 -0
  125. package/dist/core/review-host-tools.d.ts +47 -0
  126. package/dist/core/review-host-tools.js +354 -0
  127. package/dist/core/run-heartbeat.d.ts +27 -0
  128. package/dist/core/run-heartbeat.js +54 -0
  129. package/dist/core/run-pricing.d.ts +61 -0
  130. package/dist/core/run-pricing.js +56 -0
  131. package/dist/core/runner.d.ts +33 -8
  132. package/dist/core/runner.js +410 -62
  133. package/dist/core/scheduler.d.ts +4 -1
  134. package/dist/core/scheduler.js +3 -2
  135. package/dist/core/secrets.d.ts +11 -2
  136. package/dist/core/secrets.js +25 -6
  137. package/dist/core/self-defects.d.ts +80 -0
  138. package/dist/core/self-defects.js +180 -0
  139. package/dist/core/subagent-memory-tools.d.ts +1 -1
  140. package/dist/core/subagent-memory-tools.js +16 -3
  141. package/dist/core/tool-admin.d.ts +81 -0
  142. package/dist/core/tool-admin.js +129 -0
  143. package/dist/core/tool-names.d.ts +42 -0
  144. package/dist/core/tool-names.js +67 -0
  145. package/dist/core/untrusted-content.d.ts +32 -0
  146. package/dist/core/untrusted-content.js +72 -0
  147. package/dist/core/webhooks.d.ts +17 -2
  148. package/dist/core/webhooks.js +42 -3
  149. package/dist/generated/prisma/browser.d.ts +166 -0
  150. package/dist/generated/prisma/client.d.ts +166 -0
  151. package/dist/generated/prisma/commonInputTypes.d.ts +152 -52
  152. package/dist/generated/prisma/enums.d.ts +13 -0
  153. package/dist/generated/prisma/enums.js +12 -1
  154. package/dist/generated/prisma/internal/class.d.ts +242 -0
  155. package/dist/generated/prisma/internal/class.js +4 -4
  156. package/dist/generated/prisma/internal/prismaNamespace.d.ts +2571 -577
  157. package/dist/generated/prisma/internal/prismaNamespace.js +312 -6
  158. package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +328 -0
  159. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +312 -6
  160. package/dist/generated/prisma/models/Agent.d.ts +682 -1
  161. package/dist/generated/prisma/models/AgentIssueProject.d.ts +1838 -0
  162. package/dist/generated/prisma/models/AgentIssueProject.js +1 -0
  163. package/dist/generated/prisma/models/AgentRepository.d.ts +1425 -0
  164. package/dist/generated/prisma/models/AgentRepository.js +1 -0
  165. package/dist/generated/prisma/models/AgentTool.d.ts +95 -1
  166. package/dist/generated/prisma/models/AuthUser.d.ts +56 -1
  167. package/dist/generated/prisma/models/CodingAgentProfile.d.ts +258 -7
  168. package/dist/generated/prisma/models/CodingProxySession.d.ts +195 -2
  169. package/dist/generated/prisma/models/CodingRun.d.ts +1405 -95
  170. package/dist/generated/prisma/models/CodingRunServiceStatus.d.ts +1404 -0
  171. package/dist/generated/prisma/models/CodingRunServiceStatus.js +1 -0
  172. package/dist/generated/prisma/models/CodingService.d.ts +1348 -0
  173. package/dist/generated/prisma/models/CodingService.js +1 -0
  174. package/dist/generated/prisma/models/HostEventDelivery.d.ts +946 -0
  175. package/dist/generated/prisma/models/HostEventDelivery.js +1 -0
  176. package/dist/generated/prisma/models/HostIdentity.d.ts +1232 -0
  177. package/dist/generated/prisma/models/HostIdentity.js +1 -0
  178. package/dist/generated/prisma/models/HostIdentityLinkRequest.d.ts +1473 -0
  179. package/dist/generated/prisma/models/HostIdentityLinkRequest.js +1 -0
  180. package/dist/generated/prisma/models/IssueFingerprint.d.ts +1183 -0
  181. package/dist/generated/prisma/models/IssueFingerprint.js +1 -0
  182. package/dist/generated/prisma/models/IssuePullRequest.d.ts +1255 -0
  183. package/dist/generated/prisma/models/IssuePullRequest.js +1 -0
  184. package/dist/generated/prisma/models/ModelCatalogEntry.d.ts +1322 -0
  185. package/dist/generated/prisma/models/ModelCatalogEntry.js +1 -0
  186. package/dist/generated/prisma/models/Principal.d.ts +455 -0
  187. package/dist/generated/prisma/models/RegistryAllowance.d.ts +1148 -0
  188. package/dist/generated/prisma/models/RegistryAllowance.js +1 -0
  189. package/dist/generated/prisma/models/RegistryApprovedVersion.d.ts +1219 -0
  190. package/dist/generated/prisma/models/RegistryApprovedVersion.js +1 -0
  191. package/dist/generated/prisma/models/RegistryFetch.d.ts +1428 -0
  192. package/dist/generated/prisma/models/RegistryFetch.js +1 -0
  193. package/dist/generated/prisma/models/RegistryPlanRefusal.d.ts +1294 -0
  194. package/dist/generated/prisma/models/RegistryPlanRefusal.js +1 -0
  195. package/dist/generated/prisma/models/RegistryVersionFact.d.ts +1085 -0
  196. package/dist/generated/prisma/models/RegistryVersionFact.js +1 -0
  197. package/dist/generated/prisma/models/ResourceGrant.d.ts +1437 -0
  198. package/dist/generated/prisma/models/ResourceGrant.js +1 -0
  199. package/dist/generated/prisma/models/Run.d.ts +1402 -82
  200. package/dist/generated/prisma/models/RunAttribution.d.ts +1259 -0
  201. package/dist/generated/prisma/models/RunAttribution.js +1 -0
  202. package/dist/generated/prisma/models/RunHostCheck.d.ts +1239 -0
  203. package/dist/generated/prisma/models/RunHostCheck.js +1 -0
  204. package/dist/generated/prisma/models/RunHostStatus.d.ts +1315 -0
  205. package/dist/generated/prisma/models/RunHostStatus.js +1 -0
  206. package/dist/generated/prisma/models/RunIssueStatus.d.ts +1199 -0
  207. package/dist/generated/prisma/models/RunIssueStatus.js +1 -0
  208. package/dist/generated/prisma/models/RunModelUsage.d.ts +1316 -0
  209. package/dist/generated/prisma/models/RunModelUsage.js +1 -0
  210. package/dist/generated/prisma/models/Tool.d.ts +15 -3
  211. package/dist/generated/prisma/models/WorkItem.d.ts +1408 -0
  212. package/dist/generated/prisma/models/WorkItem.js +1 -0
  213. package/dist/generated/prisma/models.d.ts +22 -0
  214. package/dist/help/build.d.ts +1 -0
  215. package/dist/help/build.js +9 -0
  216. package/dist/help/catalog.d.ts +24 -0
  217. package/dist/help/catalog.js +160 -0
  218. package/dist/help/cli.d.ts +2 -0
  219. package/dist/help/cli.js +65 -0
  220. package/dist/help/runtime.d.ts +3 -0
  221. package/dist/help/runtime.js +44 -0
  222. package/dist/help/search.d.ts +9 -0
  223. package/dist/help/search.js +104 -0
  224. package/dist/help-index.json +999 -0
  225. package/dist/import/cli-args.js +3 -2
  226. package/dist/import/create.d.ts +5 -0
  227. package/dist/import/create.js +67 -13
  228. package/dist/import/index.js +19 -9
  229. package/dist/import/neutral-schema.d.ts +18 -18
  230. package/dist/knowledge/check.d.ts +13 -0
  231. package/dist/knowledge/check.js +69 -0
  232. package/dist/knowledge/cli.d.ts +14 -0
  233. package/dist/knowledge/cli.js +67 -0
  234. package/dist/knowledge/concept.d.ts +54 -0
  235. package/dist/knowledge/concept.js +78 -0
  236. package/dist/knowledge/note.d.ts +11 -0
  237. package/dist/knowledge/note.js +39 -0
  238. package/dist/knowledge/relevance.d.ts +11 -0
  239. package/dist/knowledge/relevance.js +14 -0
  240. package/dist/knowledge/span-hash.d.ts +3 -0
  241. package/dist/knowledge/span-hash.js +16 -0
  242. package/dist/mcp/auth/access.d.ts +72 -0
  243. package/dist/mcp/auth/access.js +58 -0
  244. package/dist/mcp/auth/grants-cli.d.ts +149 -0
  245. package/dist/mcp/auth/grants-cli.js +518 -0
  246. package/dist/mcp/auth/host-account-cli.d.ts +2 -0
  247. package/dist/mcp/auth/host-account-cli.js +47 -0
  248. package/dist/mcp/auth/ownership.d.ts +25 -51
  249. package/dist/mcp/auth/ownership.js +19 -14
  250. package/dist/mcp/auth/repo-authorization.d.ts +22 -0
  251. package/dist/mcp/auth/repo-authorization.js +51 -0
  252. package/dist/mcp/auth/resource-server.d.ts +33 -2
  253. package/dist/mcp/auth/resource-server.js +99 -3
  254. package/dist/mcp/auth/self-hosted/browser.js +2 -2
  255. package/dist/mcp/auth/self-hosted/cli.js +47 -13
  256. package/dist/mcp/auth/self-hosted/credentials.d.ts +23 -5
  257. package/dist/mcp/auth/self-hosted/credentials.js +62 -4
  258. package/dist/mcp/auth/self-hosted/session.d.ts +7 -6
  259. package/dist/mcp/context.d.ts +30 -1
  260. package/dist/mcp/errors.d.ts +25 -6
  261. package/dist/mcp/errors.js +98 -0
  262. package/dist/mcp/host-events/deliveries.d.ts +9 -0
  263. package/dist/mcp/host-events/deliveries.js +17 -0
  264. package/dist/mcp/host-events/github-ingress.d.ts +38 -0
  265. package/dist/mcp/host-events/github-ingress.js +83 -0
  266. package/dist/mcp/host-events/github-user-callback.d.ts +18 -0
  267. package/dist/mcp/host-events/github-user-callback.js +50 -0
  268. package/dist/mcp/host-events/jira-ingress.d.ts +29 -0
  269. package/dist/mcp/host-events/jira-ingress.js +92 -0
  270. package/dist/mcp/index.d.ts +10 -1
  271. package/dist/mcp/index.js +187 -19
  272. package/dist/mcp/server.js +32 -11
  273. package/dist/mcp/tools/agents.js +519 -50
  274. package/dist/mcp/tools/budget-groups.js +3 -3
  275. package/dist/mcp/tools/cost-report.d.ts +8 -0
  276. package/dist/mcp/tools/cost-report.js +60 -0
  277. package/dist/mcp/tools/datastore.js +22 -15
  278. package/dist/mcp/tools/grants.d.ts +2 -0
  279. package/dist/mcp/tools/grants.js +239 -0
  280. package/dist/mcp/tools/help.d.ts +5 -0
  281. package/dist/mcp/tools/help.js +67 -0
  282. package/dist/mcp/tools/host-accounts.d.ts +2 -0
  283. package/dist/mcp/tools/host-accounts.js +114 -0
  284. package/dist/mcp/tools/issue-projects.d.ts +2 -0
  285. package/dist/mcp/tools/issue-projects.js +238 -0
  286. package/dist/mcp/tools/memory.d.ts +7 -1
  287. package/dist/mcp/tools/memory.js +5 -5
  288. package/dist/mcp/tools/model-catalog.d.ts +22 -0
  289. package/dist/mcp/tools/model-catalog.js +423 -0
  290. package/dist/mcp/tools/repositories.d.ts +2 -0
  291. package/dist/mcp/tools/repositories.js +182 -0
  292. package/dist/mcp/tools/runs.d.ts +6 -0
  293. package/dist/mcp/tools/runs.js +60 -6
  294. package/dist/mcp/tools/scheduling.js +3 -6
  295. package/dist/mcp/tools/secrets.js +18 -6
  296. package/dist/mcp/tools/services.d.ts +2 -0
  297. package/dist/mcp/tools/services.js +222 -0
  298. package/dist/mcp/tools/subagents.js +52 -16
  299. package/dist/mcp/tools/tools.d.ts +41 -0
  300. package/dist/mcp/tools/tools.js +201 -40
  301. package/dist/mcp/tools/trigger.js +65 -7
  302. package/dist/mcp/tools/webhooks.js +15 -4
  303. package/dist/mcp/transport/streamable-http.d.ts +15 -0
  304. package/dist/mcp/transport/streamable-http.js +55 -3
  305. package/dist/mcp/webhooks/ingress.d.ts +2 -1
  306. package/dist/mcp/webhooks/ingress.js +9 -2
  307. package/dist/providers/auth/delegating.d.ts +19 -0
  308. package/dist/providers/auth/delegating.js +71 -0
  309. package/dist/providers/auth/index.d.ts +2 -0
  310. package/dist/providers/auth/index.js +11 -0
  311. package/dist/providers/auth/self-hosted.d.ts +10 -2
  312. package/dist/providers/auth/self-hosted.js +55 -6
  313. package/dist/providers/auth/types.d.ts +6 -0
  314. package/dist/providers/coding-proxy/memory-ledger.d.ts +4 -1
  315. package/dist/providers/coding-proxy/memory-ledger.js +31 -3
  316. package/dist/providers/coding-proxy/metering.d.ts +6 -1
  317. package/dist/providers/coding-proxy/metering.js +41 -4
  318. package/dist/providers/coding-proxy/prisma-ledger.d.ts +17 -0
  319. package/dist/providers/coding-proxy/prisma-ledger.js +106 -8
  320. package/dist/providers/coding-proxy/proxy.d.ts +25 -2
  321. package/dist/providers/coding-proxy/proxy.js +561 -38
  322. package/dist/providers/coding-proxy/registry/audit.d.ts +131 -0
  323. package/dist/providers/coding-proxy/registry/audit.js +380 -0
  324. package/dist/providers/coding-proxy/registry/bounded-fetch.d.ts +16 -0
  325. package/dist/providers/coding-proxy/registry/bounded-fetch.js +77 -0
  326. package/dist/providers/coding-proxy/registry/plan.d.ts +58 -0
  327. package/dist/providers/coding-proxy/registry/plan.js +304 -0
  328. package/dist/providers/coding-proxy/registry/prisma-store.d.ts +34 -0
  329. package/dist/providers/coding-proxy/registry/prisma-store.js +151 -0
  330. package/dist/providers/coding-proxy/registry/service.d.ts +213 -0
  331. package/dist/providers/coding-proxy/registry/service.js +1137 -0
  332. package/dist/providers/coding-proxy/registry/store.d.ts +127 -0
  333. package/dist/providers/coding-proxy/registry/store.js +70 -0
  334. package/dist/providers/coding-proxy/runtime.d.ts +17 -0
  335. package/dist/providers/coding-proxy/runtime.js +63 -0
  336. package/dist/providers/coding-proxy/secure-fetch.js +0 -1
  337. package/dist/providers/coding-proxy/server.d.ts +11 -0
  338. package/dist/providers/coding-proxy/server.js +163 -0
  339. package/dist/providers/coding-proxy/types.d.ts +33 -1
  340. package/dist/providers/coding-proxy/types.js +12 -1
  341. package/dist/providers/engine/types.d.ts +29 -0
  342. package/dist/providers/executor/build.d.ts +2 -2
  343. package/dist/providers/executor/composition.d.ts +3 -0
  344. package/dist/providers/executor/composition.js +28 -1
  345. package/dist/providers/executor/container.d.ts +134 -4
  346. package/dist/providers/executor/container.js +394 -37
  347. package/dist/providers/executor/dbos.d.ts +4 -3
  348. package/dist/providers/executor/dbos.js +7 -5
  349. package/dist/providers/executor/in-process.d.ts +2 -3
  350. package/dist/providers/executor/routing.d.ts +13 -0
  351. package/dist/providers/executor/routing.js +18 -0
  352. package/dist/providers/executor/types.d.ts +34 -0
  353. package/dist/providers/issue-tracker/adf.d.ts +31 -0
  354. package/dist/providers/issue-tracker/adf.js +181 -0
  355. package/dist/providers/issue-tracker/index.d.ts +5 -0
  356. package/dist/providers/issue-tracker/index.js +12 -0
  357. package/dist/providers/issue-tracker/jira-client.d.ts +41 -0
  358. package/dist/providers/issue-tracker/jira-client.js +151 -0
  359. package/dist/providers/issue-tracker/jira-events.d.ts +3 -0
  360. package/dist/providers/issue-tracker/jira-events.js +98 -0
  361. package/dist/providers/issue-tracker/jira.d.ts +116 -0
  362. package/dist/providers/issue-tracker/jira.js +502 -0
  363. package/dist/providers/issue-tracker/types.d.ts +269 -0
  364. package/dist/providers/issue-tracker/types.js +16 -0
  365. package/dist/providers/jobs/claude-tool-setup.d.ts +23 -0
  366. package/dist/providers/jobs/claude-tool-setup.js +50 -0
  367. package/dist/providers/jobs/collect-prune.d.ts +7 -0
  368. package/dist/providers/jobs/collect-prune.js +27 -0
  369. package/dist/providers/jobs/docker-isolation.d.ts +48 -3
  370. package/dist/providers/jobs/docker-isolation.js +213 -22
  371. package/dist/providers/jobs/docker-services.d.ts +35 -0
  372. package/dist/providers/jobs/docker-services.js +191 -0
  373. package/dist/providers/jobs/docker.d.ts +53 -2
  374. package/dist/providers/jobs/docker.js +307 -32
  375. package/dist/providers/jobs/fake-kubernetes-api.d.ts +1 -0
  376. package/dist/providers/jobs/fake-kubernetes-api.js +12 -3
  377. package/dist/providers/jobs/kubernetes-isolation.d.ts +17 -2
  378. package/dist/providers/jobs/kubernetes-isolation.js +238 -57
  379. package/dist/providers/jobs/kubernetes-platform.d.ts +10 -4
  380. package/dist/providers/jobs/kubernetes-platform.js +11 -5
  381. package/dist/providers/jobs/kubernetes-preflight.js +3 -0
  382. package/dist/providers/jobs/kubernetes.d.ts +24 -2
  383. package/dist/providers/jobs/kubernetes.js +153 -22
  384. package/dist/providers/jobs/service-state.d.ts +22 -0
  385. package/dist/providers/jobs/service-state.js +17 -0
  386. package/dist/providers/jobs/types.d.ts +18 -0
  387. package/dist/providers/llm/anthropic.d.ts +3 -3
  388. package/dist/providers/llm/anthropic.js +3 -5
  389. package/dist/providers/llm/bedrock.d.ts +3 -3
  390. package/dist/providers/llm/bedrock.js +3 -8
  391. package/dist/providers/llm/catalog-lookup.d.ts +10 -0
  392. package/dist/providers/llm/catalog-lookup.js +15 -0
  393. package/dist/providers/llm/catalog-shipped.d.ts +18 -0
  394. package/dist/providers/llm/catalog-shipped.js +197 -0
  395. package/dist/providers/llm/catalog-store.d.ts +58 -0
  396. package/dist/providers/llm/catalog-store.js +138 -0
  397. package/dist/providers/llm/catalog-types.d.ts +66 -0
  398. package/dist/providers/llm/catalog-types.js +64 -0
  399. package/dist/providers/llm/catalog.d.ts +61 -0
  400. package/dist/providers/llm/catalog.js +147 -0
  401. package/dist/providers/llm/claude-messages.d.ts +5 -1
  402. package/dist/providers/llm/claude-messages.js +1 -0
  403. package/dist/providers/llm/claude-provider.d.ts +10 -12
  404. package/dist/providers/llm/claude-provider.js +15 -6
  405. package/dist/providers/llm/index.d.ts +9 -6
  406. package/dist/providers/llm/index.js +8 -5
  407. package/dist/providers/llm/openai.d.ts +14 -5
  408. package/dist/providers/llm/openai.js +24 -14
  409. package/dist/providers/llm/pricing-core.d.ts +5 -3
  410. package/dist/providers/llm/registration.js +8 -12
  411. package/dist/providers/llm/routing.d.ts +21 -11
  412. package/dist/providers/llm/routing.js +47 -13
  413. package/dist/providers/llm/types.d.ts +12 -0
  414. package/dist/providers/llm/types.js +8 -1
  415. package/dist/providers/review-host/diff-lines.d.ts +16 -0
  416. package/dist/providers/review-host/diff-lines.js +59 -0
  417. package/dist/providers/review-host/github-events.d.ts +6 -0
  418. package/dist/providers/review-host/github-events.js +226 -0
  419. package/dist/providers/review-host/github-user-auth.d.ts +38 -0
  420. package/dist/providers/review-host/github-user-auth.js +128 -0
  421. package/dist/providers/review-host/github.d.ts +57 -0
  422. package/dist/providers/review-host/github.js +568 -0
  423. package/dist/providers/review-host/index.d.ts +12 -0
  424. package/dist/providers/review-host/index.js +30 -0
  425. package/dist/providers/review-host/review-format.d.ts +19 -0
  426. package/dist/providers/review-host/review-format.js +59 -0
  427. package/dist/providers/review-host/types.d.ts +309 -0
  428. package/dist/providers/review-host/types.js +24 -0
  429. package/dist/providers/vcs/git.d.ts +16 -6
  430. package/dist/providers/vcs/git.js +78 -34
  431. package/dist/providers/vcs/github.d.ts +94 -3
  432. package/dist/providers/vcs/github.js +223 -17
  433. package/dist/providers/vcs/types.d.ts +48 -4
  434. package/dist/quickstart/index.d.ts +2 -0
  435. package/dist/quickstart/index.js +36 -8
  436. package/dist/sandbox/fetch-policy.d.ts +20 -2
  437. package/dist/sandbox/fetch-policy.js +64 -3
  438. package/dist/sandbox/host-functions.d.ts +9 -1
  439. package/dist/sandbox/host-functions.js +12 -5
  440. package/dist/serve.js +8 -2
  441. package/dist/viewer/api-schema.d.ts +2757 -0
  442. package/dist/viewer/api-schema.js +165 -0
  443. package/dist/viewer/build-schemas.d.ts +2 -0
  444. package/dist/viewer/build-schemas.js +18 -0
  445. package/dist/viewer/event-bus.d.ts +38 -0
  446. package/dist/viewer/event-bus.js +232 -0
  447. package/dist/viewer/graph.d.ts +40 -0
  448. package/dist/viewer/graph.js +243 -0
  449. package/dist/viewer/http.d.ts +30 -0
  450. package/dist/viewer/http.js +133 -0
  451. package/dist/viewer/run-detail.d.ts +4 -0
  452. package/dist/viewer/run-detail.js +61 -0
  453. package/dist/wardby-bin.js +11 -0
  454. package/docs/README.md +40 -0
  455. package/docs/agent-recipes.md +383 -0
  456. package/docs/architecture-runtime.md +90 -0
  457. package/docs/assets/brand/wardby-icon-512.png +0 -0
  458. package/docs/assets/brand/wardby-icon.svg +16 -0
  459. package/docs/assets/brand/wardby-mascot-profile-512.png +0 -0
  460. package/docs/assets/brand/wardby-mascot.png +0 -0
  461. package/docs/assets/brand/wardby-mascot.svg +5 -0
  462. package/docs/assets/wardby-workflow.svg +106 -0
  463. package/docs/code-review-agents.md +508 -0
  464. package/docs/coding-agent-setup.md +175 -0
  465. package/docs/coding-packages.md +455 -0
  466. package/docs/coding-services.md +300 -0
  467. package/docs/coding-worker-byo-images.md +98 -0
  468. package/docs/coding-worker-isolation.md +1068 -0
  469. package/docs/getting-started-gke.md +632 -0
  470. package/docs/getting-started-identity-provider.md +319 -0
  471. package/docs/getting-started.md +147 -0
  472. package/docs/jira-agents.md +649 -0
  473. package/docs/knowledge.md +387 -0
  474. package/docs/models.md +221 -0
  475. package/docs/observability.md +53 -0
  476. package/docs/release-verification.md +66 -0
  477. package/docs/security-deployment.md +667 -0
  478. package/docs/viewer-api.md +142 -0
  479. package/help/admin-viewer.md +39 -0
  480. package/help/agent-recipes.md +173 -0
  481. package/help/architecture-agent.md +189 -0
  482. package/help/builder-agent.md +80 -0
  483. package/help/code-review-agents.md +37 -0
  484. package/help/coding-packages.md +31 -0
  485. package/help/coding-services.md +71 -0
  486. package/help/cost-attribution.md +67 -0
  487. package/help/creating-agents.md +90 -0
  488. package/help/deploy-gke.md +45 -0
  489. package/help/deployment-targets.md +39 -0
  490. package/help/errors/budget-group-exhausted.md +25 -0
  491. package/help/errors/docker-isolation-unsupported.md +26 -0
  492. package/help/errors/model-unavailable.md +63 -0
  493. package/help/errors/protected-path.md +45 -0
  494. package/help/errors/repo-access.md +27 -0
  495. package/help/errors/service-declaration-invalid.md +27 -0
  496. package/help/errors/service-declaration-unavailable.md +25 -0
  497. package/help/errors/service-launcher-unsupported.md +30 -0
  498. package/help/errors/service-not-allowed.md +27 -0
  499. package/help/errors/service-unknown.md +23 -0
  500. package/help/errors/service-unready.md +49 -0
  501. package/help/getting-started.md +32 -0
  502. package/help/github.md +48 -0
  503. package/help/identity-and-access.md +44 -0
  504. package/help/jira.md +135 -0
  505. package/help/knowledge.md +47 -0
  506. package/help/mcp.md +30 -0
  507. package/help/models.md +90 -0
  508. package/help/native-capabilities.md +30 -0
  509. package/help/observability.md +41 -0
  510. package/help/operating-agents.md +36 -0
  511. package/help/security.md +27 -0
  512. package/help/troubleshooting/budgets.md +32 -0
  513. package/help/troubleshooting/coding-workers.md +47 -0
  514. package/help/troubleshooting/repository-access.md +27 -0
  515. package/package.json +14 -3
  516. package/prisma/migrations/20260925010000_coding_collect_exclude/migration.sql +8 -0
  517. package/prisma/migrations/20260925015000_allowed_egress_default/migration.sql +8 -0
  518. package/prisma/migrations/20260925020000_coding_package_registry/migration.sql +55 -0
  519. package/prisma/migrations/20260925030000_tool_name_per_owner/migration.sql +11 -0
  520. package/prisma/migrations/20260926010000_run_trigger_host_event/migration.sql +7 -0
  521. package/prisma/migrations/20260926020000_code_review_hosts/migration.sql +53 -0
  522. package/prisma/migrations/20260926030000_auth_user_roles/migration.sql +9 -0
  523. package/prisma/migrations/20260926040000_agent_effort/migration.sql +6 -0
  524. package/prisma/migrations/20260926050000_registry_lockfile_plan/migration.sql +32 -0
  525. package/prisma/migrations/20260926050000_repo_access_authorization/migration.sql +82 -0
  526. package/prisma/migrations/20260926060000_registry_plan_refusal/migration.sql +19 -0
  527. package/prisma/migrations/20260926100000_registry_plan_refusal_published_at/migration.sql +5 -0
  528. package/prisma/migrations/20260926190000_run_host_status/migration.sql +18 -0
  529. package/prisma/migrations/20260926210000_run_host_status_at_dispatch/migration.sql +5 -0
  530. package/prisma/migrations/20260927010000_resource_grants/migration.sql +72 -0
  531. package/prisma/migrations/20260927020000_proxy_session_budget_exhausted/migration.sql +3 -0
  532. package/prisma/migrations/20260927030000_coding_debug_trace/migration.sql +4 -0
  533. package/prisma/migrations/20260927040000_proxy_session_upstream_failure/migration.sql +3 -0
  534. package/prisma/migrations/20260927050000_coding_run_services/migration.sql +74 -0
  535. package/prisma/migrations/20260928000000_coding_run_tool_image/migration.sql +5 -0
  536. package/prisma/migrations/20260930000000_jira_issue_projects/migration.sql +34 -0
  537. package/prisma/migrations/20261001000000_jira_phase2_allowlists/migration.sql +3 -0
  538. package/prisma/migrations/20261001010000_jira_link_types_allowlist/migration.sql +2 -0
  539. package/prisma/migrations/20261002000000_jira_coding_bridge/migration.sql +28 -0
  540. package/prisma/migrations/20261002010000_jira_issue_creation/migration.sql +25 -0
  541. package/prisma/migrations/20261003000000_issue_cost_attribution/migration.sql +56 -0
  542. package/prisma/migrations/20261003010000_coding_run_service_status/migration.sql +23 -0
  543. package/prisma/migrations/20261003020000_viewer_notify/migration.sql +54 -0
  544. package/prisma/migrations/20261003030000_viewer_notify_fixes/migration.sql +47 -0
  545. package/prisma/migrations/20261003040000_viewer_indexes/migration.sql +12 -0
  546. package/prisma/migrations/20261004000000_model_catalog/migration.sql +26 -0
  547. package/prisma/schema.prisma +663 -21
  548. package/dist/mcp/tools/models.d.ts +0 -8
  549. package/dist/mcp/tools/models.js +0 -15
  550. package/dist/providers/llm/pricing-anthropic.d.ts +0 -4
  551. package/dist/providers/llm/pricing-anthropic.js +0 -30
  552. package/dist/providers/llm/pricing-bedrock-claude.d.ts +0 -12
  553. package/dist/providers/llm/pricing-bedrock-claude.js +0 -37
  554. package/dist/providers/llm/pricing.d.ts +0 -30
  555. package/dist/providers/llm/pricing.js +0 -74
@@ -1,9 +1,8 @@
1
1
  import { z } from "zod";
2
2
  export declare const MIN_CODING_TIMEOUT_SEC = 60;
3
3
  export declare const MAX_CODING_TIMEOUT_SEC = 7200;
4
- export declare const MAX_ALLOWED_EGRESS_HOSTS = 64;
5
4
  export declare const MAX_PROTECTED_PATHS = 128;
6
- export declare const DEFAULT_PROTECTED_PATHS: readonly [".github/workflows/**", ".github/CODEOWNERS", "CODEOWNERS", "docs/CODEOWNERS"];
5
+ export declare const DEFAULT_PROTECTED_PATHS: readonly [".github/workflows/**", ".github/CODEOWNERS", "CODEOWNERS", "docs/CODEOWNERS", ".wardby/**", "!.wardby/services.yaml"];
7
6
  export declare const CodingProfileSchema: z.ZodObject<{
8
7
  provider: z.ZodDefault<z.ZodEnum<["codex", "claude-code"]>>;
9
8
  repository: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
@@ -11,38 +10,61 @@ export declare const CodingProfileSchema: z.ZodObject<{
11
10
  defaultTask: z.ZodDefault<z.ZodNullable<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>>;
12
11
  allowWebhookTaskOverride: z.ZodDefault<z.ZodBoolean>;
13
12
  timeoutSec: z.ZodDefault<z.ZodNumber>;
14
- allowedEgress: z.ZodDefault<z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>, string, string>, string, string>, string, string>, string, string>, string, string>, "many">, string[], string[]>>;
15
- protectedPaths: z.ZodDefault<z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>, string, string>, string, string>, "many">, string[], string[]>>;
13
+ protectedPaths: z.ZodDefault<z.ZodEffects<z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>, string, string>, "many">, string[], string[]>, string[], string[]>>;
14
+ collectExclude: z.ZodDefault<z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">, string[], string[]>>;
16
15
  toolchain: z.ZodDefault<z.ZodEnum<["node", "node-python"]>>;
17
16
  toolchainVersion: z.ZodDefault<z.ZodNullable<z.ZodString>>;
18
17
  workerImageRef: z.ZodDefault<z.ZodNullable<z.ZodEffects<z.ZodString, string, string>>>;
19
18
  workspaceDiskMb: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
19
+ packageAllowlist: z.ZodDefault<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "many">>, Record<string, string[]>, Record<string, string[]>>>;
20
+ packagePolicy: z.ZodDefault<z.ZodEffects<z.ZodObject<{
21
+ minReleaseAgeDays: z.ZodOptional<z.ZodNumber>;
22
+ }, "strict", z.ZodTypeAny, {
23
+ minReleaseAgeDays?: number | undefined;
24
+ }, {
25
+ minReleaseAgeDays?: number | undefined;
26
+ }>, {
27
+ minReleaseAgeDays?: number | undefined;
28
+ }, {
29
+ minReleaseAgeDays?: number | undefined;
30
+ }>>;
31
+ services: z.ZodDefault<z.ZodEffects<z.ZodArray<z.ZodString, "many">, string[], string[]>>;
20
32
  }, "strict", z.ZodTypeAny, {
21
33
  repository: string;
22
34
  baseRef: string;
35
+ services: string[];
23
36
  provider: "codex" | "claude-code";
24
- defaultTask: string | null;
25
- allowWebhookTaskOverride: boolean;
26
37
  timeoutSec: number;
27
- allowedEgress: string[];
28
38
  protectedPaths: string[];
39
+ collectExclude: string[];
40
+ workspaceDiskMb: number | null;
41
+ packageAllowlist: Record<string, string[]>;
42
+ packagePolicy: {
43
+ minReleaseAgeDays?: number | undefined;
44
+ };
45
+ defaultTask: string | null;
46
+ allowWebhookTaskOverride: boolean;
29
47
  toolchain: "node-python" | "node";
30
48
  toolchainVersion: string | null;
31
49
  workerImageRef: string | null;
32
- workspaceDiskMb: number | null;
33
50
  }, {
34
51
  repository: string;
35
52
  baseRef?: string | undefined;
53
+ services?: string[] | undefined;
36
54
  provider?: "codex" | "claude-code" | undefined;
37
- defaultTask?: string | null | undefined;
38
- allowWebhookTaskOverride?: boolean | undefined;
39
55
  timeoutSec?: number | undefined;
40
- allowedEgress?: string[] | undefined;
41
56
  protectedPaths?: string[] | undefined;
57
+ collectExclude?: string[] | undefined;
58
+ workspaceDiskMb?: number | null | undefined;
59
+ packageAllowlist?: Record<string, string[]> | undefined;
60
+ packagePolicy?: {
61
+ minReleaseAgeDays?: number | undefined;
62
+ } | undefined;
63
+ defaultTask?: string | null | undefined;
64
+ allowWebhookTaskOverride?: boolean | undefined;
42
65
  toolchain?: "node-python" | "node" | undefined;
43
66
  toolchainVersion?: string | null | undefined;
44
67
  workerImageRef?: string | null | undefined;
45
- workspaceDiskMb?: number | null | undefined;
46
68
  }>;
47
69
  export declare const CodingProfilePatchSchema: z.ZodObject<{
48
70
  provider: z.ZodOptional<z.ZodEnum<["codex", "claude-code"]>>;
@@ -51,38 +73,61 @@ export declare const CodingProfilePatchSchema: z.ZodObject<{
51
73
  defaultTask: z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>>;
52
74
  allowWebhookTaskOverride: z.ZodOptional<z.ZodBoolean>;
53
75
  timeoutSec: z.ZodOptional<z.ZodNumber>;
54
- allowedEgress: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>, string, string>, string, string>, string, string>, string, string>, string, string>, "many">, string[], string[]>>;
55
- protectedPaths: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>, string, string>, string, string>, "many">, string[], string[]>>;
76
+ protectedPaths: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>, string, string>, "many">, string[], string[]>, string[], string[]>>;
77
+ collectExclude: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">, string[], string[]>>;
56
78
  toolchain: z.ZodOptional<z.ZodEnum<["node", "node-python"]>>;
57
79
  toolchainVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
58
80
  workerImageRef: z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodString, string, string>>>;
59
81
  workspaceDiskMb: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
82
+ packageAllowlist: z.ZodOptional<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "many">>, Record<string, string[]>, Record<string, string[]>>>;
83
+ packagePolicy: z.ZodOptional<z.ZodEffects<z.ZodObject<{
84
+ minReleaseAgeDays: z.ZodOptional<z.ZodNumber>;
85
+ }, "strict", z.ZodTypeAny, {
86
+ minReleaseAgeDays?: number | undefined;
87
+ }, {
88
+ minReleaseAgeDays?: number | undefined;
89
+ }>, {
90
+ minReleaseAgeDays?: number | undefined;
91
+ }, {
92
+ minReleaseAgeDays?: number | undefined;
93
+ }>>;
94
+ services: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodString, "many">, string[], string[]>>;
60
95
  }, "strict", z.ZodTypeAny, {
61
96
  repository?: string | undefined;
62
97
  baseRef?: string | undefined;
98
+ services?: string[] | undefined;
63
99
  provider?: "codex" | "claude-code" | undefined;
64
- defaultTask?: string | null | undefined;
65
- allowWebhookTaskOverride?: boolean | undefined;
66
100
  timeoutSec?: number | undefined;
67
- allowedEgress?: string[] | undefined;
68
101
  protectedPaths?: string[] | undefined;
102
+ collectExclude?: string[] | undefined;
103
+ workspaceDiskMb?: number | null | undefined;
104
+ packageAllowlist?: Record<string, string[]> | undefined;
105
+ packagePolicy?: {
106
+ minReleaseAgeDays?: number | undefined;
107
+ } | undefined;
108
+ defaultTask?: string | null | undefined;
109
+ allowWebhookTaskOverride?: boolean | undefined;
69
110
  toolchain?: "node-python" | "node" | undefined;
70
111
  toolchainVersion?: string | null | undefined;
71
112
  workerImageRef?: string | null | undefined;
72
- workspaceDiskMb?: number | null | undefined;
73
113
  }, {
74
114
  repository?: string | undefined;
75
115
  baseRef?: string | undefined;
116
+ services?: string[] | undefined;
76
117
  provider?: "codex" | "claude-code" | undefined;
77
- defaultTask?: string | null | undefined;
78
- allowWebhookTaskOverride?: boolean | undefined;
79
118
  timeoutSec?: number | undefined;
80
- allowedEgress?: string[] | undefined;
81
119
  protectedPaths?: string[] | undefined;
120
+ collectExclude?: string[] | undefined;
121
+ workspaceDiskMb?: number | null | undefined;
122
+ packageAllowlist?: Record<string, string[]> | undefined;
123
+ packagePolicy?: {
124
+ minReleaseAgeDays?: number | undefined;
125
+ } | undefined;
126
+ defaultTask?: string | null | undefined;
127
+ allowWebhookTaskOverride?: boolean | undefined;
82
128
  toolchain?: "node-python" | "node" | undefined;
83
129
  toolchainVersion?: string | null | undefined;
84
130
  workerImageRef?: string | null | undefined;
85
- workspaceDiskMb?: number | null | undefined;
86
131
  }>;
87
132
  export type CodingProfile = z.infer<typeof CodingProfileSchema>;
88
133
  export type CodingProfilePatch = z.infer<typeof CodingProfilePatchSchema>;
@@ -1,19 +1,23 @@
1
- import { isIP } from "node:net";
2
1
  import { z } from "zod";
3
2
  import { isImmutableDockerImage } from "../providers/jobs/docker-isolation.js";
4
3
  import { MAX_CODING_TASK_BYTES, normalizeGitHubRepository, normalizeGitRef } from "./protocol.js";
4
+ import { MAX_COLLECT_EXCLUDE_PATHS, validateCollectExcludePath } from "./collect-exclude.js";
5
5
  import { CODING_PROVIDERS } from "./provider.js";
6
+ import { WARDBY_PROTECTED_PATHS, isWellFormedProtectedPath, protectsSomePath } from "./protected-paths.js";
7
+ import { parseAllowlist, resolvePolicy } from "./registry/allowlist.js";
8
+ import { REGISTRY_ADAPTERS } from "./registry/adapters.js";
9
+ import { AllowedServiceNamesSchema } from "./services/catalog.js";
6
10
  export const MIN_CODING_TIMEOUT_SEC = 60;
7
11
  export const MAX_CODING_TIMEOUT_SEC = 7200;
8
- export const MAX_ALLOWED_EGRESS_HOSTS = 64;
9
12
  export const MAX_PROTECTED_PATHS = 128;
10
13
  export const DEFAULT_PROTECTED_PATHS = [
11
14
  ".github/workflows/**",
12
15
  ".github/CODEOWNERS",
13
16
  "CODEOWNERS",
14
17
  "docs/CODEOWNERS",
18
+ // Enforced for every run anyway (providers/vcs/git.ts protectedPathMatcher); listed so new agents show it.
19
+ ...WARDBY_PROTECTED_PATHS,
15
20
  ];
16
- const MAX_HOST_BYTES = 253;
17
21
  const MAX_PROTECTED_PATH_BYTES = 512;
18
22
  const INVALID_MULTILINE_CONTROL = /[\u0000\u000B\u000C\u000E-\u001F\u007F]/;
19
23
  const INVALID_SINGLE_LINE_CONTROL = /[\u0000-\u001F\u007F]/;
@@ -50,27 +54,21 @@ const defaultTaskSchema = z
50
54
  .refine((value) => !INVALID_MULTILINE_CONTROL.test(value), "must not contain control characters")
51
55
  .refine((value) => value.trim().length > 0, "must not be blank")
52
56
  .nullable();
53
- const egressHostSchema = z
54
- .string()
55
- .transform((value) => value.trim().toLowerCase())
56
- .refine((value) => value.length > 0 && byteLength(value) <= MAX_HOST_BYTES, "must be a bounded hostname")
57
- .refine((value) => !INVALID_SINGLE_LINE_CONTROL.test(value), "must not contain control characters")
58
- .refine((value) => isIP(value) === 0, "IP addresses and CIDRs are not allowed")
59
- .refine((value) => !/^\d+(?:\.\d+){3}$/.test(value), "IP-like hostnames are not allowed")
60
- .refine((value) => !value.includes("://") &&
61
- !value.includes("/") &&
62
- !value.includes("@") &&
63
- !value.includes(":") &&
64
- !value.includes("*"), "must be an exact hostname")
65
- .refine((value) => value !== "localhost" && value.includes("."), "must be a fully qualified hostname")
66
- .refine((value) => value.split(".").every((label) => /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/.test(label)), "must be a valid ASCII hostname");
67
57
  const protectedPathSchema = z
68
58
  .string()
69
59
  .transform((value) => value.trim())
70
60
  .refine((value) => value.length > 0 && byteLength(value) <= MAX_PROTECTED_PATH_BYTES, "must be a bounded path")
71
61
  .refine((value) => !INVALID_SINGLE_LINE_CONTROL.test(value), "must not contain control characters")
72
- .refine((value) => !value.startsWith("/") && !value.startsWith("./") && !value.includes("\\"), "must be a repository-relative POSIX path")
73
- .refine((value) => !value.split("/").some((part) => part === "" || part === "." || part === ".."), "must not contain empty or traversal components");
62
+ .refine(isWellFormedProtectedPath, "must be a repository-relative POSIX path without empty or traversal components, or ! and a literal file path (no wildcards) for an exception");
63
+ const collectExcludePathSchema = z.string().transform((value, ctx) => {
64
+ try {
65
+ return validateCollectExcludePath(value);
66
+ }
67
+ catch {
68
+ ctx.addIssue({ code: z.ZodIssueCode.custom, message: "must be a repository-relative path without wildcards" });
69
+ return z.NEVER;
70
+ }
71
+ });
74
72
  const KNOWN_TOOLCHAINS = ["node", "node-python"];
75
73
  const toolchainSchema = z.enum(KNOWN_TOOLCHAINS);
76
74
  const toolchainVersionSchema = z.string().trim().min(1).max(32).nullable();
@@ -82,6 +80,30 @@ const workerImageRefSchema = z
82
80
  .refine(isImmutableDockerImage, "must be an immutable repository digest")
83
81
  .nullable();
84
82
  const workspaceDiskMbSchema = z.number().int().min(64).max(32_768).nullable();
83
+ const packageAllowlistSchema = z
84
+ .record(z.string(), z.array(z.string().min(1).max(256)).max(256))
85
+ .superRefine((value, ctx) => {
86
+ try {
87
+ parseAllowlist(value, REGISTRY_ADAPTERS);
88
+ }
89
+ catch (error) {
90
+ ctx.addIssue({
91
+ code: z.ZodIssueCode.custom,
92
+ message: error instanceof Error ? error.message : "invalid allowlist",
93
+ });
94
+ }
95
+ });
96
+ const packagePolicySchema = z
97
+ .object({ minReleaseAgeDays: z.number().int().min(0).max(30).optional() })
98
+ .strict()
99
+ .superRefine((value, ctx) => {
100
+ try {
101
+ resolvePolicy(value);
102
+ }
103
+ catch {
104
+ ctx.addIssue({ code: z.ZodIssueCode.custom, message: "invalid package policy" });
105
+ }
106
+ });
85
107
  const codingProfileFields = {
86
108
  provider: z.enum(CODING_PROVIDERS),
87
109
  repository: repositorySchema,
@@ -93,15 +115,20 @@ const codingProfileFields = {
93
115
  toolchainVersion: toolchainVersionSchema,
94
116
  workerImageRef: workerImageRefSchema,
95
117
  workspaceDiskMb: workspaceDiskMbSchema,
96
- allowedEgress: z
97
- .array(egressHostSchema)
98
- .max(MAX_ALLOWED_EGRESS_HOSTS)
99
- .transform((hosts) => [...new Set(hosts)]),
100
118
  protectedPaths: z
101
119
  .array(protectedPathSchema)
102
120
  .min(1)
103
121
  .max(MAX_PROTECTED_PATHS)
122
+ .refine(protectsSomePath, "must protect at least one path; entries starting with ! are only exceptions")
123
+ .transform((paths) => [...new Set(paths)]),
124
+ collectExclude: z
125
+ .array(collectExcludePathSchema)
126
+ .max(MAX_COLLECT_EXCLUDE_PATHS)
104
127
  .transform((paths) => [...new Set(paths)]),
128
+ packageAllowlist: packageAllowlistSchema,
129
+ packagePolicy: packagePolicySchema,
130
+ /** Coding-run services this agent's runs may start: catalog names, any version (docs/coding-services.md). */
131
+ services: AllowedServiceNamesSchema,
105
132
  };
106
133
  export const CodingProfileSchema = z
107
134
  .object({
@@ -111,12 +138,15 @@ export const CodingProfileSchema = z
111
138
  defaultTask: codingProfileFields.defaultTask.default(null),
112
139
  allowWebhookTaskOverride: codingProfileFields.allowWebhookTaskOverride.default(false),
113
140
  timeoutSec: codingProfileFields.timeoutSec.default(1800),
114
- allowedEgress: codingProfileFields.allowedEgress.default([]),
115
141
  protectedPaths: codingProfileFields.protectedPaths.default([...DEFAULT_PROTECTED_PATHS]),
142
+ collectExclude: codingProfileFields.collectExclude.default([]),
116
143
  toolchain: codingProfileFields.toolchain.default("node"),
117
144
  toolchainVersion: codingProfileFields.toolchainVersion.default(null),
118
145
  workerImageRef: codingProfileFields.workerImageRef.default(null),
119
146
  workspaceDiskMb: codingProfileFields.workspaceDiskMb.default(null),
147
+ packageAllowlist: codingProfileFields.packageAllowlist.default({}),
148
+ packagePolicy: codingProfileFields.packagePolicy.default({}),
149
+ services: codingProfileFields.services.default([]),
120
150
  })
121
151
  .strict();
122
152
  export const CodingProfilePatchSchema = z
@@ -127,11 +157,14 @@ export const CodingProfilePatchSchema = z
127
157
  defaultTask: codingProfileFields.defaultTask.optional(),
128
158
  allowWebhookTaskOverride: codingProfileFields.allowWebhookTaskOverride.optional(),
129
159
  timeoutSec: codingProfileFields.timeoutSec.optional(),
130
- allowedEgress: codingProfileFields.allowedEgress.optional(),
131
160
  protectedPaths: codingProfileFields.protectedPaths.optional(),
161
+ collectExclude: codingProfileFields.collectExclude.optional(),
132
162
  toolchain: codingProfileFields.toolchain.optional(),
133
163
  toolchainVersion: codingProfileFields.toolchainVersion.optional(),
134
164
  workerImageRef: codingProfileFields.workerImageRef.optional(),
135
165
  workspaceDiskMb: codingProfileFields.workspaceDiskMb.optional(),
166
+ packageAllowlist: codingProfileFields.packageAllowlist.optional(),
167
+ packagePolicy: codingProfileFields.packagePolicy.optional(),
168
+ services: codingProfileFields.services.optional(),
136
169
  })
137
170
  .strict();
@@ -0,0 +1,24 @@
1
+ /**
2
+ * What a host (a builder continuation comment, a mention status comment) is
3
+ * told when a coding run's changes touched a path this agent may not edit
4
+ * (protectedPathMatcher in src/providers/vcs/git.ts). Public repositories
5
+ * read these, so the path -- taken from the run's own diff -- is treated as
6
+ * untrusted text: it never carries a backtick, a control character, or more
7
+ * than MAX_PATH_CHARS.
8
+ */
9
+ /** CodingRun.failureCategory for a run whose collected changes touched a protected path. */
10
+ export declare const PROTECTED_PATH_CATEGORY = "protected_path";
11
+ /** The path a `vcs_protected_path:<path>` error names, or null for any other error. */
12
+ export declare function protectedPathFromError(error: unknown): string | null;
13
+ /**
14
+ * The host sentence for a run stopped because its changes touched a
15
+ * protected path. Named the file when `path` sanitises to something usable;
16
+ * otherwise falls back to a sentence that doesn't try to name it.
17
+ */
18
+ export declare function protectedPathSentence(path: string | null | undefined): string;
19
+ /**
20
+ * The fixed line for a mention status comment naming a failed protected_path
21
+ * sub-run (host-status.ts). That comment reads children from the database,
22
+ * which has no path -- only the category -- so this line never names a file.
23
+ */
24
+ export declare const PROTECTED_PATH_HOST_LINE = "A sub-run could not open its changes: it changed a file its agent may not edit, so none of its changes were kept.";
@@ -0,0 +1,55 @@
1
+ /**
2
+ * What a host (a builder continuation comment, a mention status comment) is
3
+ * told when a coding run's changes touched a path this agent may not edit
4
+ * (protectedPathMatcher in src/providers/vcs/git.ts). Public repositories
5
+ * read these, so the path -- taken from the run's own diff -- is treated as
6
+ * untrusted text: it never carries a backtick, a control character, or more
7
+ * than MAX_PATH_CHARS.
8
+ */
9
+ /** CodingRun.failureCategory for a run whose collected changes touched a protected path. */
10
+ export const PROTECTED_PATH_CATEGORY = "protected_path";
11
+ /** git.ts's finalizeChanges throws this when the collected diff touches a protected path. */
12
+ const PROTECTED_PATH_ERROR_PREFIX = "vcs_protected_path:";
13
+ /** The path a `vcs_protected_path:<path>` error names, or null for any other error. */
14
+ export function protectedPathFromError(error) {
15
+ const message = error instanceof Error ? error.message : typeof error === "string" ? error : "";
16
+ if (!message.startsWith(PROTECTED_PATH_ERROR_PREFIX))
17
+ return null;
18
+ const path = message.slice(PROTECTED_PATH_ERROR_PREFIX.length);
19
+ return path.length > 0 ? path : null;
20
+ }
21
+ const MAX_PATH_CHARS = 200;
22
+ /**
23
+ * A single-line, backtick-free rendering of a repository path safe to drop
24
+ * into one Markdown code span: control characters and backticks (which would
25
+ * otherwise close the span early) are neutralised, runs of whitespace
26
+ * collapse to one line, and the result is capped with an ellipsis. Null when
27
+ * nothing usable is left.
28
+ */
29
+ function sanitizePath(path) {
30
+ // eslint-disable-next-line no-control-regex -- deliberately stripping C0/DEL control characters.
31
+ const withoutControls = path.replace(/[\u0000-\u001f\u007f]+/g, " ");
32
+ const oneLine = withoutControls.replace(/\s+/g, " ").trim();
33
+ const withoutBackticks = oneLine.replace(/`/g, "'");
34
+ if (withoutBackticks.length === 0)
35
+ return null;
36
+ return withoutBackticks.length > MAX_PATH_CHARS ? `${withoutBackticks.slice(0, MAX_PATH_CHARS)}…` : withoutBackticks;
37
+ }
38
+ /**
39
+ * The host sentence for a run stopped because its changes touched a
40
+ * protected path. Named the file when `path` sanitises to something usable;
41
+ * otherwise falls back to a sentence that doesn't try to name it.
42
+ */
43
+ export function protectedPathSentence(path) {
44
+ const safe = path ? sanitizePath(path) : null;
45
+ const named = safe
46
+ ? `its changes include \`${safe}\`, which this agent may not edit`
47
+ : "its changes include a file this agent may not edit";
48
+ return `${named}, so none of its changes were kept. Ask again without changing that file, or have the repository owner make that change.`;
49
+ }
50
+ /**
51
+ * The fixed line for a mention status comment naming a failed protected_path
52
+ * sub-run (host-status.ts). That comment reads children from the database,
53
+ * which has no path -- only the category -- so this line never names a file.
54
+ */
55
+ export const PROTECTED_PATH_HOST_LINE = "A sub-run could not open its changes: it changed a file its agent may not edit, so none of its changes were kept.";
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Protected for every coding run, whatever an agent's own protectedPaths say
3
+ * (docs/coding-services.md): wardby's own configuration under .wardby/, except
4
+ * the service declaration, which any builder may propose in its pull request
5
+ * (it takes effect only after a person merges it, since dispatch reads it from
6
+ * the base branch). Part of DEFAULT_PROTECTED_PATHS so new agents show it, and
7
+ * always added by protectedPathMatcher (providers/vcs/git.ts) so agents created
8
+ * before it existed get it too. The matcher applies it ahead of the agent's own
9
+ * list: the declaration is never protected, and nothing else under .wardby/ can
10
+ * be unprotected by an agent's exceptions.
11
+ */
12
+ export declare const WARDBY_PROTECTED_PATHS: readonly [".wardby/**", "!.wardby/services.yaml"];
13
+ /**
14
+ * A leading "!" makes a protectedPaths entry an exception (providers/vcs/git.ts
15
+ * protectedPathMatcher): one literal file path carved out of the agent's own
16
+ * patterns. Exceptions take no wildcards, so "!**" or "!.github/**" cannot
17
+ * switch a whole protected tree off.
18
+ */
19
+ export declare const PROTECTED_PATH_EXCEPTION = "!";
20
+ export declare function isProtectedPathException(path: string): boolean;
21
+ /** The glob of a protectedPaths entry: the entry itself, or what follows an exception's leading "!". */
22
+ export declare function protectedPathBody(path: string): string;
23
+ /**
24
+ * Whether a trimmed protectedPaths entry has a valid shape: a repository-relative
25
+ * POSIX glob with no empty or traversal components, or, behind one leading "!",
26
+ * such a path with no glob metacharacters. Length and control-character bounds
27
+ * are the caller's.
28
+ */
29
+ export declare function isWellFormedProtectedPath(path: string): boolean;
30
+ /** Exceptions only carve paths out; a list of nothing but exceptions protects nothing. */
31
+ export declare function protectsSomePath(paths: readonly string[]): boolean;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Protected for every coding run, whatever an agent's own protectedPaths say
3
+ * (docs/coding-services.md): wardby's own configuration under .wardby/, except
4
+ * the service declaration, which any builder may propose in its pull request
5
+ * (it takes effect only after a person merges it, since dispatch reads it from
6
+ * the base branch). Part of DEFAULT_PROTECTED_PATHS so new agents show it, and
7
+ * always added by protectedPathMatcher (providers/vcs/git.ts) so agents created
8
+ * before it existed get it too. The matcher applies it ahead of the agent's own
9
+ * list: the declaration is never protected, and nothing else under .wardby/ can
10
+ * be unprotected by an agent's exceptions.
11
+ */
12
+ export const WARDBY_PROTECTED_PATHS = [".wardby/**", "!.wardby/services.yaml"];
13
+ /**
14
+ * A leading "!" makes a protectedPaths entry an exception (providers/vcs/git.ts
15
+ * protectedPathMatcher): one literal file path carved out of the agent's own
16
+ * patterns. Exceptions take no wildcards, so "!**" or "!.github/**" cannot
17
+ * switch a whole protected tree off.
18
+ */
19
+ export const PROTECTED_PATH_EXCEPTION = "!";
20
+ export function isProtectedPathException(path) {
21
+ return path.startsWith(PROTECTED_PATH_EXCEPTION);
22
+ }
23
+ /** The glob of a protectedPaths entry: the entry itself, or what follows an exception's leading "!". */
24
+ export function protectedPathBody(path) {
25
+ return isProtectedPathException(path) ? path.slice(PROTECTED_PATH_EXCEPTION.length) : path;
26
+ }
27
+ /** Glob metacharacters an exception may not contain: it names one literal file. */
28
+ const EXCEPTION_GLOB_CHARACTERS = /[*?[\]{}]/;
29
+ /**
30
+ * Whether a trimmed protectedPaths entry has a valid shape: a repository-relative
31
+ * POSIX glob with no empty or traversal components, or, behind one leading "!",
32
+ * such a path with no glob metacharacters. Length and control-character bounds
33
+ * are the caller's.
34
+ */
35
+ export function isWellFormedProtectedPath(path) {
36
+ const body = protectedPathBody(path);
37
+ return (body.length > 0 &&
38
+ !isProtectedPathException(body) &&
39
+ !(isProtectedPathException(path) && EXCEPTION_GLOB_CHARACTERS.test(body)) &&
40
+ !body.startsWith("/") &&
41
+ !body.startsWith("./") &&
42
+ !body.includes("\\") &&
43
+ !body.split("/").some((part) => part === "" || part === "." || part === ".."));
44
+ }
45
+ /** Exceptions only carve paths out; a list of nothing but exceptions protects nothing. */
46
+ export function protectsSomePath(paths) {
47
+ return paths.some((path) => !isProtectedPathException(path));
48
+ }
@@ -1,11 +1,27 @@
1
1
  import { z } from "zod";
2
2
  export declare const CODING_PROTOCOL_VERSION: 1;
3
+ /** The code host every coding run's repository and pull request live on (see pullRequestUrlSchema); the one place to change when another is added. */
4
+ export declare const CODING_CODE_PROVIDER = "github";
3
5
  export declare const MAX_CODING_ARTIFACT_BYTES: number;
4
6
  export declare const MAX_CODING_TASK_BYTES: number;
7
+ /** Room reserved at the end of a composed task for lines the executor appends (e.g. the base commit). */
8
+ export declare const CODING_TASK_TRAILER_RESERVE_BYTES = 256;
5
9
  export declare const MAX_CODING_SUMMARY_BYTES: number;
6
10
  export declare const MAX_CODING_TESTS = 64;
7
11
  export declare const MAX_CODING_TEST_COMMAND_BYTES: number;
8
12
  export declare const MAX_TAG_BYTES = 32;
13
+ /**
14
+ * Coding-run services (docs/coding-services.md): the catalog name and version
15
+ * grammar, shared by the repository's .wardby/services.yaml, the catalog, and
16
+ * the worker input.
17
+ */
18
+ export declare const CODING_SERVICE_NAME: RegExp;
19
+ export declare const CODING_SERVICE_VERSION: RegExp;
20
+ export declare const MAX_CODING_SERVICES = 5;
21
+ /** A variable a service hands the agent's shells (DATABASE_URL, PGHOST, REDIS_URL, ...). */
22
+ export declare const CODING_SERVICE_ENV_NAME: RegExp;
23
+ export declare const MAX_CODING_SERVICE_ENV = 16;
24
+ export declare const MAX_CODING_SERVICE_ENV_VALUE_BYTES = 1024;
9
25
  /**
10
26
  * A worker's output-schema failure, reduced to where and how it failed, never
11
27
  * what the model wrote: `<path>:<zod issue code>`, where the path is dot-joined
@@ -14,18 +30,36 @@ export declare const MAX_TAG_BYTES = 32;
14
30
  */
15
31
  export declare const MAX_CODING_OUTPUT_ISSUES = 8;
16
32
  export declare const SAFE_CODING_OUTPUT_ISSUE: RegExp;
33
+ export declare const INVALID_SINGLE_LINE_CONTROL: RegExp;
34
+ export declare function byteLength(value: string): number;
35
+ export declare function isReservedServiceEnvName(name: string): boolean;
36
+ /** The variables one service hands the agent's shells: upper-case names wardby does not reserve. */
37
+ export declare const CodingServiceTestEnvSchema: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>>, Record<string, string>, Record<string, string>>;
17
38
  export declare function normalizeGitHubRepository(value: string): string;
18
39
  export declare function normalizeGitRef(value: string): string;
19
40
  export declare const CodingBaseRefSchema: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
20
41
  export declare const CodingTaskOverrideSchema: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>;
42
+ /**
43
+ * A section rendered to fit whatever room the task leaves (the knowledge note:
44
+ * src/knowledge/note.ts). Declared structurally so this module, which coding
45
+ * workers ship as a single file, imports nothing new.
46
+ */
47
+ export interface FittedSection {
48
+ /** The section text within `maxBytes`, or undefined when it does not fit. */
49
+ render(maxBytes: number): string | undefined;
50
+ }
21
51
  /**
22
52
  * A coding worker receives only its task text, so a coding agent's own
23
53
  * instructions (its systemPrompt) travel inside that text, ahead of the
24
- * request. Blank instructions leave the task unchanged. The combination must
25
- * still fit MAX_CODING_TASK_BYTES; exceeding it is an error naming both parts
26
- * rather than a silent truncation of either.
54
+ * request, followed by any note wardby generates for the run (the services it
55
+ * started: src/coding/services/note.ts). Blank instructions and no note leave
56
+ * the task unchanged. The combination must still fit MAX_CODING_TASK_BYTES;
57
+ * exceeding it is an error naming both parts rather than a silent truncation.
58
+ * A knowledge note, when given, goes between the standing instructions and the
59
+ * request and is fitted into whatever room is left: it is cut, or dropped,
60
+ * never the cause of an error.
27
61
  */
28
- export declare function composeCodingTask(instructions: string | null | undefined, task: string): string;
62
+ export declare function composeCodingTask(instructions: string | null | undefined, task: string, note?: string, knowledge?: FittedSection): string;
29
63
  /**
30
64
  * The tag only labels a pull request title, so a model's malformed tag must not
31
65
  * sink an otherwise finished run. A tag that already passes is kept as-is; any
@@ -35,6 +69,8 @@ export declare function composeCodingTask(instructions: string | null | undefine
35
69
  * re-validates whatever survives.
36
70
  */
37
71
  export declare function normalizeCodingTag(value: unknown): string | null | undefined;
72
+ /** Longest line a debug-traced worker writes to its log (src/coding-worker/debug-trace.ts). */
73
+ export declare const MAX_DEBUG_TRACE_LINE_BYTES: number;
38
74
  export declare const CodingTaskInputSchema: z.ZodEffects<z.ZodObject<{
39
75
  schemaVersion: z.ZodLiteral<1>;
40
76
  runId: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>, string, string>;
@@ -60,6 +96,33 @@ export declare const CodingTaskInputSchema: z.ZodEffects<z.ZodObject<{
60
96
  }, {
61
97
  runId: string;
62
98
  }>>;
99
+ /**
100
+ * Admin-requested debug trace (CodingAgentProfile.debugTraceUntil): the
101
+ * worker writes its full stream trace to its own log. Absent means off;
102
+ * the control plane writes the key only when true, so an input for an
103
+ * untraced run is unchanged for workers that predate it.
104
+ */
105
+ debugTrace: z.ZodOptional<z.ZodBoolean>;
106
+ /**
107
+ * Coding-run services started next to this run (docs/coding-services.md):
108
+ * each one's catalog name and version, and the variables the agent's shells
109
+ * receive. Absent means none; the control plane writes the key only when a
110
+ * run has services, so every other input is unchanged for workers that
111
+ * predate it.
112
+ */
113
+ services: z.ZodOptional<z.ZodArray<z.ZodObject<{
114
+ name: z.ZodString;
115
+ version: z.ZodString;
116
+ testEnv: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>>, Record<string, string>, Record<string, string>>;
117
+ }, "strict", z.ZodTypeAny, {
118
+ name: string;
119
+ version: string;
120
+ testEnv: Record<string, string>;
121
+ }, {
122
+ name: string;
123
+ version: string;
124
+ testEnv: Record<string, string>;
125
+ }>, "many">>;
63
126
  }, "strict", z.ZodTypeAny, {
64
127
  repository: string;
65
128
  schemaVersion: 1;
@@ -73,6 +136,12 @@ export declare const CodingTaskInputSchema: z.ZodEffects<z.ZodObject<{
73
136
  continuationOf?: {
74
137
  runId: string;
75
138
  } | undefined;
139
+ debugTrace?: boolean | undefined;
140
+ services?: {
141
+ name: string;
142
+ version: string;
143
+ testEnv: Record<string, string>;
144
+ }[] | undefined;
76
145
  }, {
77
146
  repository: string;
78
147
  schemaVersion: 1;
@@ -86,6 +155,12 @@ export declare const CodingTaskInputSchema: z.ZodEffects<z.ZodObject<{
86
155
  continuationOf?: {
87
156
  runId: string;
88
157
  } | undefined;
158
+ debugTrace?: boolean | undefined;
159
+ services?: {
160
+ name: string;
161
+ version: string;
162
+ testEnv: Record<string, string>;
163
+ }[] | undefined;
89
164
  }>, {
90
165
  repository: string;
91
166
  schemaVersion: 1;
@@ -99,6 +174,12 @@ export declare const CodingTaskInputSchema: z.ZodEffects<z.ZodObject<{
99
174
  continuationOf?: {
100
175
  runId: string;
101
176
  } | undefined;
177
+ debugTrace?: boolean | undefined;
178
+ services?: {
179
+ name: string;
180
+ version: string;
181
+ testEnv: Record<string, string>;
182
+ }[] | undefined;
102
183
  }, {
103
184
  repository: string;
104
185
  schemaVersion: 1;
@@ -112,6 +193,12 @@ export declare const CodingTaskInputSchema: z.ZodEffects<z.ZodObject<{
112
193
  continuationOf?: {
113
194
  runId: string;
114
195
  } | undefined;
196
+ debugTrace?: boolean | undefined;
197
+ services?: {
198
+ name: string;
199
+ version: string;
200
+ testEnv: Record<string, string>;
201
+ }[] | undefined;
115
202
  }>;
116
203
  export declare const CodingAgentOutputSchema: z.ZodEffects<z.ZodObject<{
117
204
  schemaVersion: z.ZodLiteral<1>;