@echoes-io/mcp-server 7.1.0 → 8.0.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.
Files changed (104) hide show
  1. package/README.md +2 -2
  2. package/cli/program.d.ts.map +1 -1
  3. package/cli/program.js +5 -5
  4. package/cli/program.js.map +1 -1
  5. package/lib/constants.d.ts +0 -3
  6. package/lib/constants.d.ts.map +1 -1
  7. package/lib/constants.js +1 -7
  8. package/lib/constants.js.map +1 -1
  9. package/lib/prompts/arc-resume.d.ts +2 -0
  10. package/lib/prompts/arc-resume.d.ts.map +1 -0
  11. package/lib/{tools → prompts}/arc-resume.js +51 -44
  12. package/lib/prompts/arc-resume.js.map +1 -0
  13. package/lib/prompts/index.d.ts +1 -0
  14. package/lib/prompts/index.d.ts.map +1 -1
  15. package/lib/prompts/index.js +28 -0
  16. package/lib/prompts/index.js.map +1 -1
  17. package/lib/rag/index.d.ts +13 -0
  18. package/lib/rag/index.d.ts.map +1 -0
  19. package/lib/rag/index.js +54 -0
  20. package/lib/rag/index.js.map +1 -0
  21. package/lib/rag/parser.d.ts +8 -0
  22. package/lib/rag/parser.d.ts.map +1 -0
  23. package/lib/rag/parser.js +39 -0
  24. package/lib/rag/parser.js.map +1 -0
  25. package/lib/rag/schema.d.ts +6 -0
  26. package/lib/rag/schema.d.ts.map +1 -0
  27. package/lib/rag/schema.js +49 -0
  28. package/lib/rag/schema.js.map +1 -0
  29. package/lib/server.d.ts.map +1 -1
  30. package/lib/server.js +0 -12
  31. package/lib/server.js.map +1 -1
  32. package/lib/tools/consistency/index.d.ts +1 -1
  33. package/lib/tools/consistency/rules/entity-duplicate.d.ts.map +1 -1
  34. package/lib/tools/consistency/rules/entity-duplicate.js +3 -5
  35. package/lib/tools/consistency/rules/entity-duplicate.js.map +1 -1
  36. package/lib/tools/consistency/rules/first-time-content.d.ts.map +1 -1
  37. package/lib/tools/consistency/rules/first-time-content.js +7 -2
  38. package/lib/tools/consistency/rules/first-time-content.js.map +1 -1
  39. package/lib/tools/consistency/rules/relation-jump.d.ts.map +1 -1
  40. package/lib/tools/consistency/rules/relation-jump.js +11 -8
  41. package/lib/tools/consistency/rules/relation-jump.js.map +1 -1
  42. package/lib/tools/consistency/types.d.ts.map +1 -1
  43. package/lib/tools/graph-export.d.ts +1 -2
  44. package/lib/tools/graph-export.d.ts.map +1 -1
  45. package/lib/tools/graph-export.js +49 -116
  46. package/lib/tools/graph-export.js.map +1 -1
  47. package/lib/tools/history.d.ts +1 -1
  48. package/lib/tools/history.d.ts.map +1 -1
  49. package/lib/tools/history.js +43 -55
  50. package/lib/tools/history.js.map +1 -1
  51. package/lib/tools/index.d.ts +7 -2
  52. package/lib/tools/index.d.ts.map +1 -1
  53. package/lib/tools/index.js +28 -4
  54. package/lib/tools/index.js.map +1 -1
  55. package/lib/tools/list.d.ts +1 -1
  56. package/lib/tools/list.d.ts.map +1 -1
  57. package/lib/tools/list.js +35 -30
  58. package/lib/tools/list.js.map +1 -1
  59. package/lib/tools/review-apply.d.ts.map +1 -1
  60. package/lib/tools/review-apply.js +49 -207
  61. package/lib/tools/review-apply.js.map +1 -1
  62. package/lib/tools/review-generate.d.ts.map +1 -1
  63. package/lib/tools/review-generate.js +44 -55
  64. package/lib/tools/review-generate.js.map +1 -1
  65. package/lib/tools/review-status.d.ts +12 -17
  66. package/lib/tools/review-status.d.ts.map +1 -1
  67. package/lib/tools/review-status.js +21 -33
  68. package/lib/tools/review-status.js.map +1 -1
  69. package/lib/tools/search.d.ts +1 -1
  70. package/lib/tools/search.d.ts.map +1 -1
  71. package/lib/tools/search.js +62 -44
  72. package/lib/tools/search.js.map +1 -1
  73. package/lib/tools/stats.d.ts.map +1 -1
  74. package/lib/tools/stats.js +43 -7
  75. package/lib/tools/stats.js.map +1 -1
  76. package/lib/types.d.ts.map +1 -1
  77. package/package.json +8 -6
  78. package/lib/database/index.d.ts +0 -36
  79. package/lib/database/index.d.ts.map +0 -1
  80. package/lib/database/index.js +0 -287
  81. package/lib/database/index.js.map +0 -1
  82. package/lib/database/schemas.d.ts +0 -55
  83. package/lib/database/schemas.d.ts.map +0 -1
  84. package/lib/database/schemas.js +0 -78
  85. package/lib/database/schemas.js.map +0 -1
  86. package/lib/indexer/embeddings.d.ts +0 -10
  87. package/lib/indexer/embeddings.d.ts.map +0 -1
  88. package/lib/indexer/embeddings.js +0 -64
  89. package/lib/indexer/embeddings.js.map +0 -1
  90. package/lib/indexer/extractor.d.ts +0 -81
  91. package/lib/indexer/extractor.d.ts.map +0 -1
  92. package/lib/indexer/extractor.js +0 -68
  93. package/lib/indexer/extractor.js.map +0 -1
  94. package/lib/indexer/scanner.d.ts +0 -8
  95. package/lib/indexer/scanner.d.ts.map +0 -1
  96. package/lib/indexer/scanner.js +0 -73
  97. package/lib/indexer/scanner.js.map +0 -1
  98. package/lib/indexer/tasks.d.ts +0 -32
  99. package/lib/indexer/tasks.d.ts.map +0 -1
  100. package/lib/indexer/tasks.js +0 -235
  101. package/lib/indexer/tasks.js.map +0 -1
  102. package/lib/tools/arc-resume.d.ts +0 -26
  103. package/lib/tools/arc-resume.d.ts.map +0 -1
  104. package/lib/tools/arc-resume.js.map +0 -1
