@sfdxy/sf-documentation-knowledge 1.1.0 → 1.3.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/README.md +19 -3
- package/dist/cli/collect.js +5 -1
- package/dist/cli/collect.js.map +1 -1
- package/dist/cli/data-quality.d.ts +3 -0
- package/dist/cli/data-quality.d.ts.map +1 -0
- package/dist/cli/data-quality.js +213 -0
- package/dist/cli/data-quality.js.map +1 -0
- package/dist/cli/discover.js +5 -1
- package/dist/cli/discover.js.map +1 -1
- package/dist/mcp/server.js +317 -21
- package/dist/mcp/server.js.map +1 -1
- package/dist/tests/retrieval-quality.test.d.ts +2 -0
- package/dist/tests/retrieval-quality.test.d.ts.map +1 -0
- package/dist/tests/retrieval-quality.test.js +161 -0
- package/dist/tests/retrieval-quality.test.js.map +1 -0
- package/dist/utils/graph-query.d.ts +34 -6
- package/dist/utils/graph-query.d.ts.map +1 -1
- package/dist/utils/graph-query.js +231 -32
- package/dist/utils/graph-query.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -114,9 +114,9 @@ npm run mcp:start
|
|
|
114
114
|
|
|
115
115
|
## MCP Server
|
|
116
116
|
|
|
117
|
-
The MCP server loads the full 53k-node knowledge graph into memory on startup (~
|
|
117
|
+
The MCP server loads the full 53k-node knowledge graph and 18,000+ code snippets into memory on startup (~5s) and serves all queries instantly.
|
|
118
118
|
|
|
119
|
-
### Tools
|
|
119
|
+
### Tools (9)
|
|
120
120
|
|
|
121
121
|
| Tool | Purpose | Example Usage |
|
|
122
122
|
|---|---|---|
|
|
@@ -125,14 +125,30 @@ The MCP server loads the full 53k-node knowledge graph into memory on startup (~
|
|
|
125
125
|
| `sf_graph_query` | Navigate the knowledge graph — related docs, namespaces, services | *"Show all docs in the System namespace"* |
|
|
126
126
|
| `sf_list_domains` | List all available domains, filter by service category | *"List analytics domains"* |
|
|
127
127
|
| `sf_apex_lookup` | Look up an Apex class with full documentation | *"Look up the String class"* |
|
|
128
|
+
| `sf_code_examples` | Find working code snippets by topic, language, or domain | *"Show batch apex code examples"* |
|
|
129
|
+
| `sf_object_reference` | Look up Salesforce objects and fields (6,500+ ref pages) | *"Look up Account.Industry field"* |
|
|
130
|
+
| `sf_explain_error` | Decode error messages with context and resolution steps | *"Explain UNABLE_TO_LOCK_ROW"* |
|
|
131
|
+
| `sf_limits` | Governor limits lookup — exact numbers for 15 categories | *"What are SOQL limits?"* |
|
|
128
132
|
|
|
129
|
-
### Prompt Templates
|
|
133
|
+
### Prompt Templates (4)
|
|
130
134
|
|
|
131
135
|
| Prompt | What It Does | Arguments |
|
|
132
136
|
|---|---|---|
|
|
133
137
|
| `explore_api` | Walk through a Salesforce API — endpoints, auth, best practices | `api`: API name (e.g., "REST API") |
|
|
134
138
|
| `debug_apex` | Debug an Apex issue — class lookup, error patterns, examples | `topic`: class/error (e.g., "System.QueryException") |
|
|
135
139
|
| `compare_services` | Compare Salesforce products by documentation coverage | `services`: categories (e.g., "analytics vs commerce") |
|
|
140
|
+
| `write_apex` | Write production-ready Apex — gathers limits, patterns, examples first | `task`: what to build (e.g., "batch job to update Accounts") |
|
|
141
|
+
|
|
142
|
+
### Resources (4)
|
|
143
|
+
|
|
144
|
+
Agents can read these without making a tool call:
|
|
145
|
+
|
|
146
|
+
| Resource URI | Content |
|
|
147
|
+
|---|---|
|
|
148
|
+
| `sf://overview` | System stats, available tools, quick start guide |
|
|
149
|
+
| `sf://domains` | All 121 documentation domains |
|
|
150
|
+
| `sf://namespaces` | All 143 Apex namespaces with doc counts |
|
|
151
|
+
| `sf://services` | All 16 service categories with domain counts |
|
|
136
152
|
|
|
137
153
|
---
|
|
138
154
|
|
package/dist/cli/collect.js
CHANGED
|
@@ -65,7 +65,11 @@ program
|
|
|
65
65
|
priority: "P2",
|
|
66
66
|
atlas: atlasKey,
|
|
67
67
|
description: entry.shortdesc.slice(0, 100),
|
|
68
|
-
tags: [
|
|
68
|
+
tags: [
|
|
69
|
+
typeof entry.service === "string"
|
|
70
|
+
? entry.service.toLowerCase().replace(/\s+/g, "-")
|
|
71
|
+
: "",
|
|
72
|
+
].filter(Boolean),
|
|
69
73
|
};
|
|
70
74
|
try {
|
|
71
75
|
log.info({ id: dynamicDomain.id, name: dynamicDomain.name }, "Collecting discovered deliverable");
|
package/dist/cli/collect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collect.js","sourceRoot":"","sources":["../../src/cli/collect.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"collect.js","sourceRoot":"","sources":["../../src/cli/collect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-quality.d.ts","sourceRoot":"","sources":["../../src/cli/data-quality.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI: data-quality — Audit knowledge files for quality issues.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* npm run quality # Run full audit
|
|
7
|
+
* npm run quality -- -d apex-guide # Audit a specific domain
|
|
8
|
+
*/
|
|
9
|
+
import { Command } from "commander";
|
|
10
|
+
import fs from "fs-extra";
|
|
11
|
+
import path from "node:path";
|
|
12
|
+
import { createChildLogger } from "../utils/logger.js";
|
|
13
|
+
const log = createChildLogger("cli:data-quality");
|
|
14
|
+
const program = new Command();
|
|
15
|
+
const KNOWLEDGE_DIR = path.resolve(process.env.SF_KNOWLEDGE_DIR || "knowledge/current");
|
|
16
|
+
async function auditDomain(domainId) {
|
|
17
|
+
const domainPath = path.join(KNOWLEDGE_DIR, domainId);
|
|
18
|
+
const result = { domain: domainId, totalFiles: 0, issues: [] };
|
|
19
|
+
if (!(await fs.pathExists(domainPath))) {
|
|
20
|
+
log.warn({ domainId }, "Domain directory not found");
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
const files = (await fs.readdir(domainPath)).filter((f) => f.endsWith(".md") && f !== "_index.md");
|
|
24
|
+
result.totalFiles = files.length;
|
|
25
|
+
// Track titles for duplicate detection
|
|
26
|
+
const titleMap = new Map();
|
|
27
|
+
for (const file of files) {
|
|
28
|
+
const filePath = path.join(domainPath, file);
|
|
29
|
+
let content;
|
|
30
|
+
try {
|
|
31
|
+
content = await fs.readFile(filePath, "utf-8");
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const lines = content.split("\n");
|
|
37
|
+
// Check 1: Missing or malformed frontmatter
|
|
38
|
+
if (!content.startsWith("---")) {
|
|
39
|
+
result.issues.push({
|
|
40
|
+
file,
|
|
41
|
+
type: "missing-frontmatter",
|
|
42
|
+
detail: "File does not start with YAML frontmatter",
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
// Check 2: Stub files (very little content after frontmatter)
|
|
46
|
+
const fmEnd = content.indexOf("---", 4);
|
|
47
|
+
if (fmEnd > 0) {
|
|
48
|
+
const body = content.slice(fmEnd + 3).trim();
|
|
49
|
+
if (body.length < 100) {
|
|
50
|
+
result.issues.push({
|
|
51
|
+
file,
|
|
52
|
+
type: "stub-file",
|
|
53
|
+
detail: `Only ${body.length} chars of content after frontmatter`,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Check 3: Duplicate H1 heading (title repeated as H1 and blockquote)
|
|
58
|
+
const h1Lines = lines.filter((l) => l.startsWith("# "));
|
|
59
|
+
if (h1Lines.length > 1) {
|
|
60
|
+
const titles = h1Lines.map((l) => l.replace(/^#+\s*/, "").trim());
|
|
61
|
+
const unique = new Set(titles);
|
|
62
|
+
if (unique.size < titles.length) {
|
|
63
|
+
result.issues.push({
|
|
64
|
+
file,
|
|
65
|
+
type: "duplicate-heading",
|
|
66
|
+
detail: `H1 heading "${titles[0]}" appears ${titles.length} times`,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Check 4: Broken cross-references (raw atlas URIs)
|
|
71
|
+
const atlasRefs = content.match(/atlas\.en-us\.\w+\.meta\/\w+\/[\w.-]+\.htm/g);
|
|
72
|
+
if (atlasRefs && atlasRefs.length > 0) {
|
|
73
|
+
result.issues.push({
|
|
74
|
+
file,
|
|
75
|
+
type: "broken-xref",
|
|
76
|
+
detail: `${atlasRefs.length} raw atlas URI(s) — not resolvable by agents`,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
// Check 5: Token-heavy files (estimated > 8000 tokens)
|
|
80
|
+
const fmMatch = content.match(/estimatedTokens:\s*(\d+)/);
|
|
81
|
+
if (fmMatch) {
|
|
82
|
+
const tokens = parseInt(fmMatch[1], 10);
|
|
83
|
+
if (tokens > 8000) {
|
|
84
|
+
result.issues.push({
|
|
85
|
+
file,
|
|
86
|
+
type: "token-heavy",
|
|
87
|
+
detail: `~${tokens} tokens — may overwhelm agent context`,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Check 6: Weak keywords (just first few words of title)
|
|
92
|
+
const kwMatch = content.match(/keywords:\s*\[([^\]]*)\]/);
|
|
93
|
+
if (kwMatch) {
|
|
94
|
+
const keywords = kwMatch[1]
|
|
95
|
+
.split(",")
|
|
96
|
+
.map((k) => k.trim().replace(/"/g, ""));
|
|
97
|
+
if (keywords.length <= 3 ||
|
|
98
|
+
keywords.every((k) => k.length < 5)) {
|
|
99
|
+
result.issues.push({
|
|
100
|
+
file,
|
|
101
|
+
type: "weak-keywords",
|
|
102
|
+
detail: `Only ${keywords.length} keywords: [${keywords.join(", ")}]`,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Track titles for duplicate detection across files
|
|
107
|
+
const titleMatch = content.match(/title:\s*"?([^"\n]+)"?/);
|
|
108
|
+
if (titleMatch) {
|
|
109
|
+
const title = titleMatch[1].trim();
|
|
110
|
+
if (!titleMap.has(title))
|
|
111
|
+
titleMap.set(title, []);
|
|
112
|
+
titleMap.get(title).push(file);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Check cross-domain title duplicates
|
|
116
|
+
for (const [title, fileList] of titleMap) {
|
|
117
|
+
if (fileList.length > 1) {
|
|
118
|
+
result.issues.push({
|
|
119
|
+
file: fileList.join(", "),
|
|
120
|
+
type: "duplicate-title",
|
|
121
|
+
detail: `Title "${title}" appears in ${fileList.length} files`,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
127
|
+
program
|
|
128
|
+
.name("data-quality")
|
|
129
|
+
.description("Audit knowledge files for quality issues")
|
|
130
|
+
.option("-d, --domain <id>", "Audit a specific domain")
|
|
131
|
+
.option("-j, --json", "Output as JSON")
|
|
132
|
+
.action(async (options) => {
|
|
133
|
+
const domains = [];
|
|
134
|
+
if (options.domain) {
|
|
135
|
+
domains.push(options.domain);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
const entries = await fs.readdir(KNOWLEDGE_DIR);
|
|
139
|
+
for (const entry of entries) {
|
|
140
|
+
const stat = await fs.stat(path.join(KNOWLEDGE_DIR, entry));
|
|
141
|
+
if (stat.isDirectory())
|
|
142
|
+
domains.push(entry);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
log.info({ domainCount: domains.length }, "Starting quality audit");
|
|
146
|
+
const results = [];
|
|
147
|
+
for (const domain of domains) {
|
|
148
|
+
results.push(await auditDomain(domain));
|
|
149
|
+
}
|
|
150
|
+
if (options.json) {
|
|
151
|
+
console.log(JSON.stringify(results, null, 2));
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
// Summary report
|
|
155
|
+
const totalFiles = results.reduce((s, r) => s + r.totalFiles, 0);
|
|
156
|
+
const totalIssues = results.reduce((s, r) => s + r.issues.length, 0);
|
|
157
|
+
// Group by issue type
|
|
158
|
+
const byType = new Map();
|
|
159
|
+
for (const r of results) {
|
|
160
|
+
for (const issue of r.issues) {
|
|
161
|
+
byType.set(issue.type, (byType.get(issue.type) || 0) + 1);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
console.log("\n╔═══════════════════════════════════════╗");
|
|
165
|
+
console.log("║ Knowledge Data Quality Report ║");
|
|
166
|
+
console.log("╚═══════════════════════════════════════╝\n");
|
|
167
|
+
console.log(`📁 Domains audited: ${results.length}`);
|
|
168
|
+
console.log(`📄 Files audited: ${totalFiles}`);
|
|
169
|
+
console.log(`⚠️ Total issues: ${totalIssues}\n`);
|
|
170
|
+
console.log("--- Issues by Type ---\n");
|
|
171
|
+
for (const [type, count] of [...byType.entries()].sort((a, b) => b[1] - a[1])) {
|
|
172
|
+
const icon = type === "broken-xref"
|
|
173
|
+
? "🔗"
|
|
174
|
+
: type === "stub-file"
|
|
175
|
+
? "📋"
|
|
176
|
+
: type === "duplicate-heading"
|
|
177
|
+
? "🔄"
|
|
178
|
+
: type === "token-heavy"
|
|
179
|
+
? "📏"
|
|
180
|
+
: type === "weak-keywords"
|
|
181
|
+
? "🏷️"
|
|
182
|
+
: type === "duplicate-title"
|
|
183
|
+
? "👯"
|
|
184
|
+
: "❓";
|
|
185
|
+
console.log(` ${icon} ${type}: ${count}`);
|
|
186
|
+
}
|
|
187
|
+
// Top offenders (domains with most issues)
|
|
188
|
+
const topDomains = results
|
|
189
|
+
.filter((r) => r.issues.length > 0)
|
|
190
|
+
.sort((a, b) => b.issues.length - a.issues.length)
|
|
191
|
+
.slice(0, 10);
|
|
192
|
+
if (topDomains.length > 0) {
|
|
193
|
+
console.log("\n--- Top 10 Domains by Issue Count ---\n");
|
|
194
|
+
for (const r of topDomains) {
|
|
195
|
+
console.log(` ${r.domain}: ${r.issues.length} issues (${r.totalFiles} files)`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Detailed issues for specific domain audit
|
|
199
|
+
if (options.domain) {
|
|
200
|
+
const r = results[0];
|
|
201
|
+
if (r.issues.length > 0) {
|
|
202
|
+
console.log(`\n--- Detailed Issues for ${r.domain} ---\n`);
|
|
203
|
+
for (const issue of r.issues.slice(0, 50)) {
|
|
204
|
+
console.log(` [${issue.type}] ${issue.file}: ${issue.detail}`);
|
|
205
|
+
}
|
|
206
|
+
if (r.issues.length > 50) {
|
|
207
|
+
console.log(` ... and ${r.issues.length - 50} more issues`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
program.parse();
|
|
213
|
+
//# sourceMappingURL=data-quality.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-quality.js","sourceRoot":"","sources":["../../src/cli/data-quality.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/discover.js
CHANGED
|
@@ -80,7 +80,11 @@ function printEntries(entries) {
|
|
|
80
80
|
}
|
|
81
81
|
function printDomainConfig(entry) {
|
|
82
82
|
const id = deliverableToId(entry.deliverable);
|
|
83
|
-
const tags = [
|
|
83
|
+
const tags = [
|
|
84
|
+
typeof entry.service === "string"
|
|
85
|
+
? entry.service.toLowerCase().replace(/\s+/g, "-")
|
|
86
|
+
: "",
|
|
87
|
+
].filter(Boolean);
|
|
84
88
|
console.log(` {
|
|
85
89
|
id: "${id}",
|
|
86
90
|
name: "${entry.title}",
|
package/dist/cli/discover.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/cli/discover.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/cli/discover.ts"],"names":[],"mappings":"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"}
|