vibes-diy 14.1.2 → 14.1.4
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/cli/cmd-evento.d.ts +92 -95
- package/cli/cmds/follow-chat-build.d.ts +29 -0
- package/cli/cmds/follow-chat-build.js +150 -0
- package/cli/cmds/follow-chat-build.js.map +1 -0
- package/cli/cmds/follow-chat-build.test.js +150 -0
- package/cli/cmds/follow-chat-build.test.js.map +1 -0
- package/cli/cmds/generate-cmd.d.ts +0 -6
- package/cli/cmds/generate-cmd.js +0 -47
- package/cli/cmds/generate-cmd.js.map +1 -1
- package/cli/cmds/generate-cmd.test.js +6 -148
- package/cli/cmds/generate-cmd.test.js.map +1 -1
- package/cli/cmds/generate-core.d.ts +1 -2
- package/cli/cmds/generate-core.js +69 -70
- package/cli/cmds/generate-core.js.map +1 -1
- package/cli/cmds/generate-core.test.js +162 -32
- package/cli/cmds/generate-core.test.js.map +1 -1
- package/cli/codegen-shard.test.js +101 -5
- package/cli/codegen-shard.test.js.map +1 -1
- package/cli/shard-roll.d.ts +22 -3
- package/cli/shard-roll.js +34 -0
- package/cli/shard-roll.js.map +1 -1
- package/package.json +8 -8
- package/cli/cmds/generate-core-clarify.test.js +0 -136
- package/cli/cmds/generate-core-clarify.test.js.map +0 -1
- /package/cli/cmds/{generate-core-clarify.test.d.ts → follow-chat-build.test.d.ts} +0 -0
package/cli/cmd-evento.d.ts
CHANGED
|
@@ -16,78 +16,73 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
|
|
|
16
16
|
type: "core-cli.res-device-id-register";
|
|
17
17
|
output: string;
|
|
18
18
|
}> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
|
|
19
|
-
type: "vibes
|
|
19
|
+
type: "use-vibes.cli.themes";
|
|
20
20
|
}, {
|
|
21
|
-
type: "vibes
|
|
22
|
-
|
|
21
|
+
type: "use-vibes.cli.res-themes-list";
|
|
22
|
+
themes: {
|
|
23
|
+
slug: string;
|
|
23
24
|
name: string;
|
|
24
|
-
description: string;
|
|
25
25
|
}[];
|
|
26
26
|
} | {
|
|
27
|
-
type: "vibes
|
|
28
|
-
|
|
27
|
+
type: "use-vibes.cli.res-theme-content";
|
|
28
|
+
slug: string;
|
|
29
29
|
content: string;
|
|
30
30
|
}> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
|
|
31
|
-
type: "vibes-diy.cli.
|
|
32
|
-
|
|
31
|
+
type: "vibes-diy.cli.put-asset";
|
|
32
|
+
file: string;
|
|
33
33
|
appSlug: string;
|
|
34
34
|
ownerHandle: string;
|
|
35
|
-
|
|
35
|
+
apiUrl: string;
|
|
36
|
+
mimeType: string;
|
|
37
|
+
verifyFetch: boolean;
|
|
36
38
|
}, {
|
|
37
|
-
type: "vibes-diy.cli.
|
|
38
|
-
|
|
39
|
+
type: "vibes-diy.cli.res-put-asset";
|
|
40
|
+
cid: string;
|
|
41
|
+
getURL: string;
|
|
42
|
+
size: number;
|
|
43
|
+
uploadId: string;
|
|
44
|
+
verified?: boolean | undefined;
|
|
39
45
|
}> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
|
|
40
|
-
type: "vibes-diy.cli.db.
|
|
46
|
+
type: "vibes-diy.cli.db.get";
|
|
41
47
|
apiUrl: string;
|
|
42
48
|
appSlug: string;
|
|
43
49
|
ownerHandle: string;
|
|
44
50
|
dbName: string;
|
|
45
|
-
|
|
46
|
-
key: string;
|
|
47
|
-
prefix: string;
|
|
48
|
-
range: string;
|
|
49
|
-
limit: number;
|
|
50
|
-
descending: boolean;
|
|
51
|
+
docId: string;
|
|
51
52
|
admin: boolean;
|
|
52
53
|
actingHandle: string;
|
|
53
54
|
}, {
|
|
54
|
-
type: "vibes-diy.cli.db.
|
|
55
|
-
|
|
55
|
+
type: "vibes-diy.cli.db.get-res";
|
|
56
|
+
doc: {
|
|
56
57
|
[x: string]: unknown;
|
|
57
|
-
}
|
|
58
|
+
};
|
|
58
59
|
}> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
|
|
59
|
-
type: "vibes-diy.cli.
|
|
60
|
+
type: "vibes-diy.cli.db.subscribe";
|
|
61
|
+
apiUrl: string;
|
|
62
|
+
appSlug: string;
|
|
63
|
+
ownerHandle: string;
|
|
64
|
+
dbName: string;
|
|
65
|
+
}, never> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
|
|
66
|
+
type: "vibes-diy.cli.app-chats";
|
|
60
67
|
appSlug: string;
|
|
61
68
|
ownerHandle: string;
|
|
62
69
|
chatId?: string | undefined;
|
|
63
70
|
apiUrl: string;
|
|
64
|
-
response?: boolean | undefined;
|
|
65
|
-
raw?: boolean | undefined;
|
|
66
|
-
files?: boolean | undefined;
|
|
67
|
-
jsonl?: boolean | undefined;
|
|
68
|
-
user?: boolean | undefined;
|
|
69
|
-
promptId?: string | undefined;
|
|
70
71
|
}, {
|
|
71
|
-
type: "vibes-diy.cli.res-
|
|
72
|
-
output: string;
|
|
73
|
-
} | {
|
|
74
|
-
type: "vibes-diy.cli.res-codegen-log-list";
|
|
72
|
+
type: "vibes-diy.cli.res-app-chats-list";
|
|
75
73
|
items: {
|
|
76
74
|
chatId: string;
|
|
77
75
|
appSlug: string;
|
|
78
76
|
ownerHandle: string;
|
|
79
77
|
created: string;
|
|
78
|
+
userHandle?: string | undefined;
|
|
80
79
|
}[];
|
|
81
80
|
} | {
|
|
82
|
-
type: "vibes-diy.cli.res-
|
|
81
|
+
type: "vibes-diy.cli.res-app-chats-detail";
|
|
83
82
|
chatId: string;
|
|
84
|
-
ownerHandle
|
|
85
|
-
appSlug
|
|
86
|
-
|
|
87
|
-
prompt: string;
|
|
88
|
-
fsId: string;
|
|
89
|
-
created: string;
|
|
90
|
-
}[];
|
|
83
|
+
ownerHandle?: string | undefined;
|
|
84
|
+
appSlug?: string | undefined;
|
|
85
|
+
output: string;
|
|
91
86
|
}> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
|
|
92
87
|
type: "vibes-diy.cli.list";
|
|
93
88
|
apiUrl: string;
|
|
@@ -337,6 +332,9 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
|
|
|
337
332
|
type: "contactEmail";
|
|
338
333
|
email: string;
|
|
339
334
|
updatedAt: string;
|
|
335
|
+
} | {
|
|
336
|
+
type: "onboarding";
|
|
337
|
+
completedAt: string;
|
|
340
338
|
} | {
|
|
341
339
|
type: "geoCountry";
|
|
342
340
|
country: string;
|
|
@@ -347,9 +345,6 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
|
|
|
347
345
|
[x: string]: string;
|
|
348
346
|
};
|
|
349
347
|
updatedAt: string;
|
|
350
|
-
} | {
|
|
351
|
-
type: "onboarding";
|
|
352
|
-
completedAt: string;
|
|
353
348
|
} | {
|
|
354
349
|
type: "defaultHandle";
|
|
355
350
|
ownerHandle: string;
|
|
@@ -357,16 +352,16 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
|
|
|
357
352
|
updated: string;
|
|
358
353
|
created: string;
|
|
359
354
|
}> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
|
|
360
|
-
type: "
|
|
355
|
+
type: "vibes-diy.cli.skills";
|
|
361
356
|
}, {
|
|
362
|
-
type: "
|
|
363
|
-
|
|
364
|
-
slug: string;
|
|
357
|
+
type: "vibes-diy.cli.res-skills-list";
|
|
358
|
+
skills: {
|
|
365
359
|
name: string;
|
|
360
|
+
description: string;
|
|
366
361
|
}[];
|
|
367
362
|
} | {
|
|
368
|
-
type: "
|
|
369
|
-
|
|
363
|
+
type: "vibes-diy.cli.res-skill-content";
|
|
364
|
+
name: string;
|
|
370
365
|
content: string;
|
|
371
366
|
}> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
|
|
372
367
|
type: "vibes-diy.cli.system";
|
|
@@ -442,25 +437,25 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
|
|
|
442
437
|
type: "vibes.diy.res-error";
|
|
443
438
|
error: {
|
|
444
439
|
message: string;
|
|
445
|
-
code: "
|
|
440
|
+
code: "max-app-slugs-reached";
|
|
446
441
|
};
|
|
447
442
|
} | {
|
|
448
443
|
type: "vibes.diy.res-error";
|
|
449
444
|
error: {
|
|
450
445
|
message: string;
|
|
451
|
-
code: "
|
|
446
|
+
code: "handle-required";
|
|
452
447
|
};
|
|
453
448
|
} | {
|
|
454
449
|
type: "vibes.diy.res-error";
|
|
455
450
|
error: {
|
|
456
451
|
message: string;
|
|
457
|
-
code: "
|
|
452
|
+
code: "from-not-owned";
|
|
458
453
|
};
|
|
459
454
|
} | {
|
|
460
455
|
type: "vibes.diy.res-error";
|
|
461
456
|
error: {
|
|
462
457
|
message: string;
|
|
463
|
-
code: "
|
|
458
|
+
code: "from-carry-failed";
|
|
464
459
|
};
|
|
465
460
|
}> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
|
|
466
461
|
type: "vibes-diy.cli.remix";
|
|
@@ -489,21 +484,6 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
|
|
|
489
484
|
ownerHandle?: string | undefined;
|
|
490
485
|
defaultHandleSet?: boolean | undefined;
|
|
491
486
|
suggestions: string[];
|
|
492
|
-
}> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
|
|
493
|
-
type: "vibes-diy.cli.put-asset";
|
|
494
|
-
file: string;
|
|
495
|
-
appSlug: string;
|
|
496
|
-
ownerHandle: string;
|
|
497
|
-
apiUrl: string;
|
|
498
|
-
mimeType: string;
|
|
499
|
-
verifyFetch: boolean;
|
|
500
|
-
}, {
|
|
501
|
-
type: "vibes-diy.cli.res-put-asset";
|
|
502
|
-
cid: string;
|
|
503
|
-
getURL: string;
|
|
504
|
-
size: number;
|
|
505
|
-
uploadId: string;
|
|
506
|
-
verified?: boolean | undefined;
|
|
507
487
|
}> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
|
|
508
488
|
type: "vibes-diy.cli.generate";
|
|
509
489
|
prompt: string;
|
|
@@ -513,8 +493,6 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
|
|
|
513
493
|
noAccessFn?: boolean | undefined;
|
|
514
494
|
verbose: boolean;
|
|
515
495
|
apiUrl: string;
|
|
516
|
-
dryRun: boolean;
|
|
517
|
-
transcript: boolean;
|
|
518
496
|
focusPath?: string | undefined;
|
|
519
497
|
model?: string | undefined;
|
|
520
498
|
apiKey?: string | undefined;
|
|
@@ -571,25 +549,25 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
|
|
|
571
549
|
type: "vibes.diy.res-error";
|
|
572
550
|
error: {
|
|
573
551
|
message: string;
|
|
574
|
-
code: "
|
|
552
|
+
code: "max-app-slugs-reached";
|
|
575
553
|
};
|
|
576
554
|
} | {
|
|
577
555
|
type: "vibes.diy.res-error";
|
|
578
556
|
error: {
|
|
579
557
|
message: string;
|
|
580
|
-
code: "
|
|
558
|
+
code: "handle-required";
|
|
581
559
|
};
|
|
582
560
|
} | {
|
|
583
561
|
type: "vibes.diy.res-error";
|
|
584
562
|
error: {
|
|
585
563
|
message: string;
|
|
586
|
-
code: "
|
|
564
|
+
code: "from-not-owned";
|
|
587
565
|
};
|
|
588
566
|
} | {
|
|
589
567
|
type: "vibes.diy.res-error";
|
|
590
568
|
error: {
|
|
591
569
|
message: string;
|
|
592
|
-
code: "
|
|
570
|
+
code: "from-carry-failed";
|
|
593
571
|
};
|
|
594
572
|
} | {
|
|
595
573
|
type: "vibes-diy.cli.res-generate";
|
|
@@ -597,27 +575,38 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
|
|
|
597
575
|
ownerHandle: string;
|
|
598
576
|
url: string;
|
|
599
577
|
directory: string;
|
|
600
|
-
dryRun?: boolean | undefined;
|
|
601
578
|
}> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
|
|
602
|
-
type: "vibes-diy.cli.
|
|
579
|
+
type: "vibes-diy.cli.codegen-log";
|
|
603
580
|
appSlug: string;
|
|
604
581
|
ownerHandle: string;
|
|
605
582
|
chatId?: string | undefined;
|
|
606
583
|
apiUrl: string;
|
|
584
|
+
response?: boolean | undefined;
|
|
585
|
+
raw?: boolean | undefined;
|
|
586
|
+
files?: boolean | undefined;
|
|
587
|
+
jsonl?: boolean | undefined;
|
|
588
|
+
user?: boolean | undefined;
|
|
589
|
+
promptId?: string | undefined;
|
|
607
590
|
}, {
|
|
608
|
-
type: "vibes-diy.cli.res-
|
|
591
|
+
type: "vibes-diy.cli.res-codegen-log-list";
|
|
609
592
|
items: {
|
|
610
593
|
chatId: string;
|
|
611
594
|
appSlug: string;
|
|
612
595
|
ownerHandle: string;
|
|
613
596
|
created: string;
|
|
614
|
-
userHandle?: string | undefined;
|
|
615
597
|
}[];
|
|
616
598
|
} | {
|
|
617
|
-
type: "vibes-diy.cli.res-
|
|
599
|
+
type: "vibes-diy.cli.res-codegen-log-detail";
|
|
618
600
|
chatId: string;
|
|
619
|
-
ownerHandle
|
|
620
|
-
appSlug
|
|
601
|
+
ownerHandle: string;
|
|
602
|
+
appSlug: string;
|
|
603
|
+
prompts: {
|
|
604
|
+
prompt: string;
|
|
605
|
+
fsId: string;
|
|
606
|
+
created: string;
|
|
607
|
+
}[];
|
|
608
|
+
} | {
|
|
609
|
+
type: "vibes-diy.cli.res-codegen-log-response";
|
|
621
610
|
output: string;
|
|
622
611
|
}> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
|
|
623
612
|
type: "vibes-diy.cli.edit";
|
|
@@ -687,25 +676,25 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
|
|
|
687
676
|
type: "vibes.diy.res-error";
|
|
688
677
|
error: {
|
|
689
678
|
message: string;
|
|
690
|
-
code: "
|
|
679
|
+
code: "max-app-slugs-reached";
|
|
691
680
|
};
|
|
692
681
|
} | {
|
|
693
682
|
type: "vibes.diy.res-error";
|
|
694
683
|
error: {
|
|
695
684
|
message: string;
|
|
696
|
-
code: "
|
|
685
|
+
code: "handle-required";
|
|
697
686
|
};
|
|
698
687
|
} | {
|
|
699
688
|
type: "vibes.diy.res-error";
|
|
700
689
|
error: {
|
|
701
690
|
message: string;
|
|
702
|
-
code: "
|
|
691
|
+
code: "from-not-owned";
|
|
703
692
|
};
|
|
704
693
|
} | {
|
|
705
694
|
type: "vibes.diy.res-error";
|
|
706
695
|
error: {
|
|
707
696
|
message: string;
|
|
708
|
-
code: "
|
|
697
|
+
code: "from-carry-failed";
|
|
709
698
|
};
|
|
710
699
|
} | {
|
|
711
700
|
type: "vibes-diy.cli.res-edit";
|
|
@@ -827,19 +816,14 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
|
|
|
827
816
|
userId: string;
|
|
828
817
|
cleared: string[];
|
|
829
818
|
}> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
|
|
830
|
-
type: "vibes-diy.cli.db.
|
|
819
|
+
type: "vibes-diy.cli.db.list";
|
|
831
820
|
apiUrl: string;
|
|
832
821
|
appSlug: string;
|
|
833
822
|
ownerHandle: string;
|
|
834
|
-
dbName: string;
|
|
835
|
-
docId: string;
|
|
836
823
|
admin: boolean;
|
|
837
|
-
actingHandle: string;
|
|
838
824
|
}, {
|
|
839
|
-
type: "vibes-diy.cli.db.
|
|
840
|
-
|
|
841
|
-
[x: string]: unknown;
|
|
842
|
-
};
|
|
825
|
+
type: "vibes-diy.cli.db.list-res";
|
|
826
|
+
dbNames: string[];
|
|
843
827
|
}> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
|
|
844
828
|
type: "vibes-diy.cli.db.put";
|
|
845
829
|
apiUrl: string;
|
|
@@ -868,10 +852,23 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
|
|
|
868
852
|
id: string;
|
|
869
853
|
ok: true;
|
|
870
854
|
}> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
|
|
871
|
-
type: "vibes-diy.cli.db.
|
|
855
|
+
type: "vibes-diy.cli.db.query";
|
|
872
856
|
apiUrl: string;
|
|
873
857
|
appSlug: string;
|
|
874
858
|
ownerHandle: string;
|
|
875
859
|
dbName: string;
|
|
876
|
-
|
|
860
|
+
field: string;
|
|
861
|
+
key: string;
|
|
862
|
+
prefix: string;
|
|
863
|
+
range: string;
|
|
864
|
+
limit: number;
|
|
865
|
+
descending: boolean;
|
|
866
|
+
admin: boolean;
|
|
867
|
+
actingHandle: string;
|
|
868
|
+
}, {
|
|
869
|
+
type: "vibes-diy.cli.db.query-res";
|
|
870
|
+
docs: {
|
|
871
|
+
[x: string]: unknown;
|
|
872
|
+
}[];
|
|
873
|
+
}>)[];
|
|
877
874
|
export declare function cmdTsEvento(): import("@adviser/cement").Evento;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import type { ResError, SectionEvent } from "@vibes.diy/api-types";
|
|
3
|
+
import { resolveSectionStream, type ResolveSectionStreamResult } from "./resolve-section-stream.js";
|
|
4
|
+
export declare const AGENT_TURN_CEILING_MS = 900000;
|
|
5
|
+
export interface FollowChatBuildChat {
|
|
6
|
+
readonly chatId: string;
|
|
7
|
+
readonly ownerHandle: string;
|
|
8
|
+
readonly appSlug: string;
|
|
9
|
+
readonly sectionStream: ReadableStream<unknown>;
|
|
10
|
+
}
|
|
11
|
+
export interface FollowChatBuildOpts {
|
|
12
|
+
readonly chat: FollowChatBuildChat;
|
|
13
|
+
readonly onSectionEvent?: (ev: SectionEvent) => void;
|
|
14
|
+
readonly onUpstreamError?: (err: ResError) => void;
|
|
15
|
+
readonly onProgress?: (msg: string) => void;
|
|
16
|
+
readonly onSnapshot?: Parameters<typeof resolveSectionStream>[0]["onSnapshot"];
|
|
17
|
+
readonly onError?: Parameters<typeof resolveSectionStream>[0]["onError"];
|
|
18
|
+
readonly deadlineMs?: number;
|
|
19
|
+
readonly startAfterPromptId?: string;
|
|
20
|
+
readonly now?: () => number;
|
|
21
|
+
}
|
|
22
|
+
export interface FollowChatBuildOk {
|
|
23
|
+
readonly ownerHandle: string;
|
|
24
|
+
readonly appSlug: string;
|
|
25
|
+
readonly claimed: boolean;
|
|
26
|
+
readonly buildPromptId: string;
|
|
27
|
+
readonly resolved: ResolveSectionStreamResult;
|
|
28
|
+
}
|
|
29
|
+
export declare function followChatBuild(opts: FollowChatBuildOpts): Promise<Result<FollowChatBuildOk>>;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import { isEvtChatAppClaimed, isPromptBlockEnd, isPromptError, isPromptRaw, isPromptReq, isResError, isSectionEvent, } from "@vibes.diy/api-types";
|
|
3
|
+
import { resolveSectionStream } from "./resolve-section-stream.js";
|
|
4
|
+
export const AGENT_TURN_CEILING_MS = 900_000;
|
|
5
|
+
function agentAnswer(prose, errors) {
|
|
6
|
+
const said = prose.trim();
|
|
7
|
+
const why = errors.length > 0 ? ` (${errors.join("; ")})` : "";
|
|
8
|
+
if (said.length === 0)
|
|
9
|
+
return `The agent ended its turn without building anything${why}.`;
|
|
10
|
+
return `The agent answered instead of building${why}: ${said}`;
|
|
11
|
+
}
|
|
12
|
+
async function readBounded(reader, deadlineAt, now) {
|
|
13
|
+
const remaining = deadlineAt - now();
|
|
14
|
+
if (remaining <= 0)
|
|
15
|
+
return { kind: "deadline" };
|
|
16
|
+
let timer;
|
|
17
|
+
const expiry = new Promise((res) => {
|
|
18
|
+
timer = setTimeout(() => res("deadline"), remaining);
|
|
19
|
+
});
|
|
20
|
+
const raced = await Promise.race([reader.read(), expiry]);
|
|
21
|
+
if (timer !== undefined)
|
|
22
|
+
clearTimeout(timer);
|
|
23
|
+
if (raced === "deadline")
|
|
24
|
+
return { kind: "deadline" };
|
|
25
|
+
if (raced.done === true)
|
|
26
|
+
return { kind: "done" };
|
|
27
|
+
return { kind: "value", value: raced.value };
|
|
28
|
+
}
|
|
29
|
+
export async function followChatBuild(opts) {
|
|
30
|
+
const now = opts.now ?? (() => Date.now());
|
|
31
|
+
const deadlineAt = now() + (opts.deadlineMs ?? AGENT_TURN_CEILING_MS);
|
|
32
|
+
const reader = opts.chat.sectionStream.getReader();
|
|
33
|
+
let ownerHandle = opts.chat.ownerHandle;
|
|
34
|
+
let appSlug = opts.chat.appSlug;
|
|
35
|
+
let claimed = false;
|
|
36
|
+
let buildPromptId;
|
|
37
|
+
const buffered = [];
|
|
38
|
+
const agentProse = [];
|
|
39
|
+
const promptErrors = [];
|
|
40
|
+
const agentTurnsEnded = new Set();
|
|
41
|
+
const agentTurnsSeen = new Set();
|
|
42
|
+
let live = opts.startAfterPromptId === undefined;
|
|
43
|
+
let writer;
|
|
44
|
+
let resolving;
|
|
45
|
+
let resolverSettled = new Promise(() => undefined);
|
|
46
|
+
const startResolving = async (streamId) => {
|
|
47
|
+
const ts = new TransformStream();
|
|
48
|
+
writer = ts.writable.getWriter();
|
|
49
|
+
resolving = resolveSectionStream({
|
|
50
|
+
sectionStream: ts.readable,
|
|
51
|
+
streamId,
|
|
52
|
+
...(opts.onSnapshot === undefined ? {} : { onSnapshot: opts.onSnapshot }),
|
|
53
|
+
...(opts.onError === undefined ? {} : { onError: opts.onError }),
|
|
54
|
+
});
|
|
55
|
+
resolverSettled = resolving.then(() => ({ kind: "resolved" }));
|
|
56
|
+
for (const ev of buffered.splice(0))
|
|
57
|
+
await writer.write(ev);
|
|
58
|
+
};
|
|
59
|
+
const finish = async () => {
|
|
60
|
+
if (writer !== undefined)
|
|
61
|
+
await writer.close().catch(() => undefined);
|
|
62
|
+
if (buildPromptId === undefined || resolving === undefined) {
|
|
63
|
+
return Result.Err(agentAnswer(agentProse.join(""), promptErrors));
|
|
64
|
+
}
|
|
65
|
+
const r = await resolving;
|
|
66
|
+
if (r.isErr())
|
|
67
|
+
return Result.Err(r.Err());
|
|
68
|
+
return Result.Ok({ ownerHandle, appSlug, claimed, buildPromptId, resolved: r.Ok() });
|
|
69
|
+
};
|
|
70
|
+
for (;;) {
|
|
71
|
+
const read = await Promise.race([readBounded(reader, deadlineAt, now), resolverSettled]);
|
|
72
|
+
if (read.kind === "resolved") {
|
|
73
|
+
await reader.cancel().catch(() => undefined);
|
|
74
|
+
return finish();
|
|
75
|
+
}
|
|
76
|
+
if (read.kind !== "value") {
|
|
77
|
+
await reader.cancel().catch(() => undefined);
|
|
78
|
+
return finish();
|
|
79
|
+
}
|
|
80
|
+
const msg = read.value;
|
|
81
|
+
if (isEvtChatAppClaimed(msg)) {
|
|
82
|
+
if (msg.chatId === opts.chat.chatId) {
|
|
83
|
+
ownerHandle = msg.ownerHandle;
|
|
84
|
+
appSlug = msg.appSlug;
|
|
85
|
+
claimed = true;
|
|
86
|
+
opts.onProgress?.(`Building ${ownerHandle}/${appSlug}...`);
|
|
87
|
+
}
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (isResError(msg)) {
|
|
91
|
+
opts.onUpstreamError?.(msg);
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (!isSectionEvent(msg))
|
|
95
|
+
continue;
|
|
96
|
+
const ev = msg;
|
|
97
|
+
opts.onSectionEvent?.(ev);
|
|
98
|
+
for (const raw of ev.blocks) {
|
|
99
|
+
const block = raw;
|
|
100
|
+
if (!live) {
|
|
101
|
+
if (block.streamId === opts.startAfterPromptId)
|
|
102
|
+
live = true;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (isPromptReq(block)) {
|
|
106
|
+
const req = block;
|
|
107
|
+
if (req.agentDispatched === true)
|
|
108
|
+
buildPromptId ??= req.streamId;
|
|
109
|
+
else
|
|
110
|
+
agentTurnsSeen.add(req.streamId);
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (buildPromptId === undefined && typeof block.type === "string") {
|
|
114
|
+
const t = block.type;
|
|
115
|
+
if (t.startsWith("block.code."))
|
|
116
|
+
buildPromptId ??= block.streamId;
|
|
117
|
+
}
|
|
118
|
+
if (isPromptRaw(block)) {
|
|
119
|
+
const rawMsg = block;
|
|
120
|
+
if (rawMsg.streamId !== buildPromptId)
|
|
121
|
+
agentProse.push(rawMsg.text);
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if (isPromptError(block)) {
|
|
125
|
+
promptErrors.push(block.error);
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (isPromptBlockEnd(block)) {
|
|
129
|
+
const streamId = block.streamId;
|
|
130
|
+
if (streamId !== undefined && streamId !== buildPromptId)
|
|
131
|
+
agentTurnsEnded.add(streamId);
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (buildPromptId !== undefined && resolving === undefined) {
|
|
136
|
+
await startResolving(buildPromptId);
|
|
137
|
+
}
|
|
138
|
+
if (writer !== undefined)
|
|
139
|
+
await writer.write(ev);
|
|
140
|
+
else
|
|
141
|
+
buffered.push(ev);
|
|
142
|
+
if (resolving !== undefined)
|
|
143
|
+
continue;
|
|
144
|
+
if (agentTurnsSeen.size > 0 && agentTurnsEnded.size >= agentTurnsSeen.size) {
|
|
145
|
+
await reader.cancel().catch(() => undefined);
|
|
146
|
+
return finish();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=follow-chat-build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"follow-chat-build.js","sourceRoot":"","sources":["../../../jsr/cli/cmds/follow-chat-build.ts"],"names":[],"mappings":"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"}
|