@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
@@ -0,0 +1,74 @@
1
+ -- Coding-run services (docs/coding-services.md): the admin-managed catalog a
2
+ -- repository's .wardby/services.yaml names entries from, the service names each
3
+ -- coding agent may use, and the services resolved for each run at dispatch.
4
+ -- Additive: one new table, two new columns with defaults, and the built-in rows
5
+ -- (src/coding/services/builtins.ts; builtins.database.test.ts keeps them equal).
6
+
7
+ -- CreateTable
8
+ CREATE TABLE "CodingService" (
9
+ "id" TEXT NOT NULL,
10
+ "name" TEXT NOT NULL,
11
+ "version" TEXT NOT NULL,
12
+ "kind" TEXT NOT NULL DEFAULT 'sidecar',
13
+ "image" TEXT NOT NULL,
14
+ "port" INTEGER NOT NULL,
15
+ "serviceEnv" JSONB NOT NULL DEFAULT '{}',
16
+ "testEnv" JSONB NOT NULL DEFAULT '{}',
17
+ "readiness" JSONB NOT NULL,
18
+ "resources" JSONB NOT NULL,
19
+ "dataPath" TEXT NOT NULL,
20
+ "writablePaths" JSONB NOT NULL DEFAULT '[]',
21
+ "builtin" BOOLEAN NOT NULL DEFAULT false,
22
+ "createdById" TEXT,
23
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
24
+ "updatedAt" TIMESTAMP(3) NOT NULL,
25
+
26
+ CONSTRAINT "CodingService_pkey" PRIMARY KEY ("id")
27
+ );
28
+
29
+ -- CreateIndex
30
+ CREATE UNIQUE INDEX "CodingService_name_version_key" ON "CodingService"("name", "version");
31
+
32
+ -- AlterTable
33
+ ALTER TABLE "CodingAgentProfile" ADD COLUMN "services" JSONB NOT NULL DEFAULT '[]';
34
+
35
+ -- AlterTable
36
+ ALTER TABLE "CodingRun" ADD COLUMN "services" JSONB NOT NULL DEFAULT '[]';
37
+
38
+ -- Built-in catalog entries.
39
+ INSERT INTO "CodingService" ("id", "name", "version", "kind", "image", "port", "serviceEnv", "testEnv", "readiness", "resources", "dataPath", "writablePaths", "builtin", "updatedAt") VALUES
40
+ ('builtin-postgres-15', 'postgres', '15', 'sidecar',
41
+ 'docker.io/library/postgres@sha256:724292da1f2e50bdccfc3302ce75bbba7f4a6076701b588cc795fcac65683550', 5432,
42
+ '{"POSTGRES_USER":"test","POSTGRES_PASSWORD":"test","POSTGRES_DB":"test","PGDATA":"/var/lib/postgresql/data/pgdata"}',
43
+ '{"DATABASE_URL":"postgres://test:test@127.0.0.1:5432/test","PGHOST":"127.0.0.1","PGPORT":"5432","PGUSER":"test","PGPASSWORD":"test","PGDATABASE":"test"}',
44
+ '{"command":["pg_isready","-h","127.0.0.1","-p","5432","-U","test","-d","test"],"periodSeconds":2,"timeoutSeconds":2,"failureThreshold":30}',
45
+ '{"cpuMillicores":500,"memoryMib":512,"diskMib":1024}',
46
+ '/var/lib/postgresql/data', '["/var/run/postgresql","/tmp"]', true, CURRENT_TIMESTAMP),
47
+ ('builtin-postgres-16', 'postgres', '16', 'sidecar',
48
+ 'docker.io/library/postgres@sha256:1a6ab3f5345eb6dbe04a1349529caabdb0ab09293a09590fad07b2246bfa4b54', 5432,
49
+ '{"POSTGRES_USER":"test","POSTGRES_PASSWORD":"test","POSTGRES_DB":"test","PGDATA":"/var/lib/postgresql/data/pgdata"}',
50
+ '{"DATABASE_URL":"postgres://test:test@127.0.0.1:5432/test","PGHOST":"127.0.0.1","PGPORT":"5432","PGUSER":"test","PGPASSWORD":"test","PGDATABASE":"test"}',
51
+ '{"command":["pg_isready","-h","127.0.0.1","-p","5432","-U","test","-d","test"],"periodSeconds":2,"timeoutSeconds":2,"failureThreshold":30}',
52
+ '{"cpuMillicores":500,"memoryMib":512,"diskMib":1024}',
53
+ '/var/lib/postgresql/data', '["/var/run/postgresql","/tmp"]', true, CURRENT_TIMESTAMP),
54
+ ('builtin-postgres-17', 'postgres', '17', 'sidecar',
55
+ 'docker.io/library/postgres@sha256:d74eeac9a635390a49bc21bd49fccd973de707e2a53a76ac49b552b8712ec46f', 5432,
56
+ '{"POSTGRES_USER":"test","POSTGRES_PASSWORD":"test","POSTGRES_DB":"test","PGDATA":"/var/lib/postgresql/data/pgdata"}',
57
+ '{"DATABASE_URL":"postgres://test:test@127.0.0.1:5432/test","PGHOST":"127.0.0.1","PGPORT":"5432","PGUSER":"test","PGPASSWORD":"test","PGDATABASE":"test"}',
58
+ '{"command":["pg_isready","-h","127.0.0.1","-p","5432","-U","test","-d","test"],"periodSeconds":2,"timeoutSeconds":2,"failureThreshold":30}',
59
+ '{"cpuMillicores":500,"memoryMib":512,"diskMib":1024}',
60
+ '/var/lib/postgresql/data', '["/var/run/postgresql","/tmp"]', true, CURRENT_TIMESTAMP),
61
+ ('builtin-redis-7', 'redis', '7', 'sidecar',
62
+ 'docker.io/library/redis@sha256:c6eabf748fc7a61dbb5a705c78bcf3d6377b1127a97d0ce965c11c44ba46896f', 6379,
63
+ '{}',
64
+ '{"REDIS_URL":"redis://127.0.0.1:6379/0","REDIS_HOST":"127.0.0.1","REDIS_PORT":"6379"}',
65
+ '{"command":["redis-cli","-h","127.0.0.1","-p","6379","ping"],"periodSeconds":1,"timeoutSeconds":2,"failureThreshold":30}',
66
+ '{"cpuMillicores":250,"memoryMib":256,"diskMib":256}',
67
+ '/data', '[]', true, CURRENT_TIMESTAMP),
68
+ ('builtin-mysql-8', 'mysql', '8', 'sidecar',
69
+ 'docker.io/library/mysql@sha256:0744ee5ef89ce6ccfa13de3e579fe6b9e27f93dd70da9c06d2c908b1b193fb8d', 3306,
70
+ '{"MYSQL_ROOT_PASSWORD":"test","MYSQL_DATABASE":"test","MYSQL_USER":"test","MYSQL_PASSWORD":"test"}',
71
+ '{"DATABASE_URL":"mysql://test:test@127.0.0.1:3306/test","MYSQL_HOST":"127.0.0.1","MYSQL_TCP_PORT":"3306","MYSQL_USER":"test","MYSQL_PASSWORD":"test","MYSQL_DATABASE":"test"}',
72
+ '{"command":["mysqladmin","ping","-h","127.0.0.1","-P","3306","-utest","-ptest","--silent"],"periodSeconds":2,"timeoutSeconds":3,"failureThreshold":45}',
73
+ '{"cpuMillicores":500,"memoryMib":1024,"diskMib":2048}',
74
+ '/var/lib/mysql', '["/var/run/mysqld","/tmp"]', true, CURRENT_TIMESTAMP);
@@ -0,0 +1,5 @@
1
+ -- Claude Code's tool-runner image (the container that runs its commands) for the
2
+ -- agent's toolchain, resolved at dispatch alongside workerImage so a run keeps the
3
+ -- image it was dispatched with. Additive and nullable: existing rows and Codex runs
4
+ -- leave it null, and the launcher falls back to the deployment's default image.
5
+ ALTER TABLE "CodingRun" ADD COLUMN "toolImage" TEXT;
@@ -0,0 +1,34 @@
1
+ -- Jira issue-tracker links and per-run status comments (phase 1).
2
+ CREATE TABLE "AgentIssueProject" (
3
+ "id" TEXT NOT NULL,
4
+ "agentId" TEXT NOT NULL,
5
+ "provider" TEXT NOT NULL,
6
+ "projectKey" TEXT NOT NULL,
7
+ "access" TEXT NOT NULL,
8
+ "triggers" TEXT[] DEFAULT ARRAY[]::TEXT[],
9
+ "triggerStatuses" TEXT[] DEFAULT ARRAY[]::TEXT[],
10
+ "triggerLabels" TEXT[] DEFAULT ARRAY[]::TEXT[],
11
+ "jqlFilter" TEXT,
12
+ "trustedAccountIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
13
+ "commentVisibilityRole" TEXT,
14
+ "authorizedById" TEXT NOT NULL,
15
+ "authorizedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
16
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
17
+ CONSTRAINT "AgentIssueProject_pkey" PRIMARY KEY ("id")
18
+ );
19
+ CREATE UNIQUE INDEX "AgentIssueProject_agentId_provider_projectKey_key" ON "AgentIssueProject"("agentId", "provider", "projectKey");
20
+ CREATE INDEX "AgentIssueProject_provider_projectKey_idx" ON "AgentIssueProject"("provider", "projectKey");
21
+ ALTER TABLE "AgentIssueProject" ADD CONSTRAINT "AgentIssueProject_agentId_fkey" FOREIGN KEY ("agentId") REFERENCES "Agent"("id") ON DELETE CASCADE ON UPDATE CASCADE;
22
+
23
+ CREATE TABLE "RunIssueStatus" (
24
+ "runId" TEXT NOT NULL,
25
+ "provider" TEXT NOT NULL,
26
+ "issueKey" TEXT NOT NULL,
27
+ "commentId" TEXT,
28
+ "visibilityRole" TEXT,
29
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
30
+ "completedAt" TIMESTAMP(3),
31
+ CONSTRAINT "RunIssueStatus_pkey" PRIMARY KEY ("runId")
32
+ );
33
+ CREATE INDEX "RunIssueStatus_completedAt_idx" ON "RunIssueStatus"("completedAt");
34
+ ALTER TABLE "RunIssueStatus" ADD CONSTRAINT "RunIssueStatus_runId_fkey" FOREIGN KEY ("runId") REFERENCES "Run"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,3 @@
1
+ -- Jira phase 2: per-link allowlists for transitions and field edits.
2
+ ALTER TABLE "AgentIssueProject" ADD COLUMN "allowedTransitions" TEXT[] DEFAULT ARRAY[]::TEXT[];
3
+ ALTER TABLE "AgentIssueProject" ADD COLUMN "writableFields" TEXT[] DEFAULT ARRAY[]::TEXT[];
@@ -0,0 +1,2 @@
1
+ -- Jira phase 2: per-link allowlist of issue link types jira_link_issues may create.
2
+ ALTER TABLE "AgentIssueProject" ADD COLUMN "allowedLinkTypes" TEXT[] DEFAULT ARRAY[]::TEXT[];
@@ -0,0 +1,28 @@
1
+ -- Jira phase 3 (the Jira -> code bridge): per-link PR statuses, the originating
2
+ -- issue on a coding run, and the pull requests opened for tracker issues.
3
+ ALTER TABLE "AgentIssueProject" ADD COLUMN "onPullRequestOpened" TEXT;
4
+ ALTER TABLE "AgentIssueProject" ADD COLUMN "onPullRequestMerged" TEXT;
5
+ ALTER TABLE "CodingRun" ADD COLUMN "issueProvider" TEXT;
6
+ ALTER TABLE "CodingRun" ADD COLUMN "issueKey" TEXT;
7
+
8
+ -- No foreign keys by design: audit-style rows that survive agent/run deletion.
9
+ CREATE TABLE "IssuePullRequest" (
10
+ "id" TEXT NOT NULL,
11
+ "issueProvider" TEXT NOT NULL,
12
+ "issueKey" TEXT NOT NULL,
13
+ "codeProvider" TEXT NOT NULL,
14
+ "repository" TEXT NOT NULL,
15
+ "number" INTEGER NOT NULL,
16
+ "url" TEXT NOT NULL,
17
+ "agentId" TEXT NOT NULL,
18
+ "openedByRunId" TEXT NOT NULL,
19
+ "state" TEXT NOT NULL DEFAULT 'open',
20
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
21
+ "updatedAt" TIMESTAMP(3) NOT NULL,
22
+
23
+ CONSTRAINT "IssuePullRequest_pkey" PRIMARY KEY ("id")
24
+ );
25
+
26
+ CREATE UNIQUE INDEX "IssuePullRequest_codeProvider_repository_number_issueProvid_key" ON "IssuePullRequest"("codeProvider", "repository", "number", "issueProvider", "issueKey");
27
+
28
+ CREATE INDEX "IssuePullRequest_issueProvider_issueKey_idx" ON "IssuePullRequest"("issueProvider", "issueKey");
@@ -0,0 +1,25 @@
1
+ -- Jira phase 4: issue creation allowlist + cap on the link, self-defect config on the agent, and dedupe fingerprints.
2
+ ALTER TABLE "AgentIssueProject" ADD COLUMN "creatableIssueTypes" TEXT[] DEFAULT ARRAY[]::TEXT[];
3
+ ALTER TABLE "AgentIssueProject" ADD COLUMN "maxNewIssuesPerRun" INTEGER;
4
+
5
+ ALTER TABLE "Agent" ADD COLUMN "defectProjectKey" TEXT;
6
+ ALTER TABLE "Agent" ADD COLUMN "defectIssueType" TEXT;
7
+
8
+ CREATE TABLE "IssueFingerprint" (
9
+ "id" TEXT NOT NULL,
10
+ "issueProvider" TEXT NOT NULL,
11
+ "projectKey" TEXT NOT NULL,
12
+ "fingerprintHash" TEXT NOT NULL,
13
+ "issueKey" TEXT NOT NULL,
14
+ "agentId" TEXT NOT NULL,
15
+ "createdByRunId" TEXT,
16
+ "seenCount" INTEGER NOT NULL DEFAULT 1,
17
+ "firstSeenAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
18
+ "lastSeenAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
19
+
20
+ CONSTRAINT "IssueFingerprint_pkey" PRIMARY KEY ("id")
21
+ );
22
+
23
+ CREATE UNIQUE INDEX "IssueFingerprint_issueProvider_issueKey_key" ON "IssueFingerprint"("issueProvider", "issueKey");
24
+ CREATE INDEX "IssueFingerprint_issueProvider_projectKey_fingerprintHash_idx" ON "IssueFingerprint"("issueProvider", "projectKey", "fingerprintHash");
25
+ CREATE INDEX "IssueFingerprint_createdByRunId_idx" ON "IssueFingerprint"("createdByRunId");
@@ -0,0 +1,56 @@
1
+ -- Issue cost attribution (Jira phase 4a): work items, per-run attribution,
2
+ -- and per-run per-model usage by priced token kind.
3
+
4
+ CREATE TABLE "WorkItem" (
5
+ "id" TEXT NOT NULL,
6
+ "provider" TEXT NOT NULL,
7
+ "key" TEXT NOT NULL,
8
+ "title" TEXT,
9
+ "type" TEXT,
10
+ "url" TEXT,
11
+ "scopeKey" TEXT NOT NULL,
12
+ "parentKey" TEXT,
13
+ "parentKind" TEXT,
14
+ "refreshedAt" TIMESTAMP(3),
15
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
16
+ "updatedAt" TIMESTAMP(3) NOT NULL,
17
+
18
+ CONSTRAINT "WorkItem_pkey" PRIMARY KEY ("id")
19
+ );
20
+
21
+ CREATE UNIQUE INDEX "WorkItem_provider_key_key" ON "WorkItem"("provider", "key");
22
+ CREATE INDEX "WorkItem_provider_parentKey_idx" ON "WorkItem"("provider", "parentKey");
23
+ CREATE INDEX "WorkItem_provider_scopeKey_idx" ON "WorkItem"("provider", "scopeKey");
24
+
25
+ CREATE TABLE "RunAttribution" (
26
+ "runId" TEXT NOT NULL,
27
+ "workItemId" TEXT NOT NULL,
28
+ "parentKeyAtRun" TEXT,
29
+ "source" TEXT NOT NULL,
30
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
31
+
32
+ CONSTRAINT "RunAttribution_pkey" PRIMARY KEY ("runId")
33
+ );
34
+
35
+ CREATE INDEX "RunAttribution_workItemId_idx" ON "RunAttribution"("workItemId");
36
+ CREATE INDEX "RunAttribution_parentKeyAtRun_idx" ON "RunAttribution"("parentKeyAtRun");
37
+
38
+ ALTER TABLE "RunAttribution" ADD CONSTRAINT "RunAttribution_runId_fkey"
39
+ FOREIGN KEY ("runId") REFERENCES "Run"("id") ON DELETE CASCADE ON UPDATE CASCADE;
40
+ ALTER TABLE "RunAttribution" ADD CONSTRAINT "RunAttribution_workItemId_fkey"
41
+ FOREIGN KEY ("workItemId") REFERENCES "WorkItem"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
42
+
43
+ CREATE TABLE "RunModelUsage" (
44
+ "runId" TEXT NOT NULL,
45
+ "model" TEXT NOT NULL,
46
+ "freshInputTokens" INTEGER NOT NULL DEFAULT 0,
47
+ "cachedInputTokens" INTEGER NOT NULL DEFAULT 0,
48
+ "cacheWriteTokens" INTEGER NOT NULL DEFAULT 0,
49
+ "outputTokens" INTEGER NOT NULL DEFAULT 0,
50
+ "costUsd" DECIMAL(18,10) NOT NULL DEFAULT 0,
51
+
52
+ CONSTRAINT "RunModelUsage_pkey" PRIMARY KEY ("runId", "model")
53
+ );
54
+
55
+ ALTER TABLE "RunModelUsage" ADD CONSTRAINT "RunModelUsage_runId_fkey"
56
+ FOREIGN KEY ("runId") REFERENCES "Run"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,23 @@
1
+ -- Live start-up state of each coding-run service, one row per run x service,
2
+ -- written by the job launchers for display (wardby viewer, get_run).
3
+ CREATE TYPE "CodingServiceState" AS ENUM ('pending', 'probing', 'ready', 'failed');
4
+
5
+ CREATE TABLE "CodingRunServiceStatus" (
6
+ "id" TEXT NOT NULL,
7
+ "runId" TEXT NOT NULL,
8
+ "name" TEXT NOT NULL,
9
+ "state" "CodingServiceState" NOT NULL DEFAULT 'pending',
10
+ "attempts" INTEGER,
11
+ "reason" TEXT,
12
+ "readyAt" TIMESTAMP(3),
13
+ "failedAt" TIMESTAMP(3),
14
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
15
+ "updatedAt" TIMESTAMP(3) NOT NULL,
16
+
17
+ CONSTRAINT "CodingRunServiceStatus_pkey" PRIMARY KEY ("id")
18
+ );
19
+
20
+ CREATE UNIQUE INDEX "CodingRunServiceStatus_runId_name_key" ON "CodingRunServiceStatus"("runId", "name");
21
+
22
+ ALTER TABLE "CodingRunServiceStatus" ADD CONSTRAINT "CodingRunServiceStatus_runId_fkey"
23
+ FOREIGN KEY ("runId") REFERENCES "Run"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,54 @@
1
+ -- Live events for the admin viewer (docs/viewer-api.md): small pg_notify
2
+ -- payloads on channel wardby_viewer. Runs as the writing role; pg_notify
3
+ -- needs no grant. Payloads stay far below NOTIFY's 8000-byte limit.
4
+ CREATE FUNCTION wardby_viewer_notify() RETURNS trigger LANGUAGE plpgsql AS $$
5
+ DECLARE
6
+ payload jsonb;
7
+ BEGIN
8
+ IF TG_TABLE_NAME = 'Run' THEN
9
+ IF TG_OP = 'UPDATE'
10
+ AND NEW."status" IS NOT DISTINCT FROM OLD."status"
11
+ AND NEW."turns" IS NOT DISTINCT FROM OLD."turns"
12
+ AND NEW."costUsd" IS NOT DISTINCT FROM OLD."costUsd"
13
+ AND NEW."tokensIn" IS NOT DISTINCT FROM OLD."tokensIn"
14
+ AND NEW."tokensOut" IS NOT DISTINCT FROM OLD."tokensOut"
15
+ AND NEW."finishedAt" IS NOT DISTINCT FROM OLD."finishedAt"
16
+ AND NEW."parentRunId" IS NOT DISTINCT FROM OLD."parentRunId" THEN
17
+ RETURN NULL; -- heartbeat-only and other invisible updates
18
+ END IF;
19
+ payload := jsonb_build_object(
20
+ 'kind', 'run', 'runId', NEW."id", 'parentRunId', NEW."parentRunId", 'agentId', NEW."agentId",
21
+ 'status', NEW."status", 'turns', NEW."turns", 'tokensIn', NEW."tokensIn", 'tokensOut', NEW."tokensOut",
22
+ 'costUsd', NEW."costUsd"::float8,
23
+ 'finishedAt', to_char(NEW."finishedAt" AT TIME ZONE 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'));
24
+ ELSIF TG_TABLE_NAME = 'CodingRunServiceStatus' THEN
25
+ payload := jsonb_build_object(
26
+ 'kind', 'service', 'runId', NEW."runId", 'name', NEW."name", 'state', NEW."state", 'attempts', NEW."attempts");
27
+ ELSIF TG_TABLE_NAME = 'IssuePullRequest' THEN
28
+ payload := jsonb_build_object('kind', 'outcome', 'runId', NEW."openedByRunId", 'source', 'pull_request');
29
+ ELSIF TG_TABLE_NAME = 'RunHostStatus' THEN
30
+ payload := jsonb_build_object('kind', 'outcome', 'runId', NEW."runId", 'source', 'host_status');
31
+ ELSIF TG_TABLE_NAME = 'RunIssueStatus' THEN
32
+ payload := jsonb_build_object('kind', 'outcome', 'runId', NEW."runId", 'source', 'issue_status');
33
+ ELSIF TG_TABLE_NAME = 'RunHostCheck' THEN
34
+ payload := jsonb_build_object('kind', 'outcome', 'runId', NEW."runId", 'source', 'host_check');
35
+ ELSE
36
+ RETURN NULL;
37
+ END IF;
38
+ PERFORM pg_notify('wardby_viewer', payload::text);
39
+ RETURN NULL;
40
+ END;
41
+ $$;
42
+
43
+ CREATE TRIGGER "Run_viewer_notify" AFTER INSERT OR UPDATE ON "Run"
44
+ FOR EACH ROW EXECUTE FUNCTION wardby_viewer_notify();
45
+ CREATE TRIGGER "CodingRunServiceStatus_viewer_notify" AFTER INSERT OR UPDATE ON "CodingRunServiceStatus"
46
+ FOR EACH ROW EXECUTE FUNCTION wardby_viewer_notify();
47
+ CREATE TRIGGER "IssuePullRequest_viewer_notify" AFTER INSERT OR UPDATE ON "IssuePullRequest"
48
+ FOR EACH ROW EXECUTE FUNCTION wardby_viewer_notify();
49
+ CREATE TRIGGER "RunHostStatus_viewer_notify" AFTER INSERT OR UPDATE ON "RunHostStatus"
50
+ FOR EACH ROW EXECUTE FUNCTION wardby_viewer_notify();
51
+ CREATE TRIGGER "RunIssueStatus_viewer_notify" AFTER INSERT OR UPDATE ON "RunIssueStatus"
52
+ FOR EACH ROW EXECUTE FUNCTION wardby_viewer_notify();
53
+ CREATE TRIGGER "RunHostCheck_viewer_notify" AFTER INSERT OR UPDATE ON "RunHostCheck"
54
+ FOR EACH ROW EXECUTE FUNCTION wardby_viewer_notify();
@@ -0,0 +1,47 @@
1
+ -- Fixes for wardby_viewer_notify(): finishedAt formatting under a non-UTC
2
+ -- session TimeZone (the column is timestamp without time zone, already UTC),
3
+ -- and notification failures never fail the write. The triggers are unchanged.
4
+ CREATE OR REPLACE FUNCTION wardby_viewer_notify() RETURNS trigger LANGUAGE plpgsql AS $$
5
+ DECLARE
6
+ payload jsonb;
7
+ BEGIN
8
+ IF TG_TABLE_NAME = 'Run' THEN
9
+ IF TG_OP = 'UPDATE'
10
+ AND NEW."status" IS NOT DISTINCT FROM OLD."status"
11
+ AND NEW."turns" IS NOT DISTINCT FROM OLD."turns"
12
+ AND NEW."costUsd" IS NOT DISTINCT FROM OLD."costUsd"
13
+ AND NEW."tokensIn" IS NOT DISTINCT FROM OLD."tokensIn"
14
+ AND NEW."tokensOut" IS NOT DISTINCT FROM OLD."tokensOut"
15
+ AND NEW."finishedAt" IS NOT DISTINCT FROM OLD."finishedAt"
16
+ AND NEW."parentRunId" IS NOT DISTINCT FROM OLD."parentRunId" THEN
17
+ RETURN NULL; -- heartbeat-only and other invisible updates
18
+ END IF;
19
+ payload := jsonb_build_object(
20
+ 'kind', 'run', 'runId', NEW."id", 'parentRunId', NEW."parentRunId", 'agentId', NEW."agentId",
21
+ 'status', NEW."status", 'turns', NEW."turns", 'tokensIn', NEW."tokensIn", 'tokensOut', NEW."tokensOut",
22
+ 'costUsd', NEW."costUsd"::float8,
23
+ 'finishedAt', to_char(NEW."finishedAt", 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'));
24
+ ELSIF TG_TABLE_NAME = 'CodingRunServiceStatus' THEN
25
+ payload := jsonb_build_object(
26
+ 'kind', 'service', 'runId', NEW."runId", 'name', NEW."name", 'state', NEW."state", 'attempts', NEW."attempts");
27
+ ELSIF TG_TABLE_NAME = 'IssuePullRequest' THEN
28
+ payload := jsonb_build_object('kind', 'outcome', 'runId', NEW."openedByRunId", 'source', 'pull_request');
29
+ ELSIF TG_TABLE_NAME = 'RunHostStatus' THEN
30
+ payload := jsonb_build_object('kind', 'outcome', 'runId', NEW."runId", 'source', 'host_status');
31
+ ELSIF TG_TABLE_NAME = 'RunIssueStatus' THEN
32
+ payload := jsonb_build_object('kind', 'outcome', 'runId', NEW."runId", 'source', 'issue_status');
33
+ ELSIF TG_TABLE_NAME = 'RunHostCheck' THEN
34
+ payload := jsonb_build_object('kind', 'outcome', 'runId', NEW."runId", 'source', 'host_check');
35
+ ELSE
36
+ RETURN NULL;
37
+ END IF;
38
+ -- A viewer event must never fail the write that caused it (e.g. a payload
39
+ -- over NOTIFY's 8000-byte limit).
40
+ BEGIN
41
+ PERFORM pg_notify('wardby_viewer', payload::text);
42
+ EXCEPTION WHEN OTHERS THEN
43
+ NULL;
44
+ END;
45
+ RETURN NULL;
46
+ END;
47
+ $$;
@@ -0,0 +1,12 @@
1
+ -- Indexes for the admin viewer's queries (docs/viewer-api.md): the graph
2
+ -- window (runs started since a time, or still pending/running), the
3
+ -- ancestor/children walks, and the outcome lookup by run. Plain CREATE INDEX
4
+ -- briefly blocks writes to each table while it builds; on a large existing
5
+ -- deployment, apply this migration in a quiet period.
6
+ CREATE INDEX "Run_startedAt_idx" ON "Run"("startedAt");
7
+
8
+ CREATE INDEX "Run_status_idx" ON "Run"("status");
9
+
10
+ CREATE INDEX "Run_parentRunId_idx" ON "Run"("parentRunId");
11
+
12
+ CREATE INDEX "IssuePullRequest_openedByRunId_idx" ON "IssuePullRequest"("openedByRunId");
@@ -0,0 +1,26 @@
1
+ -- Model catalog: admin overrides of the shipped catalog, and each run's
2
+ -- catalog entry as recorded when it started. Additive only.
3
+ CREATE TABLE "ModelCatalogEntry" (
4
+ "provider" TEXT NOT NULL,
5
+ "modelId" TEXT NOT NULL,
6
+ "enabled" BOOLEAN NOT NULL,
7
+ "encoding" TEXT NOT NULL,
8
+ "inputPerMTok" DOUBLE PRECISION NOT NULL,
9
+ "outputPerMTok" DOUBLE PRECISION NOT NULL,
10
+ "cachedInputPerMTok" DOUBLE PRECISION NOT NULL,
11
+ "cacheWritePerMTok" DOUBLE PRECISION NOT NULL,
12
+ "efforts" TEXT[],
13
+ "thinkingMode" TEXT NOT NULL,
14
+ "sourceUrl" TEXT NOT NULL,
15
+ "updatedBy" TEXT NOT NULL,
16
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
17
+ "updatedAt" TIMESTAMP(3) NOT NULL,
18
+
19
+ CONSTRAINT "ModelCatalogEntry_pkey" PRIMARY KEY ("provider","modelId")
20
+ );
21
+
22
+ ALTER TABLE "Run" ADD COLUMN "pricingVersion" TEXT;
23
+ ALTER TABLE "Run" ADD COLUMN "pricingSnapshot" JSONB;
24
+
25
+ ALTER TABLE "CodingProxySession" ADD COLUMN "pricingVersion" TEXT;
26
+ ALTER TABLE "CodingProxySession" ADD COLUMN "catalogEntry" JSONB;