@desplega.ai/agent-swarm 2.0.0 → 2.1.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 (238) hide show
  1. package/dist/{acp-adapter-sj2g0m84.js → acp-adapter-kr4abrsk.js} +10 -10
  2. package/dist/{actions-fegk44gr.js → actions-eh4g6w2r.js} +27 -27
  3. package/dist/{amp-adapter-ad8ft89x.js → amp-adapter-7h7wdt8q.js} +5 -5
  4. package/dist/{app-kfvgbvzy.js → app-7k8s9w5p.js} +9 -9
  5. package/dist/{assistant-z7zdy9ja.js → assistant-wswt2y7p.js} +28 -28
  6. package/dist/{boot-reembed-j8xa181e.js → boot-reembed-9apm9qw6.js} +7 -7
  7. package/dist/{boot-reembed-5c2z0mbe.js → boot-reembed-whzbdthj.js} +7 -7
  8. package/dist/{boot-scrub-sweep-hnkn3rgt.js → boot-scrub-sweep-ndzmvmgt.js} +8 -8
  9. package/dist/{boot-seeds-kwjq4d2z.js → boot-seeds-e9sta0yt.js} +13 -11
  10. package/dist/{claude-adapter-9vmvpvgd.js → claude-adapter-4mqd3r6r.js} +11 -11
  11. package/dist/{claude-managed-adapter-k9qae05j.js → claude-managed-adapter-9wswb52m.js} +3 -3
  12. package/dist/{claude-managed-setup-q54zx5q2.js → claude-managed-setup-tpe1effx.js} +4 -4
  13. package/dist/{claude-sdk-session-9jye6cxr.js → claude-sdk-session-q49ghmh9.js} +10340 -10197
  14. package/dist/{cli-ke896fcf.js → cli-01xvj1rq.js} +10 -10
  15. package/dist/{cli-tr4sxp68.js → cli-035vekcw.js} +2 -2
  16. package/dist/{cli-z5jjpaxw.js → cli-0pd8hzhc.js} +3 -3
  17. package/dist/{cli-n5vwg842.js → cli-0veb92a3.js} +6 -1
  18. package/dist/{cli-wayw93nt.js → cli-10jesr25.js} +3 -3
  19. package/dist/{cli-se8w6wny.js → cli-1y7yywmj.js} +1 -1
  20. package/dist/{cli-v1yb0rqb.js → cli-20krdhz5.js} +47 -19
  21. package/dist/{cli-d5f9ed5c.js → cli-29rja109.js} +39 -20
  22. package/dist/{cli-apx87jne.js → cli-2pwa0q4d.js} +15 -4
  23. package/dist/{cli-ee9gtz70.js → cli-4mengw46.js} +348 -25
  24. package/dist/{cli-03gedhng.js → cli-5twdke5x.js} +6 -6
  25. package/dist/{cli-6razj6t4.js → cli-711vwbxn.js} +2 -2
  26. package/dist/{cli-s2sp957d.js → cli-78vv7446.js} +1 -1
  27. package/dist/{cli-3fbmmawm.js → cli-7n6s5man.js} +4 -4
  28. package/dist/{cli-hnhtk6cj.js → cli-8wwxw8a3.js} +1 -1
  29. package/dist/{cli-hnmhtzvh.js → cli-9jzdj90z.js} +2 -0
  30. package/dist/{cli-skxvvpap.js → cli-cvv9k0hh.js} +28 -25
  31. package/dist/{cli-74ahz61x.js → cli-d9286m9h.js} +2 -2
  32. package/dist/{cli-4jxm2qtz.js → cli-gxzkg1de.js} +28 -16
  33. package/dist/{cli-zkpks3r3.js → cli-h1arqn31.js} +1 -1
  34. package/dist/{cli-r62a35ea.js → cli-hqr88ew6.js} +1 -1
  35. package/dist/{cli-ra0xzggj.js → cli-j67mh2vg.js} +2 -2
  36. package/dist/{cli-29jc5q7w.js → cli-ksphgh48.js} +2 -2
  37. package/dist/{cli-eejsgvm4.js → cli-mgz4nbgg.js} +4 -4
  38. package/dist/{cli-vatyhshy.js → cli-mz5as5ha.js} +4 -4
  39. package/dist/{cli-f7kr7svz.js → cli-n8ndw8j7.js} +2 -2
  40. package/dist/{cli-1e4b6bzh.js → cli-naqzr17j.js} +7 -7
  41. package/dist/{cli-q0ke1yww.js → cli-nm1p8jfr.js} +6 -6
  42. package/dist/{cli-m50t4309.js → cli-p3zbc1rw.js} +5 -5
  43. package/dist/{cli-cgtksawx.js → cli-pe05f8yk.js} +23 -3
  44. package/dist/{cli-vdach5a9.js → cli-qmzsbkvy.js} +4 -4
  45. package/dist/{cli-n3hzg89b.js → cli-qnm4e9e4.js} +57 -579
  46. package/dist/{cli-s4setq91.js → cli-qqy4q48b.js} +3 -3
  47. package/dist/{cli-k382tshb.js → cli-r35rw5de.js} +8 -7
  48. package/dist/{cli-k3dp5tpf.js → cli-r610p9bs.js} +2 -2
  49. package/dist/{cli-e6mpjhed.js → cli-rc6pf5kv.js} +1 -1
  50. package/dist/{cli-3dj8k4vy.js → cli-rdxm77k3.js} +1 -1
  51. package/dist/{cli-tqaazemc.js → cli-s69nfyeh.js} +1 -1
  52. package/dist/{cli-6jyj59nb.js → cli-sawv63e8.js} +2 -2
  53. package/dist/{cli-q50942rs.js → cli-sg19gbf0.js} +1 -1
  54. package/dist/{cli-p1x85d2t.js → cli-shk7r5cs.js} +12 -9
  55. package/dist/{cli-przpmdgr.js → cli-sksetb2q.js} +11 -1
  56. package/dist/{cli-d2qr7aj4.js → cli-t02z59f2.js} +1 -1
  57. package/dist/{cli-j0pfptdp.js → cli-v7g551te.js} +39 -43
  58. package/dist/{cli-bzszjf2p.js → cli-vgqzp4em.js} +519 -126
  59. package/dist/cli-wfnemr1t.js +86 -0
  60. package/dist/{cli-ne236afy.js → cli-wms6x9db.js} +8 -8
  61. package/dist/{cli-5hkm7whv.js → cli-x1r545x8.js} +1 -1
  62. package/dist/{cli-kt6zqg0e.js → cli-xczsgshn.js} +2 -2
  63. package/dist/{cli-ef1hg1wv.js → cli-y3167wt1.js} +430 -238
  64. package/dist/{cli-tsde1hdr.js → cli-yjmqpxt3.js} +12 -11
  65. package/dist/{cli-9nfx44eh.js → cli-z780ec7c.js} +1 -1
  66. package/dist/{cli-r2pnvj8g.js → cli-zm9t2vde.js} +2 -2
  67. package/dist/cli.js +24 -23
  68. package/dist/{codex-adapter-y81sssk0.js → codex-adapter-4z16v9n0.js} +8 -8
  69. package/dist/{codex-login-f2rcfpp9.js → codex-login-pkepy2j1.js} +2 -2
  70. package/dist/{codex-session-runner-8vx4j6a9.js → codex-session-runner-rvms9y2x.js} +8 -8
  71. package/dist/{commands-kcpvpcrr.js → commands-2a9rtyat.js} +8 -8
  72. package/dist/{controller-ywrmt6yd.js → controller-3k3madbn.js} +4 -4
  73. package/dist/{controllers-connect-kwpvj3rf.js → controllers-connect-v9yn8zb9.js} +30 -30
  74. package/dist/{cursor-adapter-cehv1qns.js → cursor-adapter-98gbhyzn.js} +4 -4
  75. package/dist/{db-ww5d7jq3.js → db-eywwsnjw.js} +9 -7
  76. package/dist/{db-k8ankj20.js → db-ncypk9np.js} +9 -9
  77. package/dist/{devin-adapter-x1022qb1.js → devin-adapter-zeq8b9gz.js} +2 -2
  78. package/dist/{dispatcher-e8gq5m68.js → dispatcher-w94kc575.js} +26 -26
  79. package/dist/{docker-ff6y1190.js → docker-b1e4cqab.js} +2 -2
  80. package/dist/{dsh-adapter-3epjm3af.js → dsh-adapter-47ztej36.js} +4 -4
  81. package/dist/{e2b-8ygwhg0f.js → e2b-bbt8ey45.js} +3 -3
  82. package/dist/{e2b-swhnpw3n.js → e2b-dp804sen.js} +3 -3
  83. package/dist/{event-bus-6axnngdj.js → event-bus-j2jdg3qb.js} +2 -2
  84. package/dist/{external-channel-h3359cwn.js → external-channel-zrkg8ar9.js} +8 -8
  85. package/dist/{grok-adapter-0d4x7gkx.js → grok-adapter-s9ncp9vy.js} +11 -11
  86. package/dist/{handlers-an1gzv21.js → handlers-kqftvjgw.js} +29 -29
  87. package/dist/{heartbeat-6dakeb61.js → heartbeat-9q96p8v9.js} +31 -31
  88. package/dist/{hook-6v6cv6d5.js → hook-56qe10dp.js} +7 -7
  89. package/dist/{hook-sa5xye4y.js → hook-yy6rw42k.js} +8 -8
  90. package/dist/{http-r7f3eky0.js → http-r2dnb8f8.js} +963 -75
  91. package/dist/{index-7ep4gzdk.js → index-3gtmkhc6.js} +26 -26
  92. package/dist/{index-v1v6n7hg.js → index-3k5hkz7r.js} +31 -31
  93. package/dist/{index-rmpw9a8q.js → index-5e101240.js} +26 -26
  94. package/dist/{index-s2wxgzr0.js → index-5wyfjc2c.js} +392 -15
  95. package/dist/{index-zk96aq1k.js → index-vxvhxxbn.js} +7 -7
  96. package/dist/{keepalive-be9vwy5h.js → keepalive-psj6j54c.js} +9 -9
  97. package/dist/{lead-0861cwrf.js → lead-hajz4688.js} +43 -43
  98. package/dist/{maintenance-mzzgc8bn.js → maintenance-ps02sb5m.js} +7 -7
  99. package/dist/{node-mn1zs7an.js → node-mwb5r697.js} +1 -1
  100. package/dist/{oauth-refresh-sweep-cpdnfwdj.js → oauth-refresh-sweep-0284h93b.js} +8 -8
  101. package/dist/{onboard-fh8qs4r3.js → onboard-rbf6bg01.js} +2 -2
  102. package/dist/{opencode-adapter-nm42wwj8.js → opencode-adapter-13dcatgq.js} +8 -8
  103. package/dist/{otel-impl-x6c1c9g4.js → otel-impl-zvqcbhp7.js} +2 -2
  104. package/dist/{pi-mono-adapter-9n2ya240.js → pi-mono-adapter-xxy47q4v.js} +7 -7
  105. package/dist/{pricing-refresh-qb0rv0ap.js → pricing-refresh-kefx9v3t.js} +9 -9
  106. package/dist/{rbac-roles-1gzdwbh1.js → rbac-roles-3m36rxm2.js} +8 -8
  107. package/dist/{rbac-roles-3mraey52.js → rbac-roles-z76xv0hq.js} +9 -9
  108. package/dist/{render-v2-agpa45zz.js → render-v2-wz73bs25.js} +9 -9
  109. package/dist/{resume-x0ydy9s9.js → resume-k4wzge8w.js} +14 -14
  110. package/dist/{setup-as9ga0d6.js → setup-2fp2pypp.js} +2 -2
  111. package/dist/{work-objects-y5g1y7ev.js → work-objects-6k0ywz3m.js} +29 -29
  112. package/dist/{worker-860c3e38.js → worker-5v3rxsdh.js} +43 -43
  113. package/dist/{x-m477fr0h.js → x-4mtdeym1.js} +2 -2
  114. package/openapi.json +777 -6
  115. package/package.json +8 -7
  116. package/src/agentmail/handlers.ts +21 -11
  117. package/src/apps/definition.ts +16 -0
  118. package/src/azure-devops/api.ts +52 -2
  119. package/src/azure-devops/boards-sync.ts +50 -20
  120. package/src/azure-devops/index.ts +1 -0
  121. package/src/azure-devops/outbound.ts +95 -0
  122. package/src/be/boot-seeds.ts +11 -0
  123. package/src/be/db/model-profiles.ts +315 -0
  124. package/src/be/db/tasks/read.ts +7 -0
  125. package/src/be/db.ts +53 -47
  126. package/src/be/migrations/219_relabel_pi_context_compactions.sql +22 -0
  127. package/src/be/migrations/220_model_profiles.sql +137 -0
  128. package/src/be/model-tier-resolution.ts +145 -11
  129. package/src/be/model-validation.ts +8 -1
  130. package/src/be/scripts/typecheck.ts +12 -0
  131. package/src/be/secret-registry.ts +6 -2
  132. package/src/be/seed-model-profiles.ts +41 -0
  133. package/src/be/seed-scripts/catalog/heartbeat-jev-gate.ts +368 -0
  134. package/src/be/seed-scripts/index.ts +9 -0
  135. package/src/be/swarm-config-guard.ts +1 -0
  136. package/src/commands/runner.ts +3 -17
  137. package/src/extensions/catalog.generated.json +17 -0
  138. package/src/extensions/contract-types.generated.ts +1 -1
  139. package/src/extensions/loader.ts +10 -5
  140. package/src/heartbeat/heartbeat.ts +2 -1
  141. package/src/http/agents.ts +49 -2
  142. package/src/http/all-routes.ts +1 -0
  143. package/src/http/apps.ts +30 -3
  144. package/src/http/config.ts +26 -2
  145. package/src/http/core.ts +4 -0
  146. package/src/http/index.ts +11 -1
  147. package/src/http/model-profiles.ts +303 -0
  148. package/src/http/pages-public.ts +11 -5
  149. package/src/http/poll.ts +16 -5
  150. package/src/http/script-runs.ts +1 -1
  151. package/src/http/scripts.ts +25 -2
  152. package/src/http/tasks.ts +18 -0
  153. package/src/http/webhooks.ts +1 -2
  154. package/src/pages/feedback-overlay.ts +65 -6
  155. package/src/providers/acp-targets.ts +1 -1
  156. package/src/providers/amp-adapter.ts +1 -1
  157. package/src/providers/dsh-adapter.ts +1 -1
  158. package/src/providers/pi-mono-extension.ts +17 -3
  159. package/src/providers/reasoning-effort.ts +10 -0
  160. package/src/rbac/legacy-policy.ts +8 -0
  161. package/src/rbac/permissions.ts +5 -0
  162. package/src/scheduler/deferred-task-waits.ts +18 -5
  163. package/src/scheduler/scheduler.ts +7 -1
  164. package/src/scripts-runtime/executors/quickjs-prelude.ts +75 -6
  165. package/src/scripts-runtime/executors/quickjs-runner.ts +85 -8
  166. package/src/scripts-runtime/executors/quickjs-web-shims.ts +1041 -0
  167. package/src/scripts-runtime/extract-args-schema.ts +9 -8
  168. package/src/scripts-runtime/quickjs-compat.ts +464 -0
  169. package/src/scripts-runtime/sdk-allowlist.ts +4 -0
  170. package/src/scripts-runtime/types/stdlib.d.ts +12 -0
  171. package/src/scripts-runtime/types/swarm-extension.d.ts +3 -0
  172. package/src/scripts-runtime/types/swarm-sdk.d.ts +12 -0
  173. package/src/server.ts +10 -1
  174. package/src/slack/blocks.ts +4 -2
  175. package/src/slack/reaction-shortcode.ts +14 -0
  176. package/src/slack/render-v2.ts +12 -7
  177. package/src/slack/responses.ts +5 -4
  178. package/src/slack/thread-buffer.ts +41 -22
  179. package/src/tasks/worker-follow-up.ts +11 -2
  180. package/src/tests/agentmail-filters.test.ts +47 -0
  181. package/src/tests/apps-spike2.test.ts +35 -0
  182. package/src/tests/azure-devops-outbound.test.ts +420 -0
  183. package/src/tests/db-task-read-contract.test.ts +2 -0
  184. package/src/tests/db-task-write-contract.test.ts +1 -0
  185. package/src/tests/deferred-task-wake.test.ts +78 -1
  186. package/src/tests/docs-index-footprint.test.js +2 -2
  187. package/src/tests/dsh-adapter.test.ts +1 -1
  188. package/src/tests/env-flag.test.ts +1 -0
  189. package/src/tests/extensions-catalog.test.ts +1 -0
  190. package/src/tests/extensions-example-comms-adherence-gate.test.ts +413 -0
  191. package/src/tests/extensions-loader.test.ts +15 -0
  192. package/src/tests/heartbeat-jev-gate-credentials.test.ts +168 -0
  193. package/src/tests/heartbeat-jev-gate.test.ts +385 -0
  194. package/src/tests/model-profile-backcompat.test.ts +327 -0
  195. package/src/tests/model-profile-providers.test.ts +302 -0
  196. package/src/tests/model-profile-runtime-secrets.test.ts +223 -0
  197. package/src/tests/model-profiles-api.test.ts +614 -0
  198. package/src/tests/pages-feedback-keys.test.ts +121 -0
  199. package/src/tests/pages-feedback.test.ts +3 -0
  200. package/src/tests/pi-context-compaction.test.ts +193 -0
  201. package/src/tests/profile-claim.test.ts +269 -0
  202. package/src/tests/quickjs-compat.test.ts +213 -0
  203. package/src/tests/rbac-engine.test.ts +21 -0
  204. package/src/tests/script-connections.test.ts +4 -0
  205. package/src/tests/script-executor-conformance.test.ts +252 -1
  206. package/src/tests/script-executor-quickjs.test.ts +96 -0
  207. package/src/tests/script-runs-http.test.ts +89 -0
  208. package/src/tests/scripts-http.test.ts +16 -0
  209. package/src/tests/secret-scrubber.test.ts +10 -0
  210. package/src/tests/seed-model-profiles.test.ts +174 -0
  211. package/src/tests/seed-scripts.test.ts +2 -2
  212. package/src/tests/skill-invocations.test.ts +4 -2
  213. package/src/tests/slack-blocks.test.ts +36 -0
  214. package/src/tests/slack-inline-output.test.ts +14 -0
  215. package/src/tests/slack-reaction-config.test.ts +20 -0
  216. package/src/tests/slack-render-v2.test.ts +37 -0
  217. package/src/tests/slack-thread-buffer.test.ts +98 -1
  218. package/src/tests/workflow-llm.test.ts +61 -0
  219. package/src/tools/model-profiles/list-model-profiles.ts +54 -0
  220. package/src/tools/request-human-input.ts +11 -3
  221. package/src/tools/script-apis.ts +5 -1
  222. package/src/tools/script-upsert.ts +4 -1
  223. package/src/tools/send-task.ts +24 -1
  224. package/src/tools/system-one-decide.ts +104 -0
  225. package/src/tools/task-action.ts +22 -1
  226. package/src/tools/tool-config.ts +6 -0
  227. package/src/types.ts +36 -1
  228. package/src/utils/secret-scrubber.ts +19 -12
  229. package/src/utils/vcs-repo-match.ts +29 -0
  230. package/src/workflows/executors/raw-llm.ts +8 -3
  231. package/src/workflows/executors/system-one-decision.ts +21 -11
  232. package/src/workflows/executors/workflow-llm.ts +22 -0
  233. package/src/workflows/index.ts +21 -12
  234. package/templates/extensions/README.md +1 -0
  235. package/templates/extensions/comms-adherence-gate/README.md +88 -0
  236. package/templates/extensions/comms-adherence-gate/hooks.ts +489 -0
  237. package/templates/extensions/comms-adherence-gate/manifest.json +8 -0
  238. package/dist/cli-5t4f29ez.js +0 -33
