@konbakuyomu/smart-search-linux-x64 0.1.30 → 0.1.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/runtime/smart-search/_internal/base_library.zip +0 -0
- package/runtime/smart-search/_internal/smart_search/assets/i18n/messages.json +4 -0
- package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/deep-research-mode.md +1 -1
- package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/provider-routing.md +1 -1
- package/runtime/smart-search/_internal/smart_search/intent_router.py +17 -2
- package/runtime/smart-search/_internal/smart_search/jev_search.py +11 -3
- package/runtime/smart-search/_internal/smart_search/ui_api.py +5 -5
- package/runtime/smart-search/_internal/smart_search-0.1.31.dist-info/METADATA +294 -0
- package/runtime/smart-search/_internal/{smart_search-0.1.30.dist-info → smart_search-0.1.31.dist-info}/RECORD +15 -15
- package/runtime/smart-search/_internal/wcwidth/_wcwidth_c.abi3.so +0 -0
- package/runtime/smart-search/package.json +7 -7
- package/runtime/smart-search/smart-search +0 -0
- package/runtime/smart-search/_internal/smart_search-0.1.30.dist-info/METADATA +0 -97
- /package/runtime/smart-search/_internal/{smart_search-0.1.30.dist-info → smart_search-0.1.31.dist-info}/INSTALLER +0 -0
- /package/runtime/smart-search/_internal/{smart_search-0.1.30.dist-info → smart_search-0.1.31.dist-info}/REQUESTED +0 -0
- /package/runtime/smart-search/_internal/{smart_search-0.1.30.dist-info → smart_search-0.1.31.dist-info}/WHEEL +0 -0
- /package/runtime/smart-search/_internal/{smart_search-0.1.30.dist-info → smart_search-0.1.31.dist-info}/direct_url.json +0 -0
- /package/runtime/smart-search/_internal/{smart_search-0.1.30.dist-info → smart_search-0.1.31.dist-info}/entry_points.txt +0 -0
- /package/runtime/smart-search/_internal/{smart_search-0.1.30.dist-info → smart_search-0.1.31.dist-info}/licenses/LICENSE +0 -0
- /package/runtime/smart-search/_internal/{smart_search-0.1.30.dist-info → smart_search-0.1.31.dist-info}/top_level.txt +0 -0
package/package.json
CHANGED
|
Binary file
|
|
@@ -18022,5 +18022,9 @@
|
|
|
18022
18022
|
"正在卸载 CLI…": [
|
|
18023
18023
|
"正在卸载 CLI…",
|
|
18024
18024
|
"Removing the CLI…"
|
|
18025
|
+
],
|
|
18026
|
+
"检索渠道": [
|
|
18027
|
+
"检索渠道",
|
|
18028
|
+
"Retrieval channel"
|
|
18025
18029
|
]
|
|
18026
18030
|
}
|
|
@@ -180,7 +180,7 @@ Research provider advantage routing:
|
|
|
180
180
|
- AnySearch: explicit vertical intent only, such as CVE, finance, legal, academic, and repository/codebase search.
|
|
181
181
|
- Sciverse: explicit-only academic provider in this release; use direct `sciverse-*` commands rather than `research` fallback.
|
|
182
182
|
|
|
183
|
-
Safe
|
|
183
|
+
Safe routing overrides are `SMART_SEARCH_RESEARCH_PREFERRED_PROVIDERS` and `SMART_SEARCH_RESEARCH_DISABLED_PROVIDERS`; despite the names they apply to automatic routing in both ordinary search and research. They may reorder or disable providers only inside capabilities the provider already supports; they must not move a provider across capability boundaries.
|
|
184
184
|
|
|
185
185
|
## Closeout Lessons
|
|
186
186
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
- `research`: the shared loop selects complementary actions in parallel, reads discovered pages, assesses evidence gaps, and continues while useful and within budget. Jev or local rules choose from program-built original/subquestion/gap query candidates; Jev does not generate arbitrary queries or tool calls. Only fetched/read content enters `citations`. Optional filtering and `SMART_SEARCH_JEV_SYNTHESIZE=false|auto|true` apply only here.
|
|
9
9
|
- `deep` remains an offline planner. Its `steps[].command` entries are suggestions for manual/AI orchestration; `research` records its actual actions separately in `routing_decision.rounds` and `stage_results`.
|
|
10
10
|
|
|
11
|
-
The default is `SMART_SEARCH_INTENT_ROUTER=jev`. In Jev mode, ordinary search makes at most one routing judgment and, when Jev is configured, one additional judgment on a returned model answer; without a TypeSafe key or a valid judgment, `--fallback auto` uses local capability rules and reports degradation, while `--fallback off` fails clearly. Explicit `local` needs no TypeSafe key and never calls Jev. Legacy `hybrid` maps to `jev`; `rules` and `off` map to `local`. Old embedding/classifier keys remain stored but unused. `route-calibrate` is a retired, non-network compatibility command.
|
|
11
|
+
The default is `SMART_SEARCH_INTENT_ROUTER=jev`. In Jev mode, ordinary search makes at most one routing judgment and, when Jev is configured, one additional judgment on a returned model answer; without a TypeSafe key or a valid judgment, `--fallback auto` uses local capability rules and reports degradation, while `--fallback off` fails clearly. Without a TypeSafe key, `research` stops after the first round that reads page text (`judgment_unavailable`), is always reported as degraded, and with `deep` (strict) never returns `ok=true`; read `content` and `gap_check` instead of treating that as a failed search. `SMART_SEARCH_JEV_SYNTHESIZE=true` still summarizes read evidence; `auto` needs Jev. Explicit `local` needs no TypeSafe key and never calls Jev. Legacy `hybrid` maps to `jev`; `rules` and `off` map to `local`. Old embedding/classifier keys remain stored but unused. `route-calibrate` is a retired, non-network compatibility command.
|
|
12
12
|
|
|
13
13
|
`route` previews local capabilities without calling a model or retrieval provider. Add `--remote` only for an explicit, potentially billable Jev diagnostic. Direct provider commands keep their explicit behavior.
|
|
14
14
|
|
|
@@ -166,6 +166,21 @@ def contains_any(query: str, keywords: set[str]) -> bool:
|
|
|
166
166
|
return any(keyword.lower() in q for keyword in keywords)
|
|
167
167
|
|
|
168
168
|
|
|
169
|
+
def contains_term(query: str, keywords: set[str]) -> bool:
|
|
170
|
+
"""Like contains_any, but Latin keywords match whole words (with a plural s or a version
|
|
171
|
+
number), so "api" is not found in "capital" nor "repo" in "report". CJK keywords have no
|
|
172
|
+
word boundaries and still match as substrings."""
|
|
173
|
+
q = query.lower()
|
|
174
|
+
for keyword in keywords:
|
|
175
|
+
term = keyword.lower()
|
|
176
|
+
if not term.isascii():
|
|
177
|
+
if term in q:
|
|
178
|
+
return True
|
|
179
|
+
elif re.search(rf"(?<![a-z0-9]){re.escape(term)}(?:e?s)?(?![a-z])", q):
|
|
180
|
+
return True
|
|
181
|
+
return False
|
|
182
|
+
|
|
183
|
+
|
|
169
184
|
def extract_urls(query: str) -> list[str]:
|
|
170
185
|
urls = []
|
|
171
186
|
for match in re.findall(r"https?://[^\s<>\]\)\"',。;!?、:)】》」』]+", query):
|
|
@@ -189,7 +204,7 @@ def build_rules_route(
|
|
|
189
204
|
) -> IntentRouteResult:
|
|
190
205
|
plan_intent_signals = plan_intent_signals or {}
|
|
191
206
|
urls = extract_urls(query)
|
|
192
|
-
docs_intent = bool(plan_intent_signals.get("docs_api_intent")) or
|
|
207
|
+
docs_intent = bool(plan_intent_signals.get("docs_api_intent")) or contains_term(query, DOCS_INTENT_KEYWORDS)
|
|
193
208
|
zh_current_intent = (
|
|
194
209
|
plan_intent_signals.get("locale_domain_scope") == "china"
|
|
195
210
|
or contains_any(query, ZH_CURRENT_INTENT_KEYWORDS)
|
|
@@ -200,7 +215,7 @@ def build_rules_route(
|
|
|
200
215
|
or contains_any(query, CURRENT_INTENT_KEYWORDS)
|
|
201
216
|
)
|
|
202
217
|
fetch_intent = bool(plan_intent_signals.get("known_url")) or bool(urls) or contains_any(query, FETCH_INTENT_KEYWORDS)
|
|
203
|
-
vertical_intent =
|
|
218
|
+
vertical_intent = contains_term(query, VERTICAL_INTENT_KEYWORDS)
|
|
204
219
|
|
|
205
220
|
capabilities: set[str] = set()
|
|
206
221
|
supplemental_paths: list[str] = []
|
|
@@ -509,8 +509,8 @@ async def search(
|
|
|
509
509
|
before = len(evidence)
|
|
510
510
|
round_attempt_start = len(attempts)
|
|
511
511
|
if is_research:
|
|
512
|
-
tasks = {asyncio.create_task(execute_one(item, retrieval_timeout)) for item in selected}
|
|
513
|
-
pending = tasks
|
|
512
|
+
tasks = {asyncio.create_task(execute_one(item, retrieval_timeout)): item for item in selected}
|
|
513
|
+
pending = set(tasks)
|
|
514
514
|
try:
|
|
515
515
|
while pending:
|
|
516
516
|
done, pending = await asyncio.wait(pending, return_when=asyncio.FIRST_COMPLETED)
|
|
@@ -519,6 +519,12 @@ async def search(
|
|
|
519
519
|
_, pending = await asyncio.wait(
|
|
520
520
|
pending, timeout=max(STRAGGLER_GRACE_SECONDS, time.monotonic() - phase_start)
|
|
521
521
|
)
|
|
522
|
+
# A search model runs its own web search and is far slower than an index
|
|
523
|
+
# lookup; it keeps its retrieval timeout instead of the straggler grace.
|
|
524
|
+
models = {task for task in pending if tasks[task]["capability"] == "main_search"}
|
|
525
|
+
if models:
|
|
526
|
+
await asyncio.wait(models)
|
|
527
|
+
pending -= models
|
|
522
528
|
break
|
|
523
529
|
finally:
|
|
524
530
|
for task in pending:
|
|
@@ -613,7 +619,9 @@ async def search(
|
|
|
613
619
|
"status": "disabled" if settings.synthesis_mode == "false" else "skipped",
|
|
614
620
|
"decision_source": "config",
|
|
615
621
|
}
|
|
616
|
-
|
|
622
|
+
# Without Jev, usefulness is unknown (None); an explicit "true" still summarizes what was read.
|
|
623
|
+
useful_evidence = bool(answer_evidence and (assessment["useful"] or
|
|
624
|
+
(assessment["useful"] is None and settings.synthesis_mode == "true")))
|
|
617
625
|
if settings.synthesis_mode != "false" and not useful_evidence:
|
|
618
626
|
synthesis["reason"] = "no_confirmed_useful_evidence"
|
|
619
627
|
if settings.synthesis_mode == "auto" and not judge_available:
|
|
@@ -158,16 +158,16 @@ def preview(payload: dict[str, Any]) -> dict[str, Any]:
|
|
|
158
158
|
merged = {str(key).strip().upper(): "" if value is None else str(value) for key, value in values.items()}
|
|
159
159
|
with config.snapshot(merged):
|
|
160
160
|
capability_status = service.get_capability_status()
|
|
161
|
-
|
|
162
|
-
|
|
161
|
+
# The same minimum profile the overview reports, so a draft never "passes" differently.
|
|
162
|
+
minimum = service._minimum_profile_result(config.minimum_profile, capability_status)
|
|
163
163
|
return {
|
|
164
164
|
"ok": True,
|
|
165
165
|
"error_type": "",
|
|
166
166
|
"error": "",
|
|
167
167
|
"capability_status": capability_status,
|
|
168
|
-
"required": required,
|
|
169
|
-
"missing": missing,
|
|
170
|
-
"minimum_profile_ok":
|
|
168
|
+
"required": minimum["required"],
|
|
169
|
+
"missing": minimum["missing"],
|
|
170
|
+
"minimum_profile_ok": minimum["ok"],
|
|
171
171
|
}
|
|
172
172
|
|
|
173
173
|
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: smart-search
|
|
3
|
+
Version: 0.1.31
|
|
4
|
+
Summary: CLI-first multi-source web research with xAI/OpenAI-compatible search, Exa, Context7, Zhipu, Tavily, Firecrawl, and Deep Research planning.
|
|
5
|
+
Requires-Python: >=3.10
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Requires-Dist: httpx[socks]>=0.28.0
|
|
9
|
+
Requires-Dist: InquirerPy<0.4,>=0.3.4
|
|
10
|
+
Requires-Dist: pyfiglet<2,>=1.0
|
|
11
|
+
Requires-Dist: rich<16,>=13.9
|
|
12
|
+
Requires-Dist: tenacity>=8.0.0
|
|
13
|
+
Provides-Extra: dev
|
|
14
|
+
Requires-Dist: PyYAML<7,>=6.0; extra == "dev"
|
|
15
|
+
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
16
|
+
Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
|
|
17
|
+
Dynamic: license-file
|
|
18
|
+
|
|
19
|
+
<div align="center">
|
|
20
|
+
|
|
21
|
+
<img src="https://raw.githubusercontent.com/konbakuyomu/smartsearch/main/assets/branding/smart-search.png" alt="Smart Search" width="104">
|
|
22
|
+
|
|
23
|
+
# Smart Search
|
|
24
|
+
|
|
25
|
+
### Let your AI search the web, read the original pages, and answer with sources you can check
|
|
26
|
+
|
|
27
|
+
**You pick the providers and bring the keys. Jev decides which channel each question should go to.**
|
|
28
|
+
|
|
29
|
+
[简体中文](README.zh-CN.md) | English
|
|
30
|
+
|
|
31
|
+
[](https://www.npmjs.com/package/@konbakuyomu/smart-search)
|
|
32
|
+
[](https://github.com/konbakuyomu/smartsearch/actions/workflows/ci.yml)
|
|
33
|
+
[](https://github.com/konbakuyomu/smartsearch/releases/latest)
|
|
34
|
+
[](https://nodejs.org/)
|
|
35
|
+
[](#supported-ai-tools)
|
|
36
|
+
[](https://github.com/konbakuyomu/smartsearch/blob/main/LICENSE)
|
|
37
|
+
|
|
38
|
+
[Download the App](https://github.com/konbakuyomu/smartsearch/releases/latest) · [User guide](https://github.com/konbakuyomu/smartsearch/tree/main/docs/guide) · [Jev routing](https://github.com/konbakuyomu/smartsearch/blob/main/docs/jev-routing.md) · [Report a problem](https://github.com/konbakuyomu/smartsearch/issues)
|
|
39
|
+
|
|
40
|
+
[See it](#see-it) · [Quick start](#quick-start) · [Everyday use](#everyday-use) · [How it works](#how-it-works) · [Providers](#capabilities-and-providers) · [Commands](#common-commands) · [FAQ](#faq)
|
|
41
|
+
|
|
42
|
+
<code>npm install -g @konbakuyomu/smart-search@latest</code>
|
|
43
|
+
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<br>
|
|
47
|
+
|
|
48
|
+
<p align="center">
|
|
49
|
+
<img src="https://raw.githubusercontent.com/konbakuyomu/smartsearch/main/docs/media/jev-routing.gif" alt="The same question twice: the built-in search on the left is still spinning; on the right, Jev scores the candidate channels and Smart Search dispatches the best one and returns sources" width="100%">
|
|
50
|
+
</p>
|
|
51
|
+
<p align="center"><sub>The same question, asked with the built-in search (left) and with Smart Search (right): Jev scores every configured channel and dispatches only the highest one above the threshold. The numbers shown are examples. Animations are in Chinese.</sub></p>
|
|
52
|
+
|
|
53
|
+
> [!IMPORTANT]
|
|
54
|
+
> Smart Search does not provide search itself. Searching and page reading are done by the providers you choose, with API keys you supply, saved in your local configuration folder. Provider tests and searches may use those providers' paid quota; opening the App or checking the local environment never runs a paid search.
|
|
55
|
+
|
|
56
|
+
## What it is
|
|
57
|
+
|
|
58
|
+
Smart Search puts search, page reading and provider configuration in one place and connects them to AI tools such as Codex, Claude Code and Cursor. It has three parts:
|
|
59
|
+
|
|
60
|
+
| Part | What it does |
|
|
61
|
+
| --- | --- |
|
|
62
|
+
| **Independent CLI** (`smart-search`) | Runs searches, page reads and live research; your AI goes online through it |
|
|
63
|
+
| **Desktop App** (Windows / macOS) | Installs the CLI, configures providers, updates Skills, searches and shows activity |
|
|
64
|
+
| **Skills** | Instructions installed into your AI tools that tell them when and how to call the CLI |
|
|
65
|
+
|
|
66
|
+
The App only manages; after you close it, your AI keeps calling the CLI as its Skill describes.
|
|
67
|
+
|
|
68
|
+
It helps when you are:
|
|
69
|
+
|
|
70
|
+
- **Working with a library or API:** find current documentation and read the relevant pages.
|
|
71
|
+
- **Following recent changes:** look up announcements or news newer than a model's knowledge.
|
|
72
|
+
- **Checking a claim:** find its source, read the page, and compare it with other evidence.
|
|
73
|
+
- **Researching a larger question:** collect sources over several rounds, inspect gaps, and build a cited answer.
|
|
74
|
+
|
|
75
|
+
## See it
|
|
76
|
+
|
|
77
|
+
<table>
|
|
78
|
+
<tr>
|
|
79
|
+
<td width="50%" valign="top">
|
|
80
|
+
<img src="https://raw.githubusercontent.com/konbakuyomu/smartsearch/main/docs/media/ask-ai.gif" alt="In an AI tool, ask it to use Smart Search; it searches, reads the original page, and answers with sources">
|
|
81
|
+
<p><b>Ask your AI</b><br><sub>Say three things: use Smart Search, read the relevant page, give the sources. The AI searches, reads the original page and cites it.</sub></p>
|
|
82
|
+
</td>
|
|
83
|
+
<td width="50%" valign="top">
|
|
84
|
+
<img src="https://raw.githubusercontent.com/konbakuyomu/smartsearch/main/docs/media/app-setup.gif" alt="On the App's Providers page, paste an Exa API key, test it, then save">
|
|
85
|
+
<p><b>Configure a provider in the App</b><br><sub>Pick a provider, paste its key, test it (one real request), then save.</sub></p>
|
|
86
|
+
</td>
|
|
87
|
+
</tr>
|
|
88
|
+
<tr>
|
|
89
|
+
<td width="50%" valign="top">
|
|
90
|
+
<img src="https://raw.githubusercontent.com/konbakuyomu/smartsearch/main/docs/media/app-search.gif" alt="On the App's Search & research page, run a search; the result and its source links appear together">
|
|
91
|
+
<p><b>Search in the App</b><br><sub>On Search & research, pick a tool and enter a question; the result comes with its source links, ready to copy or export.</sub></p>
|
|
92
|
+
</td>
|
|
93
|
+
<td width="50%" valign="top">
|
|
94
|
+
<p><b>The full videos</b></p>
|
|
95
|
+
<sub>The feature film, the setup tutorial and the everyday-use tutorial are <a href="#full-videos">below</a>. All three are rendered frame by frame from code; their sources are in <a href="promo/"><code>promo/</code></a> and can be rebuilt locally.</sub>
|
|
96
|
+
<br><br>
|
|
97
|
+
<sub>Clawd in the animations is an unofficial fan depiction, not affiliated with Anthropic. The App screens are a redrawn illustration of the Windows App, with text taken from its source.</sub>
|
|
98
|
+
</td>
|
|
99
|
+
</tr>
|
|
100
|
+
</table>
|
|
101
|
+
|
|
102
|
+
### Full videos
|
|
103
|
+
|
|
104
|
+
The captions are in Chinese.
|
|
105
|
+
|
|
106
|
+
**The feature film, “The Same Question”** (53 s): the same question asked with the built-in search and with Smart Search, side by side: Jev routing, search, reading the original page, and an answer with sources.
|
|
107
|
+
|
|
108
|
+
https://github.com/user-attachments/assets/8909f8b9-394b-4617-b6bb-3c8b6904efc6
|
|
109
|
+
|
|
110
|
+
**Setup tutorial** (69 s): the Windows App page by page: install the CLI, add and test an API key, turn on Jev routing, update Skills.
|
|
111
|
+
|
|
112
|
+
https://github.com/user-attachments/assets/d2b17aea-1abe-4658-808a-1f212649e5e1
|
|
113
|
+
|
|
114
|
+
**Everyday use** (62 s): ask your AI directly, search and research in the App, read Activity, the common commands, and keep working after closing the App.
|
|
115
|
+
|
|
116
|
+
https://github.com/user-attachments/assets/915cb409-e012-4aa4-8910-3d213f732386
|
|
117
|
+
|
|
118
|
+
## Quick start
|
|
119
|
+
|
|
120
|
+
### With the App (recommended)
|
|
121
|
+
|
|
122
|
+
1. **Install the App and the CLI.** Download the package for your system from [Releases](https://github.com/konbakuyomu/smartsearch/releases/latest). Step 1 on **Overview** finds npm on your machine (or takes a manual path); **Install CLI** installs and connects the independent CLI. On Windows with a WSL distribution, each environment gets its own button: **Install in Windows** and **Install in WSL <distribution>** (WSL needs Node.js 18 or later).
|
|
123
|
+
2. **Configure providers.** On **Providers**, choose one provider each for main search, documentation search and page fetching, enter its API key, click **Test**, then **Save changes**. Each provider has a **Get API key** link. One working retrieval channel is enough to search; with all three, routing has more channels to choose from.
|
|
124
|
+
3. **Turn on Jev routing (optional).** Under **Providers → Intent routing**, enter a TypeSafe API key. The router mode defaults to **JEV semantic routing**; without a key, channels are chosen by local rules.
|
|
125
|
+
4. **Connect your AI tools.** On **Update Skills**, select your Agents (Codex, Claude Code and Cursor are selected by default) and click **Update selected Skills**. Files that differ are backed up first and extra files are kept. Reopen your Agent session and start asking.
|
|
126
|
+
|
|
127
|
+
Page-by-page instructions: [Set up and use the App](https://github.com/konbakuyomu/smartsearch/blob/main/docs/guide/en/app.md).
|
|
128
|
+
|
|
129
|
+
### Terminal only
|
|
130
|
+
|
|
131
|
+
```sh
|
|
132
|
+
npm install -g @konbakuyomu/smart-search@latest
|
|
133
|
+
smart-search setup # terminal wizard; smart-search ui opens a local configuration page instead
|
|
134
|
+
smart-search doctor --format json
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
The npm CLI needs only Node.js 18+. Its platform package includes the Python runtime and does not use a user-installed Python. For a uv source installation or a fixed Python version, see [CLI installation](https://github.com/konbakuyomu/smartsearch/blob/main/docs/guide/en/cli.md#cli-installation).
|
|
138
|
+
|
|
139
|
+
## Everyday use
|
|
140
|
+
|
|
141
|
+
**In your AI tool:** ask naturally, for example:
|
|
142
|
+
|
|
143
|
+
> Use Smart Search to find the current React documentation for useEffect cleanup. Read the relevant page and include the source.
|
|
144
|
+
|
|
145
|
+
> Use Smart Search to check the claims in this page: https://example.com/article
|
|
146
|
+
|
|
147
|
+
| You say | It does |
|
|
148
|
+
| --- | --- |
|
|
149
|
+
| "Look up the current docs for X" | `search`: Jev picks one channel, which returns results and sources |
|
|
150
|
+
| "Read this link" | `fetch`: reads the page as clean text |
|
|
151
|
+
| "Check this claim" | Finds the source, `fetch`es the original, cites the pages it read |
|
|
152
|
+
| "Research X in depth" | `research`: several rounds of retrieval and reading; Jev judges each round whether the evidence is enough |
|
|
153
|
+
|
|
154
|
+
**In the App:** open **Search & research**, choose a tool (Search, Read page, Live research and more), enter a question or URL, and read the result and its **Source links** on the right; copy or export it. **Activity** shows each task's status, phase and provider, including tasks your AI started from the terminal.
|
|
155
|
+
|
|
156
|
+
**Language:** the App follows your system by default; choose Chinese or English in **Settings & about → Interface language**. The CLI keeps its own language preference and accepts a one-command `--lang en` / `--lang zh`. These settings change the interface and messages, not the text of a source page.
|
|
157
|
+
|
|
158
|
+
## How it works
|
|
159
|
+
|
|
160
|
+
The default intent router is **Jev semantic routing** (`SMART_SEARCH_INTENT_ROUTER=jev`); the judgments come from TypeSafe's Jev model:
|
|
161
|
+
|
|
162
|
+
```mermaid
|
|
163
|
+
flowchart LR
|
|
164
|
+
Q["Your question"] --> C["Candidate operations<br/>configured, enabled channels only"]
|
|
165
|
+
C --> J["Jev judges each one<br/>one Noul probability per candidate"]
|
|
166
|
+
J --> F{"Above 0.5?<br/>sorted by probability"}
|
|
167
|
+
F -- "search" --> S["Dispatch the top one"]
|
|
168
|
+
F -- "research" --> R["Dispatch several per round, concurrently"]
|
|
169
|
+
R --> E{"Enough evidence?<br/>threshold 0.75"}
|
|
170
|
+
E -- "gaps remain" --> R
|
|
171
|
+
E -- "enough" --> A["Result cites only pages actually read"]
|
|
172
|
+
S --> A2["Results and sources"]
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
- **The program lists the candidates; Jev only chooses.** Each candidate carries its provider, operation, capability, the actual query or URL, and your preference order, never a channel key. Jev does not write free-form queries or make tool calls.
|
|
176
|
+
- **search routes once.** It picks one suitable channel and returns results and sources, without sufficiency assessment, follow-up searches, filtering or synthesis; its `evidence_assessment.status` is `not_evaluated`. A successful retrieval is not a verified fact.
|
|
177
|
+
- **research follows the evidence gaps.** Each round Jev picks complementary actions that run concurrently, discovered pages are read, and the evidence is judged for a direct answer, detail, freshness, authority and corroboration. Only fetched or read text enters the citations.
|
|
178
|
+
- **It still works without Jev.** Without a TypeSafe key, or without a valid judgment, the default `--fallback auto` routes by local capability rules and marks the result as degraded; `--fallback off` fails instead. Explicit `local` mode never calls Jev.
|
|
179
|
+
- **Budgets are bounded.** Live research at quick / standard / deep allows at most 2 / 3 / 10 rounds and 1 / 2 / 10 channels per round, further limited by your Jev settings (3 rounds and 3 channels by default), and stops early once the evidence is enough.
|
|
180
|
+
|
|
181
|
+
The thresholds are a starting policy and do not guarantee a correct judgment. The full description, settings and output fields are in [Jev multi-channel routing](https://github.com/konbakuyomu/smartsearch/blob/main/docs/jev-routing.md) (Chinese).
|
|
182
|
+
|
|
183
|
+
## Capabilities and providers
|
|
184
|
+
|
|
185
|
+
One provider per capability is enough. Enter keys on the App's **Providers** page or save them with `smart-search config set`.
|
|
186
|
+
|
|
187
|
+
| Capability | Providers | What it does |
|
|
188
|
+
| --- | --- | --- |
|
|
189
|
+
| Main search | xAI, OpenAI-compatible API | A model searches the web and answers with citations |
|
|
190
|
+
| Documentation search | Context7, Exa | Library, API and official documentation pages |
|
|
191
|
+
| Web search | Zhipu, Zhipu Coding Plan, Tavily, TinyFish, DeepSeek, Firecrawl | Discovers pages and excerpts |
|
|
192
|
+
| Page fetching | Jina, Firecrawl, Zhipu page reading, Tavily, TinyFish, DeepSeek | Reads a known URL as clean text |
|
|
193
|
+
| Vertical retrieval (experimental) | AnySearch, SciVerse | Domain and academic retrieval; SciVerse runs only when named explicitly |
|
|
194
|
+
| Intent routing (optional) | Jev (TypeSafe) | Scores candidate channels and routes |
|
|
195
|
+
|
|
196
|
+
## Supported AI tools
|
|
197
|
+
|
|
198
|
+
Skills can be installed for 17 targets: Codex, Claude Code, Cursor, OpenCode, GitHub Copilot, Gemini CLI, Cline, Roo Code, Kiro, Qoder, CodeBuddy, Factory Droid, Pi Agent, Kilo CLI, Antigravity, Windsurf and Hermes Agent. Install and sign in to the Agent applications yourself.
|
|
199
|
+
|
|
200
|
+
## Common commands
|
|
201
|
+
|
|
202
|
+
| Command | What it does |
|
|
203
|
+
| --- | --- |
|
|
204
|
+
| `smart-search search "question" --format markdown` | Ordinary search: one channel, results and sources |
|
|
205
|
+
| `smart-search fetch "https://…" --format markdown` | Reads a page as clean text |
|
|
206
|
+
| `smart-search research "question" --budget standard` | Live research: rounds of retrieval and reading, with evidence judgments |
|
|
207
|
+
| `smart-search deep "question" --budget standard` | Writes a research plan only; no network, no cost |
|
|
208
|
+
| `smart-search route "question"` | Previews routing locally without calling providers; `--remote` calls Jev (may be billed) |
|
|
209
|
+
| `smart-search doctor --format json` | Probes every configured provider with real requests |
|
|
210
|
+
| `smart-search setup` / `smart-search ui` | Terminal wizard / temporary local configuration page |
|
|
211
|
+
| `smart-search skills status` / `skills update` | Checks or syncs installed Skills |
|
|
212
|
+
|
|
213
|
+
All commands: [Complete command reference](https://github.com/konbakuyomu/smartsearch/blob/main/docs/guide/en/cli-reference.md).
|
|
214
|
+
|
|
215
|
+
## FAQ
|
|
216
|
+
|
|
217
|
+
<details>
|
|
218
|
+
<summary><strong>How many providers do I need?</strong></summary>
|
|
219
|
+
|
|
220
|
+
One working retrieval channel is enough to search. The App's **Check configuration** and Overview ask for main search, documentation search and page fetching; with all three, routing has enough channels to choose from and page reading has a dedicated fetcher.
|
|
221
|
+
|
|
222
|
+
</details>
|
|
223
|
+
|
|
224
|
+
<details>
|
|
225
|
+
<summary><strong>Does it work without a TypeSafe key?</strong></summary>
|
|
226
|
+
|
|
227
|
+
Yes. Jev is optional. Without a key, channels are chosen by local capability rules and the result is marked as degraded; you can also pick **Local routing** under **Intent routing**.
|
|
228
|
+
|
|
229
|
+
</details>
|
|
230
|
+
|
|
231
|
+
<details>
|
|
232
|
+
<summary><strong>Does it work with the App closed?</strong></summary>
|
|
233
|
+
|
|
234
|
+
Yes. Searches run in the independent CLI, which your AI calls as its Skill describes. If tasks the App started are still running when you close it, the App asks whether to **Continue in background** or **Cancel tasks and quit**; cancelling affects only the App's own tasks, never an external CLI.
|
|
235
|
+
|
|
236
|
+
</details>
|
|
237
|
+
|
|
238
|
+
<details>
|
|
239
|
+
<summary><strong>Does it cost money?</strong></summary>
|
|
240
|
+
|
|
241
|
+
Smart Search itself is free and open source. Provider tests, searches, `doctor` and `route --remote` call the services you configured and may use their quota. `route` without `--remote`, `deep` and opening the App never make paid requests.
|
|
242
|
+
|
|
243
|
+
</details>
|
|
244
|
+
|
|
245
|
+
<details>
|
|
246
|
+
<summary><strong>How is this different from an AI tool's built-in web search?</strong></summary>
|
|
247
|
+
|
|
248
|
+
You choose the providers and can configure several; Jev picks a channel for each question; and the pages behind an answer can be fetched and checked in full. The Skill tells the AI to use Smart Search alone for web research within a task instead of mixing routes.
|
|
249
|
+
|
|
250
|
+
</details>
|
|
251
|
+
|
|
252
|
+
<details>
|
|
253
|
+
<summary><strong>Windows shows SmartScreen; macOS cannot verify the developer</strong></summary>
|
|
254
|
+
|
|
255
|
+
Windows `-signed.exe` packages use a self-signed certificate and may still trigger SmartScreen; see [Windows signatures and first launch](docs/windows-signing.md). macOS packages use ad-hoc bundle integrity signing and separate Sparkle EdDSA update signatures, without Developer ID signing or notarization.
|
|
256
|
+
|
|
257
|
+
</details>
|
|
258
|
+
|
|
259
|
+
<details>
|
|
260
|
+
<summary><strong>How do the App and the CLI update?</strong></summary>
|
|
261
|
+
|
|
262
|
+
Separately. The App checks under **Settings & about → App Updates** and downloads only after you confirm. Update the CLI from **Overview → 1. Prepare local environment**, or run `npm install -g @konbakuyomu/smart-search@latest`. After an upgrade the CLI maintains connected Skills and preserves personal edits.
|
|
263
|
+
|
|
264
|
+
</details>
|
|
265
|
+
|
|
266
|
+
## Known limits
|
|
267
|
+
|
|
268
|
+
- A search hit is a lead. Read the source before relying on an important claim.
|
|
269
|
+
- Ordinary search does not assess evidence; use live research, or have your AI read the original page, when a claim needs checking.
|
|
270
|
+
- Jev's thresholds (0.5 for routing, 0.75 for sufficient evidence) are a starting policy and need calibrating against real questions.
|
|
271
|
+
- Availability, quota and result quality depend on each provider.
|
|
272
|
+
- Existing Inno installations need a one-time full migration. Final GUI and old-install migration acceptance is recorded separately from automated build and upgrade checks.
|
|
273
|
+
|
|
274
|
+
## Documentation
|
|
275
|
+
|
|
276
|
+
| Topic | Link |
|
|
277
|
+
| --- | --- |
|
|
278
|
+
| Set up and use the App | [docs/guide/en/app.md](https://github.com/konbakuyomu/smartsearch/blob/main/docs/guide/en/app.md) |
|
|
279
|
+
| CLI guide | [docs/guide/en/cli.md](https://github.com/konbakuyomu/smartsearch/blob/main/docs/guide/en/cli.md) |
|
|
280
|
+
| Providers and configuration | [docs/guide/en/configuration.md](https://github.com/konbakuyomu/smartsearch/blob/main/docs/guide/en/configuration.md) |
|
|
281
|
+
| Search, research and evidence | [docs/guide/en/research.md](https://github.com/konbakuyomu/smartsearch/blob/main/docs/guide/en/research.md) |
|
|
282
|
+
| Jev multi-channel routing | [docs/jev-routing.md](https://github.com/konbakuyomu/smartsearch/blob/main/docs/jev-routing.md) |
|
|
283
|
+
| Troubleshooting | [docs/guide/en/troubleshooting.md](https://github.com/konbakuyomu/smartsearch/blob/main/docs/guide/en/troubleshooting.md) |
|
|
284
|
+
| Development and releases | [docs/guide/en/development.md](https://github.com/konbakuyomu/smartsearch/blob/main/docs/guide/en/development.md) |
|
|
285
|
+
|
|
286
|
+
## Acknowledgements
|
|
287
|
+
|
|
288
|
+
Thanks to the [LINUX DO](https://linux.do/) community for its feedback and discussion.
|
|
289
|
+
|
|
290
|
+
[](https://www.star-history.com/#konbakuyomu/smartsearch&Date)
|
|
291
|
+
|
|
292
|
+
## License
|
|
293
|
+
|
|
294
|
+
Licensed under [MIT](https://github.com/konbakuyomu/smartsearch/blob/main/LICENSE). Clawd in the animations is an unofficial fan depiction of Anthropic's mascot, not affiliated with or endorsed by Anthropic.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
../../../bin/smart-search,sha256=3Si0-mMx4MCMjCfKNF0xeBuTy8aXkDufWgG0psj8uJs,205
|
|
2
|
-
smart_search-0.1.
|
|
3
|
-
smart_search-0.1.
|
|
4
|
-
smart_search-0.1.
|
|
5
|
-
smart_search-0.1.
|
|
6
|
-
smart_search-0.1.
|
|
7
|
-
smart_search-0.1.
|
|
8
|
-
smart_search-0.1.
|
|
9
|
-
smart_search-0.1.
|
|
10
|
-
smart_search-0.1.
|
|
2
|
+
smart_search-0.1.31.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
3
|
+
smart_search-0.1.31.dist-info/METADATA,sha256=D6orY0Z46H1tNCkaDxUFKhYjlRN9wE3tI9EwyUej7RI,19626
|
|
4
|
+
smart_search-0.1.31.dist-info/RECORD,,
|
|
5
|
+
smart_search-0.1.31.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
smart_search-0.1.31.dist-info/WHEEL,sha256=a-udL2m4V_6Yn8b-uKzWb12RjRxwwMo6ohYFM24tpaY,91
|
|
7
|
+
smart_search-0.1.31.dist-info/direct_url.json,sha256=lFRY6ow2tINE_t60B1wCO0WZXfSjjC9GUsp1Y2OjrAY,75
|
|
8
|
+
smart_search-0.1.31.dist-info/entry_points.txt,sha256=fiHguhz7hQ6ybeepO0OPpZm19XCi2J-Bkigf8DGBuKM,55
|
|
9
|
+
smart_search-0.1.31.dist-info/licenses/LICENSE,sha256=o_zbH827gkTiZfsNLJGQn1z8Z4eLAvb8heFaSqSGVv8,1067
|
|
10
|
+
smart_search-0.1.31.dist-info/top_level.txt,sha256=mBPprcb_b3tBApeRa2nlLaGj3UVNxXCdyz6QQvDzJpc,13
|
|
11
11
|
smart_search/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
|
|
12
12
|
smart_search/__pycache__/__init__.cpython-313.pyc,,
|
|
13
13
|
smart_search/__pycache__/activity.cpython-313.pyc,,
|
|
@@ -40,14 +40,14 @@ smart_search/__pycache__/ui_metadata.cpython-313.pyc,,
|
|
|
40
40
|
smart_search/__pycache__/ui_server.cpython-313.pyc,,
|
|
41
41
|
smart_search/__pycache__/utils.cpython-313.pyc,,
|
|
42
42
|
smart_search/activity.py,sha256=66yPPAfuaDSF4UTEuRRDefp2m1-l8eVnr8K5_ShoQCU,13368
|
|
43
|
-
smart_search/assets/i18n/messages.json,sha256=
|
|
43
|
+
smart_search/assets/i18n/messages.json,sha256=RumiIIb_AqRPRyNR0SXVVDQA5WmcJl_qp4y6WCO0WZw,638870
|
|
44
44
|
smart_search/assets/skills/smart-search-cli/SKILL.md,sha256=465CCVKGCHfiJLDD9LlYbIhlbxWucwLiNVVAcRRlEf8,8561
|
|
45
45
|
smart_search/assets/skills/smart-search-cli/agents/openai.yaml,sha256=4S1VuEER7Puw9JvxDsyI__Tdrr1j2h6aF26yHho_x8E,162
|
|
46
46
|
smart_search/assets/skills/smart-search-cli/references/cli-contract.md,sha256=mZyQRioJ4_ySkxcl9WQBMGXk5fcWOEMBMnXXUGnRoEA,1843
|
|
47
47
|
smart_search/assets/skills/smart-search-cli/references/cli-core.md,sha256=7Wf9csFgjRfQmk7EyssAZBn7BWbw6yNQcu_1-T9LJXA,15029
|
|
48
48
|
smart_search/assets/skills/smart-search-cli/references/command-patterns.md,sha256=PvMBXjDg0acGf-9uZAyK3p_Ox_kI5aQuhae12WsqRj0,12534
|
|
49
|
-
smart_search/assets/skills/smart-search-cli/references/deep-research-mode.md,sha256=
|
|
50
|
-
smart_search/assets/skills/smart-search-cli/references/provider-routing.md,sha256=
|
|
49
|
+
smart_search/assets/skills/smart-search-cli/references/deep-research-mode.md,sha256=Yt1qHQnbpKgA6P5PTXwv4qFDZTJn7MqarZvCqlmCg-0,14485
|
|
50
|
+
smart_search/assets/skills/smart-search-cli/references/provider-routing.md,sha256=BsjrSVLNtG5h77lUXUTPdnR35GJZU79keIzOeuYclSI,27548
|
|
51
51
|
smart_search/assets/skills/smart-search-cli/references/regression-release.md,sha256=SkOUwxpPm_HeBGlpUil5ybTBiwa-wAzt-765zw9kYqk,5673
|
|
52
52
|
smart_search/assets/skills/smart-search-cli/references/setup-config.md,sha256=Bi-yqcoGb0T1SV5tzJLwW9gW_ygx00LPTKXHAHM2t7c,18213
|
|
53
53
|
smart_search/assets/ui/index.html,sha256=i3se6JX5iHnGXIEXhHvLKZgPzNh8JMJAeRqfIlqac3U,63800
|
|
@@ -62,9 +62,9 @@ smart_search/desktop_skills.py,sha256=IAJyn83Zops05XD2MyYAHP93JYzBz9ze1wGqvWEUB4
|
|
|
62
62
|
smart_search/desktop_updates.py,sha256=Kn4Q5ZO_axpqPhDvlZ4dnilhVhzDXxq0ONEePAsemR4,7587
|
|
63
63
|
smart_search/desktop_worker.py,sha256=Nkw_FMNNejrt8oJ6aNUmziSd7vVu_Xy9ijvfgstdawQ,5489
|
|
64
64
|
smart_search/i18n.py,sha256=-mDfpi-P4AQPCUpnuI--W9c1AFurN5QPhAGYMXB02kU,4869
|
|
65
|
-
smart_search/intent_router.py,sha256=
|
|
65
|
+
smart_search/intent_router.py,sha256=UkFnv4R2xC6bF6QEn_lqSYqYOoWgoT_mXeG4CNcSJ3M,7931
|
|
66
66
|
smart_search/jev.py,sha256=C80OBG2RMOJCMtogltVDHUg0xoCHO_8uIT69736myq8,27169
|
|
67
|
-
smart_search/jev_search.py,sha256=
|
|
67
|
+
smart_search/jev_search.py,sha256=oW_hvKVBAd10V3e-Hbhd1i133feAQ4_x64NwgO2W3w4,49256
|
|
68
68
|
smart_search/logger.py,sha256=pwfjP50ywoTRirH4H7qYTNgt4TgoMhZlX2pb8dNvO9k,1203
|
|
69
69
|
smart_search/provider_descriptions.py,sha256=Y5I1vOz-trKoVfXZ3bQLVfA1aHIRAJ4maN42ya-Zqds,10234
|
|
70
70
|
smart_search/provider_errors.py,sha256=IXyLo6Kc4WSP7faH5mMTQyAIVKR0BR0680qd0ZApKUo,5384
|
|
@@ -101,7 +101,7 @@ smart_search/skill_installer.py,sha256=CvM9GQShaTR8ttNhilx8Up0vVsHZfsnYD5uM7wZrz
|
|
|
101
101
|
smart_search/skill_maintenance.py,sha256=2s2-1ZEEjRg2MfRKlaw6Y51OO86kOf9axl7fW6KMv0g,8818
|
|
102
102
|
smart_search/sources.py,sha256=WvyRXqX_IdbDPpsqcSbulipxNtZvQbWv1MsZ2Ud5bTY,14376
|
|
103
103
|
smart_search/state_files.py,sha256=K02dlR3Xuj2vIkRiEdrFr3OSiEsPxN5_HSo4NTmz0sc,2063
|
|
104
|
-
smart_search/ui_api.py,sha256=
|
|
104
|
+
smart_search/ui_api.py,sha256=p73zozirtzu7u8AQS4uWTCbsbomkbkxCExs_mE1_HW4,10043
|
|
105
105
|
smart_search/ui_metadata.py,sha256=6WO8WT-P9bwkmgi2i4XXXUqSL4xUijd4gJnImS_cka8,51028
|
|
106
106
|
smart_search/ui_server.py,sha256=pcAPiYWmJXTmX1Xpy12v97JhkbRx-nJ3zRYefGW1Tc0,20508
|
|
107
107
|
smart_search/utils.py,sha256=HVpxtyveEHcpGSkIObf97GbCJVRd68f1X6ecQeH14Ks,8992
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@konbakuyomu/smart-search",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.31",
|
|
4
4
|
"description": "CLI-first multi-source web research with xAI/OpenAI-compatible search, Exa, Context7, Zhipu, Tavily, Firecrawl, and Deep Research planning.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/konbakuyomu/smartsearch#readme",
|
|
@@ -39,11 +39,11 @@
|
|
|
39
39
|
},
|
|
40
40
|
"smartSearchBinary": true,
|
|
41
41
|
"optionalDependencies": {
|
|
42
|
-
"@konbakuyomu/smart-search-darwin-x64": "0.1.
|
|
43
|
-
"@konbakuyomu/smart-search-darwin-arm64": "0.1.
|
|
44
|
-
"@konbakuyomu/smart-search-win32-x64": "0.1.
|
|
45
|
-
"@konbakuyomu/smart-search-win32-arm64": "0.1.
|
|
46
|
-
"@konbakuyomu/smart-search-linux-x64": "0.1.
|
|
47
|
-
"@konbakuyomu/smart-search-linux-arm64": "0.1.
|
|
42
|
+
"@konbakuyomu/smart-search-darwin-x64": "0.1.31",
|
|
43
|
+
"@konbakuyomu/smart-search-darwin-arm64": "0.1.31",
|
|
44
|
+
"@konbakuyomu/smart-search-win32-x64": "0.1.31",
|
|
45
|
+
"@konbakuyomu/smart-search-win32-arm64": "0.1.31",
|
|
46
|
+
"@konbakuyomu/smart-search-linux-x64": "0.1.31",
|
|
47
|
+
"@konbakuyomu/smart-search-linux-arm64": "0.1.31"
|
|
48
48
|
}
|
|
49
49
|
}
|
|
Binary file
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: smart-search
|
|
3
|
-
Version: 0.1.30
|
|
4
|
-
Summary: CLI-first multi-source web research with xAI/OpenAI-compatible search, Exa, Context7, Zhipu, Tavily, Firecrawl, and Deep Research planning.
|
|
5
|
-
Requires-Python: >=3.10
|
|
6
|
-
Description-Content-Type: text/markdown
|
|
7
|
-
License-File: LICENSE
|
|
8
|
-
Requires-Dist: httpx[socks]>=0.28.0
|
|
9
|
-
Requires-Dist: InquirerPy<0.4,>=0.3.4
|
|
10
|
-
Requires-Dist: pyfiglet<2,>=1.0
|
|
11
|
-
Requires-Dist: rich<16,>=13.9
|
|
12
|
-
Requires-Dist: tenacity>=8.0.0
|
|
13
|
-
Provides-Extra: dev
|
|
14
|
-
Requires-Dist: PyYAML<7,>=6.0; extra == "dev"
|
|
15
|
-
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
16
|
-
Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
|
|
17
|
-
Dynamic: license-file
|
|
18
|
-
|
|
19
|
-
<div align="center">
|
|
20
|
-
|
|
21
|
-
<img src="https://raw.githubusercontent.com/konbakuyomu/smartsearch/main/assets/branding/smart-search.png" alt="Smart Search" width="112">
|
|
22
|
-
|
|
23
|
-
# Smart Search
|
|
24
|
-
|
|
25
|
-
**Search the web, read sources, and bring current information into your AI conversations.**
|
|
26
|
-
|
|
27
|
-
[简体中文](README.zh-CN.md) | English
|
|
28
|
-
|
|
29
|
-
[](https://www.npmjs.com/package/@konbakuyomu/smart-search)
|
|
30
|
-
[](https://github.com/konbakuyomu/smartsearch/actions/workflows/ci.yml)
|
|
31
|
-
[](https://github.com/konbakuyomu/smartsearch/blob/main/LICENSE)
|
|
32
|
-
|
|
33
|
-
[Download the App](https://github.com/konbakuyomu/smartsearch/releases/latest) · [User guide](https://github.com/konbakuyomu/smartsearch/tree/main/docs/guide) · [Report a problem](https://github.com/konbakuyomu/smartsearch/issues)
|
|
34
|
-
|
|
35
|
-
</div>
|
|
36
|
-
|
|
37
|
-
## What is Smart Search?
|
|
38
|
-
|
|
39
|
-
Smart Search connects search and page-reading services to AI tools such as Codex and Claude Code. Use the desktop App to configure your services and run searches. Once connected, you can also ask your AI to use Smart Search directly.
|
|
40
|
-
|
|
41
|
-
You choose the providers and supply their API keys. The App manages configuration; the independent command-line tool runs AI requests even after you close the App.
|
|
42
|
-
|
|
43
|
-
## When is it useful?
|
|
44
|
-
|
|
45
|
-
- **Working with a library or API:** find current documentation and read the relevant pages.
|
|
46
|
-
- **Following recent changes:** look up announcements or news that may be newer than a model's knowledge.
|
|
47
|
-
- **Checking a claim:** find its source, read the page, and compare it with other evidence.
|
|
48
|
-
- **Researching a larger question:** collect sources, inspect gaps, and build a cited answer.
|
|
49
|
-
|
|
50
|
-
These tasks need information from the web and a way to trace it back to its source. Smart Search puts search, page reading, and provider configuration in one place. A search hit is a starting point; read the source before relying on an important claim.
|
|
51
|
-
|
|
52
|
-
## Get started in the App
|
|
53
|
-
|
|
54
|
-
1. **Download and open Smart Search.** Choose the package for your system from [Releases](https://github.com/konbakuyomu/smartsearch/releases/latest). The first step on Overview detects npm or accepts a manual npm path, then installs and connects the independent CLI.
|
|
55
|
-
2. **Open Providers.** Add services for the three required jobs: answering searches, finding documentation, and reading pages. The page shows what is still missing and where to obtain each key. Check or test the settings, then save them.
|
|
56
|
-
3. **Open Update Skills.** Once the CLI is connected, read its Skills, select your Agents, and confirm backup and sync. Codex, Claude Code, Cursor and 14 other targets are supported. Install and sign in to the Agent applications yourself.
|
|
57
|
-
4. **Verify the Agent connection.** In a new AI conversation, use the independent CLI invocation supplied by the Skill. First check that the command runs; then try a search.
|
|
58
|
-
|
|
59
|
-
Provider tests and searches may use your providers' paid quota. Opening the App or checking the local environment does not run a paid search.
|
|
60
|
-
|
|
61
|
-
Version 0.1.24 combines the refreshed native interface with Velopack on Windows and Sparkle on macOS, and publishes the first official framework update feeds. The current development version manages App and CLI updates independently; the CLI maintains connected Skills while preserving personal edits. Existing Inno installations require a one-time full migration. Windows `-signed.exe` packages use a **self-signed certificate** and may still trigger SmartScreen; see [Windows signatures and first launch](docs/windows-signing.md). macOS uses ad-hoc bundle integrity signing and separate Sparkle EdDSA update signatures, without Developer ID signing or notarization. Final GUI and old-install migration acceptance remains separate from automated build and upgrade checks.
|
|
62
|
-
|
|
63
|
-
[App setup, supported platforms, and troubleshooting →](https://github.com/konbakuyomu/smartsearch/blob/main/docs/guide/en/app.md)
|
|
64
|
-
|
|
65
|
-
## Everyday use
|
|
66
|
-
|
|
67
|
-
**In the App:** open Search & research, enter a question or URL, and review the result and its sources. Activity shows what is running and which provider it used. You can copy or export the result.
|
|
68
|
-
|
|
69
|
-
**In your AI tool:** ask naturally, for example:
|
|
70
|
-
|
|
71
|
-
> Use Smart Search to find the current React documentation for useEffect cleanup. Read the relevant page and include the source.
|
|
72
|
-
|
|
73
|
-
> Use Smart Search to check the claims in this page: https://example.com/article
|
|
74
|
-
|
|
75
|
-
The App can stay closed. Your AI calls the independent CLI using the installed integration instructions.
|
|
76
|
-
|
|
77
|
-
**Language:** the App follows your system by default. Change it in Settings & about → Language. The CLI has its own saved preference and a one-command `--lang en` / `--lang zh` override. These settings change the tool's interface and messages, not the text of a source page.
|
|
78
|
-
|
|
79
|
-
## Prefer the terminal?
|
|
80
|
-
|
|
81
|
-
```sh
|
|
82
|
-
npm install -g @konbakuyomu/smart-search@latest
|
|
83
|
-
smart-search setup
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
The new npm CLI requires Node.js 18+ / npm only. Its platform package includes the Python runtime and does not use a user-installed Python. See the [CLI guide](https://github.com/konbakuyomu/smartsearch/blob/main/docs/guide/en/cli.md) for installation, language settings, commands, and examples.
|
|
87
|
-
For uv source installation and a fixed Python version, see [CLI installation](https://github.com/konbakuyomu/smartsearch/blob/main/docs/guide/en/cli.md#cli-installation).
|
|
88
|
-
|
|
89
|
-
## Need more detail?
|
|
90
|
-
|
|
91
|
-
The [complete guide](https://github.com/konbakuyomu/smartsearch/tree/main/docs/guide) covers all commands and configuration keys, provider choices, research, and troubleshooting. Development and release instructions are there too.
|
|
92
|
-
|
|
93
|
-
Thanks to the [LINUX DO](https://linux.do/) community for its feedback and discussion.
|
|
94
|
-
|
|
95
|
-
[](https://www.star-history.com/#konbakuyomu/smartsearch&Date)
|
|
96
|
-
|
|
97
|
-
Licensed under [MIT](https://github.com/konbakuyomu/smartsearch/blob/main/LICENSE).
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|