@codeworksh/plugin 0.3.0-canary.82.1.g33702b61 → 0.3.0-canary.84.1.gce0dac2c
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/{event-C6-oCzlq.d.mts → event-B4EXJQcU.d.mts} +354 -51
- package/event.d.mts +2 -2
- package/event.mjs +15 -3
- package/event.mjs.map +1 -1
- package/index.d.mts +1 -1
- package/package.json +2 -2
- package/{plugin-Cj56-eXk.d.mts → plugin-DWhny4p-.d.mts} +2 -2
- package/plugin.d.mts +1 -1
- package/schema.d.mts +2 -0
- package/schema.mjs +3 -1
- package/schema.mjs.map +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Schema } from "effect";
|
|
2
2
|
declare namespace event_d_exports {
|
|
3
|
-
export { AikitAssistantMessage, AikitToolCallTerminalPart, Data, Definition, event_d_exports as EventSchema, ID, Payload, PublishOptions, define, durable, inventory, latest, versionedType };
|
|
3
|
+
export { AikitAssistantMessage, AikitAssistantPart, AikitToolCallTerminalPart, Data, Definition, event_d_exports as EventSchema, ID, Payload, PublishOptions, define, durable, inventory, latest, versionedType };
|
|
4
4
|
}
|
|
5
5
|
/**
|
|
6
6
|
* Effect Schema adapter for aikit's TypeBox assistant message. Durable LLM
|
|
@@ -149,25 +149,12 @@ declare const AikitAssistantMessage: Schema.decodeTo<Schema.declare<{
|
|
|
149
149
|
completed: number;
|
|
150
150
|
};
|
|
151
151
|
parts: ({
|
|
152
|
-
type: "text";
|
|
153
|
-
text: string;
|
|
154
|
-
textSignature?: string;
|
|
155
|
-
} | {
|
|
156
|
-
type: "image";
|
|
157
|
-
data: string;
|
|
158
|
-
mimeType: string;
|
|
159
|
-
} | {
|
|
160
|
-
type: "thinking";
|
|
161
|
-
thinking: string;
|
|
162
|
-
thinkingSignature?: string;
|
|
163
|
-
redacted?: boolean;
|
|
164
|
-
} | {
|
|
165
152
|
arguments: Record<string, any>;
|
|
166
153
|
callID: string;
|
|
167
154
|
name: string;
|
|
168
155
|
namespace?: string;
|
|
169
|
-
|
|
170
|
-
content
|
|
156
|
+
result: {
|
|
157
|
+
content: ({
|
|
171
158
|
type: "text";
|
|
172
159
|
text: string;
|
|
173
160
|
textSignature?: string;
|
|
@@ -177,8 +164,9 @@ declare const AikitAssistantMessage: Schema.decodeTo<Schema.declare<{
|
|
|
177
164
|
mimeType: string;
|
|
178
165
|
})[];
|
|
179
166
|
details?: any;
|
|
167
|
+
isError: false;
|
|
180
168
|
};
|
|
181
|
-
status: "
|
|
169
|
+
status: "completed";
|
|
182
170
|
thoughtSignature?: string;
|
|
183
171
|
time: {
|
|
184
172
|
start: number;
|
|
@@ -201,9 +189,9 @@ declare const AikitAssistantMessage: Schema.decodeTo<Schema.declare<{
|
|
|
201
189
|
mimeType: string;
|
|
202
190
|
})[];
|
|
203
191
|
details?: any;
|
|
204
|
-
isError:
|
|
192
|
+
isError: true;
|
|
205
193
|
};
|
|
206
|
-
status: "
|
|
194
|
+
status: "error";
|
|
207
195
|
thoughtSignature?: string;
|
|
208
196
|
time: {
|
|
209
197
|
start: number;
|
|
@@ -228,7 +216,7 @@ declare const AikitAssistantMessage: Schema.decodeTo<Schema.declare<{
|
|
|
228
216
|
details?: any;
|
|
229
217
|
isError: true;
|
|
230
218
|
};
|
|
231
|
-
status: "
|
|
219
|
+
status: "skipped";
|
|
232
220
|
thoughtSignature?: string;
|
|
233
221
|
time: {
|
|
234
222
|
start: number;
|
|
@@ -253,20 +241,33 @@ declare const AikitAssistantMessage: Schema.decodeTo<Schema.declare<{
|
|
|
253
241
|
details?: any;
|
|
254
242
|
isError: true;
|
|
255
243
|
};
|
|
256
|
-
status: "
|
|
244
|
+
status: "aborted";
|
|
257
245
|
thoughtSignature?: string;
|
|
258
246
|
time: {
|
|
259
247
|
start: number;
|
|
260
248
|
end: number;
|
|
261
249
|
};
|
|
262
250
|
type: "toolCall";
|
|
251
|
+
} | {
|
|
252
|
+
type: "text";
|
|
253
|
+
text: string;
|
|
254
|
+
textSignature?: string;
|
|
255
|
+
} | {
|
|
256
|
+
type: "image";
|
|
257
|
+
data: string;
|
|
258
|
+
mimeType: string;
|
|
259
|
+
} | {
|
|
260
|
+
type: "thinking";
|
|
261
|
+
thinking: string;
|
|
262
|
+
thinkingSignature?: string;
|
|
263
|
+
redacted?: boolean;
|
|
263
264
|
} | {
|
|
264
265
|
arguments: Record<string, any>;
|
|
265
266
|
callID: string;
|
|
266
267
|
name: string;
|
|
267
268
|
namespace?: string;
|
|
268
|
-
|
|
269
|
-
content
|
|
269
|
+
partial?: {
|
|
270
|
+
content?: ({
|
|
270
271
|
type: "text";
|
|
271
272
|
text: string;
|
|
272
273
|
textSignature?: string;
|
|
@@ -276,9 +277,8 @@ declare const AikitAssistantMessage: Schema.decodeTo<Schema.declare<{
|
|
|
276
277
|
mimeType: string;
|
|
277
278
|
})[];
|
|
278
279
|
details?: any;
|
|
279
|
-
isError: true;
|
|
280
280
|
};
|
|
281
|
-
status: "
|
|
281
|
+
status: "running";
|
|
282
282
|
thoughtSignature?: string;
|
|
283
283
|
time: {
|
|
284
284
|
start: number;
|
|
@@ -445,25 +445,12 @@ declare const AikitAssistantMessage: Schema.decodeTo<Schema.declare<{
|
|
|
445
445
|
completed: number;
|
|
446
446
|
};
|
|
447
447
|
parts: ({
|
|
448
|
-
type: "text";
|
|
449
|
-
text: string;
|
|
450
|
-
textSignature?: string;
|
|
451
|
-
} | {
|
|
452
|
-
type: "image";
|
|
453
|
-
data: string;
|
|
454
|
-
mimeType: string;
|
|
455
|
-
} | {
|
|
456
|
-
type: "thinking";
|
|
457
|
-
thinking: string;
|
|
458
|
-
thinkingSignature?: string;
|
|
459
|
-
redacted?: boolean;
|
|
460
|
-
} | {
|
|
461
448
|
arguments: Record<string, any>;
|
|
462
449
|
callID: string;
|
|
463
450
|
name: string;
|
|
464
451
|
namespace?: string;
|
|
465
|
-
|
|
466
|
-
content
|
|
452
|
+
result: {
|
|
453
|
+
content: ({
|
|
467
454
|
type: "text";
|
|
468
455
|
text: string;
|
|
469
456
|
textSignature?: string;
|
|
@@ -473,8 +460,9 @@ declare const AikitAssistantMessage: Schema.decodeTo<Schema.declare<{
|
|
|
473
460
|
mimeType: string;
|
|
474
461
|
})[];
|
|
475
462
|
details?: any;
|
|
463
|
+
isError: false;
|
|
476
464
|
};
|
|
477
|
-
status: "
|
|
465
|
+
status: "completed";
|
|
478
466
|
thoughtSignature?: string;
|
|
479
467
|
time: {
|
|
480
468
|
start: number;
|
|
@@ -497,9 +485,9 @@ declare const AikitAssistantMessage: Schema.decodeTo<Schema.declare<{
|
|
|
497
485
|
mimeType: string;
|
|
498
486
|
})[];
|
|
499
487
|
details?: any;
|
|
500
|
-
isError:
|
|
488
|
+
isError: true;
|
|
501
489
|
};
|
|
502
|
-
status: "
|
|
490
|
+
status: "error";
|
|
503
491
|
thoughtSignature?: string;
|
|
504
492
|
time: {
|
|
505
493
|
start: number;
|
|
@@ -524,7 +512,7 @@ declare const AikitAssistantMessage: Schema.decodeTo<Schema.declare<{
|
|
|
524
512
|
details?: any;
|
|
525
513
|
isError: true;
|
|
526
514
|
};
|
|
527
|
-
status: "
|
|
515
|
+
status: "skipped";
|
|
528
516
|
thoughtSignature?: string;
|
|
529
517
|
time: {
|
|
530
518
|
start: number;
|
|
@@ -549,20 +537,33 @@ declare const AikitAssistantMessage: Schema.decodeTo<Schema.declare<{
|
|
|
549
537
|
details?: any;
|
|
550
538
|
isError: true;
|
|
551
539
|
};
|
|
552
|
-
status: "
|
|
540
|
+
status: "aborted";
|
|
553
541
|
thoughtSignature?: string;
|
|
554
542
|
time: {
|
|
555
543
|
start: number;
|
|
556
544
|
end: number;
|
|
557
545
|
};
|
|
558
546
|
type: "toolCall";
|
|
547
|
+
} | {
|
|
548
|
+
type: "text";
|
|
549
|
+
text: string;
|
|
550
|
+
textSignature?: string;
|
|
551
|
+
} | {
|
|
552
|
+
type: "image";
|
|
553
|
+
data: string;
|
|
554
|
+
mimeType: string;
|
|
555
|
+
} | {
|
|
556
|
+
type: "thinking";
|
|
557
|
+
thinking: string;
|
|
558
|
+
thinkingSignature?: string;
|
|
559
|
+
redacted?: boolean;
|
|
559
560
|
} | {
|
|
560
561
|
arguments: Record<string, any>;
|
|
561
562
|
callID: string;
|
|
562
563
|
name: string;
|
|
563
564
|
namespace?: string;
|
|
564
|
-
|
|
565
|
-
content
|
|
565
|
+
partial?: {
|
|
566
|
+
content?: ({
|
|
566
567
|
type: "text";
|
|
567
568
|
text: string;
|
|
568
569
|
textSignature?: string;
|
|
@@ -572,9 +573,8 @@ declare const AikitAssistantMessage: Schema.decodeTo<Schema.declare<{
|
|
|
572
573
|
mimeType: string;
|
|
573
574
|
})[];
|
|
574
575
|
details?: any;
|
|
575
|
-
isError: true;
|
|
576
576
|
};
|
|
577
|
-
status: "
|
|
577
|
+
status: "running";
|
|
578
578
|
thoughtSignature?: string;
|
|
579
579
|
time: {
|
|
580
580
|
start: number;
|
|
@@ -600,6 +600,309 @@ declare const AikitAssistantMessage: Schema.decodeTo<Schema.declare<{
|
|
|
600
600
|
messageId: string;
|
|
601
601
|
}>, Schema.Unknown, never, never>;
|
|
602
602
|
type AikitAssistantMessage = typeof AikitAssistantMessage.Type;
|
|
603
|
+
/** One part of an aikit assistant message, streaming-only fields stripped like {@link AikitAssistantMessage}. */
|
|
604
|
+
declare const AikitAssistantPart: Schema.decodeTo<Schema.declare<{
|
|
605
|
+
arguments: Record<string, any>;
|
|
606
|
+
callID: string;
|
|
607
|
+
name: string;
|
|
608
|
+
namespace?: string;
|
|
609
|
+
result: {
|
|
610
|
+
content: ({
|
|
611
|
+
type: "text";
|
|
612
|
+
text: string;
|
|
613
|
+
textSignature?: string;
|
|
614
|
+
} | {
|
|
615
|
+
type: "image";
|
|
616
|
+
data: string;
|
|
617
|
+
mimeType: string;
|
|
618
|
+
})[];
|
|
619
|
+
details?: any;
|
|
620
|
+
isError: false;
|
|
621
|
+
};
|
|
622
|
+
status: "completed";
|
|
623
|
+
thoughtSignature?: string;
|
|
624
|
+
time: {
|
|
625
|
+
start: number;
|
|
626
|
+
end: number;
|
|
627
|
+
};
|
|
628
|
+
type: "toolCall";
|
|
629
|
+
} | {
|
|
630
|
+
arguments: Record<string, any>;
|
|
631
|
+
callID: string;
|
|
632
|
+
name: string;
|
|
633
|
+
namespace?: string;
|
|
634
|
+
result: {
|
|
635
|
+
content: ({
|
|
636
|
+
type: "text";
|
|
637
|
+
text: string;
|
|
638
|
+
textSignature?: string;
|
|
639
|
+
} | {
|
|
640
|
+
type: "image";
|
|
641
|
+
data: string;
|
|
642
|
+
mimeType: string;
|
|
643
|
+
})[];
|
|
644
|
+
details?: any;
|
|
645
|
+
isError: true;
|
|
646
|
+
};
|
|
647
|
+
status: "error";
|
|
648
|
+
thoughtSignature?: string;
|
|
649
|
+
time: {
|
|
650
|
+
start: number;
|
|
651
|
+
end: number;
|
|
652
|
+
};
|
|
653
|
+
type: "toolCall";
|
|
654
|
+
} | {
|
|
655
|
+
arguments: Record<string, any>;
|
|
656
|
+
callID: string;
|
|
657
|
+
name: string;
|
|
658
|
+
namespace?: string;
|
|
659
|
+
result: {
|
|
660
|
+
content: ({
|
|
661
|
+
type: "text";
|
|
662
|
+
text: string;
|
|
663
|
+
textSignature?: string;
|
|
664
|
+
} | {
|
|
665
|
+
type: "image";
|
|
666
|
+
data: string;
|
|
667
|
+
mimeType: string;
|
|
668
|
+
})[];
|
|
669
|
+
details?: any;
|
|
670
|
+
isError: true;
|
|
671
|
+
};
|
|
672
|
+
status: "skipped";
|
|
673
|
+
thoughtSignature?: string;
|
|
674
|
+
time: {
|
|
675
|
+
start: number;
|
|
676
|
+
end: number;
|
|
677
|
+
};
|
|
678
|
+
type: "toolCall";
|
|
679
|
+
} | {
|
|
680
|
+
arguments: Record<string, any>;
|
|
681
|
+
callID: string;
|
|
682
|
+
name: string;
|
|
683
|
+
namespace?: string;
|
|
684
|
+
result: {
|
|
685
|
+
content: ({
|
|
686
|
+
type: "text";
|
|
687
|
+
text: string;
|
|
688
|
+
textSignature?: string;
|
|
689
|
+
} | {
|
|
690
|
+
type: "image";
|
|
691
|
+
data: string;
|
|
692
|
+
mimeType: string;
|
|
693
|
+
})[];
|
|
694
|
+
details?: any;
|
|
695
|
+
isError: true;
|
|
696
|
+
};
|
|
697
|
+
status: "aborted";
|
|
698
|
+
thoughtSignature?: string;
|
|
699
|
+
time: {
|
|
700
|
+
start: number;
|
|
701
|
+
end: number;
|
|
702
|
+
};
|
|
703
|
+
type: "toolCall";
|
|
704
|
+
} | {
|
|
705
|
+
type: "text";
|
|
706
|
+
text: string;
|
|
707
|
+
textSignature?: string;
|
|
708
|
+
} | {
|
|
709
|
+
type: "image";
|
|
710
|
+
data: string;
|
|
711
|
+
mimeType: string;
|
|
712
|
+
} | {
|
|
713
|
+
type: "thinking";
|
|
714
|
+
thinking: string;
|
|
715
|
+
thinkingSignature?: string;
|
|
716
|
+
redacted?: boolean;
|
|
717
|
+
} | {
|
|
718
|
+
arguments: Record<string, any>;
|
|
719
|
+
callID: string;
|
|
720
|
+
name: string;
|
|
721
|
+
namespace?: string;
|
|
722
|
+
partial?: {
|
|
723
|
+
content?: ({
|
|
724
|
+
type: "text";
|
|
725
|
+
text: string;
|
|
726
|
+
textSignature?: string;
|
|
727
|
+
} | {
|
|
728
|
+
type: "image";
|
|
729
|
+
data: string;
|
|
730
|
+
mimeType: string;
|
|
731
|
+
})[];
|
|
732
|
+
details?: any;
|
|
733
|
+
};
|
|
734
|
+
status: "running";
|
|
735
|
+
thoughtSignature?: string;
|
|
736
|
+
time: {
|
|
737
|
+
start: number;
|
|
738
|
+
end: number;
|
|
739
|
+
};
|
|
740
|
+
type: "toolCall";
|
|
741
|
+
} | ({
|
|
742
|
+
type: "toolCall";
|
|
743
|
+
callID: string;
|
|
744
|
+
name: string;
|
|
745
|
+
arguments: Record<string, any>;
|
|
746
|
+
thoughtSignature?: string;
|
|
747
|
+
namespace?: string;
|
|
748
|
+
time: {
|
|
749
|
+
start: number;
|
|
750
|
+
end: number;
|
|
751
|
+
};
|
|
752
|
+
} & {
|
|
753
|
+
status: "pending";
|
|
754
|
+
}), {
|
|
755
|
+
arguments: Record<string, any>;
|
|
756
|
+
callID: string;
|
|
757
|
+
name: string;
|
|
758
|
+
namespace?: string;
|
|
759
|
+
result: {
|
|
760
|
+
content: ({
|
|
761
|
+
type: "text";
|
|
762
|
+
text: string;
|
|
763
|
+
textSignature?: string;
|
|
764
|
+
} | {
|
|
765
|
+
type: "image";
|
|
766
|
+
data: string;
|
|
767
|
+
mimeType: string;
|
|
768
|
+
})[];
|
|
769
|
+
details?: any;
|
|
770
|
+
isError: false;
|
|
771
|
+
};
|
|
772
|
+
status: "completed";
|
|
773
|
+
thoughtSignature?: string;
|
|
774
|
+
time: {
|
|
775
|
+
start: number;
|
|
776
|
+
end: number;
|
|
777
|
+
};
|
|
778
|
+
type: "toolCall";
|
|
779
|
+
} | {
|
|
780
|
+
arguments: Record<string, any>;
|
|
781
|
+
callID: string;
|
|
782
|
+
name: string;
|
|
783
|
+
namespace?: string;
|
|
784
|
+
result: {
|
|
785
|
+
content: ({
|
|
786
|
+
type: "text";
|
|
787
|
+
text: string;
|
|
788
|
+
textSignature?: string;
|
|
789
|
+
} | {
|
|
790
|
+
type: "image";
|
|
791
|
+
data: string;
|
|
792
|
+
mimeType: string;
|
|
793
|
+
})[];
|
|
794
|
+
details?: any;
|
|
795
|
+
isError: true;
|
|
796
|
+
};
|
|
797
|
+
status: "error";
|
|
798
|
+
thoughtSignature?: string;
|
|
799
|
+
time: {
|
|
800
|
+
start: number;
|
|
801
|
+
end: number;
|
|
802
|
+
};
|
|
803
|
+
type: "toolCall";
|
|
804
|
+
} | {
|
|
805
|
+
arguments: Record<string, any>;
|
|
806
|
+
callID: string;
|
|
807
|
+
name: string;
|
|
808
|
+
namespace?: string;
|
|
809
|
+
result: {
|
|
810
|
+
content: ({
|
|
811
|
+
type: "text";
|
|
812
|
+
text: string;
|
|
813
|
+
textSignature?: string;
|
|
814
|
+
} | {
|
|
815
|
+
type: "image";
|
|
816
|
+
data: string;
|
|
817
|
+
mimeType: string;
|
|
818
|
+
})[];
|
|
819
|
+
details?: any;
|
|
820
|
+
isError: true;
|
|
821
|
+
};
|
|
822
|
+
status: "skipped";
|
|
823
|
+
thoughtSignature?: string;
|
|
824
|
+
time: {
|
|
825
|
+
start: number;
|
|
826
|
+
end: number;
|
|
827
|
+
};
|
|
828
|
+
type: "toolCall";
|
|
829
|
+
} | {
|
|
830
|
+
arguments: Record<string, any>;
|
|
831
|
+
callID: string;
|
|
832
|
+
name: string;
|
|
833
|
+
namespace?: string;
|
|
834
|
+
result: {
|
|
835
|
+
content: ({
|
|
836
|
+
type: "text";
|
|
837
|
+
text: string;
|
|
838
|
+
textSignature?: string;
|
|
839
|
+
} | {
|
|
840
|
+
type: "image";
|
|
841
|
+
data: string;
|
|
842
|
+
mimeType: string;
|
|
843
|
+
})[];
|
|
844
|
+
details?: any;
|
|
845
|
+
isError: true;
|
|
846
|
+
};
|
|
847
|
+
status: "aborted";
|
|
848
|
+
thoughtSignature?: string;
|
|
849
|
+
time: {
|
|
850
|
+
start: number;
|
|
851
|
+
end: number;
|
|
852
|
+
};
|
|
853
|
+
type: "toolCall";
|
|
854
|
+
} | {
|
|
855
|
+
type: "text";
|
|
856
|
+
text: string;
|
|
857
|
+
textSignature?: string;
|
|
858
|
+
} | {
|
|
859
|
+
type: "image";
|
|
860
|
+
data: string;
|
|
861
|
+
mimeType: string;
|
|
862
|
+
} | {
|
|
863
|
+
type: "thinking";
|
|
864
|
+
thinking: string;
|
|
865
|
+
thinkingSignature?: string;
|
|
866
|
+
redacted?: boolean;
|
|
867
|
+
} | {
|
|
868
|
+
arguments: Record<string, any>;
|
|
869
|
+
callID: string;
|
|
870
|
+
name: string;
|
|
871
|
+
namespace?: string;
|
|
872
|
+
partial?: {
|
|
873
|
+
content?: ({
|
|
874
|
+
type: "text";
|
|
875
|
+
text: string;
|
|
876
|
+
textSignature?: string;
|
|
877
|
+
} | {
|
|
878
|
+
type: "image";
|
|
879
|
+
data: string;
|
|
880
|
+
mimeType: string;
|
|
881
|
+
})[];
|
|
882
|
+
details?: any;
|
|
883
|
+
};
|
|
884
|
+
status: "running";
|
|
885
|
+
thoughtSignature?: string;
|
|
886
|
+
time: {
|
|
887
|
+
start: number;
|
|
888
|
+
end: number;
|
|
889
|
+
};
|
|
890
|
+
type: "toolCall";
|
|
891
|
+
} | ({
|
|
892
|
+
type: "toolCall";
|
|
893
|
+
callID: string;
|
|
894
|
+
name: string;
|
|
895
|
+
arguments: Record<string, any>;
|
|
896
|
+
thoughtSignature?: string;
|
|
897
|
+
namespace?: string;
|
|
898
|
+
time: {
|
|
899
|
+
start: number;
|
|
900
|
+
end: number;
|
|
901
|
+
};
|
|
902
|
+
} & {
|
|
903
|
+
status: "pending";
|
|
904
|
+
})>, Schema.Unknown, never, never>;
|
|
905
|
+
type AikitAssistantPart = typeof AikitAssistantPart.Type;
|
|
603
906
|
declare const AikitToolCallTerminalPart: Schema.decodeTo<Schema.declare<{
|
|
604
907
|
arguments: Record<string, any>;
|
|
605
908
|
callID: string;
|
|
@@ -875,5 +1178,5 @@ declare function versionedType(type: string, version: number): string;
|
|
|
875
1178
|
declare function durable<const Definitions extends ReadonlyArray<Definition>>(definitions: Definitions): ReadonlyMap<string, Definitions[number]>;
|
|
876
1179
|
declare function latest(definitions: ReadonlyArray<Definition>): ReadonlyMap<string, Definition<string, Schema.Codec<unknown, unknown, never, never>>>;
|
|
877
1180
|
//#endregion
|
|
878
|
-
export {
|
|
879
|
-
//# sourceMappingURL=event-
|
|
1181
|
+
export { Definition as a, PublishOptions as c, event_d_exports as d, inventory as f, Data as i, define as l, versionedType as m, AikitAssistantPart as n, ID as o, latest as p, AikitToolCallTerminalPart as r, Payload as s, AikitAssistantMessage as t, durable as u };
|
|
1182
|
+
//# sourceMappingURL=event-B4EXJQcU.d.mts.map
|
package/event.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
export { AikitAssistantMessage, AikitToolCallTerminalPart, Data, Definition, event_d_exports as EventSchema, ID, Payload, PublishOptions, define, durable, inventory, latest, versionedType };
|
|
1
|
+
import { a as Definition, c as PublishOptions, d as event_d_exports, f as inventory, i as Data, l as define, m as versionedType, n as AikitAssistantPart, o as ID, p as latest, r as AikitToolCallTerminalPart, s as Payload, t as AikitAssistantMessage, u as durable } from "./event-B4EXJQcU.mjs";
|
|
2
|
+
export { AikitAssistantMessage, AikitAssistantPart, AikitToolCallTerminalPart, Data, Definition, event_d_exports as EventSchema, ID, Payload, PublishOptions, define, durable, inventory, latest, versionedType };
|
package/event.mjs
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
2
|
-
import { isAikitAssistantMessage, isAikitToolCallTerminalPart, optional, validateAikitAssistantMessage, validateAikitToolCallTerminalPart, withStatics } from "./schema.mjs";
|
|
2
|
+
import { isAikitAssistantMessage, isAikitAssistantPart, isAikitToolCallTerminalPart, optional, validateAikitAssistantMessage, validateAikitAssistantPart, validateAikitToolCallTerminalPart, withStatics } from "./schema.mjs";
|
|
3
3
|
import "@codeworksh/aikit";
|
|
4
4
|
import { Effect, Schema, SchemaGetter, SchemaIssue } from "effect";
|
|
5
5
|
import { uuidv7 } from "uuidv7";
|
|
6
6
|
//#region src/event.ts
|
|
7
7
|
var event_exports = /* @__PURE__ */ __exportAll({
|
|
8
8
|
AikitAssistantMessage: () => AikitAssistantMessage,
|
|
9
|
+
AikitAssistantPart: () => AikitAssistantPart,
|
|
9
10
|
AikitToolCallTerminalPart: () => AikitToolCallTerminalPart,
|
|
10
11
|
EventSchema: () => event_exports,
|
|
11
12
|
ID: () => ID,
|
|
@@ -28,9 +29,10 @@ const omit = (value, keys) => {
|
|
|
28
29
|
for (const key of keys) delete copy[key];
|
|
29
30
|
return copy;
|
|
30
31
|
};
|
|
32
|
+
const canonicalizeAikitAssistantPart = (part) => omit(part, aikitTransientFields[part.type]);
|
|
31
33
|
const canonicalizeAikitAssistantMessage = (message) => ({
|
|
32
34
|
...message,
|
|
33
|
-
parts: message.parts.map(
|
|
35
|
+
parts: message.parts.map(canonicalizeAikitAssistantPart)
|
|
34
36
|
});
|
|
35
37
|
const reasonOf = (cause) => cause instanceof Error ? cause.message : String(cause);
|
|
36
38
|
const decodeAikitAssistantMessage = (value, options) => Effect.try({
|
|
@@ -46,6 +48,16 @@ const AikitAssistantMessage = Schema.Unknown.pipe(Schema.decodeTo(aikitAssistant
|
|
|
46
48
|
decode: SchemaGetter.transformEffect(decodeAikitAssistantMessage),
|
|
47
49
|
encode: SchemaGetter.transformEffect(decodeAikitAssistantMessage)
|
|
48
50
|
}));
|
|
51
|
+
const decodeAikitAssistantPart = (value, options) => Effect.try({
|
|
52
|
+
try: () => canonicalizeAikitAssistantPart(validateAikitAssistantPart(value, "aikit assistant part")),
|
|
53
|
+
catch: (cause) => new SchemaIssue.InvalidValue({ message: reasonOf(cause) }, value, options)
|
|
54
|
+
});
|
|
55
|
+
const aikitAssistantPartDeclared = Schema.declare(isAikitAssistantPart, { expected: "aikit assistant part" });
|
|
56
|
+
/** One part of an aikit assistant message, streaming-only fields stripped like {@link AikitAssistantMessage}. */
|
|
57
|
+
const AikitAssistantPart = Schema.Unknown.pipe(Schema.decodeTo(aikitAssistantPartDeclared, {
|
|
58
|
+
decode: SchemaGetter.transformEffect(decodeAikitAssistantPart),
|
|
59
|
+
encode: SchemaGetter.transformEffect(decodeAikitAssistantPart)
|
|
60
|
+
}));
|
|
49
61
|
const decodeAikitToolCallTerminalPart = (value, options) => Effect.try({
|
|
50
62
|
try: () => validateAikitToolCallTerminalPart(value, "aikit terminal toolcall part"),
|
|
51
63
|
catch: (cause) => new SchemaIssue.InvalidValue({ message: reasonOf(cause) }, value, options)
|
|
@@ -120,6 +132,6 @@ function latest(definitions) {
|
|
|
120
132
|
}, /* @__PURE__ */ new Map()));
|
|
121
133
|
}
|
|
122
134
|
//#endregion
|
|
123
|
-
export { AikitAssistantMessage, AikitToolCallTerminalPart, event_exports as EventSchema, ID, define, durable, inventory, latest, versionedType };
|
|
135
|
+
export { AikitAssistantMessage, AikitAssistantPart, AikitToolCallTerminalPart, event_exports as EventSchema, ID, define, durable, inventory, latest, versionedType };
|
|
124
136
|
|
|
125
137
|
//# sourceMappingURL=event.mjs.map
|
package/event.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.mjs","names":[],"sources":["../../src/event.ts"],"sourcesContent":["import { Message } from \"@codeworksh/aikit\";\nimport { Effect, Schema, type SchemaAST, SchemaGetter, SchemaIssue } from \"effect\";\nimport { uuidv7 } from \"uuidv7\";\nimport {\n\tisAikitAssistantMessage,\n\tisAikitToolCallTerminalPart,\n\toptional,\n\tvalidateAikitAssistantMessage,\n\tvalidateAikitToolCallTerminalPart,\n\twithStatics,\n} from \"./schema.ts\";\n\ntype AikitAssistantPart = Message.AssistantMessage[\"parts\"][number];\n\n/** Undeclared fields used only while aikit is assembling a streamed part. */\nconst aikitTransientFields: Readonly<Record<AikitAssistantPart[\"type\"], ReadonlyArray<string>>> = {\n\ttext: [\"streamId\"],\n\timage: [],\n\tthinking: [\"streamId\"],\n\ttoolCall: [\"partialJson\"],\n};\n\nconst omit = <T extends object>(value: T, keys: ReadonlyArray<string>): T => {\n\tif (!keys.some((key) => key in value)) return value;\n\tconst copy = { ...value } as T & Record<string, unknown>;\n\tfor (const key of keys) delete copy[key];\n\treturn copy;\n};\n\nconst canonicalizeAikitAssistantMessage = (message: Message.AssistantMessage): Message.AssistantMessage => ({\n\t...message,\n\tparts: message.parts.map((part) => omit(part, aikitTransientFields[part.type])),\n});\n\nconst reasonOf = (cause: unknown): string => (cause instanceof Error ? cause.message : String(cause));\n\nconst decodeAikitAssistantMessage = (value: unknown, options: SchemaAST.ParseOptions) =>\n\tEffect.try({\n\t\ttry: () => canonicalizeAikitAssistantMessage(validateAikitAssistantMessage(value, \"aikit assistant message\")),\n\t\tcatch: (cause) => new SchemaIssue.InvalidValue({ message: reasonOf(cause) }, value, options),\n\t});\n\nconst aikitAssistantMessageDeclared = Schema.declare<Message.AssistantMessage>(isAikitAssistantMessage, {\n\texpected: \"aikit AssistantMessage\",\n});\n\n/**\n * Effect Schema adapter for aikit's TypeBox assistant message. Durable LLM\n * events use it to validate their payload and strip streaming-only fields.\n */\nexport const AikitAssistantMessage = Schema.Unknown.pipe(\n\tSchema.decodeTo(aikitAssistantMessageDeclared, {\n\t\tdecode: SchemaGetter.transformEffect(decodeAikitAssistantMessage),\n\t\tencode: SchemaGetter.transformEffect(decodeAikitAssistantMessage),\n\t}),\n);\nexport type AikitAssistantMessage = typeof AikitAssistantMessage.Type;\n\nconst decodeAikitToolCallTerminalPart = (value: unknown, options: SchemaAST.ParseOptions) =>\n\tEffect.try({\n\t\ttry: () => validateAikitToolCallTerminalPart(value, \"aikit terminal toolcall part\"),\n\t\tcatch: (cause) => new SchemaIssue.InvalidValue({ message: reasonOf(cause) }, value, options),\n\t});\n\nconst aikitToolCallTerminalPartDeclared = Schema.declare<Message.ToolCallTerminalPart>(isAikitToolCallTerminalPart, {\n\texpected: \"aikit terminal toolcall part\",\n});\n\nexport const AikitToolCallTerminalPart = Schema.Unknown.pipe(\n\tSchema.decodeTo(aikitToolCallTerminalPartDeclared, {\n\t\tdecode: SchemaGetter.transformEffect(decodeAikitToolCallTerminalPart),\n\t\tencode: SchemaGetter.transformEffect(decodeAikitToolCallTerminalPart),\n\t}),\n);\nexport type AikitToolCallTerminalPart = typeof AikitToolCallTerminalPart.Type;\n\nexport const ID = Schema.String.pipe(\n\tSchema.brand(\"Event.ID\"),\n\twithStatics((schema) => ({\n\t\tcreate: () => schema.make(`evt_${uuidv7()}`),\n\t})),\n);\nexport type ID = typeof ID.Type;\n\nexport type Definition<\n\tType extends string = string,\n\tDataSchema extends Schema.Codec<unknown, unknown> = Schema.Codec<unknown, unknown>,\n> = Schema.Top & {\n\treadonly type: Type;\n\treadonly durable?: {\n\t\treadonly version: number; // event versioning for decoding in later time\n\t\treadonly aggregate: string;\n\t};\n\treadonly data: DataSchema;\n};\n\nexport type Data<D extends Definition> = Schema.Schema.Type<D[\"data\"]>;\n\n/** Publish-time options. Lives beside the definition so the plugin-facing publisher can name it. */\nexport interface PublishOptions {\n\t/** Caller-supplied event ID. Publishing the same ID twice is a defect, not an upsert. */\n\treadonly id?: ID;\n\t/**\n\t * Publish-time context — correlation, tracing — carried to projectors on the\n\t * in-memory payload and deliberately not stored in the event row. A projector\n\t * persists it into its own projection if it means something there; the log\n\t * records what happened, not who asked. It therefore does not survive a\n\t * durable reread or a rebuild, which `event.test.ts` pins explicitly.\n\t */\n\treadonly metadata?: Record<string, string>;\n}\n\nexport type Payload<D extends Definition = Definition> = {\n\treadonly id: ID;\n\treadonly type: D[\"type\"];\n\treadonly data: Data<D>;\n\treadonly durable?: {\n\t\treadonly aggregateId: string;\n\t\treadonly seq: number;\n\t\treadonly version: number;\n\t};\n\treadonly metadata?: Record<string, string>;\n};\n\nexport function define<\n\tconst Type extends string,\n\tconst Fields extends Readonly<Record<PropertyKey, Schema.Codec<unknown, unknown>>>,\n>(input: {\n\treadonly type: Type;\n\treadonly durable?: {\n\t\treadonly version: number;\n\t\treadonly aggregate: string;\n\t};\n\treadonly schema: Fields;\n}) {\n\tconst data = Schema.Struct(input.schema);\n\treturn Schema.Struct({\n\t\tid: ID,\n\t\tmetadata: optional(Schema.Record(Schema.String, Schema.String)),\n\t\ttype: Schema.Literal(input.type),\n\t\tdurable: optional(Schema.Struct({ aggregateId: Schema.String, seq: Schema.Int, version: Schema.Int })),\n\t\tdata,\n\t})\n\t\t.annotate({ identifier: input.type })\n\t\t.pipe(\n\t\t\twithStatics(() => ({\n\t\t\t\ttype: input.type,\n\t\t\t\t...(input.durable === undefined ? {} : { durable: input.durable }),\n\t\t\t\tdata,\n\t\t\t})),\n\t\t) satisfies Definition<Type, typeof data>;\n}\n\n// Register all the event definitions.\nexport function inventory<const Definitions extends ReadonlyArray<Definition>>(...definitions: Definitions) {\n\treturn Object.freeze(definitions);\n}\n\nexport function versionedType(type: string, version: number) {\n\treturn `${type}.${version}`;\n}\n\nexport function durable<const Definitions extends ReadonlyArray<Definition>>(definitions: Definitions) {\n\treturn readonlyMap(\n\t\tdefinitions.reduce((result, definition) => {\n\t\t\tif (!definition.durable) return result;\n\t\t\tconst key = versionedType(definition.type, definition.durable.version);\n\t\t\tif (result.has(key)) throw new Error(`duplicate durable event definition for ${key}`);\n\t\t\tresult.set(key, definition);\n\t\t\treturn result;\n\t\t}, new Map<string, Definitions[number]>()),\n\t);\n}\n\nfunction readonlyMap<Key, Value>(map: Map<Key, Value>): ReadonlyMap<Key, Value> {\n\tconst result: ReadonlyMap<Key, Value> = Object.freeze({\n\t\tget size() {\n\t\t\treturn map.size;\n\t\t},\n\t\tentries: () => map.entries(),\n\t\tforEach: (callback: (value: Value, key: Key, map: ReadonlyMap<Key, Value>) => void, thisArg?: unknown) =>\n\t\t\tmap.forEach((value, key) => callback.call(thisArg, value, key, result)),\n\t\tget: (key: Key) => map.get(key),\n\t\thas: (key: Key) => map.has(key),\n\t\tkeys: () => map.keys(),\n\t\tvalues: () => map.values(),\n\t\t[Symbol.iterator]: () => map[Symbol.iterator](),\n\t});\n\treturn result;\n}\n\nexport function latest(definitions: ReadonlyArray<Definition>) {\n\treturn readonlyMap(\n\t\tdefinitions.reduce((result, definition) => {\n\t\t\tconst existing = result.get(definition.type);\n\t\t\tif (!existing) {\n\t\t\t\tresult.set(definition.type, definition);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tif (definition.durable && existing.durable && definition.durable.version !== existing.durable.version) {\n\t\t\t\tif (definition.durable.version > existing.durable.version) result.set(definition.type, definition);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tif (definition !== existing) throw new Error(`duplicate latest event definition for ${definition.type}`);\n\t\t\treturn result;\n\t\t}, new Map<string, Definition>()),\n\t);\n}\n\nexport * as EventSchema from \"./event.ts\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"event.mjs","names":[],"sources":["../../src/event.ts"],"sourcesContent":["import { Message } from \"@codeworksh/aikit\";\nimport { Effect, Schema, type SchemaAST, SchemaGetter, SchemaIssue } from \"effect\";\nimport { uuidv7 } from \"uuidv7\";\nimport {\n\tisAikitAssistantMessage,\n\tisAikitAssistantPart,\n\tisAikitToolCallTerminalPart,\n\toptional,\n\tvalidateAikitAssistantMessage,\n\tvalidateAikitAssistantPart,\n\tvalidateAikitToolCallTerminalPart,\n\twithStatics,\n} from \"./schema.ts\";\n\ntype AssistantPart = Message.AssistantMessage[\"parts\"][number];\n\n/** Undeclared fields used only while aikit is assembling a streamed part. */\nconst aikitTransientFields: Readonly<Record<AssistantPart[\"type\"], ReadonlyArray<string>>> = {\n\ttext: [\"streamId\"],\n\timage: [],\n\tthinking: [\"streamId\"],\n\ttoolCall: [\"partialJson\"],\n};\n\nconst omit = <T extends object>(value: T, keys: ReadonlyArray<string>): T => {\n\tif (!keys.some((key) => key in value)) return value;\n\tconst copy = { ...value } as T & Record<string, unknown>;\n\tfor (const key of keys) delete copy[key];\n\treturn copy;\n};\n\nconst canonicalizeAikitAssistantPart = (part: AssistantPart): AssistantPart =>\n\tomit(part, aikitTransientFields[part.type]);\n\nconst canonicalizeAikitAssistantMessage = (message: Message.AssistantMessage): Message.AssistantMessage => ({\n\t...message,\n\tparts: message.parts.map(canonicalizeAikitAssistantPart),\n});\n\nconst reasonOf = (cause: unknown): string => (cause instanceof Error ? cause.message : String(cause));\n\nconst decodeAikitAssistantMessage = (value: unknown, options: SchemaAST.ParseOptions) =>\n\tEffect.try({\n\t\ttry: () => canonicalizeAikitAssistantMessage(validateAikitAssistantMessage(value, \"aikit assistant message\")),\n\t\tcatch: (cause) => new SchemaIssue.InvalidValue({ message: reasonOf(cause) }, value, options),\n\t});\n\nconst aikitAssistantMessageDeclared = Schema.declare<Message.AssistantMessage>(isAikitAssistantMessage, {\n\texpected: \"aikit AssistantMessage\",\n});\n\n/**\n * Effect Schema adapter for aikit's TypeBox assistant message. Durable LLM\n * events use it to validate their payload and strip streaming-only fields.\n */\nexport const AikitAssistantMessage = Schema.Unknown.pipe(\n\tSchema.decodeTo(aikitAssistantMessageDeclared, {\n\t\tdecode: SchemaGetter.transformEffect(decodeAikitAssistantMessage),\n\t\tencode: SchemaGetter.transformEffect(decodeAikitAssistantMessage),\n\t}),\n);\nexport type AikitAssistantMessage = typeof AikitAssistantMessage.Type;\n\nconst decodeAikitAssistantPart = (value: unknown, options: SchemaAST.ParseOptions) =>\n\tEffect.try({\n\t\ttry: () => canonicalizeAikitAssistantPart(validateAikitAssistantPart(value, \"aikit assistant part\")),\n\t\tcatch: (cause) => new SchemaIssue.InvalidValue({ message: reasonOf(cause) }, value, options),\n\t});\n\nconst aikitAssistantPartDeclared = Schema.declare<AssistantPart>(isAikitAssistantPart, {\n\texpected: \"aikit assistant part\",\n});\n\n/** One part of an aikit assistant message, streaming-only fields stripped like {@link AikitAssistantMessage}. */\nexport const AikitAssistantPart = Schema.Unknown.pipe(\n\tSchema.decodeTo(aikitAssistantPartDeclared, {\n\t\tdecode: SchemaGetter.transformEffect(decodeAikitAssistantPart),\n\t\tencode: SchemaGetter.transformEffect(decodeAikitAssistantPart),\n\t}),\n);\nexport type AikitAssistantPart = typeof AikitAssistantPart.Type;\n\nconst decodeAikitToolCallTerminalPart = (value: unknown, options: SchemaAST.ParseOptions) =>\n\tEffect.try({\n\t\ttry: () => validateAikitToolCallTerminalPart(value, \"aikit terminal toolcall part\"),\n\t\tcatch: (cause) => new SchemaIssue.InvalidValue({ message: reasonOf(cause) }, value, options),\n\t});\n\nconst aikitToolCallTerminalPartDeclared = Schema.declare<Message.ToolCallTerminalPart>(isAikitToolCallTerminalPart, {\n\texpected: \"aikit terminal toolcall part\",\n});\n\nexport const AikitToolCallTerminalPart = Schema.Unknown.pipe(\n\tSchema.decodeTo(aikitToolCallTerminalPartDeclared, {\n\t\tdecode: SchemaGetter.transformEffect(decodeAikitToolCallTerminalPart),\n\t\tencode: SchemaGetter.transformEffect(decodeAikitToolCallTerminalPart),\n\t}),\n);\nexport type AikitToolCallTerminalPart = typeof AikitToolCallTerminalPart.Type;\n\nexport const ID = Schema.String.pipe(\n\tSchema.brand(\"Event.ID\"),\n\twithStatics((schema) => ({\n\t\tcreate: () => schema.make(`evt_${uuidv7()}`),\n\t})),\n);\nexport type ID = typeof ID.Type;\n\nexport type Definition<\n\tType extends string = string,\n\tDataSchema extends Schema.Codec<unknown, unknown> = Schema.Codec<unknown, unknown>,\n> = Schema.Top & {\n\treadonly type: Type;\n\treadonly durable?: {\n\t\treadonly version: number; // event versioning for decoding in later time\n\t\treadonly aggregate: string;\n\t};\n\treadonly data: DataSchema;\n};\n\nexport type Data<D extends Definition> = Schema.Schema.Type<D[\"data\"]>;\n\n/** Publish-time options. Lives beside the definition so the plugin-facing publisher can name it. */\nexport interface PublishOptions {\n\t/** Caller-supplied event ID. Publishing the same ID twice is a defect, not an upsert. */\n\treadonly id?: ID;\n\t/**\n\t * Publish-time context — correlation, tracing — carried to projectors on the\n\t * in-memory payload and deliberately not stored in the event row. A projector\n\t * persists it into its own projection if it means something there; the log\n\t * records what happened, not who asked. It therefore does not survive a\n\t * durable reread or a rebuild, which `event.test.ts` pins explicitly.\n\t */\n\treadonly metadata?: Record<string, string>;\n}\n\nexport type Payload<D extends Definition = Definition> = {\n\treadonly id: ID;\n\treadonly type: D[\"type\"];\n\treadonly data: Data<D>;\n\treadonly durable?: {\n\t\treadonly aggregateId: string;\n\t\treadonly seq: number;\n\t\treadonly version: number;\n\t};\n\treadonly metadata?: Record<string, string>;\n};\n\nexport function define<\n\tconst Type extends string,\n\tconst Fields extends Readonly<Record<PropertyKey, Schema.Codec<unknown, unknown>>>,\n>(input: {\n\treadonly type: Type;\n\treadonly durable?: {\n\t\treadonly version: number;\n\t\treadonly aggregate: string;\n\t};\n\treadonly schema: Fields;\n}) {\n\tconst data = Schema.Struct(input.schema);\n\treturn Schema.Struct({\n\t\tid: ID,\n\t\tmetadata: optional(Schema.Record(Schema.String, Schema.String)),\n\t\ttype: Schema.Literal(input.type),\n\t\tdurable: optional(Schema.Struct({ aggregateId: Schema.String, seq: Schema.Int, version: Schema.Int })),\n\t\tdata,\n\t})\n\t\t.annotate({ identifier: input.type })\n\t\t.pipe(\n\t\t\twithStatics(() => ({\n\t\t\t\ttype: input.type,\n\t\t\t\t...(input.durable === undefined ? {} : { durable: input.durable }),\n\t\t\t\tdata,\n\t\t\t})),\n\t\t) satisfies Definition<Type, typeof data>;\n}\n\n// Register all the event definitions.\nexport function inventory<const Definitions extends ReadonlyArray<Definition>>(...definitions: Definitions) {\n\treturn Object.freeze(definitions);\n}\n\nexport function versionedType(type: string, version: number) {\n\treturn `${type}.${version}`;\n}\n\nexport function durable<const Definitions extends ReadonlyArray<Definition>>(definitions: Definitions) {\n\treturn readonlyMap(\n\t\tdefinitions.reduce((result, definition) => {\n\t\t\tif (!definition.durable) return result;\n\t\t\tconst key = versionedType(definition.type, definition.durable.version);\n\t\t\tif (result.has(key)) throw new Error(`duplicate durable event definition for ${key}`);\n\t\t\tresult.set(key, definition);\n\t\t\treturn result;\n\t\t}, new Map<string, Definitions[number]>()),\n\t);\n}\n\nfunction readonlyMap<Key, Value>(map: Map<Key, Value>): ReadonlyMap<Key, Value> {\n\tconst result: ReadonlyMap<Key, Value> = Object.freeze({\n\t\tget size() {\n\t\t\treturn map.size;\n\t\t},\n\t\tentries: () => map.entries(),\n\t\tforEach: (callback: (value: Value, key: Key, map: ReadonlyMap<Key, Value>) => void, thisArg?: unknown) =>\n\t\t\tmap.forEach((value, key) => callback.call(thisArg, value, key, result)),\n\t\tget: (key: Key) => map.get(key),\n\t\thas: (key: Key) => map.has(key),\n\t\tkeys: () => map.keys(),\n\t\tvalues: () => map.values(),\n\t\t[Symbol.iterator]: () => map[Symbol.iterator](),\n\t});\n\treturn result;\n}\n\nexport function latest(definitions: ReadonlyArray<Definition>) {\n\treturn readonlyMap(\n\t\tdefinitions.reduce((result, definition) => {\n\t\t\tconst existing = result.get(definition.type);\n\t\t\tif (!existing) {\n\t\t\t\tresult.set(definition.type, definition);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tif (definition.durable && existing.durable && definition.durable.version !== existing.durable.version) {\n\t\t\t\tif (definition.durable.version > existing.durable.version) result.set(definition.type, definition);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tif (definition !== existing) throw new Error(`duplicate latest event definition for ${definition.type}`);\n\t\t\treturn result;\n\t\t}, new Map<string, Definition>()),\n\t);\n}\n\nexport * as EventSchema from \"./event.ts\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAiBA,MAAM,uBAAuF;CAC5F,MAAM,CAAC,UAAU;CACjB,OAAO,CAAC;CACR,UAAU,CAAC,UAAU;CACrB,UAAU,CAAC,aAAa;AACzB;AAEA,MAAM,QAA0B,OAAU,SAAmC;CAC5E,IAAI,CAAC,KAAK,MAAM,QAAQ,OAAO,KAAK,GAAG,OAAO;CAC9C,MAAM,OAAO,EAAE,GAAG,MAAM;CACxB,KAAK,MAAM,OAAO,MAAM,OAAO,KAAK;CACpC,OAAO;AACR;AAEA,MAAM,kCAAkC,SACvC,KAAK,MAAM,qBAAqB,KAAK,KAAK;AAE3C,MAAM,qCAAqC,aAAiE;CAC3G,GAAG;CACH,OAAO,QAAQ,MAAM,IAAI,8BAA8B;AACxD;AAEA,MAAM,YAAY,UAA4B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAEnG,MAAM,+BAA+B,OAAgB,YACpD,OAAO,IAAI;CACV,WAAW,kCAAkC,8BAA8B,OAAO,yBAAyB,CAAC;CAC5G,QAAQ,UAAU,IAAI,YAAY,aAAa,EAAE,SAAS,SAAS,KAAK,EAAE,GAAG,OAAO,OAAO;AAC5F,CAAC;AAEF,MAAM,gCAAgC,OAAO,QAAkC,yBAAyB,EACvG,UAAU,yBACX,CAAC;;;;;AAMD,MAAa,wBAAwB,OAAO,QAAQ,KACnD,OAAO,SAAS,+BAA+B;CAC9C,QAAQ,aAAa,gBAAgB,2BAA2B;CAChE,QAAQ,aAAa,gBAAgB,2BAA2B;AACjE,CAAC,CACF;AAGA,MAAM,4BAA4B,OAAgB,YACjD,OAAO,IAAI;CACV,WAAW,+BAA+B,2BAA2B,OAAO,sBAAsB,CAAC;CACnG,QAAQ,UAAU,IAAI,YAAY,aAAa,EAAE,SAAS,SAAS,KAAK,EAAE,GAAG,OAAO,OAAO;AAC5F,CAAC;AAEF,MAAM,6BAA6B,OAAO,QAAuB,sBAAsB,EACtF,UAAU,uBACX,CAAC;;AAGD,MAAa,qBAAqB,OAAO,QAAQ,KAChD,OAAO,SAAS,4BAA4B;CAC3C,QAAQ,aAAa,gBAAgB,wBAAwB;CAC7D,QAAQ,aAAa,gBAAgB,wBAAwB;AAC9D,CAAC,CACF;AAGA,MAAM,mCAAmC,OAAgB,YACxD,OAAO,IAAI;CACV,WAAW,kCAAkC,OAAO,8BAA8B;CAClF,QAAQ,UAAU,IAAI,YAAY,aAAa,EAAE,SAAS,SAAS,KAAK,EAAE,GAAG,OAAO,OAAO;AAC5F,CAAC;AAEF,MAAM,oCAAoC,OAAO,QAAsC,6BAA6B,EACnH,UAAU,+BACX,CAAC;AAED,MAAa,4BAA4B,OAAO,QAAQ,KACvD,OAAO,SAAS,mCAAmC;CAClD,QAAQ,aAAa,gBAAgB,+BAA+B;CACpE,QAAQ,aAAa,gBAAgB,+BAA+B;AACrE,CAAC,CACF;AAGA,MAAa,KAAK,OAAO,OAAO,KAC/B,OAAO,MAAM,UAAU,GACvB,aAAa,YAAY,EACxB,cAAc,OAAO,KAAK,OAAO,OAAO,GAAG,EAC5C,EAAE,CACH;AA2CA,SAAgB,OAGd,OAOC;CACF,MAAM,OAAO,OAAO,OAAO,MAAM,MAAM;CACvC,OAAO,OAAO,OAAO;EACpB,IAAI;EACJ,UAAU,SAAS,OAAO,OAAO,OAAO,QAAQ,OAAO,MAAM,CAAC;EAC9D,MAAM,OAAO,QAAQ,MAAM,IAAI;EAC/B,SAAS,SAAS,OAAO,OAAO;GAAE,aAAa,OAAO;GAAQ,KAAK,OAAO;GAAK,SAAS,OAAO;EAAI,CAAC,CAAC;EACrG;CACD,CAAC,CAAC,CACA,SAAS,EAAE,YAAY,MAAM,KAAK,CAAC,CAAC,CACpC,KACA,mBAAmB;EAClB,MAAM,MAAM;EACZ,GAAI,MAAM,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS,MAAM,QAAQ;EAChE;CACD,EAAE,CACH;AACF;AAGA,SAAgB,UAA+D,GAAG,aAA0B;CAC3G,OAAO,OAAO,OAAO,WAAW;AACjC;AAEA,SAAgB,cAAc,MAAc,SAAiB;CAC5D,OAAO,GAAG,KAAK,GAAG;AACnB;AAEA,SAAgB,QAA6D,aAA0B;CACtG,OAAO,YACN,YAAY,QAAQ,QAAQ,eAAe;EAC1C,IAAI,CAAC,WAAW,SAAS,OAAO;EAChC,MAAM,MAAM,cAAc,WAAW,MAAM,WAAW,QAAQ,OAAO;EACrE,IAAI,OAAO,IAAI,GAAG,GAAG,MAAM,IAAI,MAAM,0CAA0C,KAAK;EACpF,OAAO,IAAI,KAAK,UAAU;EAC1B,OAAO;CACR,mBAAG,IAAI,IAAiC,CAAC,CAC1C;AACD;AAEA,SAAS,YAAwB,KAA+C;CAC/E,MAAM,SAAkC,OAAO,OAAO;EACrD,IAAI,OAAO;GACV,OAAO,IAAI;EACZ;EACA,eAAe,IAAI,QAAQ;EAC3B,UAAU,UAA0E,YACnF,IAAI,SAAS,OAAO,QAAQ,SAAS,KAAK,SAAS,OAAO,KAAK,MAAM,CAAC;EACvE,MAAM,QAAa,IAAI,IAAI,GAAG;EAC9B,MAAM,QAAa,IAAI,IAAI,GAAG;EAC9B,YAAY,IAAI,KAAK;EACrB,cAAc,IAAI,OAAO;GACxB,OAAO,iBAAiB,IAAI,OAAO,SAAS,CAAC;CAC/C,CAAC;CACD,OAAO;AACR;AAEA,SAAgB,OAAO,aAAwC;CAC9D,OAAO,YACN,YAAY,QAAQ,QAAQ,eAAe;EAC1C,MAAM,WAAW,OAAO,IAAI,WAAW,IAAI;EAC3C,IAAI,CAAC,UAAU;GACd,OAAO,IAAI,WAAW,MAAM,UAAU;GACtC,OAAO;EACR;EACA,IAAI,WAAW,WAAW,SAAS,WAAW,WAAW,QAAQ,YAAY,SAAS,QAAQ,SAAS;GACtG,IAAI,WAAW,QAAQ,UAAU,SAAS,QAAQ,SAAS,OAAO,IAAI,WAAW,MAAM,UAAU;GACjG,OAAO;EACR;EACA,IAAI,eAAe,UAAU,MAAM,IAAI,MAAM,yCAAyC,WAAW,MAAM;EACvG,OAAO;CACR,mBAAG,IAAI,IAAwB,CAAC,CACjC;AACD"}
|
package/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { t as section_d_exports } from "./plugin/section.mjs";
|
|
2
2
|
import { b as tool_d_exports } from "./tool-C7gcMoga.mjs";
|
|
3
|
-
import { t as plugin_d_exports } from "./plugin-
|
|
3
|
+
import { t as plugin_d_exports } from "./plugin-DWhny4p-.mjs";
|
|
4
4
|
export { plugin_d_exports as Plugin, section_d_exports as Section, tool_d_exports as Tool };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codeworksh/plugin",
|
|
3
|
-
"version": "0.3.0-canary.
|
|
3
|
+
"version": "0.3.0-canary.84.1.gce0dac2c",
|
|
4
4
|
"description": "SDK for building CodeWork plugins — the plugin, tool, and sandbox contracts shared with @codeworksh/harness.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent",
|
|
@@ -173,7 +173,7 @@
|
|
|
173
173
|
"uuidv7": "^1.2.1"
|
|
174
174
|
},
|
|
175
175
|
"peerDependencies": {
|
|
176
|
-
"@codeworksh/aikit": "0.12.1-canary.
|
|
176
|
+
"@codeworksh/aikit": "0.12.1-canary.84.1.gce0dac2c",
|
|
177
177
|
"effect": "4.0.5"
|
|
178
178
|
}
|
|
179
179
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as Definition, c as PublishOptions, i as Data, s as Payload } from "./event-B4EXJQcU.mjs";
|
|
2
2
|
import { n as SessionID, r as ThreadID } from "./ids-CpPeP5Ks.mjs";
|
|
3
3
|
import { o as Service, r as Info } from "./location-Q39els63.mjs";
|
|
4
4
|
import { f as io_d_exports, i as Identity, s as Provides } from "./io-Br9WZTsG.mjs";
|
|
@@ -164,4 +164,4 @@ declare namespace plugin_d_exports {
|
|
|
164
164
|
}
|
|
165
165
|
//#endregion
|
|
166
166
|
export { PluginRegistry as _, define as a, PluginOptions as c, PluginSpec as d, Config as f, SharedPluginContext as g, PromptResolver as h, PluginKind as i, PluginPatch as l, Paths as m, Mount as n, domains as o, Events as p, Plugin as r, rank as s, plugin_d_exports as t, PluginRef as u };
|
|
167
|
-
//# sourceMappingURL=plugin-
|
|
167
|
+
//# sourceMappingURL=plugin-DWhny4p-.d.mts.map
|
package/plugin.d.mts
CHANGED
|
@@ -2,5 +2,5 @@ import { l as mcp_d_exports } from "./mcp-DEWhnBQw.mjs";
|
|
|
2
2
|
import { t as section_d_exports } from "./plugin/section.mjs";
|
|
3
3
|
import { n as prompt_d_exports } from "./prompt-DWaA5ZXj.mjs";
|
|
4
4
|
import { p as tool_d_exports } from "./tool-C9TzQ9nG.mjs";
|
|
5
|
-
import { _ as PluginRegistry, a as define, c as PluginOptions, d as PluginSpec, f as Config, g as SharedPluginContext, h as PromptResolver, i as PluginKind, l as PluginPatch, m as Paths, n as Mount, o as domains, p as Events, r as Plugin, s as rank, u as PluginRef } from "./plugin-
|
|
5
|
+
import { _ as PluginRegistry, a as define, c as PluginOptions, d as PluginSpec, f as Config, g as SharedPluginContext, h as PromptResolver, i as PluginKind, l as PluginPatch, m as Paths, n as Mount, o as domains, p as Events, r as Plugin, s as rank, u as PluginRef } from "./plugin-DWhny4p-.mjs";
|
|
6
6
|
export { type Config, type Events, mcp_d_exports as Mcp, type Mount, type Paths, type Plugin, type PluginKind, type PluginOptions, type PluginPatch, type PluginRef, type PluginRegistry, type PluginSpec, prompt_d_exports as Prompt, type PromptResolver, section_d_exports as Section, type SharedPluginContext, tool_d_exports as Tool, define, domains, rank };
|
package/schema.d.mts
CHANGED
|
@@ -5,10 +5,12 @@ import { Schema } from "effect";
|
|
|
5
5
|
export declare const validateAikitMessage: (value: unknown, label: string) => Message.Message;
|
|
6
6
|
export declare const validateAikitUserMessage: (value: unknown, label: string) => Message.UserMessage;
|
|
7
7
|
export declare const validateAikitAssistantMessage: (value: unknown, label: string) => Message.AssistantMessage;
|
|
8
|
+
export declare const validateAikitAssistantPart: (value: unknown, label: string) => Message.AssistantMessage["parts"][number];
|
|
8
9
|
export declare const validateAikitToolCallTerminalPart: (value: unknown, label: string) => Message.ToolCallTerminalPart;
|
|
9
10
|
export declare const validateAikitModelInfo: (value: unknown, label: string) => Model.Info;
|
|
10
11
|
export declare const isAikitModelInfo: (value: unknown) => value is Model.Info;
|
|
11
12
|
export declare const isAikitAssistantMessage: (value: unknown) => value is Message.AssistantMessage;
|
|
13
|
+
export declare const isAikitAssistantPart: (value: unknown) => value is Message.AssistantMessage["parts"][number];
|
|
12
14
|
export declare const isAikitToolCallTerminalPart: (value: unknown) => value is Message.ToolCallTerminalPart;
|
|
13
15
|
/**
|
|
14
16
|
* Integer greater than zero.
|
package/schema.mjs
CHANGED
|
@@ -26,10 +26,12 @@ const validateAikitSchema = (schema, value, label) => {
|
|
|
26
26
|
const validateAikitMessage = (value, label) => validateAikitSchema(Message.MessageSchema, value, label);
|
|
27
27
|
const validateAikitUserMessage = (value, label) => validateAikitSchema(Message.UserMessageSchema, value, label);
|
|
28
28
|
const validateAikitAssistantMessage = (value, label) => validateAikitSchema(Message.AssistantMessageSchema, value, label);
|
|
29
|
+
const validateAikitAssistantPart = (value, label) => validateAikitSchema(Message.AssistantMessageSchema.properties.parts.items, value, label);
|
|
29
30
|
const validateAikitToolCallTerminalPart = (value, label) => validateAikitSchema(Message.ToolCallTerminalPartSchema, value, label);
|
|
30
31
|
const validateAikitModelInfo = (value, label) => validateAikitSchema(Model.Info, value, label);
|
|
31
32
|
const isAikitModelInfo = (value) => aikitValidatorFor(Model.Info).Check(value);
|
|
32
33
|
const isAikitAssistantMessage = (value) => aikitValidatorFor(Message.AssistantMessageSchema).Check(value);
|
|
34
|
+
const isAikitAssistantPart = (value) => aikitValidatorFor(Message.AssistantMessageSchema.properties.parts.items).Check(value);
|
|
33
35
|
const isAikitToolCallTerminalPart = (value) => aikitValidatorFor(Message.ToolCallTerminalPartSchema).Check(value);
|
|
34
36
|
/**
|
|
35
37
|
* Integer greater than zero.
|
|
@@ -102,6 +104,6 @@ const DateTimeUtcFromMillis = Schema.Finite.pipe(Schema.decodeTo(Schema.DateTime
|
|
|
102
104
|
encode: SchemaGetter.transform((value) => DateTime.toEpochMillis(value))
|
|
103
105
|
}));
|
|
104
106
|
//#endregion
|
|
105
|
-
export { AbsolutePath, DateTimeUtcFromMillis, Newtype, NonNegativeCost, NonNegativeInt, PositiveInt, isAikitAssistantMessage, isAikitModelInfo, isAikitToolCallTerminalPart, optional, validateAikitAssistantMessage, validateAikitMessage, validateAikitModelInfo, validateAikitToolCallTerminalPart, validateAikitUserMessage, withStatics };
|
|
107
|
+
export { AbsolutePath, DateTimeUtcFromMillis, Newtype, NonNegativeCost, NonNegativeInt, PositiveInt, isAikitAssistantMessage, isAikitAssistantPart, isAikitModelInfo, isAikitToolCallTerminalPart, optional, validateAikitAssistantMessage, validateAikitAssistantPart, validateAikitMessage, validateAikitModelInfo, validateAikitToolCallTerminalPart, validateAikitUserMessage, withStatics };
|
|
106
108
|
|
|
107
109
|
//# sourceMappingURL=schema.mjs.map
|
package/schema.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.mjs","names":[],"sources":["../../src/schema.ts"],"sourcesContent":["import { Message, Model } from \"@codeworksh/aikit\";\nimport { DateTime, Option, Schema, SchemaGetter } from \"effect\";\nimport type { Static, TSchema } from \"typebox\";\nimport TypeBoxSchema from \"typebox/schema\";\n\nconst aikitValidators = new WeakMap<TSchema, ReturnType<typeof TypeBoxSchema.Compile>>();\n\nconst aikitValidatorFor = <T extends TSchema>(schema: T): ReturnType<typeof TypeBoxSchema.Compile<T>> => {\n\tconst cached = aikitValidators.get(schema) as ReturnType<typeof TypeBoxSchema.Compile<T>> | undefined;\n\tif (cached !== undefined) return cached;\n\tconst compiled = TypeBoxSchema.Compile(schema);\n\taikitValidators.set(schema, compiled);\n\treturn compiled;\n};\n\nconst aikitErrorPath = (error: {\n\treadonly instancePath?: string;\n\treadonly params?: Record<string, unknown>;\n}): string => {\n\tif (error.instancePath) return error.instancePath.substring(1);\n\tconst required = error.params?.requiredProperties;\n\treturn Array.isArray(required) ? required.join(\", \") : \"root\";\n};\n\nconst validateAikitSchema = <T extends TSchema>(schema: T, value: unknown, label: string): Static<T> => {\n\tconst validator = aikitValidatorFor(schema);\n\tif (validator.Check(value)) return value;\n\n\tconst [, issues] = validator.Errors(value);\n\tconst details = issues.map((issue) => ` - ${aikitErrorPath(issue)}: ${issue.message}`).join(\"\\n\") || \"unknown error\";\n\tthrow new Error(`validation failed for ${label}\\n${details}`);\n};\n\n/** Validate an aikit message without coercing or rewriting durable data. */\nexport const validateAikitMessage = (value: unknown, label: string): Message.Message =>\n\tvalidateAikitSchema(Message.MessageSchema, value, label);\n\nexport const validateAikitUserMessage = (value: unknown, label: string): Message.UserMessage =>\n\tvalidateAikitSchema(Message.UserMessageSchema, value, label);\n\nexport const validateAikitAssistantMessage = (value: unknown, label: string): Message.AssistantMessage =>\n\tvalidateAikitSchema(Message.AssistantMessageSchema, value, label);\n\nexport const validateAikitToolCallTerminalPart = (value: unknown, label: string): Message.ToolCallTerminalPart =>\n\tvalidateAikitSchema(Message.ToolCallTerminalPartSchema, value, label);\n\nexport const validateAikitModelInfo = (value: unknown, label: string): Model.Info =>\n\tvalidateAikitSchema(Model.Info, value, label);\n\nexport const isAikitModelInfo = (value: unknown): value is Model.Info => aikitValidatorFor(Model.Info).Check(value);\n\nexport const isAikitAssistantMessage = (value: unknown): value is Message.AssistantMessage =>\n\taikitValidatorFor(Message.AssistantMessageSchema).Check(value);\n\nexport const isAikitToolCallTerminalPart = (value: unknown): value is Message.ToolCallTerminalPart =>\n\taikitValidatorFor(Message.ToolCallTerminalPartSchema).Check(value);\n\n/**\n * Integer greater than zero.\n */\nexport const PositiveInt = Schema.Int.check(Schema.isGreaterThan(0));\n\n/**\n * Integer greater than or equal to zero.\n */\nexport const NonNegativeInt = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0));\n\n/**\n * Cost greater than or equal with finite value\n */\nexport const NonNegativeCost = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0));\n\n/**\n * Absolute POSIX file path (e.g., `/home/user/projects/myapp/src/main.ts`).\n */\nexport const AbsolutePath = Schema.String.check(Schema.isPattern(/^\\//)).pipe(Schema.brand(\"AbsolutePath\"));\nexport type AbsolutePath = Schema.Schema.Type<typeof AbsolutePath>;\n\n/**\n * Optional public JSON field that can hold explicit `undefined` on the type\n * side but encodes it as an omitted key, matching legacy `JSON.stringify`.\n */\nexport const optional = <S extends Schema.Top>(schema: S) =>\n\tSchema.optionalKey(schema).pipe(\n\t\tSchema.decodeTo(Schema.optional(Schema.toType(schema)), {\n\t\t\tdecode: SchemaGetter.passthrough({ strict: false }),\n\t\t\tencode: SchemaGetter.transformOptional(Option.filter((value) => value !== undefined)),\n\t\t}),\n\t);\n\n/**\n * Strip `readonly` from a nested type. Stand-in for `effect`'s `Types.DeepMutable`\n * until `effect:core/x228my` (\"Types.DeepMutable widens unknown to `{}`\") lands.\n *\n * The upstream version falls through `unknown` into `{ -readonly [K in keyof T]: ... }`\n * where `keyof unknown = never`, so `unknown` collapses to `{}`. This local\n * version gates the object branch on `extends object` (which `unknown` does\n * not) so `unknown` passes through untouched.\n *\n * Primitive bailout matches upstream — without it, branded strings like\n * `string & Brand<\"SessionID\">` fall into the object branch and get their\n * prototype methods walked.\n *\n * Tuple branch preserves readonly tuples (e.g. `ConfigPlugin.Spec`'s\n * `readonly [string, Options]`); the general array branch would otherwise\n * widen them to unbounded arrays.\n */\nexport type DeepMutable<T> = T extends string | number | boolean | bigint | symbol | Function\n\t? T\n\t: T extends readonly [unknown, ...unknown[]]\n\t\t? { -readonly [K in keyof T]: DeepMutable<T[K]> }\n\t\t: T extends readonly (infer U)[]\n\t\t\t? DeepMutable<U>[]\n\t\t\t: T extends object\n\t\t\t\t? { -readonly [K in keyof T]: DeepMutable<T[K]> }\n\t\t\t\t: T;\n\n/**\n * Attach static methods to a schema object. Designed to be used with `.pipe()`:\n *\n * @example\n * export const Foo = fooSchema.pipe(\n * withStatics((schema) => ({\n * zero: schema.make(0),\n * from: Schema.decodeUnknownOption(schema),\n * }))\n * )\n */\nexport const withStatics =\n\t<S extends object, M extends Record<string, unknown>>(methods: (schema: S) => M) =>\n\t(schema: S): S & M =>\n\t\tObject.assign(schema, methods(schema));\n\n/**\n * Nominal wrapper for scalar types. The class itself is a valid schema —\n * pass it directly to `Schema.decode`, `Schema.decodeEffect`, etc.\n *\n * Overrides `~type.make` on the derived `Schema.Opaque` so `Schema.Schema.Type`\n * of a field using this newtype resolves to `Self` rather than the underlying\n * branded phantom. Without that override, passing a class instance to code\n * typed against `Schema.Schema.Type<FieldSchema>` would require a cast even\n * though the values are structurally equivalent at runtime.\n *\n * @example\n * class QuestionID extends Newtype<QuestionID>()(\"QuestionID\", Schema.String) {\n * static make(id: string): QuestionID {\n * return this.make(id)\n * }\n * }\n *\n * Schema.decodeEffect(QuestionID)(input)\n */\nexport function Newtype<Self>() {\n\treturn <const Tag extends string, S extends Schema.Top>(tag: Tag, schema: S) => {\n\t\tabstract class Base {\n\t\t\tdeclare readonly _newtype: Tag;\n\n\t\t\tstatic make(value: Schema.Schema.Type<S>): Self {\n\t\t\t\treturn value as unknown as Self;\n\t\t\t}\n\t\t}\n\n\t\tObject.setPrototypeOf(Base, schema);\n\n\t\treturn Base as unknown as (abstract new (_: never) => { readonly _newtype: Tag }) & {\n\t\t\treadonly make: (value: Schema.Schema.Type<S>) => Self;\n\t\t} & Omit<Schema.Opaque<Self, S, {}>, \"make\" | \"~type.make\"> & {\n\t\t\t\treadonly \"~type.make\": Self;\n\t\t\t};\n\t};\n}\n\nexport const DateTimeUtcFromMillis = Schema.Finite.pipe(\n\tSchema.decodeTo(Schema.DateTimeUtc, {\n\t\tdecode: SchemaGetter.transform((value) => DateTime.makeUnsafe(value)),\n\t\tencode: SchemaGetter.transform((value) => DateTime.toEpochMillis(value)),\n\t}),\n);\n"],"mappings":";;;;AAKA,MAAM,kCAAkB,IAAI,QAA2D;AAEvF,MAAM,qBAAwC,WAA2D;CACxG,MAAM,SAAS,gBAAgB,IAAI,MAAM;CACzC,IAAI,WAAW,KAAA,GAAW,OAAO;CACjC,MAAM,WAAW,cAAc,QAAQ,MAAM;CAC7C,gBAAgB,IAAI,QAAQ,QAAQ;CACpC,OAAO;AACR;AAEA,MAAM,kBAAkB,UAGV;CACb,IAAI,MAAM,cAAc,OAAO,MAAM,aAAa,UAAU,CAAC;CAC7D,MAAM,WAAW,MAAM,QAAQ;CAC/B,OAAO,MAAM,QAAQ,QAAQ,IAAI,SAAS,KAAK,IAAI,IAAI;AACxD;AAEA,MAAM,uBAA0C,QAAW,OAAgB,UAA6B;CACvG,MAAM,YAAY,kBAAkB,MAAM;CAC1C,IAAI,UAAU,MAAM,KAAK,GAAG,OAAO;CAEnC,MAAM,GAAG,UAAU,UAAU,OAAO,KAAK;CACzC,MAAM,UAAU,OAAO,KAAK,UAAU,MAAM,eAAe,KAAK,EAAE,IAAI,MAAM,SAAS,CAAC,CAAC,KAAK,IAAI,KAAK;CACrG,MAAM,IAAI,MAAM,yBAAyB,MAAM,IAAI,SAAS;AAC7D;;AAGA,MAAa,wBAAwB,OAAgB,UACpD,oBAAoB,QAAQ,eAAe,OAAO,KAAK;AAExD,MAAa,4BAA4B,OAAgB,UACxD,oBAAoB,QAAQ,mBAAmB,OAAO,KAAK;AAE5D,MAAa,iCAAiC,OAAgB,UAC7D,oBAAoB,QAAQ,wBAAwB,OAAO,KAAK;AAEjE,MAAa,qCAAqC,OAAgB,UACjE,oBAAoB,QAAQ,4BAA4B,OAAO,KAAK;AAErE,MAAa,0BAA0B,OAAgB,UACtD,oBAAoB,MAAM,MAAM,OAAO,KAAK;AAE7C,MAAa,oBAAoB,UAAwC,kBAAkB,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK;AAElH,MAAa,2BAA2B,UACvC,kBAAkB,QAAQ,sBAAsB,CAAC,CAAC,MAAM,KAAK;AAE9D,MAAa,+BAA+B,UAC3C,kBAAkB,QAAQ,0BAA0B,CAAC,CAAC,MAAM,KAAK;;;;AAKlE,MAAa,cAAc,OAAO,IAAI,MAAM,OAAO,cAAc,CAAC,CAAC;;;;AAKnE,MAAa,iBAAiB,OAAO,IAAI,MAAM,OAAO,uBAAuB,CAAC,CAAC;;;;AAK/E,MAAa,kBAAkB,OAAO,OAAO,MAAM,OAAO,uBAAuB,CAAC,CAAC;;;;AAKnF,MAAa,eAAe,OAAO,OAAO,MAAM,OAAO,UAAU,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,MAAM,cAAc,CAAC;;;;;AAO1G,MAAa,YAAkC,WAC9C,OAAO,YAAY,MAAM,CAAC,CAAC,KAC1B,OAAO,SAAS,OAAO,SAAS,OAAO,OAAO,MAAM,CAAC,GAAG;CACvD,QAAQ,aAAa,YAAY,EAAE,QAAQ,MAAM,CAAC;CAClD,QAAQ,aAAa,kBAAkB,OAAO,QAAQ,UAAU,UAAU,KAAA,CAAS,CAAC;AACrF,CAAC,CACF;;;;;;;;;;;;AAwCD,MAAa,eAC0C,aACrD,WACA,OAAO,OAAO,QAAQ,QAAQ,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;AAqBvC,SAAgB,UAAgB;CAC/B,QAAwD,KAAU,WAAc;EAC/E,MAAe,KAAK;GAGnB,OAAO,KAAK,OAAoC;IAC/C,OAAO;GACR;EACD;EAEA,OAAO,eAAe,MAAM,MAAM;EAElC,OAAO;CAKR;AACD;AAEA,MAAa,wBAAwB,OAAO,OAAO,KAClD,OAAO,SAAS,OAAO,aAAa;CACnC,QAAQ,aAAa,WAAW,UAAU,SAAS,WAAW,KAAK,CAAC;CACpE,QAAQ,aAAa,WAAW,UAAU,SAAS,cAAc,KAAK,CAAC;AACxE,CAAC,CACF"}
|
|
1
|
+
{"version":3,"file":"schema.mjs","names":[],"sources":["../../src/schema.ts"],"sourcesContent":["import { Message, Model } from \"@codeworksh/aikit\";\nimport { DateTime, Option, Schema, SchemaGetter } from \"effect\";\nimport type { Static, TSchema } from \"typebox\";\nimport TypeBoxSchema from \"typebox/schema\";\n\nconst aikitValidators = new WeakMap<TSchema, ReturnType<typeof TypeBoxSchema.Compile>>();\n\nconst aikitValidatorFor = <T extends TSchema>(schema: T): ReturnType<typeof TypeBoxSchema.Compile<T>> => {\n\tconst cached = aikitValidators.get(schema) as ReturnType<typeof TypeBoxSchema.Compile<T>> | undefined;\n\tif (cached !== undefined) return cached;\n\tconst compiled = TypeBoxSchema.Compile(schema);\n\taikitValidators.set(schema, compiled);\n\treturn compiled;\n};\n\nconst aikitErrorPath = (error: {\n\treadonly instancePath?: string;\n\treadonly params?: Record<string, unknown>;\n}): string => {\n\tif (error.instancePath) return error.instancePath.substring(1);\n\tconst required = error.params?.requiredProperties;\n\treturn Array.isArray(required) ? required.join(\", \") : \"root\";\n};\n\nconst validateAikitSchema = <T extends TSchema>(schema: T, value: unknown, label: string): Static<T> => {\n\tconst validator = aikitValidatorFor(schema);\n\tif (validator.Check(value)) return value;\n\n\tconst [, issues] = validator.Errors(value);\n\tconst details = issues.map((issue) => ` - ${aikitErrorPath(issue)}: ${issue.message}`).join(\"\\n\") || \"unknown error\";\n\tthrow new Error(`validation failed for ${label}\\n${details}`);\n};\n\n/** Validate an aikit message without coercing or rewriting durable data. */\nexport const validateAikitMessage = (value: unknown, label: string): Message.Message =>\n\tvalidateAikitSchema(Message.MessageSchema, value, label);\n\nexport const validateAikitUserMessage = (value: unknown, label: string): Message.UserMessage =>\n\tvalidateAikitSchema(Message.UserMessageSchema, value, label);\n\nexport const validateAikitAssistantMessage = (value: unknown, label: string): Message.AssistantMessage =>\n\tvalidateAikitSchema(Message.AssistantMessageSchema, value, label);\n\nexport const validateAikitAssistantPart = (value: unknown, label: string): Message.AssistantMessage[\"parts\"][number] =>\n\tvalidateAikitSchema(Message.AssistantMessageSchema.properties.parts.items, value, label);\n\nexport const validateAikitToolCallTerminalPart = (value: unknown, label: string): Message.ToolCallTerminalPart =>\n\tvalidateAikitSchema(Message.ToolCallTerminalPartSchema, value, label);\n\nexport const validateAikitModelInfo = (value: unknown, label: string): Model.Info =>\n\tvalidateAikitSchema(Model.Info, value, label);\n\nexport const isAikitModelInfo = (value: unknown): value is Model.Info => aikitValidatorFor(Model.Info).Check(value);\n\nexport const isAikitAssistantMessage = (value: unknown): value is Message.AssistantMessage =>\n\taikitValidatorFor(Message.AssistantMessageSchema).Check(value);\n\nexport const isAikitAssistantPart = (value: unknown): value is Message.AssistantMessage[\"parts\"][number] =>\n\taikitValidatorFor(Message.AssistantMessageSchema.properties.parts.items).Check(value);\n\nexport const isAikitToolCallTerminalPart = (value: unknown): value is Message.ToolCallTerminalPart =>\n\taikitValidatorFor(Message.ToolCallTerminalPartSchema).Check(value);\n\n/**\n * Integer greater than zero.\n */\nexport const PositiveInt = Schema.Int.check(Schema.isGreaterThan(0));\n\n/**\n * Integer greater than or equal to zero.\n */\nexport const NonNegativeInt = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0));\n\n/**\n * Cost greater than or equal with finite value\n */\nexport const NonNegativeCost = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0));\n\n/**\n * Absolute POSIX file path (e.g., `/home/user/projects/myapp/src/main.ts`).\n */\nexport const AbsolutePath = Schema.String.check(Schema.isPattern(/^\\//)).pipe(Schema.brand(\"AbsolutePath\"));\nexport type AbsolutePath = Schema.Schema.Type<typeof AbsolutePath>;\n\n/**\n * Optional public JSON field that can hold explicit `undefined` on the type\n * side but encodes it as an omitted key, matching legacy `JSON.stringify`.\n */\nexport const optional = <S extends Schema.Top>(schema: S) =>\n\tSchema.optionalKey(schema).pipe(\n\t\tSchema.decodeTo(Schema.optional(Schema.toType(schema)), {\n\t\t\tdecode: SchemaGetter.passthrough({ strict: false }),\n\t\t\tencode: SchemaGetter.transformOptional(Option.filter((value) => value !== undefined)),\n\t\t}),\n\t);\n\n/**\n * Strip `readonly` from a nested type. Stand-in for `effect`'s `Types.DeepMutable`\n * until `effect:core/x228my` (\"Types.DeepMutable widens unknown to `{}`\") lands.\n *\n * The upstream version falls through `unknown` into `{ -readonly [K in keyof T]: ... }`\n * where `keyof unknown = never`, so `unknown` collapses to `{}`. This local\n * version gates the object branch on `extends object` (which `unknown` does\n * not) so `unknown` passes through untouched.\n *\n * Primitive bailout matches upstream — without it, branded strings like\n * `string & Brand<\"SessionID\">` fall into the object branch and get their\n * prototype methods walked.\n *\n * Tuple branch preserves readonly tuples (e.g. `ConfigPlugin.Spec`'s\n * `readonly [string, Options]`); the general array branch would otherwise\n * widen them to unbounded arrays.\n */\nexport type DeepMutable<T> = T extends string | number | boolean | bigint | symbol | Function\n\t? T\n\t: T extends readonly [unknown, ...unknown[]]\n\t\t? { -readonly [K in keyof T]: DeepMutable<T[K]> }\n\t\t: T extends readonly (infer U)[]\n\t\t\t? DeepMutable<U>[]\n\t\t\t: T extends object\n\t\t\t\t? { -readonly [K in keyof T]: DeepMutable<T[K]> }\n\t\t\t\t: T;\n\n/**\n * Attach static methods to a schema object. Designed to be used with `.pipe()`:\n *\n * @example\n * export const Foo = fooSchema.pipe(\n * withStatics((schema) => ({\n * zero: schema.make(0),\n * from: Schema.decodeUnknownOption(schema),\n * }))\n * )\n */\nexport const withStatics =\n\t<S extends object, M extends Record<string, unknown>>(methods: (schema: S) => M) =>\n\t(schema: S): S & M =>\n\t\tObject.assign(schema, methods(schema));\n\n/**\n * Nominal wrapper for scalar types. The class itself is a valid schema —\n * pass it directly to `Schema.decode`, `Schema.decodeEffect`, etc.\n *\n * Overrides `~type.make` on the derived `Schema.Opaque` so `Schema.Schema.Type`\n * of a field using this newtype resolves to `Self` rather than the underlying\n * branded phantom. Without that override, passing a class instance to code\n * typed against `Schema.Schema.Type<FieldSchema>` would require a cast even\n * though the values are structurally equivalent at runtime.\n *\n * @example\n * class QuestionID extends Newtype<QuestionID>()(\"QuestionID\", Schema.String) {\n * static make(id: string): QuestionID {\n * return this.make(id)\n * }\n * }\n *\n * Schema.decodeEffect(QuestionID)(input)\n */\nexport function Newtype<Self>() {\n\treturn <const Tag extends string, S extends Schema.Top>(tag: Tag, schema: S) => {\n\t\tabstract class Base {\n\t\t\tdeclare readonly _newtype: Tag;\n\n\t\t\tstatic make(value: Schema.Schema.Type<S>): Self {\n\t\t\t\treturn value as unknown as Self;\n\t\t\t}\n\t\t}\n\n\t\tObject.setPrototypeOf(Base, schema);\n\n\t\treturn Base as unknown as (abstract new (_: never) => { readonly _newtype: Tag }) & {\n\t\t\treadonly make: (value: Schema.Schema.Type<S>) => Self;\n\t\t} & Omit<Schema.Opaque<Self, S, {}>, \"make\" | \"~type.make\"> & {\n\t\t\t\treadonly \"~type.make\": Self;\n\t\t\t};\n\t};\n}\n\nexport const DateTimeUtcFromMillis = Schema.Finite.pipe(\n\tSchema.decodeTo(Schema.DateTimeUtc, {\n\t\tdecode: SchemaGetter.transform((value) => DateTime.makeUnsafe(value)),\n\t\tencode: SchemaGetter.transform((value) => DateTime.toEpochMillis(value)),\n\t}),\n);\n"],"mappings":"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"}
|