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.
Files changed (70) hide show
  1. package/.claude-plugin/plugin.json +23 -0
  2. package/.mcp.json +13 -0
  3. package/CHANGELOG.md +42 -0
  4. package/NOTICE +47 -0
  5. package/README.md +2 -2
  6. package/bun.lock +1978 -0
  7. package/dist/{chunk-B335UOU7.js → chunk-3TB7TDVF.js} +24 -3
  8. package/dist/chunk-3TB7TDVF.js.map +1 -0
  9. package/dist/{chunk-KCI4U6FH.js → chunk-KDZDLJUY.js} +2 -2
  10. package/dist/{chunk-AEXFPA57.js → chunk-YDTTD53Y.js} +158 -26
  11. package/dist/chunk-YDTTD53Y.js.map +1 -0
  12. package/dist/index.js +3 -3
  13. package/dist/mcp/bootstrap.js +10 -0
  14. package/dist/mcp/bootstrap.js.map +1 -1
  15. package/dist/mcp/server.d.ts +5 -3
  16. package/dist/mcp/server.js +2 -2
  17. package/dist/workers/background-worker-cli.js +2 -2
  18. package/hooks/check-ready.sh +109 -0
  19. package/hooks/hooks.json +97 -0
  20. package/hooks/job-status-hook.sh +51 -0
  21. package/hooks/posttooluse-bk-reminder.py +126 -0
  22. package/hooks/posttooluse-web-research.py +209 -0
  23. package/hooks/posttooluse-websearch-bk.py +158 -0
  24. package/hooks/pretooluse-bk-suggest.py +296 -0
  25. package/hooks/skill-activation.py +221 -0
  26. package/hooks/skill-rules.json +131 -0
  27. package/package.json +9 -2
  28. package/scripts/CLAUDE.md +65 -0
  29. package/scripts/auto-setup.sh +65 -0
  30. package/scripts/bench-regression.sh +345 -0
  31. package/scripts/dev.sh +16 -0
  32. package/scripts/doctor.sh +103 -0
  33. package/scripts/download-models.ts +188 -0
  34. package/scripts/export-web-store.ts +142 -0
  35. package/scripts/lib/mock-server.sh +70 -0
  36. package/scripts/mcp-wrapper.sh +91 -0
  37. package/scripts/setup.sh +224 -0
  38. package/scripts/statusline-module.sh +29 -0
  39. package/scripts/test-mcp-dev.js +260 -0
  40. package/scripts/validate-local.sh +412 -0
  41. package/scripts/validate-npm-release.sh +406 -0
  42. package/skills/add-folder/SKILL.md +48 -0
  43. package/skills/add-repo/SKILL.md +50 -0
  44. package/skills/advanced-workflows/SKILL.md +273 -0
  45. package/skills/cancel/SKILL.md +63 -0
  46. package/skills/check-status/SKILL.md +130 -0
  47. package/skills/crawl/SKILL.md +61 -0
  48. package/skills/doctor/SKILL.md +27 -0
  49. package/skills/eval/SKILL.md +222 -0
  50. package/skills/health/SKILL.md +72 -0
  51. package/skills/index/SKILL.md +48 -0
  52. package/skills/knowledge-search/SKILL.md +110 -0
  53. package/skills/remove-store/SKILL.md +52 -0
  54. package/skills/search/SKILL.md +80 -0
  55. package/skills/search/search.sh +63 -0
  56. package/skills/search-optimization/SKILL.md +199 -0
  57. package/skills/search-optimization/references/mistakes.md +21 -0
  58. package/skills/search-optimization/references/strategies.md +80 -0
  59. package/skills/skill-activation/SKILL.md +131 -0
  60. package/skills/statusline/SKILL.md +19 -0
  61. package/skills/store-lifecycle/SKILL.md +470 -0
  62. package/skills/stores/SKILL.md +54 -0
  63. package/skills/suggest/SKILL.md +118 -0
  64. package/skills/sync/SKILL.md +96 -0
  65. package/skills/test-plugin/SKILL.md +547 -0
  66. package/skills/uninstall/SKILL.md +65 -0
  67. package/skills/when-to-query/SKILL.md +160 -0
  68. package/dist/chunk-AEXFPA57.js.map +0 -1
  69. package/dist/chunk-B335UOU7.js.map +0 -1
  70. /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.