@namzu/sdk 5.0.0 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/CHANGELOG.md +463 -0
  2. package/README.md +2 -2
  3. package/dist/agents/__tests__/run-agent-forwarding.test.d.ts +2 -0
  4. package/dist/agents/__tests__/run-agent-forwarding.test.d.ts.map +1 -0
  5. package/dist/agents/__tests__/run-agent-forwarding.test.js +76 -0
  6. package/dist/agents/__tests__/run-agent-forwarding.test.js.map +1 -0
  7. package/dist/agents/__tests__/run-completed-stop-reason.test.d.ts +2 -0
  8. package/dist/agents/__tests__/run-completed-stop-reason.test.d.ts.map +1 -0
  9. package/dist/agents/__tests__/run-completed-stop-reason.test.js +50 -0
  10. package/dist/agents/__tests__/run-completed-stop-reason.test.js.map +1 -0
  11. package/dist/agents/index.d.ts +1 -0
  12. package/dist/agents/index.d.ts.map +1 -1
  13. package/dist/agents/index.js +4 -0
  14. package/dist/agents/index.js.map +1 -1
  15. package/dist/agents/runAgent.d.ts +34 -0
  16. package/dist/agents/runAgent.d.ts.map +1 -1
  17. package/dist/agents/runAgent.js +5 -3
  18. package/dist/agents/runAgent.js.map +1 -1
  19. package/dist/config/runtime.d.ts +30 -30
  20. package/dist/constants/tools/__tests__/dangerous-patterns.test.d.ts +2 -0
  21. package/dist/constants/tools/__tests__/dangerous-patterns.test.d.ts.map +1 -0
  22. package/dist/constants/tools/__tests__/dangerous-patterns.test.js +54 -0
  23. package/dist/constants/tools/__tests__/dangerous-patterns.test.js.map +1 -0
  24. package/dist/constants/tools/index.d.ts.map +1 -1
  25. package/dist/constants/tools/index.js +28 -1
  26. package/dist/constants/tools/index.js.map +1 -1
  27. package/dist/contracts/a2a.d.ts +44 -44
  28. package/dist/directory/__tests__/derive.test.d.ts +2 -0
  29. package/dist/directory/__tests__/derive.test.d.ts.map +1 -0
  30. package/dist/directory/__tests__/derive.test.js +111 -0
  31. package/dist/directory/__tests__/derive.test.js.map +1 -0
  32. package/dist/directory/__tests__/load-diagnostics.test.d.ts +2 -0
  33. package/dist/directory/__tests__/load-diagnostics.test.d.ts.map +1 -0
  34. package/dist/directory/__tests__/load-diagnostics.test.js +106 -0
  35. package/dist/directory/__tests__/load-diagnostics.test.js.map +1 -0
  36. package/dist/directory/__tests__/load-directory.test.d.ts +2 -0
  37. package/dist/directory/__tests__/load-directory.test.d.ts.map +1 -0
  38. package/dist/directory/__tests__/load-directory.test.js +196 -0
  39. package/dist/directory/__tests__/load-directory.test.js.map +1 -0
  40. package/dist/directory/__tests__/subagents.test.d.ts +2 -0
  41. package/dist/directory/__tests__/subagents.test.d.ts.map +1 -0
  42. package/dist/directory/__tests__/subagents.test.js +117 -0
  43. package/dist/directory/__tests__/subagents.test.js.map +1 -0
  44. package/dist/directory/__tests__/supervisor-budget.test.d.ts +2 -0
  45. package/dist/directory/__tests__/supervisor-budget.test.d.ts.map +1 -0
  46. package/dist/directory/__tests__/supervisor-budget.test.js +97 -0
  47. package/dist/directory/__tests__/supervisor-budget.test.js.map +1 -0
  48. package/dist/directory/derive-supervisor.d.ts +58 -0
  49. package/dist/directory/derive-supervisor.d.ts.map +1 -0
  50. package/dist/directory/derive-supervisor.js +88 -0
  51. package/dist/directory/derive-supervisor.js.map +1 -0
  52. package/dist/directory/derive.d.ts +12 -0
  53. package/dist/directory/derive.d.ts.map +1 -0
  54. package/dist/directory/derive.js +58 -0
  55. package/dist/directory/derive.js.map +1 -0
  56. package/dist/directory/index.d.ts +7 -0
  57. package/dist/directory/index.d.ts.map +1 -0
  58. package/dist/directory/index.js +5 -0
  59. package/dist/directory/index.js.map +1 -0
  60. package/dist/directory/load.d.ts +14 -0
  61. package/dist/directory/load.d.ts.map +1 -0
  62. package/dist/directory/load.js +488 -0
  63. package/dist/directory/load.js.map +1 -0
  64. package/dist/directory/scan.d.ts +36 -0
  65. package/dist/directory/scan.d.ts.map +1 -0
  66. package/dist/directory/scan.js +136 -0
  67. package/dist/directory/scan.js.map +1 -0
  68. package/dist/directory/types.d.ts +215 -0
  69. package/dist/directory/types.d.ts.map +1 -0
  70. package/dist/directory/types.js +8 -0
  71. package/dist/directory/types.js.map +1 -0
  72. package/dist/plugin/__tests__/path-containment.test.d.ts +2 -0
  73. package/dist/plugin/__tests__/path-containment.test.d.ts.map +1 -0
  74. package/dist/plugin/__tests__/path-containment.test.js +91 -0
  75. package/dist/plugin/__tests__/path-containment.test.js.map +1 -0
  76. package/dist/plugin/lifecycle.d.ts.map +1 -1
  77. package/dist/plugin/lifecycle.js +3 -3
  78. package/dist/plugin/lifecycle.js.map +1 -1
  79. package/dist/plugin/loader.d.ts.map +1 -1
  80. package/dist/plugin/loader.js +12 -2
  81. package/dist/plugin/loader.js.map +1 -1
  82. package/dist/provider/__tests__/model-version.test.d.ts +2 -0
  83. package/dist/provider/__tests__/model-version.test.d.ts.map +1 -0
  84. package/dist/provider/__tests__/model-version.test.js +80 -0
  85. package/dist/provider/__tests__/model-version.test.js.map +1 -0
  86. package/dist/provider/__tests__/strict-schema.test.d.ts +2 -0
  87. package/dist/provider/__tests__/strict-schema.test.d.ts.map +1 -0
  88. package/dist/provider/__tests__/strict-schema.test.js +109 -0
  89. package/dist/provider/__tests__/strict-schema.test.js.map +1 -0
  90. package/dist/provider/__tests__/typed-error-classification.test.d.ts +2 -0
  91. package/dist/provider/__tests__/typed-error-classification.test.d.ts.map +1 -0
  92. package/dist/provider/__tests__/typed-error-classification.test.js +123 -0
  93. package/dist/provider/__tests__/typed-error-classification.test.js.map +1 -0
  94. package/dist/provider/model-version.d.ts +60 -0
  95. package/dist/provider/model-version.d.ts.map +1 -0
  96. package/dist/provider/model-version.js +64 -0
  97. package/dist/provider/model-version.js.map +1 -0
  98. package/dist/provider/retry.d.ts.map +1 -1
  99. package/dist/provider/retry.js +23 -7
  100. package/dist/provider/retry.js.map +1 -1
  101. package/dist/provider/strict-schema.d.ts +49 -0
  102. package/dist/provider/strict-schema.d.ts.map +1 -0
  103. package/dist/provider/strict-schema.js +112 -0
  104. package/dist/provider/strict-schema.js.map +1 -0
  105. package/dist/public-runtime.d.ts +6 -1
  106. package/dist/public-runtime.d.ts.map +1 -1
  107. package/dist/public-runtime.js +21 -1
  108. package/dist/public-runtime.js.map +1 -1
  109. package/dist/public-tools.d.ts +1 -0
  110. package/dist/public-tools.d.ts.map +1 -1
  111. package/dist/public-tools.js +4 -0
  112. package/dist/public-tools.js.map +1 -1
  113. package/dist/public-types.d.ts +2 -0
  114. package/dist/public-types.d.ts.map +1 -1
  115. package/dist/registry/tool/__tests__/strict-registration.test.d.ts +2 -0
  116. package/dist/registry/tool/__tests__/strict-registration.test.d.ts.map +1 -0
  117. package/dist/registry/tool/__tests__/strict-registration.test.js +82 -0
  118. package/dist/registry/tool/__tests__/strict-registration.test.js.map +1 -0
  119. package/dist/registry/tool/execute.d.ts.map +1 -1
  120. package/dist/registry/tool/execute.js +16 -0
  121. package/dist/registry/tool/execute.js.map +1 -1
  122. package/dist/runtime/query/__tests__/stream-recovery.test.js +5 -0
  123. package/dist/runtime/query/__tests__/stream-recovery.test.js.map +1 -1
  124. package/dist/runtime/query/result.d.ts.map +1 -1
  125. package/dist/runtime/query/result.js +5 -0
  126. package/dist/runtime/query/result.js.map +1 -1
  127. package/dist/tools/builtins/__tests__/edit-insert-reachable.test.js +7 -1
  128. package/dist/tools/builtins/__tests__/edit-insert-reachable.test.js.map +1 -1
  129. package/dist/tools/builtins/__tests__/edit.test.js +1 -1
  130. package/dist/tools/builtins/__tests__/edit.test.js.map +1 -1
  131. package/dist/tools/builtins/edit.d.ts.map +1 -1
  132. package/dist/tools/builtins/edit.js +20 -2
  133. package/dist/tools/builtins/edit.js.map +1 -1
  134. package/dist/types/plugin/index.d.ts +4 -4
  135. package/dist/types/provider/errors.d.ts +0 -17
  136. package/dist/types/provider/errors.d.ts.map +1 -1
  137. package/dist/types/provider/errors.js +60 -0
  138. package/dist/types/provider/errors.js.map +1 -1
  139. package/dist/types/run/events.d.ts +17 -2
  140. package/dist/types/run/events.d.ts.map +1 -1
  141. package/dist/types/run/events.js.map +1 -1
  142. package/dist/types/verification/index.d.ts +6 -6
  143. package/package.json +1 -1
  144. package/src/agents/__tests__/run-agent-forwarding.test.ts +85 -0
  145. package/src/agents/__tests__/run-completed-stop-reason.test.ts +59 -0
  146. package/src/agents/index.ts +8 -0
  147. package/src/agents/runAgent.ts +30 -4
  148. package/src/constants/tools/__tests__/dangerous-patterns.test.ts +62 -0
  149. package/src/constants/tools/index.ts +28 -1
  150. package/src/directory/__tests__/derive.test.ts +135 -0
  151. package/src/directory/__tests__/load-diagnostics.test.ts +126 -0
  152. package/src/directory/__tests__/load-directory.test.ts +243 -0
  153. package/src/directory/__tests__/subagents.test.ts +155 -0
  154. package/src/directory/__tests__/supervisor-budget.test.ts +117 -0
  155. package/src/directory/derive-supervisor.ts +149 -0
  156. package/src/directory/derive.ts +70 -0
  157. package/src/directory/index.ts +27 -0
  158. package/src/directory/load.ts +556 -0
  159. package/src/directory/scan.ts +163 -0
  160. package/src/directory/types.ts +254 -0
  161. package/src/plugin/__tests__/path-containment.test.ts +107 -0
  162. package/src/plugin/lifecycle.ts +3 -3
  163. package/src/plugin/loader.ts +12 -2
  164. package/src/provider/__tests__/model-version.test.ts +93 -0
  165. package/src/provider/__tests__/strict-schema.test.ts +133 -0
  166. package/src/provider/__tests__/typed-error-classification.test.ts +143 -0
  167. package/src/provider/model-version.ts +98 -0
  168. package/src/provider/retry.ts +23 -7
  169. package/src/provider/strict-schema.ts +125 -0
  170. package/src/public-runtime.ts +31 -0
  171. package/src/public-tools.ts +4 -0
  172. package/src/public-types.ts +8 -0
  173. package/src/registry/tool/__tests__/strict-registration.test.ts +115 -0
  174. package/src/registry/tool/execute.ts +16 -0
  175. package/src/runtime/query/__tests__/stream-recovery.test.ts +5 -0
  176. package/src/runtime/query/result.ts +5 -0
  177. package/src/tools/builtins/__tests__/edit-insert-reachable.test.ts +8 -2
  178. package/src/tools/builtins/__tests__/edit.test.ts +1 -1
  179. package/src/tools/builtins/edit.ts +20 -2
  180. package/src/types/provider/errors.ts +71 -0
  181. package/src/types/run/events.ts +15 -2
