nolo-cli 0.157.0 → 0.158.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 (75) hide show
  1. package/{_executeModel-ZIQHOREX.js → _executeModel-AGVQAILR.js} +19 -19
  2. package/{agentDeleteCommand-LQSOJEXY.js → agentDeleteCommand-56DO7V2R.js} +22 -22
  3. package/{agentEmailCommands-HTPKXONW.js → agentEmailCommands-BPUATKQ6.js} +24 -24
  4. package/{agentListCommands-GOCGOQUB.js → agentListCommands-KS5VUGOW.js} +40 -17
  5. package/{agentMachineCommands-T7DAZG77.js → agentMachineCommands-HSJS7IQK.js} +11 -11
  6. package/{agentRecordCommands-HSW3RJ4H.js → agentRecordCommands-IDGVLDMB.js} +23 -23
  7. package/{agentRunCommand-TIRJ57DK.js → agentRunCommand-LGMDPPPA.js} +24 -24
  8. package/{agentRuntimeLocal-J6I63NZC.js → agentRuntimeLocal-QL4SHNJJ.js} +10 -10
  9. package/{agentSlice-JNM3HF3V.js → agentSlice-WPXWY6BV.js} +1 -1
  10. package/{appDeleteCommands-KKLAK2UR.js → appDeleteCommands-FLCTFYZB.js} +12 -12
  11. package/{appDeployCommands-PXWK4FAX.js → appDeployCommands-UU4Z7DT3.js} +12 -12
  12. package/{appDeployStatusCommands-3NGWDZTX.js → appDeployStatusCommands-GKLZTHTX.js} +12 -12
  13. package/{appGetCommands-APWYPEO3.js → appGetCommands-DPQ2MVJC.js} +12 -12
  14. package/{appListCommands-OP7IRALO.js → appListCommands-J6QMEBNL.js} +12 -12
  15. package/{authCommand-3Z52KJID.js → authCommand-OVBMDPIF.js} +1 -1
  16. package/{chunk-5EDQTOUR.js → chunk-2HG7O7QF.js} +2 -2
  17. package/{chunk-6Y3ETA2Y.js → chunk-323QA7RW.js} +2 -2
  18. package/{chunk-FHG46N5C.js → chunk-3GCLICFW.js} +1 -1
  19. package/{chunk-4226O6F7.js → chunk-4VDSF5NQ.js} +2 -2
  20. package/{chunk-KESKU5BG.js → chunk-4XHZ4QXL.js} +4 -4
  21. package/{chunk-U34KT53V.js → chunk-6BNW7WC4.js} +1 -1
  22. package/{chunk-4JCAW7TO.js → chunk-7JO3ZACS.js} +1 -1
  23. package/{chunk-QXZH5UDF.js → chunk-7NKZA46B.js} +2 -2
  24. package/{chunk-UVYSBQ2M.js → chunk-AO2T6MWY.js} +10 -10
  25. package/{chunk-QA2C5NKI.js → chunk-ASSNAASW.js} +1 -1
  26. package/{chunk-L2JMH4I5.js → chunk-BWIR5QBI.js} +4 -1
  27. package/{chunk-4L4K6YR7.js → chunk-DI7ZFGDQ.js} +1 -1
  28. package/{chunk-ZZDVBZOP.js → chunk-DOBOKBKS.js} +5 -3
  29. package/{chunk-YN5DT4JS.js → chunk-HCZOSYTL.js} +8 -8
  30. package/{chunk-F3SOW2EU.js → chunk-HEC32F3G.js} +1 -1
  31. package/{chunk-XZIW3Q5B.js → chunk-HSY7F4PP.js} +10 -10
  32. package/chunk-JLR5NWP2.js +548 -0
  33. package/{chunk-MMSQTZCJ.js → chunk-KMKVQNFH.js} +3 -3
  34. package/{chunk-NLFTBC6S.js → chunk-KQT46A27.js} +84 -32
  35. package/{chunk-MR3ITQEV.js → chunk-M3IBEHBT.js} +9 -9
  36. package/{chunk-R7GCGOGZ.js → chunk-OE4FM66I.js} +3 -3
  37. package/{chunk-IKOKYBYJ.js → chunk-OHRQXEON.js} +1 -1
  38. package/{chunk-6MXDOUMH.js → chunk-R4BMKAR5.js} +70 -8
  39. package/{chunk-ZKVS36H3.js → chunk-RCZMREV2.js} +131 -24
  40. package/{chunk-TT644UJD.js → chunk-SAZSXMTR.js} +1 -1
  41. package/{chunk-2AB2HA4M.js → chunk-TDX2L4W2.js} +8 -2
  42. package/{chunk-B3ZIFOFI.js → chunk-TSTLLGAC.js} +2 -2
  43. package/{chunk-5E5VB7PS.js → chunk-TTVMMYVH.js} +7 -7
  44. package/{chunk-OLUKIUX6.js → chunk-XYW6JSRD.js} +2 -2
  45. package/{chunk-WYJTNSVL.js → chunk-Y45LLH6C.js} +34 -3
  46. package/{chunk-K6Y5T4GE.js → chunk-Y7F4Q7YP.js} +2 -2
  47. package/{chunk-GGUTTH6C.js → chunk-YFEVODB4.js} +5 -5
  48. package/{chunk-ULQAD7ZY.js → chunk-YKTAUOS7.js} +1 -1
  49. package/{commandRegistry-DR2RPWK6.js → commandRegistry-HHTMBO55.js} +49 -49
  50. package/{contentThunks-CSJDJDEJ.js → contentThunks-ZSKJTGS7.js} +5 -5
  51. package/{cooldownCommands-JFKTYS2D.js → cooldownCommands-NS63RGBO.js} +2 -2
  52. package/{createAgentAutomationAction-ISEUEQSY.js → createAgentAutomationAction-KYHXEVZF.js} +5 -5
  53. package/{createDialogAction-HUCFOZY3.js → createDialogAction-JKB3V4YP.js} +6 -6
  54. package/{createPageAction-DT5CYXCL.js → createPageAction-CRVW6Z65.js} +5 -5
  55. package/{dialogCommands-3W6AIUXT.js → dialogCommands-2NVLHDZP.js} +10 -10
  56. package/{dialogSlice-WJEEPG4W.js → dialogSlice-SOEMTPH4.js} +4 -4
  57. package/{docCreateCommands-KQHQNLRX.js → docCreateCommands-BL4YBQOD.js} +10 -10
  58. package/{docDeleteCommands-O3DWFX2W.js → docDeleteCommands-NTRYV5OH.js} +10 -10
  59. package/{docReadCommands-2U2BUONC.js → docReadCommands-MJGISD7D.js} +10 -10
  60. package/{docStore-7JPYT25V.js → docStore-YXIN3UVQ.js} +1 -1
  61. package/{docUpdateCommands-MF3C52XI.js → docUpdateCommands-C2AIMWBR.js} +10 -10
  62. package/{handleSendMessageAction-BV5FMID4.js → handleSendMessageAction-JXA7PBY2.js} +11 -11
  63. package/index.js +4 -4
  64. package/{localRuntimeAdapter-6FBEJJ4D.js → localRuntimeAdapter-QAXXJCDM.js} +24 -22
  65. package/{machineCommands-WCAFDI5N.js → machineCommands-TKOOPU7X.js} +23 -23
  66. package/{machineWsRunDispatch-ZF6BBQ3X.js → machineWsRunDispatch-AQ3KTB7U.js} +23 -23
  67. package/package.json +1 -1
  68. package/{readlineWorkspace-I5MHMEUE.js → readlineWorkspace-7G2FBC53.js} +25 -25
  69. package/{runAgentClientLoop-TSNSRQEP.js → runAgentClientLoop-NKCVEOOU.js} +17 -17
  70. package/{spaceCommands-NDPGHDMD.js → spaceCommands-44R7DU34.js} +10 -10
  71. package/{streamAgentChatTurn-RJLDV4WZ.js → streamAgentChatTurn-V7GZPMO4.js} +21 -21
  72. package/{tools-X6QNIYFJ.js → tools-SNXGTJMT.js} +11 -11
  73. package/{tuiSummaryLlmCaller-FESHBDTT.js → tuiSummaryLlmCaller-FQOEF4IE.js} +3 -3
  74. package/{updateDialogTitleAction-6LURCTMG.js → updateDialogTitleAction-QKWRDIK3.js} +5 -5
  75. package/chunk-3MZAGMYY.js +0 -239
