@zhixuan92/multi-model-agent-core 4.7.8 → 4.7.10
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/README.md +1 -72
- package/dist/config/schema.d.ts +6 -4
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +6 -4
- package/dist/config/schema.js.map +1 -1
- package/dist/events/task-envelope.d.ts +11 -1
- package/dist/events/task-envelope.d.ts.map +1 -1
- package/dist/events/task-envelope.js +35 -4
- package/dist/events/task-envelope.js.map +1 -1
- package/dist/events/to-wire-record.d.ts.map +1 -1
- package/dist/events/to-wire-record.js +24 -2
- package/dist/events/to-wire-record.js.map +1 -1
- package/dist/events/wire-schema.d.ts +10 -10
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -8
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/handlers/annotate-stage.d.ts.map +1 -1
- package/dist/lifecycle/handlers/annotate-stage.js +9 -1
- package/dist/lifecycle/handlers/annotate-stage.js.map +1 -1
- package/dist/{review → lifecycle/handlers}/parse-review-report.d.ts +1 -1
- package/dist/lifecycle/handlers/parse-review-report.d.ts.map +1 -0
- package/dist/{review → lifecycle/handlers}/parse-review-report.js +10 -3
- package/dist/lifecycle/handlers/parse-review-report.js.map +1 -0
- package/dist/lifecycle/handlers/quality-review-prompt.d.ts +6 -0
- package/dist/lifecycle/handlers/quality-review-prompt.d.ts.map +1 -0
- package/dist/lifecycle/handlers/quality-review-prompt.js +42 -0
- package/dist/lifecycle/handlers/quality-review-prompt.js.map +1 -0
- package/dist/lifecycle/handlers/review-stage.js +11 -6
- package/dist/lifecycle/handlers/review-stage.js.map +1 -1
- package/dist/lifecycle/handlers/rework-prompt.d.ts +6 -0
- package/dist/lifecycle/handlers/rework-prompt.d.ts.map +1 -0
- package/dist/lifecycle/handlers/rework-prompt.js +18 -0
- package/dist/lifecycle/handlers/rework-prompt.js.map +1 -0
- package/dist/lifecycle/handlers/rework-stage.js +2 -2
- package/dist/lifecycle/handlers/rework-stage.js.map +1 -1
- package/dist/lifecycle/handlers/spec-review-prompt.d.ts +7 -0
- package/dist/lifecycle/handlers/spec-review-prompt.d.ts.map +1 -0
- package/dist/lifecycle/handlers/spec-review-prompt.js +39 -0
- package/dist/lifecycle/handlers/spec-review-prompt.js.map +1 -0
- package/dist/{review → lifecycle/handlers}/tier-policy.d.ts +1 -1
- package/dist/lifecycle/handlers/tier-policy.d.ts.map +1 -0
- package/dist/lifecycle/handlers/tier-policy.js.map +1 -0
- package/dist/lifecycle/lifecycle-driver.d.ts.map +1 -1
- package/dist/lifecycle/lifecycle-driver.js +14 -4
- package/dist/lifecycle/lifecycle-driver.js.map +1 -1
- package/dist/lifecycle/perform-implementation.d.ts.map +1 -1
- package/dist/lifecycle/perform-implementation.js +38 -5
- package/dist/lifecycle/perform-implementation.js.map +1 -1
- package/dist/lifecycle/research-pre-loop.d.ts +21 -0
- package/dist/lifecycle/research-pre-loop.d.ts.map +1 -0
- package/dist/lifecycle/research-pre-loop.js +54 -0
- package/dist/lifecycle/research-pre-loop.js.map +1 -0
- package/dist/lifecycle/review-verdict-mapping.d.ts.map +1 -0
- package/dist/lifecycle/review-verdict-mapping.js.map +1 -0
- package/dist/lifecycle/task-executor.js +2 -2
- package/dist/lifecycle/task-executor.js.map +1 -1
- package/dist/lifecycle/tool-config-types.d.ts +1 -7
- package/dist/lifecycle/tool-config-types.d.ts.map +1 -1
- package/dist/providers/runner-types.d.ts +0 -6
- package/dist/providers/runner-types.d.ts.map +1 -1
- package/dist/reporting/report-parser-slots/research-report.d.ts +0 -3
- package/dist/reporting/report-parser-slots/research-report.d.ts.map +1 -1
- package/dist/reporting/report-parser-slots/research-report.js +0 -5
- package/dist/reporting/report-parser-slots/research-report.js.map +1 -1
- package/dist/research/adapters/arxiv.d.ts.map +1 -1
- package/dist/research/adapters/arxiv.js +5 -1
- package/dist/research/adapters/arxiv.js.map +1 -1
- package/dist/research/adapters/github-search.d.ts +1 -0
- package/dist/research/adapters/github-search.d.ts.map +1 -1
- package/dist/research/adapters/github-search.js +15 -12
- package/dist/research/adapters/github-search.js.map +1 -1
- package/dist/research/adapters/index.d.ts +5 -1
- package/dist/research/adapters/index.d.ts.map +1 -1
- package/dist/research/adapters/index.js +7 -3
- package/dist/research/adapters/index.js.map +1 -1
- package/dist/research/adapters/semantic-scholar.d.ts +1 -0
- package/dist/research/adapters/semantic-scholar.d.ts.map +1 -1
- package/dist/research/adapters/semantic-scholar.js +11 -1
- package/dist/research/adapters/semantic-scholar.js.map +1 -1
- package/dist/research/evidence-pack.d.ts +33 -0
- package/dist/research/evidence-pack.d.ts.map +1 -0
- package/dist/research/evidence-pack.js +132 -0
- package/dist/research/evidence-pack.js.map +1 -0
- package/dist/research/index.d.ts +1 -2
- package/dist/research/index.d.ts.map +1 -1
- package/dist/research/index.js +1 -3
- package/dist/research/index.js.map +1 -1
- package/dist/research/orchestrator.d.ts +24 -0
- package/dist/research/orchestrator.d.ts.map +1 -0
- package/dist/research/orchestrator.js +162 -0
- package/dist/research/orchestrator.js.map +1 -0
- package/dist/research/query-plan.d.ts +18 -0
- package/dist/research/query-plan.d.ts.map +1 -0
- package/dist/research/query-plan.js +36 -0
- package/dist/research/query-plan.js.map +1 -0
- package/dist/research/user-agent.d.ts +5 -0
- package/dist/research/user-agent.d.ts.map +1 -0
- package/dist/research/user-agent.js +17 -0
- package/dist/research/user-agent.js.map +1 -0
- package/dist/research/web-fetch.d.ts +27 -22
- package/dist/research/web-fetch.d.ts.map +1 -1
- package/dist/research/web-fetch.js +115 -61
- package/dist/research/web-fetch.js.map +1 -1
- package/dist/research/web-search.d.ts.map +1 -1
- package/dist/research/web-search.js +2 -0
- package/dist/research/web-search.js.map +1 -1
- package/dist/stores/batch-registry.d.ts +0 -15
- package/dist/stores/batch-registry.d.ts.map +1 -1
- package/dist/stores/batch-registry.js +2 -0
- package/dist/stores/batch-registry.js.map +1 -1
- package/dist/stores/project-context-registry.d.ts +4 -11
- package/dist/stores/project-context-registry.d.ts.map +1 -1
- package/dist/stores/project-context-registry.js +4 -6
- package/dist/stores/project-context-registry.js.map +1 -1
- package/dist/tools/audit/tool-config.d.ts.map +1 -1
- package/dist/tools/audit/tool-config.js +1 -5
- package/dist/tools/audit/tool-config.js.map +1 -1
- package/dist/tools/debug/tool-config.d.ts.map +1 -1
- package/dist/tools/debug/tool-config.js +1 -5
- package/dist/tools/debug/tool-config.js.map +1 -1
- package/dist/tools/delegate/tool-config.d.ts.map +1 -1
- package/dist/tools/delegate/tool-config.js +0 -6
- package/dist/tools/delegate/tool-config.js.map +1 -1
- package/dist/tools/execute-plan/tool-config.d.ts.map +1 -1
- package/dist/tools/execute-plan/tool-config.js +0 -6
- package/dist/tools/execute-plan/tool-config.js.map +1 -1
- package/dist/tools/investigate/tool-config.d.ts.map +1 -1
- package/dist/tools/investigate/tool-config.js +0 -4
- package/dist/tools/investigate/tool-config.js.map +1 -1
- package/dist/tools/research/brief-slot.d.ts +17 -0
- package/dist/tools/research/brief-slot.d.ts.map +1 -1
- package/dist/tools/research/brief-slot.js +61 -0
- package/dist/tools/research/brief-slot.js.map +1 -1
- package/dist/tools/research/implementer-criteria.d.ts +4 -11
- package/dist/tools/research/implementer-criteria.d.ts.map +1 -1
- package/dist/tools/research/implementer-criteria.js +77 -14
- package/dist/tools/research/implementer-criteria.js.map +1 -1
- package/dist/tools/research/tool-config.d.ts.map +1 -1
- package/dist/tools/research/tool-config.js +10 -2
- package/dist/tools/research/tool-config.js.map +1 -1
- package/dist/tools/research/two-turn-driver.d.ts +20 -0
- package/dist/tools/research/two-turn-driver.d.ts.map +1 -0
- package/dist/tools/research/two-turn-driver.js +41 -0
- package/dist/tools/research/two-turn-driver.js.map +1 -0
- package/dist/tools/review/tool-config.d.ts.map +1 -1
- package/dist/tools/review/tool-config.js +1 -5
- package/dist/tools/review/tool-config.js.map +1 -1
- package/dist/tools/shared/severity-ladder.d.ts +2 -0
- package/dist/tools/shared/severity-ladder.d.ts.map +1 -0
- package/dist/tools/shared/severity-ladder.js +9 -0
- package/dist/tools/shared/severity-ladder.js.map +1 -0
- package/dist/types/config.d.ts +2 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/enums.d.ts +3 -3
- package/dist/types/task-spec.d.ts +14 -10
- package/dist/types/task-spec.d.ts.map +1 -1
- package/dist/types.d.ts +0 -10
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -5
- package/dist/research/types.d.ts +0 -14
- package/dist/research/types.d.ts.map +0 -1
- package/dist/research/types.js +0 -2
- package/dist/research/types.js.map +0 -1
- package/dist/review/index.d.ts +0 -5
- package/dist/review/index.d.ts.map +0 -1
- package/dist/review/index.js +0 -8
- package/dist/review/index.js.map +0 -1
- package/dist/review/parse-review-report.d.ts.map +0 -1
- package/dist/review/parse-review-report.js.map +0 -1
- package/dist/review/review-types.d.ts +0 -2
- package/dist/review/review-types.d.ts.map +0 -1
- package/dist/review/review-types.js +0 -6
- package/dist/review/review-types.js.map +0 -1
- package/dist/review/review-verdict-mapping.d.ts.map +0 -1
- package/dist/review/review-verdict-mapping.js.map +0 -1
- package/dist/review/skipped-result.d.ts +0 -8
- package/dist/review/skipped-result.d.ts.map +0 -1
- package/dist/review/skipped-result.js +0 -4
- package/dist/review/skipped-result.js.map +0 -1
- package/dist/review/templates/annotator-audit.d.ts +0 -3
- package/dist/review/templates/annotator-audit.d.ts.map +0 -1
- package/dist/review/templates/annotator-audit.js +0 -20
- package/dist/review/templates/annotator-audit.js.map +0 -1
- package/dist/review/templates/annotator-debug.d.ts +0 -3
- package/dist/review/templates/annotator-debug.d.ts.map +0 -1
- package/dist/review/templates/annotator-debug.js +0 -19
- package/dist/review/templates/annotator-debug.js.map +0 -1
- package/dist/review/templates/annotator-investigate.d.ts +0 -3
- package/dist/review/templates/annotator-investigate.d.ts.map +0 -1
- package/dist/review/templates/annotator-investigate.js +0 -17
- package/dist/review/templates/annotator-investigate.js.map +0 -1
- package/dist/review/templates/annotator-review.d.ts +0 -3
- package/dist/review/templates/annotator-review.d.ts.map +0 -1
- package/dist/review/templates/annotator-review.js +0 -22
- package/dist/review/templates/annotator-review.js.map +0 -1
- package/dist/review/templates/annotator-shared.d.ts +0 -23
- package/dist/review/templates/annotator-shared.d.ts.map +0 -1
- package/dist/review/templates/annotator-shared.js +0 -51
- package/dist/review/templates/annotator-shared.js.map +0 -1
- package/dist/review/templates/finding-criteria.d.ts +0 -15
- package/dist/review/templates/finding-criteria.d.ts.map +0 -1
- package/dist/review/templates/finding-criteria.js +0 -39
- package/dist/review/templates/finding-criteria.js.map +0 -1
- package/dist/review/templates/quality-review-audit.d.ts +0 -3
- package/dist/review/templates/quality-review-audit.d.ts.map +0 -1
- package/dist/review/templates/quality-review-audit.js +0 -10
- package/dist/review/templates/quality-review-audit.js.map +0 -1
- package/dist/review/templates/quality-review-debug.d.ts +0 -3
- package/dist/review/templates/quality-review-debug.d.ts.map +0 -1
- package/dist/review/templates/quality-review-debug.js +0 -10
- package/dist/review/templates/quality-review-debug.js.map +0 -1
- package/dist/review/templates/quality-review-investigate.d.ts +0 -3
- package/dist/review/templates/quality-review-investigate.d.ts.map +0 -1
- package/dist/review/templates/quality-review-investigate.js +0 -10
- package/dist/review/templates/quality-review-investigate.js.map +0 -1
- package/dist/review/templates/quality-review-review.d.ts +0 -3
- package/dist/review/templates/quality-review-review.d.ts.map +0 -1
- package/dist/review/templates/quality-review-review.js +0 -10
- package/dist/review/templates/quality-review-review.js.map +0 -1
- package/dist/review/templates/quality-review.d.ts +0 -9
- package/dist/review/templates/quality-review.d.ts.map +0 -1
- package/dist/review/templates/quality-review.js +0 -89
- package/dist/review/templates/quality-review.js.map +0 -1
- package/dist/review/templates/rework.d.ts +0 -3
- package/dist/review/templates/rework.d.ts.map +0 -1
- package/dist/review/templates/rework.js +0 -48
- package/dist/review/templates/rework.js.map +0 -1
- package/dist/review/templates/shared.d.ts +0 -67
- package/dist/review/templates/shared.d.ts.map +0 -1
- package/dist/review/templates/shared.js +0 -2
- package/dist/review/templates/shared.js.map +0 -1
- package/dist/review/templates/spec-review.d.ts +0 -10
- package/dist/review/templates/spec-review.d.ts.map +0 -1
- package/dist/review/templates/spec-review.js +0 -75
- package/dist/review/templates/spec-review.js.map +0 -1
- package/dist/review/tier-policy.d.ts.map +0 -1
- package/dist/review/tier-policy.js.map +0 -1
- package/dist/stores/context-block-project-cap.d.ts +0 -14
- package/dist/stores/context-block-project-cap.d.ts.map +0 -1
- package/dist/stores/context-block-project-cap.js +0 -80
- package/dist/stores/context-block-project-cap.js.map +0 -1
- package/dist/stores/file-backed-context-block-store.d.ts +0 -81
- package/dist/stores/file-backed-context-block-store.d.ts.map +0 -1
- package/dist/stores/file-backed-context-block-store.js +0 -410
- package/dist/stores/file-backed-context-block-store.js.map +0 -1
- package/dist/stores/index.d.ts +0 -4
- package/dist/stores/index.d.ts.map +0 -1
- package/dist/stores/index.js +0 -5
- package/dist/stores/index.js.map +0 -1
- /package/dist/{review → lifecycle/handlers}/tier-policy.js +0 -0
- /package/dist/{review → lifecycle}/review-verdict-mapping.d.ts +0 -0
- /package/dist/{review → lifecycle}/review-verdict-mapping.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/research/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const QueryPlanSchema: z.ZodObject<{
|
|
3
|
+
braveQueries: z.ZodArray<z.ZodString>;
|
|
4
|
+
arxivQueries: z.ZodArray<z.ZodString>;
|
|
5
|
+
semanticScholarQueries: z.ZodArray<z.ZodString>;
|
|
6
|
+
githubQueries: z.ZodArray<z.ZodObject<{
|
|
7
|
+
q: z.ZodString;
|
|
8
|
+
kind: z.ZodEnum<{
|
|
9
|
+
code: "code";
|
|
10
|
+
repo: "repo";
|
|
11
|
+
}>;
|
|
12
|
+
}, z.core.$strip>>;
|
|
13
|
+
rssFeeds: z.ZodArray<z.ZodString>;
|
|
14
|
+
directFetches: z.ZodArray<z.ZodString>;
|
|
15
|
+
}, z.core.$strict>;
|
|
16
|
+
export type QueryPlan = z.infer<typeof QueryPlanSchema>;
|
|
17
|
+
export declare function parseQueryPlan(json: string): QueryPlan;
|
|
18
|
+
//# sourceMappingURL=query-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-plan.d.ts","sourceRoot":"","sources":["../../src/research/query-plan.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;kBAUjB,CAAC;AAEZ,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAYtD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Zod schema for the structured output the worker emits in turn 1.
|
|
2
|
+
// Bounds: 0..8 entries per query list, ≤ 200 chars per query, only
|
|
3
|
+
// absolute https URLs for rssFeeds and directFetches.
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
const Query200 = z.string().min(1).max(200);
|
|
6
|
+
const Queries = z.array(Query200).max(8);
|
|
7
|
+
const HttpsUrl = z.string().url().refine(u => u.startsWith('https://'), {
|
|
8
|
+
message: 'must be an absolute https:// URL',
|
|
9
|
+
});
|
|
10
|
+
const HttpsUrls = z.array(HttpsUrl).max(8);
|
|
11
|
+
export const QueryPlanSchema = z.object({
|
|
12
|
+
braveQueries: Queries,
|
|
13
|
+
arxivQueries: Queries,
|
|
14
|
+
semanticScholarQueries: Queries,
|
|
15
|
+
githubQueries: z.array(z.object({
|
|
16
|
+
q: Query200,
|
|
17
|
+
kind: z.enum(['repo', 'code']),
|
|
18
|
+
})).max(8),
|
|
19
|
+
rssFeeds: HttpsUrls,
|
|
20
|
+
directFetches: HttpsUrls,
|
|
21
|
+
}).strict();
|
|
22
|
+
export function parseQueryPlan(json) {
|
|
23
|
+
let raw;
|
|
24
|
+
try {
|
|
25
|
+
raw = JSON.parse(json);
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
throw new Error(`QueryPlan JSON parse failed: ${e.message}`);
|
|
29
|
+
}
|
|
30
|
+
const r = QueryPlanSchema.safeParse(raw);
|
|
31
|
+
if (!r.success) {
|
|
32
|
+
throw new Error(`QueryPlan schema validation failed: ${r.error.message}`);
|
|
33
|
+
}
|
|
34
|
+
return r.data;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=query-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-plan.js","sourceRoot":"","sources":["../../src/research/query-plan.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,mEAAmE;AACnE,sDAAsD;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5C,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;IACtE,OAAO,EAAE,kCAAkC;CAC5C,CAAC,CAAC;AACH,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,YAAY,EAAY,OAAO;IAC/B,YAAY,EAAY,OAAO;IAC/B,sBAAsB,EAAE,OAAO;IAC/B,aAAa,EAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACvC,CAAC,EAAK,QAAQ;QACd,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACV,QAAQ,EAAgB,SAAS;IACjC,aAAa,EAAW,SAAS;CAClC,CAAC,CAAC,MAAM,EAAE,CAAC;AAIZ,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,gCAAiC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-agent.d.ts","sourceRoot":"","sources":["../../src/research/user-agent.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,UAAU,EAAE,MAAwD,CAAC;AAGlF,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAEpF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Single source of truth for the User-Agent header sent by every outbound
|
|
2
|
+
// adapter, brave, and webFetch HTTP request from this package.
|
|
3
|
+
import pkg from '../../package.json' with { type: 'json' };
|
|
4
|
+
const SEMVER_RE = /^\d+\.\d+\.\d+/;
|
|
5
|
+
const FALLBACK = 'mma-research/0.0.0-unknown';
|
|
6
|
+
function compose(version) {
|
|
7
|
+
if (typeof version !== 'string' || !SEMVER_RE.test(version)) {
|
|
8
|
+
return FALLBACK;
|
|
9
|
+
}
|
|
10
|
+
return `mma-research/${version.match(SEMVER_RE)[0]}`;
|
|
11
|
+
}
|
|
12
|
+
export const USER_AGENT = compose(pkg.version);
|
|
13
|
+
// Test seam — exported only for unit tests; do not call from production code.
|
|
14
|
+
export async function _resetForTests(fakePkg) {
|
|
15
|
+
return compose(fakePkg.version);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=user-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-agent.js","sourceRoot":"","sources":["../../src/research/user-agent.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,+DAA+D;AAC/D,OAAO,GAAG,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE3D,MAAM,SAAS,GAAG,gBAAgB,CAAC;AACnC,MAAM,QAAQ,GAAG,4BAA4B,CAAC;AAE9C,SAAS,OAAO,CAAC,OAAgB;IAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5D,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,gBAAgB,OAAO,CAAC,KAAK,CAAC,SAAS,CAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAW,OAAO,CAAE,GAA6B,CAAC,OAAO,CAAC,CAAC;AAElF,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA8B;IACjE,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -1,41 +1,27 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { LookupFunction } from 'node:net';
|
|
2
2
|
import type { ResearchConfig } from '../config/schema.js';
|
|
3
3
|
export interface WebFetchInput {
|
|
4
4
|
url: string;
|
|
5
5
|
cfg: ResearchConfig['fetch'];
|
|
6
6
|
hostAllowlist: ReadonlySet<string>;
|
|
7
|
-
/** Hosts in this set may resolve to RFC1918 private addresses (still rejects loopback/metadata). */
|
|
8
7
|
privateNetworkHosts?: ReadonlySet<string>;
|
|
9
|
-
/** Test seam — replaces DNS resolution. */
|
|
10
8
|
resolveIP?: (host: string) => Promise<string>;
|
|
11
|
-
/**
|
|
12
|
-
*
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* by webFetch is one-shot and is disposed after its request completes.
|
|
19
|
-
*/
|
|
9
|
+
/** Test seam — when present, treated as the IP that the connect callback
|
|
10
|
+
* "resolved" at request time. Production must not pass this. */
|
|
11
|
+
_testConnectResolvedIp?: string;
|
|
12
|
+
/** Test-only injection seam. When set, webFetch uses the returned dispatcher
|
|
13
|
+
* (or, if it returns undefined, no dispatcher — so undici's global MockAgent
|
|
14
|
+
* can intercept). Production never sets this: it always uses the connect-guard
|
|
15
|
+
* agent built in webFetch(). */
|
|
20
16
|
createDispatcher?: (host: string, pinnedIP: string, cfg: ResearchConfig['fetch']) => import('undici').Dispatcher | undefined;
|
|
21
17
|
}
|
|
22
|
-
export declare const defaultIPPinningDispatcher: (host: string, pinnedIP: string, cfg: ResearchConfig["fetch"]) => Agent;
|
|
23
18
|
export type WebFetchOk = {
|
|
24
19
|
status: 'ok';
|
|
25
|
-
/** Worker-facing string: <external-content …>extracted-text</external-content> */
|
|
26
20
|
body: string;
|
|
27
|
-
/** Adapter-facing raw text (HTML stripped to main-text for HTML; raw bytes for XML/JSON). NOT wrapped. */
|
|
28
21
|
rawText: string;
|
|
29
22
|
host: string;
|
|
30
23
|
bytesReturned: number;
|
|
31
|
-
/** True if the wire-level read was capped by cfg.maxBodyBytes (raw response truncated). */
|
|
32
24
|
truncated: boolean;
|
|
33
|
-
/**
|
|
34
|
-
* True if the post-extraction text was capped by RETURNED_TEXT_CAP (default 64 KiB).
|
|
35
|
-
* Adapters that parse rawText (e.g. rss) MUST inspect this flag — a true value
|
|
36
|
-
* means the XML/JSON body may be syntactically incomplete and parsing should be skipped.
|
|
37
|
-
* This is independent of truncated; both can be true if both caps tripped.
|
|
38
|
-
*/
|
|
39
25
|
textTruncated: boolean;
|
|
40
26
|
credentialsStripped: boolean;
|
|
41
27
|
};
|
|
@@ -46,5 +32,24 @@ export type WebFetchErr = {
|
|
|
46
32
|
credentialsStripped: boolean;
|
|
47
33
|
};
|
|
48
34
|
export type WebFetchResult = WebFetchOk | WebFetchErr;
|
|
35
|
+
/**
|
|
36
|
+
* Build the SSRF-revalidating `connect.lookup` for the guard agent.
|
|
37
|
+
*
|
|
38
|
+
* undici invokes `connect.lookup` with `{ all: true }` and expects the callback
|
|
39
|
+
* to receive an ARRAY of `{ address, family }` entries — NOT the single-result
|
|
40
|
+
* `dns.lookup(host, (err, address, family) => ...)` form. Returning a bare
|
|
41
|
+
* address string makes undici read `addresses[0].address === undefined`, throw
|
|
42
|
+
* `ERR_INVALID_IP_ADDRESS`, and surface as `web_fetch_request_failed`. Every
|
|
43
|
+
* callback path here therefore returns the array form.
|
|
44
|
+
*
|
|
45
|
+
* Typed as `net.LookupFunction` — the exact type undici's `connect.lookup`
|
|
46
|
+
* field accepts. On error paths we pass an empty address array (undici reads
|
|
47
|
+
* `err` first and never consumes the addresses), which keeps the runtime
|
|
48
|
+
* contract while satisfying the callback's required address argument.
|
|
49
|
+
*
|
|
50
|
+
* Exported for unit testing — it locks the undici lookup contract without
|
|
51
|
+
* requiring real network (see tests/research/web-fetch.test.ts).
|
|
52
|
+
*/
|
|
53
|
+
export declare function makeConnectGuardLookup(allowPrivateNetwork: boolean, testResolvedIp: string | undefined): LookupFunction;
|
|
49
54
|
export declare function webFetch(input: WebFetchInput): Promise<WebFetchResult>;
|
|
50
55
|
//# sourceMappingURL=web-fetch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-fetch.d.ts","sourceRoot":"","sources":["../../src/research/web-fetch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"web-fetch.d.ts","sourceRoot":"","sources":["../../src/research/web-fetch.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAW1D,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAkB,MAAM,CAAC;IAC5B,GAAG,EAAkB,cAAc,CAAC,OAAO,CAAC,CAAC;IAC7C,aAAa,EAAQ,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAW,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD;qEACiE;IACjE,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;qCAGiC;IACjC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,OAAO,QAAQ,EAAE,UAAU,GAAG,SAAS,CAAC;CAC9H;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAC1D,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,OAAO,CAAC;IAClE,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,OAAO,CAAC;CAClF,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,WAAW,CAAC;AAStD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CACpC,mBAAmB,EAAE,OAAO,EAC5B,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,cAAc,CAkChB;AAeD,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAoJ5E"}
|
|
@@ -1,28 +1,90 @@
|
|
|
1
|
+
// packages/core/src/research/web-fetch.ts
|
|
2
|
+
//
|
|
3
|
+
// Replaces the previous IP-pinning dispatcher (which failed 100% of real
|
|
4
|
+
// requests on Node 25 / undici current) with a connect-callback re-validation
|
|
5
|
+
// SSRF guard: undici resolves the host normally; the connect callback compares
|
|
6
|
+
// the resolved IP against ssrf-guard's public-IP classification and aborts
|
|
7
|
+
// the connection if it's private/loopback/metadata. validateAndPinURL still
|
|
8
|
+
// runs first as the pre-request defense.
|
|
1
9
|
import { request, Agent } from 'undici';
|
|
10
|
+
import { USER_AGENT } from './user-agent.js';
|
|
2
11
|
import { wrapFetchedContent } from './untrusted-content.js';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
connect: {
|
|
6
|
-
lookup: (_h, _o, cb) => cb(null, pinnedIP, pinnedIP.includes(':') ? 6 : 4),
|
|
7
|
-
servername: host,
|
|
8
|
-
},
|
|
9
|
-
connectTimeout: cfg.connectTimeoutMs,
|
|
10
|
-
});
|
|
12
|
+
import { classifyIP } from './ssrf-guard.js';
|
|
13
|
+
import { REDIRECT_ERR_CODE_MAP, validateAndPinURL, extractContentType, isRedirect, extractLocation, extractBodyFromHTML, stripCredentialsFromURL, readBody, drainBody, mapRequestError, } from './web-fetch-helpers.js';
|
|
11
14
|
const ALLOWED_CT = new Set([
|
|
12
|
-
'text/html',
|
|
13
|
-
'
|
|
14
|
-
'application/xml',
|
|
15
|
-
'application/atom+xml',
|
|
16
|
-
'application/rss+xml',
|
|
15
|
+
'text/html', 'text/plain',
|
|
16
|
+
'application/xml', 'application/atom+xml', 'application/rss+xml',
|
|
17
17
|
'application/json',
|
|
18
18
|
]);
|
|
19
|
-
/** Post-extraction text cap — default 64 KiB. */
|
|
20
19
|
const RETURNED_TEXT_CAP = 64 * 1024;
|
|
20
|
+
/**
|
|
21
|
+
* Build the SSRF-revalidating `connect.lookup` for the guard agent.
|
|
22
|
+
*
|
|
23
|
+
* undici invokes `connect.lookup` with `{ all: true }` and expects the callback
|
|
24
|
+
* to receive an ARRAY of `{ address, family }` entries — NOT the single-result
|
|
25
|
+
* `dns.lookup(host, (err, address, family) => ...)` form. Returning a bare
|
|
26
|
+
* address string makes undici read `addresses[0].address === undefined`, throw
|
|
27
|
+
* `ERR_INVALID_IP_ADDRESS`, and surface as `web_fetch_request_failed`. Every
|
|
28
|
+
* callback path here therefore returns the array form.
|
|
29
|
+
*
|
|
30
|
+
* Typed as `net.LookupFunction` — the exact type undici's `connect.lookup`
|
|
31
|
+
* field accepts. On error paths we pass an empty address array (undici reads
|
|
32
|
+
* `err` first and never consumes the addresses), which keeps the runtime
|
|
33
|
+
* contract while satisfying the callback's required address argument.
|
|
34
|
+
*
|
|
35
|
+
* Exported for unit testing — it locks the undici lookup contract without
|
|
36
|
+
* requiring real network (see tests/research/web-fetch.test.ts).
|
|
37
|
+
*/
|
|
38
|
+
export function makeConnectGuardLookup(allowPrivateNetwork, testResolvedIp) {
|
|
39
|
+
return (host, opts, cb) => {
|
|
40
|
+
// If test seam present, return that IP; otherwise let Node resolve.
|
|
41
|
+
if (testResolvedIp) {
|
|
42
|
+
const fam = testResolvedIp.includes(':') ? 6 : 4;
|
|
43
|
+
// Re-validate test IP via ssrf-guard classification.
|
|
44
|
+
if (!allowPrivateNetwork) {
|
|
45
|
+
if (classifyIP(testResolvedIp) !== 'public') {
|
|
46
|
+
cb(new Error('web_fetch_ssrf_postresolve_block'), []);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
cb(null, [{ address: testResolvedIp, family: fam }]);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// Production path: forward undici's options (which carry `all: true`) to
|
|
54
|
+
// Node's resolver, re-validate EVERY resolved address via the SSRF
|
|
55
|
+
// classifier, then return the array form undici expects.
|
|
56
|
+
import('node:dns').then(({ lookup }) => {
|
|
57
|
+
lookup(host, { ...opts, all: true }, (err, addresses) => {
|
|
58
|
+
if (err) {
|
|
59
|
+
cb(err, []);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const list = addresses;
|
|
63
|
+
if (!allowPrivateNetwork) {
|
|
64
|
+
for (const a of list) {
|
|
65
|
+
if (classifyIP(a.address) !== 'public') {
|
|
66
|
+
cb(new Error('web_fetch_ssrf_postresolve_block'), []);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
cb(null, list);
|
|
72
|
+
});
|
|
73
|
+
}).catch(e => cb(e, []));
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/** Build a shared agent that re-validates the resolved IP at connect time. */
|
|
77
|
+
function makeConnectGuardAgent(allowPrivateNetwork, testResolvedIp, connectTimeoutMs) {
|
|
78
|
+
const lookup = makeConnectGuardLookup(allowPrivateNetwork, testResolvedIp);
|
|
79
|
+
return new Agent({
|
|
80
|
+
connect: { lookup },
|
|
81
|
+
connectTimeout: connectTimeoutMs,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
21
84
|
export async function webFetch(input) {
|
|
22
85
|
const { cfg, hostAllowlist } = input;
|
|
23
86
|
const privateNetworkHosts = input.privateNetworkHosts ?? new Set();
|
|
24
87
|
let credentialsStripped = false;
|
|
25
|
-
// Strip credentials BEFORE any logging. Mutate to avoid leaking via toString.
|
|
26
88
|
let initial;
|
|
27
89
|
try {
|
|
28
90
|
initial = new URL(input.url);
|
|
@@ -31,15 +93,12 @@ export async function webFetch(input) {
|
|
|
31
93
|
return { status: 'error', reasonCode: 'web_fetch_invalid_url', credentialsStripped };
|
|
32
94
|
}
|
|
33
95
|
credentialsStripped = stripCredentialsFromURL(initial);
|
|
34
|
-
// Total-deadline AbortController scopes the entire op (including DNS, redirects, body reads).
|
|
35
96
|
const totalCtrl = new AbortController();
|
|
36
97
|
const totalTimer = setTimeout(() => totalCtrl.abort(), cfg.totalDeadlineMs);
|
|
37
98
|
try {
|
|
38
99
|
let currentURL = initial.toString();
|
|
39
100
|
let redirects = 0;
|
|
40
101
|
while (true) {
|
|
41
|
-
// validateAndPinURL is raced against totalCtrl.signal so a hanging DNS
|
|
42
|
-
// resolver (including injected resolveIP) cannot exceed totalDeadlineMs.
|
|
43
102
|
let v;
|
|
44
103
|
try {
|
|
45
104
|
v = await validateAndPinURL(currentURL, hostAllowlist, privateNetworkHosts, input.resolveIP, totalCtrl.signal);
|
|
@@ -57,38 +116,53 @@ export async function webFetch(input) {
|
|
|
57
116
|
}
|
|
58
117
|
return { status: 'error', reasonCode: v.reasonCode, host: v.host, credentialsStripped };
|
|
59
118
|
}
|
|
60
|
-
//
|
|
61
|
-
//
|
|
62
|
-
|
|
63
|
-
|
|
119
|
+
// Honor createDispatcher hook for tests: when present, use whatever it
|
|
120
|
+
// returns (or skip dispatcher entirely if undefined → MockAgent
|
|
121
|
+
// intercepts via global). In production, fall back to the connect-guard
|
|
122
|
+
// agent for post-resolve SSRF re-validation.
|
|
123
|
+
let agent;
|
|
124
|
+
if (input.createDispatcher !== undefined) {
|
|
125
|
+
agent = input.createDispatcher(v.host, v.pinnedIP, cfg);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
agent = makeConnectGuardAgent(cfg.allowPrivateNetwork ?? false, input._testConnectResolvedIp, cfg.connectTimeoutMs);
|
|
129
|
+
}
|
|
130
|
+
const closeAgent = async () => {
|
|
131
|
+
if (agent && typeof agent.close === 'function') {
|
|
132
|
+
try {
|
|
133
|
+
await agent.close();
|
|
134
|
+
}
|
|
135
|
+
catch { /* ignore */ }
|
|
136
|
+
}
|
|
137
|
+
};
|
|
64
138
|
let res;
|
|
65
139
|
try {
|
|
66
|
-
// undici 8 `request()` does not follow redirects by default; we handle
|
|
67
|
-
// them manually below to re-validate against the per-task allowlist.
|
|
68
140
|
res = await request(v.url.toString(), {
|
|
69
141
|
method: 'GET',
|
|
70
142
|
headersTimeout: cfg.connectTimeoutMs,
|
|
71
|
-
|
|
143
|
+
headers: { 'user-agent': USER_AGENT },
|
|
144
|
+
...(agent ? { dispatcher: agent } : {}),
|
|
72
145
|
signal: totalCtrl.signal,
|
|
73
146
|
});
|
|
74
147
|
}
|
|
75
148
|
catch (e) {
|
|
76
|
-
|
|
77
|
-
|
|
149
|
+
await closeAgent();
|
|
150
|
+
// Map our connect-callback abort to a stable reasonCode.
|
|
151
|
+
const msg = e?.message ?? '';
|
|
152
|
+
if (msg.includes('web_fetch_ssrf_postresolve_block')) {
|
|
153
|
+
return { status: 'error', reasonCode: 'web_fetch_ssrf_postresolve_block', host: v.host, credentialsStripped };
|
|
154
|
+
}
|
|
78
155
|
return { ...mapRequestError(e, totalCtrl.signal, v.host), credentialsStripped };
|
|
79
156
|
}
|
|
80
|
-
// Handle redirects manually (maxRedirections: 0 on undici)
|
|
81
157
|
if (isRedirect(res.statusCode)) {
|
|
82
158
|
redirects++;
|
|
83
159
|
if (redirects > cfg.maxRedirects) {
|
|
84
|
-
|
|
85
|
-
closeDispatcher(dispatcher);
|
|
160
|
+
await closeAgent();
|
|
86
161
|
return { status: 'error', reasonCode: 'web_fetch_too_many_redirects', host: v.host, credentialsStripped };
|
|
87
162
|
}
|
|
88
163
|
const location = extractLocation(res.headers);
|
|
89
164
|
if (!location) {
|
|
90
|
-
|
|
91
|
-
closeDispatcher(dispatcher);
|
|
165
|
+
await closeAgent();
|
|
92
166
|
return { status: 'error', reasonCode: 'web_fetch_redirect_missing_location', host: v.host, credentialsStripped };
|
|
93
167
|
}
|
|
94
168
|
let nextURL;
|
|
@@ -96,34 +170,27 @@ export async function webFetch(input) {
|
|
|
96
170
|
nextURL = new URL(location, v.url);
|
|
97
171
|
}
|
|
98
172
|
catch {
|
|
99
|
-
|
|
100
|
-
closeDispatcher(dispatcher);
|
|
173
|
+
await closeAgent();
|
|
101
174
|
return { status: 'error', reasonCode: 'web_fetch_redirect_invalid_url', host: v.host, credentialsStripped };
|
|
102
175
|
}
|
|
103
176
|
credentialsStripped = stripCredentialsFromURL(nextURL) || credentialsStripped;
|
|
104
177
|
currentURL = nextURL.toString();
|
|
105
|
-
// Drain redirect body with cap to free connection
|
|
106
178
|
await drainBody(res.body, totalCtrl.signal);
|
|
107
|
-
|
|
108
|
-
closeDispatcher(dispatcher);
|
|
179
|
+
await closeAgent();
|
|
109
180
|
if (totalCtrl.signal.aborted) {
|
|
110
181
|
return { status: 'error', reasonCode: 'web_fetch_timeout', host: v.host, credentialsStripped };
|
|
111
182
|
}
|
|
112
183
|
continue;
|
|
113
184
|
}
|
|
114
|
-
// Check content type. Missing content-type (empty) is allowed through;
|
|
115
|
-
// only explicit unsupported types are rejected.
|
|
116
185
|
const contentType = extractContentType(res.headers);
|
|
117
186
|
if (contentType && !ALLOWED_CT.has(contentType)) {
|
|
118
187
|
await drainBody(res.body, totalCtrl.signal);
|
|
119
|
-
|
|
120
|
-
closeDispatcher(dispatcher);
|
|
188
|
+
await closeAgent();
|
|
121
189
|
if (totalCtrl.signal.aborted) {
|
|
122
190
|
return { status: 'error', reasonCode: 'web_fetch_timeout', host: v.host, credentialsStripped };
|
|
123
191
|
}
|
|
124
192
|
return { status: 'error', reasonCode: 'web_fetch_unsupported_content_type', host: v.host, credentialsStripped };
|
|
125
193
|
}
|
|
126
|
-
// Read body with size cap. Stream errors map to web_fetch_body_read_failed.
|
|
127
194
|
let rawText;
|
|
128
195
|
let bytesReturned;
|
|
129
196
|
let truncated;
|
|
@@ -135,8 +202,7 @@ export async function webFetch(input) {
|
|
|
135
202
|
truncated = result.truncated;
|
|
136
203
|
}
|
|
137
204
|
catch (e) {
|
|
138
|
-
|
|
139
|
-
closeDispatcher(dispatcher);
|
|
205
|
+
await closeAgent();
|
|
140
206
|
if (e instanceof DOMException && e.name === 'AbortError') {
|
|
141
207
|
return { status: 'error', reasonCode: 'web_fetch_timeout', host: v.host, credentialsStripped };
|
|
142
208
|
}
|
|
@@ -145,33 +211,21 @@ export async function webFetch(input) {
|
|
|
145
211
|
}
|
|
146
212
|
return { status: 'error', reasonCode: 'web_fetch_body_read_failed', host: v.host, credentialsStripped };
|
|
147
213
|
}
|
|
148
|
-
|
|
149
|
-
closeDispatcher(dispatcher);
|
|
150
|
-
// Extract content for the worker-facing body
|
|
214
|
+
await closeAgent();
|
|
151
215
|
let extracted = rawText;
|
|
152
|
-
if (contentType === 'text/html')
|
|
216
|
+
if (contentType === 'text/html')
|
|
153
217
|
extracted = extractBodyFromHTML(rawText);
|
|
154
|
-
}
|
|
155
|
-
// Apply post-extraction text cap
|
|
156
218
|
let textTruncated = false;
|
|
157
219
|
if (extracted.length > RETURNED_TEXT_CAP) {
|
|
158
220
|
extracted = extracted.slice(0, RETURNED_TEXT_CAP);
|
|
159
221
|
textTruncated = true;
|
|
160
222
|
}
|
|
161
223
|
const wrapped = wrapFetchedContent({
|
|
162
|
-
url: v.url.toString(),
|
|
163
|
-
host: v.host,
|
|
164
|
-
content: extracted,
|
|
224
|
+
url: v.url.toString(), host: v.host, content: extracted,
|
|
165
225
|
});
|
|
166
226
|
return {
|
|
167
|
-
status: 'ok',
|
|
168
|
-
|
|
169
|
-
rawText,
|
|
170
|
-
host: v.host,
|
|
171
|
-
bytesReturned,
|
|
172
|
-
truncated,
|
|
173
|
-
textTruncated,
|
|
174
|
-
credentialsStripped,
|
|
227
|
+
status: 'ok', body: wrapped, rawText, host: v.host,
|
|
228
|
+
bytesReturned, truncated, textTruncated, credentialsStripped,
|
|
175
229
|
};
|
|
176
230
|
}
|
|
177
231
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../src/research/web-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../src/research/web-fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-search.d.ts","sourceRoot":"","sources":["../../src/research/web-search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"web-search.d.ts","sourceRoot":"","sources":["../../src/research/web-search.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;CAAE;AACnF,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;CACjE;AAsBD,qBAAa,WAAW;IAcpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAbtB,OAAO,CAAC,YAAY,CAAK;IAMzB,OAAO,CAAC,SAAS,CAAoC;IAGrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;gBAGpB,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,EAC7C,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,MAAM,CAAA;KAAE;YAM3D,gBAAgB;IAmBxB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA0E/E"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { request } from 'undici';
|
|
2
|
+
import { USER_AGENT } from './user-agent.js';
|
|
2
3
|
function validateBraveResults(body) {
|
|
3
4
|
if (body == null || typeof body !== 'object')
|
|
4
5
|
return [];
|
|
@@ -92,6 +93,7 @@ export class BraveClient {
|
|
|
92
93
|
method: 'GET',
|
|
93
94
|
headers: {
|
|
94
95
|
'accept': 'application/json',
|
|
96
|
+
'user-agent': USER_AGENT,
|
|
95
97
|
'x-subscription-token': key,
|
|
96
98
|
},
|
|
97
99
|
signal: ctrl.signal,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-search.js","sourceRoot":"","sources":["../../src/research/web-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"web-search.js","sourceRoot":"","sources":["../../src/research/web-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { ToolCategory } from '../lifecycle/rework-budget.js';
|
|
2
1
|
import type { TaskEnvelopeStore } from '../events/task-envelope.js';
|
|
3
2
|
export type BatchState = 'pending' | 'complete' | 'failed' | 'expired';
|
|
4
3
|
export declare function isTerminal(s: BatchState): boolean;
|
|
@@ -25,14 +24,6 @@ export interface HeadlineSnapshot {
|
|
|
25
24
|
toolWrites?: number;
|
|
26
25
|
toolTotal?: number;
|
|
27
26
|
}
|
|
28
|
-
/** Lightweight task spec stored in BatchRegistry entries for retry lookups. */
|
|
29
|
-
export interface RegistryTaskSpec {
|
|
30
|
-
brief: string;
|
|
31
|
-
cwd: string;
|
|
32
|
-
agentType: 'standard' | 'complex';
|
|
33
|
-
reviewPolicy: 'full' | 'quality_only' | 'diff_only' | 'none';
|
|
34
|
-
contextBlockIds: string[];
|
|
35
|
-
}
|
|
36
27
|
export interface BatchEntryInput<Result = unknown> {
|
|
37
28
|
batchId: string;
|
|
38
29
|
projectCwd: string;
|
|
@@ -58,10 +49,6 @@ export interface BatchEntryInput<Result = unknown> {
|
|
|
58
49
|
worker: string;
|
|
59
50
|
turn: number;
|
|
60
51
|
}>;
|
|
61
|
-
/** Tool category of the original request — populated for retry inheritance. */
|
|
62
|
-
toolCategory?: ToolCategory;
|
|
63
|
-
/** Original task specs — populated so retry slots can reconstruct briefs. */
|
|
64
|
-
tasks?: RegistryTaskSpec[];
|
|
65
52
|
}
|
|
66
53
|
export interface BatchEntry {
|
|
67
54
|
batchId: string;
|
|
@@ -101,8 +88,6 @@ export interface BatchEntry {
|
|
|
101
88
|
worker: string;
|
|
102
89
|
turn: number;
|
|
103
90
|
}>;
|
|
104
|
-
toolCategory?: ToolCategory;
|
|
105
|
-
tasks?: RegistryTaskSpec[];
|
|
106
91
|
executionContexts?: Map<number, import('../lifecycle/lifecycle-context.js').ExecutionContext>;
|
|
107
92
|
perTaskHeadlineSnapshots?: Map<number, HeadlineSnapshot>;
|
|
108
93
|
terminalBlockIds?: Map<number, string>;
|