@shrkcrft/inspector 0.1.0-alpha.14 → 0.1.0-alpha.16

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.
@@ -0,0 +1,8 @@
1
+ import type { IDashboardKnowledgeEntryResponse, IDashboardKnowledgeGraphResponse, IDashboardKnowledgeListResponse, IDashboardKnowledgeSimilarResponse } from '@shrkcrft/dashboard-api';
2
+ import type { ISharkcraftInspection } from '../sharkcraft-inspector.js';
3
+ export declare function buildDashboardKnowledgeList(inspection: ISharkcraftInspection): IDashboardKnowledgeListResponse;
4
+ export declare function buildDashboardKnowledgeEntry(inspection: ISharkcraftInspection, id: string): IDashboardKnowledgeEntryResponse;
5
+ export declare function buildDashboardKnowledgeGraph(inspection: ISharkcraftInspection): IDashboardKnowledgeGraphResponse;
6
+ /** Relevance-ranked "more like this" for one entry (lexical, deterministic). */
7
+ export declare function buildDashboardKnowledgeSimilar(inspection: ISharkcraftInspection, id: string): IDashboardKnowledgeSimilarResponse;
8
+ //# sourceMappingURL=dashboard-knowledge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-knowledge.d.ts","sourceRoot":"","sources":["../../src/dashboard/dashboard-knowledge.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAGV,gCAAgC,EAGhC,gCAAgC,EAEhC,+BAA+B,EAG/B,kCAAkC,EAGnC,MAAM,yBAAyB,CAAC;AAQjC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAuHxE,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,qBAAqB,GAChC,+BAA+B,CAoBjC;AAED,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,qBAAqB,EACjC,EAAE,EAAE,MAAM,GACT,gCAAgC,CAkDlC;AAKD,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,qBAAqB,GAChC,gCAAgC,CA8ClC;AAED,gFAAgF;AAChF,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,qBAAqB,EACjC,EAAE,EAAE,MAAM,GACT,kCAAkC,CAqBpC"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Dashboard data builders for the Knowledge explorer page. Pure, deterministic,
3
+ * JSON-serializable — no network, no LLM (the LLM-backed "ask" lives in the CLI
4
+ * dashboard layer so the inspector stays AI-free). The dashboard API server
5
+ * wraps these with @shrkcrft/dashboard-api envelopes.
6
+ */
7
+ import { relative } from 'node:path';
8
+ import { hasActionHints, priorityWeight, searchKnowledge, } from '@shrkcrft/knowledge';
9
+ import { buildKnowledgeGraph, getGraphNode } from "../knowledge-graph.js";
10
+ /** GraphSvg colours by kind — map a knowledge entry's type to one of them. */
11
+ function nodeKindForType(type) {
12
+ if (type === 'rule')
13
+ return 'rule';
14
+ if (type === 'path')
15
+ return 'path';
16
+ if (type === 'template')
17
+ return 'template';
18
+ return 'knowledge';
19
+ }
20
+ function sourceLabel(entry, projectRoot) {
21
+ const origin = entry.source?.origin;
22
+ if (!origin)
23
+ return entry.source?.loader ?? 'local';
24
+ if (origin.startsWith('http'))
25
+ return origin;
26
+ const rel = relative(projectRoot, origin);
27
+ return rel && !rel.startsWith('..') ? rel : origin;
28
+ }
29
+ function commandHint(command, purpose) {
30
+ return { command, purpose, safety: 'read-only' };
31
+ }
32
+ function summaryOf(entry, projectRoot) {
33
+ const summary = {
34
+ id: entry.id,
35
+ title: entry.title,
36
+ type: String(entry.type),
37
+ priority: String(entry.priority),
38
+ scope: [...entry.scope],
39
+ tags: [...entry.tags],
40
+ relatedCount: (entry.related?.length ?? 0),
41
+ hasActionHints: hasActionHints(entry),
42
+ source: sourceLabel(entry, projectRoot),
43
+ };
44
+ return entry.summary ? { ...summary, summary: entry.summary } : summary;
45
+ }
46
+ function mapActionHints(h) {
47
+ return {
48
+ commands: (h.commands ?? []).map((c) => c.command),
49
+ mcpTools: (h.mcpTools ?? []).map((t) => t.tool),
50
+ preferredFlow: [...(h.preferredFlow ?? [])],
51
+ forbiddenActions: [...(h.forbiddenActions ?? [])],
52
+ verificationCommands: [...(h.verificationCommands ?? [])],
53
+ relatedTemplates: [...(h.relatedTemplates ?? [])],
54
+ relatedPathConventions: [...(h.relatedPathConventions ?? [])],
55
+ relatedKnowledge: [...(h.relatedKnowledge ?? [])],
56
+ ...(h.writePolicy ? { writePolicy: String(h.writePolicy) } : {}),
57
+ };
58
+ }
59
+ function detailOf(entry, projectRoot) {
60
+ const examples = (entry.examples ?? []).map((ex) => ({
61
+ ...(ex.title ? { title: ex.title } : {}),
62
+ ...(ex.description ? { description: ex.description } : {}),
63
+ ...(ex.language ? { language: ex.language } : {}),
64
+ ...(ex.code ? { code: ex.code } : {}),
65
+ }));
66
+ const detail = {
67
+ id: entry.id,
68
+ title: entry.title,
69
+ type: String(entry.type),
70
+ priority: String(entry.priority),
71
+ scope: [...entry.scope],
72
+ tags: [...entry.tags],
73
+ appliesWhen: [...entry.appliesWhen],
74
+ content: entry.content,
75
+ related: [...(entry.related ?? [])],
76
+ source: sourceLabel(entry, projectRoot),
77
+ examples,
78
+ };
79
+ const withSummary = entry.summary ? { ...detail, summary: entry.summary } : detail;
80
+ return entry.actionHints
81
+ ? { ...withSummary, actionHints: mapActionHints(entry.actionHints) }
82
+ : withSummary;
83
+ }
84
+ function facetCounts(entries, pick) {
85
+ const counts = new Map();
86
+ for (const e of entries) {
87
+ for (const v of pick(e)) {
88
+ if (!v)
89
+ continue;
90
+ counts.set(v, (counts.get(v) ?? 0) + 1);
91
+ }
92
+ }
93
+ return [...counts.entries()]
94
+ .map(([value, count]) => ({ value, count }))
95
+ .sort((a, b) => b.count - a.count || a.value.localeCompare(b.value));
96
+ }
97
+ /** Sort: highest priority first, then alphabetical by id. */
98
+ function byPriorityThenId(a, b) {
99
+ const w = priorityWeight(b.priority) - priorityWeight(a.priority);
100
+ return w !== 0 ? w : a.id.localeCompare(b.id);
101
+ }
102
+ function roundScore(n) {
103
+ return Math.round(n * 100) / 100;
104
+ }
105
+ function computeInsights(entries) {
106
+ const byPriority = { critical: 0, high: 0, medium: 0, low: 0 };
107
+ let withoutActionHints = 0;
108
+ let withoutSummary = 0;
109
+ let orphans = 0;
110
+ for (const e of entries) {
111
+ const p = String(e.priority);
112
+ if (p === 'critical' || p === 'high' || p === 'medium' || p === 'low')
113
+ byPriority[p] += 1;
114
+ if (!hasActionHints(e))
115
+ withoutActionHints += 1;
116
+ if (!e.summary)
117
+ withoutSummary += 1;
118
+ if (!(e.related?.length) && !(e.actionHints?.relatedKnowledge?.length))
119
+ orphans += 1;
120
+ }
121
+ return { byPriority, withoutActionHints, withoutSummary, orphans };
122
+ }
123
+ export function buildDashboardKnowledgeList(inspection) {
124
+ const entries = inspection.knowledgeEntries;
125
+ const sorted = [...entries].sort(byPriorityThenId);
126
+ return {
127
+ available: entries.length > 0,
128
+ total: entries.length,
129
+ entries: sorted.map((e) => summaryOf(e, inspection.projectRoot)),
130
+ facets: {
131
+ types: facetCounts(entries, (e) => [String(e.type)]),
132
+ scopes: facetCounts(entries, (e) => e.scope),
133
+ tags: facetCounts(entries, (e) => e.tags),
134
+ priorities: facetCounts(entries, (e) => [String(e.priority)]),
135
+ },
136
+ insights: computeInsights(entries),
137
+ commandHints: [
138
+ commandHint('shrk knowledge list', 'List every knowledge entry'),
139
+ commandHint('shrk knowledge search "<query>"', 'Rank entries by relevance to a query'),
140
+ commandHint('shrk knowledge get <id>', 'Read a single entry in the terminal'),
141
+ ],
142
+ };
143
+ }
144
+ export function buildDashboardKnowledgeEntry(inspection, id) {
145
+ const entries = inspection.knowledgeEntries;
146
+ const entry = entries.find((e) => e.id === id);
147
+ if (!entry) {
148
+ return { found: false, inbound: [], outbound: [], related: [], commandHints: [] };
149
+ }
150
+ const graph = buildKnowledgeGraph(inspection);
151
+ const located = getGraphNode(graph, { id });
152
+ // Graph edge endpoints are namespaced node keys (`kind:id`), so resolve the
153
+ // raw id + kind through byId rather than echoing the key.
154
+ const toNeighbor = (endpointKey, relation, why) => {
155
+ const node = graph.byId.get(endpointKey);
156
+ // Edges only ever target nodes present in the graph, but if a lookup ever
157
+ // misses, strip the `kind:` prefix so a raw id (not the namespaced key)
158
+ // still reaches the client — `id` must be a clickable entry id.
159
+ const colon = endpointKey.indexOf(':');
160
+ const fallbackId = colon >= 0 ? endpointKey.slice(colon + 1) : endpointKey;
161
+ return {
162
+ id: node?.id ?? fallbackId,
163
+ kind: node?.kind ?? 'knowledge',
164
+ relation,
165
+ why,
166
+ };
167
+ };
168
+ const inbound = (located?.incoming ?? []).map((e) => toNeighbor(e.from, e.relation, e.why));
169
+ const outbound = (located?.outgoing ?? []).map((e) => toNeighbor(e.to, e.relation, e.why));
170
+ const relatedIds = [
171
+ ...new Set([...(entry.related ?? []), ...(entry.actionHints?.relatedKnowledge ?? [])]),
172
+ ];
173
+ const related = relatedIds
174
+ .map((rid) => entries.find((e) => e.id === rid))
175
+ .filter((e) => Boolean(e))
176
+ .map((e) => summaryOf(e, inspection.projectRoot));
177
+ return {
178
+ found: true,
179
+ entry: detailOf(entry, inspection.projectRoot),
180
+ inbound,
181
+ outbound,
182
+ related,
183
+ commandHints: [
184
+ commandHint(`shrk knowledge get ${entry.id}`, 'Read this entry in the terminal'),
185
+ commandHint(`shrk graph node ${entry.id}`, 'Inspect this node and its edges'),
186
+ ],
187
+ };
188
+ }
189
+ /** Cap the rendered graph — the ring layout stays legible up to ~120 nodes. */
190
+ const MAX_GRAPH_NODES = 120;
191
+ export function buildDashboardKnowledgeGraph(inspection) {
192
+ const all = [...inspection.knowledgeEntries].sort(byPriorityThenId);
193
+ const truncated = all.length > MAX_GRAPH_NODES;
194
+ const entries = all.slice(0, MAX_GRAPH_NODES);
195
+ const ids = new Set(entries.map((e) => e.id));
196
+ const nodes = entries.map((e) => ({
197
+ id: e.id,
198
+ kind: nodeKindForType(String(e.type)),
199
+ label: e.title,
200
+ }));
201
+ const edges = [];
202
+ const seen = new Set();
203
+ const addEdge = (from, to, kind) => {
204
+ if (from === to || !ids.has(from) || !ids.has(to))
205
+ return;
206
+ const key = from < to ? `${from}|${to}|${kind}` : `${to}|${from}|${kind}`;
207
+ if (seen.has(key))
208
+ return;
209
+ seen.add(key);
210
+ edges.push({ from, to, kind });
211
+ };
212
+ // Semantic edges: explicit cross-references.
213
+ for (const e of entries) {
214
+ for (const t of [...(e.related ?? []), ...(e.actionHints?.relatedKnowledge ?? [])]) {
215
+ addEdge(e.id, t, 'related');
216
+ }
217
+ }
218
+ // Scope clusters: chain entries that share a scope so the graph forms loose,
219
+ // legible neighbourhoods instead of an O(n²) hairball.
220
+ const byScope = new Map();
221
+ for (const e of entries) {
222
+ for (const s of e.scope) {
223
+ const list = byScope.get(s) ?? [];
224
+ list.push(e.id);
225
+ byScope.set(s, list);
226
+ }
227
+ }
228
+ for (const group of byScope.values()) {
229
+ for (let i = 1; i < group.length; i += 1) {
230
+ addEdge(group[i - 1], group[i], 'scope');
231
+ }
232
+ }
233
+ return { available: entries.length > 0, nodes, edges, truncated };
234
+ }
235
+ /** Relevance-ranked "more like this" for one entry (lexical, deterministic). */
236
+ export function buildDashboardKnowledgeSimilar(inspection, id) {
237
+ const entries = inspection.knowledgeEntries;
238
+ const entry = entries.find((e) => e.id === id);
239
+ if (!entry)
240
+ return { id, available: false, similar: [] };
241
+ // Use the entry's own signature (title + tags + scope) as the query. With no
242
+ // signature there's nothing to match on — return empty rather than letting
243
+ // searchKnowledge fall back to a priority-only ranking of everything.
244
+ const query = [entry.title, ...entry.tags, ...entry.scope].join(' ').trim();
245
+ if (!query)
246
+ return { id, available: false, similar: [] };
247
+ const results = searchKnowledge(entries, { query, limit: 8 });
248
+ const similar = results
249
+ .filter((r) => r.entry.id !== id)
250
+ .slice(0, 6)
251
+ .map((r) => ({
252
+ id: r.entry.id,
253
+ title: r.entry.title,
254
+ type: String(r.entry.type),
255
+ score: roundScore(r.score),
256
+ reasons: [...new Set(r.reasons.map((x) => x.field))].slice(0, 4),
257
+ }));
258
+ return { id, available: similar.length > 0, similar };
259
+ }
package/dist/index.d.ts CHANGED
@@ -47,6 +47,7 @@ export * from './dev-session.js';
47
47
  export * from './dev-session-report.js';