@@ -20,27 +20,27 @@ import {
20
20
  resolveFileCategory
21
21
  } from "./chunk-3PVYUPXK.js";
22
22
  import "./chunk-D2MDMY2M.js";
23
- import "./chunk-5E5VB7PS.js";
23
+ import "./chunk-TTVMMYVH.js";
24
24
  import "./chunk-KMDDG73K.js";
25
25
  import "./chunk-ZNFJWEN4.js";
26
- import "./chunk-QXZH5UDF.js";
26
+ import "./chunk-7NKZA46B.js";
27
27
  import "./chunk-HNUWUO75.js";
28
28
  import "./chunk-CHOZJMJS.js";
29
29
  import "./chunk-PWTNI4N7.js";
30
- import "./chunk-ULQAD7ZY.js";
31
- import "./chunk-U34KT53V.js";
30
+ import "./chunk-YKTAUOS7.js";
31
+ import "./chunk-6BNW7WC4.js";
32
32
  import "./chunk-G6OOUQWJ.js";
33
33
  import "./chunk-56GBUMO5.js";
34
34
  import "./chunk-WJZOQR2J.js";
35
- import "./chunk-ZZDVBZOP.js";
36
- import "./chunk-4L4K6YR7.js";
35
+ import "./chunk-DOBOKBKS.js";
36
+ import "./chunk-DI7ZFGDQ.js";
37
37
  import "./chunk-3M52COK5.js";
