@tekmidian/pai 1.0.5 → 1.0.7

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 (247) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/dist/{aibroker-client-CQPGqLxL.mjs → aibroker-client-CXsyC7A8.mjs} +2 -2
  3. package/dist/aibroker-client-ChB7gSxV.mjs +3 -0
  4. package/dist/auto-route-CAlZ5p-h.mjs +11 -0
  5. package/dist/{auto-route-DUYr57rs.mjs → auto-route-PDOAYszN.mjs} +2 -2
  6. package/dist/budget-BXmsSBLI.mjs +15 -0
  7. package/dist/{caller-identity-Bim8JT-D.mjs → caller-identity-DPDSrZE2.mjs} +4 -4
  8. package/dist/{capacity-CsZMkVyg.mjs → capacity-CThSydrd.mjs} +82 -10
  9. package/dist/{chain-Dzz6xcKH.mjs → chain-BvdKqRiZ.mjs} +5 -5
  10. package/dist/cli/index.mjs +2175 -284
  11. package/dist/{cockpit-actions-BTA1njMO.mjs → cockpit-actions-BgdKB9G3.mjs} +26 -26
  12. package/dist/{cockpit-actions-BgsiNcUY.mjs → cockpit-actions-DNl0rKfW.mjs} +18 -18
  13. package/dist/cockpit-memory-CqLPjcWe.mjs +20 -0
  14. package/dist/config/defaults/config.yaml +24 -1
  15. package/dist/config/defaults/workers.yaml +2 -0
  16. package/dist/{config-h5qK3fst.mjs → config-C2dd2SXS.mjs} +2 -2
  17. package/dist/{config-CST2uq1v.mjs → config-DGV64YJa.mjs} +11 -3
  18. package/dist/{config-Dv3t7xnT.mjs → config-DHgPx3ER.mjs} +1 -1
  19. package/dist/{config-DYbyEe4-.mjs → config-SlZ-Z52i.mjs} +3 -2
  20. package/dist/{controls-OiVVbe-f.mjs → controls-ByrcupcA.mjs} +59 -66
  21. package/dist/daemon/index.mjs +40 -40
  22. package/dist/{daemon-C1dycZ3W.mjs → daemon-BjgJyJMP.mjs} +79 -31
  23. package/dist/daemon-iymy18Ie.mjs +46 -0
  24. package/dist/daemon-mcp/index.mjs +49 -38
  25. package/dist/detect-C8nFP-kR.mjs +10 -0
  26. package/dist/{detect-CHuxFrLy.mjs → detect-DLjeYwnt.mjs} +2 -2
  27. package/dist/{embed-pass-DtVF2fOV.mjs → embed-pass-DdTMn4DH.mjs} +5 -5
  28. package/dist/{embedding-gate-B98PK_wz.mjs → embedding-gate-BVQvUmox.mjs} +2 -2
  29. package/dist/{embedding-gate-CTAk8STe.mjs → embedding-gate-iq0oQEkF.mjs} +3 -3
  30. package/dist/{endreason-BqyyU7BH.mjs → endreason-BjPom527.mjs} +4 -4
  31. package/dist/{factory-BV0MQA3T.mjs → factory-CYwa0jYj.mjs} +6 -6
  32. package/dist/factory-DFwez99M.mjs +9 -0
  33. package/dist/{fallback-Bj2cyVk_.mjs → fallback-CQ8_CuVu.mjs} +9 -231
  34. package/dist/{health-kufVIf6i.mjs → health-Bb2U4PNK.mjs} +5 -5
  35. package/dist/{helpers-CvbYEKoD.mjs → helpers-Dj2nY56t.mjs} +2 -2
  36. package/dist/{helpers-WV8tdQHM.mjs → helpers-DyHKAwrW.mjs} +6 -6
  37. package/dist/hooks/block-sleep-poll.mjs +9 -0
  38. package/dist/hooks/capture-all-events.mjs +99 -3
  39. package/dist/hooks/capture-tool-output.mjs +99 -3
  40. package/dist/hooks/handoff-link.mjs +159 -0
  41. package/dist/hooks/load-project-context.mjs +10 -1
  42. package/dist/hooks/local-model-hint.mjs +9 -0
  43. package/dist/hooks/route-agents-to-worker.mjs +9 -0
  44. package/dist/hooks/security-validator.mjs +940 -92
  45. package/dist/hooks/supervision-banner.mjs +219 -48
  46. package/dist/hooks/worker-edit-repair.mjs +9 -0
  47. package/dist/hooks/worker-guard.mjs +97 -1
  48. package/dist/hooks/worker-note.mjs +108 -3
  49. package/dist/hooks/worker-pool-host.mjs +1670 -315
  50. package/dist/hooks/worker-proxy.mjs +9 -0
  51. package/dist/hooks/worker-status-line.mjs +251 -70
  52. package/dist/hooks/worker-supervision.mjs +9 -0
  53. package/dist/hooks/worker-tool-name-repair.mjs +9 -0
  54. package/dist/index.mjs +9 -9
  55. package/dist/{ipc-client-CnYEF31R.mjs → ipc-client-CmagIFLh.mjs} +2 -2
  56. package/dist/{ipc-client-DN7EvoVo.mjs → ipc-client-DmbSIBUK.mjs} +1 -1
  57. package/dist/kill-tree-BlPw1vaU.mjs +10 -0
  58. package/dist/{kill-tree-CcpsRLCZ.mjs → kill-tree-DTmiEb3T.mjs} +8 -8
  59. package/dist/{launch-DpQPZGsT.mjs → launch-CV6oPHI2.mjs} +3 -3
  60. package/dist/{launch-UPQBoW2q.mjs → launch-Dy8qQnSD.mjs} +3 -3
  61. package/dist/{indexer-backend-B2vtFl38.mjs → lessons-CdmqZD0G.mjs} +262 -43
  62. package/dist/{local-candidate-Cp_bw4kK.mjs → local-candidate-C2FGhf54.mjs} +3 -3
  63. package/dist/{local-instances-bdCNNSsL.mjs → local-instances-DhF4_sV2.mjs} +2 -2
  64. package/dist/{local-instances-B-c-CxzP.mjs → local-instances-GgXydQ2P.mjs} +4 -4
  65. package/dist/{local-tiers-BtdEEe5n.mjs → local-tiers-CqwGUcEn.mjs} +3 -3
  66. package/dist/{local-tiers-OBqAAfOg.mjs → local-tiers-X_dQfI4Q.mjs} +3 -3
  67. package/dist/{main-config-ops-BYsK3BxM.mjs → main-config-ops-C_fkINDv.mjs} +3 -3
  68. package/dist/{main-resolver-CAC3xfZM.mjs → main-resolver-CN_sfG1R.mjs} +18 -18
  69. package/dist/{migrate-DrA_OwlZ.mjs → migrate-C2z1YmWC.mjs} +2 -2
  70. package/dist/{model-inventory-BuTpi9a6.mjs → model-inventory-BYNrSTaY.mjs} +13 -13
  71. package/dist/{models-add-CJx2YAwh.mjs → models-add-Dc7VXmcu.mjs} +38 -38
  72. package/dist/operator-IrLbk8hy.mjs +7 -0
  73. package/dist/{operator-DrwWItVt.mjs → operator-lRGvYr3D.mjs} +2 -2
  74. package/dist/{pai-marker-DLKJ9Yr5.mjs → pai-marker-kA0iM7rP.mjs} +2 -2
  75. package/dist/{pane-audit-wv9UkyCe.mjs → pane-audit-DUuilP1V.mjs} +13 -23
  76. package/dist/{paths-DS5VQKoR.mjs → paths-BwfwHOvN.mjs} +4 -4
  77. package/dist/{paths-DBd78I7Z.mjs → paths-CKGYM0Lb.mjs} +3 -3
  78. package/dist/{planner-K0mFrCpL.mjs → planner-BDHVUkIM.mjs} +29 -29
  79. package/dist/{pool-BZ94nFuq.mjs → pool-CFeHGX7q.mjs} +2 -2
  80. package/dist/{pool-cli-BjYQDfx6.mjs → pool-cli-Bj2TeA-d.mjs} +6 -6
  81. package/dist/{pool-cli-B1eKySeN.mjs → pool-cli-DOLgPgOM.mjs} +5 -5
  82. package/dist/{postgres-CBHY5PIi.mjs → postgres-B1B80bcj.mjs} +3 -3
  83. package/dist/{postgres-C-T5OWer.mjs → postgres-BL5oBBgY.mjs} +3 -3
  84. package/dist/{project-setup-pIPHZaXf.mjs → project-setup-i5D0xkTn.mjs} +24 -25
  85. package/dist/{providers-Dzx5GAUI.mjs → providers-BC2Myo_O.mjs} +6 -6
  86. package/dist/providers-C-mnlH1b.mjs +16 -0
  87. package/dist/{query-feedback-DN52N9C5.mjs → query-feedback-BWl2HRwN.mjs} +2 -2
  88. package/dist/registrable-Ct0DKNKS.mjs +9 -0
  89. package/dist/{registrable-CXBBpUcz.mjs → registrable-D_4qXCnq.mjs} +4 -4
  90. package/dist/render-CbifCwTb.mjs +2350 -0
  91. package/dist/render-FB4Fv_fi.mjs +13 -0
  92. package/dist/root-80ESg6b7.mjs +36 -0
  93. package/dist/{root-bG48WVpW.mjs → root-B-ZYiEgi.mjs} +10 -10
  94. package/dist/route-table-DcBZCuco.mjs +15 -0
  95. package/dist/{router-CQSc3lk3.mjs → router-D2476pOp.mjs} +2 -2
  96. package/dist/{router-DwHJRgG9.mjs → router-ghujlEFb.mjs} +1 -1
  97. package/dist/{routing-BlD_tKjW.mjs → routing-CF0wlR-_.mjs} +15 -15
  98. package/dist/{routing-D27jxj9x.mjs → routing-CJ8ioPl2.mjs} +13 -13
  99. package/dist/{run-AZVwceiU.mjs → run-CAjfKBQV.mjs} +74 -31
  100. package/dist/{runtime-paths-WsO9sJFc.mjs → runtime-paths-twfV23YL.mjs} +2 -2
  101. package/dist/{scan-C3uotg_f.mjs → scan-ew8M6tTH.mjs} +7 -7
  102. package/dist/{scope-D8HK6vU7.mjs → scope-BRcaPw5D.mjs} +4 -4
  103. package/dist/session-BmQsXF_a.mjs +35 -0
  104. package/dist/{session-BAfypQb9.mjs → session-C1JnDXvP.mjs} +28 -28
  105. package/dist/session-scan-DWCUKhDM.mjs +9 -0
  106. package/dist/{session-scan-BmnjSReu.mjs → session-scan-DihMibI-.mjs} +6 -6
  107. package/dist/{session-usage-oycSdiD3.mjs → session-usage-BRIWFYPS.mjs} +3 -3
  108. package/dist/status-Bj4yVKj0.mjs +6 -0
  109. package/dist/{status-COtzewKV.mjs → status-DTMT5lyn.mjs} +9 -5
  110. package/dist/{tool-errors-DXJ70-sr.mjs → tool-errors-BOW2n882.mjs} +2 -2
  111. package/dist/{tool-errors-B2LnIqR0.mjs → tool-errors-jNJj3Gzm.mjs} +6 -6
  112. package/dist/{viewer-BgGRqXfD.mjs → viewer-4BU8w_gK.mjs} +16 -14
  113. package/dist/viewer-D3VEdqhC.mjs +22 -0
  114. package/dist/{wait-ChpHKJZV.mjs → wait-BindDA5w.mjs} +3 -3
  115. package/dist/{worker-config-DgdT0iTB.mjs → worker-config-CdPmb4_2.mjs} +54 -103
  116. package/dist/worker-config-CfV2dgSb.mjs +42 -0
  117. package/dist/{workers-config-BhZBrR-Q.mjs → workers-config-2VipVOYk.mjs} +2 -2
  118. package/dist/{worktree-BY--Rgmy.mjs → worktree-7ZS3RBf8.mjs} +175 -9
  119. package/dist/{zettelkasten-BHVx5zj-.mjs → zettelkasten-BH8AdNh8.mjs} +4 -4
  120. package/dist/{zettelkasten-LoH9RBiN.mjs → zettelkasten-FFhQFESJ.mjs} +2 -2
  121. package/docs/commands/README.md +32 -2
  122. package/docs/commands/audit.md +34 -3
  123. package/docs/commands/backup.md +1 -1
  124. package/docs/commands/build.md +4 -4
  125. package/docs/commands/cd.md +1 -1
  126. package/docs/commands/clear-names.md +1 -1
  127. package/docs/commands/cockpit.md +1 -1
  128. package/docs/commands/config.md +1 -1
  129. package/docs/commands/daemon.md +1 -1
  130. package/docs/commands/db.md +1 -1
  131. package/docs/commands/doc.md +1 -1
  132. package/docs/commands/end.md +1 -1
  133. package/docs/commands/find.md +1 -1
  134. package/docs/commands/git.md +110 -0
  135. package/docs/commands/handoff.md +70 -0
  136. package/docs/commands/harness.md +74 -0
  137. package/docs/commands/help.md +1 -1
  138. package/docs/commands/home.md +1 -1
  139. package/docs/commands/hooks-db.md +1 -1
  140. package/docs/commands/identity.md +1 -1
  141. package/docs/commands/install.md +1 -1
  142. package/docs/commands/issue.md +1 -1
  143. package/docs/commands/kg.md +1 -1
  144. package/docs/commands/launch.md +1 -1
  145. package/docs/commands/lessons.md +201 -0
  146. package/docs/commands/list.md +1 -1
  147. package/docs/commands/ls.md +1 -1
  148. package/docs/commands/mcp.md +1 -1
  149. package/docs/commands/memory.md +1 -1
  150. package/docs/commands/models.md +1 -1
  151. package/docs/commands/more.md +1 -1
  152. package/docs/commands/new.md +1 -1
  153. package/docs/commands/notes.md +1 -1
  154. package/docs/commands/notify.md +1 -1
  155. package/docs/commands/observation.md +1 -1
  156. package/docs/commands/obsidian.md +1 -1
  157. package/docs/commands/open.md +1 -1
  158. package/docs/commands/pane.md +1 -1
  159. package/docs/commands/pause.md +1 -1
  160. package/docs/commands/plan.md +1 -1
  161. package/docs/commands/project.md +1 -1
  162. package/docs/commands/projects.md +1 -1
  163. package/docs/commands/providers.md +1 -1
  164. package/docs/commands/queue.md +1 -1
  165. package/docs/commands/registry.md +1 -1
  166. package/docs/commands/reload.md +1 -1
  167. package/docs/commands/rename.md +1 -1
  168. package/docs/commands/restore.md +1 -1
  169. package/docs/commands/resume.md +1 -1
  170. package/docs/commands/router.md +1 -1
  171. package/docs/commands/rules.md +70 -0
  172. package/docs/commands/session.md +1 -1
  173. package/docs/commands/sessions.md +1 -1
  174. package/docs/commands/setup.md +1 -1
  175. package/docs/commands/setups.md +1 -1
  176. package/docs/commands/shell-init.md +1 -1
  177. package/docs/commands/skill.md +1 -1
  178. package/docs/commands/task.md +1 -1
  179. package/docs/commands/tasks.md +1 -1
  180. package/docs/commands/topic.md +1 -1
  181. package/docs/commands/update.md +1 -1
  182. package/docs/commands/worker.md +1 -1
  183. package/docs/commands/zettel.md +1 -1
  184. package/docs/concepts/panes.md +3 -2
  185. package/gemini-extension.json +1 -1
  186. package/package.json +2 -2
  187. package/pai-plugin.json +1 -1
  188. package/plugins/context-preservation/plugin.json +1 -1
  189. package/plugins/core/plugin.json +1 -1
  190. package/plugins/creative/plugin.json +1 -1
  191. package/plugins/observability/plugin.json +1 -1
  192. package/plugins/productivity/plugin.json +1 -1
  193. package/plugins/semantic-search/plugin.json +1 -1
  194. package/plugins/ui/plugin.json +1 -1
  195. package/plugins/zettelkasten/plugin.json +1 -1
  196. package/src/hooks/ts/lib/loop-guard.ts +3 -5
  197. package/src/hooks/ts/lib/rules/builtin/base64-decode-to-shell.rule.yaml +15 -0
  198. package/src/hooks/ts/lib/rules/builtin/chmod-world-writable.rule.yaml +13 -0
  199. package/src/hooks/ts/lib/rules/builtin/chmod-zero.rule.yaml +13 -0
  200. package/src/hooks/ts/lib/rules/builtin/credential-file-read.rule.yaml +13 -0
  201. package/src/hooks/ts/lib/rules/builtin/credential-read-then-network.rule.yaml +29 -0
  202. package/src/hooks/ts/lib/rules/builtin/crontab-persistence.rule.yaml +10 -0
  203. package/src/hooks/ts/lib/rules/builtin/curl-piped-to-shell.rule.yaml +22 -0
  204. package/src/hooks/ts/lib/rules/builtin/download-then-execute.rule.yaml +30 -0
  205. package/src/hooks/ts/lib/rules/builtin/find-root-delete.rule.yaml +14 -0
  206. package/src/hooks/ts/lib/rules/builtin/git-push-force.rule.yaml +24 -0
  207. package/src/hooks/ts/lib/rules/builtin/git-push-plus-refspec.rule.yaml +12 -0
  208. package/src/hooks/ts/lib/rules/builtin/git-reset-hard.rule.yaml +12 -0
  209. package/src/hooks/ts/lib/rules/builtin/injection-then-tool.rule.yaml +30 -0
  210. package/src/hooks/ts/lib/rules/builtin/instruction-override-disregard.rule.yaml +14 -0
  211. package/src/hooks/ts/lib/rules/builtin/instruction-override-ignore.rule.yaml +13 -0
  212. package/src/hooks/ts/lib/rules/builtin/launchagents-write-persistence.rule.yaml +12 -0
  213. package/src/hooks/ts/lib/rules/builtin/launchctl-load-persistence.rule.yaml +10 -0
  214. package/src/hooks/ts/lib/rules/builtin/reverse-shell-dev-tcp.rule.yaml +14 -0
  215. package/src/hooks/ts/lib/rules/builtin/reverse-shell-interactive-bash.rule.yaml +12 -0
  216. package/src/hooks/ts/lib/rules/builtin/rm-recursive-parent.rule.yaml +13 -0
  217. package/src/hooks/ts/lib/rules/builtin/rm-recursive-relative.rule.yaml +12 -0
  218. package/src/hooks/ts/lib/rules/builtin/rm-recursive-root.rule.yaml +27 -0
  219. package/src/hooks/ts/lib/rules/builtin/rm-trailing-tilde.rule.yaml +12 -0
  220. package/src/hooks/ts/lib/rules/builtin/sudoers-nopasswd.rule.yaml +15 -0
  221. package/src/hooks/ts/lib/rules/builtin.generated.ts +557 -0
  222. package/src/hooks/ts/lib/rules/eval.ts +76 -0
  223. package/src/hooks/ts/lib/rules/lint.ts +108 -0
  224. package/src/hooks/ts/lib/rules/load.ts +264 -0
  225. package/src/hooks/ts/lib/rules/types.ts +58 -0
  226. package/src/hooks/ts/pre-tool-use/security-validator.ts +35 -96
  227. package/src/hooks/ts/user-prompt/handoff-link.ts +34 -0
  228. package/dist/aibroker-client-BxzeEHPF.mjs +0 -3
  229. package/dist/auto-route-DWYK_0i0.mjs +0 -11
  230. package/dist/budget-DX-VIWGf.mjs +0 -15
  231. package/dist/cockpit-memory-DIrNs4xr.mjs +0 -20
  232. package/dist/daemon-ieo0lnpq.mjs +0 -46
  233. package/dist/detect-C0ZBXqDL.mjs +0 -10
  234. package/dist/factory-DeASMV7Z.mjs +0 -9
  235. package/dist/kill-tree-CXZ0WfVf.mjs +0 -10
  236. package/dist/operator-Bpxq_WB5.mjs +0 -7
  237. package/dist/providers-QJzpaNhX.mjs +0 -16
  238. package/dist/registrable-Drn8wIDO.mjs +0 -9
  239. package/dist/render-C4KR8qQ8.mjs +0 -13
  240. package/dist/render-Cz3BWIBO.mjs +0 -903
  241. package/dist/root-Bfb1zgwE.mjs +0 -36
  242. package/dist/route-table-ZVMNBsy7.mjs +0 -15
  243. package/dist/session-BcnhepLZ.mjs +0 -35
  244. package/dist/session-scan-CqUQdCac.mjs +0 -9
  245. package/dist/status-D_SWmOlH.mjs +0 -6
  246. package/dist/viewer-CbGN2Ri4.mjs +0 -22
  247. package/dist/worker-config-D1KVAMp4.mjs +0 -42
