@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.
Files changed (253) hide show
  1. package/README.md +1 -72
  2. package/dist/config/schema.d.ts +6 -4
  3. package/dist/config/schema.d.ts.map +1 -1
  4. package/dist/config/schema.js +6 -4
  5. package/dist/config/schema.js.map +1 -1
  6. package/dist/events/task-envelope.d.ts +11 -1
  7. package/dist/events/task-envelope.d.ts.map +1 -1
  8. package/dist/events/task-envelope.js +35 -4
  9. package/dist/events/task-envelope.js.map +1 -1
  10. package/dist/events/to-wire-record.d.ts.map +1 -1
  11. package/dist/events/to-wire-record.js +24 -2
  12. package/dist/events/to-wire-record.js.map +1 -1
  13. package/dist/events/wire-schema.d.ts +10 -10
  14. package/dist/index.d.ts +0 -9
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +0 -8
  17. package/dist/index.js.map +1 -1
  18. package/dist/lifecycle/handlers/annotate-stage.d.ts.map +1 -1
  19. package/dist/lifecycle/handlers/annotate-stage.js +9 -1
  20. package/dist/lifecycle/handlers/annotate-stage.js.map +1 -1
  21. package/dist/{review → lifecycle/handlers}/parse-review-report.d.ts +1 -1
  22. package/dist/lifecycle/handlers/parse-review-report.d.ts.map +1 -0
  23. package/dist/{review → lifecycle/handlers}/parse-review-report.js +10 -3
  24. package/dist/lifecycle/handlers/parse-review-report.js.map +1 -0
  25. package/dist/lifecycle/handlers/quality-review-prompt.d.ts +6 -0
  26. package/dist/lifecycle/handlers/quality-review-prompt.d.ts.map +1 -0
  27. package/dist/lifecycle/handlers/quality-review-prompt.js +42 -0
  28. package/dist/lifecycle/handlers/quality-review-prompt.js.map +1 -0
  29. package/dist/lifecycle/handlers/review-stage.js +11 -6
  30. package/dist/lifecycle/handlers/review-stage.js.map +1 -1
  31. package/dist/lifecycle/handlers/rework-prompt.d.ts +6 -0
  32. package/dist/lifecycle/handlers/rework-prompt.d.ts.map +1 -0
  33. package/dist/lifecycle/handlers/rework-prompt.js +18 -0
  34. package/dist/lifecycle/handlers/rework-prompt.js.map +1 -0
  35. package/dist/lifecycle/handlers/rework-stage.js +2 -2
  36. package/dist/lifecycle/handlers/rework-stage.js.map +1 -1
  37. package/dist/lifecycle/handlers/spec-review-prompt.d.ts +7 -0
  38. package/dist/lifecycle/handlers/spec-review-prompt.d.ts.map +1 -0
  39. package/dist/lifecycle/handlers/spec-review-prompt.js +39 -0
  40. package/dist/lifecycle/handlers/spec-review-prompt.js.map +1 -0
  41. package/dist/{review → lifecycle/handlers}/tier-policy.d.ts +1 -1
  42. package/dist/lifecycle/handlers/tier-policy.d.ts.map +1 -0
  43. package/dist/lifecycle/handlers/tier-policy.js.map +1 -0
  44. package/dist/lifecycle/lifecycle-driver.d.ts.map +1 -1
  45. package/dist/lifecycle/lifecycle-driver.js +14 -4
  46. package/dist/lifecycle/lifecycle-driver.js.map +1 -1
  47. package/dist/lifecycle/perform-implementation.d.ts.map +1 -1
  48. package/dist/lifecycle/perform-implementation.js +38 -5
  49. package/dist/lifecycle/perform-implementation.js.map +1 -1
  50. package/dist/lifecycle/research-pre-loop.d.ts +21 -0
  51. package/dist/lifecycle/research-pre-loop.d.ts.map +1 -0
  52. package/dist/lifecycle/research-pre-loop.js +54 -0
  53. package/dist/lifecycle/research-pre-loop.js.map +1 -0
  54. package/dist/lifecycle/review-verdict-mapping.d.ts.map +1 -0
  55. package/dist/lifecycle/review-verdict-mapping.js.map +1 -0
  56. package/dist/lifecycle/task-executor.js +2 -2
  57. package/dist/lifecycle/task-executor.js.map +1 -1
  58. package/dist/lifecycle/tool-config-types.d.ts +1 -7
  59. package/dist/lifecycle/tool-config-types.d.ts.map +1 -1
  60. package/dist/providers/runner-types.d.ts +0 -6
  61. package/dist/providers/runner-types.d.ts.map +1 -1
  62. package/dist/reporting/report-parser-slots/research-report.d.ts +0 -3
  63. package/dist/reporting/report-parser-slots/research-report.d.ts.map +1 -1
  64. package/dist/reporting/report-parser-slots/research-report.js +0 -5
  65. package/dist/reporting/report-parser-slots/research-report.js.map +1 -1
  66. package/dist/research/adapters/arxiv.d.ts.map +1 -1
  67. package/dist/research/adapters/arxiv.js +5 -1
  68. package/dist/research/adapters/arxiv.js.map +1 -1
  69. package/dist/research/adapters/github-search.d.ts +1 -0
  70. package/dist/research/adapters/github-search.d.ts.map +1 -1
  71. package/dist/research/adapters/github-search.js +15 -12
  72. package/dist/research/adapters/github-search.js.map +1 -1
  73. package/dist/research/adapters/index.d.ts +5 -1
  74. package/dist/research/adapters/index.d.ts.map +1 -1
  75. package/dist/research/adapters/index.js +7 -3
  76. package/dist/research/adapters/index.js.map +1 -1
  77. package/dist/research/adapters/semantic-scholar.d.ts +1 -0
  78. package/dist/research/adapters/semantic-scholar.d.ts.map +1 -1
  79. package/dist/research/adapters/semantic-scholar.js +11 -1
  80. package/dist/research/adapters/semantic-scholar.js.map +1 -1
  81. package/dist/research/evidence-pack.d.ts +33 -0
  82. package/dist/research/evidence-pack.d.ts.map +1 -0
  83. package/dist/research/evidence-pack.js +132 -0
  84. package/dist/research/evidence-pack.js.map +1 -0
  85. package/dist/research/index.d.ts +1 -2
  86. package/dist/research/index.d.ts.map +1 -1
  87. package/dist/research/index.js +1 -3
  88. package/dist/research/index.js.map +1 -1
  89. package/dist/research/orchestrator.d.ts +24 -0
  90. package/dist/research/orchestrator.d.ts.map +1 -0
  91. package/dist/research/orchestrator.js +162 -0
  92. package/dist/research/orchestrator.js.map +1 -0
  93. package/dist/research/query-plan.d.ts +18 -0
  94. package/dist/research/query-plan.d.ts.map +1 -0
  95. package/dist/research/query-plan.js +36 -0
  96. package/dist/research/query-plan.js.map +1 -0
  97. package/dist/research/user-agent.d.ts +5 -0
  98. package/dist/research/user-agent.d.ts.map +1 -0
  99. package/dist/research/user-agent.js +17 -0
  100. package/dist/research/user-agent.js.map +1 -0
  101. package/dist/research/web-fetch.d.ts +27 -22
  102. package/dist/research/web-fetch.d.ts.map +1 -1
  103. package/dist/research/web-fetch.js +115 -61
  104. package/dist/research/web-fetch.js.map +1 -1
  105. package/dist/research/web-search.d.ts.map +1 -1
  106. package/dist/research/web-search.js +2 -0
  107. package/dist/research/web-search.js.map +1 -1
  108. package/dist/stores/batch-registry.d.ts +0 -15
  109. package/dist/stores/batch-registry.d.ts.map +1 -1
  110. package/dist/stores/batch-registry.js +2 -0
  111. package/dist/stores/batch-registry.js.map +1 -1
  112. package/dist/stores/project-context-registry.d.ts +4 -11
  113. package/dist/stores/project-context-registry.d.ts.map +1 -1
  114. package/dist/stores/project-context-registry.js +4 -6
  115. package/dist/stores/project-context-registry.js.map +1 -1
  116. package/dist/tools/audit/tool-config.d.ts.map +1 -1
  117. package/dist/tools/audit/tool-config.js +1 -5
  118. package/dist/tools/audit/tool-config.js.map +1 -1
  119. package/dist/tools/debug/tool-config.d.ts.map +1 -1
  120. package/dist/tools/debug/tool-config.js +1 -5
  121. package/dist/tools/debug/tool-config.js.map +1 -1
  122. package/dist/tools/delegate/tool-config.d.ts.map +1 -1
  123. package/dist/tools/delegate/tool-config.js +0 -6
  124. package/dist/tools/delegate/tool-config.js.map +1 -1
  125. package/dist/tools/execute-plan/tool-config.d.ts.map +1 -1
  126. package/dist/tools/execute-plan/tool-config.js +0 -6
  127. package/dist/tools/execute-plan/tool-config.js.map +1 -1
  128. package/dist/tools/investigate/tool-config.d.ts.map +1 -1
  129. package/dist/tools/investigate/tool-config.js +0 -4
  130. package/dist/tools/investigate/tool-config.js.map +1 -1
  131. package/dist/tools/research/brief-slot.d.ts +17 -0
  132. package/dist/tools/research/brief-slot.d.ts.map +1 -1
  133. package/dist/tools/research/brief-slot.js +61 -0
  134. package/dist/tools/research/brief-slot.js.map +1 -1
  135. package/dist/tools/research/implementer-criteria.d.ts +4 -11
  136. package/dist/tools/research/implementer-criteria.d.ts.map +1 -1
  137. package/dist/tools/research/implementer-criteria.js +77 -14
  138. package/dist/tools/research/implementer-criteria.js.map +1 -1
  139. package/dist/tools/research/tool-config.d.ts.map +1 -1
  140. package/dist/tools/research/tool-config.js +10 -2
  141. package/dist/tools/research/tool-config.js.map +1 -1
  142. package/dist/tools/research/two-turn-driver.d.ts +20 -0
  143. package/dist/tools/research/two-turn-driver.d.ts.map +1 -0
  144. package/dist/tools/research/two-turn-driver.js +41 -0
  145. package/dist/tools/research/two-turn-driver.js.map +1 -0
  146. package/dist/tools/review/tool-config.d.ts.map +1 -1
  147. package/dist/tools/review/tool-config.js +1 -5
  148. package/dist/tools/review/tool-config.js.map +1 -1
  149. package/dist/tools/shared/severity-ladder.d.ts +2 -0
  150. package/dist/tools/shared/severity-ladder.d.ts.map +1 -0
  151. package/dist/tools/shared/severity-ladder.js +9 -0
  152. package/dist/tools/shared/severity-ladder.js.map +1 -0
  153. package/dist/types/config.d.ts +2 -1
  154. package/dist/types/config.d.ts.map +1 -1
  155. package/dist/types/enums.d.ts +3 -3
  156. package/dist/types/task-spec.d.ts +14 -10
  157. package/dist/types/task-spec.d.ts.map +1 -1
  158. package/dist/types.d.ts +0 -10
  159. package/dist/types.d.ts.map +1 -1
  160. package/package.json +1 -5
  161. package/dist/research/types.d.ts +0 -14
  162. package/dist/research/types.d.ts.map +0 -1
  163. package/dist/research/types.js +0 -2
  164. package/dist/research/types.js.map +0 -1
  165. package/dist/review/index.d.ts +0 -5
  166. package/dist/review/index.d.ts.map +0 -1
  167. package/dist/review/index.js +0 -8
  168. package/dist/review/index.js.map +0 -1
  169. package/dist/review/parse-review-report.d.ts.map +0 -1
  170. package/dist/review/parse-review-report.js.map +0 -1
  171. package/dist/review/review-types.d.ts +0 -2
  172. package/dist/review/review-types.d.ts.map +0 -1
  173. package/dist/review/review-types.js +0 -6
  174. package/dist/review/review-types.js.map +0 -1
  175. package/dist/review/review-verdict-mapping.d.ts.map +0 -1
  176. package/dist/review/review-verdict-mapping.js.map +0 -1
  177. package/dist/review/skipped-result.d.ts +0 -8
  178. package/dist/review/skipped-result.d.ts.map +0 -1
  179. package/dist/review/skipped-result.js +0 -4
  180. package/dist/review/skipped-result.js.map +0 -1
  181. package/dist/review/templates/annotator-audit.d.ts +0 -3
  182. package/dist/review/templates/annotator-audit.d.ts.map +0 -1
  183. package/dist/review/templates/annotator-audit.js +0 -20
  184. package/dist/review/templates/annotator-audit.js.map +0 -1
  185. package/dist/review/templates/annotator-debug.d.ts +0 -3
  186. package/dist/review/templates/annotator-debug.d.ts.map +0 -1
  187. package/dist/review/templates/annotator-debug.js +0 -19
  188. package/dist/review/templates/annotator-debug.js.map +0 -1
  189. package/dist/review/templates/annotator-investigate.d.ts +0 -3
  190. package/dist/review/templates/annotator-investigate.d.ts.map +0 -1
  191. package/dist/review/templates/annotator-investigate.js +0 -17
  192. package/dist/review/templates/annotator-investigate.js.map +0 -1
  193. package/dist/review/templates/annotator-review.d.ts +0 -3
  194. package/dist/review/templates/annotator-review.d.ts.map +0 -1
  195. package/dist/review/templates/annotator-review.js +0 -22
  196. package/dist/review/templates/annotator-review.js.map +0 -1
  197. package/dist/review/templates/annotator-shared.d.ts +0 -23
  198. package/dist/review/templates/annotator-shared.d.ts.map +0 -1
  199. package/dist/review/templates/annotator-shared.js +0 -51
  200. package/dist/review/templates/annotator-shared.js.map +0 -1
  201. package/dist/review/templates/finding-criteria.d.ts +0 -15
  202. package/dist/review/templates/finding-criteria.d.ts.map +0 -1
  203. package/dist/review/templates/finding-criteria.js +0 -39
  204. package/dist/review/templates/finding-criteria.js.map +0 -1
  205. package/dist/review/templates/quality-review-audit.d.ts +0 -3
  206. package/dist/review/templates/quality-review-audit.d.ts.map +0 -1
  207. package/dist/review/templates/quality-review-audit.js +0 -10
  208. package/dist/review/templates/quality-review-audit.js.map +0 -1
  209. package/dist/review/templates/quality-review-debug.d.ts +0 -3
  210. package/dist/review/templates/quality-review-debug.d.ts.map +0 -1
  211. package/dist/review/templates/quality-review-debug.js +0 -10
  212. package/dist/review/templates/quality-review-debug.js.map +0 -1
  213. package/dist/review/templates/quality-review-investigate.d.ts +0 -3
  214. package/dist/review/templates/quality-review-investigate.d.ts.map +0 -1
  215. package/dist/review/templates/quality-review-investigate.js +0 -10
  216. package/dist/review/templates/quality-review-investigate.js.map +0 -1
  217. package/dist/review/templates/quality-review-review.d.ts +0 -3
  218. package/dist/review/templates/quality-review-review.d.ts.map +0 -1
  219. package/dist/review/templates/quality-review-review.js +0 -10
  220. package/dist/review/templates/quality-review-review.js.map +0 -1
  221. package/dist/review/templates/quality-review.d.ts +0 -9
  222. package/dist/review/templates/quality-review.d.ts.map +0 -1
  223. package/dist/review/templates/quality-review.js +0 -89
  224. package/dist/review/templates/quality-review.js.map +0 -1
  225. package/dist/review/templates/rework.d.ts +0 -3
  226. package/dist/review/templates/rework.d.ts.map +0 -1
  227. package/dist/review/templates/rework.js +0 -48
  228. package/dist/review/templates/rework.js.map +0 -1
  229. package/dist/review/templates/shared.d.ts +0 -67
  230. package/dist/review/templates/shared.d.ts.map +0 -1
  231. package/dist/review/templates/shared.js +0 -2
  232. package/dist/review/templates/shared.js.map +0 -1
  233. package/dist/review/templates/spec-review.d.ts +0 -10
  234. package/dist/review/templates/spec-review.d.ts.map +0 -1
  235. package/dist/review/templates/spec-review.js +0 -75
  236. package/dist/review/templates/spec-review.js.map +0 -1
  237. package/dist/review/tier-policy.d.ts.map +0 -1
  238. package/dist/review/tier-policy.js.map +0 -1
  239. package/dist/stores/context-block-project-cap.d.ts +0 -14
  240. package/dist/stores/context-block-project-cap.d.ts.map +0 -1
  241. package/dist/stores/context-block-project-cap.js +0 -80
  242. package/dist/stores/context-block-project-cap.js.map +0 -1
  243. package/dist/stores/file-backed-context-block-store.d.ts +0 -81
  244. package/dist/stores/file-backed-context-block-store.d.ts.map +0 -1
  245. package/dist/stores/file-backed-context-block-store.js +0 -410
  246. package/dist/stores/file-backed-context-block-store.js.map +0 -1
  247. package/dist/stores/index.d.ts +0 -4
  248. package/dist/stores/index.d.ts.map +0 -1
  249. package/dist/stores/index.js +0 -5
  250. package/dist/stores/index.js.map +0 -1
  251. /package/dist/{review → lifecycle/handlers}/tier-policy.js +0 -0
  252. /package/dist/{review → lifecycle}/review-verdict-mapping.d.ts +0 -0
  253. /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,5 @@
