bluera-knowledge 0.34.1 → 0.34.2
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 +1 -1
- package/CHANGELOG.md +8 -0
- package/hooks/posttooluse-bk-reminder.py +0 -0
- package/hooks/posttooluse-web-research.py +0 -0
- package/hooks/posttooluse-websearch-bk.py +0 -0
- package/package.json +1 -1
- package/scripts/auto-setup.sh +3 -0
- package/skills/advanced-workflows/SKILL.md +26 -246
- package/skills/advanced-workflows/references/examples.md +86 -0
- package/skills/eval/SKILL.md +16 -203
- package/skills/eval/references/output-format.md +73 -0
- package/skills/eval/references/procedures.md +61 -0
- package/skills/store-lifecycle/SKILL.md +16 -441
- package/skills/store-lifecycle/references/operations.md +75 -0
- package/skills/store-lifecycle/references/source-types.md +48 -0
- package/skills/test-plugin/SKILL.md +8 -515
- package/skills/test-plugin/references/output-format.md +43 -0
- package/skills/test-plugin/references/test-procedures.md +107 -0
- package/hooks/pretooluse-bk-suggest.py +0 -296
- package/hooks/skill-activation.py +0 -221
- package/hooks/skill-rules.json +0 -131
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Source Types
|
|
2
|
+
|
|
3
|
+
## Git Repositories
|
|
4
|
+
|
|
5
|
+
**Advantages:** Preserves git history, can pull updates, automatic language detection.
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
/bluera-knowledge:add-repo https://github.com/vuejs/core --name=vue
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
**Best practices:**
|
|
12
|
+
- Use package/library name: `vue`, `fastapi`, `pydantic`
|
|
13
|
+
- For monorepos: `org-project` format: `microsoft-typescript`, `vercel-next`
|
|
14
|
+
- Include version if tracking specific release: `vue-3.4`, `python-3.11`
|
|
15
|
+
|
|
16
|
+
## Local Folders
|
|
17
|
+
|
|
18
|
+
**Advantages:** No git required, fast indexing, perfect for proprietary code.
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
/bluera-knowledge:add-folder /path/to/my-project/api --name=my-api
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**Best practices:**
|
|
25
|
+
- Use descriptive names: `my-api`, `auth-service`, `shared-utils`
|
|
26
|
+
- Index focused directories (not entire ~/)
|
|
27
|
+
- Update by re-indexing: `/bluera-knowledge:index my-api`
|
|
28
|
+
|
|
29
|
+
## Web Documentation
|
|
30
|
+
|
|
31
|
+
**Advantages:** Access web-only content, handles JS-rendered sites, follows links.
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
/bluera-knowledge:crawl https://fastapi.tiangolo.com --name=fastapi-docs --max-pages=100
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**Best practices:**
|
|
38
|
+
- Append `-docs` to library name: `fastapi-docs`, `vue-docs`
|
|
39
|
+
- Set `max-pages` to avoid crawling entire internet
|
|
40
|
+
- Use `--headless` for JavaScript-heavy sites
|
|
41
|
+
- Crawl specific documentation paths, not marketing pages
|
|
42
|
+
|
|
43
|
+
## Naming Anti-Patterns
|
|
44
|
+
|
|
45
|
+
- Generic names: `docs`, `code`, `library`
|
|
46
|
+
- Unclear abbreviations: `fp`, `lib1`, `proj`
|
|
47
|
+
- Dates without context: `2024-01-15`
|
|
48
|
+
- Redundant words: `my-project-library-code`
|
|
@@ -18,530 +18,23 @@ Comprehensive test of all Bluera Knowledge plugin functionality covering the **f
|
|
|
18
18
|
| Web crawling | crawl (start job, verify status, cancel) |
|
|
19
19
|
| Hooks | PostToolUse, UserPromptSubmit, SessionStart |
|
|
20
20
|
|
|
21
|
-
##
|
|
21
|
+
## Mode Detection
|
|
22
|
+
|
|
23
|
+
Check if `--dev` flag is present in: $ARGUMENTS
|
|
22
24
|
|
|
23
25
|
| Scenario | Command | Tests |
|
|
24
26
|
|----------|---------|-------|
|
|
25
|
-
|
|
|
26
|
-
|
|
|
27
|
-
| Claude running WITHOUT plugin loaded | `/test-plugin --dev` | 29/38 (no slash cmds) |
|
|
28
|
-
|
|
29
|
-
**Modes:**
|
|
30
|
-
- **Default mode**: Uses Claude's MCP tools. Runs all 38 tests including slash commands.
|
|
31
|
-
- **`--dev` mode**: Spawns MCP server directly. Skips slash command tests since they require Claude's skill router.
|
|
27
|
+
| Plugin loaded (default) | `/test-plugin` | 38/38 (full suite) |
|
|
28
|
+
| Development (`--dev`) | `/test-plugin --dev` | 29/38 (no slash cmds) |
|
|
32
29
|
|
|
33
30
|
## Context
|
|
34
31
|
|
|
35
32
|
!`echo "=== BK Plugin Test ===" && ls -la .bluera/bluera-knowledge/ 2>/dev/null || echo "No BK data dir yet (will be created)"`
|
|
36
33
|
|
|
37
|
-
##
|
|
38
|
-
|
|
39
|
-
Check if `--dev` flag is present in: $ARGUMENTS
|
|
40
|
-
|
|
41
|
-
- If `--dev` is present: Use **Development Mode**
|
|
42
|
-
- Otherwise: Use **Production Mode**
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
## Pre-Test Cleanup
|
|
47
|
-
|
|
48
|
-
Clean up any leftover artifacts from previous test runs (ignore errors):
|
|
49
|
-
|
|
50
|
-
**In `--dev` mode:**
|
|
51
|
-
```bash
|
|
52
|
-
node scripts/test-mcp-dev.js call execute '{"command":"store:delete","args":{"store":"bk-test-store"}}' 2>/dev/null || true
|
|
53
|
-
node scripts/test-mcp-dev.js call execute '{"command":"store:delete","args":{"store":"bk-test-folder"}}' 2>/dev/null || true
|
|
54
|
-
node scripts/test-mcp-dev.js call execute '{"command":"store:delete","args":{"store":"bk-crawl-test"}}' 2>/dev/null || true
|
|
55
|
-
rm -rf .bluera/bluera-knowledge/test-content
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
**In production mode:**
|
|
59
|
-
1. Call MCP `execute` with `{ command: "store:delete", args: { store: "bk-test-store" } }` - ignore errors
|
|
60
|
-
2. Call MCP `execute` with `{ command: "store:delete", args: { store: "bk-test-folder" } }` - ignore errors
|
|
61
|
-
3. Call MCP `execute` with `{ command: "store:delete", args: { store: "bk-crawl-test" } }` - ignore errors
|
|
62
|
-
4. Run: `rm -rf .bluera/bluera-knowledge/test-content`
|
|
63
|
-
|
|
64
|
-
## Test Content Setup
|
|
65
|
-
|
|
66
|
-
Create test content for indexing:
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
mkdir -p .bluera/bluera-knowledge/test-content
|
|
70
|
-
cat > .bluera/bluera-knowledge/test-content/test-file.md << 'EOF'
|
|
71
|
-
# BK Plugin Test File
|
|
72
|
-
|
|
73
|
-
This file contains unique test content for validating the Bluera Knowledge plugin.
|
|
74
|
-
|
|
75
|
-
## Test Function
|
|
76
|
-
|
|
77
|
-
The `validateBKPlugin` function performs comprehensive testing of all plugin features.
|
|
78
|
-
It checks MCP connectivity, store operations, search functionality, and cleanup.
|
|
79
|
-
|
|
80
|
-
Keywords: bluera-knowledge-test, plugin-validation, mcp-test
|
|
81
|
-
EOF
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
# PRODUCTION MODE (default)
|
|
87
|
-
|
|
88
|
-
Use this section if `--dev` flag is NOT present.
|
|
89
|
-
|
|
90
|
-
## Part 1: MCP Execute Commands
|
|
91
|
-
|
|
92
|
-
1. **help**: Call `execute` with `{ command: "help" }`
|
|
93
|
-
- PASS if response contains "Available commands"
|
|
94
|
-
|
|
95
|
-
2. **commands**: Call `execute` with `{ command: "commands" }`
|
|
96
|
-
- PASS if response contains array of commands including ALL of: "stores", "store:create", "store:info", "store:index", "store:delete", "stores:pull", "stores:check-models", "stores:health", "stores:sync", "jobs", "job:status", "job:cancel", "help", "commands", "uninstall"
|
|
97
|
-
|
|
98
|
-
3. **stores**: Call `execute` with `{ command: "stores" }`
|
|
99
|
-
- PASS if no error (may return empty array)
|
|
100
|
-
|
|
101
|
-
4. **store:create**: Call `execute` with:
|
|
102
|
-
```json
|
|
103
|
-
{ "command": "store:create", "args": { "name": "bk-test-store", "type": "file", "source": ".bluera/bluera-knowledge/test-content" } }
|
|
104
|
-
```
|
|
105
|
-
- PASS if response indicates success and contains store id
|
|
106
|
-
|
|
107
|
-
5. **store:info**: Call `execute` with:
|
|
108
|
-
```json
|
|
109
|
-
{ "command": "store:info", "args": { "store": "bk-test-store" } }
|
|
110
|
-
```
|
|
111
|
-
- PASS if response contains store name and type
|
|
112
|
-
|
|
113
|
-
6. **store:index**: Call `execute` with:
|
|
114
|
-
```json
|
|
115
|
-
{ "command": "store:index", "args": { "store": "bk-test-store" } }
|
|
116
|
-
```
|
|
117
|
-
- PASS if response indicates indexing started (job created)
|
|
118
|
-
|
|
119
|
-
7. **jobs**: Call `execute` with `{ command: "jobs" }`
|
|
120
|
-
- PASS if response contains jobs array (may be empty if indexing completed)
|
|
121
|
-
|
|
122
|
-
8. **job:status** (if job from step 6 available): Call `execute` with:
|
|
123
|
-
```json
|
|
124
|
-
{ "command": "job:status", "args": { "jobId": "<job-id-from-step-6>" } }
|
|
125
|
-
```
|
|
126
|
-
- PASS if response contains job status (pending, running, or completed)
|
|
127
|
-
- SKIP if no job id available (indexing was synchronous)
|
|
128
|
-
|
|
129
|
-
9. **stores:health**: Call `execute` with `{ command: "stores:health" }`
|
|
130
|
-
- PASS if response contains health data (no error thrown)
|
|
131
|
-
|
|
132
|
-
10. **stores:check-models**: Call `execute` with `{ command: "stores:check-models" }`
|
|
133
|
-
- PASS if response contains model compatibility info (no error thrown)
|
|
134
|
-
|
|
135
|
-
11. **stores:sync** (dry run): Call `execute` with:
|
|
136
|
-
```json
|
|
137
|
-
{ "command": "stores:sync", "args": { "dryRun": true } }
|
|
138
|
-
```
|
|
139
|
-
- PASS if response contains sync result with skipped/orphans arrays
|
|
140
|
-
|
|
141
|
-
12. **stores:pull** (error case): Call `execute` with:
|
|
142
|
-
```json
|
|
143
|
-
{ "command": "stores:pull", "args": { "store": "bk-test-store" } }
|
|
144
|
-
```
|
|
145
|
-
- PASS if response contains error about non-repo store (bk-test-store is type "file", not "repo")
|
|
146
|
-
|
|
147
|
-
## Part 2: MCP Search Tools
|
|
148
|
-
|
|
149
|
-
13. **search**: Call MCP tool `search` with:
|
|
150
|
-
```json
|
|
151
|
-
{ "query": "validateBKPlugin", "stores": ["bk-test-store"] }
|
|
152
|
-
```
|
|
153
|
-
- PASS if results array is non-empty
|
|
154
|
-
|
|
155
|
-
14. **get_full_context**: Call MCP tool `get_full_context` with resultId from step 13
|
|
156
|
-
- PASS if response contains code or documentation content
|
|
157
|
-
|
|
158
|
-
## Part 3: Slash Commands
|
|
159
|
-
|
|
160
|
-
15. **/stores**: Run `/bluera-knowledge:stores`
|
|
161
|
-
- PASS if bk-test-store is listed
|
|
162
|
-
|
|
163
|
-
16. **/search**: Run `/bluera-knowledge:search "bluera-knowledge-test"`
|
|
164
|
-
- PASS if results are shown
|
|
165
|
-
|
|
166
|
-
17. **/suggest**: Run `/bluera-knowledge:suggest`
|
|
167
|
-
- PASS if no error thrown
|
|
168
|
-
|
|
169
|
-
18. **/check-status**: Run `/bluera-knowledge:check-status`
|
|
170
|
-
- PASS if shows job status (may show "no active jobs")
|
|
171
|
-
|
|
172
|
-
19. **/skill-activation**: Run `/bluera-knowledge:skill-activation`
|
|
173
|
-
- PASS if shows activation configuration or prompts for setup
|
|
174
|
-
|
|
175
|
-
20. **/index**: Run `/bluera-knowledge:index bk-test-store`
|
|
176
|
-
- PASS if indexing completes or starts successfully
|
|
177
|
-
|
|
178
|
-
21. **/add-folder**: Run `/bluera-knowledge:add-folder .bluera/bluera-knowledge/test-content --name bk-test-folder`
|
|
179
|
-
- PASS if store creation starts or completes
|
|
180
|
-
|
|
181
|
-
22. **/health**: Run `/bluera-knowledge:health`
|
|
182
|
-
- PASS if shows health report (no error thrown)
|
|
183
|
-
|
|
184
|
-
23. **/sync**: Run `/bluera-knowledge:sync --dry-run`
|
|
185
|
-
- PASS if shows sync preview (dry run, no side effects)
|
|
186
|
-
|
|
187
|
-
## Part 4: Web Crawl Testing
|
|
188
|
-
|
|
189
|
-
> **Note:** Web crawl functionality requires the CLI (`bluera-knowledge crawl`). MCP `store:create` only supports `file` and `repo` types. Skip this section if testing MCP-only environments.
|
|
190
|
-
|
|
191
|
-
24. **Create web store via CLI** (requires CLI access):
|
|
192
|
-
```bash
|
|
193
|
-
bluera-knowledge crawl https://httpbin.org/html bk-crawl-test --max-pages 1
|
|
194
|
-
```
|
|
195
|
-
- PASS if crawl completes and store is created
|
|
196
|
-
- SKIP if CLI not available
|
|
197
|
-
|
|
198
|
-
25. **Verify store exists**: Call `execute` with `{ command: "stores" }`
|
|
199
|
-
- PASS if bk-crawl-test appears in store list
|
|
200
|
-
- SKIP if test 24 was skipped
|
|
201
|
-
|
|
202
|
-
26. **job:cancel** (if crawl job still running): Call `execute` with:
|
|
203
|
-
```json
|
|
204
|
-
{ "command": "job:cancel", "args": { "jobId": "<crawl-job-id>" } }
|
|
205
|
-
```
|
|
206
|
-
- PASS if cancelled or already completed
|
|
207
|
-
- SKIP if test 24 was skipped
|
|
208
|
-
|
|
209
|
-
27. **Delete crawl store**: Call `execute` with:
|
|
210
|
-
```json
|
|
211
|
-
{ "command": "store:delete", "args": { "store": "bk-crawl-test" } }
|
|
212
|
-
```
|
|
213
|
-
- PASS if deletion succeeds
|
|
214
|
-
- SKIP if test 24 was skipped
|
|
215
|
-
|
|
216
|
-
## Part 5: Hook Tests
|
|
217
|
-
|
|
218
|
-
> **Note:** All hook tests use `$CLAUDE_PLUGIN_ROOT` to locate the plugin's hooks directory. This variable is set automatically by Claude Code when running plugin skills.
|
|
219
|
-
|
|
220
|
-
28. **Hook Registration**:
|
|
221
|
-
```bash
|
|
222
|
-
jq -e '(.hooks.PostToolUse | length) > 0 and (.hooks.UserPromptSubmit | length) > 0 and (.hooks.SessionStart | length) > 0' "$CLAUDE_PLUGIN_ROOT/hooks/hooks.json"
|
|
223
|
-
```
|
|
224
|
-
- PASS if returns `true`
|
|
225
|
-
|
|
226
|
-
29. **PostToolUse Hook - Library Detection**:
|
|
227
|
-
```bash
|
|
228
|
-
echo '{"tool_name": "Read", "tool_input": {"file_path": "/project/node_modules/express/index.js"}}' | python3 "$CLAUDE_PLUGIN_ROOT/hooks/posttooluse-bk-reminder.py"
|
|
229
|
-
```
|
|
230
|
-
- PASS if output contains "BLUERA-KNOWLEDGE REMINDER"
|
|
231
|
-
|
|
232
|
-
30. **PostToolUse Hook - Non-Library**:
|
|
233
|
-
```bash
|
|
234
|
-
echo '{"tool_name": "Read", "tool_input": {"file_path": "/project/src/index.ts"}}' | python3 "$CLAUDE_PLUGIN_ROOT/hooks/posttooluse-bk-reminder.py"
|
|
235
|
-
```
|
|
236
|
-
- PASS if output is empty
|
|
34
|
+
## Test Procedures
|
|
237
35
|
|
|
238
|
-
|
|
239
|
-
```bash
|
|
240
|
-
echo '{"prompt": "why does the express package throw this error?"}' | python3 "$CLAUDE_PLUGIN_ROOT/hooks/skill-activation.py"
|
|
241
|
-
```
|
|
242
|
-
- PASS if output contains "MANDATORY EVALUATION"
|
|
243
|
-
|
|
244
|
-
32. **Skill Activation Hook - Excluded**:
|
|
245
|
-
```bash
|
|
246
|
-
echo '{"prompt": "/bluera-knowledge:search express"}' | python3 "$CLAUDE_PLUGIN_ROOT/hooks/skill-activation.py"
|
|
247
|
-
```
|
|
248
|
-
- PASS if output is empty
|
|
249
|
-
|
|
250
|
-
33. **Skill Rules File**:
|
|
251
|
-
```bash
|
|
252
|
-
jq -e '(.skills | length) > 0 and (.globalExclusions | length) > 0' "$CLAUDE_PLUGIN_ROOT/hooks/skill-rules.json"
|
|
253
|
-
```
|
|
254
|
-
- PASS if returns `true`
|
|
255
|
-
|
|
256
|
-
## Part 6: Cleanup
|
|
257
|
-
|
|
258
|
-
34. **Delete test store**: Call `execute` with:
|
|
259
|
-
```json
|
|
260
|
-
{ "command": "store:delete", "args": { "store": "bk-test-store" } }
|
|
261
|
-
```
|
|
262
|
-
- PASS if deletion succeeds
|
|
263
|
-
|
|
264
|
-
35. **Delete test folder store**: Call `execute` with:
|
|
265
|
-
```json
|
|
266
|
-
{ "command": "store:delete", "args": { "store": "bk-test-folder" } }
|
|
267
|
-
```
|
|
268
|
-
- PASS if deletion succeeds or store doesn't exist (created only in production mode by /add-folder)
|
|
269
|
-
|
|
270
|
-
36. **Remove test content**:
|
|
271
|
-
```bash
|
|
272
|
-
rm -rf .bluera/bluera-knowledge/test-content
|
|
273
|
-
```
|
|
274
|
-
- PASS if command succeeds
|
|
275
|
-
|
|
276
|
-
37. **Verify store cleanup**: Call `execute` with `{ command: "stores" }`
|
|
277
|
-
- PASS if bk-test-store and bk-test-folder are NOT in the list
|
|
278
|
-
|
|
279
|
-
38. **Verify no test artifacts**:
|
|
280
|
-
```bash
|
|
281
|
-
test ! -d .bluera/bluera-knowledge/test-content && echo "clean"
|
|
282
|
-
```
|
|
283
|
-
- PASS if outputs "clean"
|
|
284
|
-
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
# DEVELOPMENT MODE (`--dev`)
|
|
288
|
-
|
|
289
|
-
Use this section if `--dev` flag is present. Uses `scripts/test-mcp-dev.js`.
|
|
290
|
-
|
|
291
|
-
### Part 1: MCP Commands (via dev script)
|
|
292
|
-
|
|
293
|
-
1. **help**:
|
|
294
|
-
```bash
|
|
295
|
-
node scripts/test-mcp-dev.js call execute '{"command":"help"}'
|
|
296
|
-
```
|
|
297
|
-
- PASS if contains "Available commands"
|
|
298
|
-
|
|
299
|
-
2. **commands**:
|
|
300
|
-
```bash
|
|
301
|
-
node scripts/test-mcp-dev.js call execute '{"command":"commands"}'
|
|
302
|
-
```
|
|
303
|
-
- PASS if contains commands array including all 15 commands
|
|
304
|
-
|
|
305
|
-
3. **stores**:
|
|
306
|
-
```bash
|
|
307
|
-
node scripts/test-mcp-dev.js call execute '{"command":"stores"}'
|
|
308
|
-
```
|
|
309
|
-
- PASS if no error
|
|
310
|
-
|
|
311
|
-
4. **store:create**:
|
|
312
|
-
```bash
|
|
313
|
-
node scripts/test-mcp-dev.js call execute '{"command":"store:create","args":{"name":"bk-test-store","type":"file","source":".bluera/bluera-knowledge/test-content"}}'
|
|
314
|
-
```
|
|
315
|
-
- PASS if success
|
|
316
|
-
|
|
317
|
-
5. **store:info**:
|
|
318
|
-
```bash
|
|
319
|
-
node scripts/test-mcp-dev.js call execute '{"command":"store:info","args":{"store":"bk-test-store"}}'
|
|
320
|
-
```
|
|
321
|
-
- PASS if contains store details
|
|
322
|
-
|
|
323
|
-
6. **store:index**:
|
|
324
|
-
```bash
|
|
325
|
-
node scripts/test-mcp-dev.js call execute '{"command":"store:index","args":{"store":"bk-test-store"}}'
|
|
326
|
-
```
|
|
327
|
-
- PASS if indexing starts
|
|
328
|
-
|
|
329
|
-
7. **jobs**:
|
|
330
|
-
```bash
|
|
331
|
-
node scripts/test-mcp-dev.js call execute '{"command":"jobs"}'
|
|
332
|
-
```
|
|
333
|
-
- PASS if returns jobs array
|
|
334
|
-
|
|
335
|
-
8. **job:status** (if job available):
|
|
336
|
-
```bash
|
|
337
|
-
node scripts/test-mcp-dev.js call execute '{"command":"job:status","args":{"jobId":"<job-id>"}}'
|
|
338
|
-
```
|
|
339
|
-
- PASS if returns status
|
|
340
|
-
|
|
341
|
-
9. **stores:health**:
|
|
342
|
-
```bash
|
|
343
|
-
node scripts/test-mcp-dev.js call execute '{"command":"stores:health"}'
|
|
344
|
-
```
|
|
345
|
-
- PASS if returns health data
|
|
346
|
-
|
|
347
|
-
10. **stores:check-models**:
|
|
348
|
-
```bash
|
|
349
|
-
node scripts/test-mcp-dev.js call execute '{"command":"stores:check-models"}'
|
|
350
|
-
```
|
|
351
|
-
- PASS if returns model compatibility info
|
|
352
|
-
|
|
353
|
-
11. **stores:sync** (dry run):
|
|
354
|
-
```bash
|
|
355
|
-
node scripts/test-mcp-dev.js call execute '{"command":"stores:sync","args":{"dryRun":true}}'
|
|
356
|
-
```
|
|
357
|
-
- PASS if returns sync result with skipped/orphans
|
|
358
|
-
|
|
359
|
-
12. **stores:pull** (error case):
|
|
360
|
-
```bash
|
|
361
|
-
node scripts/test-mcp-dev.js call execute '{"command":"stores:pull","args":{"store":"bk-test-store"}}'
|
|
362
|
-
```
|
|
363
|
-
- PASS if returns error about non-repo store
|
|
364
|
-
|
|
365
|
-
### Part 2: Search (via dev script)
|
|
366
|
-
|
|
367
|
-
13-14. **Search + Get Full Context**:
|
|
368
|
-
```bash
|
|
369
|
-
node scripts/test-mcp-dev.js session << 'EOF'
|
|
370
|
-
search {"query":"validateBKPlugin","stores":["bk-test-store"]}
|
|
371
|
-
get_full_context {"resultId":"$LAST_ID"}
|
|
372
|
-
EOF
|
|
373
|
-
```
|
|
374
|
-
- PASS if search returns results and context contains content
|
|
375
|
-
|
|
376
|
-
### Part 3: Slash Commands (SKIPPED in --dev mode)
|
|
377
|
-
|
|
378
|
-
Tests 15-23 are skipped - slash commands require Claude's skill router.
|
|
379
|
-
|
|
380
|
-
### Part 4: Web Crawl (via dev script)
|
|
381
|
-
|
|
382
|
-
24. **Create crawl store**:
|
|
383
|
-
```bash
|
|
384
|
-
node scripts/test-mcp-dev.js call execute '{"command":"store:create","args":{"name":"bk-crawl-test","type":"web","source":"https://httpbin.org/html","options":{"maxPages":1}}}'
|
|
385
|
-
```
|
|
386
|
-
- PASS if returns job id
|
|
387
|
-
|
|
388
|
-
25. **Verify crawl job**:
|
|
389
|
-
```bash
|
|
390
|
-
node scripts/test-mcp-dev.js call execute '{"command":"jobs"}'
|
|
391
|
-
```
|
|
392
|
-
- PASS if job appears
|
|
393
|
-
|
|
394
|
-
26. **job:cancel** (if running):
|
|
395
|
-
```bash
|
|
396
|
-
node scripts/test-mcp-dev.js call execute '{"command":"job:cancel","args":{"jobId":"<crawl-job-id>"}}'
|
|
397
|
-
```
|
|
398
|
-
- PASS if cancelled or completed
|
|
399
|
-
|
|
400
|
-
27. **Delete crawl store**:
|
|
401
|
-
```bash
|
|
402
|
-
node scripts/test-mcp-dev.js call execute '{"command":"store:delete","args":{"store":"bk-crawl-test"}}'
|
|
403
|
-
```
|
|
404
|
-
- PASS if deleted
|
|
405
|
-
|
|
406
|
-
### Part 5: Hook Tests
|
|
407
|
-
|
|
408
|
-
> **Note:** In dev mode, set `CLAUDE_PLUGIN_ROOT` to the current directory (plugin source).
|
|
409
|
-
|
|
410
|
-
28. **Hook Registration**:
|
|
411
|
-
```bash
|
|
412
|
-
jq -e '(.hooks.PostToolUse | length) > 0 and (.hooks.UserPromptSubmit | length) > 0 and (.hooks.SessionStart | length) > 0' hooks/hooks.json
|
|
413
|
-
```
|
|
414
|
-
- PASS if returns `true`
|
|
415
|
-
|
|
416
|
-
29. **PostToolUse Hook - Library Detection**:
|
|
417
|
-
```bash
|
|
418
|
-
echo '{"tool_name": "Read", "tool_input": {"file_path": "/project/node_modules/express/index.js"}}' | python3 hooks/posttooluse-bk-reminder.py
|
|
419
|
-
```
|
|
420
|
-
- PASS if output contains "BLUERA-KNOWLEDGE REMINDER"
|
|
421
|
-
|
|
422
|
-
30. **PostToolUse Hook - Non-Library**:
|
|
423
|
-
```bash
|
|
424
|
-
echo '{"tool_name": "Read", "tool_input": {"file_path": "/project/src/index.ts"}}' | python3 hooks/posttooluse-bk-reminder.py
|
|
425
|
-
```
|
|
426
|
-
- PASS if output is empty
|
|
427
|
-
|
|
428
|
-
31. **Skill Activation Hook - Matching**:
|
|
429
|
-
```bash
|
|
430
|
-
CLAUDE_PLUGIN_ROOT="$(pwd)" && echo '{"prompt": "why does the express package throw this error?"}' | python3 hooks/skill-activation.py
|
|
431
|
-
```
|
|
432
|
-
- PASS if output contains "MANDATORY EVALUATION"
|
|
433
|
-
|
|
434
|
-
32. **Skill Activation Hook - Excluded**:
|
|
435
|
-
```bash
|
|
436
|
-
CLAUDE_PLUGIN_ROOT="$(pwd)" && echo '{"prompt": "/bluera-knowledge:search express"}' | python3 hooks/skill-activation.py
|
|
437
|
-
```
|
|
438
|
-
- PASS if output is empty
|
|
439
|
-
|
|
440
|
-
33. **Skill Rules File**:
|
|
441
|
-
```bash
|
|
442
|
-
jq -e '(.skills | length) > 0 and (.globalExclusions | length) > 0' hooks/skill-rules.json
|
|
443
|
-
```
|
|
444
|
-
- PASS if returns `true`
|
|
445
|
-
|
|
446
|
-
### Part 6: Cleanup (via dev script)
|
|
447
|
-
|
|
448
|
-
34. **Delete test store**:
|
|
449
|
-
```bash
|
|
450
|
-
node scripts/test-mcp-dev.js call execute '{"command":"store:delete","args":{"store":"bk-test-store"}}'
|
|
451
|
-
```
|
|
452
|
-
- PASS if deleted
|
|
453
|
-
|
|
454
|
-
35. **Delete test folder store**:
|
|
455
|
-
```bash
|
|
456
|
-
node scripts/test-mcp-dev.js call execute '{"command":"store:delete","args":{"store":"bk-test-folder"}}' 2>/dev/null || true
|
|
457
|
-
```
|
|
458
|
-
- PASS if deleted or doesn't exist
|
|
459
|
-
|
|
460
|
-
36. **Remove test content**:
|
|
461
|
-
```bash
|
|
462
|
-
rm -rf .bluera/bluera-knowledge/test-content
|
|
463
|
-
```
|
|
464
|
-
- PASS if command succeeds
|
|
465
|
-
|
|
466
|
-
37. **Verify store cleanup**:
|
|
467
|
-
```bash
|
|
468
|
-
node scripts/test-mcp-dev.js call execute '{"command":"stores"}'
|
|
469
|
-
```
|
|
470
|
-
- PASS if bk-test-store and bk-test-folder are NOT in the list
|
|
471
|
-
|
|
472
|
-
38. **Verify no test artifacts**:
|
|
473
|
-
```bash
|
|
474
|
-
test ! -d .bluera/bluera-knowledge/test-content && echo "clean"
|
|
475
|
-
```
|
|
476
|
-
- PASS if outputs "clean"
|
|
477
|
-
|
|
478
|
-
---
|
|
36
|
+
Detailed test steps for each mode: [references/test-procedures.md](references/test-procedures.md)
|
|
479
37
|
|
|
480
38
|
## Output Format
|
|
481
39
|
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
| # | Test | Status |
|
|
485
|
-
|---|------|--------|
|
|
486
|
-
| 1 | MCP help | ? |
|
|
487
|
-
| 2 | MCP commands (all 15) | ? |
|
|
488
|
-
| 3 | MCP stores | ? |
|
|
489
|
-
| 4 | MCP store:create | ? |
|
|
490
|
-
| 5 | MCP store:info | ? |
|
|
491
|
-
| 6 | MCP store:index | ? |
|
|
492
|
-
| 7 | MCP jobs | ? |
|
|
493
|
-
| 8 | MCP job:status | ? |
|
|
494
|
-
| 9 | MCP stores:health | ? |
|
|
495
|
-
| 10 | MCP stores:check-models | ? |
|
|
496
|
-
| 11 | MCP stores:sync (dry) | ? |
|
|
497
|
-
| 12 | MCP stores:pull (error) | ? |
|
|
498
|
-
| 13 | MCP search | ? |
|
|
499
|
-
| 14 | MCP get_full_context | ? |
|
|
500
|
-
| 15 | /stores | ? |
|
|
501
|
-
| 16 | /search | ? |
|
|
502
|
-
| 17 | /suggest | ? |
|
|
503
|
-
| 18 | /check-status | ? |
|
|
504
|
-
| 19 | /skill-activation | ? |
|
|
505
|
-
| 20 | /index | ? |
|
|
506
|
-
| 21 | /add-folder | ? |
|
|
507
|
-
| 22 | /health | ? |
|
|
508
|
-
| 23 | /sync | ? |
|
|
509
|
-
| 24 | Crawl store create | ? |
|
|
510
|
-
| 25 | Crawl job verify | ? |
|
|
511
|
-
| 26 | Crawl job:cancel | ? |
|
|
512
|
-
| 27 | Crawl store delete | ? |
|
|
513
|
-
| 28 | Hook registration | ? |
|
|
514
|
-
| 29 | PostToolUse - library | ? |
|
|
515
|
-
| 30 | PostToolUse - non-library | ? |
|
|
516
|
-
| 31 | Skill activation - match | ? |
|
|
517
|
-
| 32 | Skill activation - exclude | ? |
|
|
518
|
-
| 33 | Skill rules file | ? |
|
|
519
|
-
| 34 | Delete test store | ? |
|
|
520
|
-
| 35 | Delete test folder store | ? |
|
|
521
|
-
| 36 | Remove test content | ? |
|
|
522
|
-
| 37 | Verify store cleanup | ? |
|
|
523
|
-
| 38 | Verify no artifacts | ? |
|
|
524
|
-
|
|
525
|
-
**Result: X/38 tests passed**
|
|
526
|
-
|
|
527
|
-
### Development mode (29 tests):
|
|
528
|
-
|
|
529
|
-
Same table but tests 15-23 show "SKIPPED (--dev mode)"
|
|
530
|
-
|
|
531
|
-
**Result: X/29 tests passed (9 skipped)**
|
|
532
|
-
|
|
533
|
-
---
|
|
534
|
-
|
|
535
|
-
## Error Recovery
|
|
536
|
-
|
|
537
|
-
If tests fail partway through, clean up manually:
|
|
538
|
-
|
|
539
|
-
```bash
|
|
540
|
-
# Delete test stores
|
|
541
|
-
node scripts/test-mcp-dev.js call execute '{"command":"store:delete","args":{"store":"bk-test-store"}}' 2>/dev/null || true
|
|
542
|
-
node scripts/test-mcp-dev.js call execute '{"command":"store:delete","args":{"store":"bk-test-folder"}}' 2>/dev/null || true
|
|
543
|
-
node scripts/test-mcp-dev.js call execute '{"command":"store:delete","args":{"store":"bk-crawl-test"}}' 2>/dev/null || true
|
|
544
|
-
|
|
545
|
-
# Remove test content
|
|
546
|
-
rm -rf .bluera/bluera-knowledge/test-content
|
|
547
|
-
```
|
|
40
|
+
Detailed output format and error recovery: [references/output-format.md](references/output-format.md)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Output Format
|
|
2
|
+
|
|
3
|
+
## Production mode (38 tests)
|
|
4
|
+
|
|
5
|
+
| # | Test | Status |
|
|
6
|
+
|---|------|--------|
|
|
7
|
+
| 1 | MCP help | ? |
|
|
8
|
+
| 2 | MCP commands (all 15) | ? |
|
|
9
|
+
| 3 | MCP stores | ? |
|
|
10
|
+
| 4 | MCP store:create | ? |
|
|
11
|
+
| 5 | MCP store:info | ? |
|
|
12
|
+
| 6 | MCP store:index | ? |
|
|
13
|
+
| 7 | MCP jobs | ? |
|
|
14
|
+
| 8 | MCP job:status | ? |
|
|
15
|
+
| 9 | MCP stores:health | ? |
|
|
16
|
+
| 10 | MCP stores:check-models | ? |
|
|
17
|
+
| 11 | MCP stores:sync (dry) | ? |
|
|
18
|
+
| 12 | MCP stores:pull (error) | ? |
|
|
19
|
+
| 13 | MCP search | ? |
|
|
20
|
+
| 14 | MCP get_full_context | ? |
|
|
21
|
+
| 15-23 | Slash commands | ? |
|
|
22
|
+
| 24-27 | Web crawl | ? |
|
|
23
|
+
| 28-30 | Hook tests | ? |
|
|
24
|
+
| 31-35 | Cleanup | ? |
|
|
25
|
+
|
|
26
|
+
**Result: X/38 tests passed**
|
|
27
|
+
|
|
28
|
+
## Development mode (29 tests)
|
|
29
|
+
|
|
30
|
+
Same table but tests 15-23 show "SKIPPED (--dev mode)"
|
|
31
|
+
|
|
32
|
+
**Result: X/29 tests passed (9 skipped)**
|
|
33
|
+
|
|
34
|
+
## Error Recovery
|
|
35
|
+
|
|
36
|
+
If tests fail partway through, clean up manually:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
node scripts/test-mcp-dev.js call execute '{"command":"store:delete","args":{"store":"bk-test-store"}}' 2>/dev/null || true
|
|
40
|
+
node scripts/test-mcp-dev.js call execute '{"command":"store:delete","args":{"store":"bk-test-folder"}}' 2>/dev/null || true
|
|
41
|
+
node scripts/test-mcp-dev.js call execute '{"command":"store:delete","args":{"store":"bk-crawl-test"}}' 2>/dev/null || true
|
|
42
|
+
rm -rf .bluera/bluera-knowledge/test-content
|
|
43
|
+
```
|