deepline 0.3.322 → 0.3.324

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 (113) hide show
  1. package/dist/bundling-sources/sdk/src/release.ts +1 -1
  2. package/dist/bundling-sources/shared_libs/observability/scheduled-jobs.json +0 -18
  3. package/dist/bundling-sources/shared_libs/play-runtime/context.ts +454 -129
  4. package/dist/bundling-sources/shared_libs/play-runtime/governor/app-runtime-rate-state-backend.ts +407 -37
  5. package/dist/bundling-sources/shared_libs/play-runtime/governor/governor.ts +18 -4
  6. package/dist/bundling-sources/shared_libs/play-runtime/governor/rate-state-backend.ts +16 -1
  7. package/dist/bundling-sources/shared_libs/play-runtime/map-execution-frame.ts +6 -2
  8. package/dist/bundling-sources/shared_libs/play-runtime/play-http-request.ts +1 -1
  9. package/dist/bundling-sources/shared_libs/play-runtime/protocol.ts +2 -0
  10. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/gradient2-concurrency-controller.ts +15 -5
  11. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/provider-capacity-policy.ts +1 -0
  12. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/provider-concurrency-policy.ts +7 -2
  13. package/dist/bundling-sources/shared_libs/play-runtime/provider-row-retry-queue.ts +65 -0
  14. package/dist/bundling-sources/shared_libs/play-runtime/resource-governor.ts +2 -0
  15. package/dist/bundling-sources/shared_libs/play-runtime/runtime-flow.ts +34 -5
  16. package/dist/bundling-sources/shared_libs/play-runtime/runtime-map-row-feed.ts +116 -15
  17. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-rate-scope.ts +59 -6
  18. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-rate-state.ts +294 -37
  19. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +73 -0
  20. package/dist/bundling-sources/shared_libs/play-runtime/suspension.ts +2 -0
  21. package/dist/bundling-sources/shared_libs/play-runtime/tool-execute-retry-policy.ts +41 -3
  22. package/dist/cli/{auth-VSXORUWX.mjs → auth-6KWNR6AI.mjs} +4 -4
  23. package/dist/cli/auth-LKSTC3YV.js +31 -0
  24. package/dist/cli/{billing-Q6WO5E2R.js → billing-CLLWHIAT.js} +70 -70
  25. package/dist/cli/{billing-EH74RDBF.mjs → billing-VQ2NUJLB.mjs} +4 -4
  26. package/dist/cli/{chunk-M4TZIO5U.js → chunk-2UQUOUAW.js} +2 -2
  27. package/dist/cli/{chunk-JWEYKLOV.mjs → chunk-3ZKAKQYC.mjs} +1 -1
  28. package/dist/cli/{chunk-6JV2VSQN.mjs → chunk-5CQ554BM.mjs} +1 -1
  29. package/dist/cli/{chunk-Z5TQC2ID.mjs → chunk-5QZFWY7C.mjs} +2 -2
  30. package/dist/cli/{chunk-A3THNBGB.mjs → chunk-AKM5JVPG.mjs} +2 -2
  31. package/dist/cli/{chunk-U6N6MS6N.js → chunk-D5YJHGST.js} +4 -4
  32. package/dist/cli/{chunk-SISYT2DM.mjs → chunk-DO2VA5UP.mjs} +2 -2
  33. package/dist/cli/{chunk-H52C7AHC.mjs → chunk-EHSI2DMO.mjs} +4 -4
  34. package/dist/cli/{chunk-CNO37AI3.js → chunk-EXKRHZRG.js} +220 -220
  35. package/dist/cli/{chunk-JCZX5ZQW.js → chunk-G4F2AIQ5.js} +6 -6
  36. package/dist/cli/{chunk-GAFGAIVW.js → chunk-GMO3NBE2.js} +60 -60
  37. package/dist/cli/{chunk-4F4XU2Z5.js → chunk-GROXVGGW.js} +6 -6
  38. package/dist/cli/{chunk-I7UUOAZN.mjs → chunk-HHZDWBSQ.mjs} +1 -1
  39. package/dist/cli/{chunk-ZHIPP7YD.mjs → chunk-I7RLL7LN.mjs} +1 -1
  40. package/dist/cli/{chunk-PTOQKD2Y.js → chunk-IXYR65PW.js} +1 -1
  41. package/dist/cli/{chunk-LUAF3MIC.mjs → chunk-LHJKYMTS.mjs} +1 -1
  42. package/dist/cli/{chunk-5RPFAX7O.js → chunk-N5E66DP3.js} +6 -6
  43. package/dist/cli/{chunk-CMRWPMZS.js → chunk-NC2ZXG2Y.js} +26 -26
  44. package/dist/cli/{chunk-LUTXK4ON.mjs → chunk-NIOFMRYW.mjs} +5 -5
  45. package/dist/cli/{chunk-PMTJYMDJ.mjs → chunk-NQJQ3CLX.mjs} +3 -3
  46. package/dist/cli/{chunk-KAUABQOG.js → chunk-PAA4FYCF.js} +15 -15
  47. package/dist/cli/{chunk-QXIPQYZZ.js → chunk-QM2Z4FQF.js} +6 -6
  48. package/dist/cli/{chunk-WARD6DBW.mjs → chunk-TJGJTB5T.mjs} +1 -1
  49. package/dist/cli/{chunk-KHRWZU6B.js → chunk-TZZNI2A4.js} +50 -50
  50. package/dist/cli/{chunk-6PE2VHSG.mjs → chunk-U2RPP53P.mjs} +6 -6
  51. package/dist/cli/{chunk-Y3LPZJFE.js → chunk-V5PA6TCT.js} +48 -48
  52. package/dist/cli/{client-XRO4X5XF.mjs → client-VHUKTDAZ.mjs} +3 -3
  53. package/dist/cli/client-WMSTRUGP.js +20 -0
  54. package/dist/cli/{csv-ALZ44QHM.js → csv-5MZY7HU5.js} +12 -12
  55. package/dist/cli/{csv-5B6JDXCN.mjs → csv-7DA4APB6.mjs} +3 -3
  56. package/dist/cli/{db-HJECAUNU.mjs → db-7UPW3N5U.mjs} +4 -4
  57. package/dist/cli/{db-D6UHGVOU.js → db-ICG3FUVE.js} +20 -20
  58. package/dist/cli/{describe-YAN46NBC.js → describe-VDRY2JCE.js} +15 -15
  59. package/dist/cli/{describe-FBAWTMDS.mjs → describe-ZAPGM5ND.mjs} +8 -8
  60. package/dist/cli/{executions-XSV7ZE4N.js → executions-D5GYCY3A.js} +6 -6
  61. package/dist/cli/{executions-LWHMAUHH.mjs → executions-TK3C2FAQ.mjs} +4 -4
  62. package/dist/cli/{feedback-RKT6F6W6.js → feedback-PZAZZUXF.js} +6 -6
  63. package/dist/cli/{feedback-EPXMI55U.mjs → feedback-T4EIP5QR.mjs} +3 -3
  64. package/dist/cli/git-73N6EUZ3.js +23 -0
  65. package/dist/cli/{git-BOXANJBI.mjs → git-WBFWIVO5.mjs} +4 -4
  66. package/dist/cli/index.js +75 -75
  67. package/dist/cli/index.mjs +31 -31
  68. package/dist/cli/{legacy-noops-VV7DRGA7.mjs → legacy-noops-DUCK7OKN.mjs} +4 -4
  69. package/dist/cli/{legacy-noops-7EBEYUQZ.js → legacy-noops-LRBJWXRK.js} +7 -7
  70. package/dist/cli/{monitors-RDRG3E4Y.js → monitors-7S2SL62G.js} +85 -85
  71. package/dist/cli/{monitors-NJPHRFYT.mjs → monitors-WYH5AQIO.mjs} +4 -4
  72. package/dist/cli/{org-ZFWDBQ7R.js → org-EQNGGHPV.js} +60 -60
  73. package/dist/cli/{org-USE3QRY6.mjs → org-XCSMLTUW.mjs} +4 -4
  74. package/dist/cli/{play-3VEIZZJ5.mjs → play-A5ISFBJM.mjs} +7 -7
  75. package/dist/cli/play-CLC2Z5SO.js +152 -0
  76. package/dist/cli/{providers-SXWPIPKO.js → providers-DR2CLD3N.js} +7 -7
  77. package/dist/cli/{providers-PP4L5HLM.mjs → providers-KHTZFQ5I.mjs} +4 -4
  78. package/dist/cli/{quickstart-QCSPS2D5.mjs → quickstart-KT4LKORA.mjs} +3 -3
  79. package/dist/cli/{quickstart-WVLEQQXO.js → quickstart-NIRWI6YU.js} +5 -5
  80. package/dist/cli/search-DM7IQS5F.js +26 -0
  81. package/dist/cli/{search-LTC6R6IS.mjs → search-WCEXPBAT.mjs} +5 -5
  82. package/dist/cli/{secrets-R5FGK6UC.js → secrets-QSFEZGVE.js} +13 -13
  83. package/dist/cli/{secrets-LV4FJNAL.mjs → secrets-TN7DW3QR.mjs} +4 -4
  84. package/dist/cli/{sessions-N6CMP6XZ.js → sessions-LJS6W67T.js} +5 -5
  85. package/dist/cli/{sessions-CFNRSRYX.mjs → sessions-WSE5FN4H.mjs} +4 -4
  86. package/dist/cli/{settings-RNEJQGBL.js → settings-FGS3VYJN.js} +74 -74
  87. package/dist/cli/{settings-ADEYLHV7.mjs → settings-Z3V53A6J.mjs} +7 -7
  88. package/dist/cli/{setup-YLEOL7E7.mjs → setup-GMH4VJS3.mjs} +6 -6
  89. package/dist/cli/{setup-NJCUXN4H.js → setup-ZA234HEY.js} +41 -41
  90. package/dist/cli/skills-6APAQV6W.js +28 -0
  91. package/dist/cli/{skills-WABXOGDA.mjs → skills-7G2RZMYH.mjs} +4 -4
  92. package/dist/cli/{tools-XQCGEX5J.mjs → tools-7EE4BGXO.mjs} +6 -6
  93. package/dist/cli/tools-EPYUFWPB.js +38 -0
  94. package/dist/cli/update-FPVX3XJC.js +28 -0
  95. package/dist/cli/{update-3W2NBTST.mjs → update-O5QEWS7K.mjs} +6 -6
  96. package/dist/cli/{workflow-GKFGFQ4D.mjs → workflow-KE54RUTR.mjs} +5 -5
  97. package/dist/cli/{workflow-NUVM7LQR.js → workflow-M5PAAW3O.js} +15 -15
  98. package/dist/index.js +6 -6
  99. package/dist/index.mjs +3 -3
  100. package/dist/install-integrity.json +75 -74
  101. package/dist/release.d.mts +1 -1
  102. package/dist/release.d.ts +1 -1
  103. package/dist/release.js +2 -2
  104. package/dist/release.mjs +1 -1
  105. package/package.json +1 -1
  106. package/dist/cli/auth-MKFIE6KN.js +0 -31
  107. package/dist/cli/client-NITVYMZK.js +0 -20
  108. package/dist/cli/git-B3L74RFF.js +0 -23
  109. package/dist/cli/play-EONETVYE.js +0 -152
  110. package/dist/cli/search-XK2KJXQG.js +0 -26
  111. package/dist/cli/skills-VNAPDBFA.js +0 -28
  112. package/dist/cli/tools-XF5EQO4O.js +0 -38
  113. package/dist/cli/update-3TQMEJO5.js +0 -28