1
+ export declare const USER_AGENT: string;
2
+ export declare function _resetForTests(fakePkg: {
3
+ version?: unknown;
4
+ }): Promise<string>;
5
+ //# sourceMappingURL=user-agent.d.ts.map
@@ -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 { Agent } from 'undici';
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
- * Test seam return undefined to let undici use the global dispatcher (so
13
- * MockAgent intercepts in tests). Default in prod builds an IP-pinning Agent
14
- * per spec §7.1.10 with TLS SNI on the original hostname.
15
- *
16
- * Ownership: dispatchers returned by this hook are caller-owned/shared and
17
- * will not be closed or destroyed by webFetch. The default dispatcher created
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":"AAAA,OAAO,EAAW,KAAK,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAkB1D,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAC7B,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,oGAAoG;IACpG,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,2CAA2C;IAC3C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C;;;;;;;;OAQG;IACH,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,eAAO,MAAM,0BAA0B,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,EAAE,KAAK,cAAc,CAAC,OAAO,CAAC,UAQnG,CAAC;AAEL,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,IAAI,CAAC;IACb,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb,0GAA0G;IAC1G,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,WAAW,CAAC;AActD,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CA6K5E"}
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 { REDIRECT_ERR_CODE_MAP, validateAndPinURL, extractContentType, isRedirect, extractLocation, extractBodyFromHTML, stripCredentialsFromURL, readBody, drainBody, closeDispatcher, mapRequestError, } from './web-fetch-helpers.js';
4
- export const defaultIPPinningDispatcher = (host, pinnedIP, cfg) => new Agent({
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
- 'text/plain',
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
- // Build IP-pinning dispatcher. In tests createDispatcher returns undefined
61
- // so undici falls back to the global dispatcher (MockAgent).
62
- const usingDefaultDispatcher = input.createDispatcher === undefined;
63
- const dispatcher = (input.createDispatcher ?? defaultIPPinningDispatcher)(v.host, v.pinnedIP, cfg);
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
- ...(dispatcher ? { dispatcher } : {}),
143
+ headers: { 'user-agent': USER_AGENT },
144
+ ...(agent ? { dispatcher: agent } : {}),
72
145
  signal: totalCtrl.signal,
73
146
  });
74
147
  }
75
148
  catch (e) {
76
- if (usingDefaultDispatcher)
77
- closeDispatcher(dispatcher);
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
- if (usingDefaultDispatcher)
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
- if (usingDefaultDispatcher)
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
- if (usingDefaultDispatcher)
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
- if (usingDefaultDispatcher)
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
- if (usingDefaultDispatcher)
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
- if (usingDefaultDispatcher)
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
- if (usingDefaultDispatcher)
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
- body: wrapped,
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":"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"}
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":"AACA,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;CAyE/E"}
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":"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"}
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>;