living-documentation 7.21.0 → 7.25.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 +15 -7
- package/dist/bin/cli.js +22 -5
- package/dist/bin/cli.js.map +1 -1
- package/dist/src/frontend/admin.html +34 -9
- package/dist/src/frontend/i18n/en.json +2 -1
- package/dist/src/frontend/i18n/fr.json +2 -1
- package/dist/src/lib/config.d.ts +7 -3
- package/dist/src/lib/config.d.ts.map +1 -1
- package/dist/src/lib/config.js +116 -15
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/metadata.d.ts.map +1 -1
- package/dist/src/lib/metadata.js +2 -5
- package/dist/src/lib/metadata.js.map +1 -1
- package/dist/src/mcp/tools/source.d.ts.map +1 -1
- package/dist/src/mcp/tools/source.js +3 -7
- package/dist/src/mcp/tools/source.js.map +1 -1
- package/dist/src/routes/config.d.ts.map +1 -1
- package/dist/src/routes/config.js +19 -7
- package/dist/src/routes/config.js.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +2 -7
- package/dist/src/server.js.map +1 -1
- package/dist/starting-doc/.living-doc.json +1 -2
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -65,6 +65,8 @@ npx living-documentation ./path/to/docs
|
|
|
65
65
|
|
|
66
66
|
Then open [http://localhost:4321](http://localhost:4321).
|
|
67
67
|
|
|
68
|
+
> **The folder argument must be a relative path** (`./docs`, `../shared/docs`, etc.). Absolute paths (`/abs/...`) and `~`-prefixed paths are rejected at startup so the generated `.living-doc.json` stays portable across machines and can be committed to git.
|
|
69
|
+
|
|
68
70
|
---
|
|
69
71
|
|
|
70
72
|
## Installation
|
|
@@ -191,31 +193,37 @@ A `.living-doc.json` file is created automatically in your docs folder on first
|
|
|
191
193
|
|
|
192
194
|
```json
|
|
193
195
|
{
|
|
194
|
-
"docsFolder": "/absolute/path/to/docs",
|
|
195
196
|
"filenamePattern": "YYYY_MM_DD_HH_mm_[Category]_title",
|
|
196
197
|
"title": "Living Documentation",
|
|
197
198
|
"theme": "system",
|
|
198
199
|
"port": 4321,
|
|
199
|
-
"extraFiles": []
|
|
200
|
+
"extraFiles": [],
|
|
201
|
+
"sourceRoot": null
|
|
200
202
|
}
|
|
201
203
|
```
|
|
202
204
|
|
|
203
|
-
|
|
205
|
+
All paths stored in this file are **relative to the docs folder** (POSIX slashes), so you can commit `.living-doc.json` to git and share it across machines. The CLI, the API, and the admin panel all reject absolute paths. If you upgrade from an older version whose config contains absolute paths, they are silently migrated to relative on the first read — a one-time `[living-doc] Migrating …` message is printed to the console.
|
|
206
|
+
|
|
207
|
+
You can edit this file manually or use the **Admin panel** at [http://localhost:4321/admin](http://localhost:4321/admin).
|
|
204
208
|
|
|
205
209
|
### Extra files
|
|
206
210
|
|
|
207
|
-
The `extraFiles` field accepts an ordered list of
|
|
211
|
+
The `extraFiles` field accepts an ordered list of **paths relative to the docs folder** pointing to `.md` files located **outside** it. These files always appear in the **General** section, before regular General documents, in the order defined.
|
|
208
212
|
|
|
209
213
|
```json
|
|
210
214
|
{
|
|
211
215
|
"extraFiles": [
|
|
212
|
-
"
|
|
213
|
-
"
|
|
216
|
+
"../README.md",
|
|
217
|
+
"../CLAUDE.md"
|
|
214
218
|
]
|
|
215
219
|
}
|
|
216
220
|
```
|
|
217
221
|
|
|
218
|
-
Use the Admin panel's **General — Extra Files** section to browse the filesystem and manage this list without editing the config manually.
|
|
222
|
+
Use the Admin panel's **General — Extra Files** section to browse the filesystem and manage this list without editing the config manually — it stores relative paths automatically.
|
|
223
|
+
|
|
224
|
+
### Source root
|
|
225
|
+
|
|
226
|
+
The `sourceRoot` field (relative path, or `null` to default to the docs-folder parent, e.g. `".."`) tells the MCP source tools (`list_source_files`, `read_source_file`, `search_source`) and the metadata picker where your project's source code lives relative to the docs folder. Set it to `"../src"` or similar if your source is nested differently.
|
|
219
227
|
|
|
220
228
|
---
|
|
221
229
|
|
package/dist/bin/cli.js
CHANGED
|
@@ -24,13 +24,30 @@ function copyDir(src, dest) {
|
|
|
24
24
|
}
|
|
25
25
|
program
|
|
26
26
|
.name("living-documentation")
|
|
27
|
-
.description("Serve a local Markdown documentation viewer")
|
|
27
|
+
.description("Serve a local Markdown documentation viewer over HTTP on your machine.")
|
|
28
28
|
.version("1.0.0")
|
|
29
|
-
.argument("[folder]", "
|
|
30
|
-
.option("-i, --init", "
|
|
31
|
-
.option("-p, --port <number>", "
|
|
32
|
-
.option("-o, --open", "Open browser
|
|
29
|
+
.argument("[folder]", "Relative path to the documentation folder (must be relative — e.g. ./mydocs or ../shared/docs — so the stored .living-doc.json stays portable across machines). Defaults to the current directory.", ".")
|
|
30
|
+
.option("-i, --init", "Scaffold a demo project in an empty folder (sample docs + .living-doc.json)")
|
|
31
|
+
.option("-p, --port <number>", "HTTP port to listen on (1-65535)", "4321")
|
|
32
|
+
.option("-o, --open", "Open the viewer in the default browser after startup")
|
|
33
|
+
.addHelpText("after", `
|
|
34
|
+
Examples:
|
|
35
|
+
$ npx living-documentation ./mydocs Serve existing docs at http://localhost:4321
|
|
36
|
+
$ npx living-documentation ./mydocs -p 5000 -o Serve on port 5000 and open the browser
|
|
37
|
+
$ npx living-documentation ./newdocs --init Scaffold a demo project into an empty folder
|
|
38
|
+
|
|
39
|
+
Notes:
|
|
40
|
+
- The folder argument must be a relative path. Absolute paths (/abs/...) and ~-expansion are rejected
|
|
41
|
+
so .living-doc.json can be checked into git and shared across machines.
|
|
42
|
+
- Configuration is persisted to <folder>/.living-doc.json. Edit it via the admin panel at /admin.
|
|
43
|
+
`)
|
|
33
44
|
.action(async (folder, options) => {
|
|
45
|
+
if (path_1.default.isAbsolute(folder) || folder.startsWith("~")) {
|
|
46
|
+
console.error(`\nError: The docs folder must be a relative path (got: ${folder}).\n` +
|
|
47
|
+
` Example: npx living-documentation ./mydocs\n` +
|
|
48
|
+
` Absolute paths are rejected so .living-doc.json stays portable across machines.\n`);
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
34
51
|
const docsPath = path_1.default.resolve(process.cwd(), folder);
|
|
35
52
|
if (!fs_1.default.existsSync(docsPath)) {
|
|
36
53
|
console.error(`\nError: Folder not found: ${docsPath}\n`);
|
package/dist/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,gDAAwB;AACxB,4CAAoB;AACpB,0CAA4C;AAE5C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,SAAS,OAAO,CAAC,GAAW,EAAE,IAAY;IACxC,YAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,YAAE,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxC,IAAI,YAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACvC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,YAAE,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,sBAAsB,CAAC;KAC5B,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -325,7 +325,7 @@
|
|
|
325
325
|
name="sourceRoot"
|
|
326
326
|
type="text"
|
|
327
327
|
class="w-full px-3 py-2 font-mono text-xs rounded-lg border border-gray-300 dark:border-gray-600 bg-gray-50 dark:bg-gray-800 text-gray-700 dark:text-gray-300 placeholder:text-gray-400 dark:placeholder:text-gray-500 focus:outline-none focus:ring-2 focus:ring-blue-500 break-all"
|
|
328
|
-
placeholder="
|
|
328
|
+
placeholder=".."
|
|
329
329
|
/>
|
|
330
330
|
<p
|
|
331
331
|
class="text-xs text-gray-400 dark:text-gray-500"
|
|
@@ -831,7 +831,9 @@
|
|
|
831
831
|
cfg.docsFolder || "—";
|
|
832
832
|
document.getElementById("info-port").textContent = cfg.port || "—";
|
|
833
833
|
document.getElementById("field-source-root").value =
|
|
834
|
-
cfg.
|
|
834
|
+
cfg.docsFolder && cfg.sourceRoot
|
|
835
|
+
? pathRelative(cfg.docsFolder, cfg.sourceRoot)
|
|
836
|
+
: "";
|
|
835
837
|
document.getElementById("field-title").value = cfg.title || "";
|
|
836
838
|
document.getElementById("field-theme").value = cfg.theme || "system";
|
|
837
839
|
document.getElementById("field-language").value = cfg.language || "en";
|
|
@@ -879,6 +881,10 @@
|
|
|
879
881
|
const sourceRootRaw = document
|
|
880
882
|
.getElementById("field-source-root")
|
|
881
883
|
.value.trim();
|
|
884
|
+
if (sourceRootRaw !== "" && isAbsolutePath(sourceRootRaw)) {
|
|
885
|
+
showMsg(window.t('admin.msg.source_root_absolute'), "error");
|
|
886
|
+
return;
|
|
887
|
+
}
|
|
882
888
|
const blockedExtensions = document
|
|
883
889
|
.getElementById("field-blocked-extensions")
|
|
884
890
|
.value
|
|
@@ -1094,6 +1100,8 @@
|
|
|
1094
1100
|
}
|
|
1095
1101
|
|
|
1096
1102
|
// ── Extra Files / Browser ──────────────────────────────────
|
|
1103
|
+
// extraFiles is stored internally as absolute paths (matching what GET /api/config returns
|
|
1104
|
+
// and what /api/browse emits). On save, paths are converted to relative before PUT.
|
|
1097
1105
|
let extraFiles = [];
|
|
1098
1106
|
let browseParent = null;
|
|
1099
1107
|
let browseCurrent = "";
|
|
@@ -1106,10 +1114,18 @@
|
|
|
1106
1114
|
loadBrowse(cfg.docsFolder || "/");
|
|
1107
1115
|
}
|
|
1108
1116
|
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1117
|
+
// Returns true if the path looks absolute (unix, Windows, or tilde-home).
|
|
1118
|
+
function isAbsolutePath(p) {
|
|
1119
|
+
if (!p) return false;
|
|
1120
|
+
return /^([/\\]|[a-zA-Z]:[\\/]|~)/.test(p);
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
// Posix-style path.relative(from, to). Returns "." when equal, "../x" etc.
|
|
1124
|
+
function pathRelative(from, to) {
|
|
1125
|
+
if (!from) return to;
|
|
1126
|
+
const norm = (s) => s.replace(/\\/g, "/");
|
|
1127
|
+
const fromParts = norm(from).split("/").filter(Boolean);
|
|
1128
|
+
const toParts = norm(to).split("/").filter(Boolean);
|
|
1113
1129
|
let common = 0;
|
|
1114
1130
|
while (
|
|
1115
1131
|
common < fromParts.length &&
|
|
@@ -1119,8 +1135,14 @@
|
|
|
1119
1135
|
common++;
|
|
1120
1136
|
const ups = fromParts.length - common;
|
|
1121
1137
|
const downs = toParts.slice(common).join("/");
|
|
1122
|
-
|
|
1123
|
-
|
|
1138
|
+
let rel = "../".repeat(ups) + downs;
|
|
1139
|
+
if (rel.endsWith("/")) rel = rel.slice(0, -1);
|
|
1140
|
+
return rel === "" ? "." : rel;
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
function relativeDisplay(filePath) {
|
|
1144
|
+
if (!docsFolder) return filePath;
|
|
1145
|
+
return "$DOCS_FOLDER/" + pathRelative(docsFolder, filePath);
|
|
1124
1146
|
}
|
|
1125
1147
|
|
|
1126
1148
|
async function loadBrowse(dirPath) {
|
|
@@ -1201,10 +1223,13 @@
|
|
|
1201
1223
|
|
|
1202
1224
|
async function saveExtraFiles() {
|
|
1203
1225
|
try {
|
|
1226
|
+
const relativeEntries = extraFiles.map((abs) =>
|
|
1227
|
+
pathRelative(docsFolder, abs),
|
|
1228
|
+
);
|
|
1204
1229
|
const res = await fetch("/api/config", {
|
|
1205
1230
|
method: "PUT",
|
|
1206
1231
|
headers: { "Content-Type": "application/json" },
|
|
1207
|
-
body: JSON.stringify({ extraFiles }),
|
|
1232
|
+
body: JSON.stringify({ extraFiles: relativeEntries }),
|
|
1208
1233
|
});
|
|
1209
1234
|
if (!res.ok) throw new Error(await res.text());
|
|
1210
1235
|
} catch (err) {
|
|
@@ -306,7 +306,7 @@
|
|
|
306
306
|
"admin.server_info.docs_folder": "Docs Folder",
|
|
307
307
|
"admin.server_info.port": "Port",
|
|
308
308
|
"admin.server_info.source_root": "Source Root",
|
|
309
|
-
"admin.server_info.source_root_hint": "
|
|
309
|
+
"admin.server_info.source_root_hint": "Path relative to the docs folder (e.g. \"..\" or \"../src\"). Used by MCP source tools. Leave empty to default to the parent directory.",
|
|
310
310
|
|
|
311
311
|
"admin.config.title": "Configuration",
|
|
312
312
|
"admin.config.description": "Settings are saved to .living-doc.json in your docs folder.",
|
|
@@ -396,6 +396,7 @@
|
|
|
396
396
|
"admin.msg.load_failed": "Failed to load config.",
|
|
397
397
|
"admin.msg.pattern_no_category": "Filename pattern must contain [Category]",
|
|
398
398
|
"admin.msg.pattern_one_category": "Filename pattern must contain [Category] exactly once",
|
|
399
|
+
"admin.msg.source_root_absolute": "Source Root must be a relative path (e.g. \"..\" or \"../src\"). Absolute paths are not allowed.",
|
|
399
400
|
|
|
400
401
|
"diagram.back_btn": "← Back",
|
|
401
402
|
"diagram.diagrams_list_title": "My diagrams",
|
|
@@ -306,7 +306,7 @@
|
|
|
306
306
|
"admin.server_info.docs_folder": "Dossier docs",
|
|
307
307
|
"admin.server_info.port": "Port",
|
|
308
308
|
"admin.server_info.source_root": "Racine des sources",
|
|
309
|
-
"admin.server_info.source_root_hint": "Chemin
|
|
309
|
+
"admin.server_info.source_root_hint": "Chemin relatif au dossier docs (ex. \"..\" ou \"../src\"). Utilisé par les outils MCP de lecture du code source. Laisser vide pour utiliser le dossier parent par défaut.",
|
|
310
310
|
|
|
311
311
|
"admin.config.title": "Configuration",
|
|
312
312
|
"admin.config.description": "Les paramètres sont sauvegardés dans .living-doc.json dans votre dossier docs.",
|
|
@@ -396,6 +396,7 @@
|
|
|
396
396
|
"admin.msg.load_failed": "Impossible de charger la configuration.",
|
|
397
397
|
"admin.msg.pattern_no_category": "Le modèle de nom de fichier doit contenir [Category]",
|
|
398
398
|
"admin.msg.pattern_one_category": "Le modèle de nom de fichier doit contenir [Category] exactement une fois",
|
|
399
|
+
"admin.msg.source_root_absolute": "La racine du code source doit être un chemin relatif (ex. \"..\" ou \"../src\"). Les chemins absolus ne sont pas autorisés.",
|
|
399
400
|
|
|
400
401
|
"diagram.back_btn": "← Retour",
|
|
401
402
|
"diagram.diagrams_list_title": "Mes diagrammes",
|
package/dist/src/lib/config.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export interface
|
|
2
|
-
docsFolder: string;
|
|
1
|
+
export interface StoredConfig {
|
|
3
2
|
filenamePattern: string;
|
|
4
3
|
title: string;
|
|
5
4
|
theme: "light" | "dark" | "system";
|
|
@@ -16,7 +15,12 @@ export interface LivingDocConfig {
|
|
|
16
15
|
codeBlockMaxHeight: number;
|
|
17
16
|
markdownSoftBreaks: boolean;
|
|
18
17
|
}
|
|
18
|
+
export interface LivingDocConfig extends Omit<StoredConfig, "sourceRoot" | "extraFiles"> {
|
|
19
|
+
docsFolder: string;
|
|
20
|
+
sourceRoot: string;
|
|
21
|
+
extraFiles: string[];
|
|
22
|
+
}
|
|
19
23
|
export declare function getConfigPath(docsPath: string): string;
|
|
20
24
|
export declare function readConfig(docsPath: string): LivingDocConfig;
|
|
21
|
-
export declare function writeConfig(docsPath: string, patch: Partial<
|
|
25
|
+
export declare function writeConfig(docsPath: string, patch: Partial<StoredConfig>): LivingDocConfig;
|
|
22
26
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACnC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACpC,kBAAkB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,wBAAwB,EAAE,OAAO,CAAC;IAClC,0BAA0B,EAAE,OAAO,CAAC;IACpC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAID,MAAM,WAAW,eACf,SAAQ,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,YAAY,CAAC;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAiED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAuGD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAmB5D;AAID,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAC3B,eAAe,CAejB"}
|
package/dist/src/lib/config.js
CHANGED
|
@@ -49,8 +49,7 @@ const DEFAULT_BLOCKED_FILE_EXTENSIONS = [
|
|
|
49
49
|
"ps1",
|
|
50
50
|
"msi",
|
|
51
51
|
];
|
|
52
|
-
const
|
|
53
|
-
docsFolder: ".",
|
|
52
|
+
const STORAGE_DEFAULTS = {
|
|
54
53
|
filenamePattern: "YYYY_MM_DD_HH_mm_[Category]_title",
|
|
55
54
|
title: "Living Documentation",
|
|
56
55
|
theme: "system",
|
|
@@ -70,25 +69,127 @@ const DEFAULTS = {
|
|
|
70
69
|
function getConfigPath(docsPath) {
|
|
71
70
|
return path_1.default.join(docsPath, CONFIG_FILENAME);
|
|
72
71
|
}
|
|
73
|
-
function
|
|
72
|
+
function toPosix(p) {
|
|
73
|
+
return p.split(path_1.default.sep).join("/");
|
|
74
|
+
}
|
|
75
|
+
function toRelativeStorage(docsPath, abs) {
|
|
76
|
+
try {
|
|
77
|
+
const rel = path_1.default.relative(path_1.default.resolve(docsPath), path_1.default.resolve(abs));
|
|
78
|
+
if (path_1.default.isAbsolute(rel))
|
|
79
|
+
return null;
|
|
80
|
+
return toPosix(rel) || ".";
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function resolveRelative(docsPath, rel) {
|
|
87
|
+
return path_1.default.resolve(docsPath, rel);
|
|
88
|
+
}
|
|
89
|
+
// Reads raw JSON, migrates any legacy absolute paths and the removed docsFolder field
|
|
90
|
+
// in-memory, and writes back if anything changed. Returns the storage-shape config.
|
|
91
|
+
function readAndMigrate(docsPath) {
|
|
74
92
|
const configPath = getConfigPath(docsPath);
|
|
93
|
+
if (!fs_1.default.existsSync(configPath)) {
|
|
94
|
+
return { ...STORAGE_DEFAULTS };
|
|
95
|
+
}
|
|
96
|
+
let raw;
|
|
75
97
|
try {
|
|
76
|
-
|
|
77
|
-
const raw = fs_1.default.readFileSync(configPath, "utf-8");
|
|
78
|
-
const parsed = JSON.parse(raw);
|
|
79
|
-
return { ...DEFAULTS, ...parsed };
|
|
80
|
-
}
|
|
98
|
+
raw = JSON.parse(fs_1.default.readFileSync(configPath, "utf-8"));
|
|
81
99
|
}
|
|
82
100
|
catch {
|
|
83
|
-
|
|
101
|
+
return { ...STORAGE_DEFAULTS };
|
|
84
102
|
}
|
|
85
|
-
|
|
103
|
+
let dirty = false;
|
|
104
|
+
// docsFolder was stored historically — now purely runtime. Drop it silently.
|
|
105
|
+
if ("docsFolder" in raw) {
|
|
106
|
+
delete raw.docsFolder;
|
|
107
|
+
dirty = true;
|
|
108
|
+
}
|
|
109
|
+
// Migrate sourceRoot: absolute → relative (or null if conversion impossible).
|
|
110
|
+
if (typeof raw.sourceRoot === "string" && path_1.default.isAbsolute(raw.sourceRoot)) {
|
|
111
|
+
const rel = toRelativeStorage(docsPath, raw.sourceRoot);
|
|
112
|
+
if (rel !== null) {
|
|
113
|
+
console.warn(`[living-doc] Migrating sourceRoot to relative path: "${rel}"`);
|
|
114
|
+
raw.sourceRoot = rel;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
console.warn(`[living-doc] Could not convert sourceRoot to a relative path; resetting to default.`);
|
|
118
|
+
raw.sourceRoot = null;
|
|
119
|
+
}
|
|
120
|
+
dirty = true;
|
|
121
|
+
}
|
|
122
|
+
// Migrate extraFiles: absolute entries → relative. Drop entries that can't be converted.
|
|
123
|
+
if (Array.isArray(raw.extraFiles)) {
|
|
124
|
+
const migrated = [];
|
|
125
|
+
let changed = false;
|
|
126
|
+
for (const entry of raw.extraFiles) {
|
|
127
|
+
if (typeof entry !== "string") {
|
|
128
|
+
changed = true;
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (path_1.default.isAbsolute(entry)) {
|
|
132
|
+
const rel = toRelativeStorage(docsPath, entry);
|
|
133
|
+
if (rel !== null) {
|
|
134
|
+
console.warn(`[living-doc] Migrating extraFile to relative: "${rel}"`);
|
|
135
|
+
migrated.push(rel);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
console.warn(`[living-doc] Could not convert extraFile "${entry}" — dropping it.`);
|
|
139
|
+
}
|
|
140
|
+
changed = true;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
const normalized = toPosix(entry);
|
|
144
|
+
migrated.push(normalized);
|
|
145
|
+
if (normalized !== entry)
|
|
146
|
+
changed = true;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (changed) {
|
|
150
|
+
raw.extraFiles = migrated;
|
|
151
|
+
dirty = true;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (dirty) {
|
|
155
|
+
try {
|
|
156
|
+
fs_1.default.writeFileSync(configPath, JSON.stringify(raw, null, 2), "utf-8");
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// Non-fatal: config is read-only or disk is full. Runtime view still works.
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return { ...STORAGE_DEFAULTS, ...raw };
|
|
163
|
+
}
|
|
164
|
+
function readConfig(docsPath) {
|
|
165
|
+
const stored = readAndMigrate(docsPath);
|
|
166
|
+
const absDocsPath = path_1.default.resolve(docsPath);
|
|
167
|
+
const sourceRoot = stored.sourceRoot === null
|
|
168
|
+
? path_1.default.dirname(absDocsPath)
|
|
169
|
+
: resolveRelative(absDocsPath, stored.sourceRoot);
|
|
170
|
+
const extraFiles = stored.extraFiles.map((rel) => resolveRelative(absDocsPath, rel));
|
|
171
|
+
const { sourceRoot: _omitSrc, extraFiles: _omitExtra, ...rest } = stored;
|
|
172
|
+
void _omitSrc;
|
|
173
|
+
void _omitExtra;
|
|
174
|
+
return {
|
|
175
|
+
...rest,
|
|
176
|
+
docsFolder: absDocsPath,
|
|
177
|
+
sourceRoot,
|
|
178
|
+
extraFiles,
|
|
179
|
+
};
|
|
86
180
|
}
|
|
181
|
+
// Callers pass the storage-shape (paths relative to docsFolder, POSIX slashes).
|
|
182
|
+
// Values are normalised to POSIX before write so the file stays portable across OSes.
|
|
87
183
|
function writeConfig(docsPath, patch) {
|
|
88
|
-
const
|
|
89
|
-
const updated = { ...
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
184
|
+
const stored = readAndMigrate(docsPath);
|
|
185
|
+
const updated = { ...stored, ...patch };
|
|
186
|
+
if ("sourceRoot" in patch && typeof updated.sourceRoot === "string") {
|
|
187
|
+
updated.sourceRoot = toPosix(updated.sourceRoot);
|
|
188
|
+
}
|
|
189
|
+
if ("extraFiles" in patch && Array.isArray(updated.extraFiles)) {
|
|
190
|
+
updated.extraFiles = updated.extraFiles.map((p) => toPosix(p));
|
|
191
|
+
}
|
|
192
|
+
fs_1.default.writeFileSync(getConfigPath(docsPath), JSON.stringify(updated, null, 2), "utf-8");
|
|
193
|
+
return readConfig(docsPath);
|
|
93
194
|
}
|
|
94
195
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/lib/metadata.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAQjE;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,GACnB,IAAI,CAMN;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/lib/metadata.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAQjE;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,GACnB,IAAI,CAMN;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,MAAM,CAUR;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,MAAM,GACjB,YAAY,CAmBd;AAID,wBAAgB,WAAW,CACzB,OAAO,EAAE,aAAa,EAAE,EACxB,UAAU,EAAE,MAAM,GACjB,cAAc,CAahB;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,aAAa,EAAE,CAGjB;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,EAAE,GACvB,IAAI,CAKN;AAMD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAqBf"}
|
package/dist/src/lib/metadata.js
CHANGED
|
@@ -36,11 +36,8 @@ function writeMetadataStore(docsPath, store) {
|
|
|
36
36
|
fs_1.default.writeFileSync(metadataPath(docsPath), JSON.stringify(store, null, 2), "utf-8");
|
|
37
37
|
}
|
|
38
38
|
function resolveSourceRoot(docsPath) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
? sourceRoot
|
|
42
|
-
: path_1.default.dirname(path_1.default.resolve(docsPath));
|
|
43
|
-
return path_1.default.resolve(resolved);
|
|
39
|
+
// readConfig always returns sourceRoot as an absolute path (resolved from storage).
|
|
40
|
+
return (0, config_1.readConfig)(docsPath).sourceRoot;
|
|
44
41
|
}
|
|
45
42
|
function assertUnderSourceRoot(relOrAbs, sourceRoot) {
|
|
46
43
|
// Returns the normalized relative path under sourceRoot.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/lib/metadata.ts"],"names":[],"mappings":";;;;;AAgCA,oCAEC;AAED,8CAQC;AAED,gDASC;AAED,
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/lib/metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/source.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/source.ts"],"names":[],"mappings":"AA2GA,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;;;;;EAkBA;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;;;;;EAyB1E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;;;;;EAqCA"}
|
|
@@ -30,17 +30,13 @@ const DEFAULT_MAX_LIST_RESULTS = 500;
|
|
|
30
30
|
const DEFAULT_MAX_SEARCH_RESULTS = 200;
|
|
31
31
|
const MAX_FILE_BYTES = 512 * 1024; // 512 KB
|
|
32
32
|
function resolveSourceRoot(docsPath) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
// when absent; users can override it via the admin panel / PUT /api/config.
|
|
36
|
-
const resolved = sourceRoot && path_1.default.isAbsolute(sourceRoot)
|
|
37
|
-
? sourceRoot
|
|
38
|
-
: path_1.default.dirname(path_1.default.resolve(docsPath));
|
|
33
|
+
// readConfig always returns sourceRoot as an absolute path (resolved from storage).
|
|
34
|
+
const resolved = (0, config_1.readConfig)(docsPath).sourceRoot;
|
|
39
35
|
if (!fs_1.default.existsSync(resolved)) {
|
|
40
36
|
throw new Error(`sourceRoot "${resolved}" does not exist. ` +
|
|
41
37
|
`Update it in .living-doc.json or via PUT /api/config.`);
|
|
42
38
|
}
|
|
43
|
-
return
|
|
39
|
+
return resolved;
|
|
44
40
|
}
|
|
45
41
|
function safeResolve(root, rel) {
|
|
46
42
|
const resolved = path_1.default.resolve(root, rel);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../../src/mcp/tools/source.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../../src/mcp/tools/source.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/routes/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAIpD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/routes/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAIpD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAyHrD"}
|
|
@@ -32,6 +32,7 @@ function configRouter(docsPath) {
|
|
|
32
32
|
'diagramNodePalette',
|
|
33
33
|
'diagramEdgePalette',
|
|
34
34
|
'sourceRoot',
|
|
35
|
+
'extraFiles',
|
|
35
36
|
'blockedFileExtensions',
|
|
36
37
|
'exclusiveFolderExpansion',
|
|
37
38
|
'exclusiveCategoryExpansion',
|
|
@@ -71,17 +72,18 @@ function configRouter(docsPath) {
|
|
|
71
72
|
safe.diagramEdgePalette = v;
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
|
-
// sourceRoot: null or
|
|
75
|
+
// sourceRoot: null or a RELATIVE path (relative to docsFolder). Absolute paths are rejected
|
|
76
|
+
// so .living-doc.json stays portable across machines.
|
|
75
77
|
if ('sourceRoot' in patch) {
|
|
76
78
|
const v = patch.sourceRoot;
|
|
77
79
|
if (v === null || v === '') {
|
|
78
80
|
safe.sourceRoot = null;
|
|
79
81
|
}
|
|
80
|
-
else if (typeof v === 'string' && path_1.default.isAbsolute(v)) {
|
|
82
|
+
else if (typeof v === 'string' && !path_1.default.isAbsolute(v) && !v.startsWith('~')) {
|
|
81
83
|
safe.sourceRoot = v;
|
|
82
84
|
}
|
|
83
85
|
else {
|
|
84
|
-
return res.status(400).json({ error: 'sourceRoot must be
|
|
86
|
+
return res.status(400).json({ error: 'sourceRoot must be a relative path or null' });
|
|
85
87
|
}
|
|
86
88
|
}
|
|
87
89
|
// blockedFileExtensions: array of extension strings (without leading dot), lowercase
|
|
@@ -107,11 +109,21 @@ function configRouter(docsPath) {
|
|
|
107
109
|
return res.status(400).json({ error: 'codeBlockMaxHeight must be a non-negative number' });
|
|
108
110
|
}
|
|
109
111
|
}
|
|
110
|
-
// extraFiles: only
|
|
112
|
+
// extraFiles: only RELATIVE .md paths (relative to docsFolder). Absolute entries are rejected.
|
|
111
113
|
if ('extraFiles' in patch && Array.isArray(patch.extraFiles)) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
114
|
+
const entries = patch.extraFiles;
|
|
115
|
+
const valid = [];
|
|
116
|
+
for (const f of entries) {
|
|
117
|
+
if (typeof f !== 'string')
|
|
118
|
+
continue;
|
|
119
|
+
if (path_1.default.isAbsolute(f) || f.startsWith('~')) {
|
|
120
|
+
return res.status(400).json({ error: 'extraFiles entries must be relative paths' });
|
|
121
|
+
}
|
|
122
|
+
if (!f.toLowerCase().endsWith('.md'))
|
|
123
|
+
continue;
|
|
124
|
+
valid.push(f);
|
|
125
|
+
}
|
|
126
|
+
safe.extraFiles = valid;
|
|
115
127
|
}
|
|
116
128
|
const updated = (0, config_1.writeConfig)(docsPath, safe);
|
|
117
129
|
res.json(updated);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/routes/config.ts"],"names":[],"mappings":";;;;;AAIA,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/routes/config.ts"],"names":[],"mappings":"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"}
|
package/dist/src/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,WAAW,CAAC,EAChC,QAAQ,EACR,IAAI,EACJ,WAAmB,GACpB,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,WAAW,CAAC,EAChC,QAAQ,EACR,IAAI,EACJ,WAAmB,GACpB,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA4D/B"}
|
package/dist/src/server.js
CHANGED
|
@@ -23,13 +23,8 @@ const config_2 = require("./lib/config");
|
|
|
23
23
|
async function startServer({ docsPath, port, openBrowser = false, }) {
|
|
24
24
|
const app = (0, express_1.default)();
|
|
25
25
|
app.use(express_1.default.json({ limit: '20mb' }));
|
|
26
|
-
// Persist
|
|
27
|
-
|
|
28
|
-
const initPatch = { docsFolder: docsPath, port };
|
|
29
|
-
if (!existing.sourceRoot) {
|
|
30
|
-
initPatch.sourceRoot = path_1.default.resolve(path_1.default.dirname(path_1.default.resolve(docsPath)));
|
|
31
|
-
}
|
|
32
|
-
(0, config_2.writeConfig)(docsPath, initPatch);
|
|
26
|
+
// Persist port to .living-doc.json; readAndMigrate runs here and strips any legacy absolute paths.
|
|
27
|
+
(0, config_2.writeConfig)(docsPath, { port });
|
|
33
28
|
// API
|
|
34
29
|
app.use('/api/documents', (0, documents_1.documentsRouter)(docsPath));
|
|
35
30
|
app.use('/api/config', (0, config_1.configRouter)(docsPath));
|
package/dist/src/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":";;;;;AAuBA,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
{
|
|
2
|
-
"docsFolder": "/Users/ymedaghri/Documents/Repositories/Medaghri-Alaoui-Repositories/09_My_Published_Projects/living-documentation/starting-doc",
|
|
3
2
|
"filenamePattern": "YYYY_MM_DD_HH_mm_[Category]_title",
|
|
4
3
|
"title": "Living Documentation",
|
|
5
4
|
"theme": "system",
|
|
@@ -35,7 +34,7 @@
|
|
|
35
34
|
"#ef4444",
|
|
36
35
|
"#a855f7"
|
|
37
36
|
],
|
|
38
|
-
"sourceRoot": "
|
|
37
|
+
"sourceRoot": "..",
|
|
39
38
|
"blockedFileExtensions": [
|
|
40
39
|
"exe",
|
|
41
40
|
"sh",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "living-documentation",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.25.0",
|
|
4
4
|
"description": "A CLI tool that serves a local Markdown documentation viewer",
|
|
5
5
|
"main": "dist/src/server.js",
|
|
6
6
|
"bin": {
|
|
@@ -29,11 +29,11 @@
|
|
|
29
29
|
"url": "https://github.com/craftskillz/living-documentation.git"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@modelcontextprotocol/sdk": "
|
|
33
|
-
"archiver": "
|
|
34
|
-
"commander": "
|
|
35
|
-
"express": "
|
|
36
|
-
"marked": "
|
|
32
|
+
"@modelcontextprotocol/sdk": "1.29.0",
|
|
33
|
+
"archiver": "7.0.1",
|
|
34
|
+
"commander": "12.1.0",
|
|
35
|
+
"express": "4.19.2",
|
|
36
|
+
"marked": "12.0.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/archiver": "^7.0.0",
|