38
- import "./chunk-3MZAGMYY.js";
39
- import "./chunk-TT644UJD.js";
38
+ import "./chunk-JLR5NWP2.js";
39
+ import "./chunk-SAZSXMTR.js";
40
40
  import "./chunk-2MBTWINN.js";
41
- import "./chunk-F3SOW2EU.js";
41
+ import "./chunk-HEC32F3G.js";
42
42
  import "./chunk-5ZUL4CUO.js";
43
- import "./chunk-QA2C5NKI.js";
43
+ import "./chunk-ASSNAASW.js";
44
44
  import "./chunk-5MMAK75Q.js";
45
45
  import "./chunk-DWLEOOGR.js";
46
46
  import "./chunk-LIQJTQRN.js";
@@ -18,7 +18,7 @@ import {
18
18
  resolveTurnToolContext,
19
19
  trimMessagesWithSummary,
20
20
  validateAccessAndBalance
21
- } from "./chunk-YN5DT4JS.js";
21
+ } from "./chunk-HCZOSYTL.js";
22
22
  import "./chunk-INFHX73M.js";
23
23
  import {
24
24
  filterAndCleanMessages,
@@ -27,11 +27,11 @@ import {
27
27
  readStreamChunk,
28
28
  sendOpenAICompletionsRequest,
29
29
  updateTotalUsage
30
- } from "./chunk-UVYSBQ2M.js";
30
+ } from "./chunk-AO2T6MWY.js";
31
31
  import "./chunk-JEXVIMYZ.js";
32
32
  import {
33
33
  prepareTools
34
- } from "./chunk-OLUKIUX6.js";
34
+ } from "./chunk-XYW6JSRD.js";
35
35
  import {
36
36
  INVALID_TOOL_ARGS_REPLACEMENT,
37
37
  buildInvalidToolCallSelfHealResult,
@@ -42,25 +42,25 @@ import {
42
42
  sanitizeOutboundResponsesInput,
43
43
  selectResponsesConversationState,
44
44
  updateResponsesConversationState
45
- } from "./chunk-GGUTTH6C.js";
45
+ } from "./chunk-YFEVODB4.js";
46
46
  import "./chunk-HS7MLR74.js";
47
- import "./chunk-MR3ITQEV.js";
47
+ import "./chunk-M3IBEHBT.js";
48
48
  import {
49
49
  isOwnedAgentRecord,
50
50
  resolveBillingSource
51
- } from "./chunk-WYJTNSVL.js";
51
+ } from "./chunk-Y45LLH6C.js";
52
52
  import "./chunk-KFHREHUQ.js";
53
53
  import "./chunk-OXME3PEE.js";
54
54
  import {
55
55
  isContextOverflowText,
56
56
  parseApiError,
57
57
  performServerProxyFetchWithRetry
58
- } from "./chunk-4226O6F7.js";
58
+ } from "./chunk-4VDSF5NQ.js";
59
59
  import {
60
60
  createSSEParser,
61
61
  selectMaxExecutionTime,
62
62
  waitForAbortableDelay
63
- } from "./chunk-K6Y5T4GE.js";
63
+ } from "./chunk-Y7F4Q7YP.js";
64
64
  import "./chunk-NF64D32W.js";
65
65
  import "./chunk-3L2WKC3W.js";
66
66
  import "./chunk-VYNMQ6HW.js";
@@ -75,12 +75,12 @@ import "./chunk-KSTEXKL6.js";
75
75
  import "./chunk-AGIM7IMJ.js";
