@konbakuyomu/smart-search-linux-x64 0.0.0 → 0.1.26
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/LICENSE +21 -0
- package/package.json +18 -3
- package/runtime/smart-search/_internal/base_library.zip +0 -0
- package/runtime/smart-search/_internal/certifi/cacert.pem +3959 -0
- package/runtime/smart-search/_internal/certifi/py.typed +0 -0
- package/runtime/smart-search/_internal/libpython3.13.so.1.0 +0 -0
- package/runtime/smart-search/_internal/prompt_toolkit-3.0.53.dist-info/INSTALLER +1 -0
- package/runtime/smart-search/_internal/prompt_toolkit-3.0.53.dist-info/METADATA +171 -0
- package/runtime/smart-search/_internal/prompt_toolkit-3.0.53.dist-info/RECORD +298 -0
- package/runtime/smart-search/_internal/prompt_toolkit-3.0.53.dist-info/WHEEL +5 -0
- package/runtime/smart-search/_internal/prompt_toolkit-3.0.53.dist-info/licenses/AUTHORS.rst +11 -0
- package/runtime/smart-search/_internal/prompt_toolkit-3.0.53.dist-info/licenses/LICENSE +27 -0
- package/runtime/smart-search/_internal/prompt_toolkit-3.0.53.dist-info/top_level.txt +1 -0
- package/runtime/smart-search/_internal/smart_search/__init__.py +1 -0
- package/runtime/smart-search/_internal/smart_search/activity.py +279 -0
- package/runtime/smart-search/_internal/smart_search/assets/i18n/messages.json +17858 -0
- package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/SKILL.md +69 -0
- package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/agents/openai.yaml +3 -0
- package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/cli-contract.md +21 -0
- package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/cli-core.md +99 -0
- package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/command-patterns.md +166 -0
- package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/deep-research-mode.md +204 -0
- package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/provider-routing.md +178 -0
- package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/regression-release.md +46 -0
- package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/setup-config.md +133 -0
- package/runtime/smart-search/_internal/smart_search/assets/ui/index.html +955 -0
- package/runtime/smart-search/_internal/smart_search/cli.py +3651 -0
- package/runtime/smart-search/_internal/smart_search/config.py +1302 -0
- package/runtime/smart-search/_internal/smart_search/desktop_backend.py +709 -0
- package/runtime/smart-search/_internal/smart_search/desktop_catalog.py +166 -0
- package/runtime/smart-search/_internal/smart_search/desktop_cli.py +209 -0
- package/runtime/smart-search/_internal/smart_search/desktop_entry.py +19 -0
- package/runtime/smart-search/_internal/smart_search/desktop_environment.py +629 -0
- package/runtime/smart-search/_internal/smart_search/desktop_skills.py +129 -0
- package/runtime/smart-search/_internal/smart_search/desktop_updates.py +160 -0
- package/runtime/smart-search/_internal/smart_search/desktop_worker.py +117 -0
- package/runtime/smart-search/_internal/smart_search/i18n.py +135 -0
- package/runtime/smart-search/_internal/smart_search/intent_router.py +253 -0
- package/runtime/smart-search/_internal/smart_search/jev.py +473 -0
- package/runtime/smart-search/_internal/smart_search/jev_search.py +719 -0
- package/runtime/smart-search/_internal/smart_search/logger.py +43 -0
- package/runtime/smart-search/_internal/smart_search/provider_descriptions.py +140 -0
- package/runtime/smart-search/_internal/smart_search/provider_errors.py +137 -0
- package/runtime/smart-search/_internal/smart_search/provider_health.py +277 -0
- package/runtime/smart-search/_internal/smart_search/providers/__init__.py +27 -0
- package/runtime/smart-search/_internal/smart_search/providers/anysearch.py +336 -0
- package/runtime/smart-search/_internal/smart_search/providers/base.py +41 -0
- package/runtime/smart-search/_internal/smart_search/providers/context7.py +153 -0
- package/runtime/smart-search/_internal/smart_search/providers/exa.py +191 -0
- package/runtime/smart-search/_internal/smart_search/providers/jina.py +124 -0
- package/runtime/smart-search/_internal/smart_search/providers/openai_compatible.py +977 -0
- package/runtime/smart-search/_internal/smart_search/providers/sciverse.py +351 -0
- package/runtime/smart-search/_internal/smart_search/providers/tinyfish.py +213 -0
- package/runtime/smart-search/_internal/smart_search/providers/xai_responses.py +242 -0
- package/runtime/smart-search/_internal/smart_search/providers/zhipu.py +172 -0
- package/runtime/smart-search/_internal/smart_search/providers/zhipu_mcp.py +287 -0
- package/runtime/smart-search/_internal/smart_search/sciverse_schema.py +437 -0
- package/runtime/smart-search/_internal/smart_search/service.py +4302 -0
- package/runtime/smart-search/_internal/smart_search/skill_installer.py +549 -0
- package/runtime/smart-search/_internal/smart_search/skill_maintenance.py +181 -0
- package/runtime/smart-search/_internal/smart_search/sources.py +429 -0
- package/runtime/smart-search/_internal/smart_search/state_files.py +53 -0
- package/runtime/smart-search/_internal/smart_search/ui_api.py +246 -0
- package/runtime/smart-search/_internal/smart_search/ui_metadata.py +698 -0
- package/runtime/smart-search/_internal/smart_search/ui_server.py +506 -0
- package/runtime/smart-search/_internal/smart_search/utils.py +220 -0
- package/runtime/smart-search/_internal/smart_search-0.1.26.dist-info/INSTALLER +1 -0
- package/runtime/smart-search/_internal/smart_search-0.1.26.dist-info/METADATA +97 -0
- package/runtime/smart-search/_internal/smart_search-0.1.26.dist-info/RECORD +105 -0
- package/runtime/smart-search/_internal/smart_search-0.1.26.dist-info/REQUESTED +0 -0
- package/runtime/smart-search/_internal/smart_search-0.1.26.dist-info/WHEEL +5 -0
- package/runtime/smart-search/_internal/smart_search-0.1.26.dist-info/direct_url.json +1 -0
- package/runtime/smart-search/_internal/smart_search-0.1.26.dist-info/entry_points.txt +2 -0
- package/runtime/smart-search/_internal/smart_search-0.1.26.dist-info/licenses/LICENSE +21 -0
- package/runtime/smart-search/_internal/smart_search-0.1.26.dist-info/top_level.txt +1 -0
- package/runtime/smart-search/_internal/wcwidth/_wcwidth_c.abi3.so +0 -0
- package/runtime/smart-search/_internal/wcwidth/_wcwidth_c.pyi +77 -0
- package/runtime/smart-search/_internal/wcwidth/py.typed +0 -0
- package/runtime/smart-search/package.json +49 -0
- package/runtime/smart-search/smart-search +0 -0
- package/README.md +0 -3
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
from typing import List
|
|
2
|
+
import re
|
|
3
|
+
from .providers.base import SearchResult
|
|
4
|
+
|
|
5
|
+
_URL_PATTERN = re.compile(r'https?://[^\s<>"\'`,。、;:!?》)】\)]+')
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def extract_unique_urls(text: str) -> list[str]:
|
|
9
|
+
seen: set[str] = set()
|
|
10
|
+
urls: list[str] = []
|
|
11
|
+
for m in _URL_PATTERN.finditer(text):
|
|
12
|
+
url = m.group().rstrip('.,;:!?')
|
|
13
|
+
if url not in seen:
|
|
14
|
+
seen.add(url)
|
|
15
|
+
urls.append(url)
|
|
16
|
+
return urls
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def format_extra_sources(tavily_results: list[dict] | None, firecrawl_results: list[dict] | None) -> str:
|
|
20
|
+
sections = []
|
|
21
|
+
idx = 1
|
|
22
|
+
urls = []
|
|
23
|
+
if firecrawl_results:
|
|
24
|
+
lines = ["## Extra Sources [Firecrawl]"]
|
|
25
|
+
for r in firecrawl_results:
|
|
26
|
+
title = r.get("title") or "Untitled"
|
|
27
|
+
url = r.get("url", "")
|
|
28
|
+
if len(url) == 0:
|
|
29
|
+
continue
|
|
30
|
+
if url in urls:
|
|
31
|
+
continue
|
|
32
|
+
urls.append(url)
|
|
33
|
+
desc = r.get("description", "")
|
|
34
|
+
lines.append(f"{idx}. **[{title}]({url})**")
|
|
35
|
+
if desc:
|
|
36
|
+
lines.append(f" {desc}")
|
|
37
|
+
idx += 1
|
|
38
|
+
sections.append("\n".join(lines))
|
|
39
|
+
if tavily_results:
|
|
40
|
+
lines = ["## Extra Sources [Tavily]"]
|
|
41
|
+
for r in tavily_results:
|
|
42
|
+
title = r.get("title") or "Untitled"
|
|
43
|
+
url = r.get("url", "")
|
|
44
|
+
if url in urls:
|
|
45
|
+
continue
|
|
46
|
+
content = r.get("content", "")
|
|
47
|
+
lines.append(f"{idx}. **[{title}]({url})**")
|
|
48
|
+
if content:
|
|
49
|
+
lines.append(f" {content}")
|
|
50
|
+
idx += 1
|
|
51
|
+
sections.append("\n".join(lines))
|
|
52
|
+
return "\n\n".join(sections)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def format_search_results(results: List[SearchResult]) -> str:
|
|
56
|
+
if not results:
|
|
57
|
+
return "No results found."
|
|
58
|
+
|
|
59
|
+
formatted = []
|
|
60
|
+
for i, result in enumerate(results, 1):
|
|
61
|
+
parts = [f"## Result {i}: {result.title}"]
|
|
62
|
+
|
|
63
|
+
if result.url:
|
|
64
|
+
parts.append(f"**URL:** {result.url}")
|
|
65
|
+
|
|
66
|
+
if result.snippet:
|
|
67
|
+
parts.append(f"**Summary:** {result.snippet}")
|
|
68
|
+
|
|
69
|
+
if result.source:
|
|
70
|
+
parts.append(f"**Source:** {result.source}")
|
|
71
|
+
|
|
72
|
+
if result.published_date:
|
|
73
|
+
parts.append(f"**Published:** {result.published_date}")
|
|
74
|
+
|
|
75
|
+
formatted.append("\n".join(parts))
|
|
76
|
+
|
|
77
|
+
return "\n\n---\n\n".join(formatted)
|
|
78
|
+
|
|
79
|
+
fetch_prompt = """
|
|
80
|
+
# Profile: Web Content Fetcher
|
|
81
|
+
|
|
82
|
+
- **Language**: Preserve the original page's language. Do not translate the source text.
|
|
83
|
+
- **Role**: 你是一个专业的网页内容抓取和解析专家,获取指定 URL 的网页内容,并将其转换为与原网页高度一致的结构化 Markdown 文本格式。
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Workflow
|
|
88
|
+
|
|
89
|
+
### 1. URL 验证与内容获取
|
|
90
|
+
- 验证 URL 格式有效性,检查可访问性(处理重定向/超时)
|
|
91
|
+
- **关键**:优先识别页面目录/大纲结构(Table of Contents),作为内容抓取的导航索引
|
|
92
|
+
- 全量获取 HTML 内容,确保不遗漏任何章节或动态加载内容
|
|
93
|
+
|
|
94
|
+
### 2. 智能解析与内容提取
|
|
95
|
+
- **结构优先**:若存在目录/大纲,严格按其层级结构进行内容提取和组织
|
|
96
|
+
- 解析 HTML 文档树,识别所有内容元素:
|
|
97
|
+
- 标题层级(h1-h6)及其嵌套关系
|
|
98
|
+
- 正文段落、文本格式(粗体/斜体/下划线)
|
|
99
|
+
- 列表结构(有序/无序/嵌套)
|
|
100
|
+
- 表格(包含表头/数据行/合并单元格)
|
|
101
|
+
- 代码块(行内代码/多行代码块/语言标识)
|
|
102
|
+
- 引用块、分隔线
|
|
103
|
+
- 图片(src/alt/title 属性)
|
|
104
|
+
- 链接(内部/外部/锚点)
|
|
105
|
+
|
|
106
|
+
### 3. 内容清理与语义保留
|
|
107
|
+
- 移除非内容标签:`<script>`、`<style>`、`<iframe>`、`<noscript>`
|
|
108
|
+
- 过滤干扰元素:广告模块、追踪代码、社交分享按钮
|
|
109
|
+
- **保留语义信息**:图片 alt/title、链接 href/title、代码语言标识
|
|
110
|
+
- 特殊模块标注:导航栏、侧边栏、页脚用特殊标记保留
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Skills
|
|
115
|
+
|
|
116
|
+
### 1. 内容精准提取与还原
|
|
117
|
+
- **如果存在目录或者大纲,则按照目录或者大纲的结构进行提取**
|
|
118
|
+
- **完整保留原始内容结构**,不遗漏任何信息
|
|
119
|
+
- **准确识别并提取**标题、段落、列表、表格、代码块等所有元素
|
|
120
|
+
- **保持原网页的内容层次和逻辑关系**
|
|
121
|
+
- **精确处理特殊字符**,确保无乱码和格式错误
|
|
122
|
+
- **还原文本内容**,包括换行、缩进、空格等细节
|
|
123
|
+
|
|
124
|
+
### 2. 结构化组织与呈现
|
|
125
|
+
- **标题层级**:使用 `#`、`##`、`###` 等还原标题层级
|
|
126
|
+
- **目录结构**:使用列表生成 Table of Contents,带锚点链接
|
|
127
|
+
- **内容分区**:使用 `###` 或代码块(` ```section ``` `)明确划分 Section
|
|
128
|
+
- **嵌套结构**:使用缩进列表或引用块(`>`)保持层次关系
|
|
129
|
+
- **辅助模块**:侧边栏、导航等用特殊代码块(` ```sidebar ``` `、` ```nav ``` `)包裹
|
|
130
|
+
|
|
131
|
+
### 3. 格式转换优化
|
|
132
|
+
- **HTML 转 Markdown**:保持 100% 内容一致性
|
|
133
|
+
- **表格处理**:使用 Markdown 表格语法(`|---|---|`)
|
|
134
|
+
- **代码片段**:用 ` ```语言标识``` ` 包裹,保留原始缩进
|
|
135
|
+
- **图片处理**:转换为 `` 格式,保留所有属性
|
|
136
|
+
- **链接处理**:转换为 `[文本](URL)` 格式,保持完整路径
|
|
137
|
+
- **强调样式**:`<strong>` → `**粗体**`,`<em>` → `*斜体*`
|
|
138
|
+
|
|
139
|
+
### 4. 内容完整性保障
|
|
140
|
+
- **零删减原则**:不删减任何原网页文本内容
|
|
141
|
+
- **元数据保留**:保留时间戳、作者信息、标签等关键信息
|
|
142
|
+
- **多媒体标注**:视频、音频以链接或占位符标注(`[视频: 标题](URL)`)
|
|
143
|
+
- **动态内容处理**:尽可能抓取完整内容
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Rules
|
|
148
|
+
|
|
149
|
+
### 1. 内容一致性原则(核心)
|
|
150
|
+
- ✅ 返回内容必须与原网页内容**完全一致**,不能有信息缺失
|
|
151
|
+
- ✅ 保持原网页的**所有文本、结构和语义信息**
|
|
152
|
+
- ❌ **不进行**内容摘要、精简、改写或总结
|
|
153
|
+
- ✅ 保留原始的**段落划分、换行、空格**等格式细节
|
|
154
|
+
|
|
155
|
+
### 2. 格式转换标准
|
|
156
|
+
| HTML | Markdown | 示例 |
|
|
157
|
+
|------|----------|------|
|
|
158
|
+
| `<h1>`-`<h6>` | `#`-`######` | `# 标题` |
|
|
159
|
+
| `<strong>` | `**粗体**` | **粗体** |
|
|
160
|
+
| `<em>` | `*斜体*` | *斜体* |
|
|
161
|
+
| `<a>` | `[文本](url)` | [链接](url) |
|
|
162
|
+
| `<img>` | `` |  |
|
|
163
|
+
| `<code>` | `` `代码` `` | `code` |
|
|
164
|
+
| `<pre><code>` | ` ```\n代码\n``` ` | 代码块 |
|
|
165
|
+
|
|
166
|
+
### 3. 输出质量要求
|
|
167
|
+
- **元数据头部**:
|
|
168
|
+
```markdown
|
|
169
|
+
---
|
|
170
|
+
source: [原始URL]
|
|
171
|
+
title: [网页标题]
|
|
172
|
+
fetched_at: [抓取时间]
|
|
173
|
+
---
|
|
174
|
+
```
|
|
175
|
+
- **编码标准**:统一使用 UTF-8
|
|
176
|
+
- **可用性**:输出可直接用于文档生成或阅读
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Initialization
|
|
181
|
+
|
|
182
|
+
当接收到 URL 时:
|
|
183
|
+
1. 按 Workflow 执行抓取和处理
|
|
184
|
+
2. 返回完整的结构化 Markdown 文档
|
|
185
|
+
"""
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
url_describe_prompt = (
|
|
189
|
+
"Browse the given URL. Return exactly two sections:\n\n"
|
|
190
|
+
"Title: <page title from the page's own <title> tag or top heading; "
|
|
191
|
+
"if missing/generic, craft one using key terms found in the page>\n\n"
|
|
192
|
+
"Extracts: <copy 2-4 verbatim fragments from the page that best represent "
|
|
193
|
+
"its core content. Each fragment must be the author's original words, "
|
|
194
|
+
"wrapped in quotes, separated by ' | '. "
|
|
195
|
+
"Do NOT paraphrase, rephrase, interpret, or describe. "
|
|
196
|
+
"Do NOT write sentences like 'This page discusses...' or 'The author argues...'. "
|
|
197
|
+
"You are a copy-paste machine.>\n\n"
|
|
198
|
+
"Nothing else."
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
rank_sources_prompt = (
|
|
202
|
+
"Given a user query and a numbered source list, output ONLY the source numbers "
|
|
203
|
+
"reordered by relevance to the query (most relevant first). "
|
|
204
|
+
"Format: space-separated integers on a single line (e.g., 14 12 1 3 5). "
|
|
205
|
+
"Include every number exactly once. Nothing else."
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
search_prompt = """You are a helpful research assistant. Answer the user's question thoroughly using web search results.
|
|
209
|
+
|
|
210
|
+
Guidelines:
|
|
211
|
+
- Infer the user's true intent even when the question is vague. Consider multiple angles.
|
|
212
|
+
- Search broadly first (5+ perspectives), then go deep on the 2-3 most relevant ones.
|
|
213
|
+
- Prioritize authoritative sources: official docs, Wikipedia, academic papers, reputable journalism.
|
|
214
|
+
- Search in English first for breadth, switch to Chinese when the topic demands it.
|
|
215
|
+
- Every factual claim should cite its source. More credible sources strengthen the answer.
|
|
216
|
+
- Lead with the most likely answer, then provide supporting analysis.
|
|
217
|
+
- Define technical terms in plain language. Use real-world analogies for complex concepts.
|
|
218
|
+
- Format output in clean Markdown. Use LaTeX for formulas, code blocks for scripts.
|
|
219
|
+
- Be direct and concise. No filler or unnecessary follow-up questions.
|
|
220
|
+
"""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pip
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: smart-search
|
|
3
|
+
Version: 0.1.26
|
|
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).
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
../../../bin/smart-search,sha256=3Si0-mMx4MCMjCfKNF0xeBuTy8aXkDufWgG0psj8uJs,205
|
|
2
|
+
smart_search-0.1.26.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
3
|
+
smart_search-0.1.26.dist-info/METADATA,sha256=cobSGRGFLNzM7LxTbJk8DPDz00UGNxMoJg6zbJ385Hs,6721
|
|
4
|
+
smart_search-0.1.26.dist-info/RECORD,,
|
|
5
|
+
smart_search-0.1.26.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
smart_search-0.1.26.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
7
|
+
smart_search-0.1.26.dist-info/direct_url.json,sha256=lFRY6ow2tINE_t60B1wCO0WZXfSjjC9GUsp1Y2OjrAY,75
|
|
8
|
+
smart_search-0.1.26.dist-info/entry_points.txt,sha256=fiHguhz7hQ6ybeepO0OPpZm19XCi2J-Bkigf8DGBuKM,55
|
|
9
|
+
smart_search-0.1.26.dist-info/licenses/LICENSE,sha256=o_zbH827gkTiZfsNLJGQn1z8Z4eLAvb8heFaSqSGVv8,1067
|
|
10
|
+
smart_search-0.1.26.dist-info/top_level.txt,sha256=mBPprcb_b3tBApeRa2nlLaGj3UVNxXCdyz6QQvDzJpc,13
|
|
11
|
+
smart_search/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
|
|
12
|
+
smart_search/__pycache__/__init__.cpython-313.pyc,,
|
|
13
|
+
smart_search/__pycache__/activity.cpython-313.pyc,,
|
|
14
|
+
smart_search/__pycache__/cli.cpython-313.pyc,,
|
|
15
|
+
smart_search/__pycache__/config.cpython-313.pyc,,
|
|
16
|
+
smart_search/__pycache__/desktop_backend.cpython-313.pyc,,
|
|
17
|
+
smart_search/__pycache__/desktop_catalog.cpython-313.pyc,,
|
|
18
|
+
smart_search/__pycache__/desktop_cli.cpython-313.pyc,,
|
|
19
|
+
smart_search/__pycache__/desktop_entry.cpython-313.pyc,,
|
|
20
|
+
smart_search/__pycache__/desktop_environment.cpython-313.pyc,,
|
|
21
|
+
smart_search/__pycache__/desktop_skills.cpython-313.pyc,,
|
|
22
|
+
smart_search/__pycache__/desktop_updates.cpython-313.pyc,,
|
|
23
|
+
smart_search/__pycache__/desktop_worker.cpython-313.pyc,,
|
|
24
|
+
smart_search/__pycache__/i18n.cpython-313.pyc,,
|
|
25
|
+
smart_search/__pycache__/intent_router.cpython-313.pyc,,
|
|
26
|
+
smart_search/__pycache__/jev.cpython-313.pyc,,
|
|
27
|
+
smart_search/__pycache__/jev_search.cpython-313.pyc,,
|
|
28
|
+
smart_search/__pycache__/logger.cpython-313.pyc,,
|
|
29
|
+
smart_search/__pycache__/provider_descriptions.cpython-313.pyc,,
|
|
30
|
+
smart_search/__pycache__/provider_errors.cpython-313.pyc,,
|
|
31
|
+
smart_search/__pycache__/provider_health.cpython-313.pyc,,
|
|
32
|
+
smart_search/__pycache__/sciverse_schema.cpython-313.pyc,,
|
|
33
|
+
smart_search/__pycache__/service.cpython-313.pyc,,
|
|
34
|
+
smart_search/__pycache__/skill_installer.cpython-313.pyc,,
|
|
35
|
+
smart_search/__pycache__/skill_maintenance.cpython-313.pyc,,
|
|
36
|
+
smart_search/__pycache__/sources.cpython-313.pyc,,
|
|
37
|
+
smart_search/__pycache__/state_files.cpython-313.pyc,,
|
|
38
|
+
smart_search/__pycache__/ui_api.cpython-313.pyc,,
|
|
39
|
+
smart_search/__pycache__/ui_metadata.cpython-313.pyc,,
|
|
40
|
+
smart_search/__pycache__/ui_server.cpython-313.pyc,,
|
|
41
|
+
smart_search/__pycache__/utils.cpython-313.pyc,,
|
|
42
|
+
smart_search/activity.py,sha256=66yPPAfuaDSF4UTEuRRDefp2m1-l8eVnr8K5_ShoQCU,13368
|
|
43
|
+
smart_search/assets/i18n/messages.json,sha256=eaqIL5t6mqu-gtOHZ_HZXjBpGev6wor5wtGSpsIkC64,630326
|
|
44
|
+
smart_search/assets/skills/smart-search-cli/SKILL.md,sha256=HemRqQPI74IGmQOd60E4VjNyoRj3cid4-8JQUd39tYY,8481
|
|
45
|
+
smart_search/assets/skills/smart-search-cli/agents/openai.yaml,sha256=4S1VuEER7Puw9JvxDsyI__Tdrr1j2h6aF26yHho_x8E,162
|
|
46
|
+
smart_search/assets/skills/smart-search-cli/references/cli-contract.md,sha256=mZyQRioJ4_ySkxcl9WQBMGXk5fcWOEMBMnXXUGnRoEA,1843
|
|
47
|
+
smart_search/assets/skills/smart-search-cli/references/cli-core.md,sha256=hN-ccyYSkgUMnf-4zoqm8bQO41737H4THU1gYUoP9D0,14645
|
|
48
|
+
smart_search/assets/skills/smart-search-cli/references/command-patterns.md,sha256=Y1N7kJ12Z23ZNHy-TkJUEMj9cXR-ut6NZwU5V8ImwHA,12391
|
|
49
|
+
smart_search/assets/skills/smart-search-cli/references/deep-research-mode.md,sha256=i1ZK5yo7ni5LIs79WrNOY75BmTS9G4IIuxxgQ6b6jSM,14398
|
|
50
|
+
smart_search/assets/skills/smart-search-cli/references/provider-routing.md,sha256=o_ZutQLb0ggj53_P596zFZRcEqyRuk3mYd137PRMKSo,25143
|
|
51
|
+
smart_search/assets/skills/smart-search-cli/references/regression-release.md,sha256=SkOUwxpPm_HeBGlpUil5ybTBiwa-wAzt-765zw9kYqk,5673
|
|
52
|
+
smart_search/assets/skills/smart-search-cli/references/setup-config.md,sha256=kiWNSOIvQSsYOCkyfTnWe_jox_Flv37Si5H252Omy2o,17755
|
|
53
|
+
smart_search/assets/ui/index.html,sha256=IR492tBdUhAPRa6t14xZeLwS4OysHRCEdEMA1d42uEY,63788
|
|
54
|
+
smart_search/cli.py,sha256=PTVCv-BP_OP62sH8mosNObV_gBW_gpSq-STuk0lWB9Y,164787
|
|
55
|
+
smart_search/config.py,sha256=5Yn__0qLkmkR5ZOWnst_xDvdnlqN5kkWKB0ltEjrFZ8,55907
|
|
56
|
+
smart_search/desktop_backend.py,sha256=VYFc83YBllSljgbgx9oPPNbQLwGADZGVtN_CF08ShD8,42417
|
|
57
|
+
smart_search/desktop_catalog.py,sha256=VMIsLFAD98Czetwy-ka606QnyUSk0gDBhsfz7k4QDl8,11485
|
|
58
|
+
smart_search/desktop_cli.py,sha256=dpXLwf6b9Dgw9lKPTDZpKH1Z85OpIgrYyNJM2hXIu68,11069
|
|
59
|
+
smart_search/desktop_entry.py,sha256=x59vhlGd0iOfbG8z51s1tx_A63g0YtQ74n-PhI2NOuY,623
|
|
60
|
+
smart_search/desktop_environment.py,sha256=kgPvP_2uzMY2Agg5gCIM9InqYSggb32o61l7zTFgjPE,39042
|
|
61
|
+
smart_search/desktop_skills.py,sha256=IAJyn83Zops05XD2MyYAHP93JYzBz9ze1wGqvWEUB4Q,6319
|
|
62
|
+
smart_search/desktop_updates.py,sha256=Kn4Q5ZO_axpqPhDvlZ4dnilhVhzDXxq0ONEePAsemR4,7587
|
|
63
|
+
smart_search/desktop_worker.py,sha256=Nkw_FMNNejrt8oJ6aNUmziSd7vVu_Xy9ijvfgstdawQ,5489
|
|
64
|
+
smart_search/i18n.py,sha256=-mDfpi-P4AQPCUpnuI--W9c1AFurN5QPhAGYMXB02kU,4869
|
|
65
|
+
smart_search/intent_router.py,sha256=bj4DnveNEFj9oIpndOZKRDlyAJwuT5q4dam_dY4cG60,7340
|
|
66
|
+
smart_search/jev.py,sha256=Qa7aS10kHYYrXQtl5Tg4p5eJUBdYqHcYpqBav08z8Go,25749
|
|
67
|
+
smart_search/jev_search.py,sha256=LvZFVuVE1JONNlPTDOJ69HMdkgocqsTfgLOzIffMK18,45791
|
|
68
|
+
smart_search/logger.py,sha256=pwfjP50ywoTRirH4H7qYTNgt4TgoMhZlX2pb8dNvO9k,1203
|
|
69
|
+
smart_search/provider_descriptions.py,sha256=6bdv5HQsZI2noTWBKogFZh40I5CxoWOp0lhTs33GJPU,9026
|
|
70
|
+
smart_search/provider_errors.py,sha256=IXyLo6Kc4WSP7faH5mMTQyAIVKR0BR0680qd0ZApKUo,5384
|
|
71
|
+
smart_search/provider_health.py,sha256=-yIA4vvJAvyVjGLvnjEnXR1OT4cfVp0hrJTIYbKYNwY,11625
|
|
72
|
+
smart_search/providers/__init__.py,sha256=fG_AJ3sgqUmLRvv0YAWK7DRWRBXftcrtm7NeAx4HB7c,878
|
|
73
|
+
smart_search/providers/__pycache__/__init__.cpython-313.pyc,,
|
|
74
|
+
smart_search/providers/__pycache__/anysearch.cpython-313.pyc,,
|
|
75
|
+
smart_search/providers/__pycache__/base.cpython-313.pyc,,
|
|
76
|
+
smart_search/providers/__pycache__/context7.cpython-313.pyc,,
|
|
77
|
+
smart_search/providers/__pycache__/exa.cpython-313.pyc,,
|
|
78
|
+
smart_search/providers/__pycache__/jina.cpython-313.pyc,,
|
|
79
|
+
smart_search/providers/__pycache__/openai_compatible.cpython-313.pyc,,
|
|
80
|
+
smart_search/providers/__pycache__/sciverse.cpython-313.pyc,,
|
|
81
|
+
smart_search/providers/__pycache__/tinyfish.cpython-313.pyc,,
|
|
82
|
+
smart_search/providers/__pycache__/xai_responses.cpython-313.pyc,,
|
|
83
|
+
smart_search/providers/__pycache__/zhipu.cpython-313.pyc,,
|
|
84
|
+
smart_search/providers/__pycache__/zhipu_mcp.cpython-313.pyc,,
|
|
85
|
+
smart_search/providers/anysearch.py,sha256=rtuxnORxV4DsBParAR7YVKIV_06v0QdFOx3dI36jFZI,13640
|
|
86
|
+
smart_search/providers/base.py,sha256=8PQWAWJ3XCmlTKV3_oaPUQ2CSU-BXGULRzKg6n3zt9s,995
|
|
87
|
+
smart_search/providers/context7.py,sha256=zOImhEiKUVg60h9SbYdJRBSUfoVvS-8N6O62sudGs_s,6481
|
|
88
|
+
smart_search/providers/exa.py,sha256=6BLnSxDLM0PKXlkcqRKw49G728yBkRicDzQiJt2vIzo,6875
|
|
89
|
+
smart_search/providers/jina.py,sha256=hz8KAcFSstWT4DIBWKdEhymYjBjUvo_SFeZcwCdPkTs,4048
|
|
90
|
+
smart_search/providers/openai_compatible.py,sha256=CL-zuya3gx8-8_hGn7rTT5vXtubYKfnHe2aC2jzcSI0,41439
|
|
91
|
+
smart_search/providers/sciverse.py,sha256=kxhhkx4K08H7VGf4RWFdnB-dlmeEelDM2OcEwERTr8c,13567
|
|
92
|
+
smart_search/providers/tinyfish.py,sha256=rdEjmPK_dDe-aD5M5sfJM6n2MA_uBuE2NVR6i7lKBqI,8446
|
|
93
|
+
smart_search/providers/xai_responses.py,sha256=3mkh0UuQBzxONT8lWzuwEOISXYHWst_5N5xziEgVngQ,10404
|
|
94
|
+
smart_search/providers/zhipu.py,sha256=PN0_Vc51rDYlxEmz2B1vgSxEt9jXf_RIsRobGp-LBPs,7088
|
|
95
|
+
smart_search/providers/zhipu_mcp.py,sha256=4XgckrHzwSdhUtMlTSvhVxrAA7Fr7QX_4BYWfSHmXUg,10976
|
|
96
|
+
smart_search/sciverse_schema.py,sha256=ml5iDXEpY7cnEMz74BGTo4yxX7UvPOe_i7w4Pi5t1wY,18178
|
|
97
|
+
smart_search/service.py,sha256=8FNCKMzF90wgA23pQC-EI7CK0bKiI1mXN34MUkOK1Tw,185996
|
|
98
|
+
smart_search/skill_installer.py,sha256=CvM9GQShaTR8ttNhilx8Up0vVsHZfsnYD5uM7wZrzBs,21782
|
|
99
|
+
smart_search/skill_maintenance.py,sha256=DSNe1L5URx5vlupb56G5z96oE9hHpgl5wYUmjhkvMGQ,7687
|
|
100
|
+
smart_search/sources.py,sha256=5yHCq8Zi9__zFejbD-nSi5gEcVOtBntrjoFE-RoKGJE,12772
|
|
101
|
+
smart_search/state_files.py,sha256=K02dlR3Xuj2vIkRiEdrFr3OSiEsPxN5_HSo4NTmz0sc,2063
|
|
102
|
+
smart_search/ui_api.py,sha256=x3ULS415MPjZ96iZSOeNK4npzOLJ6GK_DymYi6_tPgA,10027
|
|
103
|
+
smart_search/ui_metadata.py,sha256=k0So6BzoVGPaXREHFeXJsYjlqhPZYX9QL5XHjJY0pGk,49151
|
|
104
|
+
smart_search/ui_server.py,sha256=WI7cqihwvTPJHKSm2AJC_QuIPvBs09u72uAQwUkcimM,18559
|
|
105
|
+
smart_search/utils.py,sha256=mVNdsxgIMYg32guIsh0yoFZ0pX3suQfmZVdvFmWvlQQ,8551
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"dir_info": {}, "url": "file:///home/runner/work/smartsearch/smartsearch"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 GuDaStudio
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
smart_search
|
|
Binary file
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# pylint: disable=missing-module-docstring,missing-function-docstring
|
|
2
|
+
# pylint: disable=unused-argument,redefined-outer-name
|
|
3
|
+
|
|
4
|
+
from typing import Union, Literal, Iterator, Optional, Sequence
|
|
5
|
+
|
|
6
|
+
TermProgram = Union[bool, str]
|
|
7
|
+
ControlCodes = Literal['parse', 'strict', 'ignore']
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def wcwidth(wc: str, unicode_version: str = 'auto', ambiguous_width: int = 1) -> int: ...
|
|
11
|
+
def wcswidth(
|
|
12
|
+
pwcs: str,
|
|
13
|
+
n: Optional[int] = None,
|
|
14
|
+
unicode_version: str = 'auto',
|
|
15
|
+
ambiguous_width: int = 1,
|
|
16
|
+
) -> int: ...
|
|
17
|
+
def wcstwidth(
|
|
18
|
+
pwcs: str,
|
|
19
|
+
n: Optional[int] = None,
|
|
20
|
+
unicode_version: str = 'auto',
|
|
21
|
+
ambiguous_width: int = 1,
|
|
22
|
+
term_program: TermProgram = True,
|
|
23
|
+
) -> int: ...
|
|
24
|
+
def width(
|
|
25
|
+
text: str,
|
|
26
|
+
*,
|
|
27
|
+
control_codes: ControlCodes = 'parse',
|
|
28
|
+
tabsize: int = 8,
|
|
29
|
+
ambiguous_width: int = 1,
|
|
30
|
+
term_program: TermProgram = False,
|
|
31
|
+
) -> int: ...
|
|
32
|
+
def ljust(
|
|
33
|
+
text: str,
|
|
34
|
+
dest_width: int,
|
|
35
|
+
fillchar: str = ' ',
|
|
36
|
+
*,
|
|
37
|
+
control_codes: ControlCodes = 'parse',
|
|
38
|
+
ambiguous_width: int = 1,
|
|
39
|
+
term_program: TermProgram = False,
|
|
40
|
+
) -> str: ...
|
|
41
|
+
def rjust(
|
|
42
|
+
text: str,
|
|
43
|
+
dest_width: int,
|
|
44
|
+
fillchar: str = ' ',
|
|
45
|
+
*,
|
|
46
|
+
control_codes: ControlCodes = 'parse',
|
|
47
|
+
ambiguous_width: int = 1,
|
|
48
|
+
term_program: TermProgram = False,
|
|
49
|
+
) -> str: ...
|
|
50
|
+
def center(
|
|
51
|
+
text: str,
|
|
52
|
+
dest_width: int,
|
|
53
|
+
fillchar: str = ' ',
|
|
54
|
+
*,
|
|
55
|
+
control_codes: ControlCodes = 'parse',
|
|
56
|
+
ambiguous_width: int = 1,
|
|
57
|
+
term_program: TermProgram = False,
|
|
58
|
+
) -> str: ...
|
|
59
|
+
def clip(
|
|
60
|
+
text: str,
|
|
61
|
+
start: int,
|
|
62
|
+
end: int,
|
|
63
|
+
*,
|
|
64
|
+
fillchar: str = ' ',
|
|
65
|
+
tabsize: int = 8,
|
|
66
|
+
ambiguous_width: int = 1,
|
|
67
|
+
propagate_sgr: bool = True,
|
|
68
|
+
control_codes: ControlCodes = 'parse',
|
|
69
|
+
term_program: TermProgram = False,
|
|
70
|
+
) -> Optional[str]: ...
|
|
71
|
+
def strip_sequences(text: str) -> str: ...
|
|
72
|
+
def propagate_sgr(lines: Sequence[str]) -> list[str]: ...
|
|
73
|
+
def iter_graphemes(
|
|
74
|
+
unistr: str,
|
|
75
|
+
start: int = 0,
|
|
76
|
+
end: Optional[int] = None,
|
|
77
|
+
) -> Iterator[str]: ...
|
|
File without changes
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@konbakuyomu/smart-search",
|
|
3
|
+
"version": "0.1.26",
|
|
4
|
+
"description": "CLI-first multi-source web research with xAI/OpenAI-compatible search, Exa, Context7, Zhipu, Tavily, Firecrawl, and Deep Research planning.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"homepage": "https://github.com/konbakuyomu/smartsearch#readme",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/konbakuyomu/smartsearch.git"
|
|
10
|
+
},
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/konbakuyomu/smartsearch/issues"
|
|
13
|
+
},
|
|
14
|
+
"bin": {
|
|
15
|
+
"smart-search": "npm/bin/smart-search.js"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"npm/bin/",
|
|
19
|
+
"skills/smart-search-cli/**",
|
|
20
|
+
"README.md",
|
|
21
|
+
"README.zh-CN.md",
|
|
22
|
+
"LICENSE"
|
|
23
|
+
],
|
|
24
|
+
"scripts": {
|
|
25
|
+
"test": "node npm/scripts/test.js",
|
|
26
|
+
"set-version": "node npm/scripts/set-package-version.js",
|
|
27
|
+
"sync:python-version": "node npm/scripts/sync-python-version.js",
|
|
28
|
+
"version": "node npm/scripts/sync-python-version.js && git add pyproject.toml package.json package-lock.json",
|
|
29
|
+
"pack:dry": "npm pack --dry-run",
|
|
30
|
+
"check:skill-parity": "node npm/scripts/check-skill-parity.js",
|
|
31
|
+
"smoke:tarball": "node npm/scripts/smoke-packed-install.js",
|
|
32
|
+
"publish:dry": "npm publish --dry-run --access public"
|
|
33
|
+
},
|
|
34
|
+
"engines": {
|
|
35
|
+
"node": ">=18"
|
|
36
|
+
},
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
40
|
+
"smartSearchBinary": true,
|
|
41
|
+
"optionalDependencies": {
|
|
42
|
+
"@konbakuyomu/smart-search-darwin-x64": "0.1.26",
|
|
43
|
+
"@konbakuyomu/smart-search-darwin-arm64": "0.1.26",
|
|
44
|
+
"@konbakuyomu/smart-search-win32-x64": "0.1.26",
|
|
45
|
+
"@konbakuyomu/smart-search-win32-arm64": "0.1.26",
|
|
46
|
+
"@konbakuyomu/smart-search-linux-x64": "0.1.26",
|
|
47
|
+
"@konbakuyomu/smart-search-linux-arm64": "0.1.26"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
Binary file
|
package/README.md
DELETED