ragtime-cli 0.2.15__py3-none-any.whl → 0.2.17__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ragtime-cli
3
- Version: 0.2.15
3
+ Version: 0.2.17
4
4
  Summary: Local-first memory and RAG system for Claude Code - semantic search over code, docs, and team knowledge
5
5
  Author-email: Bret Martineau <bretwardjames@gmail.com>
6
6
  License-Expression: MIT
@@ -263,9 +263,38 @@ This is intentional - embeddings work better on focused summaries than large cod
263
263
 
264
264
  For Claude/MCP usage: The search tool description instructs Claude to read returned file paths for full implementations before making code changes.
265
265
 
266
+ ### Smart Query Understanding
267
+
268
+ Search automatically detects qualifiers in natural language:
269
+
270
+ ```bash
271
+ # These are equivalent - qualifiers are auto-detected
272
+ ragtime search "error handling in mobile app"
273
+ ragtime search "error handling" -r mobile
274
+
275
+ # Use --raw for literal/exact search
276
+ ragtime search "mobile error handling" --raw
277
+ ```
278
+
279
+ Auto-detected qualifiers include: mobile, web, desktop, ios, android, flutter, react, vue, dart, python, typescript, auth, api, database, frontend, backend, and more.
280
+
281
+ ### Tiered Search
282
+
283
+ Use tiered search to prioritize curated knowledge over raw code:
284
+
285
+ ```bash
286
+ # Via MCP
287
+ search(query="authentication", tiered=True)
288
+ ```
289
+
290
+ Tiered search returns results in priority order:
291
+ 1. **Memories** - Curated, high-signal knowledge
292
+ 2. **Documentation** - Indexed markdown files
293
+ 3. **Code** - Function signatures and symbols
294
+
266
295
  ### Hybrid Search
267
296
 
268
- Semantic search can lose qualifiers - "error handling in mobile app" might return web app results because "error handling" dominates the embedding. Use `require_terms` to ensure specific words appear:
297
+ For explicit keyword filtering, use `require_terms`:
269
298
 
