Serply
407e564b91
feat(tools): add Serply as a web_search provider ( #1567 )
...
* feat(tools): add Serply as a web_search provider
Serply is a SERP API returning Google web results on a tenant-supplied
key. It joins the existing chain the same way Exa, Tavily and Brave do:
keyed from config_secrets, skipped silently when no key is stored, and
selectable through the provider parameter for cross-engine corroboration.
Freshness maps onto Google's tbs recency filter, which Serply forwards
upstream. Only the pd/pw/pm/py shortcuts are sent: upstream ignores the
equivalent cdr date range and answers with unfiltered results, so a
range leaves tbs unset rather than naming a filter the results do not
honour.
The settings form gained a fifth sortable provider, so the locked
DuckDuckGo card now derives its position number instead of hardcoding
it, and a stored provider_order is reconciled against the full provider
list rather than against Parallel alone.
* test(tools): use a locally named round trip stub in the serply test
The serply cancellation test borrowed parallelRoundTripFunc from
web_search_parallel_test.go. Define serplyRoundTripFunc alongside the
test that uses it so the file does not depend on another provider's
test helper.
2026-09-26 10:33:07 +07:00
..
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-05-17 15:33:55 +07:00
2026-04-12 08:55:20 +07:00
2026-05-19 06:53:45 +07:00
2026-05-11 14:58:19 +07:00
2026-05-24 13:52:23 +07:00
2026-05-17 15:09:49 +07:00
2026-05-17 15:09:49 +07:00
2026-04-11 21:22:23 +07:00
2026-09-09 21:05:49 +07:00
2026-04-15 11:24:57 +07:00
2026-06-21 18:27:51 +07:00
2026-06-21 18:27:51 +07:00
2026-04-02 09:35:21 +07:00
2026-06-21 18:27:51 +07:00
2026-09-10 10:31:48 +07:00
2026-04-24 00:16:14 +07:00
2026-06-21 18:27:51 +07:00
2026-09-10 10:31:48 +07:00
2026-04-04 23:07:42 +07:00
2026-04-02 10:33:35 +07:00
2026-04-02 10:33:35 +07:00
2026-04-02 10:33:35 +07:00
2026-04-14 18:28:31 +07:00
2026-05-31 19:42:05 +07:00
2026-05-31 19:42:05 +07:00
2026-05-31 19:42:05 +07:00
2026-05-31 19:42:05 +07:00
2026-05-28 18:17:49 +07:00
2026-05-28 18:17:49 +07:00
2026-05-28 18:17:49 +07:00
2026-05-31 16:49:23 +07:00
2026-05-31 16:49:23 +07:00
2026-05-28 18:17:49 +07:00
2026-05-28 18:17:49 +07:00
2026-05-28 18:17:49 +07:00
2026-05-28 18:17:49 +07:00
2026-05-24 12:12:16 +07:00
2026-06-11 23:57:56 +07:00
2026-06-11 23:57:56 +07:00
2026-06-12 10:40:59 +07:00
2026-05-28 18:17:49 +07:00
2026-05-27 11:52:25 +07:00
2026-07-30 14:17:40 +07:00
2026-06-25 10:23:55 +07:00
2026-06-25 10:23:55 +07:00
2026-07-23 10:30:42 +07:00
2026-07-23 10:30:42 +07:00
2026-09-08 00:31:01 +07:00
2026-09-08 00:31:01 +07:00
2026-07-31 08:39:50 +07:00
2026-09-08 00:31:01 +07:00
2026-09-09 21:05:49 +07:00
2026-07-31 08:39:50 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-05-31 12:55:38 +07:00
2026-05-31 12:55:38 +07:00
2026-07-30 14:17:40 +07:00
2026-06-12 10:40:59 +07:00
2026-06-12 10:40:59 +07:00
2026-02-22 22:49:22 +07:00
2026-04-02 19:28:04 +07:00
2026-04-09 21:15:19 +07:00
2026-03-28 17:25:59 +07:00
2026-07-30 14:17:40 +07:00
2026-03-21 07:29:48 +07:00
2026-03-21 07:29:48 +07:00
2026-04-23 08:31:53 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-06-06 19:14:13 +07:00
2026-03-19 17:21:38 +07:00
2026-04-01 13:59:56 +07:00
2026-04-09 21:15:19 +07:00
2026-04-09 21:15:19 +07:00
2026-07-08 23:23:08 +07:00
2026-07-08 23:23:08 +07:00
2026-07-31 19:34:40 +07:00
2026-07-31 19:34:40 +07:00
2026-09-12 10:31:12 +07:00
2026-03-25 13:40:44 +07:00
2026-04-27 12:00:20 +07:00
2026-04-12 09:00:58 +07:00
2026-09-12 10:31:12 +07:00
2026-07-09 23:55:11 +07:00
2026-03-29 22:33:17 +07:00
2026-03-27 22:45:40 +07:00
2026-07-10 01:24:39 +07:00
2026-07-10 01:24:39 +07:00
2026-04-18 17:44:57 +07:00
2026-07-30 14:17:40 +07:00
2026-07-31 08:40:02 +07:00
2026-03-10 00:09:15 +07:00
2026-04-18 14:54:51 +07:00
2026-04-23 08:22:39 +07:00
2026-07-03 08:25:05 +07:00
2026-07-03 08:25:05 +07:00
2026-04-16 17:07:56 +07:00
2026-07-09 03:54:33 +07:00
2026-07-10 01:24:39 +07:00
2026-07-10 01:24:39 +07:00
2026-05-17 23:15:52 +07:00
2026-06-23 12:53:33 +07:00
2026-06-23 12:53:33 +07:00
2026-07-30 14:17:40 +07:00
2026-09-12 10:31:12 +07:00
2026-09-12 10:31:12 +07:00
2026-03-10 00:09:15 +07:00
2026-05-31 12:55:38 +07:00
2026-07-30 14:17:40 +07:00
2026-09-12 10:31:12 +07:00
2026-09-12 10:31:12 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-09-12 10:31:12 +07:00
2026-09-12 10:31:12 +07:00
2026-09-12 10:31:12 +07:00
2026-04-15 11:24:57 +07:00
2026-06-21 16:58:15 +07:00
2026-06-23 12:53:33 +07:00
2026-04-23 08:22:39 +07:00
2026-03-20 07:32:23 +07:00
2026-03-20 07:32:23 +07:00
2026-07-30 14:17:40 +07:00
2026-05-20 16:33:49 +07:00
2026-07-30 14:17:40 +07:00
2026-03-04 20:08:59 +07:00
2026-04-12 21:05:10 +07:00
2026-05-28 18:17:49 +07:00
2026-09-01 02:42:47 +07:00
2026-06-12 17:33:54 +07:00
2026-06-12 17:33:54 +07:00
2026-07-30 14:17:40 +07:00
2026-04-13 11:04:19 +07:00
2026-04-13 11:04:19 +07:00
2026-04-13 11:04:19 +07:00
2026-04-16 14:17:48 +07:00
2026-03-30 22:28:00 +07:00
2026-04-13 11:04:19 +07:00
2026-05-17 18:47:46 +07:00
2026-05-28 18:17:49 +07:00
2026-07-30 14:17:40 +07:00
2026-07-08 07:23:05 +07:00
2026-07-08 07:23:05 +07:00
2026-04-24 20:59:08 +07:00
2026-05-17 15:33:55 +07:00
2026-04-14 18:28:31 +07:00
2026-04-14 18:28:31 +07:00
2026-05-21 16:44:43 +07:00
2026-07-30 14:17:40 +07:00
2026-06-12 10:38:53 +07:00
2026-06-12 14:47:51 +07:00
2026-07-03 08:25:05 +07:00
2026-07-03 08:25:05 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-08-03 22:50:06 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-07-30 14:17:40 +07:00
2026-09-01 03:43:55 +07:00
2026-09-08 00:31:01 +07:00
2026-09-01 03:43:55 +07:00
2026-07-30 14:17:40 +07:00
2026-09-01 03:43:55 +07:00
2026-03-18 11:04:45 +07:00
2026-03-27 09:28:42 +07:00
2026-03-23 13:51:28 +07:00
2026-09-09 21:05:49 +07:00
2026-03-20 17:51:40 +07:00
2026-07-30 14:17:40 +07:00
2026-04-11 21:22:23 +07:00
2026-03-29 19:41:35 +07:00
2026-04-12 19:03:47 +07:00
2026-03-24 08:56:10 +07:00
2026-09-09 21:05:49 +07:00
2026-03-27 22:26:36 +07:00
2026-04-16 14:17:48 +07:00
2026-03-27 22:26:36 +07:00
2026-09-09 21:05:49 +07:00
2026-03-27 22:26:36 +07:00
2026-09-09 21:05:49 +07:00
2026-03-27 22:26:36 +07:00
2026-04-18 14:53:42 +07:00
2026-03-27 22:26:36 +07:00
2026-09-09 21:05:49 +07:00
2026-03-27 22:26:36 +07:00
2026-09-09 21:05:49 +07:00
2026-04-09 21:15:19 +07:00
2026-03-27 22:26:36 +07:00
2026-04-16 14:17:48 +07:00
2026-09-09 21:05:49 +07:00
2026-04-12 17:05:57 +07:00
2026-09-09 21:05:49 +07:00
2026-03-27 22:26:36 +07:00
2026-09-09 21:05:49 +07:00
2026-03-31 12:10:55 +07:00
2026-03-31 12:10:55 +07:00
2026-07-04 00:25:00 +07:00
2026-07-04 00:25:00 +07:00
2026-07-04 00:25:00 +07:00
2026-04-23 19:16:12 +07:00
2026-07-18 00:22:48 +07:00
2026-04-20 06:46:19 +07:00
2026-04-16 14:17:48 +07:00
2026-07-18 00:22:48 +07:00
2026-07-22 20:48:12 +07:00
2026-04-23 08:31:53 +07:00
2026-07-22 20:48:12 +07:00
2026-07-31 19:34:40 +07:00
2026-09-12 10:31:12 +07:00
2026-09-12 10:31:12 +07:00
2026-09-12 10:31:12 +07:00
2026-09-03 18:13:56 +07:00
2026-09-03 18:13:56 +07:00
2026-06-21 08:06:07 +07:00
2026-07-03 08:25:05 +07:00
2026-04-23 18:43:31 +07:00
2026-08-04 12:29:17 +07:00
2026-08-04 12:29:17 +07:00
2026-04-19 15:00:07 +07:00
2026-04-23 18:43:31 +07:00
2026-05-19 06:53:45 +07:00
2026-05-19 06:53:45 +07:00
2026-03-10 00:09:15 +07:00
2026-03-03 17:10:55 +07:00
2026-03-07 19:35:19 +07:00
2026-03-10 00:09:15 +07:00
2026-03-20 14:21:46 +07:00
2026-04-12 11:19:00 +07:00
2026-03-20 14:21:46 +07:00
2026-03-20 22:26:48 +07:00
2026-03-10 00:09:15 +07:00
2026-04-12 11:19:00 +07:00
2026-04-12 11:19:00 +07:00
2026-04-12 11:09:32 +07:00
2026-09-26 10:33:07 +07:00
2026-08-02 05:31:39 -07:00
2026-09-26 10:33:07 +07:00
2026-04-12 11:09:32 +07:00
2026-04-12 11:09:32 +07:00
2026-08-02 05:31:39 -07:00
2026-08-02 05:31:39 -07:00
2026-06-25 16:59:48 +07:00
2026-04-23 19:16:12 +07:00
2026-09-26 10:33:07 +07:00
2026-09-26 10:33:07 +07:00
2026-04-12 11:09:32 +07:00
2026-09-26 10:33:07 +07:00
2026-07-31 21:30:01 +07:00
2026-06-24 14:12:38 +07:00
2026-07-31 21:30:01 +07:00
2026-03-24 23:17:51 +07:00
2026-03-23 08:08:23 +07:00
2026-03-18 13:02:07 +07:00
2026-07-02 04:58:45 +07:00
2026-03-25 16:03:31 +07:00
2026-05-20 16:33:49 +07:00
2026-05-20 16:33:49 +07:00