@crewx/doc 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ # @crewx/doc
2
+
3
+ Markdown TOC extraction and section management for CrewX.
4
+
5
+ ```bash
6
+ npx doc toc <file>
7
+ ```
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,388 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const engine_1 = require("./src/engine");
40
+ const indexer_1 = require("./src/indexer");
41
+ const knowledge_core_1 = require("@crewx/knowledge-core");
42
+ function loadTracer() {
43
+ const candidates = [
44
+ path.join(__dirname, '../../../../skills/lib/skill-tracer.js'),
45
+ path.join(__dirname, '../../../skills/lib/skill-tracer.js'),
46
+ ];
47
+ for (const p of candidates) {
48
+ try {
49
+ if (fs.existsSync(p))
50
+ return require(p);
51
+ }
52
+ catch { }
53
+ }
54
+ return null;
55
+ }
56
+ function showSkillHelp() {
57
+ const skillMd = path.join(__dirname, '..', 'SKILL.md');
58
+ if (fs.existsSync(skillMd)) {
59
+ process.stdout.write(fs.readFileSync(skillMd, 'utf-8'));
60
+ }
61
+ else {
62
+ console.log('No SKILL.md found. Use --help for usage.');
63
+ }
64
+ }
65
+ const args = process.argv.slice(2);
66
+ const command = args[0];
67
+ const forceColor = args.includes('--color');
68
+ const noColor = !forceColor && (args.includes('--no-color') || !process.stdout.isTTY || !!process.env.NO_COLOR);
69
+ const engine = new engine_1.DocEngine(noColor);
70
+ function printUsage() {
71
+ const c = noColor
72
+ ? { cyan: '', yellow: '', reset: '' }
73
+ : { cyan: '\x1b[36m', yellow: '\x1b[33m', reset: '\x1b[0m' };
74
+ console.log(`
75
+ ${c.cyan}doc${c.reset} - Document management and knowledge tools
76
+
77
+ ${c.yellow}Usage:${c.reset}
78
+ doc create <dir> "<title>" [--tags=t1,t2] [--category=cat] [--author=agent] [--body="content"] [--important]
79
+ doc toc <file> [--depth=N] Extract TOC (default depth: 6)
80
+ doc section <file> <heading> Extract specific section
81
+ doc status <file> Show TOC with status markers
82
+ doc summary <file> Show implementation status summary
83
+ doc index [dir] Index docs with frontmatter (default: docs/)
84
+ doc stats [dir] Show document statistics
85
+ doc find <query> [dir] BM25 search docs (default dir: docs/)
86
+ doc graph [dir] Build document graph
87
+ doc tags [dir] Aggregate tags with counts
88
+ doc properties [dir] Show frontmatter property values
89
+
90
+ ${c.yellow}Examples:${c.reset}
91
+ doc create docs/research "테스트 문서" --tags=test,research --category=research
92
+ doc toc docs/설계서.md
93
+ doc section docs/설계서.md "API 설계"
94
+ doc index
95
+ doc find "온보딩"
96
+ doc tags
97
+ `);
98
+ }
99
+ async function main() {
100
+ if (command === 'help') {
101
+ showSkillHelp();
102
+ process.exit(0);
103
+ }
104
+ if (!command || command === '--help' || command === '-h') {
105
+ printUsage();
106
+ process.exit(0);
107
+ }
108
+ const docsDir = args[1] || 'docs';
109
+ if (command === 'index') {
110
+ const entries = (0, indexer_1.indexDocs)(docsDir);
111
+ console.log(`Indexed ${entries.length} documents from ${docsDir}/`);
112
+ const importantEntries = entries.filter(e => e.important);
113
+ const normalEntries = entries.filter(e => !e.important);
114
+ const sorted = [...importantEntries, ...normalEntries];
115
+ for (const entry of sorted) {
116
+ const star = entry.important ? '⭐ ' : '';
117
+ const tags = entry.tags.length > 0 ? ` [${entry.tags.join(', ')}]` : '';
118
+ console.log(` ${star}${entry.id} (${entry.category})${tags} — ${entry.summary}`);
119
+ }
120
+ const allTags = [...new Set(entries.flatMap(e => e.tags))].slice(0, 3);
121
+ const ctx = {
122
+ commandId: 'doc.index',
123
+ params: {},
124
+ resultTags: allTags,
125
+ resultCount: entries.length,
126
+ };
127
+ const actions = (0, knowledge_core_1.generateNextActions)(ctx);
128
+ const block = (0, knowledge_core_1.formatActions)(actions);
129
+ if (block)
130
+ console.log(block);
131
+ return;
132
+ }
133
+ if (command === 'stats') {
134
+ const entries = (0, indexer_1.indexDocs)(docsDir);
135
+ const importantCount = entries.filter(e => e.important).length;
136
+ const categoryCounts = {};
137
+ for (const entry of entries) {
138
+ categoryCounts[entry.category] = (categoryCounts[entry.category] ?? 0) + 1;
139
+ }
140
+ const sortedCategories = Object.entries(categoryCounts).sort(([, a], [, b]) => b - a);
141
+ const tags = (0, indexer_1.collectTags)(entries);
142
+ const sortedTags = Object.entries(tags).sort(([, a], [, b]) => b - a).slice(0, 10);
143
+ const importantNote = importantCount > 0 ? `, ${importantCount} ⭐ important` : '';
144
+ console.log(`Document Stats: ${docsDir}/ (${entries.length} docs${importantNote})`);
145
+ console.log('\nCategories:');
146
+ for (const [cat, count] of sortedCategories) {
147
+ console.log(` ${cat}: ${count}`);
148
+ }
149
+ console.log('\nTags TOP 10:');
150
+ if (sortedTags.length === 0) {
151
+ console.log(' (none)');
152
+ }
153
+ else {
154
+ for (const [tag, count] of sortedTags) {
155
+ console.log(` ${tag}: ${count}`);
156
+ }
157
+ }
158
+ const topTags = sortedTags.slice(0, 3).map(([t]) => t);
159
+ const statsCtx = {
160
+ commandId: 'doc.stats',
161
+ params: {},
162
+ resultTags: topTags,
163
+ resultCount: entries.length,
164
+ };
165
+ const statsActions = (0, knowledge_core_1.generateNextActions)(statsCtx);
166
+ const statsBlock = (0, knowledge_core_1.formatActions)(statsActions);
167
+ if (statsBlock)
168
+ console.log(statsBlock);
169
+ return;
170
+ }
171
+ if (command === 'find') {
172
+ const query = args[1];
173
+ if (!query) {
174
+ const red = noColor ? '' : '\x1b[31m';
175
+ const reset = noColor ? '' : '\x1b[0m';
176
+ console.error(`${red}Error: Query required${reset}`);
177
+ process.exit(1);
178
+ }
179
+ const dir = args[2] || 'docs';
180
+ const entries = (0, indexer_1.indexDocs)(dir);
181
+ const results = (0, indexer_1.findDocs)(entries, query);
182
+ if (results.length === 0) {
183
+ console.log('No results found.');
184
+ }
185
+ else {
186
+ console.log(`Found ${results.length} results:`);
187
+ for (const r of results) {
188
+ console.log(` [${r._score}] ${r.id} — ${r.summary}`);
189
+ }
190
+ }
191
+ const resultTags = [...new Set(results.flatMap(r => r.tags ?? []))].slice(0, 3);
192
+ const resultIds = results.slice(0, 3).map(r => r.id);
193
+ const findCtx = {
194
+ commandId: 'doc.find',
195
+ params: { query },
196
+ resultTags,
197
+ resultIds,
198
+ resultCount: results.length,
199
+ };
200
+ const findActions = (0, knowledge_core_1.generateNextActions)(findCtx);
201
+ const findBlock = (0, knowledge_core_1.formatActions)(findActions);
202
+ if (findBlock)
203
+ console.log(findBlock);
204
+ return;
205
+ }
206
+ if (command === 'graph') {
207
+ const entries = (0, indexer_1.indexDocs)(docsDir);
208
+ const graph = (0, indexer_1.buildDocGraph)(entries);
209
+ console.log(`Graph: ${graph.stats.nodeCount} nodes, ${graph.stats.edgeCount} edges`);
210
+ if (graph.edges.length > 0) {
211
+ console.log('Edges:');
212
+ for (const edge of graph.edges) {
213
+ console.log(` ${edge.from} ↔ ${edge.to} (${edge.type}, w=${edge.weight})`);
214
+ }
215
+ }
216
+ const graphTags = [...new Set(entries.flatMap(e => e.tags))].slice(0, 3);
217
+ const graphCtx = {
218
+ commandId: 'doc.graph',
219
+ params: {},
220
+ resultTags: graphTags,
221
+ resultCount: graph.stats.nodeCount,
222
+ };
223
+ const graphActions = (0, knowledge_core_1.generateNextActions)(graphCtx);
224
+ const graphBlock = (0, knowledge_core_1.formatActions)(graphActions);
225
+ if (graphBlock)
226
+ console.log(graphBlock);
227
+ return;
228
+ }
229
+ if (command === 'tags') {
230
+ const entries = (0, indexer_1.indexDocs)(docsDir);
231
+ const tags = (0, indexer_1.collectTags)(entries);
232
+ const sorted = Object.entries(tags).sort(([, a], [, b]) => b - a);
233
+ console.log(`Tags (${sorted.length} unique):`);
234
+ for (const [tag, count] of sorted) {
235
+ console.log(` ${tag}: ${count}`);
236
+ }
237
+ const topTags = sorted.slice(0, 3).map(([t]) => t);
238
+ const tagsCtx = {
239
+ commandId: 'doc.tags',
240
+ params: {},
241
+ resultTags: topTags,
242
+ resultCount: sorted.length,
243
+ };
244
+ const tagsActions = (0, knowledge_core_1.generateNextActions)(tagsCtx);
245
+ const tagsBlock = (0, knowledge_core_1.formatActions)(tagsActions);
246
+ if (tagsBlock)
247
+ console.log(tagsBlock);
248
+ return;
249
+ }
250
+ if (command === 'properties') {
251
+ const entries = (0, indexer_1.indexDocs)(docsDir);
252
+ const props = (0, indexer_1.collectProperties)(entries);
253
+ console.log('Frontmatter properties:');
254
+ for (const [key, values] of Object.entries(props)) {
255
+ console.log(` ${key}: ${values.join(', ')}`);
256
+ }
257
+ const propTags = [...new Set(entries.flatMap(e => e.tags))].slice(0, 3);
258
+ const propCtx = {
259
+ commandId: 'doc.index',
260
+ params: {},
261
+ resultTags: propTags,
262
+ resultCount: entries.length,
263
+ };
264
+ const propActions = (0, knowledge_core_1.generateNextActions)(propCtx);
265
+ const propBlock = (0, knowledge_core_1.formatActions)(propActions);
266
+ if (propBlock)
267
+ console.log(propBlock);
268
+ return;
269
+ }
270
+ if (command === 'create') {
271
+ const dir = args[1];
272
+ const title = args[2];
273
+ if (!dir || !title) {
274
+ const red = noColor ? '' : '\x1b[31m';
275
+ const reset = noColor ? '' : '\x1b[0m';
276
+ console.error(`${red}Error: dir and title are required${reset}`);
277
+ console.error('Usage: doc create <dir> "<title>" [--tags=t1,t2] [--category=cat] [--author=agent] [--body="content"] [--important]');
278
+ process.exit(1);
279
+ }
280
+ const tagsArg = args.find(a => a.startsWith('--tags='));
281
+ const tags = tagsArg ? tagsArg.slice('--tags='.length).split(',').map(t => t.trim()).filter(Boolean) : [];
282
+ const categoryArg = args.find(a => a.startsWith('--category='));
283
+ const category = categoryArg ? categoryArg.slice('--category='.length) : 'general';
284
+ const authorArg = args.find(a => a.startsWith('--author='));
285
+ const author = authorArg ? authorArg.slice('--author='.length) : '';
286
+ const bodyArg = args.find(a => a.startsWith('--body='));
287
+ const body = bodyArg ? bodyArg.slice('--body='.length) : '';
288
+ const important = args.includes('--important');
289
+ const slug = title
290
+ .trim()
291
+ .replace(/[\s_]+/g, '-')
292
+ .toLowerCase()
293
+ .replace(/[^a-z0-9\uAC00-\uD7AF\u3130-\u318F-]/g, '')
294
+ .replace(/-+/g, '-')
295
+ .replace(/^-+|-+$/g, '');
296
+ const createFilePath = path.join(dir, `${slug}.md`);
297
+ if (fs.existsSync(createFilePath)) {
298
+ const red = noColor ? '' : '\x1b[31m';
299
+ const reset = noColor ? '' : '\x1b[0m';
300
+ console.error(`${red}Error: File already exists: ${createFilePath}${reset}`);
301
+ process.exit(1);
302
+ }
303
+ fs.mkdirSync(dir, { recursive: true });
304
+ const today = new Date().toISOString().split('T')[0];
305
+ const tagsYaml = tags.length > 0 ? `[${tags.join(', ')}]` : '[]';
306
+ const authorLine = author ? `author: ${author}\n` : '';
307
+ const importantLine = important ? `important: true\n` : '';
308
+ let content = `---\ntype: document\nsummary: ${title}\ncategory: ${category}\ntags: ${tagsYaml}\ndate: ${today}\n${authorLine}${importantLine}---\n`;
309
+ if (body) {
310
+ content += `\n${body}\n`;
311
+ }
312
+ fs.writeFileSync(createFilePath, content, 'utf-8');
313
+ const green = noColor ? '' : '\x1b[32m';
314
+ const reset2 = noColor ? '' : '\x1b[0m';
315
+ console.log(`${green}Created:${reset2} ${createFilePath}`);
316
+ const createCtx = {
317
+ commandId: 'doc.create',
318
+ params: { dir, title },
319
+ resultTags: tags,
320
+ resultCount: 1,
321
+ };
322
+ const createActions = (0, knowledge_core_1.generateNextActions)(createCtx);
323
+ const createBlock = (0, knowledge_core_1.formatActions)(createActions);
324
+ if (createBlock)
325
+ console.log(createBlock);
326
+ return;
327
+ }
328
+ const filePath = args[1];
329
+ if (!filePath) {
330
+ const red = noColor ? '' : '\x1b[31m';
331
+ const reset = noColor ? '' : '\x1b[0m';
332
+ console.error(`${red}Error: File path required${reset}`);
333
+ printUsage();
334
+ process.exit(1);
335
+ }
336
+ switch (command) {
337
+ case 'toc': {
338
+ const depthArg = args.find(a => a.startsWith('--depth='));
339
+ const maxDepth = depthArg ? parseInt(depthArg.split('=')[1], 10) : 6;
340
+ engine.toc(filePath, { maxDepth });
341
+ break;
342
+ }
343
+ case 'section': {
344
+ const selector = args[2];
345
+ if (!selector) {
346
+ const red = noColor ? '' : '\x1b[31m';
347
+ const reset = noColor ? '' : '\x1b[0m';
348
+ console.error(`${red}Error: Heading selector required${reset}`);
349
+ process.exit(1);
350
+ }
351
+ engine.section(filePath, selector);
352
+ break;
353
+ }
354
+ case 'status': {
355
+ engine.status(filePath);
356
+ break;
357
+ }
358
+ case 'summary': {
359
+ engine.summary(filePath);
360
+ break;
361
+ }
362
+ default: {
363
+ const red = noColor ? '' : '\x1b[31m';
364
+ const reset = noColor ? '' : '\x1b[0m';
365
+ console.error(`${red}Unknown command: ${command}${reset}`);
366
+ printUsage();
367
+ process.exit(1);
368
+ }
369
+ }
370
+ }
371
+ const tracer = loadTracer();
372
+ if (tracer) {
373
+ tracer.run('crewx/doc', main).catch((err) => {
374
+ const red = noColor ? '' : '\x1b[31m';
375
+ const reset = noColor ? '' : '\x1b[0m';
376
+ console.error(`${red}Error: ${err.message}${reset}`);
377
+ process.exit(1);
378
+ });
379
+ }
380
+ else {
381
+ main().catch(err => {
382
+ const red = noColor ? '' : '\x1b[31m';
383
+ const reset = noColor ? '' : '\x1b[0m';
384
+ console.error(`${red}Error: ${err.message}${reset}`);
385
+ process.exit(1);
386
+ });
387
+ }
388
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Heading, HeadingStatusResult, Section, StatusStats, TocOptions } from './types';
2
+ export declare class DocEngine {
3
+ private colors;
4
+ constructor(noColor?: boolean);
5
+ extractHeadings(content: string, maxDepth?: number): Heading[];
6
+ detectStatus(text: string): HeadingStatusResult;
7
+ formatTocTree(headings: Heading[], showStatus?: boolean): string;
8
+ extractSection(content: string, headingSelector: string): Section | null;
9
+ generateStatusSummary(content: string): StatusStats;
10
+ toc(filePath: string, opts?: TocOptions): void;
11
+ section(filePath: string, selector: string): void;
12
+ status(filePath: string): void;
13
+ summary(filePath: string): void;
14
+ private readFile;
15
+ }
16
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAY9F,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;gBAElB,OAAO,UAAQ;IAkB3B,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,OAAO,EAAE;IAuCzD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB;IAmB/C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,UAAU,UAAQ,GAAG,MAAM;IAuB9D,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAkCxE,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;IAenD,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,UAAe,GAAG,IAAI;IAUlD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAgBjD,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAS9B,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAgB/B,OAAO,CAAC,QAAQ;CAajB"}
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.DocEngine = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const COLORS = {
40
+ reset: '\x1b[0m',
41
+ dim: '\x1b[2m',
42
+ green: '\x1b[32m',
43
+ red: '\x1b[31m',
44
+ yellow: '\x1b[33m',
45
+ cyan: '\x1b[36m',
46
+ };
47
+ class DocEngine {
48
+ constructor(noColor = false) {
49
+ if (noColor || process.env.NO_COLOR) {
50
+ this.colors = {
51
+ reset: '',
52
+ dim: '',
53
+ green: '',
54
+ red: '',
55
+ yellow: '',
56
+ cyan: '',
57
+ };
58
+ }
59
+ else {
60
+ this.colors = { ...COLORS };
61
+ }
62
+ }
63
+ extractHeadings(content, maxDepth = 6) {
64
+ const lines = content.split('\n');
65
+ const headings = [];
66
+ let inCodeBlock = false;
67
+ for (let i = 0; i < lines.length; i++) {
68
+ const line = lines[i];
69
+ if (line.startsWith('```')) {
70
+ inCodeBlock = !inCodeBlock;
71
+ continue;
72
+ }
73
+ if (inCodeBlock)
74
+ continue;
75
+ const match = line.match(/^(#{1,6})\s+(.+)$/);
76
+ if (match) {
77
+ const depth = match[1].length;
78
+ if (depth <= maxDepth) {
79
+ const text = match[2].trim();
80
+ const id = text
81
+ .toLowerCase()
82
+ .replace(/[^\w\s가-힣-]/g, '')
83
+ .replace(/\s+/g, '-');
84
+ headings.push({ depth, text, id, line: i + 1 });
85
+ }
86
+ }
87
+ }
88
+ return headings;
89
+ }
90
+ detectStatus(text) {
91
+ if (text.includes('✅') || text.includes('[x]') || text.toLowerCase().includes('구현됨')) {
92
+ return { status: 'done', icon: '✅' };
93
+ }
94
+ if (text.includes('❌') || text.includes('[ ]') || text.toLowerCase().includes('미구현')) {
95
+ return { status: 'todo', icon: '❌' };
96
+ }
97
+ if (text.includes('⚠️') || text.toLowerCase().includes('부분')) {
98
+ return { status: 'partial', icon: '⚠️' };
99
+ }
100
+ if (text.includes('🚧') || text.toLowerCase().includes('진행')) {
101
+ return { status: 'wip', icon: '🚧' };
102
+ }
103
+ return { status: 'unknown', icon: ' ' };
104
+ }
105
+ formatTocTree(headings, showStatus = false) {
106
+ const c = this.colors;
107
+ const lines = [];
108
+ for (const h of headings) {
109
+ const indent = ' '.repeat(h.depth - 1);
110
+ const lineNum = c.dim + `L${h.line}`.padStart(5) + c.reset;
111
+ let statusIcon = '';
112
+ if (showStatus) {
113
+ const { icon } = this.detectStatus(h.text);
114
+ statusIcon = icon + ' ';
115
+ }
116
+ lines.push(`${lineNum} ${indent}${statusIcon}${h.text}`);
117
+ }
118
+ return lines.join('\n');
119
+ }
120
+ extractSection(content, headingSelector) {
121
+ const lines = content.split('\n');
122
+ const headings = this.extractHeadings(content);
123
+ const selector = headingSelector.toLowerCase();
124
+ const targetIdx = headings.findIndex(h => h.text.toLowerCase().includes(selector) || h.id === selector);
125
+ if (targetIdx === -1) {
126
+ return null;
127
+ }
128
+ const target = headings[targetIdx];
129
+ const startLine = target.line - 1;
130
+ let endLine = lines.length;
131
+ for (let i = targetIdx + 1; i < headings.length; i++) {
132
+ if (headings[i].depth <= target.depth) {
133
+ endLine = headings[i].line - 1;
134
+ break;
135
+ }
136
+ }
137
+ return {
138
+ heading: target,
139
+ content: lines.slice(startLine, endLine).join('\n'),
140
+ };
141
+ }
142
+ generateStatusSummary(content) {
143
+ const headings = this.extractHeadings(content);
144
+ const stats = { done: 0, todo: 0, partial: 0, wip: 0, unknown: 0 };
145
+ for (const h of headings) {
146
+ const { status } = this.detectStatus(h.text);
147
+ stats[status]++;
148
+ }
149
+ return stats;
150
+ }
151
+ toc(filePath, opts = {}) {
152
+ const content = this.readFile(filePath);
153
+ const maxDepth = opts.maxDepth ?? 6;
154
+ const headings = this.extractHeadings(content, maxDepth);
155
+ console.log(this.formatTocTree(headings));
156
+ }
157
+ section(filePath, selector) {
158
+ const c = this.colors;
159
+ const content = this.readFile(filePath);
160
+ const result = this.extractSection(content, selector);
161
+ if (!result) {
162
+ console.error(`${c.red}Error: Section not found: ${selector}${c.reset}`);
163
+ process.exit(1);
164
+ }
165
+ console.log(result.content);
166
+ }
167
+ status(filePath) {
168
+ const content = this.readFile(filePath);
169
+ const headings = this.extractHeadings(content);
170
+ console.log(this.formatTocTree(headings, true));
171
+ }
172
+ summary(filePath) {
173
+ const c = this.colors;
174
+ const content = this.readFile(filePath);
175
+ const stats = this.generateStatusSummary(content);
176
+ console.log(`
177
+ ${c.cyan}Implementation Status Summary${c.reset}
178
+ ─────────────────────────────
179
+ ${c.green}✅ Done:${c.reset} ${stats.done}
180
+ ${c.red}❌ Todo:${c.reset} ${stats.todo}
181
+ ${c.yellow}⚠️ Partial:${c.reset} ${stats.partial}
182
+ 🚧 WIP: ${stats.wip}
183
+ Unknown: ${stats.unknown}
184
+ `);
185
+ }
186
+ readFile(filePath) {
187
+ const c = this.colors;
188
+ const resolvedPath = path.isAbsolute(filePath)
189
+ ? filePath
190
+ : path.resolve(process.cwd(), filePath);
191
+ if (!fs.existsSync(resolvedPath)) {
192
+ console.error(`${c.red}Error: File not found: ${resolvedPath}${c.reset}`);
193
+ process.exit(1);
194
+ }
195
+ return fs.readFileSync(resolvedPath, 'utf-8');
196
+ }
197
+ }
198
+ exports.DocEngine = DocEngine;
199
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { KnowledgeEntry, ScoredEntry, Graph, BuildGraphOptions } from '@crewx/knowledge-core';
2
+ export declare function indexDocs(docsDir: string): KnowledgeEntry[];
3
+ export declare function findDocs(entries: KnowledgeEntry[], query: string): ScoredEntry[];
4
+ export declare function buildDocGraph(entries: KnowledgeEntry[], options?: BuildGraphOptions): Graph;
5
+ export declare function collectTags(entries: KnowledgeEntry[]): Record<string, number>;
6
+ export declare function collectProperties(entries: KnowledgeEntry[]): Record<string, string[]>;
7
+ //# sourceMappingURL=indexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/indexer.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,KAAK,EACL,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAuC/B,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CA0B3D;AAMD,wBAAgB,QAAQ,CACtB,OAAO,EAAE,cAAc,EAAE,EACzB,KAAK,EAAE,MAAM,GACZ,WAAW,EAAE,CAEf;AAMD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,EAAE,EACzB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,KAAK,CAEP;AAMD,wBAAgB,WAAW,CACzB,OAAO,EAAE,cAAc,EAAE,GACxB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWxB;AAMD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,cAAc,EAAE,GACxB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAsB1B"}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.indexDocs = indexDocs;
37
+ exports.findDocs = findDocs;
38
+ exports.buildDocGraph = buildDocGraph;
39
+ exports.collectTags = collectTags;
40
+ exports.collectProperties = collectProperties;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const knowledge_core_1 = require("@crewx/knowledge-core");
44
+ const DOC_FIELD_WEIGHTS = { summary: 3, tags: 2, body: 1 };
45
+ function collectMdFiles(dir) {
46
+ const results = [];
47
+ if (!fs.existsSync(dir))
48
+ return results;
49
+ const items = fs.readdirSync(dir, { withFileTypes: true });
50
+ for (const item of items) {
51
+ const fullPath = path.join(dir, item.name);
52
+ if (item.isDirectory()) {
53
+ results.push(...collectMdFiles(fullPath));
54
+ }
55
+ else if (item.isFile() && item.name.endsWith('.md')) {
56
+ results.push(fullPath);
57
+ }
58
+ }
59
+ return results;
60
+ }
61
+ function filePathToId(filePath, baseDir) {
62
+ const relative = path.relative(baseDir, filePath);
63
+ return relative.replace(/\.md$/, '');
64
+ }
65
+ function indexDocs(docsDir) {
66
+ const files = collectMdFiles(docsDir);
67
+ const entries = [];
68
+ for (const file of files) {
69
+ const raw = fs.readFileSync(file, 'utf-8');
70
+ const { data, content } = (0, knowledge_core_1.parseFrontmatter)(raw);
71
+ if (!data.type && !data.summary)
72
+ continue;
73
+ const entry = {
74
+ id: filePathToId(file, docsDir),
75
+ type: (data.type || 'document'),
76
+ category: data.category || 'general',
77
+ tags: Array.isArray(data.tags) ? data.tags : [],
78
+ date: data.date || '',
79
+ summary: data.summary || '',
80
+ body: content.trim(),
81
+ ...(data.important === true ? { important: true } : {}),
82
+ };
83
+ entries.push(entry);
84
+ }
85
+ return entries;
86
+ }
87
+ function findDocs(entries, query) {
88
+ return (0, knowledge_core_1.searchEntries)(entries, query, DOC_FIELD_WEIGHTS);
89
+ }
90
+ function buildDocGraph(entries, options) {
91
+ return (0, knowledge_core_1.buildGraph)(entries, options);
92
+ }
93
+ function collectTags(entries) {
94
+ const tagCounts = {};
95
+ for (const entry of entries) {
96
+ if (!entry.tags)
97
+ continue;
98
+ for (const tag of entry.tags) {
99
+ tagCounts[tag] = (tagCounts[tag] || 0) + 1;
100
+ }
101
+ }
102
+ return tagCounts;
103
+ }
104
+ function collectProperties(entries) {
105
+ if (entries.length === 0)
106
+ return {};
107
+ const propsMap = {};
108
+ const targetKeys = ['type', 'category'];
109
+ for (const entry of entries) {
110
+ for (const key of targetKeys) {
111
+ const value = entry[key];
112
+ if (typeof value === 'string' && value) {
113
+ if (!propsMap[key])
114
+ propsMap[key] = new Set();
115
+ propsMap[key].add(value);
116
+ }
117
+ }
118
+ }
119
+ const result = {};
120
+ for (const [key, values] of Object.entries(propsMap)) {
121
+ result[key] = [...values].sort();
122
+ }
123
+ return result;
124
+ }
125
+ //# sourceMappingURL=indexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../src/indexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface Heading {
2
+ depth: number;
3
+ text: string;
4
+ id: string;
5
+ line: number;
6
+ }
7
+ export type HeadingStatus = 'done' | 'todo' | 'partial' | 'wip' | 'unknown';
8
+ export interface HeadingStatusResult {
9
+ status: HeadingStatus;
10
+ icon: string;
11
+ }
12
+ export interface Section {
13
+ heading: Heading;
14
+ content: string;
15
+ }
16
+ export interface StatusStats {
17
+ done: number;
18
+ todo: number;
19
+ partial: number;
20
+ wip: number;
21
+ unknown: number;
22
+ }
23
+ export interface TocOptions {
24
+ maxDepth?: number;
25
+ showStatus?: boolean;
26
+ noColor?: boolean;
27
+ }
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,CAAC;AAE5E,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@crewx/doc",
3
+ "version": "0.1.0",
4
+ "description": "Markdown TOC extraction and section management for CrewX",
5
+ "type": "commonjs",
6
+ "main": "dist/src/engine.js",
7
+ "types": "dist/src/engine.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "require": "./dist/src/engine.js",
11
+ "types": "./dist/src/engine.d.ts"
12
+ }
13
+ },
14
+ "bin": { "doc": "./dist/cli.js" },
15
+ "files": ["dist"],
16
+ "scripts": {
17
+ "build": "tsc",
18
+ "dev": "ts-node cli.ts",
19
+ "clean": "rm -rf dist"
20
+ },
21
+ "keywords": ["crewx", "markdown", "toc", "documentation"],
22
+ "license": "MIT",
23
+ "dependencies": {
24
+ "@crewx/knowledge-core": "^0.1.0"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^20.0.0",
28
+ "ts-node": "^10.9.0",
29
+ "typescript": "^5.0.0"
30
+ }
31
+ }