@echoes-io/mcp-server 4.1.1 → 6.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.
Files changed (112) hide show
  1. package/README.md +120 -185
  2. package/cli/index.d.ts +1 -0
  3. package/cli/index.d.ts.map +1 -0
  4. package/cli/index.js +3 -185
  5. package/cli/index.js.map +1 -0
  6. package/cli/program.d.ts +3 -0
  7. package/cli/program.d.ts.map +1 -0
  8. package/cli/program.js +151 -0
  9. package/cli/program.js.map +1 -0
  10. package/lib/constants.d.ts +8 -0
  11. package/lib/constants.d.ts.map +1 -0
  12. package/lib/constants.js +12 -0
  13. package/lib/constants.js.map +1 -0
  14. package/lib/database/index.d.ts +34 -0
  15. package/lib/database/index.d.ts.map +1 -0
  16. package/lib/database/index.js +266 -0
  17. package/lib/database/index.js.map +1 -0
  18. package/lib/database/schemas.d.ts +55 -0
  19. package/lib/database/schemas.d.ts.map +1 -0
  20. package/lib/database/schemas.js +70 -0
  21. package/lib/database/schemas.js.map +1 -0
  22. package/lib/indexer/embeddings.d.ts +6 -0
  23. package/lib/indexer/embeddings.d.ts.map +1 -0
  24. package/lib/indexer/embeddings.js +51 -0
  25. package/lib/indexer/embeddings.js.map +1 -0
  26. package/lib/indexer/extractor.d.ts +81 -0
  27. package/lib/indexer/extractor.d.ts.map +1 -0
  28. package/lib/indexer/extractor.js +68 -0
  29. package/lib/indexer/extractor.js.map +1 -0
  30. package/lib/indexer/scanner.d.ts +8 -0
  31. package/lib/indexer/scanner.d.ts.map +1 -0
  32. package/lib/indexer/scanner.js +73 -0
  33. package/lib/indexer/scanner.js.map +1 -0
  34. package/lib/indexer/tasks.d.ts +32 -0
  35. package/lib/indexer/tasks.d.ts.map +1 -0
  36. package/lib/indexer/tasks.js +228 -0
  37. package/lib/indexer/tasks.js.map +1 -0
  38. package/lib/prompts/index.d.ts +13 -0
  39. package/lib/prompts/index.d.ts.map +1 -0
  40. package/lib/prompts/index.js +153 -0
  41. package/lib/prompts/index.js.map +1 -0
  42. package/lib/server.d.ts +13 -0
  43. package/lib/server.d.ts.map +1 -0
  44. package/lib/server.js +90 -0
  45. package/lib/server.js.map +1 -0
  46. package/lib/tools/index.d.ts +14 -0
  47. package/lib/tools/index.d.ts.map +1 -0
  48. package/lib/tools/index.js +25 -0
  49. package/lib/tools/index.js.map +1 -0
  50. package/lib/tools/search.d.ts +86 -0
  51. package/lib/tools/search.d.ts.map +1 -0
  52. package/lib/tools/search.js +95 -0
  53. package/lib/tools/search.js.map +1 -0
  54. package/lib/tools/stats.d.ts +18 -0
  55. package/lib/tools/stats.d.ts.map +1 -0
  56. package/lib/tools/stats.js +62 -0
  57. package/lib/tools/stats.js.map +1 -0
  58. package/{src → lib}/tools/words-count.d.ts +6 -3
  59. package/lib/tools/words-count.d.ts.map +1 -0
  60. package/lib/tools/words-count.js +31 -0
  61. package/lib/tools/words-count.js.map +1 -0
  62. package/{src/types/frontmatter.d.ts → lib/types.d.ts} +11 -17
  63. package/lib/types.d.ts.map +1 -0
  64. package/lib/types.js +2 -0
  65. package/lib/types.js.map +1 -0
  66. package/lib/utils.d.ts +19 -0
  67. package/lib/utils.d.ts.map +1 -0
  68. package/lib/utils.js +40 -0
  69. package/lib/utils.js.map +1 -0
  70. package/package.json +60 -62
  71. package/src/database/index.d.ts +0 -6
  72. package/src/database/index.js +0 -26
  73. package/src/database/relations.d.ts +0 -744
  74. package/src/database/relations.js +0 -52
  75. package/src/database/schema.d.ts +0 -733
  76. package/src/database/schema.js +0 -69
  77. package/src/database/vector.d.ts +0 -25
  78. package/src/database/vector.js +0 -98
  79. package/src/index.d.ts +0 -5
  80. package/src/index.js +0 -5
  81. package/src/rag/character-ner.d.ts +0 -36
  82. package/src/rag/character-ner.js +0 -416
  83. package/src/rag/database-sync.d.ts +0 -38
  84. package/src/rag/database-sync.js +0 -158
  85. package/src/rag/embeddings.d.ts +0 -74
  86. package/src/rag/embeddings.js +0 -164
  87. package/src/rag/graph-rag.d.ts +0 -69
  88. package/src/rag/graph-rag.js +0 -311
  89. package/src/rag/hybrid-rag.d.ts +0 -109
  90. package/src/rag/hybrid-rag.js +0 -255
  91. package/src/rag/index.d.ts +0 -16
  92. package/src/rag/index.js +0 -33
  93. package/src/server.d.ts +0 -43
  94. package/src/server.js +0 -177
  95. package/src/tools/index-rag.d.ts +0 -19
  96. package/src/tools/index-rag.js +0 -85
  97. package/src/tools/index-tracker.d.ts +0 -17
  98. package/src/tools/index-tracker.js +0 -89
  99. package/src/tools/index.d.ts +0 -5
  100. package/src/tools/index.js +0 -5
  101. package/src/tools/rag-context.d.ts +0 -34
  102. package/src/tools/rag-context.js +0 -51
  103. package/src/tools/rag-search.d.ts +0 -35
  104. package/src/tools/rag-search.js +0 -60
  105. package/src/tools/words-count.js +0 -28
  106. package/src/types/frontmatter.js +0 -1
  107. package/src/utils/index.d.ts +0 -1
  108. package/src/utils/index.js +0 -1
  109. package/src/utils/markdown.d.ts +0 -6
  110. package/src/utils/markdown.js +0 -36
  111. package/src/utils/timeline-detection.d.ts +0 -13
  112. package/src/utils/timeline-detection.js +0 -76