@@ -60,13 +60,13 @@ export declare const DataPartSchema: z.ZodObject<{
60
60
  mimeType: z.ZodOptional<z.ZodString>;
61
61
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
62
62
  }, "strict", z.ZodTypeAny, {
63
- kind: "data";
64
63
  data: Record<string, unknown>;
64
+ kind: "data";
65
65
  metadata?: Record<string, unknown> | undefined;
66
66
  mimeType?: string | undefined;
67
67
  }, {
68
- kind: "data";
69
68
  data: Record<string, unknown>;
69
+ kind: "data";
70
70
  metadata?: Record<string, unknown> | undefined;
71
71
  mimeType?: string | undefined;
72
72
  }>;
@@ -125,13 +125,13 @@ export declare const A2APartSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject
125
125
  mimeType: z.ZodOptional<z.ZodString>;
126
126
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
127
127
  }, "strict", z.ZodTypeAny, {
128
- kind: "data";
129
128
  data: Record<string, unknown>;
129
+ kind: "data";
130
130
  metadata?: Record<string, unknown> | undefined;
131
131
  mimeType?: string | undefined;
132
132
  }, {
133
- kind: "data";
134
133
  data: Record<string, unknown>;
134
+ kind: "data";
135
135
  metadata?: Record<string, unknown> | undefined;
136
136
  mimeType?: string | undefined;
137
137
  }>]>;