@@ -1,68 +0,0 @@
1
- import { GoogleGenAI } from '@google/genai';
2
- import { z } from 'zod';
3
- import { ENTITY_TYPES, RELATION_TYPES } from '../database/schemas.js';
4
- // Zod schemas for extraction
5
- const ExtractedEntitySchema = z.object({
6
- name: z.string().describe('The canonical name of the entity'),
7
- type: z.enum(ENTITY_TYPES).describe('The type of entity'),
8
- description: z.string().describe('A brief description of the entity in context'),
9
- aliases: z.array(z.string()).describe('Alternative names or nicknames'),
10
- });
11
- const ExtractedRelationSchema = z.object({
12
- source: z.string().describe('Name of the source entity'),
13
- target: z.string().describe('Name of the target entity'),
14
- type: z.enum(RELATION_TYPES).describe('The type of relationship'),
15
- description: z.string().describe('A brief description of the relationship'),
16
- });
17
- const ExtractionResultSchema = z.object({
18
- entities: z.array(ExtractedEntitySchema),
19
- relations: z.array(ExtractedRelationSchema),
20
- });
21
- const EXTRACTION_PROMPT = `Analyze the following narrative text and extract:
22
-
23
- 1. ENTITIES: Characters, locations, events, objects, and emotions that are significant to the story.
24
- - Use the character's most common name as the canonical name
25
- - Include nicknames and alternative names as aliases
26
- - Provide a brief description based on what's revealed in this text
27
-
28
- 2. RELATIONS: Relationships between entities.
29
- - Only include relationships that are explicitly shown or strongly implied
30
- - Use the canonical entity names for source and target
31
-
32
- Focus on narrative-relevant information. Be concise but accurate.
33
-
34
- TEXT:
35
- `;
36
- let client = null;
37
- function getClient() {
38
- if (client)
39
- return client;
40
- const apiKey = process.env.GEMINI_API_KEY;
41
- if (!apiKey) {
42
- throw new Error('GEMINI_API_KEY environment variable is required');
43
- }
44
- client = new GoogleGenAI({ apiKey });
45
- return client;
46
- }
47
- const DEFAULT_MODEL = 'gemini-2.5-flash';
48
- export async function extractEntities(content, config) {
49
- const ai = getClient();
50
- const model = config?.model ?? process.env.ECHOES_GEMINI_MODEL ?? DEFAULT_MODEL;
51
- const response = await ai.models.generateContent({
52
- model,
53
- contents: EXTRACTION_PROMPT + content,
54
- config: {
55
- responseMimeType: 'application/json',
56
- responseJsonSchema: z.toJSONSchema(ExtractionResultSchema),
57
- },
58
- });
59
- const text = response.text;
60
- if (!text) {
61
- return { entities: [], relations: [] };
62
- }
63
- return ExtractionResultSchema.parse(JSON.parse(text));
64
- }
65
- export function resetClient() {
66
- client = null;
67
- }
68
- //# sourceMappingURL=extractor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extractor.js","sourceRoot":"","sources":["extractor.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import type { ScannedChapter } from '../database/schemas.js';
2
- export interface ScanResult {
3
- chapters: ScannedChapter[];
4
- arcs: string[];
5
- }
6
- export declare function scanChapter(filePath: string, basePath: string): ScannedChapter;
7
- export declare function scanTimeline(contentPath: string, arcFilter?: string): ScanResult;
8
- //# sourceMappingURL=scanner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["scanner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAqBD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAyB9E;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CA4BhF"}
@@ -1,73 +0,0 @@
1
- import { createHash } from 'node:crypto';
2
- import { readdirSync, readFileSync } from 'node:fs';
3
- import { join, relative } from 'node:path';
4
- import { parseChapter } from '../utils.js';
5
- function computeHash(content) {
6
- return createHash('sha256').update(content).digest('hex').slice(0, 16);
7
- }
8
- function scanDirectory(dir, pattern) {
9
- const files = [];
10
- for (const entry of readdirSync(dir, { withFileTypes: true })) {
11
- const fullPath = join(dir, entry.name);
12
- if (entry.isDirectory()) {
13
- files.push(...scanDirectory(fullPath, pattern));
14
- }
15
- else if (entry.isFile() && pattern.test(entry.name)) {
16
- files.push(fullPath);
17
- }
18
- }
19
- return files;
20
- }
21
- export function scanChapter(filePath, basePath) {
22
- const raw = readFileSync(filePath, 'utf-8');
23
- const { metadata, content, stats } = parseChapter(raw);
24
- if (!metadata.arc || !metadata.episode || !metadata.chapter || !metadata.pov || !metadata.title) {
25
- throw new Error(`Missing required frontmatter in ${filePath}`);
26
- }
27
- return {
28
- id: `${metadata.arc}:${metadata.episode}:${metadata.chapter}`,
29
- file_path: relative(basePath, filePath),
30
- file_hash: computeHash(raw),
31
- arc: metadata.arc,
32
- episode: metadata.episode,
33
- chapter: metadata.chapter,
34
- pov: metadata.pov,
35
- title: metadata.title,
36
- location: metadata.location ?? '',
37
- date: metadata.date ?? '',
38
- summary: metadata.summary ?? '',
39
- content,
40
- word_count: stats.wordCount,
41
- char_count: stats.charCount,
42
- paragraph_count: stats.paragraphCount,
43
- };
44
- }
45
- export function scanTimeline(contentPath, arcFilter) {
46
- const files = scanDirectory(contentPath, /\.md$/);
47
- const chapters = [];
48
- const arcsSet = new Set();
49
- for (const file of files) {
50
- try {
51
- const chapter = scanChapter(file, contentPath);
52
- if (arcFilter && chapter.arc !== arcFilter)
53
- continue;
54
- chapters.push(chapter);
55
- arcsSet.add(chapter.arc);
56
- }
57
- catch {
58
- // Skip files that fail to parse
59
- }
60
- }
61
- chapters.sort((a, b) => {
62
- if (a.arc !== b.arc)
63
- return a.arc.localeCompare(b.arc);
64
- if (a.episode !== b.episode)
65
- return a.episode - b.episode;
66
- return a.chapter - b.chapter;
67
- });
68
- return {
69
- chapters,
70
- arcs: [...arcsSet].sort(),
71
- };
72
- }
73
- //# sourceMappingURL=scanner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scanner.js","sourceRoot":"","sources":["scanner.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- import { Database } from '../database/index.js';
2
- import type { EntityRecord, RelationRecord, ScannedChapter } from '../database/schemas.js';
3
- export interface IndexTasksInput {
4
- contentPath: string;
5
- arc?: string;
6
- force?: boolean;
7
- dbPath: string;
8
- }
9
- export interface IndexTasksContext {
10
- contentPath: string;
11
- arc?: string;
12
- force: boolean;
13
- dbPath: string;
14
- db: Database;
15
- scanned: ScannedChapter[];
16
- toIndex: ScannedChapter[];
17
- toDelete: string[];
18
- entities: Map<string, EntityRecord>;
19
- relations: Map<string, RelationRecord>;
20
- processedCount: number;
21
- }
22
- export interface IndexTasksOutput {
23
- indexed: number;
24
- skipped: number;
25
- deleted: number;
26
- entities: number;
27
- relations: number;
28
- }
29
- export declare function formatProgressBar(current: number, total: number, width?: number): string;
30
- export declare function formatEta(startTime: number, current: number, total: number): string;
31
- export declare function runIndexTasks(input: IndexTasksInput, silent?: boolean): Promise<IndexTasksOutput>;
32
- //# sourceMappingURL=tasks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["tasks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,EAEV,YAAY,EACZ,cAAc,EACd,cAAc,EACf,MAAM,wBAAwB,CAAC;AAKhC,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAEhC,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IAEf,EAAE,EAAE,QAAQ,CAAC;IACb,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAKpF;AAED,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAUnF;AAwKD,wBAAsB,aAAa,CACjC,KAAK,EAAE,eAAe,EACtB,MAAM,UAAQ,GACb,OAAO,CAAC,gBAAgB,CAAC,CAsE3B"}
@@ -1,235 +0,0 @@
1
- import { Listr, PRESET_TIMER } from 'listr2';
2
- import { Database } from '../database/index.js';
3
- import { generateEmbedding, preloadModel } from './embeddings.js';
4
- import { extractEntities } from './extractor.js';
5
- import { scanTimeline } from './scanner.js';
6
- // Progress bar helpers
7
- export function formatProgressBar(current, total, width = 30) {
8
- const pct = total > 0 ? current / total : 0;
9
- const filled = Math.round(pct * width);
10
- const bar = '█'.repeat(filled) + '░'.repeat(width - filled);
11
- return `[${bar}] ${current}/${total} (${Math.round(pct * 100)}%)`;
12
- }
13
- export function formatEta(startTime, current, total) {
14
- if (current === 0)
15
- return 'calculating...';
16
- const elapsed = Date.now() - startTime;
17
- const msPerItem = elapsed / current;
18
- const remaining = msPerItem * (total - current);
19
- const minutes = Math.ceil(remaining / 60000);
20
- if (minutes > 60) {
21
- return `${Math.floor(minutes / 60)}h ${minutes % 60}m`;
22
- }
23
- return `${minutes}m`;
24
- }
25
- function createTasks() {
26
- return [
27
- {
28
- title: 'Loading embedding model',
29
- task: async (ctx, task) => {
30
- task.title = `Loading embedding model (${ctx.db.embeddingModel})`;
31
- await preloadModel(ctx.db.embeddingModel);
32
- },
33
- },
34
- {
35
- title: 'Scanning filesystem',
36
- task: async (ctx, task) => {
37
- const { chapters } = scanTimeline(ctx.contentPath, ctx.arc);
38
- ctx.scanned = chapters;
39
- const existingHashes = await ctx.db.getChapterHashes();
40
- ctx.toIndex = chapters.filter((ch) => ctx.force || existingHashes.get(ch.file_path) !== ch.file_hash);
41
- const currentPaths = new Set(chapters.map((c) => c.file_path));
42
- ctx.toDelete = [...existingHashes.keys()].filter((p) => !currentPaths.has(p));
43
- task.title = `Scanning filesystem (${chapters.length} chapters, ${ctx.toIndex.length} to index)`;
44
- },
45
- },
46
- {
47
- title: 'Processing chapters',
48
- skip: (ctx) => ctx.toIndex.length === 0,
49
- task: async (ctx, task) => {
50
- const startTime = Date.now();
51
- for (let i = 0; i < ctx.toIndex.length; i++) {
52
- const chapter = ctx.toIndex[i];
53
- const bar = formatProgressBar(i + 1, ctx.toIndex.length);
54
- const eta = formatEta(startTime, i + 1, ctx.toIndex.length);
55
- // Embedding phase
56
- task.output =
57
- `${bar} | ETA: ${eta}\n` +
58
- `${chapter.id} - Generating embedding...\n` +
59
- `👤 ${ctx.entities.size} entities | 🔗 ${ctx.relations.size} relations`;
60
- const vector = await generateEmbedding(chapter.content, ctx.db.embeddingModel);
61
- // Extraction phase
62
- task.output =
63
- `${bar} | ETA: ${eta}\n` +
64
- `${chapter.id} - Extracting entities...\n` +
65
- `👤 ${ctx.entities.size} entities | 🔗 ${ctx.relations.size} relations`;
66
- const { entities, relations } = await extractEntities(chapter.content);
67
- // Build and save chapter record
68
- const chapterRecord = {
69
- ...chapter,
70
- vector,
71
- entities: entities.map((e) => `${chapter.arc}:${e.type}:${e.name}`),
72
- indexed_at: Date.now(),
73
- };
74
- await ctx.db.upsertChapters([chapterRecord]);
75
- ctx.processedCount++;
76
- // Aggregate entities
77
- for (const entity of entities) {
78
- const entityId = `${chapter.arc}:${entity.type}:${entity.name}`;
79
- const existing = ctx.entities.get(entityId);
80
- if (existing) {
81
- existing.chapters.push(chapter.id);
82
- existing.chapter_count++;
83
- for (const alias of entity.aliases) {
84
- if (!existing.aliases.includes(alias)) {
85
- existing.aliases.push(alias);
86
- }
87
- }
88
- }
89
- else {
90
- ctx.entities.set(entityId, {
91
- id: entityId,
92
- arc: chapter.arc,
93
- name: entity.name,
94
- type: entity.type,
95
- description: entity.description,
96
- aliases: entity.aliases,
97
- vector: [],
98
- chapters: [chapter.id],
99
- chapter_count: 1,
100
- first_appearance: chapter.id,
101
- indexed_at: Date.now(),
102
- });
103
- }
104
- }
105
- // Aggregate relations
106
- for (const relation of relations) {
107
- const relationId = `${chapter.arc}:${relation.source}:${relation.type}:${relation.target}`;
108
- const existing = ctx.relations.get(relationId);
109
- if (existing) {
110
- if (!existing.chapters.includes(chapter.id)) {
111
- existing.chapters.push(chapter.id);
112
- }
113
- }
114
- else {
115
- ctx.relations.set(relationId, {
116
- id: relationId,
117
- arc: chapter.arc,
118
- source_entity: `${chapter.arc}:CHARACTER:${relation.source}`,
119
- target_entity: `${chapter.arc}:CHARACTER:${relation.target}`,
120
- type: relation.type,
121
- description: relation.description,
122
- weight: 0.5,
123
- chapters: [chapter.id],
124
- indexed_at: Date.now(),
125
- });
126
- }
127
- }
128
- }
129
- task.title = `Processing chapters (${ctx.toIndex.length} chapters)`;
130
- task.output = `👤 ${ctx.entities.size} entities | 🔗 ${ctx.relations.size} relations`;
131
- },
132
- },
133
- {
134
- title: 'Generating entity embeddings',
135
- skip: (ctx) => ctx.entities.size === 0,
136
- task: async (ctx, task) => {
137
- const entities = [...ctx.entities.values()];
138
- const startTime = Date.now();
139
- for (let i = 0; i < entities.length; i++) {
140
- const entity = entities[i];
141
- const bar = formatProgressBar(i + 1, entities.length);
142
- const eta = formatEta(startTime, i + 1, entities.length);
143
- task.output = `${bar} | ETA: ${eta}\n${entity.name}`;
144
- entity.vector = await generateEmbedding(`${entity.name}: ${entity.description}`, ctx.db.embeddingModel);
145
- }
146
- task.title = `Generating entity embeddings (${entities.length} entities)`;
147
- },
148
- },
149
- {
150
- title: 'Saving to database',
151
- skip: (ctx) => ctx.entities.size === 0 && ctx.relations.size === 0 && ctx.toDelete.length === 0,
152
- task: async (ctx, task) => {
153
- if (ctx.entities.size > 0) {
154
- await ctx.db.upsertEntities([...ctx.entities.values()]);
155
- }
156
- if (ctx.relations.size > 0) {
157
- await ctx.db.upsertRelations([...ctx.relations.values()]);
158
- }
159
- if (ctx.toDelete.length > 0) {
160
- await ctx.db.deleteChaptersByPaths(ctx.toDelete);
161
- }
162
- task.title = `Saving to database (${ctx.entities.size} entities, ${ctx.relations.size} relations)`;
163
- },
164
- },
165
- ];
166
- }
167
- export async function runIndexTasks(input, silent = false) {
168
- // Initialize database before creating tasks
169
- const db = new Database(input.dbPath, input.force);
170
- await db.connect();
171
- const baseCtx = {
172
- ...input,
173
- force: input.force ?? false,
174
- db,
175
- scanned: [],
176
- toIndex: [],
177
- toDelete: [],
178
- entities: new Map(),
179
- relations: new Map(),
180
- processedCount: 0,
181
- };
182
- const tasks = silent
183
- ? new Listr(createTasks(), {
184
- concurrent: false,
185
- renderer: 'silent',
186
- ctx: baseCtx,
187
- })
188
- : new Listr(createTasks(), {
189
- concurrent: false,
190
- renderer: 'default',
191
- rendererOptions: {
192
- collapseSubtasks: false,
193
- timer: PRESET_TIMER,
194
- },
195
- ctx: baseCtx,
196
- });
197
- // Handle SIGINT for graceful shutdown
198
- /* c8 ignore start */
199
- let cancelled = false;
200
- const sigintHandler = () => {
201
- cancelled = true;
202
- };
203
- process.on('SIGINT', sigintHandler);
204
- /* c8 ignore stop */
205
- try {
206
- const ctx = await tasks.run();
207
- return {
208
- indexed: ctx.toIndex.length,
209
- skipped: ctx.scanned.length - ctx.toIndex.length,
210
- deleted: ctx.toDelete.length,
211
- entities: ctx.entities.size,
212
- relations: ctx.relations.size,
213
- };
214
- }
215
- catch (error) {
216
- /* c8 ignore start */
217
- if (cancelled) {
218
- // Return partial results on cancellation
219
- return {
220
- indexed: baseCtx.processedCount,
221
- skipped: baseCtx.scanned.length - baseCtx.toIndex.length,
222
- deleted: 0,
223
- entities: baseCtx.entities.size,
224
- relations: baseCtx.relations.size,
225
- };
226
- }
227
- /* c8 ignore stop */
228
- throw error;
229
- }
230
- finally {
231
- process.off('SIGINT', sigintHandler);
232
- db.close();
233
- }
234
- }
235
- //# sourceMappingURL=tasks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["tasks.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import z from 'zod';
2
- import type { ToolConfig } from '../types.js';
3
- export declare const arcResumeConfig: ToolConfig;
4
- export declare const arcResumeSchema: z.ZodObject<{
5
- arc: z.ZodString;
6
- episode: z.ZodOptional<z.ZodNumber>;
7
- lastChapters: z.ZodOptional<z.ZodNumber>;
8
- contentPath: z.ZodOptional<z.ZodString>;
9
- docsPath: z.ZodOptional<z.ZodString>;
10
- }, z.z.core.$strip>;
11
- export type ArcResumeInput = z.infer<typeof arcResumeSchema>;
12
- export interface ArcResumeOutput {
13
- arc: string;
14
- episode: number;
15
- episodeOutline: string;
16
- characters: Record<string, string>;
17
- recentChapters: Array<{
18
- file: string;
19
- pov: string;
20
- title: string;
21
- wordCount: number;
22
- excerpt: string;
23
- }>;
24
- }
25
- export declare function arcResume(input: ArcResumeInput): ArcResumeOutput;
26
- //# sourceMappingURL=arc-resume.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"arc-resume.d.ts","sourceRoot":"","sources":["arc-resume.ts"],"names":[],"mappings":"AAGA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,eAAO,MAAM,eAAe,EAAE,UAW7B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;mBAM1B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,cAAc,EAAE,KAAK,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAaD,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CA6HhE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"arc-resume.js","sourceRoot":"","sources":["arc-resume.ts"],"names":[],"mappings":"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"}