@mcp-graph-workflow/mcp-graph 5.29.1 → 5.30.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/dist/api/routes/docs-reference.d.ts +3 -0
- package/dist/api/routes/docs-reference.d.ts.map +1 -1
- package/dist/api/routes/docs-reference.js +90 -28
- package/dist/api/routes/docs-reference.js.map +1 -1
- package/dist/core/docs/generate-docs-manifest.d.ts +22 -0
- package/dist/core/docs/generate-docs-manifest.d.ts.map +1 -0
- package/dist/core/docs/generate-docs-manifest.js +58 -0
- package/dist/core/docs/generate-docs-manifest.js.map +1 -0
- package/dist/docs-manifest.json +1202 -0
- package/package.json +3 -2
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Docs Reference API — serves introspected tool/route catalogs and markdown docs.
|
|
3
3
|
* Powers the Docs tab in the dashboard.
|
|
4
|
+
*
|
|
5
|
+
* In dev mode (source files present), introspects live from filesystem.
|
|
6
|
+
* In npm-installed mode, falls back to a pre-computed docs-manifest.json.
|
|
4
7
|
*/
|
|
5
8
|
import { Router } from "express";
|
|
6
9
|
export declare function createDocsReferenceRouter(getBasePath: () => string): Router;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-reference.d.ts","sourceRoot":"","sources":["../../../src/api/routes/docs-reference.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"docs-reference.d.ts","sourceRoot":"","sources":["../../../src/api/routes/docs-reference.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AA0IjC,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,MAAM,GAAG,MAAM,CAiG3E"}
|
|
@@ -1,13 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Docs Reference API — serves introspected tool/route catalogs and markdown docs.
|
|
3
3
|
* Powers the Docs tab in the dashboard.
|
|
4
|
+
*
|
|
5
|
+
* In dev mode (source files present), introspects live from filesystem.
|
|
6
|
+
* In npm-installed mode, falls back to a pre-computed docs-manifest.json.
|
|
4
7
|
*/
|
|
5
8
|
import { Router } from "express";
|
|
6
9
|
import { readFileSync, existsSync, readdirSync, statSync } from "node:fs";
|
|
7
10
|
import path from "node:path";
|
|
11
|
+
import { fileURLToPath } from "node:url";
|
|
8
12
|
import { introspectTools } from "../../core/docs/tool-introspector.js";
|
|
9
13
|
import { introspectRoutes } from "../../core/docs/route-introspector.js";
|
|
10
14
|
import { logger } from "../../core/utils/logger.js";
|
|
15
|
+
// ── Manifest loader (npm-installed fallback) ───────
|
|
16
|
+
let _manifest; // undefined = not loaded yet
|
|
17
|
+
function loadManifest() {
|
|
18
|
+
if (_manifest !== undefined)
|
|
19
|
+
return _manifest;
|
|
20
|
+
try {
|
|
21
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
22
|
+
const __dirname = path.dirname(__filename);
|
|
23
|
+
// dist/api/routes/ → dist/docs-manifest.json
|
|
24
|
+
const manifestPath = path.resolve(__dirname, "..", "..", "docs-manifest.json");
|
|
25
|
+
if (existsSync(manifestPath)) {
|
|
26
|
+
const raw = readFileSync(manifestPath, "utf-8");
|
|
27
|
+
_manifest = JSON.parse(raw);
|
|
28
|
+
logger.debug("docs:manifest:loaded", { path: manifestPath, tools: _manifest.tools.length, routes: _manifest.routes.length, docs: _manifest.docs.length });
|
|
29
|
+
return _manifest;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
logger.warn("docs:manifest:error", { error: String(err) });
|
|
34
|
+
}
|
|
35
|
+
_manifest = null;
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
11
38
|
// ── Cached introspection results ────────────────────
|
|
12
39
|
let _toolsCache = null;
|
|
13
40
|
let _routesCache = null;
|
|
@@ -16,40 +43,65 @@ const CACHE_TTL_MS = 60_000; // 1 minute
|
|
|
16
43
|
function getTools(basePath) {
|
|
17
44
|
if (_toolsCache && Date.now() - _cacheTimestamp < CACHE_TTL_MS)
|
|
18
45
|
return _toolsCache;
|
|
46
|
+
// Try live filesystem first (dev mode)
|
|
19
47
|
const toolsDir = path.join(basePath, "src", "mcp", "tools");
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
48
|
+
if (existsSync(toolsDir)) {
|
|
49
|
+
_toolsCache = introspectTools(toolsDir);
|
|
50
|
+
_cacheTimestamp = Date.now();
|
|
51
|
+
return _toolsCache;
|
|
52
|
+
}
|
|
53
|
+
// Fallback to manifest (npm-installed mode)
|
|
54
|
+
const manifest = loadManifest();
|
|
55
|
+
return manifest?.tools ?? [];
|
|
23
56
|
}
|
|
24
57
|
function getRoutes(basePath) {
|
|
25
58
|
if (_routesCache && Date.now() - _cacheTimestamp < CACHE_TTL_MS)
|
|
26
59
|
return _routesCache;
|
|
60
|
+
// Try live filesystem first (dev mode)
|
|
27
61
|
const apiDir = path.join(basePath, "src", "api");
|
|
28
|
-
|
|
29
|
-
|
|
62
|
+
if (existsSync(apiDir)) {
|
|
63
|
+
_routesCache = introspectRoutes(apiDir);
|
|
64
|
+
_cacheTimestamp = Date.now();
|
|
65
|
+
return _routesCache;
|
|
66
|
+
}
|
|
67
|
+
// Fallback to manifest (npm-installed mode)
|
|
68
|
+
const manifest = loadManifest();
|
|
69
|
+
return manifest?.routes ?? [];
|
|
30
70
|
}
|
|
31
71
|
function discoverDocs(basePath) {
|
|
72
|
+
// Try live filesystem first (dev mode)
|
|
32
73
|
const docsDir = path.join(basePath, "docs");
|
|
33
|
-
if (
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
.
|
|
49
|
-
|
|
74
|
+
if (existsSync(docsDir)) {
|
|
75
|
+
const entries = [];
|
|
76
|
+
const categories = readdirSync(docsDir).filter((d) => {
|
|
77
|
+
const full = path.join(docsDir, d);
|
|
78
|
+
return existsSync(full) && statSync(full).isDirectory();
|
|
79
|
+
});
|
|
80
|
+
for (const category of categories) {
|
|
81
|
+
const catDir = path.join(docsDir, category);
|
|
82
|
+
const files = readdirSync(catDir).filter((f) => f.endsWith(".md"));
|
|
83
|
+
for (const file of files) {
|
|
84
|
+
const slug = `${category}/${file.replace(/\.md$/, "")}`;
|
|
85
|
+
const title = file
|
|
86
|
+
.replace(/\.md$/, "")
|
|
87
|
+
.replace(/-/g, " ")
|
|
88
|
+
.replace(/\b\w/g, (c) => c.toUpperCase());
|
|
89
|
+
entries.push({ slug, title, category, path: path.join(catDir, file) });
|
|
90
|
+
}
|
|
50
91
|
}
|
|
92
|
+
return entries;
|
|
51
93
|
}
|
|
52
|
-
|
|
94
|
+
// Fallback to manifest (npm-installed mode)
|
|
95
|
+
const manifest = loadManifest();
|
|
96
|
+
if (manifest) {
|
|
97
|
+
return manifest.docs.map((d) => ({
|
|
98
|
+
slug: d.slug,
|
|
99
|
+
title: d.title,
|
|
100
|
+
category: d.category,
|
|
101
|
+
path: "", // no filesystem path in manifest mode
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
return [];
|
|
53
105
|
}
|
|
54
106
|
// ── Router ──────────────────────────────────────────
|
|
55
107
|
export function createDocsReferenceRouter(getBasePath) {
|
|
@@ -118,14 +170,24 @@ export function createDocsReferenceRouter(getBasePath) {
|
|
|
118
170
|
router.get("/:category/:slug", (req, res, next) => {
|
|
119
171
|
try {
|
|
120
172
|
const { category, slug } = req.params;
|
|
173
|
+
// Try live filesystem first (dev mode)
|
|
121
174
|
const filePath = path.join(getBasePath(), "docs", category, `${slug}.md`);
|
|
122
|
-
if (
|
|
123
|
-
|
|
175
|
+
if (existsSync(filePath)) {
|
|
176
|
+
const content = readFileSync(filePath, "utf-8");
|
|
177
|
+
logger.debug("docs:read", { category, slug });
|
|
178
|
+
res.json({ slug: `${category}/${slug}`, content });
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
// Fallback to manifest (npm-installed mode)
|
|
182
|
+
const manifest = loadManifest();
|
|
183
|
+
const fullSlug = `${category}/${slug}`;
|
|
184
|
+
const entry = manifest?.docs.find((d) => d.slug === fullSlug);
|
|
185
|
+
if (entry) {
|
|
186
|
+
logger.debug("docs:read:manifest", { category, slug });
|
|
187
|
+
res.json({ slug: fullSlug, content: entry.content });
|
|
124
188
|
return;
|
|
125
189
|
}
|
|
126
|
-
|
|
127
|
-
logger.debug("docs:read", { category, slug });
|
|
128
|
-
res.json({ slug: `${category}/${slug}`, content });
|
|
190
|
+
res.status(404).json({ error: `Doc not found: ${category}/${slug}` });
|
|
129
191
|
}
|
|
130
192
|
catch (err) {
|
|
131
193
|
next(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-reference.js","sourceRoot":"","sources":["../../../src/api/routes/docs-reference.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"docs-reference.js","sourceRoot":"","sources":["../../../src/api/routes/docs-reference.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate Docs Manifest — build-time script that pre-computes
|
|
3
|
+
* tools, routes, and docs into a single JSON file for npm-installed users.
|
|
4
|
+
*
|
|
5
|
+
* Run after `tsc`: `node dist/core/docs/generate-docs-manifest.js`
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolInfo } from "./tool-introspector.js";
|
|
8
|
+
import type { RouteInfo } from "./route-introspector.js";
|
|
9
|
+
interface ManifestDocEntry {
|
|
10
|
+
slug: string;
|
|
11
|
+
title: string;
|
|
12
|
+
category: string;
|
|
13
|
+
content: string;
|
|
14
|
+
}
|
|
15
|
+
export interface DocsManifest {
|
|
16
|
+
generatedAt: string;
|
|
17
|
+
tools: ToolInfo[];
|
|
18
|
+
routes: RouteInfo[];
|
|
19
|
+
docs: ManifestDocEntry[];
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=generate-docs-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-docs-manifest.d.ts","sourceRoot":"","sources":["../../../src/core/docs/generate-docs-manifest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,IAAI,EAAE,gBAAgB,EAAE,CAAC;CAC1B"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate Docs Manifest — build-time script that pre-computes
|
|
3
|
+
* tools, routes, and docs into a single JSON file for npm-installed users.
|
|
4
|
+
*
|
|
5
|
+
* Run after `tsc`: `node dist/core/docs/generate-docs-manifest.js`
|
|
6
|
+
*/
|
|
7
|
+
import { writeFileSync, readFileSync, readdirSync, existsSync, statSync } from "node:fs";
|
|
8
|
+
import path from "node:path";
|
|
9
|
+
import { fileURLToPath } from "node:url";
|
|
10
|
+
import { introspectTools } from "./tool-introspector.js";
|
|
11
|
+
import { introspectRoutes } from "./route-introspector.js";
|
|
12
|
+
function discoverDocsWithContent(docsDir) {
|
|
13
|
+
if (!existsSync(docsDir))
|
|
14
|
+
return [];
|
|
15
|
+
const entries = [];
|
|
16
|
+
const categories = readdirSync(docsDir).filter((d) => {
|
|
17
|
+
const full = path.join(docsDir, d);
|
|
18
|
+
return existsSync(full) && statSync(full).isDirectory();
|
|
19
|
+
});
|
|
20
|
+
for (const category of categories) {
|
|
21
|
+
const catDir = path.join(docsDir, category);
|
|
22
|
+
const files = readdirSync(catDir).filter((f) => f.endsWith(".md"));
|
|
23
|
+
for (const file of files) {
|
|
24
|
+
const slug = `${category}/${file.replace(/\.md$/, "")}`;
|
|
25
|
+
const title = file
|
|
26
|
+
.replace(/\.md$/, "")
|
|
27
|
+
.replace(/-/g, " ")
|
|
28
|
+
.replace(/\b\w/g, (c) => c.toUpperCase());
|
|
29
|
+
const content = readFileSync(path.join(catDir, file), "utf-8");
|
|
30
|
+
entries.push({ slug, title, category, content });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return entries;
|
|
34
|
+
}
|
|
35
|
+
function generate() {
|
|
36
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
37
|
+
const __dirname = path.dirname(__filename);
|
|
38
|
+
// Resolve project root: dist/core/docs/ → project root
|
|
39
|
+
const projectRoot = path.resolve(__dirname, "..", "..", "..");
|
|
40
|
+
const toolsDir = path.join(projectRoot, "src", "mcp", "tools");
|
|
41
|
+
const apiDir = path.join(projectRoot, "src", "api");
|
|
42
|
+
const docsDir = path.join(projectRoot, "docs");
|
|
43
|
+
const outPath = path.join(projectRoot, "dist", "docs-manifest.json");
|
|
44
|
+
const tools = existsSync(toolsDir) ? introspectTools(toolsDir) : [];
|
|
45
|
+
const routes = existsSync(apiDir) ? introspectRoutes(apiDir) : [];
|
|
46
|
+
const docs = discoverDocsWithContent(docsDir);
|
|
47
|
+
const manifest = {
|
|
48
|
+
generatedAt: new Date().toISOString(),
|
|
49
|
+
tools,
|
|
50
|
+
routes,
|
|
51
|
+
docs,
|
|
52
|
+
};
|
|
53
|
+
writeFileSync(outPath, JSON.stringify(manifest, null, 2), "utf-8");
|
|
54
|
+
// eslint-disable-next-line no-console
|
|
55
|
+
console.log(`[docs-manifest] Generated: ${tools.length} tools, ${routes.length} routes, ${docs.length} docs → ${outPath}`);
|
|
56
|
+
}
|
|
57
|
+
generate();
|
|
58
|
+
//# sourceMappingURL=generate-docs-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-docs-manifest.js","sourceRoot":"","sources":["../../../src/core/docs/generate-docs-manifest.ts"],"names":[],"mappings":"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"}
|