@@ -7,14 +7,14 @@ import {
7
7
  } from "./cli-w1q7h2r2.js";
8
8
  import {
9
9
  applyReasoningEffort
10
- } from "./cli-n5vwg842.js";
10
+ } from "./cli-0veb92a3.js";
11
11
  import {
12
12
  swarmRuntimeInstanceId
13
13
  } from "./cli-re8z5p8p.js";
14
14
  import {
15
15
  DEFAULT_MODEL_TIER_MAP,
16
16
  init_types
17
- } from "./cli-cgtksawx.js";
17
+ } from "./cli-pe05f8yk.js";
18
18
  import {
19
19
  init_resolver,
20
20
  init_session_templates,
@@ -29,7 +29,7 @@ import {
29
29
  init_secret_scrubber,
30
30
  registerVolatileSecret,
31
31
  scrubSecrets
32
- } from "./cli-p1x85d2t.js";
32
+ } from "./cli-shk7r5cs.js";
33
33
  import {
34
34
  cursorCatalogRef,
35
35
  init_src
@@ -7,7 +7,7 @@ var package_default;
7
7
  var init_package = __esm(() => {
8
8
  package_default = {
9
9
  name: "@desplega.ai/agent-swarm",
10
- version: "2.0.0",
10
+ version: "2.1.0",
11
11
  description: "agent-swarm.dev — an open-source operating system for AI work: a lead agent breaks goals into tasks, routes them to specialized workers such as Claude Code or Codex, runs each worker in an isolated container, and preserves shared memory, tools, schedules, and review gates so delegated work compounds across sessions.",
12
12
  keywords: [
13
13
  "agent-swarm.dev",
@@ -186,12 +186,13 @@ var init_package = __esm(() => {
186
186
  "@desplega/model-catalog": "workspace:*",
187
187
  "@desplega/model-routing": "workspace:*",
188
188
  "@faker-js/faker": "^10.4.0",
189
- "@opencode/plugin": "2.0.29",
190
- "@opencode/sdk": "2.0.29",
189
+ "@opencode/plugin": "2.0.31",
190
+ "@opencode/sdk": "2.0.31",
191
191
  "@oxlint/plugins": "1.78.0",
192
192
  "@types/bun": "latest",
193
193
  "@typescript/native-preview": "7.0.0-dev.20260707.2",
194
194
  "dependency-cruiser": "^18.0.0",
195
+ "happy-dom": "^20.14.5",
195
196
  konsistent: "1.0.0-beta.1",
196
197
  "openapi-typescript": "^7",
197
198
  oxlint: "1.78.0",
@@ -205,10 +206,10 @@ var init_package = __esm(() => {
205
206
  bun: ">=1.3.12"
206
207
  },
207
208
  dependencies: {
208
- "@agentclientprotocol/sdk": "1.8.0",
209
+ "@agentclientprotocol/sdk": "1.9.0",
209
210
  "@ai-sdk/openai": "^3.0.41",
210
- "@anthropic-ai/claude-agent-sdk": "0.3.300",
211
- "@anthropic-ai/sdk": "^0.134.0",
211
+ "@anthropic-ai/claude-agent-sdk": "0.3.301",
212
+ "@anthropic-ai/sdk": "^0.135.0",
212
213
  "@asteasolutions/zod-to-openapi": "^8.0.0",
213
214
  "@aws-sdk/client-bedrock": "3.1048.0",
214
215
  "@chat-adapter/discord": "4.41.1",
@@ -224,7 +225,7 @@ var init_package = __esm(() => {
224
225
  "@jitl/quickjs-singlefile-mjs-release-sync": "0.32.0",
225
226
  "@linear/sdk": "^77.0.0",
226
227
  "@modelcontextprotocol/sdk": "1.31.0",
227
- "@openai/codex": "0.162.1",
228
+ "@openai/codex": "0.163.0",
228
229
  "@openfort/openfort-node": "^0.9.1",
229
230
  "@opentelemetry/api": "^1.9.1",
230
231
  "@opentelemetry/api-logs": "^0.218.0",
@@ -4,7 +4,7 @@ import {
4
4
  init_db1 as init_db,
5
5
  sweepExpiredKv,
6
6
  upsertKv
7
- } from "./cli-ef1hg1wv.js";
7
+ } from "./cli-y3167wt1.js";
8
8
  import {
9
9
  init_env_flag,
10
10
  isEnvFlagEnabled
@@ -12,7 +12,7 @@ import {
12
12
  import {
13
13
  init_secret_scrubber,
14
14
  scrubSecrets
15
- } from "./cli-p1x85d2t.js";
15
+ } from "./cli-shk7r5cs.js";
16
16
 
17
17
  // src/slack/external-channel.ts
18
18
  init_db();
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  init_secret_scrubber,
7
7
  scrubSecrets
8
- } from "./cli-p1x85d2t.js";
8
+ } from "./cli-shk7r5cs.js";
9
9
 
10
10
  // src/providers/codex-oauth/flow.ts
11
11
  init_secret_scrubber();
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  init_package,
3
3
  package_default
4
- } from "./cli-k382tshb.js";
4
+ } from "./cli-r35rw5de.js";
5
5
 
6
6
  // src/commands/shared/client-config.ts
7
7
  init_package();
@@ -6,7 +6,7 @@ import {
6
6
  init_secret_scrubber,
7
7
  isSensitiveKey,
8
8
  scrubSecrets
9
- } from "./cli-p1x85d2t.js";
9
+ } from "./cli-shk7r5cs.js";
10
10
  import {
11
11
  init_src,
12
12
  openAICompatibleBaseUrlVars,
@@ -13,11 +13,11 @@ import {
13
13
  parseClaudeMdPendingRecord,
14
14
  planClaudeMdSync,
15
15
  withFileLock
16
- } from "./cli-s2sp957d.js";
16
+ } from "./cli-78vv7446.js";
17
17
  import {
18
18
  init_secret_scrubber,
19
19
  scrubSecrets
20
- } from "./cli-p1x85d2t.js";
20
+ } from "./cli-shk7r5cs.js";
21
21
 
22
22
  // src/commands/claude-md-session.ts
23
23
  init_file_lock();
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  init_secret_scrubber,
3
3
  scrubSecrets
4
- } from "./cli-p1x85d2t.js";
4
+ } from "./cli-shk7r5cs.js";
5
5
 
6
6
  // src/providers/devin-adapter.ts
7
7
  init_secret_scrubber();
@@ -2316,6 +2316,15 @@ function computeIsSensitiveKey(key) {
2316
2316
  return true;
2317
2317
  return false;
2318
2318
  }
2319
+ function credentialCandidates(value) {
2320
+ const candidates = new Set([value, value.trim()]);
2321
+ if (value.includes(",")) {
2322
+ for (const member of value.split(","))
2323
+ candidates.add(member.trim());
2324
+ }
2325
+ candidates.delete("");
2326
+ return [...candidates];
2327
+ }
2319
2328
  function buildCache() {
2320
2329
  const entries = [];
2321
2330
  const seen = new Set;
@@ -2324,10 +2333,7 @@ function buildCache() {
2324
2333
  continue;
2325
2334
  if (!isSensitiveKey(key))
2326
2335
  continue;
2327
- const candidates = rawValue.includes(",") ? [rawValue, ...rawValue.split(",").map((s) => s.trim())] : [rawValue];
2328
- for (const candidate of candidates) {
2329
- if (!candidate)
2330
- continue;
2336
+ for (const candidate of credentialCandidates(rawValue)) {
2331
2337
  if (candidate.length < MIN_VALUE_LENGTH)
2332
2338
  continue;
2333
2339
  for (const form of escapedForms(candidate)) {
@@ -2507,11 +2513,8 @@ function registerEnvSecrets(env) {
2507
2513
  for (const [key, value] of Object.entries(env)) {
2508
2514
  if (!value || !isSensitiveKey(key))
2509
2515
  continue;
2510
- registerVolatileSecret(value, key);
2511
- if (!value.includes(","))
2512
- continue;
2513
- for (const member of value.split(","))
2514
- registerVolatileSecret(member.trim(), key);
2516
+ for (const candidate of credentialCandidates(value))
2517
+ registerVolatileSecret(candidate, key);
2515
2518
  }
2516
2519
  }
2517
2520
  function unregisterVolatileSecret(name) {
@@ -224,6 +224,10 @@ var init_permissions = __esm(() => {
224
224
  description: "Record whether a pinned harness CLI version accepts a model (a worker reports its own probe results; the operator may correct any row).",
225
225
  namespace: "models"
226
226
  },
227
+ "models.profiles.write": {
228
+ description: "Create, update, or delete model profiles (named harness + model + effort). Operator (shared API key) only.",
229
+ namespace: "models"
230
+ },
227
231
  "config.read.secrets": {
228
232
  description: "Read unmasked secret config values.",
229
233
  namespace: "config"
@@ -414,7 +418,7 @@ var init_admission = __esm(() => {
414
418
  function actsAsLead(principal) {
415
419
  return principal.kind === "agent" && (principal.isLead || hasLeadEquivalence(principal.agentId));
416
420
  }
417
- var leadOnly, operatorOrUser, leadOrOperatorOrUser, leadOrOperator, agentOrOperator, extensionWrite, extensionActivation, leadOrTaskCreator, leadOrResourceOwner, humanOrLeadOrResourceOwner, leadOrOwnNamespace, anyAuthenticated, requesterOwnsTask, memoryDelete, taskFsMutate, taskProgressWrite, LEGACY_RULES, LEGACY_POLICY;
421
+ var leadOnly, operatorOrUser, operatorOnly, leadOrOperatorOrUser, leadOrOperator, agentOrOperator, extensionWrite, extensionActivation, leadOrTaskCreator, leadOrResourceOwner, humanOrLeadOrResourceOwner, leadOrOwnNamespace, anyAuthenticated, requesterOwnsTask, memoryDelete, taskFsMutate, taskProgressWrite, LEGACY_RULES, LEGACY_POLICY;
418
422
  var init_legacy_policy = __esm(() => {
419
423
  init_env_flag();
420
424
  init_elevated_agents();
@@ -428,6 +432,11 @@ var init_legacy_policy = __esm(() => {
428
432
  denyReason: "requires operator or user authentication",
429
433
  evaluate: (principal) => principal.kind === "operator" || principal.kind === "user"
430
434
  };
435
+ operatorOnly = {
436
+ name: "operator-only",
437
+ denyReason: "requires operator authentication",
438
+ evaluate: (principal) => principal.kind === "operator"
439
+ };
431
440
  leadOrOperatorOrUser = {
432
441
  name: "lead-or-operator-or-user",
433
442
  denyReason: "requires lead agent, operator, or user authentication",
@@ -618,6 +627,7 @@ var init_legacy_policy = __esm(() => {
618
627
  "config.read.secrets": leadOnly,
619
628
  "models.catalog.write": leadOrOperator,
620
629
  "models.harness-support.write": agentOrOperator,
630
+ "models.profiles.write": operatorOnly,
621
631
  "skill.create.swarm": leadOnly,
622
632
  "skill.install.any": leadOnly,
623
633
  "skill.install.global": leadOnly,
@@ -2,7 +2,7 @@ import {
2
2
  DEFAULT_E2B_API_BASE,
3
3
  init_env,
4
4
  redactWithEnv
5
- } from "./cli-tqaazemc.js";
5
+ } from "./cli-s69nfyeh.js";
6
6
  import {
7
7
  __esm,
8
8
  __require,
@@ -1,28 +1,28 @@
1
1
  import {
2
2
  checkGrokCredentials
3
- } from "./cli-kt6zqg0e.js";
3
+ } from "./cli-xczsgshn.js";
4
4
  import {
5
5
  renderSteeringDelivery
6
6
  } from "./cli-19njxg5g.js";
7
7
  import {
8
8
  checkClaudeManagedCredentials
9
- } from "./cli-29jc5q7w.js";
9
+ } from "./cli-ksphgh48.js";
10
10
  import {
11
11
  checkDevinCredentials
12
- } from "./cli-q50942rs.js";
12
+ } from "./cli-sg19gbf0.js";
13
13
  import {
14
14
  checkOpencodeCredentials
15
- } from "./cli-vatyhshy.js";
15
+ } from "./cli-mz5as5ha.js";
16
16
  import {
17
17
  checkDshCredentials
18
- } from "./cli-3fbmmawm.js";
18
+ } from "./cli-7n6s5man.js";
19
19
  import {
20
20
  checkAmpCredentials,
21
21
  liveTestAmpCredentials
22
- } from "./cli-vdach5a9.js";
22
+ } from "./cli-qmzsbkvy.js";
23
23
  import {
24
24
  checkCursorCredentials
25
- } from "./cli-s4setq91.js";
25
+ } from "./cli-qqy4q48b.js";
26
26
  import {
27
27
  createSkillInvokeTracker,
28
28
  isSkillLoaderCall,
@@ -31,10 +31,10 @@ import {
31
31
  import {
32
32
  checkCodexCredentials,
33
33
  codexUserHome
34
- } from "./cli-03gedhng.js";
34
+ } from "./cli-5twdke5x.js";
35
35
  import {
36
36
  checkClaudeCredentials
37
- } from "./cli-q0ke1yww.js";
37
+ } from "./cli-nm1p8jfr.js";
38
38
  import {
39
39
  getContextWindowSize
40
40
  } from "./cli-w1q7h2r2.js";
@@ -64,25 +64,25 @@ import {
64
64
  } from "./cli-2pdaysab.js";
65
65
  import {
66
66
  effectiveReasoningEffort
67
- } from "./cli-n5vwg842.js";
67
+ } from "./cli-0veb92a3.js";
68
68
  import {
69
69
  canonicalAzureDevOpsRepoUrl,
70
70
  isAzureDevOpsUrl,
71
71
  parseAzureDevOpsRepoUrl,
72
72
  resolveScriptsOnlyMode,
73
73
  resumedTaskModelSelection
74
- } from "./cli-bzszjf2p.js";
74
+ } from "./cli-vgqzp4em.js";
75
75
  import {
76
76
  terminateRegisteredProcessGroups
77
77
  } from "./cli-zt3w1cn1.js";
78
78
  import {
79
79
  validateJsonSchema
80
- } from "./cli-1e4b6bzh.js";
80
+ } from "./cli-naqzr17j.js";
81
81
  import {
82
82
  authJsonToCredentialSelection,
83
83
  credentialsToAuthJson,
84
84
  loadAllCodexOAuthSlots
85
- } from "./cli-e6mpjhed.js";
85
+ } from "./cli-rc6pf5kv.js";
86
86
  import {
87
87
  ensure,
88
88
  initOtel,
@@ -92,7 +92,7 @@ import {
92
92
  startSpan,
93
93
  withSpan,
94
94
  withSpanContext
95
- } from "./cli-skxvvpap.js";
95
+ } from "./cli-cvv9k0hh.js";
96
96
  import {
97
97
  MASKED_SECRET_VALUE,
98
98
  initTelemetry,
@@ -102,12 +102,15 @@ import {
102
102
  init_config_secrets,
103
103
  init_telemetry,
104
104
  init_telemetry_context,
105
+ init_vcs_repo_match,
105
106
  isApiDrainingResponse,
106
107
  isCodexAuthFailureReason,
107
108
  isEnvExportRestrictedKey,
108
109
  mapTriggerSurface,
109
- telemetry
110
- } from "./cli-ef1hg1wv.js";
110
+ telemetry,
111
+ vcsRepoName,
112
+ vcsRepoUrlMatches
113
+ } from "./cli-y3167wt1.js";
111
114
  import {
112
115
  ProviderNameSchema,
113
116
  WorkerNudgeSchema,
@@ -115,7 +118,7 @@ import {
115
118
  isTerminalTaskStatus,
116
119
  parseWorkerModelTierOverrides,
117
120
  resolveTaskModelSelection
118
- } from "./cli-cgtksawx.js";
121
+ } from "./cli-pe05f8yk.js";
119
122
  import {
120
123
  WORKSPACE_CLAUDE_MD_PATH,
121
124
  buildContextPreamble,
@@ -139,7 +142,7 @@ import {
139
142
  taskAttachmentFetchCommand,
140
143
  writeIdentityBaselines,
141
144
  writeProfileFileFromDb
142
- } from "./cli-s2sp957d.js";
145
+ } from "./cli-78vv7446.js";
143
146
  import {
144
147
  init_steering_enabled,
145
148
  isSteeringEnabled
@@ -150,7 +153,7 @@ import {
150
153
  init_credentials,
151
154
  normalizeProviderKeyAliases,
152
155
  resolveCredentialPools
153
- } from "./cli-5hkm7whv.js";
156
+ } from "./cli-x1r545x8.js";
154
157
  import {
155
158
  init_templates
156
159
  } from "./cli-mvzyxwg3.js";
@@ -196,7 +199,7 @@ import {
196
199
  registerEnvSecrets,
197
200
  registerSensitiveKeyName,
198
201
  scrubSecrets
199
- } from "./cli-p1x85d2t.js";
202
+ } from "./cli-shk7r5cs.js";
200
203
  import {
201
204
  harnessModelMismatch,
202
205
  init_src,
@@ -241,47 +244,47 @@ async function materializeCodexAuthJson(_slot, creds, deps = {}) {
241
244
  async function createProviderAdapter(provider) {
242
245
  switch (provider) {
243
246
  case "claude": {
244
- const { ClaudeAdapter } = await import("./claude-adapter-9vmvpvgd.js");
247
+ const { ClaudeAdapter } = await import("./claude-adapter-4mqd3r6r.js");
245
248
  return new ClaudeAdapter;
246
249
  }
247
250
  case "pi": {
248
- const { PiMonoAdapter } = await import("./pi-mono-adapter-9n2ya240.js");
251
+ const { PiMonoAdapter } = await import("./pi-mono-adapter-xxy47q4v.js");
249
252
  return new PiMonoAdapter;
250
253
  }
251
254
  case "codex": {
252
- const { CodexAdapter } = await import("./codex-adapter-y81sssk0.js");
255
+ const { CodexAdapter } = await import("./codex-adapter-4z16v9n0.js");
253
256
  return new CodexAdapter;
254
257
  }
255
258
  case "claude-managed": {
256
- const { ClaudeManagedAdapter } = await import("./claude-managed-adapter-k9qae05j.js");
259
+ const { ClaudeManagedAdapter } = await import("./claude-managed-adapter-9wswb52m.js");
257
260
  return new ClaudeManagedAdapter;
258
261
  }
259
262
  case "devin": {
260
- const { DevinAdapter } = await import("./devin-adapter-x1022qb1.js");
263
+ const { DevinAdapter } = await import("./devin-adapter-zeq8b9gz.js");
261
264
  return new DevinAdapter;
262
265
  }
263
266
  case "opencode": {
264
- const { OpencodeAdapter } = await import("./opencode-adapter-nm42wwj8.js");
267
+ const { OpencodeAdapter } = await import("./opencode-adapter-13dcatgq.js");
265
268
  return new OpencodeAdapter;
266
269
  }
267
270
  case "dsh": {
268
- const { DshAdapter } = await import("./dsh-adapter-3epjm3af.js");
271
+ const { DshAdapter } = await import("./dsh-adapter-47ztej36.js");
269
272
  return new DshAdapter;
270
273
  }
271
274
  case "amp": {
272
- const { AmpAdapter } = await import("./amp-adapter-ad8ft89x.js");
275
+ const { AmpAdapter } = await import("./amp-adapter-7h7wdt8q.js");
273
276
  return new AmpAdapter;
274
277
  }
275
278
  case "cursor": {
276
- const { CursorAdapter } = await import("./cursor-adapter-cehv1qns.js");
279
+ const { CursorAdapter } = await import("./cursor-adapter-98gbhyzn.js");
277
280
  return new CursorAdapter;
278
281
  }
279
282
  case "grok": {
280
- const { GrokAdapter } = await import("./grok-adapter-0d4x7gkx.js");
283
+ const { GrokAdapter } = await import("./grok-adapter-s9ncp9vy.js");
281
284
  return new GrokAdapter;
282
285
  }
283
286
  case "acp": {
284
- const { ACPAdapter } = await import("./acp-adapter-sj2g0m84.js");
287
+ const { ACPAdapter } = await import("./acp-adapter-kr4abrsk.js");
285
288
  return new ACPAdapter;
286
289
  }
287
290
  default:
@@ -908,6 +911,7 @@ function guardSpawnModel(input) {
908
911
  // src/commands/runner.ts
909
912
  init_steering_enabled();
910
913
  init_template();
914
+ init_vcs_repo_match();
911
915
 
912
916
  // src/vcs/index.ts
913
917
  function detectVcsProvider(url) {
@@ -1173,7 +1177,7 @@ var CREDENTIAL_PROVIDER_CHECKERS = {
1173
1177
  devin: (env) => checkDevinCredentials(env),
1174
1178
  opencode: (env, opts) => checkOpencodeCredentials(env, opts),
1175
1179
  pi: async (env, opts) => {
1176
- const { checkPiMonoCredentials } = await import("./pi-mono-adapter-9n2ya240.js");
1180
+ const { checkPiMonoCredentials } = await import("./pi-mono-adapter-xxy47q4v.js");
1177
1181
  return checkPiMonoCredentials(env, opts);
1178
1182
  },
1179
1183
  acp: (env) => {
@@ -1442,7 +1446,7 @@ async function validateProviderCredentials(provider, env = process.env, presence
1442
1446
  latency_ms: Date.now() - startedAt
1443
1447
  };
1444
1448
  }
1445
- const { liveTestCursorKey } = await import("./cursor-adapter-cehv1qns.js");
1449
+ const { liveTestCursorKey } = await import("./cursor-adapter-98gbhyzn.js");
1446
1450
  const result = await liveTestCursorKey(apiKey);
1447
1451
  return result.ok ? { ok: true, latency_ms: Date.now() - startedAt } : { ok: false, error: result.error, latency_ms: Date.now() - startedAt };
1448
1452
  }
@@ -1977,8 +1981,7 @@ function scheduleRunnerGc(reason) {
1977
1981
  }
1978
1982
  async function fetchRepoConfig(apiUrl, apiKey, vcsRepo, requireExactMatch = false) {
1979
1983
  try {
1980
- const requested = vcsRepo.trim().replace(/\/+$/, "").replace(/\.git$/, "");
1981
- const repoName = requested.split("/").pop() || requested;
1984
+ const repoName = vcsRepoName(vcsRepo);
1982
1985
  const resp = await fetch(`${apiUrl}/api/repos?name=${encodeURIComponent(repoName)}`, {
1983
1986
  headers: { Authorization: `Bearer ${apiKey}` }
1984
1987
  });
@@ -1986,14 +1989,7 @@ async function fetchRepoConfig(apiUrl, apiKey, vcsRepo, requireExactMatch = fals
1986
1989
  return null;
1987
1990
  const data = await resp.json();
1988
1991
  if (requireExactMatch) {
1989
- return data.repos.find((r) => {
1990
- const normalized = r.url.trim().replace(/\/+$/, "").replace(/\.git$/, "");
1991
- if (normalized === requested)
1992
- return true;
1993
- if (requested.includes(":"))
1994
- return false;
1995
- return normalized.endsWith(`/${requested}`) || normalized.endsWith(`:${requested}`);
1996
- }) ?? null;
1992
+ return data.repos.find((r) => vcsRepoUrlMatches(r.url, vcsRepo)) ?? null;
1997
1993
  }
1998
1994
  return data.repos.find((r) => r.url.includes(vcsRepo)) ?? data.repos[0] ?? null;
1999
1995
  } catch {