bluera-knowledge 0.31.0 → 0.33.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/.claude-plugin/plugin.json +23 -0
- package/.mcp.json +13 -0
- package/CHANGELOG.md +42 -0
- package/NOTICE +47 -0
- package/README.md +2 -2
- package/bun.lock +1978 -0
- package/dist/{chunk-B335UOU7.js → chunk-3TB7TDVF.js} +24 -3
- package/dist/chunk-3TB7TDVF.js.map +1 -0
- package/dist/{chunk-KCI4U6FH.js → chunk-KDZDLJUY.js} +2 -2
- package/dist/{chunk-AEXFPA57.js → chunk-YDTTD53Y.js} +158 -26
- package/dist/chunk-YDTTD53Y.js.map +1 -0
- package/dist/index.js +3 -3
- package/dist/mcp/bootstrap.js +10 -0
- package/dist/mcp/bootstrap.js.map +1 -1
- package/dist/mcp/server.d.ts +5 -3
- package/dist/mcp/server.js +2 -2
- package/dist/workers/background-worker-cli.js +2 -2
- package/hooks/check-ready.sh +109 -0
- package/hooks/hooks.json +97 -0
- package/hooks/job-status-hook.sh +51 -0
- package/hooks/posttooluse-bk-reminder.py +126 -0
- package/hooks/posttooluse-web-research.py +209 -0
- package/hooks/posttooluse-websearch-bk.py +158 -0
- package/hooks/pretooluse-bk-suggest.py +296 -0
- package/hooks/skill-activation.py +221 -0
- package/hooks/skill-rules.json +131 -0
- package/package.json +9 -2
- package/scripts/CLAUDE.md +65 -0
- package/scripts/auto-setup.sh +65 -0
- package/scripts/bench-regression.sh +345 -0
- package/scripts/dev.sh +16 -0
- package/scripts/doctor.sh +103 -0
- package/scripts/download-models.ts +188 -0
- package/scripts/export-web-store.ts +142 -0
- package/scripts/lib/mock-server.sh +70 -0
- package/scripts/mcp-wrapper.sh +91 -0
- package/scripts/setup.sh +224 -0
- package/scripts/statusline-module.sh +29 -0
- package/scripts/test-mcp-dev.js +260 -0
- package/scripts/validate-local.sh +412 -0
- package/scripts/validate-npm-release.sh +406 -0
- package/skills/add-folder/SKILL.md +48 -0
- package/skills/add-repo/SKILL.md +50 -0
- package/skills/advanced-workflows/SKILL.md +273 -0
- package/skills/cancel/SKILL.md +63 -0
- package/skills/check-status/SKILL.md +130 -0
- package/skills/crawl/SKILL.md +61 -0
- package/skills/doctor/SKILL.md +27 -0
- package/skills/eval/SKILL.md +222 -0
- package/skills/health/SKILL.md +72 -0
- package/skills/index/SKILL.md +48 -0
- package/skills/knowledge-search/SKILL.md +110 -0
- package/skills/remove-store/SKILL.md +52 -0
- package/skills/search/SKILL.md +80 -0
- package/skills/search/search.sh +63 -0
- package/skills/search-optimization/SKILL.md +199 -0
- package/skills/search-optimization/references/mistakes.md +21 -0
- package/skills/search-optimization/references/strategies.md +80 -0
- package/skills/skill-activation/SKILL.md +131 -0
- package/skills/statusline/SKILL.md +19 -0
- package/skills/store-lifecycle/SKILL.md +470 -0
- package/skills/stores/SKILL.md +54 -0
- package/skills/suggest/SKILL.md +118 -0
- package/skills/sync/SKILL.md +96 -0
- package/skills/test-plugin/SKILL.md +547 -0
- package/skills/uninstall/SKILL.md +65 -0
- package/skills/when-to-query/SKILL.md +160 -0
- package/dist/chunk-AEXFPA57.js.map +0 -1
- package/dist/chunk-B335UOU7.js.map +0 -1
- /package/dist/{chunk-KCI4U6FH.js.map → chunk-KDZDLJUY.js.map} +0 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: advanced-workflows
|
|
3
|
+
description: Multi-tool orchestration patterns for BK operations
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Advanced Bluera Knowledge Workflows
|
|
7
|
+
|
|
8
|
+
Master complex multi-tool operations that combine multiple MCP tools for efficient knowledge retrieval and management.
|
|
9
|
+
|
|
10
|
+
## Progressive Library Exploration
|
|
11
|
+
|
|
12
|
+
When exploring a new library or codebase, use this pattern for efficient discovery:
|
|
13
|
+
|
|
14
|
+
### Workflow: Find Relevant Code in Unknown Library
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
1. list_stores()
|
|
18
|
+
→ See what's indexed, identify target store
|
|
19
|
+
|
|
20
|
+
2. get_store_info(store)
|
|
21
|
+
→ Get metadata: file paths, size, indexed files
|
|
22
|
+
→ Understand scope before searching
|
|
23
|
+
|
|
24
|
+
3. search(query, detail='minimal', stores=[target])
|
|
25
|
+
→ Get high-level summaries of relevant code
|
|
26
|
+
→ Review relevance scores (>0.7 = good match)
|
|
27
|
+
|
|
28
|
+
4. get_full_context(result_ids[top_3])
|
|
29
|
+
→ Deep dive on most relevant results only
|
|
30
|
+
→ Get complete code with full context
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Example:**
|
|
34
|
+
|
|
35
|
+
User: "How does Vue's computed properties work?"
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
list_stores()
|
|
39
|
+
→ Found: vue, react, pydantic
|
|
40
|
+
|
|
41
|
+
get_store_info('vue')
|
|
42
|
+
→ Path: .bluera/bluera-knowledge/repos/vue/
|
|
43
|
+
→ Files: 2,847 indexed
|
|
44
|
+
|
|
45
|
+
search("computed properties", intent='find-implementation', detail='minimal', stores=['vue'])
|
|
46
|
+
→ Result 1: packages/reactivity/src/computed.ts (score: 0.92)
|
|
47
|
+
→ Result 2: packages/reactivity/__tests__/computed.spec.ts (score: 0.85)
|
|
48
|
+
→ Result 3: packages/runtime-core/src/apiComputed.ts (score: 0.78)
|
|
49
|
+
|
|
50
|
+
get_full_context(['result_1_id', 'result_2_id'])
|
|
51
|
+
→ Full code for ComputedRefImpl class
|
|
52
|
+
→ Complete API implementation
|
|
53
|
+
|
|
54
|
+
Now explain with authoritative source code.
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Adding New Library with Job Monitoring
|
|
58
|
+
|
|
59
|
+
When adding large libraries, monitor indexing progress to know when search is ready:
|
|
60
|
+
|
|
61
|
+
### Workflow: Add Library and Wait for Index
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
1. create_store(url_or_path, name)
|
|
65
|
+
→ Returns: job_id
|
|
66
|
+
→ Background indexing starts
|
|
67
|
+
|
|
68
|
+
2. check_job_status(job_id)
|
|
69
|
+
→ Poll every 10-30 seconds
|
|
70
|
+
→ Status: 'pending' | 'running' | 'completed' | 'failed'
|
|
71
|
+
→ Progress: percentage, current file
|
|
72
|
+
|
|
73
|
+
3. When status='completed':
|
|
74
|
+
list_stores()
|
|
75
|
+
→ Verify store appears in list
|
|
76
|
+
|
|
77
|
+
4. search(query, stores=[new_store], limit=5)
|
|
78
|
+
→ Test search works
|
|
79
|
+
→ Verify indexing quality
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Example:**
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
create_store('https://github.com/fastapi/fastapi', 'fastapi')
|
|
86
|
+
→ job_id: 'job_abc123'
|
|
87
|
+
→ Status: Indexing started in background
|
|
88
|
+
|
|
89
|
+
# Poll for completion (typically 30-120 seconds for medium repos)
|
|
90
|
+
check_job_status('job_abc123')
|
|
91
|
+
→ Status: running
|
|
92
|
+
→ Progress: 45% (processing src/fastapi/routing.py)
|
|
93
|
+
|
|
94
|
+
# ... wait 30 seconds ...
|
|
95
|
+
|
|
96
|
+
check_job_status('job_abc123')
|
|
97
|
+
→ Status: completed
|
|
98
|
+
→ Indexed: 487 files, 125k lines
|
|
99
|
+
|
|
100
|
+
# Verify and test
|
|
101
|
+
list_stores()
|
|
102
|
+
→ fastapi: 487 files, vector + FTS indexed
|
|
103
|
+
|
|
104
|
+
search("dependency injection", stores=['fastapi'], limit=3)
|
|
105
|
+
→ Returns relevant FastAPI DI patterns
|
|
106
|
+
→ Store is ready for use!
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Handling Large Result Sets
|
|
110
|
+
|
|
111
|
+
When initial search returns many results, use progressive detail to avoid context overload:
|
|
112
|
+
|
|
113
|
+
### Workflow: Progressive Detail Strategy
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
1. search(query, detail='minimal', limit=20)
|
|
117
|
+
→ Get summaries only (~100 tokens/result)
|
|
118
|
+
→ Review all 20 summaries quickly
|
|
119
|
+
|
|
120
|
+
2. Filter by relevance score:
|
|
121
|
+
- Score > 0.8: Excellent match
|
|
122
|
+
- Score 0.6-0.8: Good match
|
|
123
|
+
- Score < 0.6: Possibly irrelevant
|
|
124
|
+
|
|
125
|
+
3. For top 3-5 results (score > 0.7):
|
|
126
|
+
get_full_context(selected_ids)
|
|
127
|
+
→ Fetch complete code only for relevant items
|
|
128
|
+
→ Saves ~80% context vs fetching all upfront
|
|
129
|
+
|
|
130
|
+
4. If nothing relevant:
|
|
131
|
+
search(refined_query, detail='contextual', limit=10)
|
|
132
|
+
→ Try different query with more context
|
|
133
|
+
→ Or broaden/narrow the search
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Example:**
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
# Initial broad search
|
|
140
|
+
search("authentication middleware", detail='minimal', limit=20)
|
|
141
|
+
→ 20 results, scores ranging 0.45-0.92
|
|
142
|
+
→ Total context: ~2k tokens (minimal)
|
|
143
|
+
|
|
144
|
+
# Filter by score
|
|
145
|
+
Top results (>0.7):
|
|
146
|
+
- Result 3: auth/jwt.ts (score: 0.92)
|
|
147
|
+
- Result 7: middleware/authenticate.ts (score: 0.85)
|
|
148
|
+
- Result 12: auth/session.ts (score: 0.74)
|
|
149
|
+
|
|
150
|
+
# Get full code for top 3 only
|
|
151
|
+
get_full_context(['result_3', 'result_7', 'result_12'])
|
|
152
|
+
→ Complete implementations for relevant files only
|
|
153
|
+
→ Context: ~3k tokens (vs ~15k if we fetched all 20)
|
|
154
|
+
|
|
155
|
+
# Found what we needed! If not, would refine query and retry.
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Multi-Store Search with Ranking
|
|
159
|
+
|
|
160
|
+
When searching across multiple stores, use ranking to prioritize results:
|
|
161
|
+
|
|
162
|
+
### Workflow: Cross-Library Search
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
1. search(query, limit=10)
|
|
166
|
+
→ Searches ALL stores
|
|
167
|
+
→ Returns mixed results ranked by relevance
|
|
168
|
+
|
|
169
|
+
2. Review store distribution:
|
|
170
|
+
- If dominated by one store: might narrow to specific stores
|
|
171
|
+
- If balanced: good cross-library perspective
|
|
172
|
+
|
|
173
|
+
3. For specific library focus:
|
|
174
|
+
search(query, stores=['lib1', 'lib2'], limit=15)
|
|
175
|
+
→ Search only relevant libraries
|
|
176
|
+
→ Get more results from target libraries
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
**Example:**
|
|
180
|
+
|
|
181
|
+
User: "How do different frameworks handle routing?"
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
# Search all indexed frameworks
|
|
185
|
+
search("routing implementation", intent='find-implementation', limit=15)
|
|
186
|
+
→ Result mix:
|
|
187
|
+
- express (score: 0.91)
|
|
188
|
+
- fastapi (score: 0.89)
|
|
189
|
+
- hono (score: 0.87)
|
|
190
|
+
- vue-router (score: 0.82)
|
|
191
|
+
- ...
|
|
192
|
+
|
|
193
|
+
# All stores represented, good comparative view!
|
|
194
|
+
|
|
195
|
+
# If user wants deeper FastAPI focus:
|
|
196
|
+
search("routing implementation", stores=['fastapi', 'starlette'], limit=20)
|
|
197
|
+
→ More FastAPI/Starlette-specific results
|
|
198
|
+
→ Deeper exploration of Python framework routing
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Error Recovery
|
|
202
|
+
|
|
203
|
+
When operations fail, use these recovery patterns:
|
|
204
|
+
|
|
205
|
+
### Workflow: Handle Indexing Failures
|
|
206
|
+
|
|
207
|
+
```
|
|
208
|
+
1. create_store() fails or job_status shows 'failed'
|
|
209
|
+
→ Check error message
|
|
210
|
+
→ Common issues:
|
|
211
|
+
- Git auth required (private repo)
|
|
212
|
+
- Invalid URL/path
|
|
213
|
+
- Disk space
|
|
214
|
+
- Network timeout
|
|
215
|
+
|
|
216
|
+
2. Recovery actions:
|
|
217
|
+
- Auth issue: Provide credentials or use HTTPS
|
|
218
|
+
- Invalid path: Verify URL/path exists
|
|
219
|
+
- Disk space: delete_store() unused stores
|
|
220
|
+
- Network: Retry with smaller repo or use --shallow
|
|
221
|
+
|
|
222
|
+
3. Verify recovery:
|
|
223
|
+
list_stores() → Check store appeared
|
|
224
|
+
search(test_query, stores=[new_store]) → Verify searchable
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**Example:**
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
create_store('https://github.com/private/repo', 'my-repo')
|
|
231
|
+
→ job_id: 'job_xyz'
|
|
232
|
+
|
|
233
|
+
check_job_status('job_xyz')
|
|
234
|
+
→ Status: failed
|
|
235
|
+
→ Error: "Authentication required for private repository"
|
|
236
|
+
|
|
237
|
+
# Recovery: Use authenticated URL or SSH
|
|
238
|
+
create_store('git@github.com:private/repo.git', 'my-repo')
|
|
239
|
+
→ job_id: 'job_xyz2'
|
|
240
|
+
|
|
241
|
+
check_job_status('job_xyz2')
|
|
242
|
+
→ Status: completed
|
|
243
|
+
→ Success!
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
## Combining Workflows
|
|
247
|
+
|
|
248
|
+
Real-world usage often combines these patterns:
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
User: "I need to understand how Express and Hono handle middleware differently"
|
|
252
|
+
|
|
253
|
+
1. list_stores() → check if both indexed
|
|
254
|
+
2. If not: create_store() for missing framework(s)
|
|
255
|
+
3. check_job_status() → wait for indexing
|
|
256
|
+
4. search("middleware implementation", stores=['express', 'hono'], detail='minimal')
|
|
257
|
+
5. Review summaries, identify key files
|
|
258
|
+
6. get_full_context() for 2-3 most relevant from each framework
|
|
259
|
+
7. Compare implementations with full context
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
This multi-step workflow is efficient, targeted, and conserves context.
|
|
263
|
+
|
|
264
|
+
## Best Practices
|
|
265
|
+
|
|
266
|
+
1. **Always start with detail='minimal'** - Get summaries first, full context selectively
|
|
267
|
+
2. **Monitor background jobs** - Don't search newly added stores until indexing completes
|
|
268
|
+
3. **Use intent parameter** - Helps ranking ('find-implementation' vs 'find-pattern' vs 'find-usage')
|
|
269
|
+
4. **Filter by stores when known** - Faster, more focused results
|
|
270
|
+
5. **Check relevance scores** - >0.7 is usually a strong match, <0.5 might be noise
|
|
271
|
+
6. **Progressive refinement** - Broad search → filter → narrow → full context
|
|
272
|
+
|
|
273
|
+
These workflows reduce token usage, minimize tool calls, and get you to the right answer faster.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Cancel a background job
|
|
3
|
+
argument-hint: "[job-id]"
|
|
4
|
+
allowed-tools: ["mcp__bluera-knowledge__execute"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Cancel Background Job
|
|
8
|
+
|
|
9
|
+
Cancel a running or pending background job: **$ARGUMENTS**
|
|
10
|
+
|
|
11
|
+
## Steps
|
|
12
|
+
|
|
13
|
+
1. Parse the job ID from $ARGUMENTS (required)
|
|
14
|
+
- If no job ID provided, show error and suggest using /bluera-knowledge:check-status to list active jobs
|
|
15
|
+
|
|
16
|
+
2. Use mcp__bluera-knowledge__execute tool with command "job:cancel":
|
|
17
|
+
- args.jobId: The job ID from $ARGUMENTS
|
|
18
|
+
|
|
19
|
+
3. Display cancellation result:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
✓ Job job_abc123def456 cancelled
|
|
23
|
+
Type: clone
|
|
24
|
+
Progress: 45% (was indexing)
|
|
25
|
+
|
|
26
|
+
The job has been stopped and will not continue.
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## When to Cancel
|
|
30
|
+
|
|
31
|
+
Cancel a job when:
|
|
32
|
+
- You accidentally started indexing the wrong repository
|
|
33
|
+
- The operation is taking too long and you want to try a different approach
|
|
34
|
+
- You need to free up system resources
|
|
35
|
+
- You want to stop an operation before it completes
|
|
36
|
+
|
|
37
|
+
## Important Notes
|
|
38
|
+
|
|
39
|
+
- Only jobs in 'pending' or 'running' status can be cancelled
|
|
40
|
+
- Completed or failed jobs cannot be cancelled
|
|
41
|
+
- Cancelled jobs are marked with status 'cancelled' and remain in the job list
|
|
42
|
+
- Partial work may be saved (e.g., partially indexed files remain in the database)
|
|
43
|
+
|
|
44
|
+
## Error Handling
|
|
45
|
+
|
|
46
|
+
If job cannot be cancelled:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
✗ Cannot cancel job job_abc123def456: Job has already completed
|
|
50
|
+
|
|
51
|
+
Only pending or running jobs can be cancelled.
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
If job not found:
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
✗ Job not found: job_abc123def456
|
|
58
|
+
|
|
59
|
+
Common issues:
|
|
60
|
+
- Check the job ID is correct
|
|
61
|
+
- Use /bluera-knowledge:check-status to see all active jobs
|
|
62
|
+
- Job may have already completed and been cleaned up
|
|
63
|
+
```
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Check status of background operations
|
|
3
|
+
argument-hint: "[job-id]"
|
|
4
|
+
allowed-tools: ["mcp__bluera-knowledge__execute"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Check Background Job Status
|
|
8
|
+
|
|
9
|
+
Check the status of a background operation: **$ARGUMENTS**
|
|
10
|
+
|
|
11
|
+
## Steps
|
|
12
|
+
|
|
13
|
+
1. Parse $ARGUMENTS:
|
|
14
|
+
- If a job ID is provided, use it for specific job status
|
|
15
|
+
- If no arguments, show all active jobs
|
|
16
|
+
|
|
17
|
+
2. If job ID provided:
|
|
18
|
+
- Use mcp__bluera-knowledge__execute tool with command "job:status":
|
|
19
|
+
- args.jobId: The job ID from $ARGUMENTS
|
|
20
|
+
- Display current status, progress, and details
|
|
21
|
+
|
|
22
|
+
3. If no job ID provided:
|
|
23
|
+
- Use mcp__bluera-knowledge__execute tool with command "jobs":
|
|
24
|
+
- args.activeOnly: true
|
|
25
|
+
- Display a table of running/pending jobs
|
|
26
|
+
|
|
27
|
+
## Display Format
|
|
28
|
+
|
|
29
|
+
For a specific job:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
Job Status: job_abc123def456
|
|
33
|
+
───────────────────────────────────────
|
|
34
|
+
Store: react-query
|
|
35
|
+
Phase: indexing (2/2)
|
|
36
|
+
Progress: █████░░░ 45% (562/1,247 files)
|
|
37
|
+
Started: 2 minutes ago
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
For all active jobs, format as a rich table with progress bars:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Active Background Jobs
|
|
44
|
+
────────────────────────────────────────────────────────────────────────────────────────────
|
|
45
|
+
| Job ID | Store | Phase | Progress | Files |
|
|
46
|
+
|--------------------|------------------|-----------------|--------------|----------------|
|
|
47
|
+
| job_3abaf9639770 | claude-agent-sdk | indexing (2/2) | ██████░░ 59% | 32/77 files |
|
|
48
|
+
| job_4f0315fdcff9 | zustand | cloning (1/2) | █░░░░░░░ 15% | - |
|
|
49
|
+
| job_1d1d93fd254f | uvicorn | indexing (1/1) | ████░░░░ 44% | 20/100 files |
|
|
50
|
+
| job_ac7584576f18 | tanstack-query | crawling (1/2) | ███░░░░░ 31% | 24 pages |
|
|
51
|
+
| job_8113ea07cf53 | framer-motion | indexing (2/2) | ███░░░░░ 30% | 8/1378 files |
|
|
52
|
+
| job_288c24b6724c | monaco-editor | indexing (1/1) | ███░░░░░ 31% | 12/924 files |
|
|
53
|
+
|
|
54
|
+
✓ tiktoken: Completed
|
|
55
|
+
|
|
56
|
+
6 jobs still running. The smaller repos (claude-agent-sdk, zustand, uvicorn) are progressing
|
|
57
|
+
faster. The larger ones (tanstack-query: 1741 files, framer-motion: 1378 files,
|
|
58
|
+
monaco-editor: 924 files) will take longer.
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Phase column:**
|
|
62
|
+
- Read from `job.details.phase`, `job.details.phaseStep`, `job.details.phaseTotalSteps`
|
|
63
|
+
- Format as: `{phase} ({step}/{total})` e.g., `indexing (2/2)`, `cloning (1/2)`
|
|
64
|
+
- Phases: `cloning`, `crawling`, `indexing`
|
|
65
|
+
- Clone jobs: cloning (1/2) → indexing (2/2)
|
|
66
|
+
- Index jobs: indexing (1/1)
|
|
67
|
+
- Crawl jobs: crawling (1/2) → indexing (2/2)
|
|
68
|
+
|
|
69
|
+
**Progress bar rendering (8 chars wide):**
|
|
70
|
+
|
|
71
|
+
Build the bar using these characters: `█` (filled) and `░` (empty)
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
Algorithm:
|
|
75
|
+
filled = Math.round(progress / 100 * 8)
|
|
76
|
+
bar = '█'.repeat(filled) + '░'.repeat(8 - filled) + ' ' + progress + '%'
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Examples:
|
|
80
|
+
```
|
|
81
|
+
0% → ░░░░░░░░ 0%
|
|
82
|
+
15% → █░░░░░░░ 15%
|
|
83
|
+
25% → ██░░░░░░ 25%
|
|
84
|
+
31% → ███░░░░░ 31%
|
|
85
|
+
44% → ████░░░░ 44%
|
|
86
|
+
59% → █████░░░ 59%
|
|
87
|
+
75% → ██████░░ 75%
|
|
88
|
+
88% → ███████░ 88%
|
|
89
|
+
100% → ████████ 100%
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Files column:**
|
|
93
|
+
- For indexing: Show `{filesProcessed}/{totalFiles} files` from job.details
|
|
94
|
+
- For crawling: Show `{pagesCrawled} pages` from job.details
|
|
95
|
+
- For cloning (phase 1): Show `-` (no file count yet)
|
|
96
|
+
|
|
97
|
+
**Summary section:**
|
|
98
|
+
- After the table, add a brief summary noting:
|
|
99
|
+
- How many jobs are still running
|
|
100
|
+
- Which repos are progressing faster (smaller file counts)
|
|
101
|
+
- Which repos will take longer (larger file counts)
|
|
102
|
+
- If any jobs recently completed, note them with ✓ prefix
|
|
103
|
+
|
|
104
|
+
If no active jobs:
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
No active background jobs.
|
|
108
|
+
|
|
109
|
+
Recent completed jobs:
|
|
110
|
+
────────────────────────────────────────────────────────────────────────────────────────────
|
|
111
|
+
| Job ID | Store | Phase | Files | Completed |
|
|
112
|
+
|--------------------|------------------|-----------------|----------------|--------------|
|
|
113
|
+
| job_old123abc456 | react-query | indexing (2/2) | 245/245 files | 5m ago |
|
|
114
|
+
| job_xyz789ghi012 | zustand | indexing (1/1) | 67/67 files | 12m ago |
|
|
115
|
+
|
|
116
|
+
All jobs completed successfully.
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Error Handling
|
|
120
|
+
|
|
121
|
+
If job not found:
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
✗ Job not found: job_abc123def456
|
|
125
|
+
|
|
126
|
+
Common issues:
|
|
127
|
+
- Check the job ID is correct
|
|
128
|
+
- Job may have expired (stale pending jobs are marked failed after 2 hours)
|
|
129
|
+
- Use /bluera-knowledge:check-status to see all active jobs
|
|
130
|
+
```
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Crawl web pages with natural language control and add to knowledge store
|
|
3
|
+
argument-hint: "[url] [store-name] [--crawl instruction] [--extract instruction] [--fast]"
|
|
4
|
+
allowed-tools: ["Bash(node ${CLAUDE_PLUGIN_ROOT}/dist/index.js crawl:*)"]
|
|
5
|
+
context: fork
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
**⚠️ IMPORTANT: Store name is a POSITIONAL argument, NOT an option!**
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
WRONG: crawl https://example.com --store=my-store
|
|
12
|
+
RIGHT: crawl https://example.com my-store
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Crawling and indexing: $ARGUMENTS
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
node ${CLAUDE_PLUGIN_ROOT}/dist/index.js crawl $ARGUMENTS
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
The web pages will be crawled with intelligent link selection and optional natural language extraction, then indexed for searching.
|
|
22
|
+
|
|
23
|
+
**Note:** The web store is auto-created if it doesn't exist. No need to create the store first.
|
|
24
|
+
|
|
25
|
+
## Usage Examples
|
|
26
|
+
|
|
27
|
+
**Intelligent crawl strategy:**
|
|
28
|
+
```
|
|
29
|
+
/bluera-knowledge:crawl https://code.claude.com/docs/en/ claude-docs --crawl "all Getting Started pages"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**With extraction:**
|
|
33
|
+
```
|
|
34
|
+
/bluera-knowledge:crawl https://example.com/pricing pricing-store --extract "extract pricing and features"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**Both strategy and extraction:**
|
|
38
|
+
```
|
|
39
|
+
/bluera-knowledge:crawl https://docs.example.com my-docs --crawl "API reference pages" --extract "API endpoints and parameters"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Simple BFS mode:**
|
|
43
|
+
```
|
|
44
|
+
/bluera-knowledge:crawl https://example.com/docs docs-store --simple
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Fast mode (axios-only, no JavaScript rendering):**
|
|
48
|
+
```
|
|
49
|
+
/bluera-knowledge:crawl https://example.com/docs docs-store --fast --max-pages 20
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Options
|
|
53
|
+
|
|
54
|
+
- `--crawl <instruction>` - Natural language instruction for which pages to crawl (e.g., "all Getting Started pages")
|
|
55
|
+
- `--extract <instruction>` - Natural language instruction for what content to extract (e.g., "extract API references")
|
|
56
|
+
- `--simple` - Use simple BFS (breadth-first search) mode instead of intelligent crawling
|
|
57
|
+
- `--max-pages <number>` - Maximum number of pages to crawl (default: 50)
|
|
58
|
+
- `--fast` - Use fast axios-only mode instead of headless browser
|
|
59
|
+
- Default behavior uses headless browser (Playwright via crawl4ai) for JavaScript-rendered sites
|
|
60
|
+
- Use `--fast` when the target site doesn't use client-side rendering
|
|
61
|
+
- Much faster than headless mode but may miss content from JavaScript-heavy sites
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Diagnose plugin issues and get fix instructions
|
|
3
|
+
allowed-tools: ["Bash(${CLAUDE_PLUGIN_ROOT:-.}/scripts/doctor.sh)"]
|
|
4
|
+
---
|
|
5
|
+
# Bluera Knowledge Doctor
|
|
6
|
+
|
|
7
|
+
Run comprehensive diagnostics to identify and fix plugin issues.
|
|
8
|
+
|
|
9
|
+
## Instructions
|
|
10
|
+
|
|
11
|
+
Run the doctor script to check all prerequisites:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
bash "${CLAUDE_PLUGIN_ROOT:-.}/scripts/doctor.sh"
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The script checks:
|
|
18
|
+
1. **Build tools** (make/gcc) - Required for native modules
|
|
19
|
+
2. **Node.js** - Required for MCP server
|
|
20
|
+
3. **Plugin dependencies** (node_modules) - Required for MCP server
|
|
21
|
+
4. **MCP wrapper** - Required for MCP server startup
|
|
22
|
+
5. **Python 3** - Optional, for embeddings
|
|
23
|
+
6. **Playwright** - Optional, for web crawling
|
|
24
|
+
|
|
25
|
+
For any `[FAIL]` items, follow the FIX instructions provided.
|
|
26
|
+
|
|
27
|
+
After fixing issues, restart Claude Code for changes to take effect.
|