@@ -192,13 +192,13 @@ export declare const A2AMessageSchema: z.ZodObject<{
192
192
  mimeType: z.ZodOptional<z.ZodString>;
193
193
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
194
194
  }, "strict", z.ZodTypeAny, {
195
- kind: "data";
196
195
  data: Record<string, unknown>;
196
+ kind: "data";
197
197
  metadata?: Record<string, unknown> | undefined;
198
198
  mimeType?: string | undefined;
199
199
  }, {
200
- kind: "data";
201
200
  data: Record<string, unknown>;
201
+ kind: "data";
202
202
  metadata?: Record<string, unknown> | undefined;
203
203
  mimeType?: string | undefined;
204
204
  }>]>, "many">;
@@ -219,8 +219,8 @@ export declare const A2AMessageSchema: z.ZodObject<{
219
219
  };
220
220
  metadata?: Record<string, unknown> | undefined;
221
221
  } | {
222
- kind: "data";
223
222
  data: Record<string, unknown>;
223
+ kind: "data";
224
224
  metadata?: Record<string, unknown> | undefined;
225
225
  mimeType?: string | undefined;
226
226
  })[];
@@ -241,8 +241,8 @@ export declare const A2AMessageSchema: z.ZodObject<{
241
241
  };
242
242
  metadata?: Record<string, unknown> | undefined;
243
243
  } | {
244
- kind: "data";
245
244
  data: Record<string, unknown>;
245
+ kind: "data";
246
246
  metadata?: Record<string, unknown> | undefined;
247
247
  mimeType?: string | undefined;
248
248
  })[];
@@ -307,13 +307,13 @@ export declare const A2ATaskStatusSchema: z.ZodObject<{
307
307
  mimeType: z.ZodOptional<z.ZodString>;
308
308
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
309
309
  }, "strict", z.ZodTypeAny, {
310
- kind: "data";
311
310
  data: Record<string, unknown>;
311
+ kind: "data";
312
312
  metadata?: Record<string, unknown> | undefined;
313
313
  mimeType?: string | undefined;
314
314
  }, {
315
- kind: "data";
316
315
  data: Record<string, unknown>;
316
+ kind: "data";
317
317
  metadata?: Record<string, unknown> | undefined;
318
318
  mimeType?: string | undefined;
319
319
  }>]>, "many">;
