vibe-coding-mcp 2.3.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 (130) hide show
  1. package/README.md +179 -0
  2. package/dist/__tests__/collectCodeContext.test.d.ts +2 -0
  3. package/dist/__tests__/collectCodeContext.test.d.ts.map +1 -0
  4. package/dist/__tests__/collectCodeContext.test.js +139 -0
  5. package/dist/__tests__/collectCodeContext.test.js.map +1 -0
  6. package/dist/__tests__/createSessionLog.test.d.ts +2 -0
  7. package/dist/__tests__/createSessionLog.test.d.ts.map +1 -0
  8. package/dist/__tests__/createSessionLog.test.js +130 -0
  9. package/dist/__tests__/createSessionLog.test.js.map +1 -0
  10. package/dist/__tests__/generateDevDocument.test.d.ts +2 -0
  11. package/dist/__tests__/generateDevDocument.test.d.ts.map +1 -0
  12. package/dist/__tests__/generateDevDocument.test.js +174 -0
  13. package/dist/__tests__/generateDevDocument.test.js.map +1 -0
  14. package/dist/__tests__/normalizeForPlatform.test.d.ts +2 -0
  15. package/dist/__tests__/normalizeForPlatform.test.d.ts.map +1 -0
  16. package/dist/__tests__/normalizeForPlatform.test.js +171 -0
  17. package/dist/__tests__/normalizeForPlatform.test.js.map +1 -0
  18. package/dist/__tests__/publishDocument.test.d.ts +2 -0
  19. package/dist/__tests__/publishDocument.test.d.ts.map +1 -0
  20. package/dist/__tests__/publishDocument.test.js +93 -0
  21. package/dist/__tests__/publishDocument.test.js.map +1 -0
  22. package/dist/__tests__/summarizeDesignDecisions.test.d.ts +2 -0
  23. package/dist/__tests__/summarizeDesignDecisions.test.d.ts.map +1 -0
  24. package/dist/__tests__/summarizeDesignDecisions.test.js +158 -0
  25. package/dist/__tests__/summarizeDesignDecisions.test.js.map +1 -0
  26. package/dist/core/cache.d.ts +39 -0
  27. package/dist/core/cache.d.ts.map +1 -0
  28. package/dist/core/cache.js +112 -0
  29. package/dist/core/cache.js.map +1 -0
  30. package/dist/core/config.d.ts +30 -0
  31. package/dist/core/config.d.ts.map +1 -0
  32. package/dist/core/config.js +90 -0
  33. package/dist/core/config.js.map +1 -0
  34. package/dist/core/errors.d.ts +52 -0
  35. package/dist/core/errors.d.ts.map +1 -0
  36. package/dist/core/errors.js +99 -0
  37. package/dist/core/errors.js.map +1 -0
  38. package/dist/core/logger.d.ts +57 -0
  39. package/dist/core/logger.d.ts.map +1 -0
  40. package/dist/core/logger.js +114 -0
  41. package/dist/core/logger.js.map +1 -0
  42. package/dist/core/schemas.d.ts +690 -0
  43. package/dist/core/schemas.d.ts.map +1 -0
  44. package/dist/core/schemas.js +136 -0
  45. package/dist/core/schemas.js.map +1 -0
  46. package/dist/core/security.d.ts +28 -0
  47. package/dist/core/security.d.ts.map +1 -0
  48. package/dist/core/security.js +103 -0
  49. package/dist/core/security.js.map +1 -0
  50. package/dist/index.d.ts +3 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +168 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/platforms/confluence.d.ts +13 -0
  55. package/dist/platforms/confluence.d.ts.map +1 -0
  56. package/dist/platforms/confluence.js +178 -0
  57. package/dist/platforms/confluence.js.map +1 -0
  58. package/dist/platforms/discord.d.ts +54 -0
  59. package/dist/platforms/discord.d.ts.map +1 -0
  60. package/dist/platforms/discord.js +176 -0
  61. package/dist/platforms/discord.js.map +1 -0
  62. package/dist/platforms/github-wiki.d.ts +3 -0
  63. package/dist/platforms/github-wiki.d.ts.map +1 -0
  64. package/dist/platforms/github-wiki.js +120 -0
  65. package/dist/platforms/github-wiki.js.map +1 -0
  66. package/dist/platforms/notion.d.ts +3 -0
  67. package/dist/platforms/notion.d.ts.map +1 -0
  68. package/dist/platforms/notion.js +205 -0
  69. package/dist/platforms/notion.js.map +1 -0
  70. package/dist/platforms/obsidian.d.ts +3 -0
  71. package/dist/platforms/obsidian.d.ts.map +1 -0
  72. package/dist/platforms/obsidian.js +43 -0
  73. package/dist/platforms/obsidian.js.map +1 -0
  74. package/dist/platforms/slack.d.ts +21 -0
  75. package/dist/platforms/slack.d.ts.map +1 -0
  76. package/dist/platforms/slack.js +217 -0
  77. package/dist/platforms/slack.js.map +1 -0
  78. package/dist/stdio.d.ts +6 -0
  79. package/dist/stdio.d.ts.map +1 -0
  80. package/dist/stdio.js +98 -0
  81. package/dist/stdio.js.map +1 -0
  82. package/dist/tools/analyzeCode.d.ts +65 -0
  83. package/dist/tools/analyzeCode.d.ts.map +1 -0
  84. package/dist/tools/analyzeCode.js +113 -0
  85. package/dist/tools/analyzeCode.js.map +1 -0
  86. package/dist/tools/collectCodeContext.d.ts +86 -0
  87. package/dist/tools/collectCodeContext.d.ts.map +1 -0
  88. package/dist/tools/collectCodeContext.js +275 -0
  89. package/dist/tools/collectCodeContext.js.map +1 -0
  90. package/dist/tools/createSessionLog.d.ts +79 -0
  91. package/dist/tools/createSessionLog.d.ts.map +1 -0
  92. package/dist/tools/createSessionLog.js +160 -0
  93. package/dist/tools/createSessionLog.js.map +1 -0
  94. package/dist/tools/generateDevDocument.d.ts +216 -0
  95. package/dist/tools/generateDevDocument.d.ts.map +1 -0
  96. package/dist/tools/generateDevDocument.js +659 -0
  97. package/dist/tools/generateDevDocument.js.map +1 -0
  98. package/dist/tools/normalizeForPlatform.d.ts +95 -0
  99. package/dist/tools/normalizeForPlatform.d.ts.map +1 -0
  100. package/dist/tools/normalizeForPlatform.js +340 -0
  101. package/dist/tools/normalizeForPlatform.js.map +1 -0
  102. package/dist/tools/publishDocument.d.ts +60 -0
  103. package/dist/tools/publishDocument.d.ts.map +1 -0
  104. package/dist/tools/publishDocument.js +117 -0
  105. package/dist/tools/publishDocument.js.map +1 -0
  106. package/dist/tools/summarizeDesignDecisions.d.ts +82 -0
  107. package/dist/tools/summarizeDesignDecisions.d.ts.map +1 -0
  108. package/dist/tools/summarizeDesignDecisions.js +361 -0
  109. package/dist/tools/summarizeDesignDecisions.js.map +1 -0
  110. package/dist/types/index.d.ts +63 -0
  111. package/dist/types/index.d.ts.map +1 -0
  112. package/dist/types/index.js +2 -0
  113. package/dist/types/index.js.map +1 -0
  114. package/dist/utils/astParser.d.ts +55 -0
  115. package/dist/utils/astParser.d.ts.map +1 -0
  116. package/dist/utils/astParser.js +333 -0
  117. package/dist/utils/astParser.js.map +1 -0
  118. package/dist/utils/i18n.d.ts +67 -0
  119. package/dist/utils/i18n.d.ts.map +1 -0
  120. package/dist/utils/i18n.js +193 -0
  121. package/dist/utils/i18n.js.map +1 -0
  122. package/dist/utils/markdown.d.ts +9 -0
  123. package/dist/utils/markdown.d.ts.map +1 -0
  124. package/dist/utils/markdown.js +99 -0
  125. package/dist/utils/markdown.js.map +1 -0
  126. package/dist/utils/mermaidGenerator.d.ts +69 -0
  127. package/dist/utils/mermaidGenerator.d.ts.map +1 -0
  128. package/dist/utils/mermaidGenerator.js +315 -0
  129. package/dist/utils/mermaidGenerator.js.map +1 -0
  130. package/package.json +66 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateDevDocument.test.js","sourceRoot":"","sources":["../../src/__tests__/generateDevDocument.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=normalizeForPlatform.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizeForPlatform.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/normalizeForPlatform.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,171 @@
