@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.
- package/CHANGELOG.md +463 -0
- package/README.md +2 -2
- package/dist/agents/__tests__/run-agent-forwarding.test.d.ts +2 -0
- package/dist/agents/__tests__/run-agent-forwarding.test.d.ts.map +1 -0
- package/dist/agents/__tests__/run-agent-forwarding.test.js +76 -0
- package/dist/agents/__tests__/run-agent-forwarding.test.js.map +1 -0
- package/dist/agents/__tests__/run-completed-stop-reason.test.d.ts +2 -0
- package/dist/agents/__tests__/run-completed-stop-reason.test.d.ts.map +1 -0
- package/dist/agents/__tests__/run-completed-stop-reason.test.js +50 -0
- package/dist/agents/__tests__/run-completed-stop-reason.test.js.map +1 -0
- package/dist/agents/index.d.ts +1 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +4 -0
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/runAgent.d.ts +34 -0
- package/dist/agents/runAgent.d.ts.map +1 -1
- package/dist/agents/runAgent.js +5 -3
- package/dist/agents/runAgent.js.map +1 -1
- package/dist/config/runtime.d.ts +30 -30
- package/dist/constants/tools/__tests__/dangerous-patterns.test.d.ts +2 -0
- package/dist/constants/tools/__tests__/dangerous-patterns.test.d.ts.map +1 -0
- package/dist/constants/tools/__tests__/dangerous-patterns.test.js +54 -0
- package/dist/constants/tools/__tests__/dangerous-patterns.test.js.map +1 -0
- package/dist/constants/tools/index.d.ts.map +1 -1
- package/dist/constants/tools/index.js +28 -1
- package/dist/constants/tools/index.js.map +1 -1
- package/dist/contracts/a2a.d.ts +44 -44
- package/dist/directory/__tests__/derive.test.d.ts +2 -0
- package/dist/directory/__tests__/derive.test.d.ts.map +1 -0
- package/dist/directory/__tests__/derive.test.js +111 -0
- package/dist/directory/__tests__/derive.test.js.map +1 -0
- package/dist/directory/__tests__/load-diagnostics.test.d.ts +2 -0
- package/dist/directory/__tests__/load-diagnostics.test.d.ts.map +1 -0
- package/dist/directory/__tests__/load-diagnostics.test.js +106 -0
- package/dist/directory/__tests__/load-diagnostics.test.js.map +1 -0
- package/dist/directory/__tests__/load-directory.test.d.ts +2 -0
- package/dist/directory/__tests__/load-directory.test.d.ts.map +1 -0
- package/dist/directory/__tests__/load-directory.test.js +196 -0
- package/dist/directory/__tests__/load-directory.test.js.map +1 -0
- package/dist/directory/__tests__/subagents.test.d.ts +2 -0
- package/dist/directory/__tests__/subagents.test.d.ts.map +1 -0
- package/dist/directory/__tests__/subagents.test.js +117 -0
- package/dist/directory/__tests__/subagents.test.js.map +1 -0
- package/dist/directory/__tests__/supervisor-budget.test.d.ts +2 -0
- package/dist/directory/__tests__/supervisor-budget.test.d.ts.map +1 -0
- package/dist/directory/__tests__/supervisor-budget.test.js +97 -0
- package/dist/directory/__tests__/supervisor-budget.test.js.map +1 -0
- package/dist/directory/derive-supervisor.d.ts +58 -0
- package/dist/directory/derive-supervisor.d.ts.map +1 -0
- package/dist/directory/derive-supervisor.js +88 -0
- package/dist/directory/derive-supervisor.js.map +1 -0
- package/dist/directory/derive.d.ts +12 -0
- package/dist/directory/derive.d.ts.map +1 -0
- package/dist/directory/derive.js +58 -0
- package/dist/directory/derive.js.map +1 -0
- package/dist/directory/index.d.ts +7 -0
- package/dist/directory/index.d.ts.map +1 -0
- package/dist/directory/index.js +5 -0
- package/dist/directory/index.js.map +1 -0
- package/dist/directory/load.d.ts +14 -0
- package/dist/directory/load.d.ts.map +1 -0
- package/dist/directory/load.js +488 -0
- package/dist/directory/load.js.map +1 -0
- package/dist/directory/scan.d.ts +36 -0
- package/dist/directory/scan.d.ts.map +1 -0
- package/dist/directory/scan.js +136 -0
- package/dist/directory/scan.js.map +1 -0
- package/dist/directory/types.d.ts +215 -0
- package/dist/directory/types.d.ts.map +1 -0
- package/dist/directory/types.js +8 -0
- package/dist/directory/types.js.map +1 -0
- package/dist/plugin/__tests__/path-containment.test.d.ts +2 -0
- package/dist/plugin/__tests__/path-containment.test.d.ts.map +1 -0
- package/dist/plugin/__tests__/path-containment.test.js +91 -0
- package/dist/plugin/__tests__/path-containment.test.js.map +1 -0
- package/dist/plugin/lifecycle.d.ts.map +1 -1
- package/dist/plugin/lifecycle.js +3 -3
- package/dist/plugin/lifecycle.js.map +1 -1
- package/dist/plugin/loader.d.ts.map +1 -1
- package/dist/plugin/loader.js +12 -2
- package/dist/plugin/loader.js.map +1 -1
- package/dist/provider/__tests__/model-version.test.d.ts +2 -0
- package/dist/provider/__tests__/model-version.test.d.ts.map +1 -0
- package/dist/provider/__tests__/model-version.test.js +80 -0
- package/dist/provider/__tests__/model-version.test.js.map +1 -0
- package/dist/provider/__tests__/strict-schema.test.d.ts +2 -0
- package/dist/provider/__tests__/strict-schema.test.d.ts.map +1 -0
- package/dist/provider/__tests__/strict-schema.test.js +109 -0
- package/dist/provider/__tests__/strict-schema.test.js.map +1 -0
- package/dist/provider/__tests__/typed-error-classification.test.d.ts +2 -0
- package/dist/provider/__tests__/typed-error-classification.test.d.ts.map +1 -0
- package/dist/provider/__tests__/typed-error-classification.test.js +123 -0
- package/dist/provider/__tests__/typed-error-classification.test.js.map +1 -0
- package/dist/provider/model-version.d.ts +60 -0
- package/dist/provider/model-version.d.ts.map +1 -0
- package/dist/provider/model-version.js +64 -0
- package/dist/provider/model-version.js.map +1 -0
- package/dist/provider/retry.d.ts.map +1 -1
- package/dist/provider/retry.js +23 -7
- package/dist/provider/retry.js.map +1 -1
- package/dist/provider/strict-schema.d.ts +49 -0
- package/dist/provider/strict-schema.d.ts.map +1 -0
- package/dist/provider/strict-schema.js +112 -0
- package/dist/provider/strict-schema.js.map +1 -0
- package/dist/public-runtime.d.ts +6 -1
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +21 -1
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-tools.d.ts +1 -0
- package/dist/public-tools.d.ts.map +1 -1
- package/dist/public-tools.js +4 -0
- package/dist/public-tools.js.map +1 -1
- package/dist/public-types.d.ts +2 -0
- package/dist/public-types.d.ts.map +1 -1
- package/dist/registry/tool/__tests__/strict-registration.test.d.ts +2 -0
- package/dist/registry/tool/__tests__/strict-registration.test.d.ts.map +1 -0
- package/dist/registry/tool/__tests__/strict-registration.test.js +82 -0
- package/dist/registry/tool/__tests__/strict-registration.test.js.map +1 -0
- package/dist/registry/tool/execute.d.ts.map +1 -1
- package/dist/registry/tool/execute.js +16 -0
- package/dist/registry/tool/execute.js.map +1 -1
- package/dist/runtime/query/__tests__/stream-recovery.test.js +5 -0
- package/dist/runtime/query/__tests__/stream-recovery.test.js.map +1 -1
- package/dist/runtime/query/result.d.ts.map +1 -1
- package/dist/runtime/query/result.js +5 -0
- package/dist/runtime/query/result.js.map +1 -1
- package/dist/tools/builtins/__tests__/edit-insert-reachable.test.js +7 -1
- package/dist/tools/builtins/__tests__/edit-insert-reachable.test.js.map +1 -1
- package/dist/tools/builtins/__tests__/edit.test.js +1 -1
- package/dist/tools/builtins/__tests__/edit.test.js.map +1 -1
- package/dist/tools/builtins/edit.d.ts.map +1 -1
- package/dist/tools/builtins/edit.js +20 -2
- package/dist/tools/builtins/edit.js.map +1 -1
- package/dist/types/plugin/index.d.ts +4 -4
- package/dist/types/provider/errors.d.ts +0 -17
- package/dist/types/provider/errors.d.ts.map +1 -1
- package/dist/types/provider/errors.js +60 -0
- package/dist/types/provider/errors.js.map +1 -1
- package/dist/types/run/events.d.ts +17 -2
- package/dist/types/run/events.d.ts.map +1 -1
- package/dist/types/run/events.js.map +1 -1
- package/dist/types/verification/index.d.ts +6 -6
- package/package.json +1 -1
- package/src/agents/__tests__/run-agent-forwarding.test.ts +85 -0
- package/src/agents/__tests__/run-completed-stop-reason.test.ts +59 -0
- package/src/agents/index.ts +8 -0
- package/src/agents/runAgent.ts +30 -4
- package/src/constants/tools/__tests__/dangerous-patterns.test.ts +62 -0
- package/src/constants/tools/index.ts +28 -1
- package/src/directory/__tests__/derive.test.ts +135 -0
- package/src/directory/__tests__/load-diagnostics.test.ts +126 -0
- package/src/directory/__tests__/load-directory.test.ts +243 -0
- package/src/directory/__tests__/subagents.test.ts +155 -0
- package/src/directory/__tests__/supervisor-budget.test.ts +117 -0
- package/src/directory/derive-supervisor.ts +149 -0
- package/src/directory/derive.ts +70 -0
- package/src/directory/index.ts +27 -0
- package/src/directory/load.ts +556 -0
- package/src/directory/scan.ts +163 -0
- package/src/directory/types.ts +254 -0
- package/src/plugin/__tests__/path-containment.test.ts +107 -0
- package/src/plugin/lifecycle.ts +3 -3
- package/src/plugin/loader.ts +12 -2
- package/src/provider/__tests__/model-version.test.ts +93 -0
- package/src/provider/__tests__/strict-schema.test.ts +133 -0
- package/src/provider/__tests__/typed-error-classification.test.ts +143 -0
- package/src/provider/model-version.ts +98 -0
- package/src/provider/retry.ts +23 -7
- package/src/provider/strict-schema.ts +125 -0
- package/src/public-runtime.ts +31 -0
- package/src/public-tools.ts +4 -0
- package/src/public-types.ts +8 -0
- package/src/registry/tool/__tests__/strict-registration.test.ts +115 -0
- package/src/registry/tool/execute.ts +16 -0
- package/src/runtime/query/__tests__/stream-recovery.test.ts +5 -0
- package/src/runtime/query/result.ts +5 -0
- package/src/tools/builtins/__tests__/edit-insert-reachable.test.ts +8 -2
- package/src/tools/builtins/__tests__/edit.test.ts +1 -1
- package/src/tools/builtins/edit.ts +20 -2
- package/src/types/provider/errors.ts +71 -0
- package/src/types/run/events.ts +15 -2
package/dist/contracts/a2a.d.ts
CHANGED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-directory.test.d.ts","sourceRoot":"","sources":["../../../src/directory/__tests__/load-directory.test.ts"],"names":[],"mappings":""}
|