@gmickel/gno 0.3.4 → 0.4.0
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/README.md +194 -53
- package/assets/badges/license.svg +12 -0
- package/assets/badges/npm.svg +13 -0
- package/assets/badges/twitter.svg +22 -0
- package/assets/badges/website.svg +22 -0
- package/package.json +30 -1
- package/src/cli/commands/ask.ts +11 -186
- package/src/cli/commands/models/pull.ts +9 -4
- package/src/cli/commands/serve.ts +19 -0
- package/src/cli/program.ts +28 -0
- package/src/llm/registry.ts +3 -1
- package/src/pipeline/answer.ts +191 -0
- package/src/serve/CLAUDE.md +91 -0
- package/src/serve/bunfig.toml +2 -0
- package/src/serve/context.ts +181 -0
- package/src/serve/index.ts +7 -0
- package/src/serve/public/app.tsx +56 -0
- package/src/serve/public/components/ai-elements/code-block.tsx +176 -0
- package/src/serve/public/components/ai-elements/conversation.tsx +98 -0
- package/src/serve/public/components/ai-elements/inline-citation.tsx +285 -0
- package/src/serve/public/components/ai-elements/loader.tsx +96 -0
- package/src/serve/public/components/ai-elements/message.tsx +443 -0
- package/src/serve/public/components/ai-elements/prompt-input.tsx +1421 -0
- package/src/serve/public/components/ai-elements/sources.tsx +75 -0
- package/src/serve/public/components/ai-elements/suggestion.tsx +51 -0
- package/src/serve/public/components/preset-selector.tsx +403 -0
- package/src/serve/public/components/ui/badge.tsx +46 -0
- package/src/serve/public/components/ui/button-group.tsx +82 -0
- package/src/serve/public/components/ui/button.tsx +62 -0
- package/src/serve/public/components/ui/card.tsx +92 -0
- package/src/serve/public/components/ui/carousel.tsx +244 -0
- package/src/serve/public/components/ui/collapsible.tsx +31 -0
- package/src/serve/public/components/ui/command.tsx +181 -0
- package/src/serve/public/components/ui/dialog.tsx +141 -0
- package/src/serve/public/components/ui/dropdown-menu.tsx +255 -0
- package/src/serve/public/components/ui/hover-card.tsx +42 -0
- package/src/serve/public/components/ui/input-group.tsx +167 -0
- package/src/serve/public/components/ui/input.tsx +21 -0
- package/src/serve/public/components/ui/progress.tsx +28 -0
- package/src/serve/public/components/ui/scroll-area.tsx +56 -0
- package/src/serve/public/components/ui/select.tsx +188 -0
- package/src/serve/public/components/ui/separator.tsx +26 -0
- package/src/serve/public/components/ui/table.tsx +114 -0
- package/src/serve/public/components/ui/textarea.tsx +18 -0
- package/src/serve/public/components/ui/tooltip.tsx +59 -0
- package/src/serve/public/globals.css +226 -0
- package/src/serve/public/hooks/use-api.ts +112 -0
- package/src/serve/public/index.html +13 -0
- package/src/serve/public/pages/Ask.tsx +442 -0
- package/src/serve/public/pages/Browse.tsx +270 -0
- package/src/serve/public/pages/Dashboard.tsx +202 -0
- package/src/serve/public/pages/DocView.tsx +302 -0
- package/src/serve/public/pages/Search.tsx +335 -0
- package/src/serve/routes/api.ts +763 -0
- package/src/serve/server.ts +249 -0
- package/src/store/sqlite/adapter.ts +47 -0
- package/src/store/types.ts +10 -0
package/README.md
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
**Your Local Second Brain** — Index, search, and synthesize your entire digital life.
|
|
4
4
|
|
|
5
|
-
[](https://www.npmjs.com/package/@gmickel/gno)
|
|
6
|
+
[](./LICENSE)
|
|
7
|
+
[](https://gno.sh)
|
|
8
|
+
[](https://twitter.com/gmickel)
|
|
7
9
|
|
|
8
|
-
GNO is a local knowledge engine for privacy-conscious
|
|
10
|
+
GNO is a local knowledge engine for privacy-conscious developers and AI agents. Index your notes, code, PDFs, and Office docs. Get hybrid search (BM25 + vector + reranking) and AI-powered answers—all running 100% on your machine.
|
|
9
11
|
|
|
10
12
|
---
|
|
11
13
|
|
|
@@ -14,8 +16,11 @@ GNO is a local knowledge engine for privacy-conscious individuals and AI agents.
|
|
|
14
16
|
- [Quick Start](#quick-start)
|
|
15
17
|
- [Installation](#installation)
|
|
16
18
|
- [Search Modes](#search-modes)
|
|
19
|
+
- [Web UI](#web-ui)
|
|
20
|
+
- [REST API](#rest-api)
|
|
17
21
|
- [Agent Integration](#agent-integration)
|
|
18
22
|
- [How It Works](#how-it-works)
|
|
23
|
+
- [Features](#features)
|
|
19
24
|
- [Local Models](#local-models)
|
|
20
25
|
- [Architecture](#architecture)
|
|
21
26
|
- [Development](#development)
|
|
@@ -25,21 +30,18 @@ GNO is a local knowledge engine for privacy-conscious individuals and AI agents.
|
|
|
25
30
|
## Quick Start
|
|
26
31
|
|
|
27
32
|
```bash
|
|
28
|
-
#
|
|
29
|
-
gno
|
|
30
|
-
|
|
31
|
-
#
|
|
32
|
-
gno index
|
|
33
|
-
|
|
34
|
-
# Search
|
|
35
|
-
gno query "authentication best practices"
|
|
36
|
-
gno ask "summarize the API discussion" --answer
|
|
33
|
+
gno init ~/notes --name notes # Point at your docs
|
|
34
|
+
gno index # Build search index
|
|
35
|
+
gno query "auth best practices" # Hybrid search
|
|
36
|
+
gno ask "summarize the API" --answer # AI answer with citations
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
---
|
|
40
40
|
|
|
41
41
|
## Installation
|
|
42
42
|
|
|
43
|
+
### Install GNO
|
|
44
|
+
|
|
43
45
|
Requires [Bun](https://bun.sh/) >= 1.0.0.
|
|
44
46
|
|
|
45
47
|
```bash
|
|
@@ -47,59 +49,160 @@ bun install -g @gmickel/gno
|
|
|
47
49
|
```
|
|
48
50
|
|
|
49
51
|
**macOS**: Vector search requires Homebrew SQLite:
|
|
52
|
+
|
|
50
53
|
```bash
|
|
51
54
|
brew install sqlite3
|
|
52
55
|
```
|
|
53
56
|
|
|
54
|
-
Verify:
|
|
57
|
+
Verify everything works:
|
|
58
|
+
|
|
55
59
|
```bash
|
|
56
60
|
gno doctor
|
|
57
61
|
```
|
|
58
62
|
|
|
63
|
+
### Connect to AI Agents
|
|
64
|
+
|
|
65
|
+
#### MCP Server (Claude Desktop, Cursor, Zed, etc.)
|
|
66
|
+
|
|
67
|
+
One command to add GNO to your AI assistant:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
gno mcp install # Claude Desktop (default)
|
|
71
|
+
gno mcp install --target cursor # Cursor
|
|
72
|
+
gno mcp install --target claude-code # Claude Code CLI
|
|
73
|
+
gno mcp install --target zed # Zed
|
|
74
|
+
gno mcp install --target windsurf # Windsurf
|
|
75
|
+
gno mcp install --target codex # OpenAI Codex CLI
|
|
76
|
+
gno mcp install --target opencode # OpenCode
|
|
77
|
+
gno mcp install --target amp # Amp
|
|
78
|
+
gno mcp install --target lmstudio # LM Studio
|
|
79
|
+
gno mcp install --target librechat # LibreChat
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Check status: `gno mcp status`
|
|
83
|
+
|
|
84
|
+
#### Skills (Claude Code, Codex, OpenCode)
|
|
85
|
+
|
|
86
|
+
Skills integrate via CLI—no MCP overhead:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
gno skill install --scope user # User-wide
|
|
90
|
+
gno skill install --target codex # Codex
|
|
91
|
+
gno skill install --target all # Both Claude + Codex
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
> **Full setup guide**: [MCP Integration](https://gno.sh/docs/MCP/) · [CLI Reference](https://gno.sh/docs/CLI/)
|
|
95
|
+
|
|
59
96
|
---
|
|
60
97
|
|
|
61
98
|
## Search Modes
|
|
62
99
|
|
|
63
100
|
| Command | Mode | Best For |
|
|
64
101
|
|:--------|:-----|:---------|
|
|
65
|
-
| `gno search` | BM25 | Exact phrases,
|
|
102
|
+
| `gno search` | BM25 | Exact phrases, code identifiers |
|
|
66
103
|
| `gno vsearch` | Vector | Natural language, concepts |
|
|
67
|
-
| `gno query` | Hybrid |
|
|
68
|
-
| `gno ask` | RAG | Direct answers with citations |
|
|
104
|
+
| `gno query` | Hybrid | Best accuracy (BM25 + vector + reranking) |
|
|
105
|
+
| `gno ask --answer` | RAG | Direct answers with citations |
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
gno search "handleAuth" # Find exact matches
|
|
109
|
+
gno vsearch "error handling patterns" # Semantic similarity
|
|
110
|
+
gno query "database optimization" # Full pipeline
|
|
111
|
+
gno ask "what did we decide" --answer # AI synthesis
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Output formats: `--json`, `--files`, `--csv`, `--md`, `--xml`
|
|
69
115
|
|
|
70
116
|
---
|
|
71
117
|
|
|
72
|
-
##
|
|
118
|
+
## Web UI
|
|
73
119
|
|
|
74
|
-
|
|
120
|
+
Visual dashboard for search, browsing, and AI answers—right in your browser.
|
|
75
121
|
|
|
76
122
|
```bash
|
|
77
|
-
gno
|
|
78
|
-
gno
|
|
79
|
-
gno skill install --target all # Both
|
|
123
|
+
gno serve # Start on port 3000
|
|
124
|
+
gno serve --port 8080 # Custom port
|
|
80
125
|
```
|
|
81
126
|
|
|
82
|
-
|
|
127
|
+
Open `http://localhost:3000` to:
|
|
128
|
+
|
|
129
|
+
- **Search** — BM25, vector, or hybrid modes with visual results
|
|
130
|
+
- **Browse** — Paginated document list, filter by collection
|
|
131
|
+
- **Ask** — AI-powered Q&A with citations
|
|
132
|
+
- **Switch presets** — Change models live without restart
|
|
133
|
+
|
|
134
|
+
Everything runs locally. No cloud, no accounts, no data leaving your machine.
|
|
135
|
+
|
|
136
|
+
> **Detailed docs**: [Web UI Guide](https://gno.sh/docs/WEB-UI/)
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## REST API
|
|
83
141
|
|
|
84
|
-
|
|
142
|
+
Programmatic access to all GNO features via HTTP.
|
|
85
143
|
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
|
|
144
|
+
```bash
|
|
145
|
+
# Hybrid search
|
|
146
|
+
curl -X POST http://localhost:3000/api/query \
|
|
147
|
+
-H "Content-Type: application/json" \
|
|
148
|
+
-d '{"query": "authentication patterns", "limit": 10}'
|
|
149
|
+
|
|
150
|
+
# AI answer
|
|
151
|
+
curl -X POST http://localhost:3000/api/ask \
|
|
152
|
+
-H "Content-Type: application/json" \
|
|
153
|
+
-d '{"query": "What is our deployment process?"}'
|
|
154
|
+
|
|
155
|
+
# Index status
|
|
156
|
+
curl http://localhost:3000/api/status
|
|
92
157
|
```
|
|
93
158
|
|
|
94
|
-
|
|
159
|
+
| Endpoint | Method | Description |
|
|
160
|
+
|:---------|:-------|:------------|
|
|
161
|
+
| `/api/query` | POST | Hybrid search (recommended) |
|
|
162
|
+
| `/api/search` | POST | BM25 keyword search |
|
|
163
|
+
| `/api/ask` | POST | AI-powered Q&A |
|
|
164
|
+
| `/api/docs` | GET | List documents |
|
|
165
|
+
| `/api/doc` | GET | Get document content |
|
|
166
|
+
| `/api/status` | GET | Index statistics |
|
|
167
|
+
| `/api/presets` | GET/POST | Model preset management |
|
|
168
|
+
| `/api/models/pull` | POST | Download models |
|
|
169
|
+
| `/api/models/status` | GET | Download progress |
|
|
170
|
+
|
|
171
|
+
No authentication. No rate limits. Build custom tools, automate workflows, integrate with any language.
|
|
172
|
+
|
|
173
|
+
> **Full reference**: [API Documentation](https://gno.sh/docs/API/)
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Agent Integration
|
|
178
|
+
|
|
179
|
+
### MCP Server
|
|
180
|
+
|
|
181
|
+
GNO exposes 6 tools via [Model Context Protocol](https://modelcontextprotocol.io):
|
|
182
|
+
|
|
183
|
+
| Tool | Description |
|
|
184
|
+
|:-----|:------------|
|
|
185
|
+
| `gno_search` | BM25 keyword search |
|
|
186
|
+
| `gno_vsearch` | Vector semantic search |
|
|
187
|
+
| `gno_query` | Hybrid search (recommended) |
|
|
188
|
+
| `gno_get` | Retrieve document by ID |
|
|
189
|
+
| `gno_multi_get` | Batch document retrieval |
|
|
190
|
+
| `gno_status` | Index health check |
|
|
95
191
|
|
|
96
|
-
|
|
192
|
+
**Design**: MCP tools are retrieval-only. Your AI assistant (Claude, GPT-4) synthesizes answers from retrieved context—best retrieval (GNO) + best reasoning (your LLM).
|
|
193
|
+
|
|
194
|
+
### Skills
|
|
195
|
+
|
|
196
|
+
Skills add GNO search to Claude Code/Codex without MCP protocol overhead:
|
|
97
197
|
|
|
98
198
|
```bash
|
|
99
|
-
gno
|
|
100
|
-
gno search "API design" --files # File paths only
|
|
199
|
+
gno skill install --scope user
|
|
101
200
|
```
|
|
102
201
|
|
|
202
|
+
Then ask your agent: *"Search my notes for the auth discussion"*
|
|
203
|
+
|
|
204
|
+
> **Detailed docs**: [MCP Integration](https://gno.sh/docs/MCP/) · [Use Cases](https://gno.sh/docs/USE-CASES/)
|
|
205
|
+
|
|
103
206
|
---
|
|
104
207
|
|
|
105
208
|
## How It Works
|
|
@@ -110,30 +213,46 @@ graph TD
|
|
|
110
213
|
B --> C{Lexical Variants}
|
|
111
214
|
B --> D{Semantic Variants}
|
|
112
215
|
B --> E{HyDE Passage}
|
|
113
|
-
A --> F[Original Query]
|
|
114
216
|
|
|
115
217
|
C --> G(BM25 Search)
|
|
116
218
|
D --> H(Vector Search)
|
|
117
219
|
E --> H
|
|
118
|
-
|
|
119
|
-
|
|
220
|
+
A --> G
|
|
221
|
+
A --> H
|
|
120
222
|
|
|
121
|
-
G --> I(Ranked
|
|
122
|
-
H --> J(Ranked
|
|
223
|
+
G --> I(Ranked Results)
|
|
224
|
+
H --> J(Ranked Results)
|
|
123
225
|
I --> K{RRF Fusion}
|
|
124
226
|
J --> K
|
|
125
227
|
|
|
126
|
-
K --> L(Top Candidates)
|
|
228
|
+
K --> L(Top 20 Candidates)
|
|
127
229
|
L --> M(Cross-Encoder Rerank)
|
|
128
230
|
M --> N[Final Results]
|
|
129
231
|
```
|
|
130
232
|
|
|
131
|
-
1. **Query Expansion** — LLM generates lexical variants, semantic
|
|
132
|
-
2. **Parallel Retrieval** — BM25 +
|
|
233
|
+
1. **Query Expansion** — LLM generates lexical variants, semantic rephrases, and a [HyDE](https://arxiv.org/abs/2212.10496) passage
|
|
234
|
+
2. **Parallel Retrieval** — BM25 + vector search run concurrently on all variants
|
|
133
235
|
3. **Fusion** — Reciprocal Rank Fusion merges results with position-based scoring
|
|
134
|
-
4. **
|
|
236
|
+
4. **Reranking** — Cross-encoder rescores top 20, blended with fusion scores
|
|
237
|
+
|
|
238
|
+
> **Deep dive**: [How Search Works](https://gno.sh/docs/HOW-SEARCH-WORKS/)
|
|
239
|
+
|
|
240
|
+
---
|
|
135
241
|
|
|
136
|
-
|
|
242
|
+
## Features
|
|
243
|
+
|
|
244
|
+
| Feature | Description |
|
|
245
|
+
|:--------|:------------|
|
|
246
|
+
| **Hybrid Search** | BM25 + vector + RRF fusion + cross-encoder reranking |
|
|
247
|
+
| **Web UI** | Visual dashboard for search, browse, and AI Q&A |
|
|
248
|
+
| **REST API** | HTTP API for custom tools and integrations |
|
|
249
|
+
| **Multi-Format** | Markdown, PDF, DOCX, XLSX, PPTX, plain text |
|
|
250
|
+
| **Local LLM** | AI answers via llama.cpp—no API keys |
|
|
251
|
+
| **Privacy First** | 100% offline, zero telemetry, your data stays yours |
|
|
252
|
+
| **MCP Server** | Works with Claude Desktop, Cursor, Zed, + 8 more |
|
|
253
|
+
| **Collections** | Organize sources with patterns, excludes, contexts |
|
|
254
|
+
| **Multilingual** | 30+ languages, auto-detection, cross-lingual search |
|
|
255
|
+
| **Incremental** | SHA-256 tracking—only changed files re-indexed |
|
|
137
256
|
|
|
138
257
|
---
|
|
139
258
|
|
|
@@ -143,9 +262,24 @@ Models auto-download on first use to `~/.cache/gno/models/`.
|
|
|
143
262
|
|
|
144
263
|
| Model | Purpose | Size |
|
|
145
264
|
|:------|:--------|:-----|
|
|
146
|
-
| bge-m3 | Embeddings | ~500MB |
|
|
147
|
-
| bge-reranker-v2-m3 |
|
|
148
|
-
| Qwen
|
|
265
|
+
| bge-m3 | Embeddings (1024-dim, multilingual) | ~500MB |
|
|
266
|
+
| bge-reranker-v2-m3 | Cross-encoder reranking | ~700MB |
|
|
267
|
+
| Qwen/SmolLM | Query expansion + AI answers | ~600MB-1.2GB |
|
|
268
|
+
|
|
269
|
+
### Model Presets
|
|
270
|
+
|
|
271
|
+
| Preset | Disk | Best For |
|
|
272
|
+
|:-------|:-----|:---------|
|
|
273
|
+
| `slim` | ~1GB | Fast, lower quality |
|
|
274
|
+
| `balanced` | ~2GB | Good balance (default) |
|
|
275
|
+
| `quality` | ~2.5GB | Best answers |
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
gno models use balanced
|
|
279
|
+
gno models pull --all
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
> **Configuration**: [Model Setup](https://gno.sh/docs/CONFIGURATION/)
|
|
149
283
|
|
|
150
284
|
---
|
|
151
285
|
|
|
@@ -153,16 +287,18 @@ Models auto-download on first use to `~/.cache/gno/models/`.
|
|
|
153
287
|
|
|
154
288
|
```
|
|
155
289
|
┌─────────────────────────────────────────────────┐
|
|
156
|
-
│
|
|
290
|
+
│ GNO CLI / MCP / Web UI / API │
|
|
157
291
|
├─────────────────────────────────────────────────┤
|
|
158
|
-
│ Ports: Converter, Store, Embedding, Rerank
|
|
292
|
+
│ Ports: Converter, Store, Embedding, Rerank │
|
|
159
293
|
├─────────────────────────────────────────────────┤
|
|
160
|
-
│ Adapters: SQLite, FTS5, sqlite-vec, llama-cpp
|
|
294
|
+
│ Adapters: SQLite, FTS5, sqlite-vec, llama-cpp │
|
|
161
295
|
├─────────────────────────────────────────────────┤
|
|
162
|
-
│ Core: Identity, Mirrors, Chunking, Retrieval
|
|
296
|
+
│ Core: Identity, Mirrors, Chunking, Retrieval │
|
|
163
297
|
└─────────────────────────────────────────────────┘
|
|
164
298
|
```
|
|
165
299
|
|
|
300
|
+
> **Details**: [Architecture](https://gno.sh/docs/ARCHITECTURE/)
|
|
301
|
+
|
|
166
302
|
---
|
|
167
303
|
|
|
168
304
|
## Development
|
|
@@ -171,14 +307,19 @@ Models auto-download on first use to `~/.cache/gno/models/`.
|
|
|
171
307
|
git clone https://github.com/gmickel/gno.git && cd gno
|
|
172
308
|
bun install
|
|
173
309
|
bun test
|
|
174
|
-
bun run lint
|
|
175
|
-
bun run typecheck
|
|
310
|
+
bun run lint && bun run typecheck
|
|
176
311
|
```
|
|
177
312
|
|
|
178
|
-
|
|
313
|
+
> **Contributing**: [CONTRIBUTING.md](.github/CONTRIBUTING.md)
|
|
179
314
|
|
|
180
315
|
---
|
|
181
316
|
|
|
182
317
|
## License
|
|
183
318
|
|
|
184
319
|
[MIT](./LICENSE)
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
<p align="center">
|
|
324
|
+
made with ❤️ by <a href="https://twitter.com/gmickel">@gmickel</a>
|
|
325
|
+
</p>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="85" height="28" viewBox="0 0 85 28">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg-lic" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
|
+
<stop offset="0%" style="stop-color:#1a1a2e"/>
|
|
5
|
+
<stop offset="100%" style="stop-color:#0f0f1a"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
</defs>
|
|
8
|
+
<rect width="85" height="28" rx="6" fill="url(#bg-lic)"/>
|
|
9
|
+
<rect x="1" y="1" width="83" height="26" rx="5" fill="none" stroke="#2dd4bf" stroke-opacity="0.3"/>
|
|
10
|
+
<text x="10" y="18" font-family="ui-monospace,SFMono-Regular,Menlo,Monaco,monospace" font-size="11" fill="#94a3b8">MIT</text>
|
|
11
|
+
<text x="34" y="18" font-family="ui-monospace,SFMono-Regular,Menlo,Monaco,monospace" font-size="11" fill="#2dd4bf">License</text>
|
|
12
|
+
</svg>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="66" height="28" viewBox="0 0 66 28">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg-npm" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
|
+
<stop offset="0%" style="stop-color:#1a1a2e"/>
|
|
5
|
+
<stop offset="100%" style="stop-color:#0f0f1a"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
</defs>
|
|
8
|
+
<rect width="66" height="28" rx="6" fill="url(#bg-npm)"/>
|
|
9
|
+
<rect x="1" y="1" width="64" height="26" rx="5" fill="none" stroke="#cb3837" stroke-opacity="0.4"/>
|
|
10
|
+
<rect x="8" y="7" width="32" height="14" rx="3" fill="#cb3837"/>
|
|
11
|
+
<text x="13" y="18" font-family="ui-monospace,SFMono-Regular,Menlo,Monaco,monospace" font-size="10" font-weight="700" fill="#fff">npm</text>
|
|
12
|
+
<text x="46" y="18" font-family="ui-monospace,SFMono-Regular,Menlo,Monaco,monospace" font-size="12" fill="#e2e8f0">↗</text>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="130" height="28" viewBox="0 0 130 28">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg2" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
|
+
<stop offset="0%" style="stop-color:#1a1a2e"/>
|
|
5
|
+
<stop offset="100%" style="stop-color:#0f0f1a"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<filter id="glow2">
|
|
8
|
+
<feGaussianBlur stdDeviation="0.5" result="coloredBlur"/>
|
|
9
|
+
<feMerge>
|
|
10
|
+
<feMergeNode in="coloredBlur"/>
|
|
11
|
+
<feMergeNode in="SourceGraphic"/>
|
|
12
|
+
</feMerge>
|
|
13
|
+
</filter>
|
|
14
|
+
</defs>
|
|
15
|
+
<rect width="130" height="28" rx="6" fill="url(#bg2)"/>
|
|
16
|
+
<rect x="1" y="1" width="128" height="26" rx="5" fill="none" stroke="#2dd4bf" stroke-opacity="0.3"/>
|
|
17
|
+
<!-- X logo -->
|
|
18
|
+
<g transform="translate(10, 7)" fill="#e2e8f0">
|
|
19
|
+
<path d="M10.5 1.5L6.75 6.5L10.75 12.5H8.5L5.75 8.5L2.5 12.5H0.25L4.25 7L0.5 1.5H2.75L5.25 5.25L8.25 1.5H10.5Z" transform="scale(1.1)"/>
|
|
20
|
+
</g>
|
|
21
|
+
<text x="32" y="18" font-family="ui-monospace,SFMono-Regular,Menlo,Monaco,monospace" font-size="12" font-weight="500" fill="#e2e8f0" filter="url(#glow2)">@gmickel</text>
|
|
22
|
+
</svg>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="120" height="28" viewBox="0 0 120 28">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
|
+
<stop offset="0%" style="stop-color:#1a1a2e"/>
|
|
5
|
+
<stop offset="100%" style="stop-color:#0f0f1a"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<filter id="glow">
|
|
8
|
+
<feGaussianBlur stdDeviation="1" result="coloredBlur"/>
|
|
9
|
+
<feMerge>
|
|
10
|
+
<feMergeNode in="coloredBlur"/>
|
|
11
|
+
<feMergeNode in="SourceGraphic"/>
|
|
12
|
+
</feMerge>
|
|
13
|
+
</filter>
|
|
14
|
+
</defs>
|
|
15
|
+
<rect width="120" height="28" rx="6" fill="url(#bg)"/>
|
|
16
|
+
<rect x="1" y="1" width="118" height="26" rx="5" fill="none" stroke="#2dd4bf" stroke-opacity="0.3"/>
|
|
17
|
+
<text x="10" y="18" font-family="ui-monospace,SFMono-Regular,Menlo,Monaco,monospace" font-size="11" fill="#2dd4bf" filter="url(#glow)">❯</text>
|
|
18
|
+
<text x="24" y="18" font-family="ui-monospace,SFMono-Regular,Menlo,Monaco,monospace" font-size="12" font-weight="600" fill="#e2e8f0">gno.sh</text>
|
|
19
|
+
<rect x="74" y="9" width="2" height="12" fill="#2dd4bf" opacity="0.8">
|
|
20
|
+
<animate attributeName="opacity" values="0.8;0.2;0.8" dur="1.2s" repeatCount="indefinite"/>
|
|
21
|
+
</rect>
|
|
22
|
+
</svg>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gmickel/gno",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Local semantic search for your documents. Index Markdown, PDF, and Office files with hybrid BM25 + vector search.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"search",
|
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"website:dev": "cd website && make serve",
|
|
57
57
|
"website:build": "cd website && make build",
|
|
58
58
|
"website:demos": "cd website/demos && ./build-demos.sh",
|
|
59
|
+
"serve": "bun src/index.ts serve",
|
|
60
|
+
"serve:dev": "NODE_ENV=development bun --hot src/index.ts serve",
|
|
59
61
|
"version:patch": "npm version patch --no-git-tag-version",
|
|
60
62
|
"version:minor": "npm version minor --no-git-tag-version",
|
|
61
63
|
"version:major": "npm version major --no-git-tag-version",
|
|
@@ -65,18 +67,44 @@
|
|
|
65
67
|
},
|
|
66
68
|
"dependencies": {
|
|
67
69
|
"@modelcontextprotocol/sdk": "^1.25.1",
|
|
70
|
+
"@radix-ui/react-collapsible": "^1.1.12",
|
|
71
|
+
"@radix-ui/react-dialog": "^1.1.15",
|
|
72
|
+
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
73
|
+
"@radix-ui/react-hover-card": "^1.1.15",
|
|
74
|
+
"@radix-ui/react-progress": "^1.1.8",
|
|
75
|
+
"@radix-ui/react-scroll-area": "^1.2.10",
|
|
76
|
+
"@radix-ui/react-select": "^2.2.6",
|
|
77
|
+
"@radix-ui/react-separator": "^1.1.8",
|
|
78
|
+
"@radix-ui/react-slot": "^1.2.4",
|
|
79
|
+
"@radix-ui/react-tooltip": "^1.2.8",
|
|
80
|
+
"ai": "^6.0.5",
|
|
81
|
+
"bun-plugin-tailwind": "^0.1.2",
|
|
82
|
+
"class-variance-authority": "^0.7.1",
|
|
83
|
+
"clsx": "^2.1.1",
|
|
84
|
+
"cmdk": "^1.1.1",
|
|
68
85
|
"commander": "^14.0.2",
|
|
86
|
+
"embla-carousel-react": "^8.6.0",
|
|
69
87
|
"franc": "^6.2.0",
|
|
88
|
+
"lucide-react": "^0.562.0",
|
|
70
89
|
"markitdown-ts": "^0.0.8",
|
|
90
|
+
"nanoid": "^5.1.6",
|
|
71
91
|
"node-llama-cpp": "^3.14.5",
|
|
72
92
|
"officeparser": "^5.2.2",
|
|
73
93
|
"picocolors": "^1.1.1",
|
|
94
|
+
"react": "^19.2.3",
|
|
95
|
+
"react-dom": "^19.2.3",
|
|
96
|
+
"shiki": "^3.20.0",
|
|
74
97
|
"sqlite-vec": "^0.1.7-alpha.2",
|
|
98
|
+
"streamdown": "^1.6.10",
|
|
99
|
+
"tailwind-merge": "^3.4.0",
|
|
100
|
+
"use-stick-to-bottom": "^1.1.1",
|
|
75
101
|
"zod": "^4.2.1"
|
|
76
102
|
},
|
|
77
103
|
"devDependencies": {
|
|
78
104
|
"@biomejs/biome": "2.3.10",
|
|
79
105
|
"@types/bun": "latest",
|
|
106
|
+
"@types/react": "^19.2.7",
|
|
107
|
+
"@types/react-dom": "^19.2.3",
|
|
80
108
|
"@typescript/native-preview": "^7.0.0-dev.20251215.1",
|
|
81
109
|
"ajv": "^8.17.1",
|
|
82
110
|
"ajv-formats": "^3.0.1",
|
|
@@ -87,6 +115,7 @@
|
|
|
87
115
|
"oxlint-tsgolint": "^0.10.0",
|
|
88
116
|
"pdf-lib": "^1.17.1",
|
|
89
117
|
"pptxgenjs": "^4.0.1",
|
|
118
|
+
"tailwindcss": "^4.1.18",
|
|
90
119
|
"ultracite": "^6.5.0"
|
|
91
120
|
},
|
|
92
121
|
"peerDependencies": {
|