@@ -0,0 +1,153 @@
1
+ import { existsSync, readdirSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import z from 'zod';
4
+ export const PROMPTS = [
5
+ {
6
+ name: 'new-chapter',
7
+ description: 'Create a new chapter for a timeline arc',
8
+ args: {
9
+ arc: z.string().describe("Arc name (e.g., 'work', 'anima')"),
10
+ chapter: z.string().describe("Chapter number (e.g., '1', '12')"),
11
+ },
12
+ },
13
+ {
14
+ name: 'revise-chapter',
15
+ description: 'Revise an existing chapter with specific improvements',
16
+ args: {
17
+ arc: z.string().describe('Arc name'),
18
+ chapter: z.string().describe('Chapter number'),
19
+ },
20
+ },
21
+ {
22
+ name: 'expand-chapter',
23
+ description: 'Expand a chapter to reach target word count',
24
+ args: {
25
+ arc: z.string().describe('Arc name'),
26
+ chapter: z.string().describe('Chapter number'),
27
+ target: z.string().describe("Target word count (e.g., '4000')"),
28
+ },
29
+ },
30
+ {
31
+ name: 'new-character',
32
+ description: 'Create a new character sheet',
33
+ args: {
34
+ name: z.string().describe('Character name'),
35
+ },
36
+ },
37
+ {
38
+ name: 'new-episode',
39
+ description: 'Create a new episode outline',
40
+ args: {
41
+ arc: z.string().describe('Arc name'),
42
+ episode: z.string().describe('Episode number'),
43
+ },
44
+ },
45
+ {
46
+ name: 'new-arc',
47
+ description: 'Create a new story arc',
48
+ args: {
49
+ name: z.string().describe('Arc name (lowercase, no spaces)'),
50
+ },
51
+ },
52
+ {
53
+ name: 'revise-arc',
54
+ description: 'Review and fix an entire arc',
55
+ args: {
56
+ arc: z.string().describe('Arc name to revise'),
57
+ },
58
+ },
59
+ ];
60
+ function getGithubPromptsPath() {
61
+ const path = join(process.cwd(), '..', '.github', '.kiro', 'prompts');
62
+ return existsSync(path) ? path : null;
63
+ }
64
+ function getLocalPromptsPath() {
65
+ const path = join(process.cwd(), '.kiro', 'prompts');
66
+ return existsSync(path) ? path : null;
67
+ }
68
+ function getAvailableArcs(contentPath) {
69
+ if (!existsSync(contentPath))
70
+ return [];
71
+ return readdirSync(contentPath, { withFileTypes: true })
72
+ .filter((d) => d.isDirectory() && !d.name.startsWith('.'))
73
+ .map((d) => d.name)
74
+ .sort();
75
+ }
76
+ function validateArgs(promptName, args, contentPath) {
77
+ const arcs = getAvailableArcs(contentPath);
78
+ const requireArcExists = (arc) => {
79
+ if (!arcs.includes(arc)) {
80
+ throw new Error(`Arc "${arc}" not found. Available: ${arcs.join(', ') || 'none'}`);
81
+ }
82
+ };
83
+ const requireNumber = (value, name) => {
84
+ if (!/^\d+$/.test(value)) {
85
+ throw new Error(`${name} must be a number, got: "${value}"`);
86
+ }
87
+ };
88
+ switch (promptName) {
89
+ case 'new-chapter':
90
+ case 'revise-chapter':
91
+ case 'expand-chapter':
92
+ requireArcExists(args.arc);
93
+ requireNumber(args.chapter, 'Chapter');
94
+ if (promptName === 'expand-chapter') {
95
+ requireNumber(args.target, 'Target');
96
+ }
97
+ break;
98
+ case 'new-episode':
99
+ requireArcExists(args.arc);
100
+ requireNumber(args.episode, 'Episode');
101
+ break;
102
+ case 'new-arc':
103
+ if (arcs.includes(args.name)) {
104
+ throw new Error(`Arc "${args.name}" already exists.`);
105
+ }
106
+ break;
107
+ case 'revise-arc':
108
+ requireArcExists(args.arc);
109
+ break;
110
+ }
111
+ }
112
+ function substitutePlaceholders(template, args, timeline) {
113
+ const replacements = {
114
+ TIMELINE: timeline,
115
+ ...Object.fromEntries(Object.entries(args).map(([k, v]) => [k.toUpperCase(), v])),
116
+ };
117
+ let result = template;
118
+ for (const [key, value] of Object.entries(replacements)) {
119
+ result = result.replace(new RegExp(`\\{${key}\\}`, 'gi'), value);
120
+ }
121
+ return result;
122
+ }
123
+ export function getPrompt(name, args, options = {}) {
124
+ const timeline = options.timeline ?? 'timeline';
125
+ const contentPath = options.contentPath ?? 'content';
126
+ // Validate .github repo
127
+ const githubPath = getGithubPromptsPath();
128
+ if (!githubPath) {
129
+ throw new Error('.github repository not found.\n' +
130
+ 'Clone it as sibling: git clone https://github.com/echoes-io/.github ../.github');
131
+ }
132
+ // Read base template
133
+ const basePath = join(githubPath, `${name}.md`);
134
+ if (!existsSync(basePath)) {
135
+ throw new Error(`Prompt template not found: ${name}.md\nExpected: ${basePath}`);
136
+ }
137
+ const basePrompt = readFileSync(basePath, 'utf-8');
138
+ // Read optional local override
139
+ const localPath = getLocalPromptsPath();
140
+ let overridePrompt = '';
141
+ if (localPath) {
142
+ const overridePath = join(localPath, `${name}.md`);
143
+ if (existsSync(overridePath)) {
144
+ overridePrompt = readFileSync(overridePath, 'utf-8');
145
+ }
146
+ }
147
+ // Validate args
148
+ validateArgs(name, args, contentPath);
149
+ // Combine and substitute
150
+ const combined = overridePrompt ? `${basePrompt}\n\n---\n\n${overridePrompt}` : basePrompt;
151
+ return substitutePlaceholders(combined, args, timeline);
152
+ }
153
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,CAAC,MAAM,KAAK,CAAC;AAQpB,MAAM,CAAC,MAAM,OAAO,GAAmB;IACrC;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,yCAAyC;QACtD,IAAI,EAAE;YACJ,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YAC5D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;SACjE;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,uDAAuD;QACpE,IAAI,EAAE;YACJ,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SAC/C;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,6CAA6C;QAC1D,IAAI,EAAE;YACJ,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAC9C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;SAChE;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,8BAA8B;QAC3C,IAAI,EAAE;YACJ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SAC5C;KACF;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,8BAA8B;QAC3C,IAAI,EAAE;YACJ,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SAC/C;KACF;IACD;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,wBAAwB;QACrC,IAAI,EAAE;YACJ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;SAC7D;KACF;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,8BAA8B;QAC3C,IAAI,EAAE;YACJ,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;SAC/C;KACF;CACF,CAAC;AAEF,SAAS,oBAAoB;IAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACtE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACxC,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACrD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACxC,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAmB;IAC3C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,OAAO,WAAW,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SACrD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SACzD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,YAAY,CAAC,UAAkB,EAAE,IAA4B,EAAE,WAAmB;IACzF,MAAM,IAAI,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAE3C,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAE,EAAE;QACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,2BAA2B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,IAAY,EAAE,EAAE;QACpD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,4BAA4B,KAAK,GAAG,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC;IAEF,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,aAAa,CAAC;QACnB,KAAK,gBAAgB,CAAC;QACtB,KAAK,gBAAgB;YACnB,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACvC,IAAI,UAAU,KAAK,gBAAgB,EAAE,CAAC;gBACpC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACvC,CAAC;YACD,MAAM;QACR,KAAK,aAAa;YAChB,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACvC,MAAM;QACR,KAAK,SAAS;YACZ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,mBAAmB,CAAC,CAAC;YACxD,CAAC;YACD,MAAM;QACR,KAAK,YAAY;YACf,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,MAAM;IACV,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAC7B,QAAgB,EAChB,IAA4B,EAC5B,QAAgB;IAEhB,MAAM,YAAY,GAA2B;QAC3C,QAAQ,EAAE,QAAQ;QAClB,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;KAClF,CAAC;IAEF,IAAI,MAAM,GAAG,QAAQ,CAAC;IACtB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACxD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD,MAAM,UAAU,SAAS,CACvB,IAAY,EACZ,IAA4B,EAC5B,UAA4B,EAAE;IAE9B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC;IAChD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,SAAS,CAAC;IAErD,wBAAwB;IACxB,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAC;IAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,iCAAiC;YAC/B,gFAAgF,CACnF,CAAC;IACJ,CAAC;IAED,qBAAqB;IACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,kBAAkB,QAAQ,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEnD,+BAA+B;IAC/B,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;QACnD,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,cAAc,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAEtC,yBAAyB;IACzB,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,UAAU,cAAc,cAAc,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;IAC3F,OAAO,sBAAsB,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ type ToolResult = {
3
+ content: Array<{
4
+ type: 'text';
5
+ text: string;
6
+ }>;
7
+ isError?: boolean;
8
+ };
9
+ export declare function formatError(err: unknown): ToolResult;
10
+ export declare function createServer(): McpServer;
11
+ export declare function startServer(): Promise<void>;
12
+ export {};
13
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUpE,KAAK,UAAU,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAMxF,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAGpD;AAED,wBAAgB,YAAY,IAAI,SAAS,CAoFxC;AAGD,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAIjD"}
package/lib/server.js ADDED
@@ -0,0 +1,90 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { getPrompt, PROMPTS } from './prompts/index.js';
4
+ import { index, indexConfig, indexSchema } from './tools/index.js';
5
+ import { search, searchConfig, searchSchema } from './tools/search.js';
6
+ import { stats, statsConfig, statsSchema } from './tools/stats.js';
7
+ import { wordsCount, wordsCountConfig, wordsCountSchema } from './tools/words-count.js';
8
+ import { getPackageConfig } from './utils.js';
9
+ function success(data) {
10
+ return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
11
+ }
12
+ export function formatError(err) {
13
+ const message = err instanceof Error ? err.message : String(err);
14
+ return { content: [{ type: 'text', text: `Error: ${message}` }], isError: true };
15
+ }
16
+ export function createServer() {
17
+ const { description, name, version } = getPackageConfig();
18
+ const server = new McpServer({ name, description, version });
19
+ // Register tools
20
+ server.registerTool(wordsCountConfig.name, {
21
+ description: wordsCountConfig.description,
22
+ inputSchema: wordsCountSchema,
23
+ }, async (args) => {
24
+ try {
25
+ return success(wordsCount(args));
26
+ }
27
+ catch (err) {
28
+ return formatError(err);
29
+ }
30
+ });
31
+ server.registerTool(statsConfig.name, {
32
+ description: statsConfig.description,
33
+ inputSchema: statsSchema,
34
+ }, async (args) => {
35
+ try {
36
+ return success(await stats(args));
37
+ }
38
+ catch (err) {
39
+ return formatError(err);
40
+ }
41
+ });
42
+ server.registerTool(indexConfig.name, {
43
+ description: indexConfig.description,
44
+ inputSchema: indexSchema,
45
+ }, async (args) => {
46
+ try {
47
+ return success(await index(args));
48
+ }
49
+ catch (err) {
50
+ return formatError(err);
51
+ }
52
+ });
53
+ server.registerTool(searchConfig.name, {
54
+ description: searchConfig.description,
55
+ inputSchema: searchSchema,
56
+ /* v8 ignore start */
57
+ }, async (args) => {
58
+ try {
59
+ return success(await search(args));
60
+ }
61
+ catch (err) {
62
+ return formatError(err);
63
+ }
64
+ });
65
+ /* v8 ignore stop */
66
+ // Register prompts
67
+ for (const prompt of PROMPTS) {
68
+ server.prompt(prompt.name, prompt.description, prompt.args, (args) => {
69
+ try {
70
+ const text = getPrompt(prompt.name, args);
71
+ return { messages: [{ role: 'user', content: { type: 'text', text } }] };
72
+ }
73
+ catch (err) {
74
+ const message = err instanceof Error ? err.message : /* v8 ignore next */ String(err);
75
+ return {
76
+ messages: [{ role: 'user', content: { type: 'text', text: `Error: ${message}` } }],
77
+ };
78
+ }
79
+ });
80
+ }
81
+ return server;
82
+ }
83
+ /* v8 ignore start */
84
+ export async function startServer() {
85
+ const server = createServer();
86
+ const transport = new StdioServerTransport();
87
+ await server.connect(transport);
88
+ }
89
+ /* v8 ignore stop */
90
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import z from 'zod';
2
+ import { type IndexTasksOutput } from '../indexer/tasks.js';
3
+ import type { ToolConfig } from '../types.js';
4
+ export declare const indexConfig: ToolConfig;
5
+ export declare const indexSchema: z.ZodObject<{
6
+ contentPath: z.ZodString;
7
+ arc: z.ZodOptional<z.ZodString>;
8
+ force: z.ZodOptional<z.ZodBoolean>;
9
+ dbPath: z.ZodDefault<z.ZodString>;
10
+ }, z.z.core.$strip>;
11
+ export type IndexInput = z.infer<typeof indexSchema>;
12
+ export type IndexOutput = IndexTasksOutput;
13
+ export declare function index(input: IndexInput): Promise<IndexOutput>;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAGpB,OAAO,EAAE,KAAK,gBAAgB,EAAiB,MAAM,qBAAqB,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,eAAO,MAAM,WAAW,EAAE,UASzB,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;mBAKtB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AACrD,MAAM,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAE3C,wBAAsB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAKnE"}
@@ -0,0 +1,25 @@
1
+ import z from 'zod';
2
+ import { DEFAULT_DB_PATH } from '../constants.js';
3
+ import { runIndexTasks } from '../indexer/tasks.js';
4
+ export const indexConfig = {
5
+ name: 'index',
6
+ description: 'Index timeline content into the database for semantic search.',
7
+ arguments: {
8
+ contentPath: 'Path to the content directory.',
9
+ arc: 'Filter by arc name (optional).',
10
+ force: 'Force re-indexing of all chapters.',
11
+ dbPath: `Database path (default: ${DEFAULT_DB_PATH}).`,
12
+ },
13
+ };
14
+ export const indexSchema = z.object({
15
+ contentPath: z.string().describe(indexConfig.arguments.contentPath),
16
+ arc: z.string().optional().describe(indexConfig.arguments.arc),
17
+ force: z.boolean().optional().describe(indexConfig.arguments.force),
18
+ dbPath: z.string().default(DEFAULT_DB_PATH).describe(indexConfig.arguments.dbPath),
19
+ });
20
+ export async function index(input) {
21
+ const parsed = indexSchema.parse(input);
22
+ // Use silent renderer for MCP (no stdout output)
23
+ return runIndexTasks(parsed, true);
24
+ }
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAyB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAG3E,MAAM,CAAC,MAAM,WAAW,GAAe;IACrC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,+DAA+D;IAC5E,SAAS,EAAE;QACT,WAAW,EAAE,gCAAgC;QAC7C,GAAG,EAAE,gCAAgC;QACrC,KAAK,EAAE,oCAAoC;QAC3C,MAAM,EAAE,2BAA2B,eAAe,IAAI;KACvD;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC;IACnE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC;IAC9D,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC;IACnE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;CACnF,CAAC,CAAC;AAKH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,KAAiB;IAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAExC,iDAAiD;IACjD,OAAO,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,86 @@
1
+ import z from 'zod';
2
+ import type { ToolConfig } from '../types.js';
3
+ export declare const searchConfig: ToolConfig;
4
+ export declare const searchSchema: z.ZodObject<{
5
+ query: z.ZodString;
6
+ type: z.ZodDefault<z.ZodEnum<{
7
+ entities: "entities";
8
+ chapters: "chapters";
9
+ relations: "relations";
10
+ }>>;
11
+ arc: z.ZodOptional<z.ZodString>;
12
+ entityType: z.ZodOptional<z.ZodString>;
13
+ relationType: z.ZodOptional<z.ZodString>;
14
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
15
+ dbPath: z.ZodDefault<z.ZodString>;
16
+ }, z.z.core.$strip>;
17
+ export type SearchInput = {
18
+ query: string;
19
+ type?: 'chapters' | 'entities' | 'relations';
20
+ arc?: string;
21
+ entityType?: string;
22
+ relationType?: string;
23
+ limit?: number;
24
+ dbPath?: string;
25
+ };
26
+ export interface ChapterResult {
27
+ id: string;
28
+ arc: string;
29
+ episode: number;
30
+ chapter: number;
31
+ pov: string;
32
+ title: string;
33
+ location: string;
34
+ content: string;
35
+ word_count: number;
36
+ score: number;
37
+ }
38
+ export interface EntityResult {
39
+ id: string;
40
+ arc: string;
41
+ name: string;
42
+ type: string;
43
+ description: string;
44
+ aliases: string[];
45
+ chapter_count: number;
46
+ score: number;
47
+ }
48
+ export interface RelationResult {
49
+ id: string;
50
+ arc: string;
51
+ source_entity: string;
52
+ target_entity: string;
53
+ type: string;
54
+ description: string;
55
+ chapters: string[];
56
+ }
57
+ export type SearchOutput = {
58
+ type: 'chapters';
59
+ results: ChapterResult[];
60
+ } | {
61
+ type: 'entities';
62
+ results: EntityResult[];
63
+ } | {
64
+ type: 'relations';
65
+ results: RelationResult[];
66
+ };
67
+ export declare function search(input: SearchInput & {
68
+ type: 'chapters';
69
+ }): Promise<{
70
+ type: 'chapters';
71
+ results: ChapterResult[];
72
+ }>;
73
+ export declare function search(input: SearchInput & {
74
+ type: 'entities';
75
+ }): Promise<{
76
+ type: 'entities';
77
+ results: EntityResult[];
78
+ }>;
79
+ export declare function search(input: SearchInput & {
80
+ type: 'relations';
81
+ }): Promise<{
82
+ type: 'relations';
83
+ results: RelationResult[];
84
+ }>;
85
+ export declare function search(input: SearchInput): Promise<SearchOutput>;
86
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["search.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAMpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,eAAO,MAAM,YAAY,EAAE,UAY1B,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;mBAWvB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,CAAC;AAGrD,wBAAsB,MAAM,CAC1B,KAAK,EAAE,WAAW,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACxC,OAAO,CAAC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CAAC;AAC3D,wBAAsB,MAAM,CAC1B,KAAK,EAAE,WAAW,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACxC,OAAO,CAAC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CAAC;AAC1D,wBAAsB,MAAM,CAC1B,KAAK,EAAE,WAAW,GAAG;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACzC,OAAO,CAAC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,CAAC,CAAC;AAC7D,wBAAsB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC"}
@@ -0,0 +1,95 @@
1
+ import z from 'zod';
2
+ import { DEFAULT_DB_PATH } from '../constants.js';
3
+ import { Database } from '../database/index.js';
4
+ import { generateEmbedding } from '../indexer/embeddings.js';
5
+ export const searchConfig = {
6
+ name: 'search',
7
+ description: 'Search indexed content using semantic similarity or filters.',
8
+ arguments: {
9
+ query: 'Search query text.',
10
+ type: 'Search type: chapters (default), entities, or relations.',
11
+ arc: 'Filter by arc name (optional).',
12
+ entityType: 'Filter entities by type: CHARACTER, LOCATION, EVENT, OBJECT, EMOTION.',
13
+ relationType: 'Filter relations by type.',
14
+ limit: 'Maximum number of results (default: 10).',
15
+ dbPath: `Database path (default: ${DEFAULT_DB_PATH}).`,
16
+ },
17
+ };
18
+ export const searchSchema = z.object({
19
+ query: z.string().describe(searchConfig.arguments.query),
20
+ type: z
21
+ .enum(['chapters', 'entities', 'relations'])
22
+ .default('chapters')
23
+ .describe(searchConfig.arguments.type),
24
+ arc: z.string().optional().describe(searchConfig.arguments.arc),
25
+ entityType: z.string().optional().describe(searchConfig.arguments.entityType),
26
+ relationType: z.string().optional().describe(searchConfig.arguments.relationType),
27
+ limit: z.number().optional().default(10).describe(searchConfig.arguments.limit),
28
+ dbPath: z.string().default(DEFAULT_DB_PATH).describe(searchConfig.arguments.dbPath),
29
+ });
30
+ export async function search(input) {
31
+ const { query, type, arc, entityType, relationType, limit, dbPath } = searchSchema.parse(input);
32
+ const db = new Database(dbPath);
33
+ await db.connect();
34
+ if (type === 'chapters') {
35
+ const vector = await generateEmbedding(query, db.embeddingModel);
36
+ const chapters = await db.searchChapters(vector, limit, arc);
37
+ db.close();
38
+ return {
39
+ type: 'chapters',
40
+ results: chapters.map((c) => ({
41
+ id: c.id,
42
+ arc: c.arc,
43
+ episode: c.episode,
44
+ chapter: c.chapter,
45
+ pov: c.pov,
46
+ title: c.title,
47
+ location: c.location,
48
+ content: c.content.slice(0, 500) + (c.content.length > 500 ? '...' : ''),
49
+ word_count: c.word_count,
50
+ /* v8 ignore next */
51
+ score: 1 - (c._distance ?? 0),
52
+ })),
53
+ };
54
+ }
55
+ if (type === 'entities') {
56
+ const vector = await generateEmbedding(query, db.embeddingModel);
57
+ const entities = await db.searchEntities(vector, limit, arc, entityType);
58
+ db.close();
59
+ return {
60
+ type: 'entities',
61
+ results: entities.map((e) => ({
62
+ id: e.id,
63
+ arc: e.arc,
64
+ name: e.name,
65
+ type: e.type,
66
+ description: e.description,
67
+ aliases: e.aliases,
68
+ chapter_count: e.chapter_count,
69
+ /* v8 ignore next */
70
+ score: 1 - (e._distance ?? 0),
71
+ })),
72
+ };
73
+ }
74
+ // type === 'relations'
75
+ const relations = await db.getRelations(arc, relationType);
76
+ db.close();
77
+ // Filter relations by query (simple text match on source/target/description)
78
+ const queryLower = query.toLowerCase();
79
+ const filtered = relations.filter((r) => r.source_entity.toLowerCase().includes(queryLower) ||
80
+ r.target_entity.toLowerCase().includes(queryLower) ||
81
+ r.description.toLowerCase().includes(queryLower));
82
+ return {
83
+ type: 'relations',
84
+ results: filtered.slice(0, limit).map((r) => ({
85
+ id: r.id,
86
+ arc: r.arc,
87
+ source_entity: r.source_entity,
88
+ target_entity: r.target_entity,
89
+ type: r.type,
90
+ description: r.description,
91
+ chapters: r.chapters,
92
+ })),
93
+ };
94
+ }
95
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import z from 'zod';
2
+ import type { ToolConfig } from '../types.js';
3
+ export declare const statsConfig: ToolConfig;
4
+ export declare const statsSchema: z.ZodObject<{
5
+ arc: z.ZodOptional<z.ZodString>;
6
+ pov: z.ZodOptional<z.ZodString>;
7
+ dbPath: z.ZodDefault<z.ZodString>;
8
+ }, z.z.core.$strip>;
9
+ export type StatsInput = z.infer<typeof statsSchema>;
10
+ export interface StatsOutput {
11
+ totalChapters: number;
12
+ totalWords: number;
13
+ arcs: string[];
14
+ povs: Record<string, number>;
15
+ averageWordsPerChapter: number;
16
+ }
17
+ export declare function stats(input: StatsInput): Promise<StatsOutput>;
18
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["stats.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAIpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,eAAO,MAAM,WAAW,EAAE,UAQzB,CAAC;AAEF,eAAO,MAAM,WAAW;;;;mBAItB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAOD,wBAAsB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CA8CnE"}
@@ -0,0 +1,62 @@
1
+ import z from 'zod';
2
+ import { DEFAULT_DB_PATH } from '../constants.js';
3
+ import { Database } from '../database/index.js';
4
+ export const statsConfig = {
5
+ name: 'stats',
6
+ description: 'Get aggregate statistics for indexed timeline content.',
7
+ arguments: {
8
+ arc: 'Filter by arc name(s), comma-separated (optional).',
9
+ pov: 'Filter by POV character(s), comma-separated (optional).',
10
+ dbPath: `Database path (default: ${DEFAULT_DB_PATH}).`,
11
+ },
12
+ };
13
+ export const statsSchema = z.object({
14
+ arc: z.string().optional().describe(statsConfig.arguments.arc),
15
+ pov: z.string().optional().describe(statsConfig.arguments.pov),
16
+ dbPath: z.string().default(DEFAULT_DB_PATH).describe(statsConfig.arguments.dbPath),
17
+ });
18
+ function parseFilter(value) {
19
+ if (!value)
20
+ return undefined;
21
+ return value.split(',').map((v) => v.trim().toLowerCase());
22
+ }
23
+ export async function stats(input) {
24
+ const { arc, pov, dbPath } = statsSchema.parse(input);
25
+ const arcFilter = parseFilter(arc);
26
+ const povFilter = parseFilter(pov);
27
+ const db = new Database(dbPath);
28
+ let chapters = await db.getChapters();
29
+ db.close();
30
+ if (chapters.length === 0) {
31
+ throw new Error('No indexed chapters found. Run "index" first.');
32
+ }
33
+ // Normalize POV to lowercase for comparison
34
+ chapters = chapters.map((c) => ({ ...c, pov: c.pov.toLowerCase() }));
35
+ if (arcFilter) {
36
+ chapters = chapters.filter((c) => arcFilter.includes(c.arc.toLowerCase()));
37
+ if (chapters.length === 0) {
38
+ throw new Error(`No chapters found for arc "${arc}".`);
39
+ }
40
+ }
41
+ if (povFilter) {
42
+ chapters = chapters.filter((c) => povFilter.includes(c.pov));
43
+ if (chapters.length === 0) {
44
+ throw new Error(`No chapters found for POV "${pov}".`);
45
+ }
46
+ }
47
+ const arcs = [...new Set(chapters.map((c) => c.arc))].sort();
48
+ const povs = {};
49
+ let totalWords = 0;
50
+ for (const chapter of chapters) {
51
+ totalWords += chapter.word_count;
52
+ povs[chapter.pov] = (povs[chapter.pov] || 0) + 1;
53
+ }
54
+ return {
55
+ totalChapters: chapters.length,
56
+ totalWords,
57
+ arcs,
58
+ povs,
59
+ averageWordsPerChapter: Math.round(totalWords / chapters.length),
60
+ };
61
+ }
62
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["stats.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
- import { z } from 'zod';
1
+ import z from 'zod';
2
+ import type { ToolConfig } from '../types.js';
3
+ export declare const wordsCountConfig: ToolConfig;
2
4
  export declare const wordsCountSchema: z.ZodObject<{
3
5
  filePath: z.ZodString;
4
6
  detailed: z.ZodOptional<z.ZodBoolean>;
5
- }, z.core.$strip>;
7
+ }, z.z.core.$strip>;
6
8
  export type WordsCountInput = z.infer<typeof wordsCountSchema>;
7
9
  export interface WordsCountOutput {
8
10
  words: number;
@@ -12,4 +14,5 @@ export interface WordsCountOutput {
12
14
  sentences?: number;
13
15
  paragraphs?: number;
14
16
  }
15
- export declare function wordsCount(input: WordsCountInput): Promise<WordsCountOutput>;
17
+ export declare function wordsCount(input: WordsCountInput): WordsCountOutput;
18
+ //# sourceMappingURL=words-count.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"words-count.d.ts","sourceRoot":"","sources":["words-count.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,eAAO,MAAM,gBAAgB,EAAE,UAO9B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;mBAG3B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAkBnE"}