@@ -8179,6 +8179,7 @@ function defaultWorkersConfig() {
8179
8179
  cacheKeepaliveSecs: num(w.cacheKeepaliveSecs, 0),
8180
8180
  defaultMaxMinutes: num(w.defaultMaxMinutes, 60),
8181
8181
  waitAlarmMinutes: num(w.waitAlarmMinutes, 120),
8182
+ scanBudgetMs: num(w.scanBudgetMs, 5e3),
8182
8183
  stagger: {
8183
8184
  enabled: bool(stagger.enabled, true),
8184
8185
  localDefaultSec: num(stagger.localDefaultSec, 20),
@@ -8773,6 +8774,13 @@ function parseWorkersConfig(raw, yamlProviders = {}) {
8773
8774
  }
8774
8775
  waitAlarmMinutes = w.waitAlarmMinutes;
8775
8776
  }
8777
+ let scanBudgetMs = d.scanBudgetMs ?? 5e3;
8778
+ if (w.scanBudgetMs !== void 0) {
8779
+ if (typeof w.scanBudgetMs !== "number" || !Number.isInteger(w.scanBudgetMs) || w.scanBudgetMs < 1) {
8780
+ bad(".scanBudgetMs", "must be a positive integer (milliseconds)");
8781
+ }
8782
+ scanBudgetMs = w.scanBudgetMs;
8783
+ }
8776
8784
  const stagger = { ...d.stagger };
8777
8785
  if (w.stagger !== void 0) {
8778
8786
  if (typeof w.stagger !== "object" || w.stagger === null || Array.isArray(w.stagger)) {
@@ -8909,6 +8917,7 @@ function parseWorkersConfig(raw, yamlProviders = {}) {
8909
8917
  cacheKeepaliveSecs,
8910
8918
  defaultMaxMinutes,
8911
8919
  waitAlarmMinutes,
8920
+ scanBudgetMs,
8912
8921
  stagger,
8913
8922
  capacity,
8914
8923
  localIdle,
@@ -7445,7 +7445,7 @@ var require_public_api = __commonJS({
7445
7445
  }
7446
7446
  return doc;
7447
7447
  }
7448
- function parse4(src, reviver, options) {
7448
+ function parse5(src, reviver, options) {
7449
7449
  let _reviver = void 0;
7450
7450
  if (typeof reviver === "function") {
7451
7451
  _reviver = reviver;
@@ -7486,7 +7486,7 @@ var require_public_api = __commonJS({
7486
7486
  return value.toString(options);
7487
7487
  return new Document5.Document(value, _replacer, options).toString(options);
7488
7488
  }
7489
- exports.parse = parse4;
7489
+ exports.parse = parse5;
7490
7490
  exports.parseAllDocuments = parseAllDocuments;
7491
7491
  exports.parseDocument = parseDocument5;
7492
7492
  exports.stringify = stringify2;
@@ -8416,6 +8416,7 @@ function defaultWorkersConfig() {
8416
8416
  cacheKeepaliveSecs: num2(w.cacheKeepaliveSecs, 0),
8417
8417
  defaultMaxMinutes: num2(w.defaultMaxMinutes, 60),
8418
8418
  waitAlarmMinutes: num2(w.waitAlarmMinutes, 120),
8419
+ scanBudgetMs: num2(w.scanBudgetMs, 5e3),
8419
8420
  stagger: {
8420
8421
  enabled: bool(stagger.enabled, true),
8421
8422
  localDefaultSec: num2(stagger.localDefaultSec, 20),
@@ -9008,6 +9009,13 @@ function parseWorkersConfig(raw, yamlProviders = {}) {
9008
9009
  }
9009
9010
  waitAlarmMinutes = w.waitAlarmMinutes;
9010
9011
  }
9012
+ let scanBudgetMs = d.scanBudgetMs ?? 5e3;
9013
+ if (w.scanBudgetMs !== void 0) {
9014
+ if (typeof w.scanBudgetMs !== "number" || !Number.isInteger(w.scanBudgetMs) || w.scanBudgetMs < 1) {
9015
+ bad(".scanBudgetMs", "must be a positive integer (milliseconds)");
9016
+ }
9017
+ scanBudgetMs = w.scanBudgetMs;
9018
+ }
9011
9019
  const stagger = { ...d.stagger };
9012
9020
  if (w.stagger !== void 0) {
9013
9021
  if (typeof w.stagger !== "object" || w.stagger === null || Array.isArray(w.stagger)) {
@@ -9144,6 +9152,7 @@ function parseWorkersConfig(raw, yamlProviders = {}) {
9144
9152
  cacheKeepaliveSecs,
9145
9153
  defaultMaxMinutes,
9146
9154
  waitAlarmMinutes,
9155
+ scanBudgetMs,
9147
9156
  stagger,
9148
9157
  capacity,
9149
9158
  localIdle,
@@ -9560,7 +9569,7 @@ function ownsPid(status) {
9560
9569
  env: { ...process.env, LC_ALL: "C" }
9561
9570
  }).trim();
9562
9571
  const psStart = Date.parse(out);
9563
- const started = spawnTimeOf(status) ?? Date.parse(status.started.replace(" ", "T"));
9572
+ const started = status.procStart ?? spawnTimeOf(status) ?? Date.parse(status.started.replace(" ", "T"));
9564
9573
  if (Number.isNaN(psStart) || Number.isNaN(started)) return alive(status.pid);
9565
9574
  return Math.abs(psStart - started) <= 12e4;
9566
9575
  } catch {
@@ -9813,6 +9822,7 @@ var init_worktree = __esm({
9813
9822
  init_paths();
9814
9823
  init_pending();
9815
9824
  init_pool();
9825
+ init_config2();
9816
9826
  }
9817
9827
  });
9818
9828
 
@@ -9958,27 +9968,6 @@ var init_pane_title = __esm({
9958
9968
  }
9959
9969
  });
9960
9970
 
9961
- // src/workers/chatui.ts
9962
- var init_chatui = __esm({
9963
- "src/workers/chatui.ts"() {
9964
- "use strict";
9965
- }
9966
- });
9967
-
9968
- // src/workers/deadline.ts
9969
- var init_deadline = __esm({
9970
- "src/workers/deadline.ts"() {
9971
- "use strict";
9972
- }
9973
- });
9974
-
9975
- // src/workers/active-time.ts
9976
- var init_active_time = __esm({
9977
- "src/workers/active-time.ts"() {
9978
- "use strict";
9979
- }
9980
- });
9981
-
9982
9971
  // src/workers/stagger.ts
9983
9972
  var init_stagger = __esm({
9984
9973
  "src/workers/stagger.ts"() {
@@ -9987,6 +9976,14 @@ var init_stagger = __esm({
9987
9976
  }
9988
9977
  });
9989
9978
 
9979
+ // src/workers/waiting.ts
9980
+ var init_waiting = __esm({
9981
+ "src/workers/waiting.ts"() {
9982
+ "use strict";
9983
+ init_args();
9984
+ }
9985
+ });
9986
+
9990
9987
  // src/workers/capacity.ts
9991
9988
  function resolveCap(maxConcurrent, local, localDefaultCap = DEFAULT_CAPACITY.localDefaultCap) {
9992
9989
  return maxConcurrent ?? (local ? localDefaultCap : void 0);
@@ -9997,23 +9994,37 @@ var init_capacity = __esm({
9997
9994
  "use strict";
9998
9995
  init_stagger();
9999
9996
  init_config3();
9997
+ init_waiting();
10000
9998
  init_status();
10001
9999
  DEFAULT_CAPACITY = { enabled: true, localDefaultCap: 1, uncappedQueueCap: 3, maxTotalWaitMs: 2 * 36e5, heartbeatMs: 6e4, agingMs: 15 * 6e4 };
10002
10000
  }
10003
10001
  });
10004
10002
 
10005
- // src/workers/denials.ts
10006
- var init_denials = __esm({
10007
- "src/workers/denials.ts"() {
10003
+ // src/workers/chatui.ts
10004
+ var init_chatui = __esm({
10005
+ "src/workers/chatui.ts"() {
10008
10006
  "use strict";
10009
10007
  }
10010
10008
  });
10011
10009
 
10012
- // src/workers/waiting.ts
10013
- var init_waiting = __esm({
10014
- "src/workers/waiting.ts"() {
10010
+ // src/workers/deadline.ts
10011
+ var init_deadline = __esm({
10012
+ "src/workers/deadline.ts"() {
10013
+ "use strict";
10014
+ }
10015
+ });
10016
+
10017
+ // src/workers/active-time.ts
10018
+ var init_active_time = __esm({
10019
+ "src/workers/active-time.ts"() {
10020
+ "use strict";
10021
+ }
10022
+ });
10023
+
10024
+ // src/workers/denials.ts
10025
+ var init_denials = __esm({
10026
+ "src/workers/denials.ts"() {
10015
10027
  "use strict";
10016
- init_args();
10017
10028
  }
10018
10029
  });
10019
10030
 
@@ -10195,6 +10206,180 @@ var init_endreason = __esm({
10195
10206
  }
10196
10207
  });
10197
10208
 
10209
+ // src/workers/ps-table.ts
10210
+ var PS_MAX_BUFFER;
10211
+ var init_ps_table = __esm({
10212
+ "src/workers/ps-table.ts"() {
10213
+ "use strict";
10214
+ PS_MAX_BUFFER = 64 * 1024 * 1024;
10215
+ }
10216
+ });
10217
+
10218
+ // src/workers/hang-probe.ts
10219
+ var init_hang_probe = __esm({
10220
+ "src/workers/hang-probe.ts"() {
10221
+ "use strict";
10222
+ init_ps_table();
10223
+ }
10224
+ });
10225
+
10226
+ // src/utils/redact.ts
10227
+ var REDACTED, REDACTED_RE, KEY_WORDS, PROSE, VAL, REDACT_RULES, LINE_RULES, LONG_RUN, LONG_RUN_MAX_LINE, KEY_LINE;
10228
+ var init_redact = __esm({
10229
+ "src/utils/redact.ts"() {
10230
+ "use strict";
10231
+ REDACTED = "[REDACTED]";
10232
+ REDACTED_RE = String.raw`\[REDACTED\]`;
10233
+ KEY_WORDS = "password|passwd|secret|token|api[_-]?key|credential|auth(?:orization)?|bearer";
10234
+ PROSE = "is|are|was|were|be|to|of|in|on|for|and|or|the|a|an|that|this|it|not|out|here|there|so|as|at|by|with|if|when|which";
10235
+ VAL = String.raw`(?:"[^"]*"|'[^']*'|[^\s'"]+)`;
10236
+ REDACT_RULES = [
10237
+ {
10238
+ // `Authorization: Bearer xxx` / `Authorization: Basic xxx` — keep the scheme
10239
+ id: "authorization",
10240
+ re: /(Authorization\s*:\s*)(Bearer|Basic)\s+([^\s'"]+)/gi,
10241
+ replace: (_m, head, scheme) => `${head}${scheme} ${REDACTED}`
10242
+ },
10243
+ {
10244
+ // `Cookie: a=b; c=d` — keep the cookie names, redact every value
10245
+ id: "cookie",
10246
+ re: /((?:Set-)?Cookie\s*:\s*)([^\n]+)/gi,
10247
+ replace: (_m, head, rest) => `${head}${rest.replace(/([^=;\s'"]+=)[^;'"]*/g, `$1${REDACTED}`)}`
10248
+ },
10249
+ {
10250
+ // `key=value`, `key: value`, `"key": "value"` — key carries a secret-ish word;
10251
+ // the word must be a whole key segment, so `monkeys=` stays untouched.
10252
+ // The separator may start with the key's closing quote (JSON); it is kept.
10253
+ id: "key-value",
10254
+ re: new RegExp(String.raw`(?<![A-Za-z0-9])((?:[A-Za-z0-9]+[_-])?(?:${KEY_WORDS})(?![A-Za-z0-9])[A-Za-z0-9_-]*)(["']?\s*[:=]\s*)(?!(?:Bearer|Basic) ${REDACTED_RE})(?!(?:${PROSE})\b)(${VAL})`, "gi"),
10255
+ replace: (m, key, sep, val) => {
10256
+ if (/[_-](?:count|length|len|size|limit|max|min|budget)$/i.test(key) && /^\d+$/.test(val)) return m;
10257
+ const q = sep[0] === '"' || sep[0] === "'" ? val[0] : "";
10258
+ return q && (q === '"' || q === "'") ? `${key}${sep}${q}${REDACTED}${q}` : `${key}${sep}${REDACTED}`;
10259
+ }
10260
+ },
10261
+ {
10262
+ // npmrc `//registry/:_authToken=xxx`
10263
+ id: "npm-auth-token",
10264
+ re: new RegExp(String.raw`(_authToken\s*=\s*)(${VAL})`, "g"),
10265
+ replace: (_m, head) => `${head}${REDACTED}`
10266
+ },
10267
+ {
10268
+ // `curl -u user:pass` / `--user user:pass` — keep the user
10269
+ id: "curl-user",
10270
+ re: /(\bcurl\b[^\n]{0,500}?\s(?:-u|--user)[\s=]+['"]?[^\s:'"]+:)([^\s'"]+)/g,
10271
+ replace: (_m, head) => `${head}${REDACTED}`
10272
+ },
10273
+ {
10274
+ // `mysql -phunter2` / `mysqldump -p'hunter2'` — attached password only
10275
+ id: "mysql-p",
10276
+ re: /(\bmysql(?:dump)?\b[^\n]{0,300}?\s-p)('[^']*'|"[^"]*"|[^\s'"-][^\s'"]*)/g,
10277
+ replace: (_m, head) => `${head}${REDACTED}`
10278
+ },
10279
+ {
10280
+ // `export FOO_TOKEN=...` / `FOO_KEY=...` — SCREAMING_SNAKE env style
10281
+ id: "env-style",
10282
+ re: new RegExp(String.raw`(?<![A-Za-z0-9])((?:export\s+)?[A-Z][A-Z0-9]*_(?:KEY|SECRET|TOKEN|PASS\w*|CRED\w*|AUTH\w*)\s*=\s*)(${VAL})`, "g"),
10283
+ replace: (_m, head) => `${head}${REDACTED}`
10284
+ },
10285
+ {
10286
+ // long CLI flags only: `--password X`, `--token X`, `--api-key X`, `--secret X`, `--passwd X`
10287
+ id: "cli-flag",
10288
+ re: new RegExp(String.raw`(--(?:password|token|api-key|secret|passwd)(?:\s*=\s*|\s+))(${VAL})`, "gi"),
10289
+ replace: (_m, head) => `${head}${REDACTED}`
10290
+ },
10291
+ {
10292
+ // `scheme://user:pass@host` — redact the password, keep user and host
10293
+ id: "url-credentials",
10294
+ re: /((?<![a-z0-9+.-])[a-z][a-z0-9+.-]*:\/\/[^\s/@:]+:)([^\s/@]+)(@)/gi,
10295
+ replace: (_m, head, _pass, at) => `${head}${REDACTED}${at}`
10296
+ },
10297
+ {
10298
+ // provider token prefixes: sk-ant-, sk-, ghp_/gho_/ghu_/ghs_/ghr_, github_pat_,
10299
+ // glpat-, xoxb-/xoxp-/xoxa-, AKIA/ASIA + 16 chars, AIza + 35 chars, JWT (eyJ… three segments)
10300
+ id: "token-prefix",
10301
+ re: /\b(?:sk-ant-[A-Za-z0-9_-]{20,}|sk-[A-Za-z0-9_-]{20,}|gh[pousr]_[A-Za-z0-9]{30,}|github_pat_[A-Za-z0-9_]{22,}|glpat-[A-Za-z0-9_-]{20,}|xox[bap]-[A-Za-z0-9-]{10,}|(?:AKIA|ASIA|AGPA|AIDA|AROA)[A-Z0-9]{16}|[sr]k_(?:live|test)_[A-Za-z0-9]{20,}|npm_[A-Za-z0-9]{36}|hf_[A-Za-z0-9]{30,}|AIza[A-Za-z0-9_-]{35}(?![A-Za-z0-9_-])|eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+)(?![A-Za-z0-9_-])/g,
10302
+ replace: REDACTED
10303
+ },
10304
+ {
10305
+ // 40+ char opaque base64/hex run, only on a line that also has a secret-ish key word
10306
+ id: "long-run",
10307
+ re: /(?<![A-Za-z0-9+/])[A-Za-z0-9+/]{40,4096}={0,2}(?![\w/])/g,
10308
+ // a bare 40-hex git SHA stays; it is only redacted as the value of a secret key
10309
+ replace: (m) => /^[0-9a-f]{40}$/i.test(m) ? m : REDACTED
10310
+ }
10311
+ ];
10312
+ LINE_RULES = REDACT_RULES.filter((r) => r.id !== "long-run");
10313
+ LONG_RUN = REDACT_RULES.find((r) => r.id === "long-run");
10314
+ LONG_RUN_MAX_LINE = 64 * 1024;
10315
+ KEY_LINE = new RegExp(`(?:${KEY_WORDS})`, "i");
10316
+ }
10317
+ });
10318
+
10319
+ // src/hooks/ts/lib/build-gate.ts
10320
+ var init_build_gate = __esm({
10321
+ "src/hooks/ts/lib/build-gate.ts"() {
10322
+ "use strict";
10323
+ }
10324
+ });
10325
+
10326
+ // src/hooks/ts/lib/loop-guard.ts
10327
+ var LOOP_MAX_REPEATS, LOOP_READ_STREAK, SELF, LOOP_DENY_REASON, WAIT_CAP_MS, FP_FULL_READ_BYTES, FP_TOTAL_BYTES;
10328
+ var init_loop_guard = __esm({
10329
+ "src/hooks/ts/lib/loop-guard.ts"() {
10330
+ "use strict";
10331
+ init_hang_probe();
10332
+ init_redact();
10333
+ init_build_gate();
10334
+ LOOP_MAX_REPEATS = 4;
10335
+ LOOP_READ_STREAK = Number(process.env.PAI_LOOP_READ_STREAK) > 0 ? Number(process.env.PAI_LOOP_READ_STREAK) : 15;
10336
+ SELF = "If your part is done, commit and write your R report. If you are stuck, report the blocker in R x= (or use pai worker help if available).";
10337
+ LOOP_DENY_REASON = `loop guard: you ran this command ${LOOP_MAX_REPEATS} times with the same result and nothing changed. Stop repeating it. ${SELF}`;
10338
+ WAIT_CAP_MS = 45 * 6e4;
10339
+ FP_FULL_READ_BYTES = 256 * 1024;
10340
+ FP_TOTAL_BYTES = 4 * 1024 * 1024;
10341
+ }
10342
+ });
10343
+
10344
+ // src/audit/scan.ts
10345
+ var MAX_TEXT_BYTES;
10346
+ var init_scan = __esm({
10347
+ "src/audit/scan.ts"() {
10348
+ "use strict";
10349
+ init_loop_guard();
10350
+ MAX_TEXT_BYTES = 256 * 1024;
10351
+ }
10352
+ });
10353
+
10354
+ // src/hooks/ts/lib/rules/builtin.generated.ts
10355
+ var init_builtin_generated = __esm({
10356
+ "src/hooks/ts/lib/rules/builtin.generated.ts"() {
10357
+ "use strict";
10358
+ }
10359
+ });
10360
+
10361
+ // src/hooks/ts/lib/rules/load.ts
10362
+ var import_yaml6;
10363
+ var init_load = __esm({
10364
+ "src/hooks/ts/lib/rules/load.ts"() {
10365
+ "use strict";
10366
+ import_yaml6 = __toESM(require_dist(), 1);
10367
+ init_pai_home();
10368
+ init_builtin_generated();
10369
+ }
10370
+ });
10371
+
10372
+ // src/workers/scan.ts
10373
+ var init_scan2 = __esm({
10374
+ "src/workers/scan.ts"() {
10375
+ "use strict";
10376
+ init_scan();
10377
+ init_load();
10378
+ init_paths();
10379
+ init_status();
10380
+ }
10381
+ });
10382
+
10198
10383
  // src/workers/render.ts
10199
10384
  function shortModel(model) {
10200
10385
  const raw = String(model ?? "").trim();
@@ -10257,6 +10442,7 @@ var init_render = __esm({
10257
10442
  init_scope();
10258
10443
  init_endreason();
10259
10444
  init_report();
10445
+ init_scan2();
10260
10446
  }
10261
10447
  });
10262
10448
 
@@ -10266,6 +10452,8 @@ var init_pane_bar = __esm({
10266
10452
  "use strict";
10267
10453
  init_chatui();
10268
10454
  init_render();
10455
+ init_capacity();
10456
+ init_pane_exec();
10269
10457
  init_pane_policy();
10270
10458
  }
10271
10459
  });
@@ -10275,20 +10463,12 @@ var init_pane_exec = __esm({
10275
10463
  "src/workers/pane-exec.ts"() {
10276
10464
  "use strict";
10277
10465
  init_pai_home();
10466
+ init_capacity();
10278
10467
  init_pane_bar();
10279
10468
  init_pane_policy();
10280
10469
  }
10281
10470
  });
10282
10471
 
10283
- // src/workers/ps-table.ts
10284
- var PS_MAX_BUFFER;
10285
- var init_ps_table = __esm({
10286
- "src/workers/ps-table.ts"() {
10287
- "use strict";
10288
- PS_MAX_BUFFER = 64 * 1024 * 1024;
10289
- }
10290
- });
10291
-
10292
10472
  // src/workers/pane.ts
10293
10473
  var FIND_SESSION, CAPTURE_ACTIVE, RESTORE_ACTIVE, REBALANCE, TAB_SIZES_SCRIPT, WORKER_SPLIT_SCRIPT, TAB_TTYS_SCRIPT, WINDOW_BOUNDS_SCRIPT, SPLIT_SCRIPT, SESSION_TTY_SCRIPT, END_SESSION_SCRIPT, REBALANCE_SCRIPT, VERIFY_PANE_SCRIPT, HOST_TAB_SCRIPT;
10294
10474
  var init_pane = __esm({
@@ -10591,11 +10771,11 @@ var init_run_lock = __esm({
10591
10771
  });
10592
10772
 
10593
10773
  // src/workers/plan.ts
10594
- var import_yaml6;
10774
+ var import_yaml7;
10595
10775
  var init_plan = __esm({
10596
10776
  "src/workers/plan.ts"() {
10597
10777
  "use strict";
10598
- import_yaml6 = __toESM(require_dist(), 1);
10778
+ import_yaml7 = __toESM(require_dist(), 1);
10599
10779
  }
10600
10780
  });
10601
10781
 
@@ -10653,11 +10833,11 @@ var init_run_events = __esm({
10653
10833
  });
10654
10834
 
10655
10835
  // src/workers/local-tiers.ts
10656
- var import_yaml7, VLLM_READY_MS, STRATA_READY_MS;
10836
+ var import_yaml8, VLLM_READY_MS, STRATA_READY_MS;
10657
10837
  var init_local_tiers = __esm({
10658
10838
  "src/workers/local-tiers.ts"() {
10659
10839
  "use strict";
10660
- import_yaml7 = __toESM(require_dist(), 1);
10840
+ import_yaml8 = __toESM(require_dist(), 1);
10661
10841
  init_pai_home();
10662
10842
  init_config3();
10663
10843
  VLLM_READY_MS = 10 * 60 * 1e3;
@@ -10816,6 +10996,7 @@ var init_viewer = __esm({
10816
10996
  init_render();
10817
10997
  init_waiting();
10818
10998
  init_denials();
10999
+ init_scan2();
10819
11000
  init_tool_errors();
10820
11001
  init_wait();
10821
11002
  init_ps_table();
@@ -10904,11 +11085,11 @@ var init_timeouts = __esm({
10904
11085
  });
10905
11086
 
10906
11087
  // src/workers/local-provider.ts
10907
- var import_yaml8;
11088
+ var import_yaml9;
10908
11089
  var init_local_provider = __esm({
10909
11090
  "src/workers/local-provider.ts"() {
10910
11091
  "use strict";
10911
- import_yaml8 = __toESM(require_dist(), 1);
11092
+ import_yaml9 = __toESM(require_dist(), 1);
10912
11093
  init_config3();
10913
11094
  init_run_env();
10914
11095
  init_status();
@@ -10964,7 +11145,7 @@ function cleanProfile(v) {
10964
11145
  function writeAtomic(path, profiles) {
10965
11146
  mkdirSync8(dirname7(path), { recursive: true });
10966
11147
  const tmp = `${path}.tmp-${process.pid}`;
10967
- writeFileSync8(tmp, (0, import_yaml9.stringify)(profiles));
11148
+ writeFileSync8(tmp, (0, import_yaml10.stringify)(profiles));
10968
11149
  renameSync7(tmp, path);
10969
11150
  }
10970
11151
  function migrateLegacy(path, profiles) {
@@ -10989,7 +11170,7 @@ function readProfiles(path = profilesPath()) {
10989
11170
  const profiles = {};
10990
11171
  if (existsSync13(path)) {
10991
11172
  try {
10992
- const raw = (0, import_yaml9.parse)(readFileSync14(path, "utf8"));
11173
+ const raw = (0, import_yaml10.parse)(readFileSync14(path, "utf8"));
10993
11174
  for (const [name, v] of Object.entries(raw ?? {})) profiles[name] = cleanProfile(v);
10994
11175
  } catch {
10995
11176
  return {};
@@ -11008,11 +11189,11 @@ function getProfile(name, path = profilesPath()) {
11008
11189
  function currentSessionName(env = process.env) {
11009
11190
  return env[SESSION_NAME_ENV]?.trim() || void 0;
11010
11191
  }
11011
- var import_yaml9, SESSION_NAME_ENV, profilesPath, legacyWorkersPath;
11192
+ var import_yaml10, SESSION_NAME_ENV, profilesPath, legacyWorkersPath;
11012
11193
  var init_session_profile_store = __esm({
11013
11194
  "src/workers/session-profile-store.ts"() {
11014
11195
  "use strict";
11015
- import_yaml9 = __toESM(require_dist(), 1);
11196
+ import_yaml10 = __toESM(require_dist(), 1);
11016
11197
  init_pai_home();
11017
11198
  init_route_lists();
11018
11199
  SESSION_NAME_ENV = "PAI_SESSION_NAME";
@@ -11262,7 +11443,7 @@ var require_postgres_interval = __commonJS({
11262
11443
  if (!(this instanceof PostgresInterval)) {
11263
11444
  return new PostgresInterval(raw);
11264
11445
  }
11265
- extend(this, parse4(raw));
11446
+ extend(this, parse5(raw));
11266
11447
  }
11267
11448
  var properties = ["seconds", "minutes", "hours", "days", "months", "years"];
11268
11449
  PostgresInterval.prototype.toPostgres = function() {
@@ -11323,7 +11504,7 @@ var require_postgres_interval = __commonJS({
11323
11504
  var microseconds = fraction + "000000".slice(fraction.length);
11324
11505
  return parseInt(microseconds, 10) / 1e3;
11325
11506
  }
11326
- function parse4(interval) {
11507
+ function parse5(interval) {
11327
11508
  if (!interval) return {};
11328
11509
  var matches = INTERVAL.exec(interval);
11329
11510
  var isNegative = matches[8] === "-";
@@ -11810,13 +11991,13 @@ var require_binaryParsers = __commonJS({
11810
11991
  console.log("ERROR: ElementType not implemented: " + elementType2);
11811
11992
  }
11812
11993
  };
11813
- var parse4 = function(dimension, elementType2) {
11994
+ var parse5 = function(dimension, elementType2) {
11814
11995
  var array = [];
11815
11996
  var i2;
11816
11997
  if (dimension.length > 1) {
11817
11998
  var count = dimension.shift();
11818
11999
  for (i2 = 0; i2 < count; i2++) {
11819
- array[i2] = parse4(dimension, elementType2);
12000
+ array[i2] = parse5(dimension, elementType2);
11820
12001
  }
11821
12002
  dimension.unshift(count);
11822
12003
  } else {
@@ -11826,7 +12007,7 @@ var require_binaryParsers = __commonJS({
11826
12007
  }
11827
12008
  return array;
11828
12009
  };
11829
- return parse4(dims, elementType);
12010
+ return parse5(dims, elementType);
11830
12011
  };
11831
12012
  var parseText = function(value) {
11832
12013
  return value.toString("utf8");
@@ -12614,7 +12795,7 @@ var require_type_overrides = __commonJS({
12614
12795
  var require_pg_connection_string = __commonJS({
12615
12796
  "node_modules/pg-connection-string/index.js"(exports, module) {
12616
12797
  "use strict";
12617
- function parse4(str2, options = {}) {
12798
+ function parse5(str2, options = {}) {
12618
12799
  if (str2.charAt(0) === "/") {
12619
12800
  const config2 = str2.split(" ");
12620
12801
  return { host: config2[0], database: config2[1] };
@@ -12773,7 +12954,7 @@ var require_pg_connection_string = __commonJS({
12773
12954
  return poolConfig;
12774
12955
  }
12775
12956
  function parseIntoClientConfig(str2) {
12776
- return toClientConfig(parse4(str2));
12957
+ return toClientConfig(parse5(str2));
12777
12958
  }
12778
12959
  function deprecatedSslModeWarning(sslmode) {
12779
12960
  if (!deprecatedSslModeWarning.warned && typeof process !== "undefined" && process.emitWarning) {
@@ -12788,10 +12969,10 @@ To prepare for this change:
12788
12969
  See https://www.postgresql.org/docs/current/libpq-ssl.html for libpq SSL mode definitions.`);
12789
12970
  }
12790
12971
  }
12791
- module.exports = parse4;
12792
- parse4.parse = parse4;
12793
- parse4.toClientConfig = toClientConfig;
12794
- parse4.parseIntoClientConfig = parseIntoClientConfig;
12972
+ module.exports = parse5;
12973
+ parse5.parse = parse5;
12974
+ parse5.toClientConfig = toClientConfig;
12975
+ parse5.parseIntoClientConfig = parseIntoClientConfig;
12795
12976
  }
12796
12977
  });
12797
12978
 
@@ -12801,7 +12982,7 @@ var require_connection_parameters = __commonJS({
12801
12982
  "use strict";
12802
12983
  var dns = __require("dns");
12803
12984
  var defaults3 = require_defaults();
12804
- var parse4 = require_pg_connection_string().parse;
12985
+ var parse5 = require_pg_connection_string().parse;
12805
12986
  var val = function(key, config, envVar) {
12806
12987
  if (config[key]) {
12807
12988
  return config[key];
@@ -12839,9 +13020,9 @@ var require_connection_parameters = __commonJS({
12839
13020
  };
12840
13021
  var ConnectionParameters = class {
12841
13022
  constructor(config) {
12842
- config = typeof config === "string" ? parse4(config) : config || {};
13023
+ config = typeof config === "string" ? parse5(config) : config || {};
12843
13024
  if (config.connectionString) {
12844
- config = Object.assign({}, config, parse4(config.connectionString));
13025
+ config = Object.assign({}, config, parse5(config.connectionString));
12845
13026
  }
12846
13027
  this.user = val("user", config);
12847
13028
  this.database = val("database", config);
@@ -13520,7 +13701,7 @@ var require_serializer = __commonJS({
13520
13701
  );
13521
13702
  };
13522
13703
  var emptyArray = [];
13523
- var parse4 = (query2) => {
13704
+ var parse5 = (query2) => {
13524
13705
  const name = query2.name || "";
13525
13706
  if (name.length > 63) {
13526
13707
  console.error("Warning! Postgres only supports 63 characters for query names.");
@@ -13670,7 +13851,7 @@ var require_serializer = __commonJS({
13670
13851
  sendSASLInitialResponseMessage,
13671
13852
  sendSCRAMClientFinalMessage,
13672
13853
  query,
13673
- parse: parse4,
13854
+ parse: parse5,
13674
13855
  bind,
13675
13856
  execute,
13676
13857
  describe,
@@ -14069,12 +14250,12 @@ var require_dist2 = __commonJS({
14069
14250
  return serializer_1.serialize;
14070
14251
  } });
14071
14252
  var parser_1 = require_parser2();
14072
- function parse4(stream, callback) {
14253
+ function parse5(stream, callback) {
14073
14254
  const parser = new parser_1.Parser();
14074
14255
  stream.on("data", (buffer) => parser.parse(buffer, callback));
14075
14256
  return new Promise((resolve4) => stream.on("end", () => resolve4()));
14076
14257
  }
14077
- exports.parse = parse4;
14258
+ exports.parse = parse5;
14078
14259
  }
14079
14260
  });
14080
14261
 
@@ -14158,7 +14339,7 @@ var require_connection = __commonJS({
14158
14339
  "node_modules/pg/lib/connection.js"(exports, module) {
14159
14340
  "use strict";
14160
14341
  var EventEmitter = __require("events").EventEmitter;
14161
- var { parse: parse4, serialize } = require_dist2();
14342
+ var { parse: parse5, serialize } = require_dist2();
14162
14343
  var { getStream, getSecureStream } = require_stream();
14163
14344
  var flushBuffer = serialize.flush();
14164
14345
  var syncBuffer = serialize.sync();
@@ -14244,7 +14425,7 @@ var require_connection = __commonJS({
14244
14425
  });
14245
14426
  }
14246
14427
  attachListeners(stream) {
14247
- parse4(stream, (msg) => {
14428
+ parse5(stream, (msg) => {
14248
14429
  const eventName = msg.name === "error" ? "errorMessage" : msg.name;
14249
14430
  if (this._emitMessage) {
14250
14431
  this.emit("message", msg);
@@ -8183,6 +8183,7 @@ function defaultWorkersConfig() {
8183
8183
  cacheKeepaliveSecs: num(w.cacheKeepaliveSecs, 0),
8184
8184
  defaultMaxMinutes: num(w.defaultMaxMinutes, 60),
8185
8185
  waitAlarmMinutes: num(w.waitAlarmMinutes, 120),
8186
+ scanBudgetMs: num(w.scanBudgetMs, 5e3),
8186
8187
  stagger: {
8187
8188
  enabled: bool(stagger.enabled, true),
8188
8189
  localDefaultSec: num(stagger.localDefaultSec, 20),
@@ -8777,6 +8778,13 @@ function parseWorkersConfig(raw, yamlProviders = {}) {
8777
8778
  }
8778
8779
  waitAlarmMinutes = w.waitAlarmMinutes;
8779
8780
  }
8781
+ let scanBudgetMs = d.scanBudgetMs ?? 5e3;
8782
+ if (w.scanBudgetMs !== void 0) {
8783
+ if (typeof w.scanBudgetMs !== "number" || !Number.isInteger(w.scanBudgetMs) || w.scanBudgetMs < 1) {
8784
+ bad(".scanBudgetMs", "must be a positive integer (milliseconds)");
8785
+ }
8786
+ scanBudgetMs = w.scanBudgetMs;
8787
+ }
8780
8788
  const stagger = { ...d.stagger };
8781
8789
  if (w.stagger !== void 0) {
8782
8790
  if (typeof w.stagger !== "object" || w.stagger === null || Array.isArray(w.stagger)) {
@@ -8913,6 +8921,7 @@ function parseWorkersConfig(raw, yamlProviders = {}) {
8913
8921
  cacheKeepaliveSecs,
8914
8922
  defaultMaxMinutes,
8915
8923
  waitAlarmMinutes,
8924
+ scanBudgetMs,
8916
8925
  stagger,
8917
8926
  capacity,
8918
8927
  localIdle,
@@ -8177,6 +8177,7 @@ function defaultWorkersConfig() {
8177
8177
  cacheKeepaliveSecs: num(w.cacheKeepaliveSecs, 0),
8178
8178
  defaultMaxMinutes: num(w.defaultMaxMinutes, 60),
8179
8179
  waitAlarmMinutes: num(w.waitAlarmMinutes, 120),
8180
+ scanBudgetMs: num(w.scanBudgetMs, 5e3),
8180
8181
  stagger: {
8181
8182
  enabled: bool(stagger.enabled, true),
8182
8183
  localDefaultSec: num(stagger.localDefaultSec, 20),
@@ -8771,6 +8772,13 @@ function parseWorkersConfig(raw, yamlProviders = {}) {
8771
8772
  }
8772
8773
  waitAlarmMinutes = w.waitAlarmMinutes;
8773
8774
  }
8775
+ let scanBudgetMs = d.scanBudgetMs ?? 5e3;
8776
+ if (w.scanBudgetMs !== void 0) {
8777
+ if (typeof w.scanBudgetMs !== "number" || !Number.isInteger(w.scanBudgetMs) || w.scanBudgetMs < 1) {
8778
+ bad(".scanBudgetMs", "must be a positive integer (milliseconds)");
8779
+ }
8780
+ scanBudgetMs = w.scanBudgetMs;
8781
+ }
8774
8782
  const stagger = { ...d.stagger };
8775
8783
  if (w.stagger !== void 0) {
8776
8784
  if (typeof w.stagger !== "object" || w.stagger === null || Array.isArray(w.stagger)) {
@@ -8907,6 +8915,7 @@ function parseWorkersConfig(raw, yamlProviders = {}) {
8907
8915
  cacheKeepaliveSecs,
8908
8916
  defaultMaxMinutes,
8909
8917
  waitAlarmMinutes,
8918
+ scanBudgetMs,
8910
8919
  stagger,
8911
8920
  capacity,
8912
8921
  localIdle,