@effect-agent/testing 0.1.0-beta.10 → 0.1.0-beta.100

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 (54) hide show
  1. package/dist/Certification.d.mts +105 -0
  2. package/dist/Certification.mjs +637 -0
  3. package/dist/Certification.mjs.map +1 -0
  4. package/dist/Chaos.d.mts +127 -0
  5. package/dist/Chaos.mjs +756 -0
  6. package/dist/Chaos.mjs.map +1 -0
  7. package/{src/code-executor-conformance.d.ts → dist/CodeExecutorConformance.d.mts} +12 -10
  8. package/dist/CodeExecutorConformance.mjs +231 -0
  9. package/dist/CodeExecutorConformance.mjs.map +1 -0
  10. package/dist/CodeExecutorSubstitute.d.mts +20 -0
  11. package/dist/CodeExecutorSubstitute.mjs +368 -0
  12. package/dist/CodeExecutorSubstitute.mjs.map +1 -0
  13. package/dist/DocsResearcher.d.mts +276 -0
  14. package/dist/DocsResearcher.mjs +490 -0
  15. package/dist/DocsResearcher.mjs.map +1 -0
  16. package/dist/ScriptedModel-HIvFn-5K.d.mts +220 -0
  17. package/dist/ScriptedModel.d.mts +2 -0
  18. package/dist/ScriptedModel.mjs +155 -0
  19. package/dist/ScriptedModel.mjs.map +1 -0
  20. package/dist/TravelPlanner.d.mts +1680 -0
  21. package/dist/TravelPlanner.mjs +1985 -0
  22. package/dist/TravelPlanner.mjs.map +1 -0
  23. package/dist/deterministic-layers-D5owIoke.mjs +358 -0
  24. package/dist/deterministic-layers-D5owIoke.mjs.map +1 -0
  25. package/dist/index.d.mts +2 -3408
  26. package/dist/index.mjs +2 -4771
  27. package/dist/rolldown-runtime-D7D4PA-g.mjs +13 -0
  28. package/package.json +1 -48
  29. package/src/{certification.ts → Certification.ts} +375 -171
  30. package/src/{chaos.ts → Chaos.ts} +290 -191
  31. package/src/{code-executor-conformance.ts → CodeExecutorConformance.ts} +30 -7
  32. package/src/{code-executor-substitute.ts → CodeExecutorSubstitute.ts} +113 -46
  33. package/src/{fixtures/docs-researcher/index.ts → DocsResearcher.ts} +68 -5
  34. package/src/{scripted-model.ts → ScriptedModel.ts} +25 -29
  35. package/src/TravelPlanner.ts +232 -0
  36. package/src/fixtures/docs-researcher/definition.ts +20 -11
  37. package/src/fixtures/docs-researcher/harness.ts +41 -34
  38. package/src/fixtures/docs-researcher/mcp.ts +49 -3
  39. package/src/fixtures/travel-planner/definition.ts +15 -2
  40. package/src/fixtures/travel-planner/deterministic-layers.ts +47 -4
  41. package/src/fixtures/travel-planner/phase2.ts +4 -3
  42. package/src/fixtures/travel-planner/phase3.ts +19 -42
  43. package/src/fixtures/travel-planner/phase4.ts +24 -37
  44. package/src/fixtures/travel-planner/phase5.ts +35 -42
  45. package/src/fixtures/travel-planner/phase6.ts +224 -96
  46. package/src/fixtures/travel-planner/phase7.ts +4 -102
  47. package/src/fixtures/travel-planner/scenarios.ts +3 -4
  48. package/src/fixtures/travel-planner/subagents-durable.ts +35 -61
  49. package/src/fixtures/travel-planner/subagents.ts +36 -14
  50. package/src/index.ts +1 -11
  51. package/src/internal/certification-report.ts +25 -0
  52. package/dist/index.mjs.map +0 -1
  53. package/src/fixtures/travel-planner/index.ts +0 -11
  54. package/src/fixtures/warehouse/index.ts +0 -412