@@ -4,21 +4,52 @@
4
4
  * learn from copies of the same provider feedback. These CTEs are shared by
5
5
  * pure-rate and concurrency-bearing admission, in the same atomic grant SQL.
6
6
  */
7
+ import { DEFAULT_UNKNOWN_PROVIDER_FAST_RECOVERY_RPS } from '../governor/rate-state-backend';
8
+
7
9
  const AIMD_RECOVERY_STEP_MS = 1_000;
8
10
  // Increase relative to the learned rate, not by a fixed RPS amount: a long
9
11
  // Retry-After can imply a very small quota, where even +1 RPS would be an
10
12
  // enormous and repeated over-probe. A 25% clean-success step still recovers a
11
13
  // healthy 1->5 RPS provider in eight observations instead of seventeen.
12
14
  const AIMD_ADDITIVE_STEP_FRACTION = 0.25;
13
-
15
+ // Keep upward probes small enough to retain headroom after a productive
16
+ // decrease. Sparse successes use the earlier observation window; sustained
17
+ // useful work can establish another small probe each second.
18
+ const UNKNOWN_PROVIDER_PROBE_STEP_RPS = 0.1;
19
+ const UNKNOWN_PROVIDER_PROBE_INTERVAL_CAP_MS = 5_000;
20
+ const UNKNOWN_PROVIDER_PRODUCTIVE_RATE_FRACTION = 0.8;
14
21
  export function acquireRateScopeSql(
15
22
  table: string,
16
23
  successesParameter: string,
17
24
  minimumRateSql = 'NULL::float8',
25
+ unknownProvider = false,
18
26
  ): string {
19
27
  const refillRate = `CASE WHEN ${minimumRateSql} IS NULL
20
28
  THEN h.refill_per_sec
21
29
  ELSE GREATEST(h.refill_per_sec, ${minimumRateSql}) END`;
30
+ const recoveryRate = unknownProvider
31
+ ? `CASE WHEN ${refillRate} < ${DEFAULT_UNKNOWN_PROVIDER_FAST_RECOVERY_RPS}
32
+ THEN LEAST(${DEFAULT_UNKNOWN_PROVIDER_FAST_RECOVERY_RPS}, ${refillRate} * 2)
33
+ ELSE ((${refillRate})::numeric + ${UNKNOWN_PROVIDER_PROBE_STEP_RPS})::float8 END`
34
+ : `${refillRate} * (1 + ${AIMD_ADDITIVE_STEP_FRACTION})`;
35
+ // Success counts are already applied once by the feedback writer. Measure
36
+ // this post-hold epoch, excluding Retry-After and earlier idle history. A
37
+ // productive second justifies a small new probe; a lone completion does not.
38
+ const productiveRecovery = `h.rate_observation_started_at_ms IS NOT NULL
39
+ AND nv.now_ms - h.rate_observation_started_at_ms >= ${AIMD_RECOVERY_STEP_MS}
40
+ AND h.rate_successes * 1000.0
41
+ / GREATEST(${AIMD_RECOVERY_STEP_MS}, nv.now_ms - h.rate_observation_started_at_ms)
42
+ >= ${refillRate} * ${UNKNOWN_PROVIDER_PRODUCTIVE_RATE_FRACTION}`;
43
+ // Below useful seed capacity, a confirmed success can prove the next probe
44
+ // after one dispatch interval at the current rate. Keeping the floor's 500ms
45
+ // interval at 4/8 RPS waits through additional clean sends unnecessarily.
46
+ // Above that seed, preserve the slower productive/sparse observation window.
47
+ const backpressuredRecoveryInterval = unknownProvider
48
+ ? `CASE WHEN ${refillRate} >= ${DEFAULT_UNKNOWN_PROVIDER_FAST_RECOVERY_RPS}
49
+ THEN CASE WHEN ${productiveRecovery} THEN ${AIMD_RECOVERY_STEP_MS}
50
+ ELSE LEAST(${UNKNOWN_PROVIDER_PROBE_INTERVAL_CAP_MS}, GREATEST(${AIMD_RECOVERY_STEP_MS}, h.rate_recovery_interval_ms)) END
51
+ ELSE LEAST(h.rate_recovery_interval_ms, CEIL(1000.0 / ${refillRate})) END`
52
+ : `LEAST(h.rate_recovery_interval_ms, ${AIMD_RECOVERY_STEP_MS})`;
22
53
  return `provider_hold_rows AS (
23
54
  SELECT * FROM ${table} WHERE bucket_id = $1 FOR UPDATE
24
55
  ), provider_hold AS (
@@ -28,22 +59,24 @@ export function acquireRateScopeSql(
28
59
  h.tokens + GREATEST(0, nv.now_ms - h.refilled_at_ms) * ${refillRate} / 1000.0
29
60
  ) AS tokens_after_refill,
30
61
  ${successesParameter}::int = 0
31
- AND nv.now_ms - GREATEST(h.refilled_at_ms, h.next_dispatch_at_ms, h.retry_at_ms)
62
+ -- A local no-progress pause remains an active observation episode,
63
+ -- even after the provider's shorter Retry-After has elapsed.
64
+ AND nv.now_ms - GREATEST(h.refilled_at_ms, h.next_dispatch_at_ms, h.retry_at_ms, h.cool_until_ms)
32
65
  > GREATEST(1000, 2000.0 / ${refillRate}) AS observation_was_idle,
33
66
  CASE WHEN ${successesParameter}::int > 0
34
67
  AND h.rate_observation_started_at_ms IS NOT NULL
35
68
  AND nv.now_ms - h.last_ramp_at_ms >= CASE WHEN h.seen_backpressure
36
- THEN LEAST(h.rate_recovery_interval_ms, ${AIMD_RECOVERY_STEP_MS})
69
+ THEN ${backpressuredRecoveryInterval}
37
70
  ELSE h.rate_recovery_interval_ms END
38
71
  AND h.retry_at_ms <= nv.now_ms
39
72
  THEN LEAST(h.max_rps, CASE WHEN h.seen_backpressure
40
- THEN ${refillRate} * (1 + ${AIMD_ADDITIVE_STEP_FRACTION})
73
+ THEN ${recoveryRate}
41
74
  ELSE ${refillRate} * 2 END)
42
75
  ELSE ${refillRate} END AS next_refill_per_sec,
43
76
  CASE WHEN ${successesParameter}::int > 0
44
77
  AND h.rate_observation_started_at_ms IS NOT NULL
45
78
  AND nv.now_ms - h.last_ramp_at_ms >= CASE WHEN h.seen_backpressure
46
- THEN LEAST(h.rate_recovery_interval_ms, ${AIMD_RECOVERY_STEP_MS})
79
+ THEN ${backpressuredRecoveryInterval}
47
80
  ELSE h.rate_recovery_interval_ms END
48
81
  AND h.retry_at_ms <= nv.now_ms
49
82
  THEN nv.now_ms ELSE h.last_ramp_at_ms END AS next_ramp_at_ms
@@ -51,7 +84,16 @@ export function acquireRateScopeSql(
51
84
  )`;
52
85
  }
