@userreason/cli 0.2.0 → 0.2.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/README.md +12 -2
- package/dist/first-survey-source.d.ts +1 -0
- package/dist/first-survey-source.js +15 -6
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/profile.js +1 -1
- package/dist/recommendation-source.d.ts +13 -0
- package/dist/recommendation-source.js +211 -0
- package/dist/setup-diagnostics.d.ts +2 -0
- package/dist/setup-diagnostics.js +26 -0
- package/dist/setup-executor.d.ts +8 -1
- package/dist/setup-executor.js +153 -132
- package/dist/setup-heartbeat.d.ts +268 -0
- package/dist/setup-heartbeat.js +120 -0
- package/dist/setup-runner.d.ts +3 -1
- package/dist/setup-runner.js +157 -108
- package/dist/setup-source.d.ts +3 -2
- package/dist/setup-source.js +6 -6
- package/dist/setup-store.d.ts +2 -2
- package/dist/setup-store.js +16 -6
- package/dist/setup-wire.d.ts +130 -0
- package/dist/setup-wire.js +22 -7
- package/dist/setup.d.ts +211 -11
- package/dist/setup.js +10 -4
- package/package.json +1 -1
package/dist/setup-wire.d.ts
CHANGED
|
@@ -15,7 +15,13 @@ export declare const parseSetupCapabilities: Reader<Shape<{
|
|
|
15
15
|
insert_footer: Reader<boolean>;
|
|
16
16
|
source_review: Reader<boolean>;
|
|
17
17
|
sample_read: Reader<boolean>;
|
|
18
|
+
onboarding_v2: Reader<boolean | undefined>;
|
|
18
19
|
project_name: Reader<string | undefined>;
|
|
20
|
+
launcher: Reader<Shape<{
|
|
21
|
+
wizard_version: Reader<string>;
|
|
22
|
+
api_origin: Reader<string>;
|
|
23
|
+
registry: Reader<string | undefined>;
|
|
24
|
+
}> | undefined>;
|
|
19
25
|
terminal: Reader<Shape<{
|
|
20
26
|
platform: Reader<string>;
|
|
21
27
|
app: Reader<string>;
|
|
@@ -122,6 +128,16 @@ declare const sourceState: Reader<Shape<{
|
|
|
122
128
|
authorized_at: Reader<string | null>;
|
|
123
129
|
expires_at: Reader<string>;
|
|
124
130
|
error_code: Reader<"operation_failed" | "planning_unavailable" | "planning_paused" | "planning_daily_budget" | "planning_allowance_exhausted" | "planning_provider_unavailable" | "planning_policy_changed" | "planning_consent_expired" | "planning_input_budget" | "planning_invalid_output" | "planning_timeout" | "source_changed" | "source_unavailable" | "recommendations_no_source" | null>;
|
|
131
|
+
analysis_id: Reader<string | undefined>;
|
|
132
|
+
analysis_started_at: Reader<string | undefined>;
|
|
133
|
+
analysis_completed_at: Reader<string | undefined>;
|
|
134
|
+
deadline_at: Reader<string | undefined>;
|
|
135
|
+
timings: Reader<Shape<{
|
|
136
|
+
extraction_ms: Reader<number | undefined>;
|
|
137
|
+
consolidation_ms: Reader<number | undefined>;
|
|
138
|
+
authoring_ms: Reader<number | undefined>;
|
|
139
|
+
total_ms: Reader<number | undefined>;
|
|
140
|
+
}> | undefined>;
|
|
125
141
|
}>>;
|
|
126
142
|
export declare const parseSetupSourceManifest: Reader<Shape<{
|
|
127
143
|
packet_digest: Reader<string>;
|
|
@@ -158,7 +174,13 @@ export declare const parseSetupSession: Reader<Shape<{
|
|
|
158
174
|
insert_footer: Reader<boolean>;
|
|
159
175
|
source_review: Reader<boolean>;
|
|
160
176
|
sample_read: Reader<boolean>;
|
|
177
|
+
onboarding_v2: Reader<boolean | undefined>;
|
|
161
178
|
project_name: Reader<string | undefined>;
|
|
179
|
+
launcher: Reader<Shape<{
|
|
180
|
+
wizard_version: Reader<string>;
|
|
181
|
+
api_origin: Reader<string>;
|
|
182
|
+
registry: Reader<string | undefined>;
|
|
183
|
+
}> | undefined>;
|
|
162
184
|
terminal: Reader<Shape<{
|
|
163
185
|
platform: Reader<string>;
|
|
164
186
|
app: Reader<string>;
|
|
@@ -207,6 +229,16 @@ export declare const parseSetupSession: Reader<Shape<{
|
|
|
207
229
|
authorized_at: Reader<string | null>;
|
|
208
230
|
expires_at: Reader<string>;
|
|
209
231
|
error_code: Reader<"operation_failed" | "planning_unavailable" | "planning_paused" | "planning_daily_budget" | "planning_allowance_exhausted" | "planning_provider_unavailable" | "planning_policy_changed" | "planning_consent_expired" | "planning_input_budget" | "planning_invalid_output" | "planning_timeout" | "source_changed" | "source_unavailable" | "recommendations_no_source" | null>;
|
|
232
|
+
analysis_id: Reader<string | undefined>;
|
|
233
|
+
analysis_started_at: Reader<string | undefined>;
|
|
234
|
+
analysis_completed_at: Reader<string | undefined>;
|
|
235
|
+
deadline_at: Reader<string | undefined>;
|
|
236
|
+
timings: Reader<Shape<{
|
|
237
|
+
extraction_ms: Reader<number | undefined>;
|
|
238
|
+
consolidation_ms: Reader<number | undefined>;
|
|
239
|
+
authoring_ms: Reader<number | undefined>;
|
|
240
|
+
total_ms: Reader<number | undefined>;
|
|
241
|
+
}> | undefined>;
|
|
210
242
|
}> | null | undefined>;
|
|
211
243
|
recommendation_digest: Reader<string | null | undefined>;
|
|
212
244
|
selected_candidates: Reader<string[] | undefined>;
|
|
@@ -255,7 +287,13 @@ export declare const parseSetupStartInput: Reader<Shape<{
|
|
|
255
287
|
insert_footer: Reader<boolean>;
|
|
256
288
|
source_review: Reader<boolean>;
|
|
257
289
|
sample_read: Reader<boolean>;
|
|
290
|
+
onboarding_v2: Reader<boolean | undefined>;
|
|
258
291
|
project_name: Reader<string | undefined>;
|
|
292
|
+
launcher: Reader<Shape<{
|
|
293
|
+
wizard_version: Reader<string>;
|
|
294
|
+
api_origin: Reader<string>;
|
|
295
|
+
registry: Reader<string | undefined>;
|
|
296
|
+
}> | undefined>;
|
|
259
297
|
terminal: Reader<Shape<{
|
|
260
298
|
platform: Reader<string>;
|
|
261
299
|
app: Reader<string>;
|
|
@@ -376,7 +414,13 @@ export declare const parseSetupSourceInfo: Reader<Shape<{
|
|
|
376
414
|
insert_footer: Reader<boolean>;
|
|
377
415
|
source_review: Reader<boolean>;
|
|
378
416
|
sample_read: Reader<boolean>;
|
|
417
|
+
onboarding_v2: Reader<boolean | undefined>;
|
|
379
418
|
project_name: Reader<string | undefined>;
|
|
419
|
+
launcher: Reader<Shape<{
|
|
420
|
+
wizard_version: Reader<string>;
|
|
421
|
+
api_origin: Reader<string>;
|
|
422
|
+
registry: Reader<string | undefined>;
|
|
423
|
+
}> | undefined>;
|
|
380
424
|
terminal: Reader<Shape<{
|
|
381
425
|
platform: Reader<string>;
|
|
382
426
|
app: Reader<string>;
|
|
@@ -425,6 +469,16 @@ export declare const parseSetupSourceInfo: Reader<Shape<{
|
|
|
425
469
|
authorized_at: Reader<string | null>;
|
|
426
470
|
expires_at: Reader<string>;
|
|
427
471
|
error_code: Reader<"operation_failed" | "planning_unavailable" | "planning_paused" | "planning_daily_budget" | "planning_allowance_exhausted" | "planning_provider_unavailable" | "planning_policy_changed" | "planning_consent_expired" | "planning_input_budget" | "planning_invalid_output" | "planning_timeout" | "source_changed" | "source_unavailable" | "recommendations_no_source" | null>;
|
|
472
|
+
analysis_id: Reader<string | undefined>;
|
|
473
|
+
analysis_started_at: Reader<string | undefined>;
|
|
474
|
+
analysis_completed_at: Reader<string | undefined>;
|
|
475
|
+
deadline_at: Reader<string | undefined>;
|
|
476
|
+
timings: Reader<Shape<{
|
|
477
|
+
extraction_ms: Reader<number | undefined>;
|
|
478
|
+
consolidation_ms: Reader<number | undefined>;
|
|
479
|
+
authoring_ms: Reader<number | undefined>;
|
|
480
|
+
total_ms: Reader<number | undefined>;
|
|
481
|
+
}> | undefined>;
|
|
428
482
|
}> | null | undefined>;
|
|
429
483
|
recommendation_digest: Reader<string | null | undefined>;
|
|
430
484
|
selected_candidates: Reader<string[] | undefined>;
|
|
@@ -545,7 +599,13 @@ export declare const parseSetupClaimResult: Reader<Shape<{
|
|
|
545
599
|
insert_footer: Reader<boolean>;
|
|
546
600
|
source_review: Reader<boolean>;
|
|
547
601
|
sample_read: Reader<boolean>;
|
|
602
|
+
onboarding_v2: Reader<boolean | undefined>;
|
|
548
603
|
project_name: Reader<string | undefined>;
|
|
604
|
+
launcher: Reader<Shape<{
|
|
605
|
+
wizard_version: Reader<string>;
|
|
606
|
+
api_origin: Reader<string>;
|
|
607
|
+
registry: Reader<string | undefined>;
|
|
608
|
+
}> | undefined>;
|
|
549
609
|
terminal: Reader<Shape<{
|
|
550
610
|
platform: Reader<string>;
|
|
551
611
|
app: Reader<string>;
|
|
@@ -594,6 +654,16 @@ export declare const parseSetupClaimResult: Reader<Shape<{
|
|
|
594
654
|
authorized_at: Reader<string | null>;
|
|
595
655
|
expires_at: Reader<string>;
|
|
596
656
|
error_code: Reader<"operation_failed" | "planning_unavailable" | "planning_paused" | "planning_daily_budget" | "planning_allowance_exhausted" | "planning_provider_unavailable" | "planning_policy_changed" | "planning_consent_expired" | "planning_input_budget" | "planning_invalid_output" | "planning_timeout" | "source_changed" | "source_unavailable" | "recommendations_no_source" | null>;
|
|
657
|
+
analysis_id: Reader<string | undefined>;
|
|
658
|
+
analysis_started_at: Reader<string | undefined>;
|
|
659
|
+
analysis_completed_at: Reader<string | undefined>;
|
|
660
|
+
deadline_at: Reader<string | undefined>;
|
|
661
|
+
timings: Reader<Shape<{
|
|
662
|
+
extraction_ms: Reader<number | undefined>;
|
|
663
|
+
consolidation_ms: Reader<number | undefined>;
|
|
664
|
+
authoring_ms: Reader<number | undefined>;
|
|
665
|
+
total_ms: Reader<number | undefined>;
|
|
666
|
+
}> | undefined>;
|
|
597
667
|
}> | null | undefined>;
|
|
598
668
|
recommendation_digest: Reader<string | null | undefined>;
|
|
599
669
|
selected_candidates: Reader<string[] | undefined>;
|
|
@@ -747,7 +817,13 @@ export declare const setupWireReaders: {
|
|
|
747
817
|
insert_footer: Reader<boolean>;
|
|
748
818
|
source_review: Reader<boolean>;
|
|
749
819
|
sample_read: Reader<boolean>;
|
|
820
|
+
onboarding_v2: Reader<boolean | undefined>;
|
|
750
821
|
project_name: Reader<string | undefined>;
|
|
822
|
+
launcher: Reader<Shape<{
|
|
823
|
+
wizard_version: Reader<string>;
|
|
824
|
+
api_origin: Reader<string>;
|
|
825
|
+
registry: Reader<string | undefined>;
|
|
826
|
+
}> | undefined>;
|
|
751
827
|
terminal: Reader<Shape<{
|
|
752
828
|
platform: Reader<string>;
|
|
753
829
|
app: Reader<string>;
|
|
@@ -796,6 +872,16 @@ export declare const setupWireReaders: {
|
|
|
796
872
|
authorized_at: Reader<string | null>;
|
|
797
873
|
expires_at: Reader<string>;
|
|
798
874
|
error_code: Reader<"operation_failed" | "planning_unavailable" | "planning_paused" | "planning_daily_budget" | "planning_allowance_exhausted" | "planning_provider_unavailable" | "planning_policy_changed" | "planning_consent_expired" | "planning_input_budget" | "planning_invalid_output" | "planning_timeout" | "source_changed" | "source_unavailable" | "recommendations_no_source" | null>;
|
|
875
|
+
analysis_id: Reader<string | undefined>;
|
|
876
|
+
analysis_started_at: Reader<string | undefined>;
|
|
877
|
+
analysis_completed_at: Reader<string | undefined>;
|
|
878
|
+
deadline_at: Reader<string | undefined>;
|
|
879
|
+
timings: Reader<Shape<{
|
|
880
|
+
extraction_ms: Reader<number | undefined>;
|
|
881
|
+
consolidation_ms: Reader<number | undefined>;
|
|
882
|
+
authoring_ms: Reader<number | undefined>;
|
|
883
|
+
total_ms: Reader<number | undefined>;
|
|
884
|
+
}> | undefined>;
|
|
799
885
|
}> | null | undefined>;
|
|
800
886
|
recommendation_digest: Reader<string | null | undefined>;
|
|
801
887
|
selected_candidates: Reader<string[] | undefined>;
|
|
@@ -887,7 +973,13 @@ export declare const setupWireReaders: {
|
|
|
887
973
|
insert_footer: Reader<boolean>;
|
|
888
974
|
source_review: Reader<boolean>;
|
|
889
975
|
sample_read: Reader<boolean>;
|
|
976
|
+
onboarding_v2: Reader<boolean | undefined>;
|
|
890
977
|
project_name: Reader<string | undefined>;
|
|
978
|
+
launcher: Reader<Shape<{
|
|
979
|
+
wizard_version: Reader<string>;
|
|
980
|
+
api_origin: Reader<string>;
|
|
981
|
+
registry: Reader<string | undefined>;
|
|
982
|
+
}> | undefined>;
|
|
891
983
|
terminal: Reader<Shape<{
|
|
892
984
|
platform: Reader<string>;
|
|
893
985
|
app: Reader<string>;
|
|
@@ -913,7 +1005,13 @@ export declare const setupWireReaders: {
|
|
|
913
1005
|
insert_footer: Reader<boolean>;
|
|
914
1006
|
source_review: Reader<boolean>;
|
|
915
1007
|
sample_read: Reader<boolean>;
|
|
1008
|
+
onboarding_v2: Reader<boolean | undefined>;
|
|
916
1009
|
project_name: Reader<string | undefined>;
|
|
1010
|
+
launcher: Reader<Shape<{
|
|
1011
|
+
wizard_version: Reader<string>;
|
|
1012
|
+
api_origin: Reader<string>;
|
|
1013
|
+
registry: Reader<string | undefined>;
|
|
1014
|
+
}> | undefined>;
|
|
917
1015
|
terminal: Reader<Shape<{
|
|
918
1016
|
platform: Reader<string>;
|
|
919
1017
|
app: Reader<string>;
|
|
@@ -962,6 +1060,16 @@ export declare const setupWireReaders: {
|
|
|
962
1060
|
authorized_at: Reader<string | null>;
|
|
963
1061
|
expires_at: Reader<string>;
|
|
964
1062
|
error_code: Reader<"operation_failed" | "planning_unavailable" | "planning_paused" | "planning_daily_budget" | "planning_allowance_exhausted" | "planning_provider_unavailable" | "planning_policy_changed" | "planning_consent_expired" | "planning_input_budget" | "planning_invalid_output" | "planning_timeout" | "source_changed" | "source_unavailable" | "recommendations_no_source" | null>;
|
|
1063
|
+
analysis_id: Reader<string | undefined>;
|
|
1064
|
+
analysis_started_at: Reader<string | undefined>;
|
|
1065
|
+
analysis_completed_at: Reader<string | undefined>;
|
|
1066
|
+
deadline_at: Reader<string | undefined>;
|
|
1067
|
+
timings: Reader<Shape<{
|
|
1068
|
+
extraction_ms: Reader<number | undefined>;
|
|
1069
|
+
consolidation_ms: Reader<number | undefined>;
|
|
1070
|
+
authoring_ms: Reader<number | undefined>;
|
|
1071
|
+
total_ms: Reader<number | undefined>;
|
|
1072
|
+
}> | undefined>;
|
|
965
1073
|
}> | null | undefined>;
|
|
966
1074
|
recommendation_digest: Reader<string | null | undefined>;
|
|
967
1075
|
selected_candidates: Reader<string[] | undefined>;
|
|
@@ -1010,7 +1118,13 @@ export declare const setupWireReaders: {
|
|
|
1010
1118
|
insert_footer: Reader<boolean>;
|
|
1011
1119
|
source_review: Reader<boolean>;
|
|
1012
1120
|
sample_read: Reader<boolean>;
|
|
1121
|
+
onboarding_v2: Reader<boolean | undefined>;
|
|
1013
1122
|
project_name: Reader<string | undefined>;
|
|
1123
|
+
launcher: Reader<Shape<{
|
|
1124
|
+
wizard_version: Reader<string>;
|
|
1125
|
+
api_origin: Reader<string>;
|
|
1126
|
+
registry: Reader<string | undefined>;
|
|
1127
|
+
}> | undefined>;
|
|
1014
1128
|
terminal: Reader<Shape<{
|
|
1015
1129
|
platform: Reader<string>;
|
|
1016
1130
|
app: Reader<string>;
|
|
@@ -1101,7 +1215,13 @@ export declare const setupWireReaders: {
|
|
|
1101
1215
|
insert_footer: Reader<boolean>;
|
|
1102
1216
|
source_review: Reader<boolean>;
|
|
1103
1217
|
sample_read: Reader<boolean>;
|
|
1218
|
+
onboarding_v2: Reader<boolean | undefined>;
|
|
1104
1219
|
project_name: Reader<string | undefined>;
|
|
1220
|
+
launcher: Reader<Shape<{
|
|
1221
|
+
wizard_version: Reader<string>;
|
|
1222
|
+
api_origin: Reader<string>;
|
|
1223
|
+
registry: Reader<string | undefined>;
|
|
1224
|
+
}> | undefined>;
|
|
1105
1225
|
terminal: Reader<Shape<{
|
|
1106
1226
|
platform: Reader<string>;
|
|
1107
1227
|
app: Reader<string>;
|
|
@@ -1150,6 +1270,16 @@ export declare const setupWireReaders: {
|
|
|
1150
1270
|
authorized_at: Reader<string | null>;
|
|
1151
1271
|
expires_at: Reader<string>;
|
|
1152
1272
|
error_code: Reader<"operation_failed" | "planning_unavailable" | "planning_paused" | "planning_daily_budget" | "planning_allowance_exhausted" | "planning_provider_unavailable" | "planning_policy_changed" | "planning_consent_expired" | "planning_input_budget" | "planning_invalid_output" | "planning_timeout" | "source_changed" | "source_unavailable" | "recommendations_no_source" | null>;
|
|
1273
|
+
analysis_id: Reader<string | undefined>;
|
|
1274
|
+
analysis_started_at: Reader<string | undefined>;
|
|
1275
|
+
analysis_completed_at: Reader<string | undefined>;
|
|
1276
|
+
deadline_at: Reader<string | undefined>;
|
|
1277
|
+
timings: Reader<Shape<{
|
|
1278
|
+
extraction_ms: Reader<number | undefined>;
|
|
1279
|
+
consolidation_ms: Reader<number | undefined>;
|
|
1280
|
+
authoring_ms: Reader<number | undefined>;
|
|
1281
|
+
total_ms: Reader<number | undefined>;
|
|
1282
|
+
}> | undefined>;
|
|
1153
1283
|
}> | null | undefined>;
|
|
1154
1284
|
recommendation_digest: Reader<string | null | undefined>;
|
|
1155
1285
|
selected_candidates: Reader<string[] | undefined>;
|
package/dist/setup-wire.js
CHANGED
|
@@ -54,6 +54,20 @@ const revision = refine(text(1, 19, /^[1-9][0-9]*$/), value => BigInt(value) <=
|
|
|
54
54
|
const generation = integer(1, 2147483647);
|
|
55
55
|
const shortText = value => text(1, 240, /^[^\u0000-\u001f\u007f]*$/)(typeof value === 'string' ? value.trim() : value);
|
|
56
56
|
const identifier = text(1, 80, /^[A-Za-z0-9_-]+$/);
|
|
57
|
+
const canonicalOrigin = refine(text(1, 2048), value => { try {
|
|
58
|
+
const url = new URL(value);
|
|
59
|
+
return ['https:', 'http:'].includes(url.protocol) && !url.username && !url.password && !url.hostname.includes('*') && url.origin === value;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return false;
|
|
63
|
+
} });
|
|
64
|
+
const localRegistry = refine(text(1, 200), value => { try {
|
|
65
|
+
const url = new URL(value);
|
|
66
|
+
return url.protocol === 'http:' && ['127.0.0.1', 'localhost', '[::1]'].includes(url.hostname) && !url.username && !url.password && url.pathname === '/' && !url.search && !url.hash;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return false;
|
|
70
|
+
} });
|
|
57
71
|
const relativePath = refine(text(1, 240), value => !value.startsWith('/') && !/[\\:\u0000-\u001f\u007f]/.test(value) && value.split('/').every(part => !['', '.', '..'].includes(part)));
|
|
58
72
|
const scope = { schema_version: literal(1), setup_id: uuid };
|
|
59
73
|
export const setupPhases = ['configuring', 'awaiting_local_approval', 'applying', 'ready_for_recommendations', 'analyzing', 'selecting_drafts', 'creating_drafts', 'agent_test', 'complete', 'cancelled', 'expired'];
|
|
@@ -62,8 +76,9 @@ const resultCodes = ['verified', 'already_present', 'skipped', 'review_required'
|
|
|
62
76
|
const statuses = ['prepared', 'approved', 'leased', 'running', 'succeeded', 'failed', 'manual', 'cancelled', 'outcome_unknown'];
|
|
63
77
|
export const parseSetupCapabilities = shape({
|
|
64
78
|
framework: oneOf(['react', 'next', 'vue', 'vanilla']), package_manager: oneOf(['npm', 'pnpm', 'yarn']),
|
|
65
|
-
install_packages: bool, initialize_sdk: bool, install_skill: bool, insert_footer: bool, source_review: bool, sample_read: bool,
|
|
79
|
+
install_packages: bool, initialize_sdk: bool, install_skill: bool, insert_footer: bool, source_review: bool, sample_read: bool, onboarding_v2: optional(bool),
|
|
66
80
|
project_name: optional(refine(shortText, value => value.length <= 120 && !/[\/\\]/.test(value))),
|
|
81
|
+
launcher: optional(shape({ wizard_version: text(1, 80, /^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?$/), api_origin: canonicalOrigin, registry: optional(localRegistry) })),
|
|
67
82
|
terminal: optional(shape({ platform: oneOf(['macos', 'windows', 'linux', 'other']), app: oneOf(['apple_terminal', 'iterm2', 'windows_terminal', 'vscode', 'cursor', 'warp', 'ghostty', 'wezterm', 'alacritty', 'kitty', 'generic']) })),
|
|
68
83
|
});
|
|
69
84
|
const choices = shape({ install_sdk: bool, install_skill: bool, footer_badge: bool });
|
|
@@ -98,14 +113,14 @@ export function parseSetupEffect(value) { return effect(value); }
|
|
|
98
113
|
const sampleState = refine(shape({ status: oneOf(['not_started', 'waiting', 'received', 'skipped']), first_received_at: nullable(timestamp), latest_received_at: nullable(timestamp), latest_request_id: nullable(uuid) }), value => (value.first_received_at === null) === (value.latest_received_at === null) && (value.latest_received_at === null) === (value.latest_request_id === null) && (value.status !== 'received' || value.first_received_at !== null));
|
|
99
114
|
const draftOutcome = refine(shape({ candidate_id: identifier, status: oneOf(['pending', 'succeeded', 'failed']), prompt_id: uuid, request_id: uuid, revision: nullable(revision), code: nullable(oneOf(resultCodes)) }), value => value.status !== 'succeeded' || value.revision !== null);
|
|
100
115
|
const sourceErrors = ['planning_unavailable', 'planning_paused', 'planning_daily_budget', 'planning_allowance_exhausted', 'planning_provider_unavailable', 'planning_policy_changed', 'planning_consent_expired', 'planning_input_budget', 'planning_invalid_output', 'planning_timeout', 'source_changed', 'source_unavailable', 'recommendations_no_source', 'operation_failed'];
|
|
101
|
-
const sourceState = refine(shape({ preparation_id: uuid, status: oneOf(['pending', 'approved', 'analyzing', 'ready', 'failed', 'skipped']), packet_digest: hash, provider_fingerprint: hash, authorized_at: nullable(timestamp), expires_at: timestamp, error_code: nullable(oneOf(sourceErrors)) }), value => (!['approved', 'analyzing', 'ready'].includes(value.status) || value.authorized_at !== null) && (value.authorized_at === null || Date.parse(value.expires_at) > Date.parse(value.authorized_at) && Date.parse(value.expires_at) - Date.parse(value.authorized_at) <= 600_000));
|
|
102
|
-
const sourceFile = refine(shape({ path: relativePath, file_hash: hash, excerpt_hash: hash, bytes: integer(0,
|
|
103
|
-
export const parseSetupSourceManifest = refine(bounded(shape({ packet_digest: hash, snapshot_id: uuid, files: array(sourceFile, 0, 200, value => value.path), omitted_files: integer(0, 1000000), truncated: bool, git_included: literal(false) })), value => value.files.reduce((sum, file) => sum + file.bytes, 0) <=
|
|
116
|
+
const sourceState = refine(shape({ preparation_id: uuid, status: oneOf(['pending', 'approved', 'analyzing', 'ready', 'failed', 'skipped']), packet_digest: hash, provider_fingerprint: hash, authorized_at: nullable(timestamp), expires_at: timestamp, error_code: nullable(oneOf(sourceErrors)), analysis_id: optional(uuid), analysis_started_at: optional(timestamp), analysis_completed_at: optional(timestamp), deadline_at: optional(timestamp), timings: optional(shape({ extraction_ms: optional(integer(0, Number.MAX_SAFE_INTEGER)), consolidation_ms: optional(integer(0, Number.MAX_SAFE_INTEGER)), authoring_ms: optional(integer(0, Number.MAX_SAFE_INTEGER)), total_ms: optional(integer(0, Number.MAX_SAFE_INTEGER)) })) }), value => (!['approved', 'analyzing', 'ready'].includes(value.status) || value.authorized_at !== null) && (!value.deadline_at || Boolean(value.analysis_started_at && Date.parse(value.deadline_at) > Date.parse(value.analysis_started_at) && Date.parse(value.deadline_at) - Date.parse(value.analysis_started_at) <= 240000)) && (!value.analysis_completed_at || Boolean(value.analysis_started_at && Date.parse(value.analysis_completed_at) >= Date.parse(value.analysis_started_at))) && (value.authorized_at === null || Date.parse(value.expires_at) > Date.parse(value.authorized_at) && Date.parse(value.expires_at) - Date.parse(value.authorized_at) <= 600_000));
|
|
117
|
+
const sourceFile = refine(shape({ path: relativePath, file_hash: hash, excerpt_hash: hash, bytes: integer(0, 262144), start_line: integer(1, Number.MAX_SAFE_INTEGER), end_line: integer(1, Number.MAX_SAFE_INTEGER) }), value => value.end_line >= value.start_line);
|
|
118
|
+
export const parseSetupSourceManifest = refine(bounded(shape({ packet_digest: hash, snapshot_id: uuid, files: array(sourceFile, 0, 200, value => `${value.path}:${value.start_line}:${value.end_line}`), omitted_files: integer(0, 1000000), truncated: bool, git_included: literal(false) })), value => value.files.reduce((sum, file) => sum + file.bytes, 0) <= 262144);
|
|
104
119
|
const sourcePackage = shape({ name: (value) => text(1, 100)(typeof value === 'string' ? value.trim() : value), version: (value) => text(1, 100)(typeof value === 'string' ? value.trim() : value) });
|
|
105
120
|
const sourcePackages = array(sourcePackage, 0, 30, value => value.name);
|
|
106
121
|
const evidencePath = refine(text(1, 500), value => !value.startsWith('/') && !value.includes('\\') && !value.split('/').some(part => ['', '.', '..'].includes(part)));
|
|
107
|
-
const sourceEvidence = refine(shape({ kind: literal('local_source'), id: identifier, path: evidencePath, file_hash: hash, excerpt_hash: hash, snapshot_id: uuid, start_line: integer(1, Number.MAX_SAFE_INTEGER), end_line: integer(1, Number.MAX_SAFE_INTEGER), excerpt: text(0,
|
|
108
|
-
const planningLimits = shape({ input_tokens: integer(256,
|
|
122
|
+
const sourceEvidence = refine(shape({ kind: literal('local_source'), id: identifier, path: evidencePath, file_hash: hash, excerpt_hash: hash, snapshot_id: uuid, start_line: integer(1, Number.MAX_SAFE_INTEGER), end_line: integer(1, Number.MAX_SAFE_INTEGER), excerpt: text(0, 30000) }), value => value.end_line >= value.start_line && value.excerpt.split('\n').length === value.end_line - value.start_line + 1);
|
|
123
|
+
const planningLimits = shape({ input_tokens: integer(256, 262144), output_tokens: integer(256, 32768), deadline_ms: integer(1000, 240000) });
|
|
109
124
|
const providerDestination = refine(text(1, 200), value => { try {
|
|
110
125
|
const url = new URL(value);
|
|
111
126
|
return url.protocol === 'https:' && !url.username && !url.password && !url.search && !url.hash;
|
|
@@ -149,7 +164,7 @@ export const parseSetupPollInput = shape(scope);
|
|
|
149
164
|
export const parseSetupLocalPlanInput = bounded(shape({ ...scope, request_id: uuid, expected_revision: revision, plan: localPlan }));
|
|
150
165
|
export const parseSetupSourceInfoInput = shape(scope);
|
|
151
166
|
export const parseSetupSourcePlanInput = refine(bounded(shape({ ...scope, request_id: uuid, expected_revision: revision, manifest: parseSetupSourceManifest, packages: sourcePackages })), value => value.request_id === value.manifest.snapshot_id);
|
|
152
|
-
export const parseSetupSourceUploadInput = refine(
|
|
167
|
+
export const parseSetupSourceUploadInput = refine(shape({ ...scope, preparation_id: uuid, project_fingerprint: hash, evidence: array(sourceEvidence, 0, 220, value => value.id) }), value => Buffer.byteLength(JSON.stringify(value)) <= 300000 && new Set(value.evidence.map(item => `${item.path}:${item.start_line}:${item.end_line}`)).size === value.evidence.length && Buffer.byteLength(JSON.stringify(value.evidence)) <= 262144 && value.evidence.every(item => item.snapshot_id === value.preparation_id));
|
|
153
168
|
export const parseSetupSourceInfo = refine(bounded(shape({ schema_version: literal(1), session: parseSetupSession, preparation: nullable(shape({ preparation_id: uuid, manifest: parseSetupSourceManifest, packages: sourcePackages, configuration: planningConfiguration })) })), value => value.preparation === null || value.preparation.preparation_id === value.preparation.manifest.snapshot_id);
|
|
154
169
|
export const parseSetupClaimInput = shape({ ...scope, request_id: uuid, executor_generation: generation });
|
|
155
170
|
export const parseSetupClaimResult = bounded(shape({ schema_version: literal(1), command: nullable(command), session: parseSetupSession }));
|