agent-dealer 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/server/dist/db/index.js +5 -0
- package/bundle/server/dist/db/schema.sql +2 -0
- package/bundle/server/dist/repository/agents.js +14 -5
- package/bundle/server/dist/repository/runs.js +30 -1
- package/bundle/server/dist/routes/index.js +18 -1
- package/bundle/server/dist/runners/claude.js +4 -10
- package/bundle/server/package.json +1 -1
- package/bundle/server/static-ui/assets/{index-Blmq-P5I.css → index-ChdPKYDd.css} +1 -1
- package/bundle/server/static-ui/assets/index-hIzZ8TM8.js +77 -0
- package/bundle/server/static-ui/index.html +2 -2
- package/bundle/shared/dist/agents.d.ts +100 -0
- package/bundle/shared/dist/agents.js +9 -0
- package/bundle/shared/dist/budget.d.ts +92 -0
- package/bundle/shared/dist/budget.js +108 -0
- package/bundle/shared/dist/index.d.ts +255 -0
- package/bundle/shared/dist/index.js +8 -0
- package/bundle/shared/package.json +1 -1
- package/dist/bin.js +0 -0
- package/dist/doctor.js +15 -6
- package/dist/env.d.ts +11 -0
- package/dist/env.js +39 -0
- package/dist/start.js +13 -2
- package/package.json +1 -1
- package/templates/prod.env.example +8 -7
- package/bundle/server/static-ui/assets/index-BPfTEO0-.js +0 -77
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
|
9
9
|
<meta name="theme-color" content="#0a0e14" />
|
|
10
10
|
<link rel="preload" href="/fonts/Monaco.ttf" as="font" type="font/ttf" crossorigin />
|
|
11
|
-
<script type="module" crossorigin src="/assets/index-
|
|
12
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
11
|
+
<script type="module" crossorigin src="/assets/index-hIzZ8TM8.js"></script>
|
|
12
|
+
<link rel="stylesheet" crossorigin href="/assets/index-ChdPKYDd.css">
|
|
13
13
|
</head>
|
|
14
14
|
<body>
|
|
15
15
|
<div id="root"></div>
|
|
@@ -29,6 +29,10 @@ export declare const AgentProfile: z.ZodObject<{
|
|
|
29
29
|
defaultPlanModel: z.ZodNullable<z.ZodString>;
|
|
30
30
|
/** CLI model id for execution; null = runtime default */
|
|
31
31
|
defaultExecuteModel: z.ZodNullable<z.ZodString>;
|
|
32
|
+
/** Serialized PhaseBudget; null = runtime default (no CLI caps) */
|
|
33
|
+
defaultPlanBudgetJson: z.ZodNullable<z.ZodString>;
|
|
34
|
+
/** Serialized PhaseBudget; null = runtime default (no CLI caps) */
|
|
35
|
+
defaultExecuteBudgetJson: z.ZodNullable<z.ZodString>;
|
|
32
36
|
isBuiltin: z.ZodBoolean;
|
|
33
37
|
createdAt: z.ZodString;
|
|
34
38
|
updatedAt: z.ZodString;
|
|
@@ -42,6 +46,8 @@ export declare const AgentProfile: z.ZodObject<{
|
|
|
42
46
|
playbookId: string | null;
|
|
43
47
|
defaultPlanModel: string | null;
|
|
44
48
|
defaultExecuteModel: string | null;
|
|
49
|
+
defaultPlanBudgetJson: string | null;
|
|
50
|
+
defaultExecuteBudgetJson: string | null;
|
|
45
51
|
isBuiltin: boolean;
|
|
46
52
|
createdAt: string;
|
|
47
53
|
updatedAt: string;
|
|
@@ -55,6 +61,8 @@ export declare const AgentProfile: z.ZodObject<{
|
|
|
55
61
|
playbookId: string | null;
|
|
56
62
|
defaultPlanModel: string | null;
|
|
57
63
|
defaultExecuteModel: string | null;
|
|
64
|
+
defaultPlanBudgetJson: string | null;
|
|
65
|
+
defaultExecuteBudgetJson: string | null;
|
|
58
66
|
isBuiltin: boolean;
|
|
59
67
|
createdAt: string;
|
|
60
68
|
updatedAt: string;
|
|
@@ -72,6 +80,10 @@ export declare const AgentWithHealth: z.ZodObject<{
|
|
|
72
80
|
defaultPlanModel: z.ZodNullable<z.ZodString>;
|
|
73
81
|
/** CLI model id for execution; null = runtime default */
|
|
74
82
|
defaultExecuteModel: z.ZodNullable<z.ZodString>;
|
|
83
|
+
/** Serialized PhaseBudget; null = runtime default (no CLI caps) */
|
|
84
|
+
defaultPlanBudgetJson: z.ZodNullable<z.ZodString>;
|
|
85
|
+
/** Serialized PhaseBudget; null = runtime default (no CLI caps) */
|
|
86
|
+
defaultExecuteBudgetJson: z.ZodNullable<z.ZodString>;
|
|
75
87
|
isBuiltin: z.ZodBoolean;
|
|
76
88
|
createdAt: z.ZodString;
|
|
77
89
|
updatedAt: z.ZodString;
|
|
@@ -101,6 +113,8 @@ export declare const AgentWithHealth: z.ZodObject<{
|
|
|
101
113
|
playbookId: string | null;
|
|
102
114
|
defaultPlanModel: string | null;
|
|
103
115
|
defaultExecuteModel: string | null;
|
|
116
|
+
defaultPlanBudgetJson: string | null;
|
|
117
|
+
defaultExecuteBudgetJson: string | null;
|
|
104
118
|
isBuiltin: boolean;
|
|
105
119
|
createdAt: string;
|
|
106
120
|
updatedAt: string;
|
|
@@ -119,6 +133,8 @@ export declare const AgentWithHealth: z.ZodObject<{
|
|
|
119
133
|
playbookId: string | null;
|
|
120
134
|
defaultPlanModel: string | null;
|
|
121
135
|
defaultExecuteModel: string | null;
|
|
136
|
+
defaultPlanBudgetJson: string | null;
|
|
137
|
+
defaultExecuteBudgetJson: string | null;
|
|
122
138
|
isBuiltin: boolean;
|
|
123
139
|
createdAt: string;
|
|
124
140
|
updatedAt: string;
|
|
@@ -133,6 +149,26 @@ export declare const CreateAgentInput: z.ZodObject<{
|
|
|
133
149
|
playbookId: z.ZodOptional<z.ZodString>;
|
|
134
150
|
defaultPlanModel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
135
151
|
defaultExecuteModel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
152
|
+
defaultPlanBudget: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
153
|
+
maxTurns: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
154
|
+
maxBudgetUsd: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
155
|
+
}, "strip", z.ZodTypeAny, {
|
|
156
|
+
maxTurns?: number | null | undefined;
|
|
157
|
+
maxBudgetUsd?: number | null | undefined;
|
|
158
|
+
}, {
|
|
159
|
+
maxTurns?: number | null | undefined;
|
|
160
|
+
maxBudgetUsd?: number | null | undefined;
|
|
161
|
+
}>>>;
|
|
162
|
+
defaultExecuteBudget: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
163
|
+
maxTurns: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
164
|
+
maxBudgetUsd: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
165
|
+
}, "strip", z.ZodTypeAny, {
|
|
166
|
+
maxTurns?: number | null | undefined;
|
|
167
|
+
maxBudgetUsd?: number | null | undefined;
|
|
168
|
+
}, {
|
|
169
|
+
maxTurns?: number | null | undefined;
|
|
170
|
+
maxBudgetUsd?: number | null | undefined;
|
|
171
|
+
}>>>;
|
|
136
172
|
}, "strip", z.ZodTypeAny, {
|
|
137
173
|
name: string;
|
|
138
174
|
runtime: "claude_code" | "cursor_local";
|
|
@@ -141,6 +177,14 @@ export declare const CreateAgentInput: z.ZodObject<{
|
|
|
141
177
|
playbookId?: string | undefined;
|
|
142
178
|
defaultPlanModel?: string | null | undefined;
|
|
143
179
|
defaultExecuteModel?: string | null | undefined;
|
|
180
|
+
defaultPlanBudget?: {
|
|
181
|
+
maxTurns?: number | null | undefined;
|
|
182
|
+
maxBudgetUsd?: number | null | undefined;
|
|
183
|
+
} | null | undefined;
|
|
184
|
+
defaultExecuteBudget?: {
|
|
185
|
+
maxTurns?: number | null | undefined;
|
|
186
|
+
maxBudgetUsd?: number | null | undefined;
|
|
187
|
+
} | null | undefined;
|
|
144
188
|
}, {
|
|
145
189
|
name: string;
|
|
146
190
|
runtime: "claude_code" | "cursor_local";
|
|
@@ -149,6 +193,14 @@ export declare const CreateAgentInput: z.ZodObject<{
|
|
|
149
193
|
playbookId?: string | undefined;
|
|
150
194
|
defaultPlanModel?: string | null | undefined;
|
|
151
195
|
defaultExecuteModel?: string | null | undefined;
|
|
196
|
+
defaultPlanBudget?: {
|
|
197
|
+
maxTurns?: number | null | undefined;
|
|
198
|
+
maxBudgetUsd?: number | null | undefined;
|
|
199
|
+
} | null | undefined;
|
|
200
|
+
defaultExecuteBudget?: {
|
|
201
|
+
maxTurns?: number | null | undefined;
|
|
202
|
+
maxBudgetUsd?: number | null | undefined;
|
|
203
|
+
} | null | undefined;
|
|
152
204
|
}>;
|
|
153
205
|
export type CreateAgentInput = z.infer<typeof CreateAgentInput>;
|
|
154
206
|
export declare const UpdateAgentInput: z.ZodObject<{
|
|
@@ -159,6 +211,26 @@ export declare const UpdateAgentInput: z.ZodObject<{
|
|
|
159
211
|
playbookId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
160
212
|
defaultPlanModel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
161
213
|
defaultExecuteModel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
214
|
+
defaultPlanBudget: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
215
|
+
maxTurns: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
216
|
+
maxBudgetUsd: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
217
|
+
}, "strip", z.ZodTypeAny, {
|
|
218
|
+
maxTurns?: number | null | undefined;
|
|
219
|
+
maxBudgetUsd?: number | null | undefined;
|
|
220
|
+
}, {
|
|
221
|
+
maxTurns?: number | null | undefined;
|
|
222
|
+
maxBudgetUsd?: number | null | undefined;
|
|
223
|
+
}>>>;
|
|
224
|
+
defaultExecuteBudget: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
225
|
+
maxTurns: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
226
|
+
maxBudgetUsd: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
227
|
+
}, "strip", z.ZodTypeAny, {
|
|
228
|
+
maxTurns?: number | null | undefined;
|
|
229
|
+
maxBudgetUsd?: number | null | undefined;
|
|
230
|
+
}, {
|
|
231
|
+
maxTurns?: number | null | undefined;
|
|
232
|
+
maxBudgetUsd?: number | null | undefined;
|
|
233
|
+
}>>>;
|
|
162
234
|
}, "strip", z.ZodTypeAny, {
|
|
163
235
|
name?: string | undefined;
|
|
164
236
|
runtime?: "claude_code" | "cursor_local" | undefined;
|
|
@@ -167,6 +239,14 @@ export declare const UpdateAgentInput: z.ZodObject<{
|
|
|
167
239
|
playbookId?: string | null | undefined;
|
|
168
240
|
defaultPlanModel?: string | null | undefined;
|
|
169
241
|
defaultExecuteModel?: string | null | undefined;
|
|
242
|
+
defaultPlanBudget?: {
|
|
243
|
+
maxTurns?: number | null | undefined;
|
|
244
|
+
maxBudgetUsd?: number | null | undefined;
|
|
245
|
+
} | null | undefined;
|
|
246
|
+
defaultExecuteBudget?: {
|
|
247
|
+
maxTurns?: number | null | undefined;
|
|
248
|
+
maxBudgetUsd?: number | null | undefined;
|
|
249
|
+
} | null | undefined;
|
|
170
250
|
}, {
|
|
171
251
|
name?: string | undefined;
|
|
172
252
|
runtime?: "claude_code" | "cursor_local" | undefined;
|
|
@@ -175,6 +255,14 @@ export declare const UpdateAgentInput: z.ZodObject<{
|
|
|
175
255
|
playbookId?: string | null | undefined;
|
|
176
256
|
defaultPlanModel?: string | null | undefined;
|
|
177
257
|
defaultExecuteModel?: string | null | undefined;
|
|
258
|
+
defaultPlanBudget?: {
|
|
259
|
+
maxTurns?: number | null | undefined;
|
|
260
|
+
maxBudgetUsd?: number | null | undefined;
|
|
261
|
+
} | null | undefined;
|
|
262
|
+
defaultExecuteBudget?: {
|
|
263
|
+
maxTurns?: number | null | undefined;
|
|
264
|
+
maxBudgetUsd?: number | null | undefined;
|
|
265
|
+
} | null | undefined;
|
|
178
266
|
}>;
|
|
179
267
|
export type UpdateAgentInput = z.infer<typeof UpdateAgentInput>;
|
|
180
268
|
export declare const AgentsSnapshot: z.ZodObject<{
|
|
@@ -190,6 +278,10 @@ export declare const AgentsSnapshot: z.ZodObject<{
|
|
|
190
278
|
defaultPlanModel: z.ZodNullable<z.ZodString>;
|
|
191
279
|
/** CLI model id for execution; null = runtime default */
|
|
192
280
|
defaultExecuteModel: z.ZodNullable<z.ZodString>;
|
|
281
|
+
/** Serialized PhaseBudget; null = runtime default (no CLI caps) */
|
|
282
|
+
defaultPlanBudgetJson: z.ZodNullable<z.ZodString>;
|
|
283
|
+
/** Serialized PhaseBudget; null = runtime default (no CLI caps) */
|
|
284
|
+
defaultExecuteBudgetJson: z.ZodNullable<z.ZodString>;
|
|
193
285
|
isBuiltin: z.ZodBoolean;
|
|
194
286
|
createdAt: z.ZodString;
|
|
195
287
|
updatedAt: z.ZodString;
|
|
@@ -219,6 +311,8 @@ export declare const AgentsSnapshot: z.ZodObject<{
|
|
|
219
311
|
playbookId: string | null;
|
|
220
312
|
defaultPlanModel: string | null;
|
|
221
313
|
defaultExecuteModel: string | null;
|
|
314
|
+
defaultPlanBudgetJson: string | null;
|
|
315
|
+
defaultExecuteBudgetJson: string | null;
|
|
222
316
|
isBuiltin: boolean;
|
|
223
317
|
createdAt: string;
|
|
224
318
|
updatedAt: string;
|
|
@@ -237,6 +331,8 @@ export declare const AgentsSnapshot: z.ZodObject<{
|
|
|
237
331
|
playbookId: string | null;
|
|
238
332
|
defaultPlanModel: string | null;
|
|
239
333
|
defaultExecuteModel: string | null;
|
|
334
|
+
defaultPlanBudgetJson: string | null;
|
|
335
|
+
defaultExecuteBudgetJson: string | null;
|
|
240
336
|
isBuiltin: boolean;
|
|
241
337
|
createdAt: string;
|
|
242
338
|
updatedAt: string;
|
|
@@ -258,6 +354,8 @@ export declare const AgentsSnapshot: z.ZodObject<{
|
|
|
258
354
|
playbookId: string | null;
|
|
259
355
|
defaultPlanModel: string | null;
|
|
260
356
|
defaultExecuteModel: string | null;
|
|
357
|
+
defaultPlanBudgetJson: string | null;
|
|
358
|
+
defaultExecuteBudgetJson: string | null;
|
|
261
359
|
isBuiltin: boolean;
|
|
262
360
|
createdAt: string;
|
|
263
361
|
updatedAt: string;
|
|
@@ -279,6 +377,8 @@ export declare const AgentsSnapshot: z.ZodObject<{
|
|
|
279
377
|
playbookId: string | null;
|
|
280
378
|
defaultPlanModel: string | null;
|
|
281
379
|
defaultExecuteModel: string | null;
|
|
380
|
+
defaultPlanBudgetJson: string | null;
|
|
381
|
+
defaultExecuteBudgetJson: string | null;
|
|
282
382
|
isBuiltin: boolean;
|
|
283
383
|
createdAt: string;
|
|
284
384
|
updatedAt: string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { PhaseBudget } from "./budget.js";
|
|
2
3
|
import { Runtime } from "./runtime.js";
|
|
3
4
|
/** Built-in agent IDs — stable across installs. */
|
|
4
5
|
export const BUILTIN_AGENT_CLAUDE_ID = "00000000-0000-4000-a000-000000000001";
|
|
@@ -23,6 +24,10 @@ export const AgentProfile = z.object({
|
|
|
23
24
|
defaultPlanModel: z.string().nullable(),
|
|
24
25
|
/** CLI model id for execution; null = runtime default */
|
|
25
26
|
defaultExecuteModel: z.string().nullable(),
|
|
27
|
+
/** Serialized PhaseBudget; null = runtime default (no CLI caps) */
|
|
28
|
+
defaultPlanBudgetJson: z.string().nullable(),
|
|
29
|
+
/** Serialized PhaseBudget; null = runtime default (no CLI caps) */
|
|
30
|
+
defaultExecuteBudgetJson: z.string().nullable(),
|
|
26
31
|
isBuiltin: z.boolean(),
|
|
27
32
|
createdAt: z.string(),
|
|
28
33
|
updatedAt: z.string(),
|
|
@@ -39,6 +44,8 @@ export const CreateAgentInput = z.object({
|
|
|
39
44
|
playbookId: z.string().optional(),
|
|
40
45
|
defaultPlanModel: z.string().nullable().optional(),
|
|
41
46
|
defaultExecuteModel: z.string().nullable().optional(),
|
|
47
|
+
defaultPlanBudget: PhaseBudget.nullable().optional(),
|
|
48
|
+
defaultExecuteBudget: PhaseBudget.nullable().optional(),
|
|
42
49
|
});
|
|
43
50
|
export const UpdateAgentInput = z.object({
|
|
44
51
|
name: z.string().min(1).optional(),
|
|
@@ -48,6 +55,8 @@ export const UpdateAgentInput = z.object({
|
|
|
48
55
|
playbookId: z.string().nullable().optional(),
|
|
49
56
|
defaultPlanModel: z.string().nullable().optional(),
|
|
50
57
|
defaultExecuteModel: z.string().nullable().optional(),
|
|
58
|
+
defaultPlanBudget: PhaseBudget.nullable().optional(),
|
|
59
|
+
defaultExecuteBudget: PhaseBudget.nullable().optional(),
|
|
51
60
|
});
|
|
52
61
|
export const AgentsSnapshot = z.object({
|
|
53
62
|
agents: z.array(AgentWithHealth),
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Per-phase CLI caps. null field = omit flag (runtime default). */
|
|
3
|
+
export declare const PhaseBudget: z.ZodObject<{
|
|
4
|
+
maxTurns: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
5
|
+
maxBudgetUsd: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
maxTurns?: number | null | undefined;
|
|
8
|
+
maxBudgetUsd?: number | null | undefined;
|
|
9
|
+
}, {
|
|
10
|
+
maxTurns?: number | null | undefined;
|
|
11
|
+
maxBudgetUsd?: number | null | undefined;
|
|
12
|
+
}>;
|
|
13
|
+
export type PhaseBudget = z.infer<typeof PhaseBudget>;
|
|
14
|
+
export declare const RunBudget: z.ZodObject<{
|
|
15
|
+
plan: z.ZodOptional<z.ZodObject<{
|
|
16
|
+
maxTurns: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
17
|
+
maxBudgetUsd: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
maxTurns?: number | null | undefined;
|
|
20
|
+
maxBudgetUsd?: number | null | undefined;
|
|
21
|
+
}, {
|
|
22
|
+
maxTurns?: number | null | undefined;
|
|
23
|
+
maxBudgetUsd?: number | null | undefined;
|
|
24
|
+
}>>;
|
|
25
|
+
execute: z.ZodOptional<z.ZodObject<{
|
|
26
|
+
maxTurns: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
27
|
+
maxBudgetUsd: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
28
|
+
}, "strip", z.ZodTypeAny, {
|
|
29
|
+
maxTurns?: number | null | undefined;
|
|
30
|
+
maxBudgetUsd?: number | null | undefined;
|
|
31
|
+
}, {
|
|
32
|
+
maxTurns?: number | null | undefined;
|
|
33
|
+
maxBudgetUsd?: number | null | undefined;
|
|
34
|
+
}>>;
|
|
35
|
+
reflect: z.ZodOptional<z.ZodObject<{
|
|
36
|
+
maxTurns: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
37
|
+
maxBudgetUsd: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
38
|
+
}, "strip", z.ZodTypeAny, {
|
|
39
|
+
maxTurns?: number | null | undefined;
|
|
40
|
+
maxBudgetUsd?: number | null | undefined;
|
|
41
|
+
}, {
|
|
42
|
+
maxTurns?: number | null | undefined;
|
|
43
|
+
maxBudgetUsd?: number | null | undefined;
|
|
44
|
+
}>>;
|
|
45
|
+
}, "strip", z.ZodTypeAny, {
|
|
46
|
+
plan?: {
|
|
47
|
+
maxTurns?: number | null | undefined;
|
|
48
|
+
maxBudgetUsd?: number | null | undefined;
|
|
49
|
+
} | undefined;
|
|
50
|
+
execute?: {
|
|
51
|
+
maxTurns?: number | null | undefined;
|
|
52
|
+
maxBudgetUsd?: number | null | undefined;
|
|
53
|
+
} | undefined;
|
|
54
|
+
reflect?: {
|
|
55
|
+
maxTurns?: number | null | undefined;
|
|
56
|
+
maxBudgetUsd?: number | null | undefined;
|
|
57
|
+
} | undefined;
|
|
58
|
+
}, {
|
|
59
|
+
plan?: {
|
|
60
|
+
maxTurns?: number | null | undefined;
|
|
61
|
+
maxBudgetUsd?: number | null | undefined;
|
|
62
|
+
} | undefined;
|
|
63
|
+
execute?: {
|
|
64
|
+
maxTurns?: number | null | undefined;
|
|
65
|
+
maxBudgetUsd?: number | null | undefined;
|
|
66
|
+
} | undefined;
|
|
67
|
+
reflect?: {
|
|
68
|
+
maxTurns?: number | null | undefined;
|
|
69
|
+
maxBudgetUsd?: number | null | undefined;
|
|
70
|
+
} | undefined;
|
|
71
|
+
}>;
|
|
72
|
+
export type RunBudget = z.infer<typeof RunBudget>;
|
|
73
|
+
export type BudgetPhase = "plan" | "execute" | "reflect";
|
|
74
|
+
export type ResolvedPhaseBudget = {
|
|
75
|
+
maxTurns?: number;
|
|
76
|
+
maxBudgetUsd?: number;
|
|
77
|
+
};
|
|
78
|
+
/** Tight caps for flow:verify and other automated gates. */
|
|
79
|
+
export declare const TEST_PHASE_BUDGET: Record<BudgetPhase, Required<PhaseBudget>>;
|
|
80
|
+
export declare function parsePhaseBudget(json: string | null | undefined): PhaseBudget | null;
|
|
81
|
+
export declare function parseRunBudget(json: string | null | undefined): RunBudget;
|
|
82
|
+
export declare function serializePhaseBudget(budget: PhaseBudget | null | undefined): string | null;
|
|
83
|
+
export declare function serializeRunBudget(budget: RunBudget): string | null;
|
|
84
|
+
export declare function mergeRunBudget(existing: RunBudget, patch: Partial<RunBudget>): RunBudget;
|
|
85
|
+
export declare function resolvePhaseBudget(opts: {
|
|
86
|
+
phase: BudgetPhase;
|
|
87
|
+
runBudget: RunBudget;
|
|
88
|
+
agentPlanBudget?: PhaseBudget | null;
|
|
89
|
+
agentExecuteBudget?: PhaseBudget | null;
|
|
90
|
+
testMode?: boolean;
|
|
91
|
+
}): ResolvedPhaseBudget | null;
|
|
92
|
+
export declare function budgetCliArgs(budget: ResolvedPhaseBudget | null): string[];
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Per-phase CLI caps. null field = omit flag (runtime default). */
|
|
3
|
+
export const PhaseBudget = z.object({
|
|
4
|
+
maxTurns: z.number().positive().nullable().optional(),
|
|
5
|
+
maxBudgetUsd: z.number().positive().nullable().optional(),
|
|
6
|
+
});
|
|
7
|
+
export const RunBudget = z.object({
|
|
8
|
+
plan: PhaseBudget.optional(),
|
|
9
|
+
execute: PhaseBudget.optional(),
|
|
10
|
+
reflect: PhaseBudget.optional(),
|
|
11
|
+
});
|
|
12
|
+
/** Tight caps for flow:verify and other automated gates. */
|
|
13
|
+
export const TEST_PHASE_BUDGET = {
|
|
14
|
+
plan: { maxTurns: 5, maxBudgetUsd: 0.5 },
|
|
15
|
+
execute: { maxTurns: 30, maxBudgetUsd: 5 },
|
|
16
|
+
reflect: { maxTurns: 3, maxBudgetUsd: 0.25 },
|
|
17
|
+
};
|
|
18
|
+
export function parsePhaseBudget(json) {
|
|
19
|
+
if (!json?.trim())
|
|
20
|
+
return null;
|
|
21
|
+
try {
|
|
22
|
+
const parsed = PhaseBudget.parse(JSON.parse(json));
|
|
23
|
+
if (parsed.maxTurns == null && parsed.maxBudgetUsd == null)
|
|
24
|
+
return null;
|
|
25
|
+
return parsed;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export function parseRunBudget(json) {
|
|
32
|
+
if (!json?.trim())
|
|
33
|
+
return {};
|
|
34
|
+
try {
|
|
35
|
+
const raw = JSON.parse(json);
|
|
36
|
+
if (raw &&
|
|
37
|
+
typeof raw === "object" &&
|
|
38
|
+
!("plan" in raw) &&
|
|
39
|
+
!("execute" in raw) &&
|
|
40
|
+
!("reflect" in raw) &&
|
|
41
|
+
("maxTurns" in raw || "maxBudgetUsd" in raw)) {
|
|
42
|
+
return {
|
|
43
|
+
execute: PhaseBudget.parse({
|
|
44
|
+
maxTurns: raw.maxTurns ?? null,
|
|
45
|
+
maxBudgetUsd: raw.maxBudgetUsd ?? null,
|
|
46
|
+
}),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return RunBudget.parse(raw);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return {};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export function serializePhaseBudget(budget) {
|
|
56
|
+
if (!budget)
|
|
57
|
+
return null;
|
|
58
|
+
if (budget.maxTurns == null && budget.maxBudgetUsd == null)
|
|
59
|
+
return null;
|
|
60
|
+
return JSON.stringify(budget);
|
|
61
|
+
}
|
|
62
|
+
export function serializeRunBudget(budget) {
|
|
63
|
+
if (!budget.plan && !budget.execute && !budget.reflect)
|
|
64
|
+
return null;
|
|
65
|
+
return JSON.stringify(budget);
|
|
66
|
+
}
|
|
67
|
+
export function mergeRunBudget(existing, patch) {
|
|
68
|
+
return {
|
|
69
|
+
plan: patch.plan !== undefined ? patch.plan : existing.plan,
|
|
70
|
+
execute: patch.execute !== undefined ? patch.execute : existing.execute,
|
|
71
|
+
reflect: patch.reflect !== undefined ? patch.reflect : existing.reflect,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export function resolvePhaseBudget(opts) {
|
|
75
|
+
if (opts.testMode) {
|
|
76
|
+
const test = TEST_PHASE_BUDGET[opts.phase];
|
|
77
|
+
return {
|
|
78
|
+
maxTurns: test.maxTurns ?? undefined,
|
|
79
|
+
maxBudgetUsd: test.maxBudgetUsd ?? undefined,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const runPhase = opts.runBudget[opts.phase];
|
|
83
|
+
const agentPhase = opts.phase === "plan"
|
|
84
|
+
? opts.agentPlanBudget
|
|
85
|
+
: opts.phase === "execute"
|
|
86
|
+
? opts.agentExecuteBudget
|
|
87
|
+
: null;
|
|
88
|
+
const maxTurns = runPhase?.maxTurns ?? agentPhase?.maxTurns ?? null;
|
|
89
|
+
const maxBudgetUsd = runPhase?.maxBudgetUsd ?? agentPhase?.maxBudgetUsd ?? null;
|
|
90
|
+
if (maxTurns == null && maxBudgetUsd == null)
|
|
91
|
+
return null;
|
|
92
|
+
const resolved = {};
|
|
93
|
+
if (maxTurns != null)
|
|
94
|
+
resolved.maxTurns = maxTurns;
|
|
95
|
+
if (maxBudgetUsd != null)
|
|
96
|
+
resolved.maxBudgetUsd = maxBudgetUsd;
|
|
97
|
+
return resolved;
|
|
98
|
+
}
|
|
99
|
+
export function budgetCliArgs(budget) {
|
|
100
|
+
if (!budget)
|
|
101
|
+
return [];
|
|
102
|
+
const args = [];
|
|
103
|
+
if (budget.maxTurns != null)
|
|
104
|
+
args.push("--max-turns", String(budget.maxTurns));
|
|
105
|
+
if (budget.maxBudgetUsd != null)
|
|
106
|
+
args.push("--max-budget-usd", String(budget.maxBudgetUsd));
|
|
107
|
+
return args;
|
|
108
|
+
}
|