48
48
  export * from './dev-session-html.js';
49
49
  export * from './dashboard/dashboard-data.js';
50
+ export * from './dashboard/dashboard-knowledge.js';
50
51
  export * from './git-helpers.js';
51
52
  export * from './boundaries-changed-only.js';
52
53
  export * from './helper-registry.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -47,6 +47,7 @@ export * from "./dev-session.js";
47
47
  export * from "./dev-session-report.js";
48
48
  export * from "./dev-session-html.js";
49
49
  export * from "./dashboard/dashboard-data.js";
50
+ export * from "./dashboard/dashboard-knowledge.js";
50
51
  export * from "./git-helpers.js";
51
52
  export * from "./boundaries-changed-only.js";
52
53
  export * from "./helper-registry.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shrkcrft/inspector",
3
- "version": "0.1.0-alpha.14",
3
+ "version": "0.1.0-alpha.16",
4
4
  "description": "SharkCraft inspector: project overview, doctor checks, AI-agent instructions.",
5
5
  "license": "MIT",
6
6
  "author": "SharkCraft contributors",
@@ -42,22 +42,22 @@
42
42
  "typecheck": "tsc --noEmit -p tsconfig.json"
43
43
  },
44
44
  "dependencies": {
45
- "@shrkcrft/core": "^0.1.0-alpha.14",
46
- "@shrkcrft/config": "^0.1.0-alpha.14",
47
- "@shrkcrft/workspace": "^0.1.0-alpha.14",
48
- "@shrkcrft/knowledge": "^0.1.0-alpha.14",
49
- "@shrkcrft/rules": "^0.1.0-alpha.14",
50
- "@shrkcrft/paths": "^0.1.0-alpha.14",
51
- "@shrkcrft/templates": "^0.1.0-alpha.14",
52
- "@shrkcrft/context": "^0.1.0-alpha.14",
53
- "@shrkcrft/pipelines": "^0.1.0-alpha.14",
54
- "@shrkcrft/packs": "^0.1.0-alpha.14",
55
- "@shrkcrft/presets": "^0.1.0-alpha.14",
56
- "@shrkcrft/boundaries": "^0.1.0-alpha.14",
57
- "@shrkcrft/generator": "^0.1.0-alpha.14",
58
- "@shrkcrft/importer": "^0.1.0-alpha.14",
59
- "@shrkcrft/plugin-api": "^0.1.0-alpha.14",
60
- "@shrkcrft/dashboard-api": "^0.1.0-alpha.14",
45
+ "@shrkcrft/core": "^0.1.0-alpha.16",
46
+ "@shrkcrft/config": "^0.1.0-alpha.16",
47
+ "@shrkcrft/workspace": "^0.1.0-alpha.16",
48
+ "@shrkcrft/knowledge": "^0.1.0-alpha.16",
49
+ "@shrkcrft/rules": "^0.1.0-alpha.16",
50
+ "@shrkcrft/paths": "^0.1.0-alpha.16",
51
+ "@shrkcrft/templates": "^0.1.0-alpha.16",
52
+ "@shrkcrft/context": "^0.1.0-alpha.16",
53
+ "@shrkcrft/pipelines": "^0.1.0-alpha.16",
54
+ "@shrkcrft/packs": "^0.1.0-alpha.16",
55
+ "@shrkcrft/presets": "^0.1.0-alpha.16",
56
+ "@shrkcrft/boundaries": "^0.1.0-alpha.16",
57
+ "@shrkcrft/generator": "^0.1.0-alpha.16",
58
+ "@shrkcrft/importer": "^0.1.0-alpha.16",
59
+ "@shrkcrft/plugin-api": "^0.1.0-alpha.16",
60
+ "@shrkcrft/dashboard-api": "^0.1.0-alpha.16",
61
61
  "typescript": "^5.6.0"
62
62
  },
63
63
  "publishConfig": {