270
299
  ```bash
271
300
  # CLI
@@ -277,6 +306,29 @@ search(query="error handling", require_terms=["mobile", "dart"])
277
306
 
278
307
  This combines semantic similarity (finds conceptually related content) with keyword filtering (ensures qualifiers aren't ignored).
279
308
 
309
+ ### Hierarchical Doc Chunking
310
+
311
+ Long markdown files are automatically chunked by headers for better search accuracy:
312
+
313
+ - Each section becomes a separate searchable chunk
314
+ - Parent headers are preserved as context in the embedding
315
+ - Short docs (<500 chars) remain as single chunks
316
+ - Section path is stored (e.g., "Installation > Configuration > Environment Variables")
317
+
318
+ ### Feedback Loop
319
+
320
+ Search quality improves over time based on usage patterns:
321
+
322
+ ```bash
323
+ # Record when a result is useful (via MCP)
324
+ record_feedback(query="auth flow", result_file="src/auth.py", action="used")
325
+
326
+ # View usage statistics
327
+ feedback_stats()
328
+ ```
329
+
330
+ Frequently-used files receive a boost in future search rankings.
331
+
280
332
  ## Code Indexing
281
333
 
282
334
  The code indexer extracts meaningful symbols from your codebase:
@@ -379,13 +431,15 @@ Add to your Claude config (`.mcp.json`):
379
431
 
380
432
  Available tools:
381
433
  - `remember` - Store a memory
382
- - `search` - Semantic search
434
+ - `search` - Semantic search (supports tiered mode and auto-extraction)
383
435
  - `list_memories` - List with filters
384
436
  - `get_memory` - Get by ID
385
437
  - `store_doc` - Store document verbatim
386
438
  - `forget` - Delete memory
387
439
  - `graduate` - Promote branch → app
388
440
  - `update_status` - Change memory status
441
+ - `record_feedback` - Record when search results are used (improves future rankings)
442
+ - `feedback_stats` - View search result usage patterns
389
443
 
390
444
  ## ghp-cli Integration
391
445
 
@@ -1,10 +1,10 @@
1
- ragtime_cli-0.2.15.dist-info/licenses/LICENSE,sha256=9A0wJs2PRDciGRH4F8JUJ-aMKYQyq_gVu2ixrXs-l5A,1070
1
+ ragtime_cli-0.2.17.dist-info/licenses/LICENSE,sha256=9A0wJs2PRDciGRH4F8JUJ-aMKYQyq_gVu2ixrXs-l5A,1070
2
2
  src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- src/cli.py,sha256=RmH3M9NvZcIO4sjYgrEJJrD-mn2mcK4dPyqaBxrhdeU,76984
3
+ src/cli.py,sha256=69zjmItb4i3Aqeum8Ud-QdToPRx3Y5yTXyHdpUfDlCw,77249
4
4
  src/config.py,sha256=tQ6gPLr4ksn2bJPIUjtELFr-k01Eg4g-LDo3GNE6P0Q,4600
5
5
  src/db.py,sha256=eWqFGrg3O6hve67EzRJGcAsIpYxWJo4JlrAtlZUUA_s,15169
6
6
  src/feedback.py,sha256=cPw_lzusZZPvkgUxs_eV67NtV1FoCfTXUulBPnD78lo,6455
7
- src/mcp_server.py,sha256=QHU8jtPdA-kEzoXj88ZM0XhFvwhIngKD8Ow4plvHBfM,26498
7
+ src/mcp_server.py,sha256=SPEfyNXTxmMKTP75WGCwzIPJhZvcwjjrqpfzzgxLQIg,26498
8
8
  src/memory.py,sha256=UiHyudKbseMMY-sdcaDSfVBMGj6sFXXw1GxBsZ7nuBc,18450
9
9
  src/commands/audit.md,sha256=Xkucm-gfBIMalK9wf7NBbyejpsqBTUAGGlb7GxMtMPY,5137
10
10
  src/commands/create-pr.md,sha256=u6-jVkDP_6bJQp6ImK039eY9F6B9E2KlAVlvLY-WV6Q,9483
@@ -19,8 +19,8 @@ src/commands/start.md,sha256=qoqhkMgET74DBx8YPIT1-wqCiVBUDxlmevigsCinHSY,6506
19
19
  src/indexers/__init__.py,sha256=MYoCPZUpHakMX1s2vWnc9shjWfx_X1_0JzUhpKhnKUQ,454
20
20
  src/indexers/code.py,sha256=G2TbiKbWj0e7DV5KsU8-Ggw6ziDb4zTuZ4Bu3ryV4g8,18059
21
21
  src/indexers/docs.py,sha256=Q8krHYw0bybUyZaq1sJ0r6Fv-I_6BjTufhqI1eg_25s,9992
22
- ragtime_cli-0.2.15.dist-info/METADATA,sha256=J0tETjffr7XYMo3VmUwtm6SqUUnsuPVkrNpw5VYcgd8,11269
23
- ragtime_cli-0.2.15.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
24
- ragtime_cli-0.2.15.dist-info/entry_points.txt,sha256=cWLbeyMxZNbew-THS3bHXTpCRXt1EaUy5QUOXGXLjl4,75
25
- ragtime_cli-0.2.15.dist-info/top_level.txt,sha256=74rtVfumQlgAPzR5_2CgYN24MB0XARCg0t-gzk6gTrM,4
26
- ragtime_cli-0.2.15.dist-info/RECORD,,
22
+ ragtime_cli-0.2.17.dist-info/METADATA,sha256=zIbJxNyqUjHtsjLOVblwVk68k5ZsdH8q3dfG0-4O-S4,12832
23
+ ragtime_cli-0.2.17.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
24
+ ragtime_cli-0.2.17.dist-info/entry_points.txt,sha256=cWLbeyMxZNbew-THS3bHXTpCRXt1EaUy5QUOXGXLjl4,75
25
+ ragtime_cli-0.2.17.dist-info/top_level.txt,sha256=74rtVfumQlgAPzR5_2CgYN24MB0XARCg0t-gzk6gTrM,4
26
+ ragtime_cli-0.2.17.dist-info/RECORD,,
src/cli.py CHANGED
@@ -281,7 +281,8 @@ def _upsert_entries(db, entries, entry_type: str = "docs", label: str = " Embed
281
281
  if entry_type == "code":
282
282
  ids = [f"{e.file_path}:{e.line_number}:{e.symbol_name}" for e in batch]
283
283
  else:
284
- ids = [e.file_path for e in batch]
284
+ # Include chunk_index for hierarchical doc chunks
285
+ ids = [f"{e.file_path}:{e.chunk_index}" for e in batch]
285
286
 
286
287
  documents = [e.content for e in batch]
287
288
  metadatas = [e.to_metadata() for e in batch]
@@ -2215,8 +2216,12 @@ def update(check: bool):
2215
2216
  import json
2216
2217
  from urllib.request import urlopen
2217
2218
  from urllib.error import URLError
2219
+ from importlib.metadata import version as get_version
2218
2220
 
2219
- current = "0.2.9"
2221
+ try:
2222
+ current = get_version("ragtime-cli")
2223
+ except Exception:
2224
+ current = "0.0.0" # Fallback if not installed as package
2220
2225
 
2221
2226
  click.echo(f"Current version: {current}")
2222
2227
  click.echo("Checking PyPI for updates...")
src/mcp_server.py CHANGED
@@ -612,7 +612,7 @@ class RagtimeMCPServer:
612
612
  "protocolVersion": "2024-11-05",
613
613
  "serverInfo": {
614
614
  "name": "ragtime",
615
- "version": "0.2.15",
615
+ "version": "0.2.17",
616
616
  },
617
617
  "capabilities": {
618
618
  "tools": {},