53
86
 
54
- export function updateRateScopeSql(table: string): string {
87
+ export function updateRateScopeSql(
88
+ table: string,
89
+ unknownProvider = false,
90
+ ): string {
91
+ // Floor recovery and productive probing measure different rates. Once the
92
+ // geometric ramp reaches useful capacity, start a fresh measurement instead
93
+ // of diluting its successful throughput with the earlier slow-start period.
94
+ const recoveredObservation = `${unknownProvider} AND ph.seen_backpressure
95
+ AND ph.refill_per_sec < ${DEFAULT_UNKNOWN_PROVIDER_FAST_RECOVERY_RPS}
96
+ AND ph.next_refill_per_sec >= ${DEFAULT_UNKNOWN_PROVIDER_FAST_RECOVERY_RPS}`;
55
97
  return `updated_scope AS (
56
98
  UPDATE ${table} h SET
57
99
  tokens = ph.tokens_after_refill - (SELECT granted FROM grant_calc),
@@ -59,14 +101,25 @@ export function updateRateScopeSql(table: string): string {
59
101
  refill_per_sec = ph.next_refill_per_sec,
60
102
  last_ramp_at_ms = ph.next_ramp_at_ms,
61
103
  rate_observation_started_at_ms = CASE
104
+ WHEN ${recoveredObservation} THEN CASE
105
+ WHEN (SELECT granted FROM grant_calc) > 0 THEN nv.now_ms ELSE NULL END
62
106
  WHEN (SELECT granted FROM grant_calc) > 0 AND ph.observation_was_idle THEN nv.now_ms
63
107
  WHEN (SELECT granted FROM grant_calc) > 0 THEN COALESCE(ph.rate_observation_started_at_ms, nv.now_ms)
64
108
  ELSE ph.rate_observation_started_at_ms END,
65
109
  rate_successes = CASE
110
+ WHEN ${recoveredObservation} THEN 0
66
111
  WHEN (SELECT granted FROM grant_calc) > 0
67
112
  AND ph.rate_observation_started_at_ms IS NULL THEN 0
68
113
  WHEN (SELECT granted FROM grant_calc) > 0 AND ph.observation_was_idle THEN 0
69
114
  ELSE ph.rate_successes END,
115
+ -- Do not turn an earlier productive measurement window into a failed
116
+ -- probe streak when an unknown provider starts a new run after idle.
117
+ -- Active Retry-After/local cooldowns are excluded by observation_was_idle.
118
+ rate_recovery_interval_ms = CASE
119
+ WHEN ${unknownProvider} AND (SELECT granted FROM grant_calc) > 0
120
+ AND ph.observation_was_idle AND ph.rate_successes > 0
121
+ THEN ${AIMD_RECOVERY_STEP_MS}
122
+ ELSE ph.rate_recovery_interval_ms END,
70
123
  rate_throttle_ceiling_rps = CASE
71
124
  WHEN (SELECT granted FROM grant_calc) > 0
72
125
  AND ph.rate_observation_started_at_ms IS NULL THEN NULL