76
76
  import "./chunk-63W5N6P3.js";
77
77
  import "./chunk-VF4K2QE6.js";
78
- import "./chunk-6Y3ETA2Y.js";
78
+ import "./chunk-323QA7RW.js";
79
79
  import "./chunk-BAWAKW7X.js";
80
- import "./chunk-B3ZIFOFI.js";
80
+ import "./chunk-TSTLLGAC.js";
81
81
  import "./chunk-IF7V3CBU.js";
82
82
  import "./chunk-YPG7TUQD.js";
83
- import "./chunk-IKOKYBYJ.js";
83
+ import "./chunk-OHRQXEON.js";
84
84
  import {
85
85
  addToolMessage,
86
86
  addUserMessage,
@@ -98,11 +98,11 @@ import {
98
98
  toast,
99
99
  updateTokens,
100
100
  updateToolMessage
101
- } from "./chunk-XZIW3Q5B.js";
101
+ } from "./chunk-HSY7F4PP.js";
102
102
  import "./chunk-OFFL4DCR.js";
103
103
  import "./chunk-523DITKR.js";
104
104
  import "./chunk-QYPE3TS3.js";
105
- import "./chunk-R7GCGOGZ.js";
105
+ import "./chunk-OE4FM66I.js";
106
106
  import "./chunk-4JH2UMJR.js";
107
107
  import {
108
108
  getCurrentSpaceId
@@ -172,8 +172,8 @@ import {
172
172
  buildDesktopAgentRuntimeDialogHistorySnapshot,
173
173
  extractImageUrlsFromMessages,
174
174
  stripImagePartsForTextOnlyAgent
175
- } from "./chunk-ULQAD7ZY.js";
176
- import "./chunk-U34KT53V.js";
175
+ } from "./chunk-YKTAUOS7.js";
176
+ import "./chunk-6BNW7WC4.js";
177
177
  import {
178
178
  projectUserPartForModel
179
179
  } from "./chunk-G6OOUQWJ.js";
@@ -182,28 +182,28 @@ import "./chunk-WJZOQR2J.js";
182
182
  import {
183
183
  isGptProModel,
184
184
  shouldBlockForGptPro
185
- } from "./chunk-ZZDVBZOP.js";
185
+ } from "./chunk-DOBOKBKS.js";
186
186
  import {
187
187
  extractImagePartsFromResponseOutput,
188
188
  extractTextFromResponseOutput,
189
189
  toResponsesTools
190
- } from "./chunk-4L4K6YR7.js";
190
+ } from "./chunk-DI7ZFGDQ.js";
191
191
  import {
192
192
  resolveRuntimeToolSurfaceForAgent
193
193
  } from "./chunk-3M52COK5.js";
194
- import "./chunk-3MZAGMYY.js";
194
+ import "./chunk-JLR5NWP2.js";
195
195
  import {
196
196
  resolveAgentCallPlan,
197
197
  resolveClientWire
198
- } from "./chunk-TT644UJD.js";
198
+ } from "./chunk-SAZSXMTR.js";
199
199
  import {
200
200
  isOAuthApiKeyRef,
201
201
  resolveAgentContextWindow
202
- } from "./chunk-F3SOW2EU.js";
202
+ } from "./chunk-HEC32F3G.js";
203
203
  import "./chunk-5ZUL4CUO.js";
204
204
  import {
205
205
  getModelInfo
206
- } from "./chunk-QA2C5NKI.js";
206
+ } from "./chunk-ASSNAASW.js";
207
207
  import "./chunk-5MMAK75Q.js";
208
208
  import "./chunk-DWLEOOGR.js";
209
209
  import "./chunk-LIQJTQRN.js";
@@ -8,11 +8,11 @@ import {
8
8
  toolQueryFunc,
9
9
  toolQueryFunctionSchema,
10
10
  toolRegistry
11
- } from "./chunk-MR3ITQEV.js";
12
- import "./chunk-WYJTNSVL.js";
11
+ } from "./chunk-M3IBEHBT.js";
12
+ import "./chunk-Y45LLH6C.js";
13
13
  import "./chunk-KFHREHUQ.js";
14
14
  import "./chunk-OXME3PEE.js";
15
- import "./chunk-K6Y5T4GE.js";
15
+ import "./chunk-Y7F4Q7YP.js";
16
16
  import "./chunk-NF64D32W.js";
17
17
  import "./chunk-3L2WKC3W.js";