@@ -334,8 +334,8 @@ export declare const A2ATaskStatusSchema: z.ZodObject<{
334
334
  };
335
335
  metadata?: Record<string, unknown> | undefined;
336
336
  } | {
337
- kind: "data";
338
337
  data: Record<string, unknown>;
338
+ kind: "data";
339
339
  metadata?: Record<string, unknown> | undefined;
340
340
  mimeType?: string | undefined;
341
341
  })[];
@@ -356,8 +356,8 @@ export declare const A2ATaskStatusSchema: z.ZodObject<{
356
356
  };
357
357
  metadata?: Record<string, unknown> | undefined;
358
358
  } | {
359
- kind: "data";
360
359
  data: Record<string, unknown>;
360
+ kind: "data";
361
361
  metadata?: Record<string, unknown> | undefined;
362
362
  mimeType?: string | undefined;
363
363
  })[];
@@ -382,8 +382,8 @@ export declare const A2ATaskStatusSchema: z.ZodObject<{
382
382
  };
383
383
  metadata?: Record<string, unknown> | undefined;
384
384
  } | {
385
- kind: "data";
386
385
  data: Record<string, unknown>;
386
+ kind: "data";
387
387
  metadata?: Record<string, unknown> | undefined;
388
388
  mimeType?: string | undefined;
389
389
  })[];
@@ -408,8 +408,8 @@ export declare const A2ATaskStatusSchema: z.ZodObject<{
408
408
  };
409
409
  metadata?: Record<string, unknown> | undefined;
410
410
  } | {
411
- kind: "data";
412
411
  data: Record<string, unknown>;
412
+ kind: "data";
413
413
  metadata?: Record<string, unknown> | undefined;
414
414
  mimeType?: string | undefined;
415
415
  })[];
@@ -476,13 +476,13 @@ export declare const A2AArtifactSchema: z.ZodObject<{
476
476
  mimeType: z.ZodOptional<z.ZodString>;
477
477
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
478
478
  }, "strict", z.ZodTypeAny, {
479
- kind: "data";
480
479
  data: Record<string, unknown>;
480
+ kind: "data";
481
481
  metadata?: Record<string, unknown> | undefined;
482
482
  mimeType?: string | undefined;
483
483
  }, {
484
- kind: "data";
485
484
  data: Record<string, unknown>;
485
+ kind: "data";
486
486
  metadata?: Record<string, unknown> | undefined;
487
487
  mimeType?: string | undefined;
488
488
  }>]>, "many">;
@@ -502,8 +502,8 @@ export declare const A2AArtifactSchema: z.ZodObject<{
502
502
  };
503
503
  metadata?: Record<string, unknown> | undefined;
504
504
  } | {
505
- kind: "data";
506
505
  data: Record<string, unknown>;
506
+ kind: "data";
507
507
  metadata?: Record<string, unknown> | undefined;
508
508
  mimeType?: string | undefined;
509
509
  })[];
@@ -526,8 +526,8 @@ export declare const A2AArtifactSchema: z.ZodObject<{
526
526
  };
527
527
  metadata?: Record<string, unknown> | undefined;
528
528
  } | {
529
- kind: "data";
530
529
  data: Record<string, unknown>;
530
+ kind: "data";
531
531
  metadata?: Record<string, unknown> | undefined;
532
532
  mimeType?: string | undefined;
533
533
  })[];
@@ -594,13 +594,13 @@ export declare const A2AMessageSendSchema: z.ZodObject<{
594
594
  mimeType: z.ZodOptional<z.ZodString>;
595
595
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
596
596
  }, "strict", z.ZodTypeAny, {
597
- kind: "data";
598
597
  data: Record<string, unknown>;
598
+ kind: "data";
599
599
  metadata?: Record<string, unknown> | undefined;
600
600
  mimeType?: string | undefined;
601
601
  }, {
602
- kind: "data";
603
602
  data: Record<string, unknown>;
603
+ kind: "data";
604
604
  metadata?: Record<string, unknown> | undefined;
605
605
  mimeType?: string | undefined;
606
606
  }>]>, "many">;
@@ -621,8 +621,8 @@ export declare const A2AMessageSendSchema: z.ZodObject<{
621
621
  };
622
622
  metadata?: Record<string, unknown> | undefined;
623
623
  } | {
624
- kind: "data";
625
624
  data: Record<string, unknown>;
625
+ kind: "data";
626
626
  metadata?: Record<string, unknown> | undefined;
627
627
  mimeType?: string | undefined;
628
628
  })[];
@@ -643,8 +643,8 @@ export declare const A2AMessageSendSchema: z.ZodObject<{
643
643
  };
644
644
  metadata?: Record<string, unknown> | undefined;
645
645
  } | {
646
- kind: "data";
647
646
  data: Record<string, unknown>;
647
+ kind: "data";
648
648
  metadata?: Record<string, unknown> | undefined;
649
649
  mimeType?: string | undefined;
650
650
  })[];
@@ -670,8 +670,8 @@ export declare const A2AMessageSendSchema: z.ZodObject<{
670
670
  };
671
671
  metadata?: Record<string, unknown> | undefined;