1
+ import { normalizeForPlatform } from '../tools/normalizeForPlatform.js';
2
+ describe('normalizeForPlatform', () => {
3
+ const sampleDocument = `# Test Document
4
+
5
+ This is a test with [[internal link]] and ![image](local.png).
6
+
7
+ ## Code Block
8
+
9
+ \`\`\`ts
10
+ const x: number = 1;
11
+ \`\`\`
12
+
13
+ - [ ] Todo item
14
+ - [x] Done item
15
+
16
+ > **Note**: This is a note.
17
+ `;
18
+ describe('Notion conversion', () => {
19
+ it('should convert checkboxes for Notion', () => {
20
+ const result = normalizeForPlatform({
21
+ document: '- [ ] Todo\n- [x] Done',
22
+ platform: 'notion'
23
+ });
24
+ expect(result.normalizedDocument).toContain('☐');
25
+ expect(result.normalizedDocument).toContain('☑');
26
+ });
27
+ it('should warn about footnotes', () => {
28
+ const result = normalizeForPlatform({
29
+ document: 'Text with footnote[^1]\n\n[^1]: Footnote content',
30
+ platform: 'notion'
31
+ });
32
+ expect(result.warnings).toContain('Footnotes were removed (not supported by Notion)');
33
+ });
34
+ it('should convert code block language identifiers', () => {
35
+ const result = normalizeForPlatform({
36
+ document: '```ts\nconst x = 1;\n```',
37
+ platform: 'notion',
38
+ options: { convertCodeBlocks: true }
39
+ });
40
+ expect(result.normalizedDocument).toContain('```typescript');
41
+ });
42
+ });
43
+ describe('GitHub Wiki conversion', () => {
44
+ it('should convert Obsidian links to GitHub Wiki style', () => {
45
+ const result = normalizeForPlatform({
46
+ document: '[[Page Name]]',
47
+ platform: 'github-wiki',
48
+ options: { preserveLocalLinks: false }
49
+ });
50
+ expect(result.normalizedDocument).toContain('[Page Name](Page-Name)');
51
+ });
52
+ it('should convert note callouts', () => {
53
+ const result = normalizeForPlatform({
54
+ document: '> [!NOTE]\n> Important note',
55
+ platform: 'github-wiki'
56
+ });
57
+ expect(result.normalizedDocument).toContain('**Note**');
58
+ });
59
+ });
60
+ describe('Obsidian conversion', () => {
61
+ it('should add frontmatter when requested', () => {
62
+ const result = normalizeForPlatform({
63
+ document: '# Test',
64
+ platform: 'obsidian',
65
+ options: {
66
+ addFrontmatter: true,
67
+ frontmatterData: { title: 'Test Doc' }
68
+ }
69
+ });
70
+ expect(result.normalizedDocument).toContain('---');
71
+ expect(result.normalizedDocument).toContain('title: Test Doc');
72
+ expect(result.normalizedDocument).toContain('created:');
73
+ });
74
+ it('should add tags to frontmatter', () => {
75
+ const result = normalizeForPlatform({
76
+ document: '# Test',
77
+ platform: 'obsidian',
78
+ options: {
79
+ addFrontmatter: true,
80
+ addTags: ['tag1', 'tag2']
81
+ }
82
+ });
83
+ expect(result.normalizedDocument).toContain('tags:');
84
+ expect(result.normalizedDocument).toContain('- tag1');
85
+ });
86
+ it('should convert standard markdown to Obsidian callouts', () => {
87
+ const result = normalizeForPlatform({
88
+ document: '> **Warning**: Be careful!',
89
+ platform: 'obsidian'
90
+ });
91
+ expect(result.normalizedDocument).toContain('[!warning]');
92
+ });
93
+ });
94
+ describe('HTML stripping', () => {
95
+ it('should strip HTML tags when requested', () => {
96
+ const result = normalizeForPlatform({
97
+ document: '<p>Paragraph</p><strong>Bold</strong>',
98
+ platform: 'notion',
99
+ options: { stripHtml: true }
100
+ });
101
+ expect(result.normalizedDocument).not.toContain('<p>');
102
+ expect(result.normalizedDocument).toContain('**Bold**');
103
+ });
104
+ });
105
+ describe('line wrapping', () => {
106
+ it('should wrap long lines', () => {
107
+ const longLine = 'This is a very long line that should be wrapped at some point because it exceeds the maximum line length specified in the options.';
108
+ const result = normalizeForPlatform({
109
+ document: longLine,
110
+ platform: 'notion',
111
+ options: { maxLineLength: 40 }
112
+ });
113
+ const lines = result.normalizedDocument.split('\n');
114
+ expect(lines.every(line => line.length <= 50)).toBe(true); // some tolerance
115
+ });
116
+ });
117
+ describe('statistics', () => {
118
+ it('should collect document statistics', () => {
119
+ const result = normalizeForPlatform({
120
+ document: sampleDocument,
121
+ platform: 'notion'
122
+ });
123
+ expect(result.stats).toBeDefined();
124
+ expect(result.stats.headingsCount).toBe(2);
125
+ expect(result.stats.codeBlocksCount).toBe(1);
126
+ expect(result.stats.originalLength).toBeGreaterThan(0);
127
+ });
128
+ });
129
+ describe('image conversion', () => {
130
+ it('should convert Obsidian images for Notion', () => {
131
+ const result = normalizeForPlatform({
132
+ document: '![[image.png]]',
133
+ platform: 'notion',
134
+ options: { convertImages: true }
135
+ });
136
+ expect(result.normalizedDocument).toContain('![image.png]');
137
+ });
138
+ it('should convert to Obsidian image syntax', () => {
139
+ const result = normalizeForPlatform({
140
+ document: '![alt](local/image.png)',
141
+ platform: 'obsidian',
142
+ options: { convertImages: true }
143
+ });
144
+ expect(result.normalizedDocument).toContain('![[local/image.png]]');
145
+ });
146
+ });
147
+ describe('changes tracking', () => {
148
+ it('should track applied changes', () => {
149
+ const result = normalizeForPlatform({
150
+ document: '# Test\n- [ ] Item',
151
+ platform: 'notion',
152
+ options: {
153
+ stripHtml: false,
154
+ convertCodeBlocks: true
155
+ }
156
+ });
157
+ expect(result.changes).toBeDefined();
158
+ expect(Array.isArray(result.changes)).toBe(true);
159
+ });
160
+ });
161
+ describe('empty document handling', () => {
162
+ it('should warn on empty document', () => {
163
+ const result = normalizeForPlatform({
164
+ document: '',
165
+ platform: 'notion'
166
+ });
167
+ expect(result.warnings).toContain('Empty document provided');
168
+ });
169
+ });
170
+ });
171
+ //# sourceMappingURL=normalizeForPlatform.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizeForPlatform.test.js","sourceRoot":"","sources":["../../src/__tests__/normalizeForPlatform.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;CAcxB,CAAC;IAEA,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,QAAQ,EAAE,wBAAwB;gBAClC,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,QAAQ,EAAE,kDAAkD;gBAC5D,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,kDAAkD,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,QAAQ,EAAE,0BAA0B;gBACpC,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE;aACrC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,QAAQ,EAAE,eAAe;gBACzB,QAAQ,EAAE,aAAa;gBACvB,OAAO,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE;aACvC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,QAAQ,EAAE,6BAA6B;gBACvC,QAAQ,EAAE,aAAa;aACxB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,UAAU;gBACpB,OAAO,EAAE;oBACP,cAAc,EAAE,IAAI;oBACpB,eAAe,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;iBACvC;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,UAAU;gBACpB,OAAO,EAAE;oBACP,cAAc,EAAE,IAAI;oBACpB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;iBAC1B;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,QAAQ,EAAE,4BAA4B;gBACtC,QAAQ,EAAE,UAAU;aACrB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,QAAQ,EAAE,uCAAuC;gBACjD,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;aAC7B,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,QAAQ,GAAG,oIAAoI,CAAC;YAEtJ,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE;aAC/B,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB;QAC9E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,QAAQ,EAAE,cAAc;gBACxB,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,QAAQ,EAAE,gBAAgB;gBAC1B,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;aACjC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,QAAQ,EAAE,yBAAyB;gBACnC,QAAQ,EAAE,UAAU;gBACpB,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;aACjC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,QAAQ,EAAE,oBAAoB;gBAC9B,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE;oBACP,SAAS,EAAE,KAAK;oBAChB,iBAAiB,EAAE,IAAI;iBACxB;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=publishDocument.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publishDocument.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/publishDocument.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,93 @@
1
+ import { publishDocument } from '../tools/publishDocument.js';
2
+ describe('publishDocument', () => {
3
+ const sampleDocument = `# Test Document
4
+
5
+ This is a test document for publishing.
6
+
7
+ ## Features
8
+ - Feature 1
9
+ - Feature 2
10
+ `;
11
+ describe('Notion publishing', () => {
12
+ it('should return result for Notion platform', async () => {
13
+ const result = await publishDocument({
14
+ document: sampleDocument,
15
+ title: 'Test Doc',
16
+ platform: 'notion'
17
+ });
18
+ expect(result.result).toBeDefined();
19
+ expect(result.result.platform).toBe('notion');
20
+ });
21
+ it('should handle missing Notion API key gracefully', async () => {
22
+ const result = await publishDocument({
23
+ document: sampleDocument,
24
+ title: 'Test Doc',
25
+ platform: 'notion'
26
+ });
27
+ expect(result.result).toBeDefined();
28
+ });
29
+ });
30
+ describe('GitHub Wiki publishing', () => {
31
+ it('should return result for GitHub Wiki platform', async () => {
32
+ const result = await publishDocument({
33
+ document: sampleDocument,
34
+ title: 'Test Doc',
35
+ platform: 'github-wiki'
36
+ });
37
+ expect(result.result).toBeDefined();
38
+ expect(result.result.platform).toBe('github-wiki');
39
+ });
40
+ });
41
+ describe('Obsidian publishing', () => {
42
+ it('should return result for Obsidian platform', async () => {
43
+ const result = await publishDocument({
44
+ document: sampleDocument,
45
+ title: 'Test Doc',
46
+ platform: 'obsidian'
47
+ });
48
+ expect(result.result).toBeDefined();
49
+ expect(result.result.platform).toBe('obsidian');
50
+ });
51
+ it('should work with vault path option', async () => {
52
+ const result = await publishDocument({
53
+ document: sampleDocument,
54
+ title: 'Test Doc',
55
+ platform: 'obsidian',
56
+ options: {
57
+ vaultPath: '/path/to/vault'
58
+ }
59
+ });
60
+ expect(result.result).toBeDefined();
61
+ });
62
+ });
63
+ describe('output format', () => {
64
+ it('should include platform in result', async () => {
65
+ const result = await publishDocument({
66
+ document: sampleDocument,
67
+ title: 'Test',
68
+ platform: 'notion'
69
+ });
70
+ expect(result.result.platform).toBe('notion');
71
+ });
72
+ it('should include success status', async () => {
73
+ const result = await publishDocument({
74
+ document: sampleDocument,
75
+ title: 'Test',
76
+ platform: 'obsidian'
77
+ });
78
+ expect(typeof result.result.success).toBe('boolean');
79
+ });
80
+ });
81
+ describe('error handling', () => {
82
+ it('should handle unsupported platform', async () => {
83
+ const result = await publishDocument({
84
+ document: sampleDocument,
85
+ title: 'Test',
86
+ platform: 'unknown-platform'
87
+ });
88
+ expect(result.result.success).toBe(false);
89
+ expect(result.result.error).toContain('Unsupported platform');
90
+ });
91
+ });
92
+ });
93
+ //# sourceMappingURL=publishDocument.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publishDocument.test.js","sourceRoot":"","sources":["../../src/__tests__/publishDocument.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,MAAM,cAAc,GAAG;;;;;;;CAOxB,CAAC;IAEA,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;gBACnC,QAAQ,EAAE,cAAc;gBACxB,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;gBACnC,QAAQ,EAAE,cAAc;gBACxB,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;gBACnC,QAAQ,EAAE,cAAc;gBACxB,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE,aAAa;aACxB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;gBACnC,QAAQ,EAAE,cAAc;gBACxB,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE,UAAU;aACrB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;gBACnC,QAAQ,EAAE,cAAc;gBACxB,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE,UAAU;gBACpB,OAAO,EAAE;oBACP,SAAS,EAAE,gBAAgB;iBAC5B;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;gBACnC,QAAQ,EAAE,cAAc;gBACxB,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;gBACnC,QAAQ,EAAE,cAAc;gBACxB,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,UAAU;aACrB,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;gBACnC,QAAQ,EAAE,cAAc;gBACxB,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,kBAAyB;aACpC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=summarizeDesignDecisions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarizeDesignDecisions.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/summarizeDesignDecisions.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,158 @@
1
+ import { summarizeDesignDecisions } from '../tools/summarizeDesignDecisions.js';
2
+ describe('summarizeDesignDecisions', () => {
3
+ describe('basic functionality', () => {
4
+ it('should extract design decisions from conversation', () => {
5
+ const conversationLog = `
6
+ User: Should we use REST or GraphQL?
7
+ Assistant: I decided to use REST because it's simpler for our use case.
8
+ User: What about the database?
9
+ Assistant: I chose PostgreSQL because we need ACID transactions.
10
+ `;
11
+ const result = summarizeDesignDecisions({ conversationLog });
12
+ expect(result.decisions).toBeDefined();
13
+ expect(result.summary).toBeDefined();
14
+ expect(result.stats).toBeDefined();
15
+ });
16
+ it('should identify decision categories', () => {
17
+ const conversationLog = `
18
+ I decided to use TypeScript because of type safety.
19
+ I chose React for the architecture of the frontend.
20
+ `;
21
+ const result = summarizeDesignDecisions({ conversationLog });
22
+ expect(result.stats.byCategory).toBeDefined();
23
+ });
24
+ });
25
+ describe('Korean language support', () => {
26
+ it('should extract decisions from Korean text', () => {
27
+ const conversationLog = `
28
+ React를 선택했습니다. 생태계가 좋기 때문입니다.
29
+ Next.js를 사용하기로 했습니다.
30
+ `;
31
+ const result = summarizeDesignDecisions({
32
+ conversationLog,
33
+ language: 'ko'
34
+ });
35
+ expect(result.decisions).toBeDefined();
36
+ expect(result.summary).toBeDefined();
37
+ });
38
+ it('should auto-detect Korean', () => {
39
+ const conversationLog = `
40
+ 우리는 마이크로서비스 아키텍처를 선택했습니다.
41
+ 데이터베이스로 PostgreSQL을 사용하기로 결정했습니다.
42
+ `;
43
+ const result = summarizeDesignDecisions({
44
+ conversationLog,
45
+ language: 'auto'
46
+ });
47
+ expect(result.decisions).toBeDefined();
48
+ });
49
+ });
50
+ describe('importance scoring', () => {
51
+ it('should assign importance scores', () => {
52
+ const conversationLog = `
53
+ This is a critical decision: We will use microservices architecture.
54
+ I decided to add a small utility function for formatting.
55
+ `;
56
+ const result = summarizeDesignDecisions({ conversationLog });
57
+ if (result.decisions.length > 0) {
58
+ expect(result.decisions[0].importance).toBeDefined();
59
+ expect(result.decisions[0].importanceScore).toBeDefined();
60
+ }
61
+ });
62
+ it('should track importance distribution in stats', () => {
63
+ const conversationLog = `
64
+ We decided to implement caching.
65
+ I chose Express for the server.
66
+ `;
67
+ const result = summarizeDesignDecisions({ conversationLog });
68
+ expect(result.stats.byImportance).toBeDefined();
69
+ });
70
+ });
71
+ describe('keyword extraction', () => {
72
+ it('should extract keywords from decisions', () => {
73
+ const conversationLog = `
74
+ We decided to implement caching using Redis for better performance.
75
+ The authentication system will use JWT tokens.
76
+ `;
77
+ const result = summarizeDesignDecisions({ conversationLog });
78
+ expect(result.stats.topKeywords).toBeDefined();
79
+ expect(Array.isArray(result.stats.topKeywords)).toBe(true);
80
+ });
81
+ });
82
+ describe('code extraction', () => {
83
+ it('should extract related code blocks', () => {
84
+ const conversationLog = `
85
+ I decided to implement the function like this:
86
+ \`\`\`typescript
87
+ function authenticate(token: string): boolean {
88
+ return validateJWT(token);
89
+ }
90
+ \`\`\`
91
+ `;
92
+ const result = summarizeDesignDecisions({
93
+ conversationLog,
94
+ extractRelatedCode: true
95
+ });
96
+ expect(result.decisions).toBeDefined();
97
+ });
98
+ });
99
+ describe('statistics', () => {
100
+ it('should include total decisions count', () => {
101
+ const conversationLog = `
102
+ I decided to use TypeScript.
103
+ I chose React.
104
+ `;
105
+ const result = summarizeDesignDecisions({ conversationLog });
106
+ expect(result.stats.totalDecisions).toBeDefined();
107
+ expect(typeof result.stats.totalDecisions).toBe('number');
108
+ });
109
+ it('should categorize decisions', () => {
110
+ const conversationLog = `
111
+ I decided to use the factory pattern for object creation.
112
+ I chose Express library for the API.
113
+ `;
114
+ const result = summarizeDesignDecisions({ conversationLog });
115
+ expect(result.stats.byCategory).toBeDefined();
116
+ });
117
+ });
118
+ describe('max decisions limit', () => {
119
+ it('should respect maxDecisions limit', () => {
120
+ const conversationLog = `
121
+ I decided to use A. I chose B. I selected C. I picked D. I went with E.
122
+ I opted for F. I settled on G. I implemented H. I chose I. I decided J.
123
+ `;
124
+ const result = summarizeDesignDecisions({
125
+ conversationLog,
126
+ maxDecisions: 3
127
+ });
128
+ expect(result.decisions.length).toBeLessThanOrEqual(3);
129
+ });
130
+ });
131
+ describe('edge cases', () => {
132
+ it('should handle empty conversation log', () => {
133
+ const result = summarizeDesignDecisions({ conversationLog: '' });
134
+ expect(result.decisions).toBeDefined();
135
+ expect(result.decisions.length).toBe(0);
136
+ });
137
+ it('should handle conversation with no clear decisions', () => {
138
+ const conversationLog = `
139
+ User: Hello!
140
+ Assistant: Hi there! How can I help you today?
141
+ User: What's the weather like?
142
+ `;
143
+ const result = summarizeDesignDecisions({ conversationLog });
144
+ expect(result.decisions).toBeDefined();
145
+ expect(result.summary).toBeDefined();
146
+ });
147
+ });
148
+ describe('project context', () => {
149
+ it('should include project context in summary', () => {
150
+ const result = summarizeDesignDecisions({
151
+ conversationLog: 'I decided to use TypeScript.',
152
+ projectContext: 'E-commerce platform'
153
+ });
154
+ expect(result.summary).toContain('E-commerce platform');
155
+ });
156
+ });
157
+ });
158
+ //# sourceMappingURL=summarizeDesignDecisions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarizeDesignDecisions.test.js","sourceRoot":"","sources":["../../src/__tests__/summarizeDesignDecisions.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Simple LRU Cache implementation for performance optimization
3
+ */
4
+ export declare class LRUCache<K, V> {
5
+ private cache;
6
+ private maxSize;
7
+ private ttl;
8
+ constructor(options?: {
9
+ maxSize?: number;
10
+ ttl?: number;
11
+ });
12
+ get(key: K): V | undefined;
13
+ set(key: K, value: V): void;
14
+ has(key: K): boolean;
15
+ delete(key: K): boolean;
16
+ clear(): void;
17
+ get size(): number;
18
+ }
19
+ /**
20
+ * Pre-compiled regex cache for pattern matching
21
+ */
22
+ declare class RegexCache {
23
+ private cache;
24
+ get(pattern: string, flags?: string): RegExp;
25
+ clear(): void;
26
+ }
27
+ export declare const regexCache: RegexCache;
28
+ export declare const languageDetectionCache: LRUCache<string, string>;
29
+ export declare const astAnalysisCache: LRUCache<string, unknown>;
30
+ /**
31
+ * Creates a hash for cache keys
32
+ */
33
+ export declare function hashCode(str: string): string;
34
+ /**
35
+ * Memoization decorator for functions
36
+ */
37
+ export declare function memoize<TArgs extends unknown[], TResult>(fn: (...args: TArgs) => TResult, keyFn?: (...args: TArgs) => string): (...args: TArgs) => TResult;
38
+ export {};
39
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC;IACxB,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,GAAG,CAAS;gBAER,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAO;IAM5D,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAgB1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAiB3B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIvB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED;;GAEG;AACH,cAAM,UAAU;IACd,OAAO,CAAC,KAAK,CAA6B;IAE1C,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM;IAYhD,KAAK,IAAI,IAAI;CAGd;AAGD,eAAO,MAAM,UAAU,YAAmB,CAAC;AAG3C,eAAO,MAAM,sBAAsB,0BAGjC,CAAC;AAGH,eAAO,MAAM,gBAAgB,2BAG3B,CAAC;AAEH;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQ5C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,EACtD,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,EAC/B,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,MAAM,GACjC,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAe7B"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Simple LRU Cache implementation for performance optimization
3
+ */
4
+ export class LRUCache {
5
+ cache;
6
+ maxSize;
7
+ ttl; // Time to live in milliseconds
8
+ constructor(options = {}) {
9
+ this.cache = new Map();
10
+ this.maxSize = options.maxSize ?? 1000;
11
+ this.ttl = options.ttl ?? 5 * 60 * 1000; // 5 minutes default
12
+ }
13
+ get(key) {
14
+ const entry = this.cache.get(key);
15
+ if (!entry)
16
+ return undefined;
17
+ // Check if expired
18
+ if (Date.now() - entry.timestamp > this.ttl) {
19
+ this.cache.delete(key);
20
+ return undefined;
21
+ }
22
+ // Move to end (most recently used)
23
+ this.cache.delete(key);
24
+ this.cache.set(key, entry);
25
+ return entry.value;
26
+ }
27
+ set(key, value) {
28
+ // Delete if exists to update order
29
+ if (this.cache.has(key)) {
30
+ this.cache.delete(key);
31
+ }
32
+ // Evict oldest if at capacity
33
+ if (this.cache.size >= this.maxSize) {
34
+ const oldestKey = this.cache.keys().next().value;
35
+ if (oldestKey !== undefined) {
36
+ this.cache.delete(oldestKey);
37
+ }
38
+ }
39
+ this.cache.set(key, { value, timestamp: Date.now() });
40
+ }
41
+ has(key) {
42
+ return this.get(key) !== undefined;
43
+ }
44
+ delete(key) {
45
+ return this.cache.delete(key);
46
+ }
47
+ clear() {
48
+ this.cache.clear();
49
+ }
50
+ get size() {
51
+ return this.cache.size;
52
+ }
53
+ }
54
+ /**
55
+ * Pre-compiled regex cache for pattern matching
56
+ */
57
+ class RegexCache {
58
+ cache = new Map();
59
+ get(pattern, flags = '') {
60
+ const key = `${pattern}::${flags}`;
61
+ let regex = this.cache.get(key);
62
+ if (!regex) {
63
+ regex = new RegExp(pattern, flags);
64
+ this.cache.set(key, regex);
65
+ }
66
+ return regex;
67
+ }
68
+ clear() {
69
+ this.cache.clear();
70
+ }
71
+ }
72
+ // Singleton instances
73
+ export const regexCache = new RegexCache();
74
+ // Language detection cache
75
+ export const languageDetectionCache = new LRUCache({
76
+ maxSize: 500,
77
+ ttl: 10 * 60 * 1000 // 10 minutes
78
+ });
79
+ // AST analysis cache
80
+ export const astAnalysisCache = new LRUCache({
81
+ maxSize: 100,
82
+ ttl: 5 * 60 * 1000 // 5 minutes
83
+ });
84
+ /**
85
+ * Creates a hash for cache keys
86
+ */
87
+ export function hashCode(str) {
88
+ let hash = 0;
89
+ for (let i = 0; i < str.length; i++) {
90
+ const char = str.charCodeAt(i);
91
+ hash = ((hash << 5) - hash) + char;
92
+ hash = hash & hash; // Convert to 32bit integer
93
+ }
94
+ return hash.toString(36);
95
+ }
96
+ /**
97
+ * Memoization decorator for functions
98
+ */
99
+ export function memoize(fn, keyFn) {
100
+ const cache = new LRUCache({ maxSize: 100, ttl: 5 * 60 * 1000 });
101
+ return (...args) => {
102
+ const key = keyFn ? keyFn(...args) : JSON.stringify(args);
103
+ const cached = cache.get(key);
104
+ if (cached !== undefined) {
105
+ return cached;
106
+ }
107
+ const result = fn(...args);
108
+ cache.set(key, result);
109
+ return result;
110
+ };
111
+ }
112
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"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"}