@@ -0,0 +1,276 @@
1
+ import { Context, Crypto, Effect, Layer, Schema } from "effect";
2
+ import { Tool, Toolkit } from "effect/unstable/ai";
3
+ import * as Agent from "effect-agent/agent";
4
+ import { ResolvedBinding } from "effect-agent/agent-registration";
5
+ import { DurableSubmitOptions } from "effect-agent/durable-agent-runtime";
6
+ import { ThreadId } from "effect-agent/identifiers";
7
+ import { DefinitionDigests } from "effect-agent/records";
8
+ import * as Subagent from "effect-agent/subagent";
9
+ import { SubagentPolicy } from "effect-agent/subagent";
10
+ import { IdempotencyKey } from "effect-agent/submission-ledger";
11
+ import { RuntimeBinding } from "effect-agent/agent-runtime";
12
+ import { McpConnection, McpConnectionRequest, McpConnector, McpDiscovery, McpServerIdentity, McpToolkitMismatch } from "effect-agent/mcp";
13
+ import { RedactionError, Redactor } from "effect-agent/redaction";
14
+ //#region src/fixtures/docs-researcher/definition.d.ts
15
+ export declare const ResearchDocumentId: Schema.brand<Schema.NonEmptyString, "@effect-agent/testing/docs-researcher/ResearchDocumentId">;
16
+ export type ResearchDocumentId = typeof ResearchDocumentId.Type;
17
+ /** Bounded summary text: the ONLY child-derived text that may cross to the parent. */
18
+ export declare const BoundedSummary: Schema.NonEmptyString;
19
+ declare const DocumentQuery_base: Schema.Class<DocumentQuery, Schema.Struct<{
20
+ readonly documentId: Schema.brand<Schema.NonEmptyString, "@effect-agent/testing/docs-researcher/ResearchDocumentId">;
21
+ }>, {}>;
22
+ export declare class DocumentQuery extends DocumentQuery_base {}
23
+ declare const ResearchDocument_base: Schema.Class<ResearchDocument, Schema.Struct<{
24
+ readonly documentId: Schema.brand<Schema.NonEmptyString, "@effect-agent/testing/docs-researcher/ResearchDocumentId">;
25
+ readonly title: Schema.NonEmptyString;
26
+ readonly body: Schema.NonEmptyString;
27
+ }>, {}>;
28
+ /** One bounded research document as the MCP content server exposes it. */
29
+ export declare class ResearchDocument extends ResearchDocument_base {}
30
+ declare const DocumentUnavailable_base: Schema.Class<DocumentUnavailable, Schema.TaggedStruct<"DocumentUnavailable", {
31
+ readonly documentId: Schema.brand<Schema.NonEmptyString, "@effect-agent/testing/docs-researcher/ResearchDocumentId">;
32
+ readonly message: Schema.String;
33
+ }>, import("effect/Cause").YieldableError>;
34
+ export declare class DocumentUnavailable extends DocumentUnavailable_base {}
35
+ declare const DocumentLibrary_base: Context.ServiceClass<DocumentLibrary, "@effect-agent/testing/docs-researcher/DocumentLibrary", {
36
+ readonly fetch: (query: DocumentQuery) => Effect.Effect<ResearchDocument, DocumentUnavailable>;
37
+ }>;
38
+ /** The content store behind the scripted MCP server. */
39
+ export declare class DocumentLibrary extends DocumentLibrary_base {}
40
+ /**
41
+ * The one content tool the doc-summarizer child uses. Its authored JSON
42
+ * schema is what MCP discovery must serve byte-for-byte: the scripted MCP
43
+ * fixture derives its discovery entry from `Tool.getJsonSchema(FetchDocument)`
44
+ * and `validateMcpDiscovery` re-derives and digests both sides (CAP-009).
45
+ */
46
+ export declare const FetchDocument: Tool.Tool<"fetch_document", {
47
+ readonly parameters: typeof DocumentQuery;
48
+ readonly success: typeof ResearchDocument;
49
+ readonly failure: typeof DocumentUnavailable;
50
+ readonly failureMode: "error";
51
+ }, DocumentLibrary>;
52
+ export declare const DocContentToolkit: Toolkit.Toolkit<{
53
+ readonly fetch_document: Tool.Tool<"fetch_document", {
54
+ readonly parameters: typeof DocumentQuery;
55
+ readonly success: typeof ResearchDocument;
56
+ readonly failure: typeof DocumentUnavailable;
57
+ readonly failureMode: "error";
58
+ }, DocumentLibrary>;
59
+ }>;
60
+ export declare const docContentToolkitLayer: import("effect/Layer").Layer<Tool.Handler<"fetch_document">, never, never>;
61
+ /** Never allowed outside a child Thread or an unredacted fixture value. */
62
+ export declare const docsDocumentBodySecret = "docs-vault-secret-771";
63
+ /** The corpus document ids in canonical fixture order. */
64
+ export declare const researchCorpusDocumentIds: ReadonlyArray<ResearchDocumentId>;
65
+ /** Deterministic library lookup shared by the scripted MCP content handlers. */
66
+ export declare const researchDocumentLookup: (query: DocumentQuery) => Effect.Effect<ResearchDocument, DocumentUnavailable>;
67
+ /** The full fixture document (body includes the secret marker — child-side only). */
68
+ export declare const researchDocumentFor: (documentId: string) => ResearchDocument;
69
+ /** The distinctive body phrase used by context-isolation assertions. */
70
+ export declare const documentBodyPhrase: (documentId: string) => string;
71
+ declare const SummaryBrief_base: Schema.Class<SummaryBrief, Schema.Struct<{
72
+ readonly documentId: Schema.brand<Schema.NonEmptyString, "@effect-agent/testing/docs-researcher/ResearchDocumentId">;
73
+ readonly focus: Schema.NonEmptyString;
74
+ }>, {}>;
75
+ export declare class SummaryBrief extends SummaryBrief_base {}
76
+ declare const DocumentSummary_base: Schema.Class<DocumentSummary, Schema.Struct<{
77
+ readonly documentId: Schema.brand<Schema.NonEmptyString, "@effect-agent/testing/docs-researcher/ResearchDocumentId">;
78
+ readonly summary: Schema.NonEmptyString;
79
+ }>, {}>;
80
+ export declare class DocumentSummary extends DocumentSummary_base {}
81
+ /** The summary the scripted child writes after fetching the document. */
82
+ export declare const documentSummaryFor: (documentId: string) => DocumentSummary;
83
+ export declare const encodedDocumentSummary: (documentId: string) => string;
84
+ export declare const DocSummarizer: Agent.Definition<typeof SummaryBrief, typeof DocumentSummary, "Fetch the briefed document with fetch_document exactly once, then return only a JSON document summary. Never copy raw notes or secrets into the summary.", Toolkit.Toolkit<{
85
+ readonly fetch_document: Tool.Tool<"fetch_document", {
86
+ readonly parameters: typeof DocumentQuery;
87
+ readonly success: typeof ResearchDocument;
88
+ readonly failure: typeof DocumentUnavailable;
89
+ readonly failureMode: "error";
90
+ }, DocumentLibrary>;
91
+ }>, undefined, undefined, undefined> & {
92
+ readonly id: import("effect/Brand").Brand<"@effect-agent/core/AgentId"> & "doc-summarizer";
93
+ };
94
+ declare const SummaryRequest_base: Schema.Class<SummaryRequest, Schema.Struct<{
95
+ readonly documentId: Schema.brand<Schema.NonEmptyString, "@effect-agent/testing/docs-researcher/ResearchDocumentId">;
96
+ }>, {}>;
97
+ export declare class SummaryRequest extends SummaryRequest_base {}
98
+ declare const SummaryFinding_base: Schema.Class<SummaryFinding, Schema.Struct<{
99
+ readonly documentId: Schema.brand<Schema.NonEmptyString, "@effect-agent/testing/docs-researcher/ResearchDocumentId">;
100
+ readonly summary: Schema.NonEmptyString;
101
+ }>, {}>;
102
+ export declare class SummaryFinding extends SummaryFinding_base {}
103
+ declare const DocumentSummaryFailed_base: Schema.Class<DocumentSummaryFailed, Schema.TaggedStruct<"DocumentSummaryFailed", {
104
+ readonly childErrorTag: Schema.NonEmptyString;
105
+ }>, import("effect/Cause").YieldableError>;
106
+ export declare class DocumentSummaryFailed extends DocumentSummaryFailed_base {}
107
+ /** Finite per-invocation bounds (SUB-009): one fetch per child, two children per Run. */
108
+ export declare const documentSummaryPolicy: SubagentPolicy;
109
+ export declare const delegateDocumentSummary: Subagent.SubagentDelegation<"delegate_document_summary", typeof SummaryBrief, typeof DocumentSummary, "Fetch the briefed document with fetch_document exactly once, then return only a JSON document summary. Never copy raw notes or secrets into the summary.", {
110
+ readonly fetch_document: Tool.Tool<"fetch_document", {
111
+ readonly parameters: typeof DocumentQuery;
112
+ readonly success: typeof ResearchDocument;
113
+ readonly failure: typeof DocumentUnavailable;
114
+ readonly failureMode: "error";
115
+ }, DocumentLibrary>;
116
+ }, typeof SummaryRequest, typeof SummaryFinding, typeof DocumentSummaryFailed, never, never, "error"> & {
117
+ readonly target: Agent.Definition<typeof SummaryBrief, typeof DocumentSummary, "Fetch the briefed document with fetch_document exactly once, then return only a JSON document summary. Never copy raw notes or secrets into the summary.", Toolkit.Toolkit<{
118
+ readonly fetch_document: Tool.Tool<"fetch_document", {
119
+ readonly parameters: typeof DocumentQuery;
120
+ readonly success: typeof ResearchDocument;
121
+ readonly failure: typeof DocumentUnavailable;
122
+ readonly failureMode: "error";
123
+ }, DocumentLibrary>;
124
+ }>, undefined, undefined, undefined> & {
125
+ readonly id: import("effect/Brand").Brand<"@effect-agent/core/AgentId"> & "doc-summarizer";
126
+ };
127
+ };
128
+ /** Total mapping from every expected child Run failure to the declared Tool failure (SUB-028). */
129
+ export declare const mapSummaryChildFailure: (failure: {
130
+ readonly _tag: string;
131
+ }) => DocumentSummaryFailed;
132
+ /** The exact digest strings the durable declaration AND host registration must share (SUB-023). */
133
+ export declare const docsSummarizerDigestStrings: {
134
+ readonly agent: string;
135
+ readonly model: string;
136
+ readonly tools: string;
137
+ };
138
+ /** Runtime wiring: the immutable delegation plus one explicit child Binding (S2 declaration). */
139
+ export declare const docsSummaryHandlersLayer: <Provider, ModelProvides, ModelRequires>(childBinding: RuntimeBinding<typeof SummaryBrief, typeof DocumentSummary, string, Toolkit.Tools<typeof DocContentToolkit>, Provider, ModelProvides, ModelRequires>) => import("effect/Layer").Layer<Tool.Handler<"delegate_document_summary">, never, Subagent.SubagentLayerRequirements<typeof SummaryBrief, typeof DocumentSummary, string, {
140
+ readonly fetch_document: Tool.Tool<"fetch_document", {
141
+ readonly parameters: typeof DocumentQuery;
142
+ readonly success: typeof ResearchDocument;
143
+ readonly failure: typeof DocumentUnavailable;
144
+ readonly failureMode: "error";
145
+ }, DocumentLibrary>;
146
+ }, Provider, ModelProvides, ModelRequires, never, never, never, {
147
+ readonly _tag: string;
148
+ }, never, undefined, undefined, undefined>>;
149
+ declare const ResearchRequest_base: Schema.Class<ResearchRequest, Schema.Struct<{
150
+ readonly question: Schema.NonEmptyString;
151
+ readonly documentIds: Schema.$Array<Schema.brand<Schema.NonEmptyString, "@effect-agent/testing/docs-researcher/ResearchDocumentId">>;
152
+ }>, {}>;
153
+ export declare class ResearchRequest extends ResearchRequest_base {}
154
+ declare const ResearchDigest_base: Schema.Class<ResearchDigest, Schema.Struct<{
155
+ readonly findings: Schema.$Array<typeof SummaryFinding>;
156
+ readonly nextAction: Schema.Literal<"review">;
157
+ }>, {}>;
158
+ export declare class ResearchDigest extends ResearchDigest_base {}
159
+ /** Parent-only transcript markers proving child context isolation (SUB-006/SUB-015). */
160
+ export declare const docsCoordinatorConfidentialMarker = "docs-coordinator-vault-19x";
161
+ export declare const docsMissionConfidentialMarker = "docs-mission-dossier-42f";
162
+ export declare const DocsResearcherToolkit: Toolkit.Toolkit<{
163
+ readonly delegate_document_summary: Tool.Tool<"delegate_document_summary", {
164
+ readonly parameters: typeof SummaryRequest;
165
+ readonly success: typeof SummaryFinding;
166
+ readonly failure: Subagent.SubagentToolFailure<typeof DocumentSummaryFailed>;
167
+ readonly failureMode: "error";
168
+ }, import("effect-agent/agent-runtime").AgentSpawner | import("effect-agent/run-event-sink").RunEventSink | import("effect-agent/agent-runtime").SubagentDurability>;
169
+ }>;
170
+ export declare const DocsResearcher: Agent.Definition<typeof ResearchRequest, typeof ResearchDigest, string, Toolkit.Toolkit<{
171
+ readonly delegate_document_summary: Tool.Tool<"delegate_document_summary", {
172
+ readonly parameters: typeof SummaryRequest;
173
+ readonly success: typeof SummaryFinding;
174
+ readonly failure: Subagent.SubagentToolFailure<typeof DocumentSummaryFailed>;
175
+ readonly failureMode: "error";
176
+ }, import("effect-agent/agent-runtime").AgentSpawner | import("effect-agent/run-event-sink").RunEventSink | import("effect-agent/agent-runtime").SubagentDurability>;
177
+ }>, undefined, undefined, undefined> & {
178
+ readonly id: import("effect/Brand").Brand<"@effect-agent/core/AgentId"> & "docs-researcher";
179
+ };
180
+ /** The default two-document research mission. */
181
+ export declare const researchMissionRequest: ResearchRequest;
182
+ /** The coordinator's expected final digest for the given documents. */
183
+ export declare const expectedResearchDigest: (documentIds?: ReadonlyArray<string>) => ResearchDigest;
184
+ //#endregion
185
+ //#region src/fixtures/docs-researcher/harness.d.ts
186
+ export declare const docsResearcherDeploymentId: string & import("effect/Brand").Brand<"@effect-agent/thread/DeploymentId">;
187
+ export declare const docsResearcherProducerId: string & import("effect/Brand").Brand<"@effect-agent/thread/ProducerId">;
188
+ export declare const docsResearcherPrincipal: string & import("effect/Brand").Brand<"@effect-agent/thread/Principal">;
189
+ /** Redacted, deterministic coordinator definition digests for this fixture version. */
190
+ export declare const docsCoordinatorDigests: DefinitionDigests;
191
+ /** The child registration digests — byte-equal to `docsSummarizerDigestStrings` (SUB-023). */
192
+ export declare const docsSummarizerDigests: DefinitionDigests;
193
+ /** Durable admission options for one docs-researcher Submission on one mission lane. */
194
+ export declare const docsResearcherSubmitOptions: (threadId: ThreadId, idempotencyKey: IdempotencyKey) => DurableSubmitOptions;
195
+ /** The structural submit slice of the coordinator Binding (`DurableAgentRuntime.submit`). */
196
+ export declare const docsResearcherSubmitAgent: {
197
+ readonly definition: {
198
+ readonly id: import("effect/Brand").Brand<"@effect-agent/core/AgentId"> & "docs-researcher";
199
+ readonly input: typeof ResearchRequest;
200
+ };
201
+ };
202
+ /** The deterministic delegation Tool Call identity for one document. */
203
+ export declare const summarizeCallId: (documentId: string) => string;
204
+ /** The child's own scripted fetch Tool Call identity for one document. */
205
+ export declare const fetchCallId: (documentId: string) => string;
206
+ /** Optional overrides for one docs-researcher harness. */
207
+ interface DocsResearcherHarnessOptions {
208
+ /** Documents to research; defaults to the full two-document corpus. */
209
+ readonly documentIds?: ReadonlyArray<string> | undefined;
210
+ }
211
+ /** One durable coordinator/summarizer pair with observable counters and MCP evidence. */
212
+ interface DocsResearcherHarness {
213
+ /** Resolved registrations for the parent and child workers. */
214
+ readonly bindings: ReadonlyArray<ResolvedBinding>;
215
+ /** The validated MCP discovery the child toolkit registration was gated on. */
216
+ readonly discovery: McpDiscovery;
217
+ /** Total coordinator model invocations across every Attempt and runtime handle. */
218
+ readonly parentModelCalls: Effect.Effect<number>;
219
+ /** JSON-encoded coordinator prompts in request order. */
220
+ readonly parentPrompts: Effect.Effect<ReadonlyArray<string>>;
221
+ /** Total summarizer model invocations across every Attempt and runtime handle. */
222
+ readonly childModelCalls: Effect.Effect<number>;
223
+ /** JSON-encoded summarizer prompts in request order (context-isolation evidence). */
224
+ readonly childPrompts: Effect.Effect<ReadonlyArray<string>>;
225
+ /** MCP content-tool handler executions for one document (external side-effect record). */
226
+ readonly fetchInvocations: (documentId: string) => Effect.Effect<number>;
227
+ }
228
+ /**
229
+ * Build the docs-researcher harness. Order matters and is the point: the
230
+ * child's content toolkit is only registered as a worker Binding AFTER the
231
+ * MCP connector's bounded discovery validated the authored toolkit
232
+ * byte-for-byte (`connectMcp` + `assertDiscoveryMatchesAuthoredToolkit`), so
233
+ * "the tools the summarizer runs are the tools discovery served" is enforced
234
+ * at assembly, not assumed. Content-tool execution then flows through the
235
+ * counting `DocumentLibrary` — the scripted MCP server's content store.
236
+ */
237
+ export declare const makeDocsResearcherHarness: (options?: DocsResearcherHarnessOptions) => Effect.Effect<DocsResearcherHarness, import("effect-agent/mcp").McpConnectionError | import("effect-agent/mcp").McpDiscoveryLimitExceeded | import("effect-agent/mcp").McpToolkitMismatch, Crypto.Crypto>;
238
+ /**
239
+ * The audit-surface preview of one fetched document: the raw document —
240
+ * secret marker and all — passes through the configured structural `Redactor`
241
+ * before anything may quote it outside the child Thread (SEC-008,
242
+ * CAP-013). Tests assert the preview keeps shape but no scalar content.
243
+ */
244
+ export declare const redactedDocumentPreview: (documentId: string) => Effect.Effect<string & import("effect/Brand").Brand<"@effect-agent/capabilities/RedactedPreview">, RedactionError, Redactor>;
245
+ type DocsResearcherHarnessRequirements = Crypto.Crypto;
246
+ //#endregion
247
+ //#region src/fixtures/docs-researcher/mcp.d.ts
248
+ /** Framework-side hard bounds one docs-researcher assembly requests. */
249
+ export declare const docsMcpRequest: McpConnectionRequest;
250
+ export declare const docsMcpIdentity: McpServerIdentity;
251
+ /** The well-behaved scripted content server. */
252
+ export declare const docsMcpConnectorLayer: Layer.Layer<McpConnector>;
253
+ /** Serves a tool description exceeding `maxToolDescriptionBytes` (SEC-013 bound). */
254
+ export declare const docsMcpOversizedConnectorLayer: Layer.Layer<McpConnector>;
255
+ /** Serves a discovery schema that disagrees with the authored toolkit (drift fails closed). */
256
+ export declare const docsMcpMismatchedConnectorLayer: Layer.Layer<McpConnector>;
257
+ /**
258
+ * Bind DISCOVERY to AUTHORING: `validateMcpDiscovery` (inside `connectMcp`)
259
+ * already proved the served discovery matches the connection's own Toolkit;
260
+ * this check additionally proves that Toolkit is the exact toolkit the
261
+ * doc-summarizer was AUTHORED against — same tool names, same derived JSON
262
+ * schemas — so a connector cannot substitute a look-alike toolkit. The
263
+ * docs-researcher harness runs it before any worker Binding registration and
264
+ * fails closed on any drift.
265
+ */
266
+ export declare const assertDiscoveryMatchesAuthoredToolkit: (connection: McpConnection) => Effect.Effect<void, McpToolkitMismatch, never>;
267
+ /** Round-trip guard for encoded discovery values persisted as fixture evidence. */
268
+ export declare const DocsMcpDiscoveryEvidence: Schema.Struct<{
269
+ readonly serverId: Schema.NonEmptyString;
270
+ readonly toolCount: Schema.Natural;
271
+ readonly encodedBytes: Schema.Natural;
272
+ readonly toolkitSchemaDigest: Schema.String;
273
+ }>;
274
+ //#endregion
275
+ export type { DocsResearcherHarness, DocsResearcherHarnessOptions, DocsResearcherHarnessRequirements };
276
+ //# sourceMappingURL=DocsResearcher.d.mts.map