@kaitranntt/ccs 7.77.1-dev.12 → 7.77.1-dev.13

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.
Files changed (41) hide show
  1. package/dist/web-server/shared-routes-collections.d.ts +13 -0
  2. package/dist/web-server/shared-routes-collections.d.ts.map +1 -0
  3. package/dist/web-server/shared-routes-collections.js +170 -0
  4. package/dist/web-server/shared-routes-collections.js.map +1 -0
  5. package/dist/web-server/shared-routes-content.d.ts +16 -0
  6. package/dist/web-server/shared-routes-content.d.ts.map +1 -0
  7. package/dist/web-server/shared-routes-content.js +152 -0
  8. package/dist/web-server/shared-routes-content.js.map +1 -0
  9. package/dist/web-server/shared-routes-markdown-walker.d.ts +12 -0
  10. package/dist/web-server/shared-routes-markdown-walker.d.ts.map +1 -0
  11. package/dist/web-server/shared-routes-markdown-walker.js +97 -0
  12. package/dist/web-server/shared-routes-markdown-walker.js.map +1 -0
  13. package/dist/web-server/shared-routes-markdown.d.ts +18 -0
  14. package/dist/web-server/shared-routes-markdown.d.ts.map +1 -0
  15. package/dist/web-server/shared-routes-markdown.js +167 -0
  16. package/dist/web-server/shared-routes-markdown.js.map +1 -0
  17. package/dist/web-server/shared-routes-path-guards.d.ts +16 -0
  18. package/dist/web-server/shared-routes-path-guards.d.ts.map +1 -0
  19. package/dist/web-server/shared-routes-path-guards.js +93 -0
  20. package/dist/web-server/shared-routes-path-guards.js.map +1 -0
  21. package/dist/web-server/shared-routes-plugin-registry-content.d.ts +12 -0
  22. package/dist/web-server/shared-routes-plugin-registry-content.d.ts.map +1 -0
  23. package/dist/web-server/shared-routes-plugin-registry-content.js +93 -0
  24. package/dist/web-server/shared-routes-plugin-registry-content.js.map +1 -0
  25. package/dist/web-server/shared-routes-plugins.d.ts +21 -0
  26. package/dist/web-server/shared-routes-plugins.d.ts.map +1 -0
  27. package/dist/web-server/shared-routes-plugins.js +197 -0
  28. package/dist/web-server/shared-routes-plugins.js.map +1 -0
  29. package/dist/web-server/shared-routes-symlink-status.d.ts +27 -0
  30. package/dist/web-server/shared-routes-symlink-status.d.ts.map +1 -0
  31. package/dist/web-server/shared-routes-symlink-status.js +135 -0
  32. package/dist/web-server/shared-routes-symlink-status.js.map +1 -0
  33. package/dist/web-server/shared-routes-types.d.ts +23 -0
  34. package/dist/web-server/shared-routes-types.d.ts.map +1 -0
  35. package/dist/web-server/shared-routes-types.js +15 -0
  36. package/dist/web-server/shared-routes-types.js.map +1 -0
  37. package/dist/web-server/shared-routes.d.ts +1 -0
  38. package/dist/web-server/shared-routes.d.ts.map +1 -1
  39. package/dist/web-server/shared-routes.js +30 -730
  40. package/dist/web-server/shared-routes.js.map +1 -1
  41. package/package.json +1 -1
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Shared Routes — Collection item list builders
3
+ *
4
+ * Builds SharedItem arrays for commands, skills, and agents with
5
+ * a short-lived in-memory cache keyed by collection type.
6
+ */
7
+ /// <reference types="node" />
8
+ import * as fs from 'fs';
9
+ import type { SharedItem, SharedCollectionType } from './shared-routes-types';
10
+ export declare function getCommandItems(sharedDir: string, allowedRoots: Set<string>): SharedItem[];
11
+ export declare function getSkillOrAgentItem(type: 'skills' | 'agents', entry: fs.Dirent, entryPath: string, resolvedEntryPath: string, allowedRoots: Set<string>, stats: fs.Stats): SharedItem | null;
12
+ export declare function getSharedItems(type: SharedCollectionType): SharedItem[];
13
+ //# sourceMappingURL=shared-routes-collections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-routes-collections.d.ts","sourceRoot":"","sources":["../../src/web-server/shared-routes-collections.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAWzB,OAAO,KAAK,EACV,UAAU,EAEV,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAU/B,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,UAAU,EAAE,CAyB1F;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,GAAG,QAAQ,EACzB,KAAK,EAAE,EAAE,CAAC,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,EACzB,KAAK,EAAE,EAAE,CAAC,KAAK,GACd,UAAU,GAAG,IAAI,CAwCnB;AAMD,wBAAgB,cAAc,CAAC,IAAI,EAAE,oBAAoB,GAAG,UAAU,EAAE,CA+EvE"}
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ /**
3
+ * Shared Routes — Collection item list builders
4
+ *
5
+ * Builds SharedItem arrays for commands, skills, and agents with
6
+ * a short-lived in-memory cache keyed by collection type.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || function (mod) {
25
+ if (mod && mod.__esModule) return mod;
26
+ var result = {};
27
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
+ __setModuleDefault(result, mod);
29
+ return result;
30
+ };
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.getSharedItems = exports.getSkillOrAgentItem = exports.getCommandItems = void 0;
33
+ const fs = __importStar(require("fs"));
34
+ const path = __importStar(require("path"));
35
+ const config_loader_facade_1 = require("../config/config-loader-facade");
36
+ const shared_routes_path_guards_1 = require("./shared-routes-path-guards");
37
+ const shared_routes_markdown_1 = require("./shared-routes-markdown");
38
+ const shared_routes_plugins_1 = require("./shared-routes-plugins");
39
+ const SHARED_ITEMS_CACHE_TTL_MS = 1000;
40
+ const sharedItemsCache = new Map();
41
+ // ---------------------------------------------------------------------------
42
+ // Per-type item builders
43
+ // ---------------------------------------------------------------------------
44
+ function getCommandItems(sharedDir, allowedRoots) {
45
+ const markdownFiles = (0, shared_routes_markdown_1.collectMarkdownFiles)(sharedDir, allowedRoots);
46
+ const items = [];
47
+ for (const markdownFile of markdownFiles) {
48
+ const description = (0, shared_routes_markdown_1.readMarkdownDescription)(markdownFile.resolvedPath, allowedRoots);
49
+ if (!description) {
50
+ continue;
51
+ }
52
+ const relativePath = path.relative(sharedDir, markdownFile.displayPath);
53
+ const normalizedName = relativePath.split(path.sep).join('/').replace(/\.md$/i, '');
54
+ if (!normalizedName) {
55
+ continue;
56
+ }
57
+ items.push({
58
+ name: normalizedName,
59
+ description,
60
+ path: markdownFile.displayPath,
61
+ type: 'command',
62
+ });
63
+ }
64
+ return items.sort((a, b) => a.name.localeCompare(b.name));
65
+ }
66
+ exports.getCommandItems = getCommandItems;
67
+ function getSkillOrAgentItem(type, entry, entryPath, resolvedEntryPath, allowedRoots, stats) {
68
+ if (type === 'skills') {
69
+ if (!stats.isDirectory()) {
70
+ return null;
71
+ }
72
+ const description = (0, shared_routes_markdown_1.readMarkdownDescription)(path.join(resolvedEntryPath, 'SKILL.md'), allowedRoots);
73
+ if (!description) {
74
+ return null;
75
+ }
76
+ return { name: entry.name, description, path: entryPath, type: 'skill' };
77
+ }
78
+ // agents
79
+ if (stats.isDirectory()) {
80
+ const description = (0, shared_routes_markdown_1.readFirstMarkdownDescription)([
81
+ path.join(resolvedEntryPath, 'prompt.md'),
82
+ path.join(resolvedEntryPath, 'AGENT.md'),
83
+ path.join(resolvedEntryPath, 'agent.md'),
84
+ ], allowedRoots);
85
+ if (!description) {
86
+ return null;
87
+ }
88
+ return { name: entry.name, description, path: entryPath, type: 'agent' };
89
+ }
90
+ if (!stats.isFile() || !entry.name.toLowerCase().endsWith('.md')) {
91
+ return null;
92
+ }
93
+ const description = (0, shared_routes_markdown_1.readMarkdownDescription)(resolvedEntryPath, allowedRoots);
94
+ if (!description) {
95
+ return null;
96
+ }
97
+ return { name: entry.name.replace(/\.md$/i, ''), description, path: entryPath, type: 'agent' };
98
+ }
99
+ exports.getSkillOrAgentItem = getSkillOrAgentItem;
100
+ // ---------------------------------------------------------------------------
101
+ // Public cache-backed entry point
102
+ // ---------------------------------------------------------------------------
103
+ function getSharedItems(type) {
104
+ const ccsDir = (0, config_loader_facade_1.getCcsDir)();
105
+ const sharedDir = path.join(ccsDir, 'shared', type);
106
+ const now = Date.now();
107
+ if (!fs.existsSync(sharedDir)) {
108
+ sharedItemsCache.delete(type);
109
+ return [];
110
+ }
111
+ const cached = sharedItemsCache.get(type);
112
+ if (cached && cached.sharedDir === sharedDir && cached.expiresAt > now) {
113
+ return cached.items;
114
+ }
115
+ const sharedDirRoot = (0, shared_routes_path_guards_1.safeRealPath)(sharedDir) ?? path.resolve(sharedDir);
116
+ const allowedRoots = (0, shared_routes_path_guards_1.resolveAllowedRoots)(type, ccsDir, sharedDirRoot);
117
+ if (type === 'commands') {
118
+ const commandItems = getCommandItems(sharedDir, allowedRoots);
119
+ sharedItemsCache.set(type, {
120
+ items: commandItems,
121
+ sharedDir,
122
+ expiresAt: now + SHARED_ITEMS_CACHE_TTL_MS,
123
+ });
124
+ return commandItems;
125
+ }
126
+ if (type === 'plugins') {
127
+ const pluginItems = (0, shared_routes_plugins_1.getPluginItems)(sharedDir, allowedRoots);
128
+ sharedItemsCache.set(type, {
129
+ items: pluginItems,
130
+ sharedDir,
131
+ expiresAt: now + SHARED_ITEMS_CACHE_TTL_MS,
132
+ });
133
+ return pluginItems;
134
+ }
135
+ // skills | agents
136
+ const items = [];
137
+ try {
138
+ const entries = fs.readdirSync(sharedDir, { withFileTypes: true });
139
+ for (const entry of entries) {
140
+ try {
141
+ const entryPath = path.join(sharedDir, entry.name);
142
+ const resolvedEntryPath = (0, shared_routes_path_guards_1.safeRealPath)(entryPath);
143
+ if (!resolvedEntryPath || !(0, shared_routes_path_guards_1.isPathWithinAny)(resolvedEntryPath, allowedRoots)) {
144
+ continue;
145
+ }
146
+ const stats = fs.statSync(resolvedEntryPath);
147
+ const item = getSkillOrAgentItem(type, entry, entryPath, resolvedEntryPath, allowedRoots, stats);
148
+ if (!item) {
149
+ continue;
150
+ }
151
+ items.push(item);
152
+ }
153
+ catch {
154
+ // Fail soft per entry so one bad item does not hide valid results.
155
+ }
156
+ }
157
+ }
158
+ catch {
159
+ // Directory read failed — return empty list
160
+ }
161
+ const sortedItems = items.sort((a, b) => a.name.localeCompare(b.name));
162
+ sharedItemsCache.set(type, {
163
+ items: sortedItems,
164
+ sharedDir,
165
+ expiresAt: now + SHARED_ITEMS_CACHE_TTL_MS,
166
+ });
167
+ return sortedItems;
168
+ }
169
+ exports.getSharedItems = getSharedItems;
170
+ //# sourceMappingURL=shared-routes-collections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-routes-collections.js","sourceRoot":"","sources":["../../src/web-server/shared-routes-collections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Shared Routes — Item content readers
3
+ *
4
+ * Resolves the full markdown content for a given shared item path,
5
+ * routing by collection type and enforcing allowed-root checks.
6
+ */
7
+ import type { SharedContentType } from './shared-routes-types';
8
+ export declare function getSharedSettingsContent(itemPath: string, allowedRoots: Set<string>): {
9
+ content: string;
10
+ contentPath: string;
11
+ } | null;
12
+ export declare function getSharedItemContent(type: SharedContentType, itemPath: string, allowedRoots: Set<string>, sharedDir: string): {
13
+ content: string;
14
+ contentPath: string;
15
+ } | null;
16
+ //# sourceMappingURL=shared-routes-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-routes-content.d.ts","sourceRoot":"","sources":["../../src/web-server/shared-routes-content.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAM/D,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAsCjD;AAMD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,EACzB,SAAS,EAAE,MAAM,GAChB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAgFjD"}
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ /**
3
+ * Shared Routes — Item content readers
4
+ *
5
+ * Resolves the full markdown content for a given shared item path,
6
+ * routing by collection type and enforcing allowed-root checks.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || function (mod) {
25
+ if (mod && mod.__esModule) return mod;
26
+ var result = {};
27
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
+ __setModuleDefault(result, mod);
29
+ return result;
30
+ };
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.getSharedItemContent = exports.getSharedSettingsContent = void 0;
33
+ const fs = __importStar(require("fs"));
34
+ const path = __importStar(require("path"));
35
+ const shared_routes_path_guards_1 = require("./shared-routes-path-guards");
36
+ const shared_routes_markdown_1 = require("./shared-routes-markdown");
37
+ const shared_routes_plugins_1 = require("./shared-routes-plugins");
38
+ const shared_routes_plugin_registry_content_1 = require("./shared-routes-plugin-registry-content");
39
+ // ---------------------------------------------------------------------------
40
+ // Settings
41
+ // ---------------------------------------------------------------------------
42
+ function getSharedSettingsContent(itemPath, allowedRoots) {
43
+ if (path.basename(itemPath) !== 'settings.json') {
44
+ return null;
45
+ }
46
+ const sharedRoot = Array.from(allowedRoots)[0];
47
+ if (!sharedRoot) {
48
+ return null;
49
+ }
50
+ const settingsPath = path.join(sharedRoot, 'settings.json');
51
+ const resolvedSettingsPath = (0, shared_routes_path_guards_1.safeRealPath)(settingsPath);
52
+ if (!resolvedSettingsPath || !(0, shared_routes_path_guards_1.isPathWithinAny)(resolvedSettingsPath, allowedRoots)) {
53
+ return null;
54
+ }
55
+ let stats;
56
+ try {
57
+ stats = fs.statSync(resolvedSettingsPath);
58
+ }
59
+ catch {
60
+ return null;
61
+ }
62
+ if (!stats.isFile() || stats.size > shared_routes_markdown_1.MAX_CONTENT_FILE_BYTES) {
63
+ return null;
64
+ }
65
+ try {
66
+ const rawContent = fs.readFileSync(resolvedSettingsPath, 'utf8');
67
+ const parsed = JSON.parse(rawContent);
68
+ return {
69
+ content: JSON.stringify(parsed, null, 2),
70
+ contentPath: resolvedSettingsPath,
71
+ };
72
+ }
73
+ catch {
74
+ const content = (0, shared_routes_markdown_1.readMarkdownContent)(resolvedSettingsPath, allowedRoots);
75
+ return content ? { content, contentPath: resolvedSettingsPath } : null;
76
+ }
77
+ }
78
+ exports.getSharedSettingsContent = getSharedSettingsContent;
79
+ // ---------------------------------------------------------------------------
80
+ // Generic item content
81
+ // ---------------------------------------------------------------------------
82
+ function getSharedItemContent(type, itemPath, allowedRoots, sharedDir) {
83
+ if (type === 'settings') {
84
+ return getSharedSettingsContent(itemPath, allowedRoots);
85
+ }
86
+ if (type === 'plugins') {
87
+ const pluginRegistryContent = (0, shared_routes_plugin_registry_content_1.getPluginRegistryContent)(itemPath, sharedDir, allowedRoots);
88
+ if (pluginRegistryContent) {
89
+ return pluginRegistryContent;
90
+ }
91
+ }
92
+ const resolvedItemPath = (0, shared_routes_path_guards_1.safeRealPath)(itemPath);
93
+ if (!resolvedItemPath || !(0, shared_routes_path_guards_1.isPathWithinAny)(resolvedItemPath, allowedRoots)) {
94
+ return null;
95
+ }
96
+ let itemStats;
97
+ try {
98
+ itemStats = fs.statSync(resolvedItemPath);
99
+ }
100
+ catch {
101
+ return null;
102
+ }
103
+ let markdownPath = null;
104
+ if (type === 'commands') {
105
+ if (!itemStats.isFile() || !itemPath.toLowerCase().endsWith('.md')) {
106
+ return null;
107
+ }
108
+ markdownPath = resolvedItemPath;
109
+ }
110
+ else if (type === 'skills') {
111
+ if (!itemStats.isDirectory()) {
112
+ return null;
113
+ }
114
+ markdownPath = (0, shared_routes_markdown_1.resolveReadableMarkdownPath)([path.join(resolvedItemPath, 'SKILL.md')], allowedRoots);
115
+ }
116
+ else if (type === 'plugins') {
117
+ if (!itemStats.isDirectory() || (0, shared_routes_plugins_1.isPluginInfrastructurePath)(resolvedItemPath, sharedDir)) {
118
+ return null;
119
+ }
120
+ markdownPath = (0, shared_routes_markdown_1.resolveReadableMarkdownPath)([
121
+ path.join(resolvedItemPath, 'README.md'),
122
+ path.join(resolvedItemPath, 'readme.md'),
123
+ path.join(resolvedItemPath, 'PLUGIN.md'),
124
+ ], allowedRoots);
125
+ if (!markdownPath) {
126
+ return null;
127
+ }
128
+ }
129
+ else {
130
+ // agents
131
+ if (itemStats.isDirectory()) {
132
+ markdownPath = (0, shared_routes_markdown_1.resolveReadableMarkdownPath)([
133
+ path.join(resolvedItemPath, 'prompt.md'),
134
+ path.join(resolvedItemPath, 'AGENT.md'),
135
+ path.join(resolvedItemPath, 'agent.md'),
136
+ ], allowedRoots);
137
+ }
138
+ else if (itemStats.isFile() && itemPath.toLowerCase().endsWith('.md')) {
139
+ markdownPath = resolvedItemPath;
140
+ }
141
+ }
142
+ if (!markdownPath) {
143
+ return null;
144
+ }
145
+ const content = (0, shared_routes_markdown_1.readMarkdownContent)(markdownPath, allowedRoots);
146
+ if (!content) {
147
+ return null;
148
+ }
149
+ return { content, contentPath: markdownPath };
150
+ }
151
+ exports.getSharedItemContent = getSharedItemContent;
152
+ //# sourceMappingURL=shared-routes-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-routes-content.js","sourceRoot":"","sources":["../../src/web-server/shared-routes-content.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Shared Routes — Markdown directory walker
3
+ *
4
+ * Iterative BFS/DFS over a shared directory collecting all .md files
5
+ * within allowed roots and the configured traversal depth limit.
6
+ */
7
+ export interface MarkdownFileEntry {
8
+ displayPath: string;
9
+ resolvedPath: string;
10
+ }
11
+ export declare function collectMarkdownFiles(sharedDir: string, allowedRoots: Set<string>): MarkdownFileEntry[];
12
+ //# sourceMappingURL=shared-routes-markdown-walker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-routes-markdown-walker.d.ts","sourceRoot":"","sources":["../../src/web-server/shared-routes-markdown-walker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,iBAAiB,EAAE,CAmErB"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ /**
3
+ * Shared Routes — Markdown directory walker
4
+ *
5
+ * Iterative BFS/DFS over a shared directory collecting all .md files
6
+ * within allowed roots and the configured traversal depth limit.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || function (mod) {
25
+ if (mod && mod.__esModule) return mod;
26
+ var result = {};
27
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
+ __setModuleDefault(result, mod);
29
+ return result;
30
+ };
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.collectMarkdownFiles = void 0;
33
+ const fs = __importStar(require("fs"));
34
+ const path = __importStar(require("path"));
35
+ const shared_routes_path_guards_1 = require("./shared-routes-path-guards");
36
+ const MAX_DIRECTORY_TRAVERSAL_DEPTH = 10;
37
+ function collectMarkdownFiles(sharedDir, allowedRoots) {
38
+ const directoriesToVisit = [
39
+ { path: sharedDir, depth: 0 },
40
+ ];
41
+ const visitedDirectories = new Set();
42
+ const markdownFiles = [];
43
+ while (directoriesToVisit.length > 0) {
44
+ const current = directoriesToVisit.pop();
45
+ if (!current) {
46
+ continue;
47
+ }
48
+ const currentDir = current.path;
49
+ const resolvedCurrentDir = (0, shared_routes_path_guards_1.safeRealPath)(currentDir);
50
+ if (!resolvedCurrentDir || !(0, shared_routes_path_guards_1.isPathWithinAny)(resolvedCurrentDir, allowedRoots)) {
51
+ continue;
52
+ }
53
+ const normalizedDirPath = process.platform === 'win32'
54
+ ? path.resolve(resolvedCurrentDir).toLowerCase()
55
+ : path.resolve(resolvedCurrentDir);
56
+ if (visitedDirectories.has(normalizedDirPath)) {
57
+ continue;
58
+ }
59
+ visitedDirectories.add(normalizedDirPath);
60
+ let entries = [];
61
+ try {
62
+ entries = fs.readdirSync(currentDir, { withFileTypes: true });
63
+ }
64
+ catch {
65
+ continue;
66
+ }
67
+ for (const entry of entries) {
68
+ const entryPath = path.join(currentDir, entry.name);
69
+ const resolvedEntryPath = (0, shared_routes_path_guards_1.safeRealPath)(entryPath);
70
+ if (!resolvedEntryPath || !(0, shared_routes_path_guards_1.isPathWithinAny)(resolvedEntryPath, allowedRoots)) {
71
+ continue;
72
+ }
73
+ let stats;
74
+ try {
75
+ stats = fs.statSync(resolvedEntryPath);
76
+ }
77
+ catch {
78
+ continue;
79
+ }
80
+ if (stats.isDirectory()) {
81
+ if (current.depth < MAX_DIRECTORY_TRAVERSAL_DEPTH) {
82
+ directoriesToVisit.push({ path: entryPath, depth: current.depth + 1 });
83
+ }
84
+ continue;
85
+ }
86
+ if (stats.isFile() && entry.name.toLowerCase().endsWith('.md')) {
87
+ markdownFiles.push({
88
+ displayPath: entryPath,
89
+ resolvedPath: resolvedEntryPath,
90
+ });
91
+ }
92
+ }
93
+ }
94
+ return markdownFiles;
95
+ }
96
+ exports.collectMarkdownFiles = collectMarkdownFiles;
97
+ //# sourceMappingURL=shared-routes-markdown-walker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-routes-markdown-walker.js","sourceRoot":"","sources":["../../src/web-server/shared-routes-markdown-walker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Shared Routes — Markdown file reading and description extraction
3
+ *
4
+ * Handles YAML frontmatter parsing, body-line extraction, and safe
5
+ * bounded reads for both description snippets and full content.
6
+ *
7
+ * Directory walking is in shared-routes-markdown-walker.ts.
8
+ */
9
+ /** Exported for content module which uses a larger limit. */
10
+ export declare const MAX_CONTENT_FILE_BYTES: number;
11
+ export type { MarkdownFileEntry } from './shared-routes-markdown-walker';
12
+ export { collectMarkdownFiles } from './shared-routes-markdown-walker';
13
+ export declare function extractDescription(content: string): string;
14
+ export declare function readMarkdownDescription(markdownPath: string, allowedRoots: Set<string>): string | null;
15
+ export declare function readFirstMarkdownDescription(markdownPaths: string[], allowedRoots: Set<string>): string | null;
16
+ export declare function readMarkdownContent(markdownPath: string, allowedRoots: Set<string>): string | null;
17
+ export declare function resolveReadableMarkdownPath(markdownPaths: string[], allowedRoots: Set<string>): string | null;
18
+ //# sourceMappingURL=shared-routes-markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-routes-markdown.d.ts","sourceRoot":"","sources":["../../src/web-server/shared-routes-markdown.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,6DAA6D;AAC7D,eAAO,MAAM,sBAAsB,QAAkB,CAAC;AAGtD,YAAY,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AA8CvE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAgB1D;AAMD,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,MAAM,GAAG,IAAI,CAef;AAED,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,MAAM,EAAE,EACvB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,MAAM,GAAG,IAAI,CAQf;AAED,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,MAAM,GAAG,IAAI,CAcf;AAED,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,MAAM,EAAE,EACvB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,MAAM,GAAG,IAAI,CAiBf"}