issue-flow 0.9.0 → 0.10.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 (68) hide show
  1. package/dist/{analyze-VSWAEVN3.js → analyze-UZYJAWAP.js} +6 -6
  2. package/dist/{chunk-66ZGYXTH.js → chunk-2LNQL4XH.js} +7 -7
  3. package/dist/{chunk-X7XBF5TS.js → chunk-2Z7OEZZT.js} +6 -6
  4. package/dist/{chunk-VNKSMWDN.js → chunk-652DJBCN.js} +3 -3
  5. package/dist/{chunk-DP43WJY4.js → chunk-67ZO5ROQ.js} +5 -5
  6. package/dist/{chunk-TLSIK656.js → chunk-EWA3OGCM.js} +6 -6
  7. package/dist/{chunk-M72ZEPWD.js → chunk-EZMOEBLU.js} +2 -2
  8. package/dist/{chunk-JGKPSWOA.js → chunk-MXTGCD5C.js} +2 -2
  9. package/dist/{chunk-DTNM3LTO.js → chunk-PPLIXZI5.js} +2 -2
  10. package/dist/{chunk-KXAG24DD.js → chunk-S67Q4I2O.js} +3 -3
  11. package/dist/{chunk-TJMZWRS6.js → chunk-SP7DD4ID.js} +7 -7
  12. package/dist/{chunk-WHEU55ZP.js → chunk-UH4KAJBJ.js} +7 -7
  13. package/dist/{chunk-NB6WKTBL.js → chunk-UUY4PCWW.js} +2 -2
  14. package/dist/{chunk-57MH6RYJ.js → chunk-V5OHFSW4.js} +229 -181
  15. package/dist/chunk-V5OHFSW4.js.map +1 -0
  16. package/dist/{chunk-M37YZYDO.js → chunk-VOKNTBOO.js} +3 -3
  17. package/dist/{chunk-MTJQOOMG.js → chunk-VYFKOUUR.js} +119 -4
  18. package/dist/chunk-VYFKOUUR.js.map +1 -0
  19. package/dist/cli.js +22 -15
  20. package/dist/cli.js.map +1 -1
  21. package/dist/{config-J5DW6HSY.js → config-YCF3HIKR.js} +7 -3
  22. package/dist/execute-QYXA225W.js +14 -0
  23. package/dist/{generate-ERDPOTKX.js → generate-TW6QKSW5.js} +6 -6
  24. package/dist/init-G57UXKDG.js +9 -0
  25. package/dist/plan-YJLGBYBQ.js +16 -0
  26. package/dist/policy-NP4ZAVF6.js +1013 -0
  27. package/dist/policy-NP4ZAVF6.js.map +1 -0
  28. package/dist/pr-V5H65MRW.js +20 -0
  29. package/dist/pr-review-RCMXKXVP.js +16 -0
  30. package/dist/prd-3XR5KYJS.js +16 -0
  31. package/dist/review-ZZG3CSUO.js +14 -0
  32. package/dist/{run-BRBFHVUO.js → run-DIBC3YKX.js} +16 -16
  33. package/dist/{web-WQISLO66.js → web-O2FVOYZW.js} +4 -4
  34. package/package.json +1 -1
  35. package/dist/chunk-57MH6RYJ.js.map +0 -1
  36. package/dist/chunk-MTJQOOMG.js.map +0 -1
  37. package/dist/execute-Z2DKGVLR.js +0 -14
  38. package/dist/init-UY6ZCIFT.js +0 -9
  39. package/dist/plan-REMAMCX4.js +0 -16
  40. package/dist/pr-KERP52TI.js +0 -20
  41. package/dist/pr-review-IU4N3TEK.js +0 -16
  42. package/dist/prd-SHVQW6RM.js +0 -16
  43. package/dist/review-L5F77QAC.js +0 -14
  44. /package/dist/{analyze-VSWAEVN3.js.map → analyze-UZYJAWAP.js.map} +0 -0
  45. /package/dist/{chunk-66ZGYXTH.js.map → chunk-2LNQL4XH.js.map} +0 -0
  46. /package/dist/{chunk-X7XBF5TS.js.map → chunk-2Z7OEZZT.js.map} +0 -0
  47. /package/dist/{chunk-VNKSMWDN.js.map → chunk-652DJBCN.js.map} +0 -0
  48. /package/dist/{chunk-DP43WJY4.js.map → chunk-67ZO5ROQ.js.map} +0 -0
  49. /package/dist/{chunk-TLSIK656.js.map → chunk-EWA3OGCM.js.map} +0 -0
  50. /package/dist/{chunk-M72ZEPWD.js.map → chunk-EZMOEBLU.js.map} +0 -0
  51. /package/dist/{chunk-JGKPSWOA.js.map → chunk-MXTGCD5C.js.map} +0 -0
  52. /package/dist/{chunk-DTNM3LTO.js.map → chunk-PPLIXZI5.js.map} +0 -0
  53. /package/dist/{chunk-KXAG24DD.js.map → chunk-S67Q4I2O.js.map} +0 -0
  54. /package/dist/{chunk-TJMZWRS6.js.map → chunk-SP7DD4ID.js.map} +0 -0
  55. /package/dist/{chunk-WHEU55ZP.js.map → chunk-UH4KAJBJ.js.map} +0 -0
  56. /package/dist/{chunk-NB6WKTBL.js.map → chunk-UUY4PCWW.js.map} +0 -0
  57. /package/dist/{chunk-M37YZYDO.js.map → chunk-VOKNTBOO.js.map} +0 -0
  58. /package/dist/{config-J5DW6HSY.js.map → config-YCF3HIKR.js.map} +0 -0
  59. /package/dist/{execute-Z2DKGVLR.js.map → execute-QYXA225W.js.map} +0 -0
  60. /package/dist/{generate-ERDPOTKX.js.map → generate-TW6QKSW5.js.map} +0 -0
  61. /package/dist/{init-UY6ZCIFT.js.map → init-G57UXKDG.js.map} +0 -0
  62. /package/dist/{plan-REMAMCX4.js.map → plan-YJLGBYBQ.js.map} +0 -0
  63. /package/dist/{pr-KERP52TI.js.map → pr-V5H65MRW.js.map} +0 -0
  64. /package/dist/{pr-review-IU4N3TEK.js.map → pr-review-RCMXKXVP.js.map} +0 -0
  65. /package/dist/{prd-SHVQW6RM.js.map → prd-3XR5KYJS.js.map} +0 -0
  66. /package/dist/{review-L5F77QAC.js.map → review-ZZG3CSUO.js.map} +0 -0
  67. /package/dist/{run-BRBFHVUO.js.map → run-DIBC3YKX.js.map} +0 -0
  68. /package/dist/{web-WQISLO66.js.map → web-O2FVOYZW.js.map} +0 -0