18
18
  import "./chunk-VYNMQ6HW.js";
@@ -22,17 +22,17 @@ import "./chunk-KSTEXKL6.js";
22
22
  import "./chunk-AGIM7IMJ.js";
23
23
  import "./chunk-63W5N6P3.js";
24
24
  import "./chunk-VF4K2QE6.js";
25
- import "./chunk-6Y3ETA2Y.js";
25
+ import "./chunk-323QA7RW.js";
26
26
  import "./chunk-BAWAKW7X.js";
27
- import "./chunk-B3ZIFOFI.js";
27
+ import "./chunk-TSTLLGAC.js";
28
28
  import "./chunk-IF7V3CBU.js";
29
29
  import "./chunk-YPG7TUQD.js";
30
- import "./chunk-IKOKYBYJ.js";
31
- import "./chunk-XZIW3Q5B.js";
30
+ import "./chunk-OHRQXEON.js";
31
+ import "./chunk-HSY7F4PP.js";
32
32
  import "./chunk-OFFL4DCR.js";
33
33
  import "./chunk-523DITKR.js";
34
34
  import "./chunk-QYPE3TS3.js";
35
- import "./chunk-R7GCGOGZ.js";
35
+ import "./chunk-OE4FM66I.js";
36
36
  import "./chunk-4JH2UMJR.js";
37
37
  import "./chunk-ZJ7UHBJS.js";
38
38
  import "./chunk-BYXBJQAS.js";
@@ -69,10 +69,10 @@ import "./chunk-AETZ7AD6.js";
69
69
  import "./chunk-Y6ORVLSS.js";
70
70
  import "./chunk-KHCLMKZZ.js";
71
71
  import "./chunk-3M52COK5.js";
72
- import "./chunk-3MZAGMYY.js";
73
- import "./chunk-F3SOW2EU.js";
72
+ import "./chunk-JLR5NWP2.js";
73
+ import "./chunk-HEC32F3G.js";
74
74
  import "./chunk-5ZUL4CUO.js";
75
- import "./chunk-QA2C5NKI.js";
75
+ import "./chunk-ASSNAASW.js";
76
76
  import "./chunk-5MMAK75Q.js";
77
77
  import "./chunk-DWLEOOGR.js";
78
78
  import "./chunk-LIQJTQRN.js";
@@ -7,13 +7,13 @@ import {
7
7
  canUsePlatformChatProvider,
8
8
  parsePlatformChatCompletionResponse,
9
9
  resolvePlatformChatProviderConfig
10
- } from "./chunk-QXZH5UDF.js";
10
+ } from "./chunk-7NKZA46B.js";
11
11
  import "./chunk-HNUWUO75.js";
12
12
  import "./chunk-56GBUMO5.js";
13
- import "./chunk-4L4K6YR7.js";
13
+ import "./chunk-DI7ZFGDQ.js";
14
14
  import {
15
15
  COMPACTION_SUMMARY_SYSTEM_PROMPT
16
- } from "./chunk-QA2C5NKI.js";
16
+ } from "./chunk-ASSNAASW.js";
17
17
  import "./chunk-5MMAK75Q.js";
18
18
  import "./chunk-DWLEOOGR.js";
19
19
  import "./chunk-I42VC5KR.js";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  updateContentTitle
3
- } from "./chunk-IKOKYBYJ.js";
3
+ } from "./chunk-OHRQXEON.js";
4
4
  import {
5
5
  format,
6
6
  isAssistantToolStub,
7
7
  selectAllMsgs
8
- } from "./chunk-XZIW3Q5B.js";
8
+ } from "./chunk-HSY7F4PP.js";
9
9
  import "./chunk-OFFL4DCR.js";
10
10
  import {
11
11
  BUILTIN_DIALOG_LLM_FALLBACK_MODEL,
@@ -14,7 +14,7 @@ import {
14
14
  import "./chunk-QYPE3TS3.js";
15
15
  import {
16
16
  runLlm
17
- } from "./chunk-R7GCGOGZ.js";
17
+ } from "./chunk-OE4FM66I.js";
18
18
  import "./chunk-4JH2UMJR.js";
19
19
  import "./chunk-ZJ7UHBJS.js";
20
20
  import "./chunk-BYXBJQAS.js";
@@ -55,11 +55,11 @@ import {
55
55
  buildDialogFallbackTitleFromMessages,
56
56
  resolveDialogTitle
57
57
  } from "./chunk-2MBTWINN.js";
58
- import "./chunk-F3SOW2EU.js";
58
+ import "./chunk-HEC32F3G.js";
59
59
  import "./chunk-5ZUL4CUO.js";
60
60
  import {
61
61
  serializeMessageContent
62
- } from "./chunk-QA2C5NKI.js";
62
+ } from "./chunk-ASSNAASW.js";
63
63
  import "./chunk-5MMAK75Q.js";
