@desplega.ai/agent-swarm 2.4.0 → 2.4.2

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 (239) hide show
  1. package/README.md +1 -1
  2. package/dist/{acp-adapter-kedstxx6.js → acp-adapter-dv7hmx4r.js} +9 -9
  3. package/dist/{actions-vget6r1k.js → actions-51nc1gny.js} +21 -21
  4. package/dist/{amp-adapter-xeb5mktv.js → amp-adapter-abp5tdx8.js} +4 -4
  5. package/dist/{app-mqap8t8m.js → app-9h14qvr6.js} +3 -3
  6. package/dist/{assistant-h0gv97mv.js → assistant-wv1gz3mt.js} +22 -22
  7. package/dist/{boot-reembed-qr8a894z.js → boot-reembed-6yn53ms9.js} +1 -1
  8. package/dist/{boot-reembed-rj85jjhw.js → boot-reembed-7fcka4z5.js} +1 -1
  9. package/dist/{boot-scrub-sweep-eyfvn6v9.js → boot-scrub-sweep-pm1580ax.js} +4 -4
  10. package/dist/{boot-seeds-xs9a8dx1.js → boot-seeds-g5hfc1x8.js} +4 -4
  11. package/dist/{claude-adapter-bm23cye7.js → claude-adapter-gf3kxhf0.js} +9 -9
  12. package/dist/{claude-managed-adapter-1mwrsm9d.js → claude-managed-adapter-h2y889ge.js} +2 -2
  13. package/dist/{claude-managed-setup-gkfgks4j.js → claude-managed-setup-h00hsgtz.js} +2 -2
  14. package/dist/{claude-sdk-session-apb4ypz3.js → claude-sdk-session-s2k1qd8y.js} +13 -13
  15. package/dist/{cli-tj4j2ts4.js → cli-02qm7src.js} +8 -8
  16. package/dist/{cli-1cevz46c.js → cli-0qvtffe9.js} +6 -6
  17. package/dist/{cli-avmqhatn.js → cli-10hhg0km.js} +8 -8
  18. package/dist/{cli-7gh7020n.js → cli-1dmcq2eh.js} +1 -1
  19. package/dist/{cli-kz116kvw.js → cli-239yjk27.js} +7 -7
  20. package/dist/{cli-7ayprxp7.js → cli-2dfbv8qr.js} +8 -0
  21. package/dist/{cli-a49vpbf3.js → cli-5kqnemen.js} +1 -1
  22. package/dist/{cli-x719j3vs.js → cli-5rk36sjf.js} +442 -205
  23. package/dist/{cli-fb6t92v8.js → cli-6x9ma5w5.js} +1 -1
  24. package/dist/{cli-c8fwpgqb.js → cli-7225gwj7.js} +2 -2
  25. package/dist/{cli-5s5hx57y.js → cli-7awf1fp8.js} +1 -1
  26. package/dist/{cli-bn26xbcs.js → cli-8nyhf7za.js} +1 -1
  27. package/dist/{cli-ywyrffff.js → cli-8sxqsbbq.js} +1 -1
  28. package/dist/{cli-rsd7ga7v.js → cli-8zwe9mpk.js} +11 -11
  29. package/dist/{cli-y83zk5sb.js → cli-a0kcty51.js} +4 -4
  30. package/dist/{cli-8b9wvjps.js → cli-a4gvwttf.js} +4 -4
  31. package/dist/{cli-jhp7w1fy.js → cli-a5ebc95n.js} +2 -2
  32. package/dist/{cli-mvg2hf8p.js → cli-ahtpy9kf.js} +14 -7
  33. package/dist/{cli-x1p5dhq2.js → cli-bcj753sq.js} +3 -3
  34. package/dist/{cli-p22zdvnt.js → cli-bn0rewsy.js} +3 -3
  35. package/dist/{cli-p1m2b6gc.js → cli-d2mb5s8a.js} +7 -7
  36. package/dist/{cli-rg7ntypm.js → cli-d3qqdy4c.js} +456 -94
  37. package/dist/{cli-c5sbmw1v.js → cli-d82btycs.js} +94 -15
  38. package/dist/{cli-02vhhssk.js → cli-efaqv1c7.js} +5 -5
  39. package/dist/{cli-vjfpshn3.js → cli-ejs3m1sx.js} +1 -1
  40. package/dist/{cli-kk2r80n5.js → cli-faypxz7q.js} +4 -4
  41. package/dist/{cli-a1esmmee.js → cli-fpmsqq59.js} +7 -2
  42. package/dist/{cli-wrv09v7q.js → cli-ftyypbg5.js} +1 -1
  43. package/dist/{cli-zvze9rbm.js → cli-fyzjmseb.js} +3 -3
  44. package/dist/{cli-8rwvksbc.js → cli-g0hgtz4p.js} +5 -5
  45. package/dist/{cli-nrrg0fvy.js → cli-h38rjv87.js} +133 -12
  46. package/dist/{cli-tg9ksbn8.js → cli-h93c9vb3.js} +2 -2
  47. package/dist/{cli-eqgfs202.js → cli-hqhzg1qq.js} +2 -2
  48. package/dist/{cli-bhwa8rzc.js → cli-hyfw2j1e.js} +13 -12
  49. package/dist/{cli-3wjs22x3.js → cli-j4rqdf2n.js} +2 -2
  50. package/dist/{cli-6ftrrwm1.js → cli-n85dqg6d.js} +5 -5
  51. package/dist/{cli-8cxkw1f5.js → cli-nmqdc2t3.js} +2 -2
  52. package/dist/{cli-4fhyq711.js → cli-nn47d7e8.js} +13 -13
  53. package/dist/{cli-x3en6ct3.js → cli-nwyw3zhg.js} +1 -1
  54. package/dist/{cli-3avfh5az.js → cli-pemywhfq.js} +2 -2
  55. package/dist/{cli-xfe63zx3.js → cli-pkht5hap.js} +2 -2
  56. package/dist/{cli-sppc0cmw.js → cli-pnp2j5zg.js} +2 -2
  57. package/dist/{cli-wk8ccrz6.js → cli-pw7v69vp.js} +2 -2
  58. package/dist/{cli-tgvpmnwz.js → cli-r99kc9yq.js} +5 -5
  59. package/dist/{cli-bfc3k1x5.js → cli-rdyw3mct.js} +9 -9
  60. package/dist/{cli-b80a1100.js → cli-s6vr7r2d.js} +2 -2
  61. package/dist/{cli-zv4vy2b0.js → cli-s95dknxh.js} +1 -1
  62. package/dist/{cli-ttaz6c7m.js → cli-saw9a6f6.js} +6 -5
  63. package/dist/{cli-mz1ezzzh.js → cli-shvfedvm.js} +3 -3
  64. package/dist/{cli-rdr166ht.js → cli-smvcw9z5.js} +1 -1
  65. package/dist/{cli-2rwet3r7.js → cli-sv5gb0yb.js} +1 -1
  66. package/dist/{cli-5ff2sjyt.js → cli-t30yj95q.js} +2 -2
  67. package/dist/{cli-ptkpaqfy.js → cli-wt645v7q.js} +1 -1
  68. package/dist/{cli-f3nx1h8z.js → cli-wxbn3yfx.js} +2 -2
  69. package/dist/{cli-wyrr38xm.js → cli-x5mq1fyq.js} +1 -1
  70. package/dist/{cli-ccn0eybf.js → cli-xbzvet96.js} +6 -6
  71. package/dist/{cli-4mkvwgzr.js → cli-xf234ws8.js} +1 -1
  72. package/dist/{cli-nme7wery.js → cli-y2x52gs2.js} +46 -13
  73. package/dist/{cli-ffbrkh1r.js → cli-y8n5k515.js} +46 -38
  74. package/dist/{cli-ecshf504.js → cli-z4wd2ftv.js} +7 -7
  75. package/dist/{cli-dsgj3e7a.js → cli-zfg9enh9.js} +2 -2
  76. package/dist/{cli-yxqag76b.js → cli-zw88zjba.js} +1 -1
  77. package/dist/cli.js +20 -20
  78. package/dist/{codex-adapter-pp2gq8gr.js → codex-adapter-ttygw382.js} +6 -6
  79. package/dist/{codex-hook-qwzccd64.js → codex-hook-x7nejyrr.js} +7 -4
  80. package/dist/{codex-login-35p4sk85.js → codex-login-m819c41r.js} +1 -1
  81. package/dist/{codex-session-runner-0vzn09t8.js → codex-session-runner-60b58vv3.js} +7 -7
  82. package/dist/{commands-psqhkttb.js → commands-edmdwa4x.js} +2 -2
  83. package/dist/{controller-t20vz2k8.js → controller-m263fg43.js} +4 -4
  84. package/dist/{controllers-connect-gkxmqw9d.js → controllers-connect-5fym8sw1.js} +23 -23
  85. package/dist/{cursor-adapter-3v542qe5.js → cursor-adapter-cz6nm6mj.js} +3 -3
  86. package/dist/{db-nc1rd869.js → db-2y0mgstc.js} +3 -3
  87. package/dist/{db-2xbyenjr.js → db-nn0hcmx5.js} +6 -2
  88. package/dist/{devin-adapter-7egzmt0k.js → devin-adapter-zgqadvnm.js} +1 -1
  89. package/dist/{dispatcher-ewceb8ts.js → dispatcher-0a9wwjcx.js} +20 -20
  90. package/dist/{docker-njavd3fb.js → docker-fkgtr75t.js} +2 -2
  91. package/dist/{dsh-adapter-75xwh78t.js → dsh-adapter-3n3net33.js} +3 -3
  92. package/dist/{e2b-5r6a5jeb.js → e2b-7am6tmq6.js} +2 -2
  93. package/dist/{e2b-pw1nvtmh.js → e2b-thdcxtjd.js} +2 -2
  94. package/dist/{easter-egg-3d-xsc47jwf.js → easter-egg-3d-5cgynaja.js} +1 -1
  95. package/dist/{event-bus-101fenkh.js → event-bus-9vpk8gmq.js} +1 -1
  96. package/dist/{execute-gzmw1mnw.js → execute-t4e6m3rw.js} +1 -1
  97. package/dist/{external-channel-a5dsmxn4.js → external-channel-zhvt95n3.js} +2 -2
  98. package/dist/{grok-adapter-vj88xr23.js → grok-adapter-qnr1hp2y.js} +10 -10
  99. package/dist/handlers-dkcarkd0.js +39 -0
  100. package/dist/{heartbeat-t2m9r3wa.js → heartbeat-gz97r7ac.js} +23 -23
  101. package/dist/{hook-xa677f8r.js → hook-1mmdgjqs.js} +16 -9
  102. package/dist/{hook-8femx1bg.js → hook-x8rthca4.js} +6 -6
  103. package/dist/{http-xpmmq028.js → http-r8f85xr9.js} +274 -160
  104. package/dist/index-5jecgp3n.js +41 -0
  105. package/dist/index-aex0eba9.js +40 -0
  106. package/dist/{index-syztqdt6.js → index-g6tbb6ve.js} +1 -1
  107. package/dist/{index-cdzyfrsp.js → index-smxyk04s.js} +1 -1
  108. package/dist/{index-dg2tmj99.js → index-vzvfqzfj.js} +20 -20
  109. package/dist/{index-s7ckdajq.js → index-y7rbcrc1.js} +10 -10
  110. package/dist/{keepalive-3nr4st3r.js → keepalive-64c0f34c.js} +4 -4
  111. package/dist/lead-b1da0f97.js +78 -0
  112. package/dist/{maintenance-verwpe2c.js → maintenance-mnxpar12.js} +1 -1
  113. package/dist/{oauth-refresh-sweep-9q2t0y3q.js → oauth-refresh-sweep-36hs2v4h.js} +3 -3
  114. package/dist/{onboard-aytqedmq.js → onboard-xes8de61.js} +3 -3
  115. package/dist/{opencode-adapter-f4hryjny.js → opencode-adapter-3s7ax02e.js} +7 -7
  116. package/dist/{otel-impl-hckw4wt1.js → otel-impl-fzc57kcq.js} +2 -2
  117. package/dist/{pi-mono-adapter-hxby0ce1.js → pi-mono-adapter-ytp7gz8b.js} +22 -11
  118. package/dist/{pricing-refresh-5nvme3sm.js → pricing-refresh-1nek2w7b.js} +3 -3
  119. package/dist/{rbac-roles-vbpy21mg.js → rbac-roles-sqefb5hw.js} +2 -2
  120. package/dist/{rbac-roles-pd8c26m1.js → rbac-roles-ttyfaep2.js} +1 -1
  121. package/dist/{render-v2-7nqgvk2q.js → render-v2-vb527jwn.js} +3 -3
  122. package/dist/{resume-b6djcj3c.js → resume-jcdzg1bn.js} +10 -8
  123. package/dist/{runtime-txrxc9za.js → runtime-xe3aqy4x.js} +1 -1
  124. package/dist/{session-access-fc3f9y12.js → session-access-zsp4wsp0.js} +4 -4
  125. package/dist/{setup-n39szm6b.js → setup-1nb2zqd3.js} +1 -1
  126. package/dist/{virtual-modules-wyp2k6z3.js → virtual-modules-4r3zkc20.js} +2 -2
  127. package/dist/{work-objects-jem2fre0.js → work-objects-61w08fwr.js} +23 -23
  128. package/dist/worker-c1e68hpa.js +78 -0
  129. package/dist/{x-8ewt8gxn.js → x-y45mthwn.js} +2 -2
  130. package/openapi.json +491 -52
  131. package/package.json +3 -3
  132. package/src/apps/action-runner.ts +146 -0
  133. package/src/apps/catalog.generated.json +3 -2
  134. package/src/apps/definition.ts +152 -4
  135. package/src/apps/row-store.ts +23 -9
  136. package/src/apps/schema-migrate.ts +14 -6
  137. package/src/apps/script-types.ts +2 -1
  138. package/src/apps/sync.ts +20 -19
  139. package/src/be/db/tasks/read.ts +112 -0
  140. package/src/be/db.ts +16 -4
  141. package/src/be/fleet-benchmark-stats.ts +10 -5
  142. package/src/be/models-catalog.ts +4 -0
  143. package/src/be/onboarding.ts +6 -0
  144. package/src/be/scripts/typecheck.ts +13 -0
  145. package/src/be/swarm-config-guard.ts +25 -1
  146. package/src/be/telemetry-enable.ts +1 -1
  147. package/src/commands/provider-credentials.ts +12 -2
  148. package/src/commands/runner.ts +3 -0
  149. package/src/heartbeat/heartbeat.ts +2 -2
  150. package/src/hooks/codex-hook.ts +6 -2
  151. package/src/hooks/hook.ts +7 -0
  152. package/src/hooks/pr-body-guard.ts +38 -11
  153. package/src/hooks/pr-room-guard.ts +88 -0
  154. package/src/http/agents.ts +1 -0
  155. package/src/http/apps.ts +99 -183
  156. package/src/http/fleet-benchmark.ts +79 -30
  157. package/src/http/global-config.ts +7 -0
  158. package/src/http/ranking.ts +24 -40
  159. package/src/http/status.ts +49 -43
  160. package/src/http/tasks.ts +49 -1
  161. package/src/http/telemetry-ui.ts +1 -1
  162. package/src/http/used-by.ts +55 -19
  163. package/src/http/users.ts +2 -2
  164. package/src/providers/acp-targets.ts +1 -1
  165. package/src/providers/amp-adapter.ts +1 -1
  166. package/src/providers/pi-mono-adapter.ts +15 -0
  167. package/src/providers/reasoning-effort.ts +2 -1
  168. package/src/providers/types.ts +2 -0
  169. package/src/ranking/telemetry-ranking.ts +5 -33
  170. package/src/scripts-runtime/sdk-allowlist.ts +7 -0
  171. package/src/scripts-runtime/types/stdlib.d.ts +31 -0
  172. package/src/scripts-runtime/types/swarm-sdk.d.ts +31 -0
  173. package/src/server.ts +4 -0
  174. package/src/telemetry-context.ts +19 -1
  175. package/src/telemetry-contract/EVENTS.md +42 -8
  176. package/src/telemetry-contract/SOURCE.json +6 -5
  177. package/src/telemetry-contract/catalog.json +225 -5
  178. package/src/telemetry-contract/ranking/fixtures/valid/no-claim.json +10 -0
  179. package/src/telemetry-contract/ranking/listing.v1.schema.json +2 -2
  180. package/src/telemetry-contract/types.gen.ts +225 -27
  181. package/src/telemetry-identity.ts +47 -9
  182. package/src/telemetry-snapshot.ts +9 -1
  183. package/src/telemetry-ui-events.ts +9 -2
  184. package/src/telemetry.ts +29 -6
  185. package/src/tests/app-action-run-tool.test.ts +178 -0
  186. package/src/tests/app-row-tools.test.ts +385 -0
  187. package/src/tests/apps-json-column.test.ts +611 -0
  188. package/src/tests/apps-script-types.test.ts +2 -0
  189. package/src/tests/apps-sync-engine.test.ts +42 -0
  190. package/src/tests/check-pr-body.test.ts +0 -23
  191. package/src/tests/credential-check.test.ts +38 -0
  192. package/src/tests/db-task-read-contract.test.ts +4 -0
  193. package/src/tests/db-task-write-contract.test.ts +2 -0
  194. package/src/tests/docs-index-footprint.test.js +2 -2
  195. package/src/tests/fleet-benchmark.test.ts +122 -2
  196. package/src/tests/http-users.test.ts +62 -1
  197. package/src/tests/model-catalog-table.test.ts +63 -0
  198. package/src/tests/model-profiles-api.test.ts +19 -7
  199. package/src/tests/models-catalog.test.ts +50 -0
  200. package/src/tests/onboarding.test.ts +21 -0
  201. package/src/tests/org-website.test.ts +62 -0
  202. package/src/tests/pi-mono-adapter.test.ts +23 -0
  203. package/src/tests/pr-body-leaks.test.ts +4 -0
  204. package/src/tests/pr-room-guard.test.ts +242 -0
  205. package/src/tests/ranking-listing.test.ts +8 -23
  206. package/src/tests/ranking-route.test.ts +49 -47
  207. package/src/tests/reasoning-effort.test.ts +39 -3
  208. package/src/tests/runner-harness-telemetry-env.test.ts +62 -1
  209. package/src/tests/status.test.ts +158 -9
  210. package/src/tests/swarm-tool-result-gate.test.ts +2 -4
  211. package/src/tests/task-lineage.test.ts +180 -0
  212. package/src/tests/telemetry-context.test.ts +128 -2
  213. package/src/tests/telemetry-init.test.ts +62 -5
  214. package/src/tests/telemetry-ui-route.test.ts +123 -0
  215. package/src/tests/tool-annotations.test.ts +3 -2
  216. package/src/tests/used-by-route.test.ts +144 -10
  217. package/src/tests/user-token-rest-auth.test.ts +38 -0
  218. package/src/tests/workflow-agent-task-retry.test.ts +130 -4
  219. package/src/tests/workflow-wait-recovery.test.ts +116 -4
  220. package/src/tools/app-action-run.ts +63 -0
  221. package/src/tools/app-rows.ts +239 -0
  222. package/src/tools/model-catalog/index.ts +1 -1
  223. package/src/tools/tool-config.ts +8 -0
  224. package/src/tools/utils.ts +1 -1
  225. package/src/tools/workflows/retry-workflow-run.ts +1 -1
  226. package/src/types.ts +17 -0
  227. package/src/utils/company-profile.ts +24 -0
  228. package/src/utils/org-website.ts +58 -21
  229. package/src/workflows/recovery.ts +10 -22
  230. package/src/workflows/resume.ts +16 -0
  231. package/src/workflows/task-step-routing.ts +47 -7
  232. package/templates/skills/apps/SKILL.md +44 -4
  233. package/templates/skills/apps/content.md +44 -4
  234. package/dist/handlers-zbs90bny.js +0 -39
  235. package/dist/index-8pwc1jc8.js +0 -40
  236. package/dist/index-nxa6me0q.js +0 -41
  237. package/dist/lead-td8h2sfn.js +0 -78
  238. package/dist/worker-wr6xgfr2.js +0 -78
  239. package/src/tests/check-ranking-entry.test.ts +0 -146