672
672
  } | {
673
- kind: "data";
674
673
  data: Record<string, unknown>;
674
+ kind: "data";
675
675
  metadata?: Record<string, unknown> | undefined;
676
676
  mimeType?: string | undefined;
677
677
  })[];
@@ -697,8 +697,8 @@ export declare const A2AMessageSendSchema: z.ZodObject<{
697
697
  };
698
698
  metadata?: Record<string, unknown> | undefined;
699
699
  } | {
700
- kind: "data";
701
700
  data: Record<string, unknown>;
701
+ kind: "data";
702
702
  metadata?: Record<string, unknown> | undefined;
703
703
  mimeType?: string | undefined;
704
704
  })[];
@@ -803,13 +803,13 @@ export declare const A2ATaskSchema: z.ZodObject<{
803
803
  mimeType: z.ZodOptional<z.ZodString>;
804
804
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
805
805
  }, "strict", z.ZodTypeAny, {
806
- kind: "data";
807
806
  data: Record<string, unknown>;
807
+ kind: "data";
808
808
  metadata?: Record<string, unknown> | undefined;
809
809
  mimeType?: string | undefined;
810
810
  }, {
811
- kind: "data";
812
811
  data: Record<string, unknown>;
812
+ kind: "data";
813
813
  metadata?: Record<string, unknown> | undefined;
814
814
  mimeType?: string | undefined;
815
815
  }>]>, "many">;
@@ -830,8 +830,8 @@ export declare const A2ATaskSchema: z.ZodObject<{
830
830
  };
831
831
  metadata?: Record<string, unknown> | undefined;
832
832
  } | {
833
- kind: "data";
834
833
  data: Record<string, unknown>;
834
+ kind: "data";
835
835
  metadata?: Record<string, unknown> | undefined;
836
836
  mimeType?: string | undefined;
837
837
  })[];
@@ -852,8 +852,8 @@ export declare const A2ATaskSchema: z.ZodObject<{
852
852
  };
853
853
  metadata?: Record<string, unknown> | undefined;
854
854
  } | {
855
- kind: "data";
856
855
  data: Record<string, unknown>;
856
+ kind: "data";
857
857
  metadata?: Record<string, unknown> | undefined;
858
858
  mimeType?: string | undefined;
859
859
  })[];
@@ -878,8 +878,8 @@ export declare const A2ATaskSchema: z.ZodObject<{
878
878
  };
879
879
  metadata?: Record<string, unknown> | undefined;
880
880
  } | {
881
- kind: "data";
882
881
  data: Record<string, unknown>;
882
+ kind: "data";
883
883
  metadata?: Record<string, unknown> | undefined;
884
884
  mimeType?: string | undefined;
885
885
  })[];
@@ -904,8 +904,8 @@ export declare const A2ATaskSchema: z.ZodObject<{
904
904
  };
905
905
  metadata?: Record<string, unknown> | undefined;
906
906
  } | {
907
- kind: "data";
908
907
  data: Record<string, unknown>;
908
+ kind: "data";
909
909
  metadata?: Record<string, unknown> | undefined;
910
910
  mimeType?: string | undefined;
911
911
  })[];
@@ -970,13 +970,13 @@ export declare const A2ATaskSchema: z.ZodObject<{
970
970
  mimeType: z.ZodOptional<z.ZodString>;
971
971
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
972
972
  }, "strict", z.ZodTypeAny, {
973
- kind: "data";
974
973
  data: Record<string, unknown>;
974
+ kind: "data";
975
975
  metadata?: Record<string, unknown> | undefined;
976
976
  mimeType?: string | undefined;
977
977
  }, {
978
- kind: "data";
979
978
  data: Record<string, unknown>;
979
+ kind: "data";
980
980
  metadata?: Record<string, unknown> | undefined;
981
981
  mimeType?: string | undefined;
982
982
  }>]>, "many">;
@@ -997,8 +997,8 @@ export declare const A2ATaskSchema: z.ZodObject<{
997
997
  };
998
998
  metadata?: Record<string, unknown> | undefined;
999
999
  } | {
1000
- kind: "data";
1001
1000
  data: Record<string, unknown>;
1001
+ kind: "data";
1002
1002
  metadata?: Record<string, unknown> | undefined;
1003
1003
  mimeType?: string | undefined;
1004
1004
  })[];
@@ -1019,8 +1019,8 @@ export declare const A2ATaskSchema: z.ZodObject<{
1019
1019
  };
1020
1020
  metadata?: Record<string, unknown> | undefined;
1021
1021
  } | {
1022
- kind: "data";
1023
1022
  data: Record<string, unknown>;
1023
+ kind: "data";
1024
1024
  metadata?: Record<string, unknown> | undefined;
1025
1025
  mimeType?: string | undefined;
1026
1026
  })[];
@@ -1085,13 +1085,13 @@ export declare const A2ATaskSchema: z.ZodObject<{
1085
1085
  mimeType: z.ZodOptional<z.ZodString>;
1086
1086
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1087
1087
  }, "strict", z.ZodTypeAny, {
1088
- kind: "data";
1089
1088
  data: Record<string, unknown>;
1089
+ kind: "data";
1090
1090
  metadata?: Record<string, unknown> | undefined;
1091
1091
  mimeType?: string | undefined;
1092
1092
  }, {
1093
- kind: "data";
1094
1093
  data: Record<string, unknown>;
1094
+ kind: "data";
1095
1095
  metadata?: Record<string, unknown> | undefined;
1096
1096
  mimeType?: string | undefined;
1097
1097
  }>]>, "many">;
