@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 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 (~3s) and serves all queries instantly.
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
 
@@ -65,7 +65,11 @@ program
65
65
  priority: "P2",
66
66
  atlas: atlasKey,
67
67
  description: entry.shortdesc.slice(0, 100),
68
- tags: [entry.service.toLowerCase().replace(/\s+/g, "-")].filter(Boolean),
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");
@@ -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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=data-quality.d.ts.map
@@ -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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"}
@@ -80,7 +80,11 @@ function printEntries(entries) {
80
80
  }
81
81
  function printDomainConfig(entry) {
82
82
  const id = deliverableToId(entry.deliverable);
83
- const tags = [entry.service.toLowerCase().replace(/\s+/g, "-")].filter(Boolean);
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}",
@@ -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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"}