@@ -19,6 +19,7 @@ import {
19
19
  init_quickjs_pool_config,
20
20
  isApiOnlyConfigKey,
21
21
  isInternalConfigKey,
22
+ APPS_JSON_COLUMN_MAX_BYTES_BOUNDS,
22
23
  init_swarm_config_guard,
23
24
  getOAuthApp,
24
25
  getOAuthAppById,
@@ -38,14 +39,14 @@ import {
38
39
  getResolvedConfig2,
39
40
  getMcpServerById2,
40
41
  init_db3
41
- } from "./cli-rg7ntypm.js";
42
+ } from "./cli-d3qqdy4c.js";
42
43
  import {
43
44
  generateRandomCodeVerifier,
44
45
  generateRandomState,
45
46
  calculatePKCECodeChallenge,
46
47
  oauthAppRowToProviderConfig,
47
48
  ensureAuthorizationTokenOrThrow
48
- } from "./cli-b80a1100.js";
49
+ } from "./cli-s6vr7r2d.js";
49
50
  import {
50
51
  detachedProcessGroup,
51
52
  registerProcessGroup,
@@ -57,7 +58,7 @@ import {
57
58
  import {
58
59
  defaultAssetKey,
59
60
  init_key
60
- } from "./cli-a1esmmee.js";
61
+ } from "./cli-fpmsqq59.js";
61
62
  import {
62
63
  init_zod
63
64
  } from "./cli-4chz1hye.js";
@@ -98,7 +99,7 @@ import {
98
99
  refreshSecretScrubberCache,
99
100
  registerVolatileSecret,
100
101
  init_secret_scrubber
101
- } from "./cli-4mkvwgzr.js";
102
+ } from "./cli-xf234ws8.js";
102
103
  import {
103
104
  __toESM,
104
105
  __commonJS,
@@ -178553,6 +178554,9 @@ async function runSavedScriptAsAgent(args, deps = {}) {
178553
178554
  return output;
178554
178555
  }
178555
178556
 
178557
+ // src/apps/definition.ts
178558
+ init_swarm_config_guard();
178559
+
178556
178560
  // src/scripts-runtime/quickjs-compat.ts
178557
178561
  var import_typescript3 = __toESM(require_typescript2(), 1);
178558
178562
  var UNSUPPORTED_GLOBALS = new Set([
@@ -180098,7 +180102,7 @@ var catalog_generated_default = {
180098
180102
  }
180099
180103
  },
180100
180104
  Table: {
180101
- description: 'Data table. Bind `data`/`loading`/`error` to a named query (`/queries/<name>/...`). `rowActions` chains receive `{ "$row": "<col>" }` (or `{ "$row": "" }` for the whole row) and `{ "$rowIndex": true }`. Destructive row actions always confirm via a dialog; override the copy with `confirm: { title, description, confirmLabel }`. `search` (case-insensitive substring across every listed column) and `filters` (per-column equality, `null`/`""` disables one; an array means "one of", which is what a multiple `Chips` writes, and an empty array disables it) narrow the polled rows client-side — bind them to a `SearchInput` / `Select` via `/ui/<id>/value`, or pin a constant (e.g. `"filters": { "pinned": true }`). Columns take `pinned: "left"|"right"` to survive horizontal scroll; `pagination` pages large row sets (auto past 200 rows); `density: "compact"` tightens row height. Column kinds: `status` (lifecycle values like pending/in_progress/completed/failed get the dashboard status icon, anything else a `tones` pill), `user` / `agent` (avatar + name), `relative` (smart time with the exact time on hover), `duration` (ms → 1m 23s), `progress` (bar, `max` default 100), `copy` (value + copy button), `switch` (runs the column\'s `onChange` chain with `$row` set to the new value; read-only without it), `link` (http(s) URL, opens in a new tab). Columns also take `align`, `truncate: "middle"` (ids, paths), a header `icon` and `tooltip` (a row field shown on hover). `onRowClick` runs a chain with `$row` when a row is clicked — pair it with `app.navigate` + a Drawer and bind `selectedId` to the drawer param to highlight the open row. `rowId` names the id field (default `id`). Below 768px the table renders as a phone list (`mobile: "list"`, fields picked by `mobileFields: { title, subtitle?, meta?, status? }`); `mobile: "scroll"` keeps the grid. `emptyState: { icon?, title, body? }` replaces the empty message. Row actions take `icon` and `placement: "menu"` (collected into a More menu).',
180105
+ description: 'Data table. Bind `data`/`loading`/`error` to a named query (`/queries/<name>/...`). `rowActions` chains receive `{ "$row": "<col>" }` (or `{ "$row": "" }` for the whole row) and `{ "$rowIndex": true }`. Destructive row actions always confirm via a dialog; override the copy with `confirm: { title, description, confirmLabel }`. `search` (case-insensitive substring across every listed column) and `filters` (per-column equality, `null`/`""` disables one; an array means "one of", which is what a multiple `Chips` writes, and an empty array disables it) narrow the polled rows client-side — bind them to a `SearchInput` / `Select` via `/ui/<id>/value`, or pin a constant (e.g. `"filters": { "pinned": true }`). Columns take `pinned: "left"|"right"` to survive horizontal scroll; `pagination` pages large row sets (auto past 200 rows); `density: "compact"` tightens row height. Column kinds: `status` (lifecycle values like pending/in_progress/completed/failed get the dashboard status icon, anything else a `tones` pill), `user` / `agent` (avatar + name), `relative` (smart time with the exact time on hover), `duration` (ms → 1m 23s), `progress` (bar, `max` default 100), `copy` (value + copy button), `switch` (runs the column\'s `onChange` chain with `$row` set to the new value; read-only without it), `link` (http(s) URL, opens in a new tab), `json` (compact single-line `JSON.stringify` preview, truncated). Columns also take `align`, `truncate: "middle"` (ids, paths), a header `icon` and `tooltip` (a row field shown on hover). `onRowClick` runs a chain with `$row` when a row is clicked — pair it with `app.navigate` + a Drawer and bind `selectedId` to the drawer param to highlight the open row. `rowId` names the id field (default `id`). Below 768px the table renders as a phone list (`mobile: "list"`, fields picked by `mobileFields: { title, subtitle?, meta?, status? }`); `mobile: "scroll"` keeps the grid. `emptyState: { icon?, title, body? }` replaces the empty message. Row actions take `icon` and `placement: "menu"` (collected into a More menu).',
180102
180106
  props: {
180103
180107
  $schema: "http://json-schema.org/draft-07/schema#",
180104
180108
  type: "object",
@@ -180142,7 +180146,8 @@ var catalog_generated_default = {
180142
180146
  "progress",
180143
180147
  "copy",
180144
180148
  "switch",
180145
- "link"
180149
+ "link",
180150
+ "json"
180146
180151
  ]
180147
180152
  },
180148
180153
  tones: {
@@ -182525,11 +182530,55 @@ async function resolveSyncRunAs(script) {
182525
182530
  var AppNameSchema = string2().regex(/^[a-z][a-zA-Z0-9_]{0,39}$/, {
182526
182531
  message: "must start with a lowercase letter and contain only letters, numbers, or underscores"
182527
182532
  });
182528
- var ColumnKindSchema = _enum2(["string", "number", "boolean", "date", "enum"]);
182533
+ var ColumnKindSchema = _enum2(["string", "number", "boolean", "date", "enum", "json"]);
182534
+ var ScalarColumnKindSchema = ColumnKindSchema.exclude(["json"]);
182529
182535
  var ISO_8601_PREFIX = /^\d{4}-\d{2}-\d{2}(?:T.*)?$/;
182530
182536
  function isIso8601Date(value) {
182531
182537
  return ISO_8601_PREFIX.test(value) && !Number.isNaN(Date.parse(value));
182532
182538
  }
182539
+ var DEFAULT_JSON_COLUMN_MAX_BYTES = 256 * 1024;
182540
+ function jsonColumnMaxBytes(env = process.env) {
182541
+ const raw = env.APPS_JSON_COLUMN_MAX_BYTES?.trim();
182542
+ if (!raw || !/^\d+$/.test(raw))
182543
+ return DEFAULT_JSON_COLUMN_MAX_BYTES;
182544
+ const value = Number(raw);
182545
+ const { min, max } = APPS_JSON_COLUMN_MAX_BYTES_BOUNDS;
182546
+ return Number.isSafeInteger(value) && value >= min && value <= max ? value : DEFAULT_JSON_COLUMN_MAX_BYTES;
182547
+ }
182548
+ function jsonColumnSizeLabel(bytes = jsonColumnMaxBytes()) {
182549
+ return bytes % 1024 === 0 ? `${bytes / 1024}KB` : `${bytes} bytes`;
182550
+ }
182551
+ function jsonColumnValueIssue(value) {
182552
+ let nonFinite = false;
182553
+ let serialized;
182554
+ try {
182555
+ serialized = JSON.stringify(value, (_key, entry) => {
182556
+ if (typeof entry === "number" && !Number.isFinite(entry))
182557
+ nonFinite = true;
182558
+ return entry;
182559
+ });
182560
+ } catch {
182561
+ return "unserializable";
182562
+ }
182563
+ if (serialized === undefined)
182564
+ return "unserializable";
182565
+ if (nonFinite)
182566
+ return "non-finite";
182567
+ return Buffer.byteLength(serialized, "utf8") > jsonColumnMaxBytes() ? "oversized" : null;
182568
+ }
182569
+ function isValidColumnValue(column, value) {
182570
+ if (column.kind === "string")
182571
+ return typeof value === "string";
182572
+ if (column.kind === "number")
182573
+ return typeof value === "number" && Number.isFinite(value);
182574
+ if (column.kind === "boolean")
182575
+ return typeof value === "boolean";
182576
+ if (column.kind === "date")
182577
+ return typeof value === "string" && isIso8601Date(value);
182578
+ if (column.kind === "json")
182579
+ return jsonColumnValueIssue(value) === null;
182580
+ return typeof value === "string" && Boolean(column.enum?.includes(value));
182581
+ }
182533
182582
  var SourceTransformSchema = _enum2(["slug", "lower", "upper", "cents", "date-parse"]);
182534
182583
  var TRANSFORM_COLUMN_KIND = {
182535
182584
  slug: "string",
@@ -182548,10 +182597,19 @@ var ColumnDefSchema = object2({
182548
182597
  required: boolean().optional(),
182549
182598
  enum: array2(string2()).optional(),
182550
182599
  index: boolean().optional(),
182551
- default: union2([string2(), number2(), boolean()]).optional(),
182600
+ default: union2([
182601
+ string2(),
182602
+ number2(),
182603
+ boolean(),
182604
+ record2(string2(), unknown()),
182605
+ array2(unknown())
182606
+ ]).optional(),
182552
182607
  hidden: boolean().optional(),
182553
182608
  source: ColumnSourceBindingSchema.optional()
182554
182609
  }).superRefine((column, ctx) => {
182610
+ if (column.kind === "json" && column.index) {
182611
+ ctx.addIssue({ code: "custom", path: ["index"], message: "json columns cannot be indexed" });
182612
+ }
182555
182613
  if (column.kind === "enum") {
182556
182614
  if (!column.enum || column.enum.length === 0) {
182557
182615
  ctx.addIssue({ code: "custom", path: ["enum"], message: "enum values are required" });
@@ -182569,6 +182627,23 @@ var ColumnDefSchema = object2({
182569
182627
  }
182570
182628
  if (column.default === undefined)
182571
182629
  return;
182630
+ if (column.kind === "json") {
182631
+ const issue = jsonColumnValueIssue(column.default);
182632
+ if (issue === "unserializable") {
182633
+ ctx.addIssue({
182634
+ code: "custom",
182635
+ path: ["default"],
182636
+ message: "json column default must be JSON-serializable"
182637
+ });
182638
+ } else if (issue === "non-finite") {
182639
+ ctx.addIssue({
182640
+ code: "custom",
182641
+ path: ["default"],
182642
+ message: "json column default contains a non-finite number"
182643
+ });
182644
+ }
182645
+ return;
182646
+ }
182572
182647
  const valid = column.kind === "string" && typeof column.default === "string" || column.kind === "number" && typeof column.default === "number" && Number.isFinite(column.default) || column.kind === "boolean" && typeof column.default === "boolean" || column.kind === "date" && typeof column.default === "string" && isIso8601Date(column.default) || column.kind === "enum" && typeof column.default === "string" && Boolean(column.enum?.includes(column.default));
182573
182648
  if (!valid) {
182574
182649
  ctx.addIssue({
@@ -182579,7 +182654,7 @@ var ColumnDefSchema = object2({
182579
182654
  }
182580
182655
  });
182581
182656
  var UserConfigFieldSchema = object2({
182582
- kind: ColumnKindSchema,
182657
+ kind: ScalarColumnKindSchema,
182583
182658
  default: union2([string2(), number2(), boolean()]).optional(),
182584
182659
  enum: array2(string2()).optional(),
182585
182660
  label: string2().optional(),
@@ -182699,7 +182774,7 @@ var AppPageSchema = object2({
182699
182774
  params: record2(AppNameSchema, AppPageParamSchema).optional()
182700
182775
  }).strict();
182701
182776
  var ElementPropDefSchema = object2({
182702
- kind: ColumnKindSchema,
182777
+ kind: ScalarColumnKindSchema,
182703
182778
  required: boolean().optional(),
182704
182779
  enum: array2(string2()).min(1).optional(),
182705
182780
  default: union2([string2(), number2(), boolean()]).optional()
@@ -182821,6 +182896,14 @@ var AppDefinitionSchema = object2({
182821
182896
  });
182822
182897
  continue;
182823
182898
  }
182899
+ if (columnDefinition.kind === "json") {
182900
+ ctx.addIssue({
182901
+ code: "custom",
182902
+ path: ["queries", queryName, "filter", column],
182903
+ message: "json columns cannot be filtered"
182904
+ });
182905
+ continue;
182906
+ }
182824
182907
  if (typeof value === "object")
182825
182908
  continue;
182826
182909
  const valid = columnDefinition.kind === "string" && typeof value === "string" || columnDefinition.kind === "number" && typeof value === "number" && Number.isFinite(value) || columnDefinition.kind === "boolean" && typeof value === "boolean" || columnDefinition.kind === "date" && typeof value === "string" && isIso8601Date(value) || columnDefinition.kind === "enum" && typeof value === "string" && Boolean(columnDefinition.enum?.includes(value));
@@ -182839,6 +182922,12 @@ var AppDefinitionSchema = object2({
182839
182922
  path: ["queries", queryName, "sort", "column"],
182840
182923
  message: `unknown or hidden column "${sortColumn}"`
182841
182924
  });
182925
+ } else if (sortColumn && model.columns[sortColumn]?.kind === "json") {
182926
+ ctx.addIssue({
182927
+ code: "custom",
182928
+ path: ["queries", queryName, "sort", "column"],
182929
+ message: "json columns cannot be sorted"
182930
+ });
182842
182931
  }
182843
182932
  }
182844
182933
  });
@@ -183085,6 +183174,22 @@ function syncActionIssues(name, action, models) {
183085
183174
  }
183086
183175
  return [{ path: `actions.${name}`, message: "no model declares a source to sync" }];
183087
183176
  }
183177
+ function jsonColumnDefaultSizeIssues(definition) {
183178
+ const issues = [];
183179
+ for (const [modelName, model] of Object.entries(definition.models)) {
183180
+ for (const [columnName, column] of Object.entries(model.columns)) {
183181
+ if (column.kind !== "json" || column.default === undefined)
183182
+ continue;
183183
+ if (jsonColumnValueIssue(column.default) === "oversized") {
183184
+ issues.push({
183185
+ path: `models.${modelName}.columns.${columnName}.default`,
183186
+ message: `json column default exceeds the ${jsonColumnSizeLabel()} size limit`
183187
+ });
183188
+ }
183189
+ }
183190
+ }
183191
+ return issues;
183192
+ }
183088
183193
  async function parseAppDefinition(input, elementContext = {}) {
183089
183194
  if (isMergePatchObject(input) && Object.hasOwn(input, "page")) {
183090
183195
  return {
@@ -183116,6 +183221,7 @@ async function parseAppDefinition(input, elementContext = {}) {
183116
183221
  if (!parsed.success)
183117
183222
  return { success: false, issues: appDefinitionIssues(parsed.error) };
183118
183223
  const issues = [
183224
+ ...jsonColumnDefaultSizeIssues(parsed.data),
183119
183225
  ...Object.keys(parsed.data.pages).flatMap((pageName) => validatePage(parsed.data, catalog_generated_default, pageName)),
183120
183226
  ...crossPageDefinitionIssues(parsed.data, catalog_generated_default),
183121
183227
  ...await elementDefinitionIssues(parsed.data, catalog_generated_default, elementContext)
@@ -183478,6 +183584,8 @@ function commentSafe(value) {
183478
183584
  return value.replace(/[\r\n\u2028\u2029]+/g, " ").replace(/\*\//g, "").trim().slice(0, 80);
183479
183585
  }
183480
183586
  function tsTypeForColumn(column) {
183587
+ if (column.kind === "json")
183588
+ return "unknown";
183481
183589
  if (column.kind !== "enum")
183482
183590
  return column.kind === "date" ? "string" : column.kind;
183483
183591
  return column.enum?.map((value) => JSON.stringify(value)).join(" | ") || "string";
@@ -183576,7 +183684,7 @@ ${renderedModels.map((model) => model.source).join(`
183576
183684
 
183577
183685
  `)}
183578
183686
 
183579
- /** Declared actions. Invocation is REST-only: POST /api/apps/<id>/actions/<name>. */
183687
+ /** Scripts can write rows. Declared actions are callable through REST or MCP only. */
183580
183688
  export type ActionName = ${actionType};
183581
183689
 
183582
183690
  /** Script action arguments include server-stamped app and caller context. */
@@ -184047,6 +184155,19 @@ export interface SwarmSdk {
184047
184155
  query: string;
184048
184156
  params?: Record<string, string | number | boolean>;
184049
184157
  }): Promise<unknown>;
184158
+ app_rows_list(args: {
184159
+ appId: string;
184160
+ model: string;
184161
+ equals?: Record<string, string | number | boolean>;
184162
+ sort?: \`\${string}:asc\` | \`\${string}:desc\`;
184163
+ limit?: number;
184164
+ }): Promise<unknown>;
184165
+ app_row_get(args: { appId: string; model: string; rowId: string }): Promise<unknown>;
184166
+ app_row_create(args: { appId: string; model: string; values: Record<string, unknown> }): Promise<unknown>;
184167
+ app_rows_create(args: { appId: string; model: string; rows: Record<string, unknown>[] }): Promise<unknown>;
184168
+ app_row_patch(args: { appId: string; model: string; rowId: string; values: Record<string, unknown> }): Promise<unknown>;
184169
+ app_row_delete(args: { appId: string; model: string; rowId: string }): Promise<unknown>;
184170
+ app_rows_delete(args: { appId: string; model: string; equals: Record<string, string | number | boolean>; limit?: number }): Promise<unknown>;
184050
184171
  app_rollback(args: {
184051
184172
  appId: string;
184052
184173
  version: number;
@@ -184805,4 +184926,4 @@ function parseSkillContent(content) {
184805
184926
  };
184806
184927
  }
184807
184928
 
184808
- export { require_dist2, isInvalidClientError, publicEndpointSsrfOptions, mcpOAuthSsrfOptions, discoverProtectedResourceMetadata, discoverAuthorizationServerMetadata, normalizeTokenEndpointAuthMethod, resolveAdvertisedTokenEndpointAuthMethod, authMethodForStoredClient, selectDcrTokenEndpointAuthMethod, registerClient, buildAuthorizeUrl, exchangeCodeForTokens, refreshMcpToken, revokeMcpToken, computeExpiresAt, getMcpOAuthToken, findReusableMcpOAuthClient, invalidateMcpOAuthClient, upsertMcpOAuthToken, applyMcpOAuthRefresh, markMcpOAuthTokenStatus, deleteMcpOAuthToken, insertMcpOAuthPending, consumeMcpOAuthPending, gcMcpOAuthPending, setMcpServerAuthMethod, ensureMcpToken, callMcpServerTool, resolveSqlDsn, runReadOnlyQuery, listVendoredOpenapiEntries, ConnectionAuthInputSchema, SqlDsnInputSchema, connectionAuthSummary, listRelationalCredentialBindings, getCredentialBindingById, findCredentialBindingByIdentity, upsertCredentialBinding, disableCredentialBinding, listScriptConnections, listScriptConnectionsAsync, getScriptConnectionById, ScriptConnectionConflictError, connectionAuthInputFromFlat, upsertScriptConnection, refreshScriptConnection, setScriptConnectionEnabled, deleteScriptConnection, getScriptApiConnectionDescriptors, getScriptMcpConnectionDescriptors, getScriptApiTypes, getScriptMcpTypes, oauthAppToProviderConfig, getOAuthProviderConfig, getOAuthBindingTokenStatus, buildScriptCredentialBindingsWithFailures, buildSandboxedCommand, sandboxSpawnEnv, createCappedStreamState, snapshotCapped, readStreamCapped, writeBareImportShim, MIN_SCRIPT_WALL_CLOCK_MS, SCRIPT_LONG_TIMEOUT_HINT_MS, MAX_SCRIPT_WALL_CLOCK_MS, DEFAULT_SCRIPT_RESOURCES, require_typescript2, checkImportAllowlist, validateScriptImports, runScript, extractScriptSignature, extractArgsJsonSchema, getSavedScriptOwnerAgentId, runSavedScriptAsAgent, checkQuickJSCompat, quickJSCompatWarnings, resolveSyncRunAs, AppNameSchema, ColumnKindSchema, isIso8601Date, SYSTEM_COLUMN_KINDS, SORTABLE_SYSTEM_DATE_COLUMNS, AppElementsSchema, AppDefinitionSchema, collectScriptReferences, scriptCompatWarnings, parseAppDefinition, applyAppDefinitionPatch, upgradeAppDefinition, decodeAppDefinition, appDefinitionNeedsRepair, createApp, getApp, listApps, listAppRecords, updateApp, deleteApp, getScriptAppTypes, SCRIPT_SDK_TYPES, scriptSdkTypesWithGeneratedApis, SCRIPT_STDLIB_MODULE_TYPES, scriptStdlibTypesWithGeneratedApis, typecheckWithAmbient, typecheckScript, parseSkillContent };
184929
+ export { require_dist2, isInvalidClientError, publicEndpointSsrfOptions, mcpOAuthSsrfOptions, discoverProtectedResourceMetadata, discoverAuthorizationServerMetadata, normalizeTokenEndpointAuthMethod, resolveAdvertisedTokenEndpointAuthMethod, authMethodForStoredClient, selectDcrTokenEndpointAuthMethod, registerClient, buildAuthorizeUrl, exchangeCodeForTokens, refreshMcpToken, revokeMcpToken, computeExpiresAt, getMcpOAuthToken, findReusableMcpOAuthClient, invalidateMcpOAuthClient, upsertMcpOAuthToken, applyMcpOAuthRefresh, markMcpOAuthTokenStatus, deleteMcpOAuthToken, insertMcpOAuthPending, consumeMcpOAuthPending, gcMcpOAuthPending, setMcpServerAuthMethod, ensureMcpToken, callMcpServerTool, resolveSqlDsn, runReadOnlyQuery, listVendoredOpenapiEntries, ConnectionAuthInputSchema, SqlDsnInputSchema, connectionAuthSummary, listRelationalCredentialBindings, getCredentialBindingById, findCredentialBindingByIdentity, upsertCredentialBinding, disableCredentialBinding, listScriptConnections, listScriptConnectionsAsync, getScriptConnectionById, ScriptConnectionConflictError, connectionAuthInputFromFlat, upsertScriptConnection, refreshScriptConnection, setScriptConnectionEnabled, deleteScriptConnection, getScriptApiConnectionDescriptors, getScriptMcpConnectionDescriptors, getScriptApiTypes, getScriptMcpTypes, oauthAppToProviderConfig, getOAuthProviderConfig, getOAuthBindingTokenStatus, buildScriptCredentialBindingsWithFailures, buildSandboxedCommand, sandboxSpawnEnv, createCappedStreamState, snapshotCapped, readStreamCapped, writeBareImportShim, MIN_SCRIPT_WALL_CLOCK_MS, SCRIPT_LONG_TIMEOUT_HINT_MS, MAX_SCRIPT_WALL_CLOCK_MS, DEFAULT_SCRIPT_RESOURCES, require_typescript2, checkImportAllowlist, validateScriptImports, runScript, extractScriptSignature, extractArgsJsonSchema, getSavedScriptOwnerAgentId, runSavedScriptAsAgent, checkQuickJSCompat, quickJSCompatWarnings, resolveSyncRunAs, AppNameSchema, ScalarColumnKindSchema, isIso8601Date, jsonColumnSizeLabel, jsonColumnValueIssue, isValidColumnValue, SYSTEM_COLUMN_KINDS, SORTABLE_SYSTEM_DATE_COLUMNS, AppElementsSchema, AppDefinitionSchema, collectScriptReferences, scriptCompatWarnings, parseAppDefinition, applyAppDefinitionPatch, upgradeAppDefinition, decodeAppDefinition, appDefinitionNeedsRepair, createApp, getApp, listApps, listAppRecords, updateApp, deleteApp, getScriptAppTypes, SCRIPT_SDK_TYPES, scriptSdkTypesWithGeneratedApis, SCRIPT_STDLIB_MODULE_TYPES, scriptStdlibTypesWithGeneratedApis, typecheckWithAmbient, typecheckScript, parseSkillContent };
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  getDb2,
3
3
  init_db3
4
- } from "./cli-rg7ntypm.js";
4
+ } from "./cli-d3qqdy4c.js";
5
5
  import {
6
6
  openAICompatibleProviderIds,
7
7
  withRegistryCatalogSections,
8
8
  init_src2
9
- } from "./cli-x3en6ct3.js";
9
+ } from "./cli-nwyw3zhg.js";
10
10
 
11
11
  // src/be/seed-pricing.ts
12
12
  init_src2();
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  RuntimeProviderKindSchema,
3
3
  init_types
4
- } from "./cli-a1esmmee.js";
4
+ } from "./cli-fpmsqq59.js";
5
5
  import {
6
6
  init_zod
7
7
  } from "./cli-4chz1hye.js";
@@ -21,7 +21,7 @@ import {
21
21
  import {
22
22
  scrubSecrets,
23
23
  init_secret_scrubber
24
- } from "./cli-4mkvwgzr.js";
24
+ } from "./cli-xf234ws8.js";
25
25
 
26
26
  // src/runtime-providers/controller.ts
27
27
  init_secret_scrubber();
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  workflowEventBus2,
6
6
  init_event_bus
7
- } from "./cli-ptkpaqfy.js";
7
+ } from "./cli-wt645v7q.js";
8
8
  import {
9
9
  getDbClient2,
10
10
  isRuntimePoolsEnabled,
@@ -66,7 +66,7 @@ import {
66
66
  getStaleApprovalRequests2,
67
67
  upsertKv2,
68
68
  init_db3
69
- } from "./cli-rg7ntypm.js";
69
+ } from "./cli-d3qqdy4c.js";
70
70
  import {
71
71
  poolTaskRunsOnHarness,
72
72
  isRuntimePoolWakeable,
@@ -91,28 +91,29 @@ import {
91
91
  createRerouteDecisionTask,
92
92
  createPoolStarvationDecisionTask,
93
93
  canClaim
94
- } from "./cli-x719j3vs.js";
94
+ } from "./cli-5rk36sjf.js";
95
95
  import {
96
96
  listRuntimePools2,
97
97
  init_db
98
- } from "./cli-6ftrrwm1.js";
98
+ } from "./cli-n85dqg6d.js";
99
99
  import {
100
100
  createApprovalFollowUpTask
101
- } from "./cli-tj4j2ts4.js";
101
+ } from "./cli-02qm7src.js";
102
102
  import {
103
103
  remediateStalledRuntime
104
- } from "./cli-rsd7ga7v.js";
104
+ } from "./cli-8zwe9mpk.js";
105
105
  import {
106
106
  runSavedScriptAsAgent
107
- } from "./cli-nrrg0fvy.js";
107
+ } from "./cli-h38rjv87.js";
108
108
  import {
109
109
  mintToken,
110
110
  init_users
111
- } from "./cli-8cxkw1f5.js";
111
+ } from "./cli-nmqdc2t3.js";
112
112
  import {
113
113
  TERMINAL_TASK_STATUSES,
114
+ SUPERSEDED_WORKFLOW_TASK_REASON,
114
115
  init_types
115
- } from "./cli-a1esmmee.js";
116
+ } from "./cli-fpmsqq59.js";
116
117
  import {
117
118
  registerTemplate,
118
119
  init_registry,
@@ -127,7 +128,7 @@ import {
127
128
  import {
128
129
  init_package,
129
130
  package_default
130
- } from "./cli-mz1ezzzh.js";
131
+ } from "./cli-shvfedvm.js";
131
132
  import {
132
133
  isEnvFlagEnabled,
133
134
  init_env_flag
@@ -135,7 +136,7 @@ import {
135
136
  import {
136
137
  scrubSecrets,
137
138
  init_secret_scrubber
138
- } from "./cli-4mkvwgzr.js";
139
+ } from "./cli-xf234ws8.js";
139
140
 
140
141
  // src/be/runtime-pools/routing.ts
141
142
  init_runtime_pools_flag();
@@ -850,7 +851,7 @@ function isRemediationAction(value) {
850
851
  }
851
852
  function decideRemediation(task, facts) {
852
853
  if (task.workflowRunStepId != null) {
853
- return { action: "fail", reason: "superseded_workflow_task" };
854
+ return { action: "fail", reason: SUPERSEDED_WORKFLOW_TASK_REASON };
854
855
  }
855
856
  if (facts.skipAutoResume || facts.alreadyResumed) {
856
857
  return { action: "fail", reason: facts.legacyFailReason };
@@ -9,7 +9,7 @@ import {
9
9
  loadMcpConfig,
10
10
  addMcpServerConfig,
11
11
  removeMcpServerConfig
12
- } from "./cli-p1m2b6gc.js";
12
+ } from "./cli-d2mb5s8a.js";
13
13
  import {
14
14
  McpOAuthCredentialStore2,
15
15
  McpSignInCancelledError2,
@@ -17,7 +17,7 @@ import {
17
17
  McpServerLog2,
18
18
  createDefaultTransport2,
19
19
  McpServerConnection2
20
- } from "./cli-f3nx1h8z.js";
20
+ } from "./cli-wxbn3yfx.js";
21
21
 
22
22
  // node_modules/@earendil-works/pi-coding-agent/dist/extensions/mcp/cli.js
23
23
  import { existsSync } from "node:fs";
@@ -15,17 +15,17 @@ import {
15
15
  init_secret_registry,
16
16
  upsertSwarmConfig2,
17
17
  init_db3
18
- } from "./cli-rg7ntypm.js";
18
+ } from "./cli-d3qqdy4c.js";
19
19
  import {
20
20
  createRuntimeProvider,
21
21
  init_runtime_providers
22
- } from "./cli-wk8ccrz6.js";
22
+ } from "./cli-pw7v69vp.js";
23
23
  import {
24
24
  closeSessionTokenConnections,
25
25
  init_session_token_connections,
26
26
  insertSessionToken,
27
27
  init_users
28
- } from "./cli-8cxkw1f5.js";
28
+ } from "./cli-nmqdc2t3.js";
29
29
  import {
30
30
  RuntimeControllerCreateSchema,
31
31
  RuntimeControllerUpdateSchema,
@@ -33,13 +33,13 @@ import {
33
33
  RuntimePoolUpdateSchema,
34
34
  RuntimePoolCreateAgentSchema,
35
35
  init_types
36
- } from "./cli-a1esmmee.js";
36
+ } from "./cli-fpmsqq59.js";
37
37
  import {
38
38
  scrubSecrets,
39
39
  registerVolatileSecret,
40
40
  unregisterVolatileSecret,
41
41
  init_secret_scrubber
42
- } from "./cli-4mkvwgzr.js";
42
+ } from "./cli-xf234ws8.js";
43
43
  import {
44
44
  __esm
45
45
  } from "./cli-242037k3.js";
@@ -5,11 +5,11 @@ import {
5
5
  validateRuntimeTokenTtlHours,
6
6
  init_swarm_config_guard,
7
7
  init_db3
8
- } from "./cli-rg7ntypm.js";
8
+ } from "./cli-d3qqdy4c.js";
9
9
  import {
10
10
  unregisterVolatileSecret,
11
11
  init_secret_scrubber
12
- } from "./cli-4mkvwgzr.js";
12
+ } from "./cli-xf234ws8.js";
13
13
  import {
14
14
  __esm
15
15
  } from "./cli-242037k3.js";
@@ -47,10 +47,10 @@ import {
47
47
  checkDependencies2,
48
48
  emitBuiltInIntegrationConnectedOnce2,
49
49
  init_db3
50
- } from "./cli-rg7ntypm.js";
50
+ } from "./cli-d3qqdy4c.js";
51
51
  import {
52
52
  getChannelBlockReason2
53
- } from "./cli-xfe63zx3.js";
53
+ } from "./cli-pkht5hap.js";
54
54
  import {
55
55
  require_dist5,
56
56
  require_axios,
@@ -67,11 +67,11 @@ import {
67
67
  import {
68
68
  isTerminalTaskStatus,
69
69
  init_types
70
- } from "./cli-a1esmmee.js";
70
+ } from "./cli-fpmsqq59.js";
71
71
  import {
72
72
  taskAttachmentDisplayUrl,
73
73
  init_task_attachment_links
74
- } from "./cli-wyrr38xm.js";
74
+ } from "./cli-x5mq1fyq.js";
75
75
  import {
76
76
  getSlackConfiguration,
77
77
  init_config
@@ -102,7 +102,7 @@ import {
102
102
  scrubSecrets,
103
103
  scrubObject,
104
104
  init_secret_scrubber
105
- } from "./cli-4mkvwgzr.js";
105
+ } from "./cli-xf234ws8.js";
106
106
  import {
107
107
  __toESM,
108
108
  __commonJS,
@@ -6235,7 +6235,7 @@ async function initOtel(serviceRole = process.env.AGENT_ROLE || "api") {
6235
6235
  return;
6236
6236
  initialized = true;
6237
6237
  try {
6238
- const impl = await import("./otel-impl-hckw4wt1.js");
6238
+ const impl = await import("./otel-impl-fzc57kcq.js");
6239
6239
  await impl.boot(serviceRole, {
6240
6240
  exportConsoleLogs: serviceRole === "api" && isApiLogExportEnabled()
6241
6241
  });
@@ -10080,17 +10080,17 @@ async function initSlackApp2() {
10080
10080
  });
10081
10081
  initialized2 = true;
10082
10082
  app.use(slackInboundOutcomeMiddleware());
10083
- const { registerMessageHandler } = await import("./handlers-zbs90bny.js");
10084
- const { registerCommandHandler } = await import("./commands-psqhkttb.js");
10085
- const { registerActionHandlers } = await import("./actions-vget6r1k.js");
10086
- const { registerWorkObjectHandlers } = await import("./work-objects-jem2fre0.js");
10083
+ const { registerMessageHandler } = await import("./handlers-dkcarkd0.js");
10084
+ const { registerCommandHandler } = await import("./commands-edmdwa4x.js");
10085
+ const { registerActionHandlers } = await import("./actions-51nc1gny.js");
10086
+ const { registerWorkObjectHandlers } = await import("./work-objects-61w08fwr.js");
10087
10087
  registerMessageHandler(app);
10088
10088
  registerCommandHandler(app);
10089
10089
  registerActionHandlers(app);
10090
10090
  registerWorkObjectHandlers(app);
10091
- const { createAssistant } = await import("./assistant-h0gv97mv.js");
10091
+ const { createAssistant } = await import("./assistant-wv1gz3mt.js");
10092
10092
  app.assistant(createAssistant());
10093
- const { isBlockExternalEnabled, scanExternalChannelsOnBoot } = await import("./external-channel-a5dsmxn4.js");
10093
+ const { isBlockExternalEnabled, scanExternalChannelsOnBoot } = await import("./external-channel-zhvt95n3.js");
10094
10094
  if (isBlockExternalEnabled()) {
10095
10095
  scanExternalChannelsOnBoot(app.client).catch((error) => {
10096
10096
  console.error("[Slack] External channel boot scan failed:", error);
@@ -10103,7 +10103,7 @@ async function startSlackApp2() {
10103
10103
  await initSlackApp2();
10104
10104
  }
10105
10105
  if (app) {
10106
- const { isSlackRenderV2Enabled } = await import("./render-v2-7nqgvk2q.js");
10106
+ const { isSlackRenderV2Enabled } = await import("./render-v2-vb527jwn.js");
10107
10107
  if (isSlackRenderV2Enabled())
10108
10108
  await ensureSlackRenderV2Activation2();
10109
10109
  await app.start();
@@ -710,7 +710,7 @@ function applyHarnessOverrides(harness, modelId, facts, levels) {
710
710
  result = ["off", ...result];
711
711
  if (!direct)
712
712
  result = result.filter((l) => l !== "off");
713
- } else if (harness !== "codex" && harness !== "cursor") {
713
+ } else if (harness !== "codex" && harness !== "cursor" && harness !== "opencode" && harness !== "pi") {
714
714
  result = result.filter((l) => l !== "max");
715
715
  }
716
716
  if (harness === "codex") {
@@ -6,12 +6,12 @@ import {
6
6
  isSensitiveKey,
7
7
  scrubSecrets,
8
8
  init_secret_scrubber
9
- } from "./cli-4mkvwgzr.js";
9
+ } from "./cli-xf234ws8.js";
10
10
  import {
11
11
  openAICompatibleKeyVars,
12
12
  openAICompatibleBaseUrlVars,
13
13
  init_src2
14
- } from "./cli-x3en6ct3.js";
14
+ } from "./cli-nwyw3zhg.js";
15
15
  import {
16
16
  __esm
17
17
  } from "./cli-242037k3.js";
@@ -4,7 +4,7 @@ import {
4
4
  claimKv2,
5
5
  deleteKv2,
6
6
  init_db3
7
- } from "./cli-rg7ntypm.js";
7
+ } from "./cli-d3qqdy4c.js";
8
8
  import {
9
9
  isEnvFlagEnabled,
10
10
  init_env_flag
@@ -12,7 +12,7 @@ import {
12
12
  import {
13
13
  scrubSecrets,
14
14
  init_secret_scrubber
15
- } from "./cli-4mkvwgzr.js";
15
+ } from "./cli-xf234ws8.js";
16
16
 
17
17
  // src/slack/external-channel.ts
18
18
  init_db3();
@@ -8,7 +8,7 @@ import {
8
8
  complete,
9
9
  parseModelStr,
10
10
  resolveCredential
11
- } from "./cli-bn26xbcs.js";
11
+ } from "./cli-8nyhf7za.js";
12
12
  import {
13
13
  SummaryWithRatingsSchema,
14
14
  BASE_SUMMARIZE_PROMPT,
@@ -29,7 +29,7 @@ import {
29
29
  import {
30
30
  scrubSecrets,
31
31
  init_secret_scrubber
32
- } from "./cli-4mkvwgzr.js";
32
+ } from "./cli-xf234ws8.js";
33
33
 
34
34
  // src/utils/internal-ai/complete-structured.ts
35
35
  init_zod();
@@ -13,11 +13,11 @@ async function createRuntimeProvider(kind, target = {}) {
13
13
  return new StaticRuntimeProvider;
14
14
  }
15
15
  case "docker": {
16
- const { DockerRuntimeProvider } = await import("./docker-njavd3fb.js");
16
+ const { DockerRuntimeProvider } = await import("./docker-fkgtr75t.js");
17
17
  return new DockerRuntimeProvider;
18
18
  }
19
19
  case "e2b": {
20
- const { E2BRuntimeProvider } = await import("./e2b-5r6a5jeb.js");
20
+ const { E2BRuntimeProvider } = await import("./e2b-7am6tmq6.js");
21
21
  return new E2BRuntimeProvider(target);
22
22
  }
23
23
  case "k8s":