dude-claude-plugin 2026.2.12 → 2026.2.13
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/hooks.json +1 -1
- package/package.json +1 -1
- package/src/migrations/002-expand-kinds.js +26 -0
- package/src/server.js +4 -4
- package/web/index.html +8 -0
package/hooks.json
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"hooks": [
|
|
34
34
|
{
|
|
35
35
|
"type": "prompt",
|
|
36
|
-
"prompt": "Review the conversation.
|
|
36
|
+
"prompt": "Review the conversation. Classify the work and output ONE JSON object. Bug fix: {\"action\":\"upsert\",\"kind\":\"issue\",\"title\":\"...\",\"body\":\"...\",\"status\":\"resolved\"}. Architectural change (new patterns, structural reorganization, API design): {\"action\":\"upsert\",\"kind\":\"arch\",\"title\":\"...\",\"body\":\"<describe the architectural decision and rationale>\",\"status\":\"resolved\"}. Feature update or improvement to existing functionality: {\"action\":\"upsert\",\"kind\":\"update\",\"title\":\"...\",\"body\":\"<summary of what was changed>\",\"status\":\"resolved\"}. New specification or plan (not yet implemented): {\"action\":\"upsert\",\"kind\":\"spec\",\"title\":\"...\",\"body\":\"<plan details>\",\"status\":\"open\"}. Completing a planned spec: {\"action\":\"upsert\",\"kind\":\"spec\",\"title\":\"...\",\"body\":\"<summary of what was implemented>\",\"status\":\"resolved\"}. If none apply, output {\"action\":\"none\"}. Output ONLY the JSON, no other text.",
|
|
37
37
|
"timeout": 30
|
|
38
38
|
},
|
|
39
39
|
{
|
package/package.json
CHANGED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export const version = 2;
|
|
2
|
+
|
|
3
|
+
export function up(db) {
|
|
4
|
+
// SQLite doesn't support ALTER TABLE to change CHECK constraints.
|
|
5
|
+
// Recreate the record table with the expanded kind set.
|
|
6
|
+
db.exec(`
|
|
7
|
+
CREATE TABLE record_new (
|
|
8
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
9
|
+
project_id INTEGER NOT NULL REFERENCES project(id) ON DELETE CASCADE,
|
|
10
|
+
kind TEXT NOT NULL CHECK (kind IN ('issue', 'spec', 'arch', 'update')),
|
|
11
|
+
title TEXT NOT NULL,
|
|
12
|
+
body TEXT NOT NULL DEFAULT '',
|
|
13
|
+
status TEXT NOT NULL DEFAULT 'open' CHECK (status IN ('open', 'resolved', 'archived')),
|
|
14
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
15
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
INSERT INTO record_new SELECT * FROM record;
|
|
19
|
+
|
|
20
|
+
DROP TABLE record;
|
|
21
|
+
|
|
22
|
+
ALTER TABLE record_new RENAME TO record;
|
|
23
|
+
|
|
24
|
+
CREATE INDEX idx_record_project_kind ON record(project_id, kind);
|
|
25
|
+
`);
|
|
26
|
+
}
|
package/src/server.js
CHANGED
|
@@ -24,10 +24,10 @@ export async function startServer() {
|
|
|
24
24
|
// ---- search ----
|
|
25
25
|
server.tool(
|
|
26
26
|
'search',
|
|
27
|
-
'Semantic search across records (issues &
|
|
27
|
+
'Semantic search across records (issues, specs, arch decisions & updates). Returns cross-project results ranked by similarity.',
|
|
28
28
|
{
|
|
29
29
|
query: z.string().describe('Natural language search query'),
|
|
30
|
-
kind: z.enum(['issue', 'spec', 'all']).optional().describe('Filter by record kind'),
|
|
30
|
+
kind: z.enum(['issue', 'spec', 'arch', 'update', 'all']).optional().describe('Filter by record kind'),
|
|
31
31
|
project: z.string().optional().describe('Project name to boost; "*" for equal weight'),
|
|
32
32
|
limit: z.number().int().positive().optional().describe('Max results (default 5)'),
|
|
33
33
|
},
|
|
@@ -51,7 +51,7 @@ export async function startServer() {
|
|
|
51
51
|
'Create or update a record. If id is provided, updates that record. Otherwise inserts with dedup.',
|
|
52
52
|
{
|
|
53
53
|
id: z.number().int().optional().describe('Record ID to update (omit for new)'),
|
|
54
|
-
kind: z.enum(['issue', 'spec']).describe('Record kind'),
|
|
54
|
+
kind: z.enum(['issue', 'spec', 'arch', 'update']).describe('Record kind: issue (bug), spec (plan), arch (architecture decision), update (feature change)'),
|
|
55
55
|
title: z.string().describe('Short summary'),
|
|
56
56
|
body: z.string().optional().describe('Full description'),
|
|
57
57
|
status: z.enum(['open', 'resolved', 'archived']).optional().describe('Defaults to open'),
|
|
@@ -102,7 +102,7 @@ export async function startServer() {
|
|
|
102
102
|
'list_records',
|
|
103
103
|
'List records with optional filters.',
|
|
104
104
|
{
|
|
105
|
-
kind: z.enum(['issue', 'spec', 'all']).optional().describe('Filter by kind'),
|
|
105
|
+
kind: z.enum(['issue', 'spec', 'arch', 'update', 'all']).optional().describe('Filter by kind'),
|
|
106
106
|
status: z.enum(['open', 'resolved', 'archived', 'all']).optional().describe('Filter by status'),
|
|
107
107
|
project: z.string().optional().describe('Project name, or "*" for all'),
|
|
108
108
|
},
|
package/web/index.html
CHANGED
|
@@ -54,6 +54,8 @@
|
|
|
54
54
|
}
|
|
55
55
|
.badge-issue { background: #fce4e4; color: #c62828; }
|
|
56
56
|
.badge-spec { background: #e3f2fd; color: #1565c0; }
|
|
57
|
+
.badge-arch { background: #fff3e0; color: #e65100; }
|
|
58
|
+
.badge-update { background: #e8f5e9; color: #1b5e20; }
|
|
57
59
|
.badge-open { background: #e8f5e9; color: #2e7d32; }
|
|
58
60
|
.badge-resolved { background: #f3e5f5; color: #6a1b9a; }
|
|
59
61
|
.badge-archived { background: #eceff1; color: #546e7a; }
|
|
@@ -110,6 +112,8 @@
|
|
|
110
112
|
<option value="">All kinds</option>
|
|
111
113
|
<option value="issue">Issues</option>
|
|
112
114
|
<option value="spec">Specs</option>
|
|
115
|
+
<option value="arch">Arch</option>
|
|
116
|
+
<option value="update">Updates</option>
|
|
113
117
|
</select>
|
|
114
118
|
<select id="statusFilter">
|
|
115
119
|
<option value="">All statuses</option>
|
|
@@ -208,6 +212,8 @@
|
|
|
208
212
|
<select id="editKind">
|
|
209
213
|
<option value="issue" ${record.kind === 'issue' ? 'selected' : ''}>Issue</option>
|
|
210
214
|
<option value="spec" ${record.kind === 'spec' ? 'selected' : ''}>Spec</option>
|
|
215
|
+
<option value="arch" ${record.kind === 'arch' ? 'selected' : ''}>Arch</option>
|
|
216
|
+
<option value="update" ${record.kind === 'update' ? 'selected' : ''}>Update</option>
|
|
211
217
|
</select>
|
|
212
218
|
</div>
|
|
213
219
|
<div class="form-group">
|
|
@@ -246,6 +252,8 @@
|
|
|
246
252
|
<select id="editKind">
|
|
247
253
|
<option value="issue">Issue</option>
|
|
248
254
|
<option value="spec">Spec</option>
|
|
255
|
+
<option value="arch">Arch</option>
|
|
256
|
+
<option value="update">Update</option>
|
|
249
257
|
</select>
|
|
250
258
|
</div>
|
|
251
259
|
<div class="form-group">
|