64
64
  import "./chunk-DWLEOOGR.js";
65
65
  import "./chunk-LIQJTQRN.js";
package/chunk-3MZAGMYY.js DELETED
@@ -1,239 +0,0 @@
1
- // packages/ai/tools/agent/quotaCircuitBreaker.ts
2
- var QUOTA_ERROR_PATTERNS = [
3
- /429/,
4
- /quota/i,
5
- /access_terminated_error/i,
6
- /(?:weekly|monthly)\s*(?:\([^)]*\)\s*)?usage\s+limit/i,
7
- /rate\s*limit/i,
8
- /too\s*many\s*requests/i,
9
- /额度/,
10
- /上限/,
11
- /用尽/,
12
- /CliProviderQuotaError/i
13
- ];
14
- function isCliProviderQuotaErrorShape(error) {
15
- if (!error || typeof error !== "object") return false;
16
- const e = error;
17
- return e.name === "CliProviderQuotaError" || typeof e.message === "string" && e.message.startsWith("[QUOTA_LIMITED:");
18
- }
19
- function isQuotaExhaustedError(error) {
20
- if (!error) return false;
21
- if (isCliProviderQuotaErrorShape(error)) return true;
22
- if (error instanceof Error) {
23
- return QUOTA_ERROR_PATTERNS.some((pattern) => pattern.test(error.message));
24
- }
25
- if (typeof error === "string") {
26
- return QUOTA_ERROR_PATTERNS.some((pattern) => pattern.test(error));
27
- }
28
- const maybeStatus = error.status;
29
- const maybeStatusCode = error.statusCode;
30
- const status = typeof maybeStatus === "number" ? maybeStatus : maybeStatusCode;
31
- if (status === 429) return true;
32
- if (status === 403) {
33
- const message = extractMessage(error);
34
- return QUOTA_ERROR_PATTERNS.some((pattern) => pattern.test(message));
35
- }
36
- return false;
37
- }
38
- function extractMessage(error) {
39
- if (typeof error === "string") return error;
40
- if (error instanceof Error) return error.message;
41
- if (error && typeof error === "object") {
42
- const m = error.message;
43
- return typeof m === "string" ? m : "";
44
- }
45
- return "";
46
- }
47
- function parseResetsInMs(text) {
48
- if (!text) return void 0;
49
- const sanitized = text.replace(/\btrace[\s_-]?id\b[^)\n]*/gi, " ").replace(/\b[0-9a-f]{16,}\b/gi, " ");
50
- const unitMs = (n, unit) => {
51
- if (/^d/.test(unit)) return n * 24 * 3600 * 1e3;
52
- if (/^h/.test(unit)) return n * 3600 * 1e3;
53
- if (/^m/.test(unit)) return n * 60 * 1e3;
54
- if (/^s/.test(unit)) return n * 1e3;
55
- return NaN;
56
- };
57
- const re = /(\d+)\s*(d(?:ay|ays)?|h(?:r|rs|our|ours)?|m(?:in|ins|inute|inutes)?|s(?:ec|ecs|econd|econds)?)/gi;
58
- const MAX_SINGLE_MATCH_MS = 7 * 24 * 3600 * 1e3;
59
- let totalMs = 0;
60
- let matched = false;
61
- let m;
62
- while ((m = re.exec(sanitized)) !== null) {
63
- const ms = unitMs(Number(m[1]), m[2]);
64
- if (!Number.isFinite(ms) || ms > MAX_SINGLE_MATCH_MS) continue;
65
- totalMs += ms;
66
- matched = true;
67
- }
68
- return matched ? totalMs : void 0;
69
- }
70
- var DEFAULT_QUOTA_BREAKER_MS = 6 * 3600 * 1e3;
71
- var DEFAULT_AGENT_NOT_FOUND_BREAKER_MS = 15 * 60 * 1e3;
72
-
73
- // packages/ai/agent/agentAvailabilityShared.ts
74
- var DEFAULT_PROVIDER_RETRY_MS = 5 * 60 * 1e3;
75
- var MAX_COOLDOWN_MS = 24 * 60 * 60 * 1e3;
76
- function clampCooldownDeadline(at, now) {
77
- const min = now;
78
- const max = now + MAX_COOLDOWN_MS;
79
- return Math.min(Math.max(at, min), max);
80
- }
81
- function shouldClearCooldownFromQuota(entry, quota, now) {
82
- if (!(typeof entry.nextAvailableAt === "number" && entry.nextAvailableAt > now)) return false;
83
- if (typeof entry.markedAt !== "number" || !Number.isFinite(entry.markedAt)) return false;
84
- if (!quota || !(quota.observedAt > entry.markedAt)) return false;
85
- const subscriptionWindows = quota.windows.filter((window) => window.scope === "5h" || window.scope === "7d");
86
- if (subscriptionWindows.length === 0) return false;
87
- if (quota.windows.some((window) => window.scope !== "5h" && window.scope !== "7d" && (window.remaining === 0 || typeof window.utilization === "number" && window.utilization >= 0.95))) return false;
88
- return subscriptionWindows.every((window) => {
89
- const hasUtilization = typeof window.utilization === "number";
90
- const hasRemaining = typeof window.remaining === "number";
91
- if (!hasUtilization && !hasRemaining) return false;
92
- return (!hasUtilization || window.utilization < 0.95) && (!hasRemaining || window.remaining > 0);
93
- });
94
- }
95
- function isAgentUnavailableNow(agent, now = Date.now()) {
96
- const at = agent?.nextAvailableAt;
97
- return typeof at === "number" && Number.isFinite(at) && at > now;
98
- }
99
- function readRetryAfterTimestamp(body, now) {
100
- if (!body || typeof body !== "object") return void 0;
101
- const root = body;
102
- const raw = root.retryAfter ?? root.retry_after ?? root["Retry-After"];
103
- if (typeof raw === "number" && Number.isFinite(raw)) {
104
- return raw > 1e12 ? raw : now + Math.max(0, raw) * 1e3;
105
- }
106
- if (typeof raw === "string") {
107
- const seconds = Number(raw.trim());
108
- if (Number.isFinite(seconds)) return now + Math.max(0, seconds) * 1e3;
109
- const date = Date.parse(raw);
110
- if (Number.isFinite(date)) return date;
111
- }
112
- return void 0;
113
- }
114
- function readResetTimestamp(body, now) {
115
- if (!body || typeof body !== "object") return void 0;
116
- const root = body;
117
- const error = root.error && typeof root.error === "object" ? root.error : root;
118
- if (Array.isArray(error.details)) {
119
- for (const item of error.details) {
120
- if (!item || typeof item !== "object") continue;
121
- const retryDelay = item.retryDelay;
122
- if (typeof retryDelay === "string") {
123
- const ms = parseResetsInMs(retryDelay);
124
- if (typeof ms === "number" && Number.isFinite(ms)) return now + ms;
125
- }
126
- }
127
- }
128
- const details = !Array.isArray(error.details) && error.details && typeof error.details === "object" ? error.details : void 0;
129
- const raw = error.resets_at ?? error.resetsAt ?? details?.resets_at ?? details?.resetsAt;
130
- if (typeof raw === "number" && Number.isFinite(raw)) {
131
- return raw > 1e12 ? raw : raw * 1e3;
132
- }
133
- if (typeof raw === "string") {
134
- const parsed = Date.parse(raw);
135
- if (Number.isFinite(parsed)) return parsed;
136
- }
137
- return void 0;
138
- }
139
- function parseResetAtText(value, now) {
140
- const m = value.match(
141
- /resets?\s+at\s+(\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}(?::\d{2})?(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?)?)/i
142
- );
143
- if (!m?.[1]) return void 0;
144
- const parsed = Date.parse(m[1]);
145
- return Number.isFinite(parsed) && parsed > now ? parsed : void 0;
146
- }
147
- function matchesPeriodicUsageLimitText(text) {
148
- return /(?:weekly|monthly)\s*(?:\([^)]*\)\s*)?usage\s+limit/i.test(text);
149
- }
150
- function isQuotaLimited403Body(body) {
151
- const text = typeof body === "string" ? body : JSON.stringify(body ?? "");
152
- return matchesPeriodicUsageLimitText(text) || /access_terminated_error/i.test(text) || /(?:quota|usage)\s+(?:is\s+)?(?:exhausted|depleted|used\s+up|reached)/i.test(text) || /(?:quota|usage).{0,40}\b(?:reset|resets)\s+at\b/i.test(text);
153
- }
154
- function resolveNextAvailableAt(body, now, headers) {
155
- const headerRetryAfter = headers && typeof headers.get === "function" ? headers.get("retry-after") : headers?.["retry-after"] ?? headers?.["Retry-After"];
156
- const retryAfter = headerRetryAfter ? readRetryAfterTimestamp({ retryAfter: headerRetryAfter }, now) : readRetryAfterTimestamp(body, now);
157
- if (retryAfter !== void 0 && retryAfter > now) {
158
- return clampCooldownDeadline(retryAfter, now);
159
- }
160
- const absolute = readResetTimestamp(body, now);
161
- if (absolute !== void 0 && absolute > now) {
162
- return clampCooldownDeadline(absolute, now);
163
- }
164
- const text = typeof body === "string" ? body : JSON.stringify(body ?? "");
165
- const absoluteFromText = parseResetAtText(text, now);
166
- const parsed = absoluteFromText ?? (matchesPeriodicUsageLimitText(text) ? now + MAX_COOLDOWN_MS : now + (parseResetsInMs(text) ?? DEFAULT_PROVIDER_RETRY_MS));
167
- return clampCooldownDeadline(parsed, now);
168
- }
169
- function resolveAvailabilityAction(status, body, now, headers) {
170
- if (status === 403 && isQuotaLimited403Body(body)) {
171
- return { kind: "mark", nextAvailableAt: resolveNextAvailableAt(body, now, headers) };
172
- }
173
- if (status >= 200 && status < 300) return { kind: "clear" };
174
- if (status === 429) {
175
- return { kind: "mark", nextAvailableAt: resolveNextAvailableAt(body, now, headers) };
176
- }
177
- if (status >= 500) {
178
- return { kind: "mark", nextAvailableAt: now + DEFAULT_PROVIDER_RETRY_MS };
179
- }
180
- return { kind: "noop" };
181
- }
182
- function mergeAvailabilityDeadline(currentDeadline, nextAvailableAt) {
183
- return typeof currentDeadline === "number" && Number.isFinite(currentDeadline) ? Math.max(currentDeadline, nextAvailableAt) : nextAvailableAt;
184
- }
185
- var PROBE_INTERVAL_MS = 10 * 60 * 1e3;
186
- function resolveCooldownGate(input, now) {
187
- const nextAvailableAt = input.nextAvailableAt;
188
- if (typeof nextAvailableAt !== "number" || !Number.isFinite(nextAvailableAt) || nextAvailableAt <= now) {
189
- return "open";
190
- }
191
- const lastProbeAt = input.lastProbeAt;
192
- if (typeof lastProbeAt !== "number" || !Number.isFinite(lastProbeAt)) {
193
- return "probe";
194
- }
195
- return now - lastProbeAt >= PROBE_INTERVAL_MS ? "probe" : "blocked";
196
- }
197
- function resolveCredentialKey(agent) {
198
- if (!agent || typeof agent !== "object") return void 0;
199
- for (const field of ["apiKeyRef", "credentialRef"]) {
200
- const value = agent[field];
201
- if (typeof value === "string") {
202
- const trimmed = value.trim();
203
- if (trimmed) return trimmed;
204
- }
205
- }
206
- return void 0;
207
- }
208
- function resolveCredentialKeyWithFallback(agent) {
209
- const byRef = resolveCredentialKey(agent);
210
- if (byRef) return byRef;
211
- if (!agent || typeof agent !== "object") return void 0;
212
- const endpoint = agent.customProviderUrl;
213
- if (typeof endpoint === "string") {
214
- const trimmed = endpoint.trim();
215
- if (trimmed) {
216
- try {
217
- const origin = new URL(trimmed).origin;
218
- if (origin && origin !== "null") return `custom-endpoint:${origin}`;
219
- } catch {
220
- }
221
- }
222
- }
223
- const key = agent.key;
224
- if (typeof key === "string" && key.trim()) return `custom-agent:${key.trim()}`;
225
- return void 0;
226
- }
227
-
228
- export {
229
- QUOTA_ERROR_PATTERNS,
230
- isQuotaExhaustedError,
231
- shouldClearCooldownFromQuota,
232
- isAgentUnavailableNow,
233
- isQuotaLimited403Body,
234
- resolveAvailabilityAction,
235
- mergeAvailabilityDeadline,
236
- PROBE_INTERVAL_MS,
237
- resolveCooldownGate,
238
- resolveCredentialKeyWithFallback
239
- };