@@ -1,16 +1,62 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- // src/schemas.ts
3
+ // src/policy/schemas.ts
4
4
  import { z } from "zod";
5
- var claudeUsageSchema = z.object({
6
- inputTokens: z.number().optional(),
7
- outputTokens: z.number().optional(),
8
- cacheReadTokens: z.number().optional(),
9
- cacheCreationTokens: z.number().optional(),
10
- costUsd: z.number().optional()
5
+ var policyDiscoveryConfigSchema = z.object({
6
+ issueTemplates: z.boolean().default(true),
7
+ pullRequestTemplate: z.boolean().default(true),
8
+ docs: z.boolean().default(true),
9
+ codeowners: z.boolean().default(true),
10
+ labels: z.boolean().default(true),
11
+ issueTypes: z.boolean().default(true)
12
+ });
13
+ var policyIssuesDeclarationSchema = z.object({
14
+ titleConvention: z.string().min(1).optional()
15
+ });
16
+ var policyPullRequestsDeclarationSchema = z.object({
17
+ baseBranch: z.string().min(1).optional(),
18
+ titleConvention: z.string().min(1).optional()
19
+ });
20
+ var policyGitDeclarationSchema = z.object({
21
+ branchConvention: z.string().min(1).optional(),
22
+ commitConvention: z.string().min(1).optional()
23
+ });
24
+ var policyConfigSchema = z.object({
25
+ enabled: z.boolean().default(true),
26
+ discovery: policyDiscoveryConfigSchema.prefault({}),
27
+ issues: policyIssuesDeclarationSchema.prefault({}),
28
+ pullRequests: policyPullRequestsDeclarationSchema.prefault({}),
29
+ git: policyGitDeclarationSchema.prefault({})
30
+ });
31
+ var policyConfigInputSchema = z.object({
32
+ enabled: z.boolean().optional(),
33
+ // Spelled out rather than `policyDiscoveryConfigSchema.partial()`: in zod 4
34
+ // a `.default()` survives `.partial()`, so every toggle would come back
35
+ // materialized and the input layer would stop meaning "what the user wrote".
36
+ discovery: z.object({
37
+ issueTemplates: z.boolean().optional(),
38
+ pullRequestTemplate: z.boolean().optional(),
39
+ docs: z.boolean().optional(),
40
+ codeowners: z.boolean().optional(),
41
+ labels: z.boolean().optional(),
42
+ issueTypes: z.boolean().optional()
43
+ }).optional(),
44
+ issues: z.object({ titleConvention: z.string().nullish() }).optional(),
45
+ pullRequests: z.object({ baseBranch: z.string().nullish(), titleConvention: z.string().nullish() }).optional(),
46
+ git: z.object({ branchConvention: z.string().nullish(), commitConvention: z.string().nullish() }).optional()
47
+ });
48
+
49
+ // src/schemas.ts
50
+ import { z as z2 } from "zod";
51
+ var claudeUsageSchema = z2.object({
52
+ inputTokens: z2.number().optional(),
53
+ outputTokens: z2.number().optional(),
54
+ cacheReadTokens: z2.number().optional(),
55
+ cacheCreationTokens: z2.number().optional(),
56
+ costUsd: z2.number().optional()
11
57
  });
12
- var userStoryStatusSchema = z.enum(["backlog", "in_progress", "in_review", "done"]);
13
- var storyStageSchema = z.enum([
58
+ var userStoryStatusSchema = z2.enum(["backlog", "in_progress", "in_review", "done"]);
59
+ var storyStageSchema = z2.enum([
14
60
  "pending",
15
61
  "executing",
16
62
  "awaiting_review",
@@ -19,195 +65,195 @@ var storyStageSchema = z.enum([
19
65
  "done",
20
66
  "failed"
21
67
  ]);
22
- var userStorySchema = z.object({
23
- id: z.string(),
24
- title: z.string(),
25
- description: z.string(),
26
- acceptanceCriteria: z.array(z.string()),
27
- priority: z.number().int().positive(),
28
- passes: z.boolean(),
29
- notes: z.string(),
68
+ var userStorySchema = z2.object({
69
+ id: z2.string(),
70
+ title: z2.string(),
71
+ description: z2.string(),
72
+ acceptanceCriteria: z2.array(z2.string()),
73
+ priority: z2.number().int().positive(),
74
+ passes: z2.boolean(),
75
+ notes: z2.string(),
30
76
  ...claudeUsageSchema.shape,
31
- durationSeconds: z.number().optional(),
77
+ durationSeconds: z2.number().optional(),
32
78
  status: userStoryStatusSchema.optional(),
33
- dependencies: z.array(z.string()).optional(),
79
+ dependencies: z2.array(z2.string()).optional(),
34
80
  stage: storyStageSchema.optional(),
35
- stageSince: z.string().optional(),
36
- stageDetail: z.string().optional()
81
+ stageSince: z2.string().optional(),
82
+ stageDetail: z2.string().optional()
37
83
  });
38
- var pipelineStateSchema = z.object({
39
- analyzeCompleted: z.boolean().optional(),
40
- prdCompleted: z.boolean(),
41
- jsonCompleted: z.boolean(),
42
- executionCompleted: z.boolean(),
43
- reviewCompleted: z.boolean(),
44
- prCreated: z.boolean(),
45
- prReviewCompleted: z.boolean().optional()
84
+ var pipelineStateSchema = z2.object({
85
+ analyzeCompleted: z2.boolean().optional(),
86
+ prdCompleted: z2.boolean(),
87
+ jsonCompleted: z2.boolean(),
88
+ executionCompleted: z2.boolean(),
89
+ reviewCompleted: z2.boolean(),
90
+ prCreated: z2.boolean(),
91
+ prReviewCompleted: z2.boolean().optional()
46
92
  });
47
- var pullRequestRefSchema = z.object({
48
- number: z.number().int().positive(),
49
- url: z.string(),
50
- headBranch: z.string(),
51
- createdAt: z.string()
93
+ var pullRequestRefSchema = z2.object({
94
+ number: z2.number().int().positive(),
95
+ url: z2.string(),
96
+ headBranch: z2.string(),
97
+ createdAt: z2.string()
52
98
  });
53
- var prReviewRecommendationSchema = z.enum([
99
+ var prReviewRecommendationSchema = z2.enum([
54
100
  "APPROVE",
55
101
  "APPROVE_WITH_SUGGESTIONS",
56
102
  "REQUEST_CHANGES"
57
103
  ]);
58
- var prReviewStateSchema = z.object({
59
- enabled: z.boolean().default(false),
60
- pullRequestNumber: z.number().int().positive().optional(),
61
- rounds: z.number().int().min(0).default(0),
104
+ var prReviewStateSchema = z2.object({
105
+ enabled: z2.boolean().default(false),
106
+ pullRequestNumber: z2.number().int().positive().optional(),
107
+ rounds: z2.number().int().min(0).default(0),
62
108
  lastRecommendation: prReviewRecommendationSchema.optional(),
63
- lastReviewedAt: z.string().optional()
109
+ lastReviewedAt: z2.string().optional()
64
110
  });
65
- var lastErrorSchema = z.object({
66
- category: z.string(),
67
- message: z.string(),
68
- at: z.string()
111
+ var lastErrorSchema = z2.object({
112
+ category: z2.string(),
113
+ message: z2.string(),
114
+ at: z2.string()
69
115
  });
70
- var issueMetadataSchema = z.object({
71
- schemaVersion: z.literal(1),
72
- id: z.string().min(1),
73
- number: z.number().int().positive().nullable(),
74
- source: z.enum(["github", "local"]),
75
- title: z.string(),
76
- labels: z.array(z.string()),
77
- state: z.enum(["open", "closed"]),
78
- createdAt: z.string(),
79
- updatedAt: z.string(),
80
- contentHash: z.string(),
81
- remote: z.object({
82
- provider: z.enum(["github", "local"]),
83
- ref: z.string(),
84
- syncedAt: z.string(),
85
- syncedContentHash: z.string()
116
+ var issueMetadataSchema = z2.object({
117
+ schemaVersion: z2.literal(1),
118
+ id: z2.string().min(1),
119
+ number: z2.number().int().positive().nullable(),
120
+ source: z2.enum(["github", "local"]),
121
+ title: z2.string(),
122
+ labels: z2.array(z2.string()),
123
+ state: z2.enum(["open", "closed"]),
124
+ createdAt: z2.string(),
125
+ updatedAt: z2.string(),
126
+ contentHash: z2.string(),
127
+ remote: z2.object({
128
+ provider: z2.enum(["github", "local"]),
129
+ ref: z2.string(),
130
+ syncedAt: z2.string(),
131
+ syncedContentHash: z2.string()
86
132
  }).optional()
87
133
  });
88
- var taskPlanSchema = z.object({
89
- project: z.string(),
90
- issueNumber: z.union([z.number().int().positive(), z.string().min(1)]),
91
- issueUrl: z.string().optional().default(""),
92
- branchName: z.string(),
93
- noBranch: z.boolean().optional().default(false),
94
- description: z.string(),
95
- issueStatus: z.enum(["pending", "in_progress", "completed"]),
96
- completedAt: z.string().nullable(),
97
- lastAttemptAt: z.string().nullable(),
134
+ var taskPlanSchema = z2.object({
135
+ project: z2.string(),
136
+ issueNumber: z2.union([z2.number().int().positive(), z2.string().min(1)]),
137
+ issueUrl: z2.string().optional().default(""),
138
+ branchName: z2.string(),
139
+ noBranch: z2.boolean().optional().default(false),
140
+ description: z2.string(),
141
+ issueStatus: z2.enum(["pending", "in_progress", "completed"]),
142
+ completedAt: z2.string().nullable(),
143
+ lastAttemptAt: z2.string().nullable(),
98
144
  lastError: lastErrorSchema.nullable(),
99
- correctionCycle: z.number().int().min(0),
100
- maxCorrectionCycles: z.number().int().min(0),
145
+ correctionCycle: z2.number().int().min(0),
146
+ maxCorrectionCycles: z2.number().int().min(0),
101
147
  /**
102
148
  * Findings from the most recent failed review, verbatim. Non-null means the
103
149
  * issue has a pending correction even if every userStories[].passes is
104
150
  * already true — the execute phase must address these before the field is
105
151
  * cleared back to null. See core/engine.ts's early-return guards.
106
152
  */
107
- lastReviewFindings: z.string().nullable().optional().default(null),
153
+ lastReviewFindings: z2.string().nullable().optional().default(null),
108
154
  pipeline: pipelineStateSchema,
109
155
  pullRequest: pullRequestRefSchema.optional(),
110
156
  prReview: prReviewStateSchema.optional(),
111
- userStories: z.array(userStorySchema)
157
+ userStories: z2.array(userStorySchema)
112
158
  });
113
- var headlessResultSchema = z.object({
114
- success: z.boolean(),
115
- result: z.string(),
159
+ var headlessResultSchema = z2.object({
160
+ success: z2.boolean(),
161
+ result: z2.string(),
116
162
  cost: claudeUsageSchema.nullable(),
117
- error: z.string().nullable()
163
+ error: z2.string().nullable()
118
164
  });
119
- var sessionLogEntrySchema = z.object({
120
- at: z.string(),
121
- level: z.enum(["info", "warn", "error"]),
122
- message: z.string()
165
+ var sessionLogEntrySchema = z2.object({
166
+ at: z2.string(),
167
+ level: z2.enum(["info", "warn", "error"]),
168
+ message: z2.string()
123
169
  });
124
170
  var sessionUsageShape = {
125
- inputTokens: z.number().nullable().default(null),
126
- outputTokens: z.number().nullable().default(null),
127
- cacheReadTokens: z.number().nullable().default(null),
128
- cacheCreationTokens: z.number().nullable().default(null),
129
- costUsd: z.number().nullable().default(null)
171
+ inputTokens: z2.number().nullable().default(null),
172
+ outputTokens: z2.number().nullable().default(null),
173
+ cacheReadTokens: z2.number().nullable().default(null),
174
+ cacheCreationTokens: z2.number().nullable().default(null),
175
+ costUsd: z2.number().nullable().default(null)
130
176
  };
131
- var sessionPhaseSchema = z.object({
132
- name: z.string(),
133
- status: z.enum(["pending", "running", "completed", "failed"]),
134
- startedAt: z.string().nullable(),
135
- endedAt: z.string().nullable(),
136
- durationSeconds: z.number().nullable(),
137
- error: z.string().nullable(),
177
+ var sessionPhaseSchema = z2.object({
178
+ name: z2.string(),
179
+ status: z2.enum(["pending", "running", "completed", "failed"]),
180
+ startedAt: z2.string().nullable(),
181
+ endedAt: z2.string().nullable(),
182
+ durationSeconds: z2.number().nullable(),
183
+ error: z2.string().nullable(),
138
184
  ...sessionUsageShape
139
185
  });
140
- var sessionStorySchema = z.object({
141
- id: z.string(),
142
- title: z.string(),
143
- priority: z.number(),
144
- passes: z.boolean(),
145
- completedAt: z.string().nullable(),
186
+ var sessionStorySchema = z2.object({
187
+ id: z2.string(),
188
+ title: z2.string(),
189
+ priority: z2.number(),
190
+ passes: z2.boolean(),
191
+ completedAt: z2.string().nullable(),
146
192
  // Also introduced with the metrics, hence the same tolerant default.
147
- durationSeconds: z.number().nullable().default(null),
193
+ durationSeconds: z2.number().nullable().default(null),
148
194
  // Snapshot fields are always present on output and defaulted on input, so a
149
195
  // session.json written before they existed still parses. This is the mirror
150
196
  // image of userStorySchema, where the same two fields are plainly optional.
151
197
  status: userStoryStatusSchema.default("backlog"),
152
- dependencies: z.array(z.string()).default([]),
198
+ dependencies: z2.array(z2.string()).default([]),
153
199
  // Published for the panel's story detail view. Same tolerant default as the
154
200
  // fields above: absent (older session.json) and empty resolve to the same
155
201
  // value, so the client never has to tell them apart.
156
- description: z.string().default(""),
157
- acceptanceCriteria: z.array(z.string()).default([]),
202
+ description: z2.string().default(""),
203
+ acceptanceCriteria: z2.array(z2.string()).default([]),
158
204
  // Additive like the rest of this schema: a session.json written before
159
205
  // `stage` existed parses into 'pending'/null, the same values a fresh
160
206
  // snapshot starts a story at.
161
207
  stage: storyStageSchema.default("pending"),
162
- stageSince: z.string().nullable().default(null),
163
- stageDetail: z.string().nullable().default(null),
208
+ stageSince: z2.string().nullable().default(null),
209
+ stageDetail: z2.string().nullable().default(null),
164
210
  ...sessionUsageShape
165
211
  });
166
- var sessionSnapshotSchema = z.object({
167
- schemaVersion: z.literal(1),
168
- sessionId: z.string().nullable(),
169
- readOnly: z.literal(true),
170
- capabilities: z.array(z.string()),
171
- issue: z.object({
172
- number: z.number().nullable(),
173
- url: z.string().nullable(),
212
+ var sessionSnapshotSchema = z2.object({
213
+ schemaVersion: z2.literal(1),
214
+ sessionId: z2.string().nullable(),
215
+ readOnly: z2.literal(true),
216
+ capabilities: z2.array(z2.string()),
217
+ issue: z2.object({
218
+ number: z2.number().nullable(),
219
+ url: z2.string().nullable(),
174
220
  // Additive: a session.json written before the Issue section was enriched
175
221
  // parses into the same "not reported" values createInitialSnapshot() uses.
176
- title: z.string().nullable().default(null),
177
- description: z.string().nullable().default(null),
178
- labels: z.array(z.string()).default([]),
179
- state: z.string().nullable().default(null)
222
+ title: z2.string().nullable().default(null),
223
+ description: z2.string().nullable().default(null),
224
+ labels: z2.array(z2.string()).default([]),
225
+ state: z2.string().nullable().default(null)
180
226
  }),
181
- status: z.enum(["idle", "running", "completed", "failed"]),
182
- startedAt: z.string().nullable(),
183
- updatedAt: z.string().nullable(),
184
- endedAt: z.string().nullable(),
185
- elapsedSeconds: z.number().nullable(),
186
- estimatedRemainingSeconds: z.number().nullable(),
187
- progress: z.object({
188
- percent: z.number(),
189
- phasesCompleted: z.number(),
190
- phasesTotal: z.number(),
191
- storiesCompleted: z.number(),
192
- storiesTotal: z.number()
227
+ status: z2.enum(["idle", "running", "completed", "failed"]),
228
+ startedAt: z2.string().nullable(),
229
+ updatedAt: z2.string().nullable(),
230
+ endedAt: z2.string().nullable(),
231
+ elapsedSeconds: z2.number().nullable(),
232
+ estimatedRemainingSeconds: z2.number().nullable(),
233
+ progress: z2.object({
234
+ percent: z2.number(),
235
+ phasesCompleted: z2.number(),
236
+ phasesTotal: z2.number(),
237
+ storiesCompleted: z2.number(),
238
+ storiesTotal: z2.number()
193
239
  }),
194
- currentPhase: z.string().nullable(),
195
- currentActivity: z.object({
196
- story: z.string().nullable(),
197
- tool: z.string().nullable(),
198
- detail: z.string().nullable(),
199
- since: z.string()
240
+ currentPhase: z2.string().nullable(),
241
+ currentActivity: z2.object({
242
+ story: z2.string().nullable(),
243
+ tool: z2.string().nullable(),
244
+ detail: z2.string().nullable(),
245
+ since: z2.string()
200
246
  }).nullable(),
201
- phases: z.array(sessionPhaseSchema),
202
- stories: z.array(sessionStorySchema),
247
+ phases: z2.array(sessionPhaseSchema),
248
+ stories: z2.array(sessionStorySchema),
203
249
  // The whole aggregate is additive: a snapshot from before it existed parses
204
250
  // into the same "nothing reported" object the reducer starts from.
205
- metrics: z.object({
206
- totalInputTokens: z.number().nullable().default(null),
207
- totalOutputTokens: z.number().nullable().default(null),
208
- totalCacheReadTokens: z.number().nullable().default(null),
209
- totalCacheCreationTokens: z.number().nullable().default(null),
210
- totalCostUsd: z.number().nullable().default(null)
251
+ metrics: z2.object({
252
+ totalInputTokens: z2.number().nullable().default(null),
253
+ totalOutputTokens: z2.number().nullable().default(null),
254
+ totalCacheReadTokens: z2.number().nullable().default(null),
255
+ totalCacheCreationTokens: z2.number().nullable().default(null),
256
+ totalCostUsd: z2.number().nullable().default(null)
211
257
  }).default({
212
258
  totalInputTokens: null,
213
259
  totalOutputTokens: null,
@@ -215,51 +261,51 @@ var sessionSnapshotSchema = z.object({
215
261
  totalCacheCreationTokens: null,
216
262
  totalCostUsd: null
217
263
  }),
218
- execution: z.object({
219
- iteration: z.number(),
220
- retries: z.number(),
221
- correctionCycle: z.number(),
222
- maxCorrectionCycles: z.number().nullable()
264
+ execution: z2.object({
265
+ iteration: z2.number(),
266
+ retries: z2.number(),
267
+ correctionCycle: z2.number(),
268
+ maxCorrectionCycles: z2.number().nullable()
223
269
  }),
224
- git: z.object({
225
- branch: z.string().nullable(),
226
- baseBranch: z.string().nullable(),
227
- commits: z.array(z.object({ hash: z.string(), subject: z.string() }))
270
+ git: z2.object({
271
+ branch: z2.string().nullable(),
272
+ baseBranch: z2.string().nullable(),
273
+ commits: z2.array(z2.object({ hash: z2.string(), subject: z2.string() }))
228
274
  }),
229
275
  // Additive like the metrics aggregate: a session.json written before the
230
276
  // repository section existed parses into the same all-null object
231
277
  // createInitialSnapshot() starts from.
232
- repository: z.object({
233
- name: z.string().nullable().default(null),
234
- remoteUrl: z.string().nullable().default(null),
235
- branch: z.string().nullable().default(null),
236
- headCommit: z.string().nullable().default(null),
237
- root: z.string().nullable().default(null)
278
+ repository: z2.object({
279
+ name: z2.string().nullable().default(null),
280
+ remoteUrl: z2.string().nullable().default(null),
281
+ branch: z2.string().nullable().default(null),
282
+ headCommit: z2.string().nullable().default(null),
283
+ root: z2.string().nullable().default(null)
238
284
  }).default({ name: null, remoteUrl: null, branch: null, headCommit: null, root: null }),
239
- pullRequests: z.array(z.object({ number: z.number(), url: z.string(), title: z.string() })),
240
- logs: z.array(sessionLogEntrySchema),
241
- errors: z.array(sessionLogEntrySchema),
242
- warnings: z.array(sessionLogEntrySchema),
243
- lastError: z.object({ message: z.string(), at: z.string() }).nullable(),
244
- nextSteps: z.array(z.string()),
245
- environment: z.object({ node: z.string(), platform: z.string() }).nullable()
285
+ pullRequests: z2.array(z2.object({ number: z2.number(), url: z2.string(), title: z2.string() })),
286
+ logs: z2.array(sessionLogEntrySchema),
287
+ errors: z2.array(sessionLogEntrySchema),
288
+ warnings: z2.array(sessionLogEntrySchema),
289
+ lastError: z2.object({ message: z2.string(), at: z2.string() }).nullable(),
290
+ nextSteps: z2.array(z2.string()),
291
+ environment: z2.object({ node: z2.string(), platform: z2.string() }).nullable()
246
292
  });
247
- var webConfigSchema = z.object({
248
- enabled: z.boolean().default(false),
249
- port: z.number().int().min(1).max(65535).default(3737),
250
- host: z.string().min(1).default("0.0.0.0"),
251
- refreshSeconds: z.number().positive().default(5),
252
- logLimit: z.number().int().positive().default(200),
253
- includeLogs: z.boolean().default(true)
293
+ var webConfigSchema = z2.object({
294
+ enabled: z2.boolean().default(false),
295
+ port: z2.number().int().min(1).max(65535).default(3737),
296
+ host: z2.string().min(1).default("0.0.0.0"),
297
+ refreshSeconds: z2.number().positive().default(5),
298
+ logLimit: z2.number().int().positive().default(200),
299
+ includeLogs: z2.boolean().default(true)
254
300
  });
255
- var issuesConfigSchema = z.object({
256
- defaultGenerateTarget: z.enum(["github", "local", "both"]).default("github"),
257
- preferredProvider: z.enum(["github", "local"]).default("github"),
258
- conflictPolicy: z.enum(["ask", "prefer-local", "prefer-github"]).default("ask"),
259
- requireConfirmation: z.boolean().default(true)
301
+ var issuesConfigSchema = z2.object({
302
+ defaultGenerateTarget: z2.enum(["github", "local", "both"]).default("github"),
303
+ preferredProvider: z2.enum(["github", "local"]).default("github"),
304
+ conflictPolicy: z2.enum(["ask", "prefer-local", "prefer-github"]).default("ask"),
305
+ requireConfirmation: z2.boolean().default(true)
260
306
  });
261
- var prReviewConfigSchema = z.object({
262
- publisher: z.enum(["local"]).default("local")
307
+ var prReviewConfigSchema = z2.object({
308
+ publisher: z2.enum(["local"]).default("local")
263
309
  });
264
310
 
265
311
  // src/core/session-state.ts
@@ -1259,6 +1305,8 @@ var ElapsedTimer = class {
1259
1305
  };
1260
1306
 
1261
1307
  export {
1308
+ policyConfigSchema,
1309
+ policyConfigInputSchema,
1262
1310
  pullRequestRefSchema,
1263
1311
  issueMetadataSchema,
1264
1312
  taskPlanSchema,
@@ -1312,4 +1360,4 @@ export {
1312
1360
  formatDuration,
1313
1361
  ElapsedTimer
1314
1362
  };
1315
- //# sourceMappingURL=chunk-57MH6RYJ.js.map
1363
+ //# sourceMappingURL=chunk-V5OHFSW4.js.map