@@ -1111,8 +1111,8 @@ export declare const A2ATaskSchema: z.ZodObject<{
1111
1111
  };
1112
1112
  metadata?: Record<string, unknown> | undefined;
1113
1113
  } | {
1114
- kind: "data";
1115
1114
  data: Record<string, unknown>;
1115
+ kind: "data";
1116
1116
  metadata?: Record<string, unknown> | undefined;
1117
1117
  mimeType?: string | undefined;
1118
1118
  })[];
@@ -1135,8 +1135,8 @@ export declare const A2ATaskSchema: z.ZodObject<{
1135
1135
  };
1136
1136
  metadata?: Record<string, unknown> | undefined;
1137
1137
  } | {
1138
- kind: "data";
1139
1138
  data: Record<string, unknown>;
1139
+ kind: "data";
1140
1140
  metadata?: Record<string, unknown> | undefined;
1141
1141
  mimeType?: string | undefined;
1142
1142
  })[];
@@ -1165,8 +1165,8 @@ export declare const A2ATaskSchema: z.ZodObject<{
1165
1165
  };
1166
1166
  metadata?: Record<string, unknown> | undefined;
1167
1167
  } | {
1168
- kind: "data";
1169
1168
  data: Record<string, unknown>;
1169
+ kind: "data";
1170
1170
  metadata?: Record<string, unknown> | undefined;
1171
1171
  mimeType?: string | undefined;
1172
1172
  })[];
@@ -1193,8 +1193,8 @@ export declare const A2ATaskSchema: z.ZodObject<{
1193
1193
  };
1194
1194
  metadata?: Record<string, unknown> | undefined;
1195
1195
  } | {
1196
- kind: "data";
1197
1196
  data: Record<string, unknown>;
1197
+ kind: "data";
1198
1198
  metadata?: Record<string, unknown> | undefined;
1199
1199
  mimeType?: string | undefined;
1200
1200
  })[];
@@ -1215,8 +1215,8 @@ export declare const A2ATaskSchema: z.ZodObject<{
1215
1215
  };
1216
1216
  metadata?: Record<string, unknown> | undefined;
1217
1217
  } | {
1218
- kind: "data";
1219
1218
  data: Record<string, unknown>;
1219
+ kind: "data";
1220
1220
  metadata?: Record<string, unknown> | undefined;
1221
1221
  mimeType?: string | undefined;
1222
1222
  })[];
@@ -1244,8 +1244,8 @@ export declare const A2ATaskSchema: z.ZodObject<{
1244
1244
  };
1245
1245
  metadata?: Record<string, unknown> | undefined;
1246
1246
  } | {
1247
- kind: "data";
1248
1247
  data: Record<string, unknown>;
1248
+ kind: "data";
1249
1249
  metadata?: Record<string, unknown> | undefined;
1250
1250
  mimeType?: string | undefined;
1251
1251
  })[];
@@ -1272,8 +1272,8 @@ export declare const A2ATaskSchema: z.ZodObject<{
1272
1272
  };
1273
1273
  metadata?: Record<string, unknown> | undefined;
1274
1274
  } | {
1275
- kind: "data";
1276
1275
  data: Record<string, unknown>;
1276
+ kind: "data";
1277
1277
  metadata?: Record<string, unknown> | undefined;
1278
1278
  mimeType?: string | undefined;
1279
1279
  })[];
@@ -1294,8 +1294,8 @@ export declare const A2ATaskSchema: z.ZodObject<{
1294
1294
  };
1295
1295
  metadata?: Record<string, unknown> | undefined;
