@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
@@ -1 +1 @@
1
- {"version":3,"file":"arxiv.js","sourceRoot":"","sources":["../../../src/research/adapters/arxiv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;AAIrF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAa,EAAE,OAAkB,EAAE;IACnE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAC1D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,KAAK,EAAE,CAAC,CAAC;IACrD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAEjD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAmC,CAAC;IACnE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxF,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;QAC1C,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QACtD,OAAO;YACL,SAAS,EAAE,OAAgB;YAC3B,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;YACtB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YACnC,GAAG;YACH,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YACrD,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;YACtC,GAAG,EAAE,CAAC;SACP,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"arxiv.js","sourceRoot":"","sources":["../../../src/research/adapters/arxiv.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import type { AdapterResult } from './types.js';
2
2
  export interface GitHubOpts {
3
3
  kind: 'repo' | 'code';
4
4
  maxResults?: number;
5
+ pat?: string;
5
6
  }
6
7
  export declare function githubSearch(query: string, opts: GitHubOpts): Promise<AdapterResult[]>;
7
8
  //# sourceMappingURL=github-search.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"github-search.d.ts","sourceRoot":"","sources":["../../../src/research/adapters/github-search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,UAAU;IAAG,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAAE;AA6B3E,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAsF5F"}
1
+ {"version":3,"file":"github-search.d.ts","sourceRoot":"","sources":["../../../src/research/adapters/github-search.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAeD,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAkF5F"}
@@ -1,4 +1,5 @@
1
1
  import { request } from 'undici';
2
+ import { USER_AGENT } from '../user-agent.js';
2
3
  function isGitHubKind(kind) {
3
4
  return kind === 'repo' || kind === 'code';
4
5
  }
@@ -11,6 +12,9 @@ function firstTextMatchFragment(textMatches) {
11
12
  export async function githubSearch(query, opts) {
12
13
  if (!isGitHubKind(opts.kind))
13
14
  throw new Error('github_invalid_kind');
15
+ if (opts.kind === 'code' && (!opts.pat || opts.pat.length === 0)) {
16
+ throw new Error('pat_required_for_code');
17
+ }
14
18
  const max = Math.min(25, Math.max(1, opts.maxResults ?? 10));
15
19
  const path = opts.kind === 'repo' ? '/search/repositories' : '/search/code';
16
20
  const url = new URL(`https://api.github.com${path}`);
@@ -19,10 +23,13 @@ export async function githubSearch(query, opts) {
19
23
  const accept = opts.kind === 'code'
20
24
  ? 'application/vnd.github.v3.text-match+json'
21
25
  : 'application/vnd.github+json';
22
- const res = await request(url.toString(), {
23
- method: 'GET',
24
- headers: { accept, 'user-agent': 'mma-explore' },
25
- });
26
+ const headers = {
27
+ accept,
28
+ 'user-agent': USER_AGENT,
29
+ };
30
+ if (opts.pat && opts.pat.length > 0)
31
+ headers['authorization'] = `Bearer ${opts.pat}`;
32
+ const res = await request(url.toString(), { method: 'GET', headers });
26
33
  if (res.statusCode === 403) {
27
34
  const remaining = res.headers['x-ratelimit-remaining'];
28
35
  if (remaining === '0')
@@ -43,9 +50,8 @@ export async function githubSearch(query, opts) {
43
50
  }
44
51
  throw new Error(`github_http_${res.statusCode}`);
45
52
  }
46
- if (res.statusCode >= 300 && res.statusCode < 400) {
53
+ if (res.statusCode >= 300 && res.statusCode < 400)
47
54
  throw new Error('adapter_unexpected_redirect: github_search');
48
- }
49
55
  if (res.statusCode !== 200)
50
56
  throw new Error(`github_http_${res.statusCode}`);
51
57
  let body;
@@ -56,14 +62,12 @@ export async function githubSearch(query, opts) {
56
62
  throw new Error('github_invalid_json');
57
63
  }
58
64
  const items = typeof body === 'object' && body !== null && 'items' in body && Array.isArray(body.items)
59
- ? body.items
60
- : [];
65
+ ? body.items : [];
61
66
  if (opts.kind === 'repo') {
62
67
  return items.slice(0, max).map((raw) => {
63
68
  const item = raw;
64
69
  const recordId = typeof item.full_name === 'string' && item.full_name.length > 0
65
- ? item.full_name
66
- : String(item.id ?? '');
70
+ ? item.full_name : String(item.id ?? '');
67
71
  return {
68
72
  adapterId: 'github_search',
69
73
  recordId,
@@ -84,8 +88,7 @@ export async function githubSearch(query, opts) {
84
88
  const snippet = firstTextMatchFragment(item.text_matches);
85
89
  return {
86
90
  adapterId: 'github_search',
87
- recordId,
88
- title,
91
+ recordId, title,
89
92
  url: String(item.html_url ?? item.url ?? ''),
90
93
  snippet: snippet.slice(0, 500),
91
94
  raw: item,
@@ -1 +1 @@
1
- {"version":3,"file":"github-search.js","sourceRoot":"","sources":["../../../src/research/adapters/github-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github-search.js","sourceRoot":"","sources":["../../../src/research/adapters/github-search.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,10 @@
1
1
  import type { ResearchConfig } from '../../config/schema.js';
2
2
  import type { AdapterId } from './types.js';
3
- export declare function resolveEnabledAdapters(cfg: ResearchConfig['builtinAdapters']): AdapterId[];
3
+ export interface AdapterCredentials {
4
+ semanticScholarApiKey?: string;
5
+ githubPat?: string;
6
+ }
7
+ export declare function resolveEnabledAdapters(cfg: ResearchConfig['builtinAdapters'], creds?: AdapterCredentials): AdapterId[];
4
8
  export { arxivSearch } from './arxiv.js';
5
9
  export { semanticScholarSearch } from './semantic-scholar.js';
6
10
  export { githubSearch } from './github-search.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/research/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,cAAc,CAAC,iBAAiB,CAAC,GAAG,SAAS,EAAE,CAO1F;AAED,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/research/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,kBAAkB;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,cAAc,CAAC,iBAAiB,CAAC,EACtC,KAAK,GAAE,kBAAuB,GAC7B,SAAS,EAAE,CAYb;AAED,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,9 +1,13 @@
1
- export function resolveEnabledAdapters(cfg) {
1
+ export function resolveEnabledAdapters(cfg, creds = {}) {
2
2
  const out = [];
3
3
  if (cfg.arxiv)
4
4
  out.push('arxiv');
5
- if (cfg.semanticScholar)
6
- out.push('semantic_scholar');
5
+ if (cfg.semanticScholar) {
6
+ if (creds.semanticScholarApiKey && creds.semanticScholarApiKey.length > 0) {
7
+ out.push('semantic_scholar');
8
+ }
9
+ // If enabled but no key, silently skip; caller logs warning at startup.
10
+ }
7
11
  if (cfg.githubSearch)
8
12
  out.push('github_search');
9
13
  if (cfg.genericRss)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/research/adapters/index.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,sBAAsB,CAAC,GAAsC;IAC3E,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,IAAI,GAAG,CAAC,KAAK;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,GAAG,CAAC,eAAe;QAAE,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACtD,IAAI,GAAG,CAAC,YAAY;QAAE,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChD,IAAI,GAAG,CAAC,UAAU;QAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/research/adapters/index.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,sBAAsB,CACpC,GAAsC,EACtC,QAA4B,EAAE;IAE9B,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,IAAI,GAAG,CAAC,KAAK;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,qBAAqB,IAAI,KAAK,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1E,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,CAAC;QACD,wEAAwE;IAC1E,CAAC;IACD,IAAI,GAAG,CAAC,YAAY;QAAE,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChD,IAAI,GAAG,CAAC,UAAU;QAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import type { AdapterResult } from './types.js';
2
2
  export interface SSOpts {
3
3
  maxResults?: number;
4
+ apiKey?: string;
4
5
  }
5
6
  export declare function semanticScholarSearch(query: string, opts?: SSOpts): Promise<AdapterResult[]>;
6
7
  //# sourceMappingURL=semantic-scholar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-scholar.d.ts","sourceRoot":"","sources":["../../../src/research/adapters/semantic-scholar.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,MAAM;IAAG,UAAU,CAAC,EAAE,MAAM,CAAC;CAAE;AA8BhD,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAiCtG"}
1
+ {"version":3,"file":"semantic-scholar.d.ts","sourceRoot":"","sources":["../../../src/research/adapters/semantic-scholar.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,MAAM;IAAG,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAAE;AAyBjE,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA0CtG"}
@@ -1,4 +1,5 @@
1
1
  import { request } from 'undici';
2
+ import { USER_AGENT } from '../user-agent.js';
2
3
  function normalizeRecord(r) {
3
4
  const paperId = typeof r.paperId === 'string' && r.paperId.length > 0 ? r.paperId : null;
4
5
  const title = typeof r.title === 'string' ? r.title.trim() : '';
@@ -18,6 +19,9 @@ function normalizeRecord(r) {
18
19
  };
19
20
  }
20
21
  export async function semanticScholarSearch(query, opts = {}) {
22
+ if (!opts.apiKey || opts.apiKey.length === 0) {
23
+ throw new Error('semantic_scholar_no_api_key');
24
+ }
21
25
  const max = Math.min(25, Math.max(1, opts.maxResults ?? 10));
22
26
  const url = new URL('https://api.semanticscholar.org/graph/v1/paper/search');
23
27
  url.searchParams.set('query', query);
@@ -25,7 +29,13 @@ export async function semanticScholarSearch(query, opts = {}) {
25
29
  url.searchParams.set('fields', 'paperId,title,abstract,year,authors,url');
26
30
  let res;
27
31
  try {
28
- res = await request(url.toString(), { method: 'GET' });
32
+ res = await request(url.toString(), {
33
+ method: 'GET',
34
+ headers: {
35
+ 'user-agent': USER_AGENT,
36
+ 'x-api-key': opts.apiKey,
37
+ },
38
+ });
29
39
  }
30
40
  catch (err) {
31
41
  throw new Error(`semantic_scholar_request_failed: ${err.message}`);
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-scholar.js","sourceRoot":"","sources":["../../../src/research/adapters/semantic-scholar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"semantic-scholar.js","sourceRoot":"","sources":["../../../src/research/adapters/semantic-scholar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export type SourceGroup = 'arxiv' | 'semantic_scholar' | 'github_repo' | 'github_code' | 'web_fetch' | 'rss' | 'brave';
2
+ export interface EvidenceSource {
3
+ source: SourceGroup;
4
+ query: string;
5
+ title: string;
6
+ url: string;
7
+ snippet: string;
8
+ publishedAt?: string;
9
+ rank: number;
10
+ }
11
+ export interface FailedAttempt {
12
+ source: SourceGroup;
13
+ query: string;
14
+ reason: string;
15
+ detail?: string;
16
+ }
17
+ export interface EvidencePack {
18
+ sources: EvidenceSource[];
19
+ failedAttempts: FailedAttempt[];
20
+ generatedAt: string;
21
+ totalQueries: number;
22
+ budgetExceeded: boolean;
23
+ }
24
+ export declare const EVIDENCE_PACK_LIMITS: Readonly<{
25
+ MAX_TOTAL_BYTES: number;
26
+ MAX_PER_GROUP: 10;
27
+ MAX_SNIPPET_CHARS: 500;
28
+ MAX_TOTAL_SOURCES: 50;
29
+ }>;
30
+ export declare function dedupSources(input: EvidenceSource[]): EvidenceSource[];
31
+ export declare function applyBudget(inputSources: EvidenceSource[], failedAttempts: FailedAttempt[]): EvidencePack;
32
+ export declare function serializeEvidencePack(pack: EvidencePack): string;
33
+ //# sourceMappingURL=evidence-pack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-pack.d.ts","sourceRoot":"","sources":["../../src/research/evidence-pack.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GACnB,OAAO,GAAG,kBAAkB,GAAG,aAAa,GAAG,aAAa,GAC5D,WAAW,GAAG,KAAK,GAAG,OAAO,CAAC;AAElC,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAQ,WAAW,CAAC;IAC1B,KAAK,EAAS,MAAM,CAAC;IACrB,KAAK,EAAS,MAAM,CAAC;IACrB,GAAG,EAAW,MAAM,CAAC;IACrB,OAAO,EAAO,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAU,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAG,WAAW,CAAC;IACrB,KAAK,EAAI,MAAM,CAAC;IAChB,MAAM,EAAG,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAS,cAAc,EAAE,CAAC;IACjC,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,WAAW,EAAK,MAAM,CAAC;IACvB,YAAY,EAAI,MAAM,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,oBAAoB;;;;;EAK/B,CAAC;AAaH,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAatE;AAED,wBAAgB,WAAW,CACzB,YAAY,EAAE,cAAc,EAAE,EAC9B,cAAc,EAAE,aAAa,EAAE,GAC9B,YAAY,CAuEd;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CA0BhE"}
@@ -0,0 +1,132 @@
1
+ // EvidencePack types + deterministic truncation policy per spec §5.3 / §5.4.
2
+ export const EVIDENCE_PACK_LIMITS = Object.freeze({
3
+ MAX_TOTAL_BYTES: 48 * 1024,
4
+ MAX_PER_GROUP: 10,
5
+ MAX_SNIPPET_CHARS: 500,
6
+ MAX_TOTAL_SOURCES: 50,
7
+ });
8
+ // Drop priority: lowest-priority group dropped first.
9
+ const DROP_PRIORITY = [
10
+ 'brave', 'rss', 'web_fetch',
11
+ 'github_code', 'github_repo', 'semantic_scholar', 'arxiv',
12
+ ];
13
+ // Within a group, priority is preserved by input order (highest first).
14
+ function groupPriority(group) {
15
+ return DROP_PRIORITY.indexOf(group);
16
+ }
17
+ export function dedupSources(input) {
18
+ // Sort so highest-priority (latest in DROP_PRIORITY) wins on URL collision.
19
+ const sorted = [...input].sort((a, b) => groupPriority(b.source) - groupPriority(a.source));
20
+ const seen = new Set();
21
+ const kept = [];
22
+ for (const s of sorted) {
23
+ if (!s.url || seen.has(s.url))
24
+ continue;
25
+ seen.add(s.url);
26
+ kept.push(s);
27
+ }
28
+ return kept;
29
+ }
30
+ export function applyBudget(inputSources, failedAttempts) {
31
+ let budgetExceeded = false;
32
+ // 1. Dedup.
33
+ let sources = dedupSources(inputSources);
34
+ // 2. Per-group cap.
35
+ const perGroup = new Map();
36
+ for (const s of sources) {
37
+ if (!perGroup.has(s.source))
38
+ perGroup.set(s.source, []);
39
+ perGroup.get(s.source).push(s);
40
+ }
41
+ let totalAfterCap = 0;
42
+ for (const [, list] of perGroup) {
43
+ if (list.length > EVIDENCE_PACK_LIMITS.MAX_PER_GROUP) {
44
+ list.length = EVIDENCE_PACK_LIMITS.MAX_PER_GROUP;
45
+ budgetExceeded = true;
46
+ }
47
+ totalAfterCap += list.length;
48
+ }
49
+ sources = [].concat(...perGroup.values());
50
+ // 3. Total-sources cap. Drop lowest-priority groups first.
51
+ while (sources.length > EVIDENCE_PACK_LIMITS.MAX_TOTAL_SOURCES) {
52
+ budgetExceeded = true;
53
+ let dropped = false;
54
+ for (const g of DROP_PRIORITY) {
55
+ const idx = sources.findIndex(s => s.source === g);
56
+ if (idx >= 0) {
57
+ sources.splice(idx, 1);
58
+ dropped = true;
59
+ break;
60
+ }
61
+ }
62
+ if (!dropped)
63
+ break;
64
+ }
65
+ // 4. Total-bytes cap (on original data). Estimate serialized size; drop lowest-priority first.
66
+ function bytes(arr) {
67
+ let n = 0;
68
+ for (const s of arr) {
69
+ n += s.title.length + s.url.length + s.snippet.length + s.query.length + 100;
70
+ }
71
+ return n;
72
+ }
73
+ while (bytes(sources) > EVIDENCE_PACK_LIMITS.MAX_TOTAL_BYTES) {
74
+ budgetExceeded = true;
75
+ let dropped = false;
76
+ for (const g of DROP_PRIORITY) {
77
+ const idx = sources.findIndex(s => s.source === g);
78
+ if (idx >= 0) {
79
+ sources.splice(idx, 1);
80
+ dropped = true;
81
+ break;
82
+ }
83
+ }
84
+ if (!dropped)
85
+ break;
86
+ }
87
+ // 5. Truncate snippets to MAX_SNIPPET_CHARS.
88
+ sources = sources.map(s => {
89
+ if (s.snippet.length <= EVIDENCE_PACK_LIMITS.MAX_SNIPPET_CHARS)
90
+ return s;
91
+ return {
92
+ ...s,
93
+ snippet: s.snippet.slice(0, EVIDENCE_PACK_LIMITS.MAX_SNIPPET_CHARS) + '…',
94
+ };
95
+ });
96
+ return {
97
+ sources,
98
+ failedAttempts: [...failedAttempts],
99
+ generatedAt: new Date().toISOString(),
100
+ totalQueries: inputSources.length,
101
+ budgetExceeded,
102
+ };
103
+ }
104
+ export function serializeEvidencePack(pack) {
105
+ const lines = [];
106
+ lines.push(`## Sources (${pack.sources.length})`);
107
+ if (pack.budgetExceeded) {
108
+ lines.push('> _Note: evidence-pack budget was exceeded; some sources were dropped per priority policy._');
109
+ }
110
+ lines.push('');
111
+ for (const s of pack.sources) {
112
+ lines.push(`### [${s.source}] ${s.title}`);
113
+ lines.push(`- URL: ${s.url}`);
114
+ lines.push(`- Query: ${s.query}`);
115
+ if (s.publishedAt)
116
+ lines.push(`- Published: ${s.publishedAt}`);
117
+ lines.push('');
118
+ lines.push(s.snippet);
119
+ lines.push('');
120
+ }
121
+ if (pack.failedAttempts.length > 0) {
122
+ lines.push('## Sources that failed');
123
+ lines.push('');
124
+ for (const f of pack.failedAttempts) {
125
+ const detail = f.detail ? ` — ${f.detail}` : '';
126
+ lines.push(`- [${f.source}] query="${f.query}" reason=${f.reason}${detail}`);
127
+ }
128
+ lines.push('');
129
+ }
130
+ return lines.join('\n');
131
+ }
132
+ //# sourceMappingURL=evidence-pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-pack.js","sourceRoot":"","sources":["../../src/research/evidence-pack.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,2 @@
1
- export * from './web-search.js';
2
- export * from './web-fetch.js';
1
+ export {};
3
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/research/index.ts"],"names":[],"mappings":"AAEA,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/research/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC"}
@@ -1,4 +1,2 @@
1
- // research/index.ts — public surface barrel; per architecture.md:262-275.
2
- export * from './web-search.js';
3
- export * from './web-fetch.js';
1
+ export {};
4
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/research/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/research/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import type { QueryPlan } from './query-plan.js';
2
+ import { type EvidencePack } from './evidence-pack.js';
3
+ import type { AdapterId, AdapterResult } from './adapters/types.js';
4
+ import type { BraveSearchResponse } from './web-search.js';
5
+ import type { WebFetchResult } from './web-fetch.js';
6
+ export interface OrchestratorDeps {
7
+ enabledAdapters: AdapterId[];
8
+ brave: {
9
+ search: (query: string) => Promise<BraveSearchResponse>;
10
+ };
11
+ adapters: {
12
+ arxiv: (query: string) => Promise<AdapterResult[]>;
13
+ semanticScholar: (query: string) => Promise<AdapterResult[]>;
14
+ github: (query: string, kind: 'repo' | 'code') => Promise<AdapterResult[]>;
15
+ rss: (url: string) => Promise<AdapterResult[]>;
16
+ };
17
+ webFetch: (url: string) => Promise<WebFetchResult>;
18
+ hostAllowlist: Set<string>;
19
+ perAdapterTimeoutMs: number;
20
+ totalDeadlineMs: number;
21
+ concurrencyCap: number;
22
+ }
23
+ export declare function runOrchestrator(plan: QueryPlan, deps: OrchestratorDeps): Promise<EvidencePack>;
24
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/research/orchestrator.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EACQ,KAAK,YAAY,EAE/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,SAAS,EAAE,CAAC;IAC7B,KAAK,EAAK;QAAE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAA;KAAE,CAAC;IACtE,QAAQ,EAAE;QACR,KAAK,EAAY,CAAC,KAAK,EAAE,MAAM,KAA6B,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QACrF,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAA6B,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QACrF,MAAM,EAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QACpF,GAAG,EAAc,CAAC,GAAG,EAAE,MAAM,KAAgC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;KACvF,CAAC;IACF,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACnD,aAAa,EAAS,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,mBAAmB,EAAG,MAAM,CAAC;IAC7B,eAAe,EAAO,MAAM,CAAC;IAC7B,cAAc,EAAQ,MAAM,CAAC;CAC9B;AAmID,wBAAsB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAoBpG"}
@@ -0,0 +1,162 @@
1
+ //
2
+ // Step 2 of the /research pipeline. Deterministic Node-only fan-out across
3
+ // enabled adapters + Brave + webFetch + RSS, with per-adapter timeout,
4
+ // concurrency cap scoped to this single call, allowlist enforcement on
5
+ // every outbound hop (directFetches + rssFeeds), and post-budget evidence
6
+ // pack assembly.
7
+ import { applyBudget, } from './evidence-pack.js';
8
+ const TASK_TO_GROUP = {
9
+ brave: 'brave',
10
+ arxiv: 'arxiv',
11
+ ss: 'semantic_scholar',
12
+ gh_repo: 'github_repo',
13
+ gh_code: 'github_code',
14
+ rss: 'rss',
15
+ fetch: 'web_fetch',
16
+ };
17
+ function buildTasks(plan) {
18
+ const tasks = [];
19
+ for (const q of plan.braveQueries)
20
+ tasks.push({ kind: 'brave', query: q });
21
+ for (const q of plan.arxivQueries)
22
+ tasks.push({ kind: 'arxiv', query: q });
23
+ for (const q of plan.semanticScholarQueries)
24
+ tasks.push({ kind: 'ss', query: q });
25
+ for (const g of plan.githubQueries)
26
+ tasks.push({ kind: g.kind === 'repo' ? 'gh_repo' : 'gh_code', query: g.q });
27
+ for (const u of plan.rssFeeds)
28
+ tasks.push({ kind: 'rss', url: u });
29
+ for (const u of plan.directFetches)
30
+ tasks.push({ kind: 'fetch', url: u });
31
+ return tasks;
32
+ }
33
+ function isAdapterEnabled(kind, enabled) {
34
+ switch (kind) {
35
+ case 'arxiv': return enabled.includes('arxiv');
36
+ case 'ss': return enabled.includes('semantic_scholar');
37
+ case 'gh_repo':
38
+ case 'gh_code': return enabled.includes('github_search');
39
+ case 'rss': return enabled.includes('rss');
40
+ case 'brave': return true;
41
+ case 'fetch': return true;
42
+ }
43
+ }
44
+ function withTimeout(p, ms) {
45
+ return new Promise((resolve, reject) => {
46
+ const t = setTimeout(() => reject(new Error('timeout')), ms);
47
+ p.then(v => { clearTimeout(t); resolve(v); }, e => { clearTimeout(t); reject(e); });
48
+ });
49
+ }
50
+ function isHostAllowed(url, allowlist) {
51
+ try {
52
+ const host = new URL(url).hostname.toLowerCase();
53
+ return allowlist.has(host);
54
+ }
55
+ catch {
56
+ return false;
57
+ }
58
+ }
59
+ async function runOne(task, deps, sources, fails) {
60
+ if (!isAdapterEnabled(task.kind, deps.enabledAdapters)) {
61
+ fails.push({
62
+ source: TASK_TO_GROUP[task.kind],
63
+ query: 'query' in task ? task.query : task.url,
64
+ reason: 'no_api_key_configured',
65
+ });
66
+ return;
67
+ }
68
+ // Allowlist enforcement on outbound hops.
69
+ if (task.kind === 'rss' || task.kind === 'fetch') {
70
+ if (!isHostAllowed(task.url, deps.hostAllowlist)) {
71
+ fails.push({
72
+ source: TASK_TO_GROUP[task.kind],
73
+ query: task.url,
74
+ reason: 'host_not_allowlisted',
75
+ });
76
+ return;
77
+ }
78
+ }
79
+ const queryStr = 'query' in task ? task.query : task.url;
80
+ try {
81
+ let raw;
82
+ switch (task.kind) {
83
+ case 'brave':
84
+ raw = await withTimeout(deps.brave.search(task.query), deps.perAdapterTimeoutMs);
85
+ break;
86
+ case 'arxiv':
87
+ raw = await withTimeout(deps.adapters.arxiv(task.query), deps.perAdapterTimeoutMs);
88
+ break;
89
+ case 'ss':
90
+ raw = await withTimeout(deps.adapters.semanticScholar(task.query), deps.perAdapterTimeoutMs);
91
+ break;
92
+ case 'gh_repo':
93
+ raw = await withTimeout(deps.adapters.github(task.query, 'repo'), deps.perAdapterTimeoutMs);
94
+ break;
95
+ case 'gh_code':
96
+ raw = await withTimeout(deps.adapters.github(task.query, 'code'), deps.perAdapterTimeoutMs);
97
+ break;
98
+ case 'rss':
99
+ raw = await withTimeout(deps.adapters.rss(task.url), deps.perAdapterTimeoutMs);
100
+ break;
101
+ case 'fetch':
102
+ raw = await withTimeout(deps.webFetch(task.url), deps.perAdapterTimeoutMs);
103
+ break;
104
+ }
105
+ // Normalize each task's result to EvidenceSource[].
106
+ if (task.kind === 'brave') {
107
+ const br = raw;
108
+ br.results.forEach((r, i) => sources.push({
109
+ source: 'brave', query: queryStr,
110
+ title: r.title, url: r.url, snippet: r.snippet, rank: i,
111
+ }));
112
+ }
113
+ else if (task.kind === 'fetch') {
114
+ const r = raw;
115
+ if (r.status === 'ok') {
116
+ sources.push({
117
+ source: 'web_fetch', query: queryStr,
118
+ title: `[fetched ${r.host}]`, url: queryStr,
119
+ snippet: r.rawText.slice(0, 500), rank: 0,
120
+ });
121
+ }
122
+ else {
123
+ fails.push({ source: 'web_fetch', query: queryStr, reason: r.reasonCode });
124
+ }
125
+ }
126
+ else {
127
+ const arr = raw;
128
+ arr.forEach((a, i) => sources.push({
129
+ source: TASK_TO_GROUP[task.kind], query: queryStr,
130
+ title: a.title, url: a.url, snippet: a.snippet,
131
+ publishedAt: a.publishedAt, rank: i,
132
+ }));
133
+ }
134
+ }
135
+ catch (e) {
136
+ fails.push({
137
+ source: TASK_TO_GROUP[task.kind], query: queryStr,
138
+ reason: e.message || 'unknown',
139
+ });
140
+ }
141
+ }
142
+ export async function runOrchestrator(plan, deps) {
143
+ const tasks = buildTasks(plan);
144
+ const sources = [];
145
+ const fails = [];
146
+ let cursor = 0;
147
+ const workers = [];
148
+ const worker = async () => {
149
+ while (true) {
150
+ const idx = cursor++;
151
+ if (idx >= tasks.length)
152
+ return;
153
+ await runOne(tasks[idx], deps, sources, fails);
154
+ }
155
+ };
156
+ for (let i = 0; i < Math.min(deps.concurrencyCap, tasks.length); i++) {
157
+ workers.push(worker());
158
+ }
159
+ await Promise.all(workers);
160
+ return applyBudget(sources, fails);
161
+ }
162
+ //# sourceMappingURL=orchestrator.js.map