1296
1296
  } | {
1297
- kind: "data";
1298
1297
  data: Record<string, unknown>;
1298
+ kind: "data";
1299
1299
  metadata?: Record<string, unknown> | undefined;
1300
1300
  mimeType?: string | undefined;
1301
1301
  })[];
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=derive.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive.test.d.ts","sourceRoot":"","sources":["../../../src/directory/__tests__/derive.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,111 @@
1
+ import { mkdirSync, mkdtempSync, writeFileSync } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { describe, expect, it } from 'vitest';
5
+ import { deriveRunOptions } from '../derive.js';
6
+ import { loadDirectory } from '../load.js';
7
+ const provider = { id: 'mock', name: 'Mock' };
8
+ function project(files) {
9
+ const root = mkdtempSync(join(tmpdir(), 'namzu-derive-'));
10
+ for (const [relative, body] of Object.entries(files)) {
11
+ const full = join(root, relative);
12
+ mkdirSync(join(full, '..'), { recursive: true });
13
+ writeFileSync(full, body);
14
+ }
15
+ return root;
16
+ }
17
+ const TOOL = (name) => `
18
+ export default {
19
+ name: ${JSON.stringify(name)},
20
+ description: 'a tool',
21
+ inputSchema: { parse: (v) => v, safeParse: (v) => ({ success: true, data: v }) },
22
+ execute: async () => ({ success: true, output: 'ok' }),
23
+ }
24
+ `;
25
+ describe('turning a manifest into run options', () => {
26
+ it('carries instructions, config and tools across', async () => {
27
+ const root = project({
28
+ 'instructions.md': 'You are terse.',
29
+ 'agent.js': 'export default { model: "m", maxIterations: 3 }',
30
+ 'tools/a.js': TOOL('a'),
31
+ });
32
+ const { manifest } = await loadDirectory(root);
33
+ const options = deriveRunOptions(manifest, { provider, prompt: 'hi' });
34
+ expect(options.model).toBe('m');
35
+ expect(options.instructions).toBe('You are terse.');
36
+ expect(options.maxIterations).toBe(3);
37
+ expect(options.tools?.has('a')).toBe(true);
38
+ });
39
+ it('points the working directory at the project, not the host', async () => {
40
+ // Left unset this defaults to the host's cwd, which aims the file
41
+ // tools' containment at the host's own source tree.
42
+ const root = project({
43
+ 'instructions.md': 'hi',
44
+ 'agent.js': 'export default { model: "m" }',
45
+ });
46
+ const { manifest } = await loadDirectory(root);
47
+ expect(deriveRunOptions(manifest, { provider, prompt: 'hi' }).workingDirectory).toBe(manifest.root);
48
+ });
49
+ it('lets an explicit model win over agent.ts', async () => {
50
+ const root = project({
51
+ 'instructions.md': 'hi',
52
+ 'agent.js': 'export default { model: "from-file" }',
53
+ });
54
+ const { manifest } = await loadDirectory(root);
55
+ expect(deriveRunOptions(manifest, { provider, prompt: 'hi', model: 'explicit' }).model).toBe('explicit');
56
+ });
57
+ it('refuses when nothing names a model', async () => {
58
+ const root = project({ 'instructions.md': 'hi' });
59
+ const { manifest } = await loadDirectory(root);
60
+ expect(() => deriveRunOptions(manifest, { provider, prompt: 'hi' })).toThrow(/No model/);
61
+ });
62
+ it('forwards a name only when agent.ts declared one', async () => {
63
+ // A name guessed from a directory basename becomes the agent id in
64
+ // traces, where two sibling projects both called `agent` merge into one
65
+ // attribution bucket.
66
+ const declared = project({
67
+ 'instructions.md': 'hi',
68
+ 'agent.js': 'export default { model: "m", name: "researcher" }',
69
+ });
70
+ const guessed = project({
71
+ 'instructions.md': 'hi',
72
+ 'agent.js': 'export default { model: "m" }',
73
+ });
74
+ const withName = deriveRunOptions((await loadDirectory(declared)).manifest, {
75
+ provider,
76
+ prompt: 'x',
77
+ });
78
+ const without = deriveRunOptions((await loadDirectory(guessed)).manifest, {
79
+ provider,
80
+ prompt: 'x',
81
+ });
82
+ expect(withName.name).toBe('researcher');
83
+ expect(without.name).toBeUndefined();
84
+ });
85
+ it('refuses a manifest whose modules were never loaded', async () => {
86
+ // `manifest.tools` is empty for a reason that has nothing to do with
87
+ // the project. Running it would produce an agent with no capabilities
88
+ // and no indication why.
89
+ const root = project({
90
+ 'instructions.md': 'hi',
91
+ 'agent.js': 'export default { model: "m" }',
92
+ 'tools/a.js': TOOL('a'),
93
+ });
94
+ const { manifest } = await loadDirectory(root, { modules: 'skip' });
95
+ expect(() => deriveRunOptions(manifest, { provider, prompt: 'hi' })).toThrow(/modules: "skip"/);
96
+ });
97
+ it('lets overrides win over everything', async () => {
98
+ const root = project({
99
+ 'instructions.md': 'hi',
100
+ 'agent.js': 'export default { model: "m", maxIterations: 3 }',
101
+ });
102
+ const { manifest } = await loadDirectory(root);
103
+ const options = deriveRunOptions(manifest, {
104
+ provider,
105
+ prompt: 'hi',
106
+ overrides: { maxIterations: 99 },
107
+ });
108
+ expect(options.maxIterations).toBe(99);
109
+ });
110
+ });
111
+ //# sourceMappingURL=derive.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive.test.js","sourceRoot":"","sources":["../../../src/directory/__tests__/derive.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=load-diagnostics.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-diagnostics.test.d.ts","sourceRoot":"","sources":["../../../src/directory/__tests__/load-diagnostics.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,106 @@
1
+ import { mkdirSync, mkdtempSync, writeFileSync } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { describe, expect, it } from 'vitest';
5
+ import { loadDirectory } from '../load.js';
6
+ /**
7
+ * Three refusals this loader claimed to make and did not.
8
+ *
9
+ * Each is the same shape: a check that existed, read the wrong thing, and
10
+ * therefore reported the wrong answer while looking correct in review. A
11
+ * loader whose entire job is to say what is wrong with a directory has to be
12
+ * held to the diagnostics it actually emits, not the ones its code appears to
13
+ * emit.
14
+ */
15
+ function project(files) {
16
+ const root = mkdtempSync(join(tmpdir(), 'namzu-diag-'));
17
+ for (const [relative, body] of Object.entries(files)) {
18
+ const full = join(root, relative);
19
+ mkdirSync(join(full, '..'), { recursive: true });
20
+ writeFileSync(full, body);
21
+ }
22
+ return root;
23
+ }
24
+ describe('a tool that would crash later is refused now', () => {
25
+ it('rejects a default export with no inputSchema', async () => {
26
+ // `name` and `execute` alone used to pass. The object then registered
27
+ // clean and died in `toLLMTools()` on `inputSchema._def` — a TypeError
28
+ // naming neither this file nor this loader.
29
+ const root = project({
30
+ 'tools/broken.js': `
31
+ export default {
32
+ name: 'broken',
33
+ description: 'no schema',
34
+ execute: async () => ({ success: true }),
35
+ }
36
+ `,
37
+ });
38
+ const { manifest, diagnostics, ok } = await loadDirectory(root);
39
+ expect(ok).toBe(false);
40
+ expect(diagnostics.map((d) => d.code)).toContain('not_a_tool');
41
+ expect(manifest.tools).toHaveLength(0);
42
+ });
43
+ it('still accepts a hand-written tool that satisfies the published type', async () => {
44
+ // The required set and no more: demanding `defineTool`'s extras would
45
+ // make this loader refuse an object the SDK's own type accepts.
46
+ const root = project({
47
+ 'tools/fine.js': `
48
+ export default {
49
+ name: 'fine',
50
+ description: 'a tool',
51
+ inputSchema: { parse: (v) => v },
52
+ execute: async () => ({ success: true }),
53
+ }
54
+ `,
55
+ });
56
+ const { manifest, ok } = await loadDirectory(root);
57
+ expect(ok).toBe(true);
58
+ expect(manifest.tools).toHaveLength(1);
59
+ });
60
+ });
61
+ describe('an import failure explains itself', () => {
62
+ it('gives the extension hint for a module it cannot resolve', async () => {
63
+ // The hint is chosen from Node's error CODE. It used to be matched
64
+ // against the message, which never contains the code, so every hint in
65
+ // the function was unreachable and every author got the bare error.
66
+ const root = project({
67
+ 'tools/importer.js': `
68
+ import './nowhere-at-all.js'
69
+ export default { name: 'x', description: 'x', inputSchema: {}, execute: async () => ({}) }
70
+ `,
71
+ });
72
+ const { diagnostics } = await loadDirectory(root);
73
+ const failed = diagnostics.find((d) => d.code === 'module_load_failed');
74
+ expect(failed).toBeDefined();
75
+ expect(failed?.cause).toContain('real extension');
76
+ });
77
+ });
78
+ describe('agent.ts metadata is checked, not assumed', () => {
79
+ it('refuses metadata values that are not strings', async () => {
80
+ // Typed `Record<string, string>` and admitted on `typeof === 'object'`,
81
+ // so the values were never looked at and the type was a promise this
82
+ // loader did not keep.
83
+ const root = project({
84
+ 'agent.js': 'export default { model: "m", metadata: { count: 1 } }',
85
+ });
86
+ const { diagnostics, ok } = await loadDirectory(root);
87
+ expect(ok).toBe(false);
88
+ expect(diagnostics.some((d) => d.code === 'invalid_config')).toBe(true);
89
+ });
90
+ it('refuses an array, which typeof calls an object', async () => {
91
+ const root = project({
92
+ 'agent.js': 'export default { model: "m", metadata: ["a", "b"] }',
93
+ });
94
+ const { ok } = await loadDirectory(root);
95
+ expect(ok).toBe(false);
96
+ });
97
+ it('accepts a metadata object of strings', async () => {
98
+ const root = project({
99
+ 'agent.js': 'export default { model: "m", metadata: { team: "core" } }',
100
+ });
101
+ const { manifest, ok } = await loadDirectory(root);
102
+ expect(ok).toBe(true);
103
+ expect(manifest.config.metadata).toEqual({ team: 'core' });
104
+ });
105
+ });
106
+ //# sourceMappingURL=load-diagnostics.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-diagnostics.test.js","sourceRoot":"","sources":["../../../src/directory/__tests__/load-diagnostics.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C;;;;;;;;GAQG;AAEH,SAAS,OAAO,CAAC,KAA6B;IAC7C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC,CAAA;IACvD,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QACjC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAChD,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1B,CAAC;IACD,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;IAC7D,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC7D,sEAAsE;QACtE,uEAAuE;QACvE,4CAA4C;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC;YACpB,iBAAiB,EAAE;;;;;;CAMrB;SACE,CAAC,CAAA;QAEF,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAA;QAE/D,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACtB,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QAC9D,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACpF,sEAAsE;QACtE,gEAAgE;QAChE,MAAM,IAAI,GAAG,OAAO,CAAC;YACpB,eAAe,EAAE;;;;;;;CAOnB;SACE,CAAC,CAAA;QAEF,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAA;QAElD,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IAClD,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACxE,mEAAmE;QACnE,uEAAuE;QACvE,oEAAoE;QACpE,MAAM,IAAI,GAAG,OAAO,CAAC;YACpB,mBAAmB,EAAE;;;CAGvB;SACE,CAAC,CAAA;QAEF,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAA;QAEjD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAA;QACvE,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;QAC5B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;IAC1D,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC7D,wEAAwE;QACxE,qEAAqE;QACrE,uBAAuB;QACvB,MAAM,IAAI,GAAG,OAAO,CAAC;YACpB,UAAU,EAAE,uDAAuD;SACnE,CAAC,CAAA;QAEF,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAA;QAErD,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACtB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,IAAI,GAAG,OAAO,CAAC;YACpB,UAAU,EAAE,qDAAqD;SACjE,CAAC,CAAA;QAEF,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAA;QAExC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,IAAI,GAAG,OAAO,CAAC;YACpB,UAAU,EAAE,2DAA2D;SACvE,CAAC,CAAA;QAEF,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAA;QAElD,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=load-directory.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-directory.test.d.ts","sourceRoot":"","sources":["../../../src/directory/__tests__/load-directory.test.ts"],"names":[],"mappings":""}