@luckydraw/cumulus 0.5.1

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 (142) hide show
  1. package/README.md +148 -0
  2. package/dist/cli/cumulus.d.ts +3 -0
  3. package/dist/cli/cumulus.d.ts.map +1 -0
  4. package/dist/cli/cumulus.js +233 -0
  5. package/dist/cli/cumulus.js.map +1 -0
  6. package/dist/index.d.ts +33 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +43 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/lib/config.d.ts +86 -0
  11. package/dist/lib/config.d.ts.map +1 -0
  12. package/dist/lib/config.js +241 -0
  13. package/dist/lib/config.js.map +1 -0
  14. package/dist/lib/content-detector.d.ts +46 -0
  15. package/dist/lib/content-detector.d.ts.map +1 -0
  16. package/dist/lib/content-detector.js +359 -0
  17. package/dist/lib/content-detector.js.map +1 -0
  18. package/dist/lib/content-store.d.ts +255 -0
  19. package/dist/lib/content-store.d.ts.map +1 -0
  20. package/dist/lib/content-store.js +955 -0
  21. package/dist/lib/content-store.js.map +1 -0
  22. package/dist/lib/context-budget.d.ts +83 -0
  23. package/dist/lib/context-budget.d.ts.map +1 -0
  24. package/dist/lib/context-budget.js +101 -0
  25. package/dist/lib/context-budget.js.map +1 -0
  26. package/dist/lib/embeddings.d.ts +64 -0
  27. package/dist/lib/embeddings.d.ts.map +1 -0
  28. package/dist/lib/embeddings.js +176 -0
  29. package/dist/lib/embeddings.js.map +1 -0
  30. package/dist/lib/history.d.ts +120 -0
  31. package/dist/lib/history.d.ts.map +1 -0
  32. package/dist/lib/history.js +205 -0
  33. package/dist/lib/history.js.map +1 -0
  34. package/dist/lib/image-utils.d.ts +41 -0
  35. package/dist/lib/image-utils.d.ts.map +1 -0
  36. package/dist/lib/image-utils.js +288 -0
  37. package/dist/lib/image-utils.js.map +1 -0
  38. package/dist/lib/migrate.d.ts +35 -0
  39. package/dist/lib/migrate.d.ts.map +1 -0
  40. package/dist/lib/migrate.js +196 -0
  41. package/dist/lib/migrate.js.map +1 -0
  42. package/dist/lib/retriever.d.ts +56 -0
  43. package/dist/lib/retriever.d.ts.map +1 -0
  44. package/dist/lib/retriever.js +644 -0
  45. package/dist/lib/retriever.js.map +1 -0
  46. package/dist/lib/revert.d.ts +23 -0
  47. package/dist/lib/revert.d.ts.map +1 -0
  48. package/dist/lib/revert.js +75 -0
  49. package/dist/lib/revert.js.map +1 -0
  50. package/dist/lib/session.d.ts +65 -0
  51. package/dist/lib/session.d.ts.map +1 -0
  52. package/dist/lib/session.js +289 -0
  53. package/dist/lib/session.js.map +1 -0
  54. package/dist/lib/snapshots.d.ts +39 -0
  55. package/dist/lib/snapshots.d.ts.map +1 -0
  56. package/dist/lib/snapshots.js +99 -0
  57. package/dist/lib/snapshots.js.map +1 -0
  58. package/dist/lib/stream-processor.d.ts +149 -0
  59. package/dist/lib/stream-processor.d.ts.map +1 -0
  60. package/dist/lib/stream-processor.js +389 -0
  61. package/dist/lib/stream-processor.js.map +1 -0
  62. package/dist/lib/summarizer.d.ts +67 -0
  63. package/dist/lib/summarizer.d.ts.map +1 -0
  64. package/dist/lib/summarizer.js +213 -0
  65. package/dist/lib/summarizer.js.map +1 -0
  66. package/dist/mcp/index.d.ts +3 -0
  67. package/dist/mcp/index.d.ts.map +1 -0
  68. package/dist/mcp/index.js +16 -0
  69. package/dist/mcp/index.js.map +1 -0
  70. package/dist/mcp/proxy.d.ts +19 -0
  71. package/dist/mcp/proxy.d.ts.map +1 -0
  72. package/dist/mcp/proxy.js +120 -0
  73. package/dist/mcp/proxy.js.map +1 -0
  74. package/dist/mcp/server.d.ts +6 -0
  75. package/dist/mcp/server.d.ts.map +1 -0
  76. package/dist/mcp/server.js +29 -0
  77. package/dist/mcp/server.js.map +1 -0
  78. package/dist/mcp/shared-server.d.ts +21 -0
  79. package/dist/mcp/shared-server.d.ts.map +1 -0
  80. package/dist/mcp/shared-server.js +210 -0
  81. package/dist/mcp/shared-server.js.map +1 -0
  82. package/dist/mcp/tool-handler.d.ts +20 -0
  83. package/dist/mcp/tool-handler.d.ts.map +1 -0
  84. package/dist/mcp/tool-handler.js +1405 -0
  85. package/dist/mcp/tool-handler.js.map +1 -0
  86. package/dist/tui/components/App.d.ts +11 -0
  87. package/dist/tui/components/App.d.ts.map +1 -0
  88. package/dist/tui/components/App.js +607 -0
  89. package/dist/tui/components/App.js.map +1 -0
  90. package/dist/tui/components/DebugContextView.d.ts +13 -0
  91. package/dist/tui/components/DebugContextView.d.ts.map +1 -0
  92. package/dist/tui/components/DebugContextView.js +78 -0
  93. package/dist/tui/components/DebugContextView.js.map +1 -0
  94. package/dist/tui/components/IncludeMenu.d.ts +12 -0
  95. package/dist/tui/components/IncludeMenu.d.ts.map +1 -0
  96. package/dist/tui/components/IncludeMenu.js +127 -0
  97. package/dist/tui/components/IncludeMenu.js.map +1 -0
  98. package/dist/tui/components/InputArea.d.ts +27 -0
  99. package/dist/tui/components/InputArea.d.ts.map +1 -0
  100. package/dist/tui/components/InputArea.js +366 -0
  101. package/dist/tui/components/InputArea.js.map +1 -0
  102. package/dist/tui/components/MarkdownText.d.ts +38 -0
  103. package/dist/tui/components/MarkdownText.d.ts.map +1 -0
  104. package/dist/tui/components/MarkdownText.js +234 -0
  105. package/dist/tui/components/MarkdownText.js.map +1 -0
  106. package/dist/tui/components/MessageBubble.d.ts +11 -0
  107. package/dist/tui/components/MessageBubble.d.ts.map +1 -0
  108. package/dist/tui/components/MessageBubble.js +16 -0
  109. package/dist/tui/components/MessageBubble.js.map +1 -0
  110. package/dist/tui/components/MessageHistory.d.ts +11 -0
  111. package/dist/tui/components/MessageHistory.d.ts.map +1 -0
  112. package/dist/tui/components/MessageHistory.js +12 -0
  113. package/dist/tui/components/MessageHistory.js.map +1 -0
  114. package/dist/tui/components/RevertMenu.d.ts +17 -0
  115. package/dist/tui/components/RevertMenu.d.ts.map +1 -0
  116. package/dist/tui/components/RevertMenu.js +144 -0
  117. package/dist/tui/components/RevertMenu.js.map +1 -0
  118. package/dist/tui/components/StatusBar.d.ts +14 -0
  119. package/dist/tui/components/StatusBar.d.ts.map +1 -0
  120. package/dist/tui/components/StatusBar.js +13 -0
  121. package/dist/tui/components/StatusBar.js.map +1 -0
  122. package/dist/tui/components/StreamingResponse.d.ts +15 -0
  123. package/dist/tui/components/StreamingResponse.d.ts.map +1 -0
  124. package/dist/tui/components/StreamingResponse.js +52 -0
  125. package/dist/tui/components/StreamingResponse.js.map +1 -0
  126. package/dist/tui/hooks/useAppState.d.ts +147 -0
  127. package/dist/tui/hooks/useAppState.d.ts.map +1 -0
  128. package/dist/tui/hooks/useAppState.js +110 -0
  129. package/dist/tui/hooks/useAppState.js.map +1 -0
  130. package/dist/tui/hooks/useClaudeProcess.d.ts +19 -0
  131. package/dist/tui/hooks/useClaudeProcess.d.ts.map +1 -0
  132. package/dist/tui/hooks/useClaudeProcess.js +185 -0
  133. package/dist/tui/hooks/useClaudeProcess.js.map +1 -0
  134. package/dist/tui/index.d.ts +10 -0
  135. package/dist/tui/index.d.ts.map +1 -0
  136. package/dist/tui/index.js +11 -0
  137. package/dist/tui/index.js.map +1 -0
  138. package/dist/tui/utils/streamParser.d.ts +31 -0
  139. package/dist/tui/utils/streamParser.d.ts.map +1 -0
  140. package/dist/tui/utils/streamParser.js +63 -0
  141. package/dist/tui/utils/streamParser.js.map +1 -0
  142. package/package.json +94 -0
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Migration utilities for upgrading old threads to support new features.
3
+ */
4
+ import * as fs from 'fs/promises';
5
+ import * as path from 'path';
6
+ import { embeddingsAvailable, generateMissingEmbeddings } from './embeddings.js';
7
+ import { HistoryStore } from './history.js';
8
+ import { SessionManager } from './session.js';
9
+ /**
10
+ * Migrate a thread to support RAG features.
11
+ * - Generates embeddings for all messages
12
+ * - Creates a legacy session document from old conversations
13
+ */
14
+ export async function migrateThread(threadPath, onProgress) {
15
+ const threadName = path.basename(threadPath, '.jsonl');
16
+ const sessionsPath = threadPath.replace(/\.jsonl$/, '.sessions');
17
+ const result = {
18
+ threadName,
19
+ messagesTotal: 0,
20
+ embeddingsGenerated: 0,
21
+ sessionCreated: false,
22
+ sessionExchanges: 0,
23
+ errors: [],
24
+ };
25
+ // Phase 1: Load messages
26
+ onProgress?.({
27
+ phase: 'loading',
28
+ current: 0,
29
+ total: 1,
30
+ message: 'Loading messages...',
31
+ });
32
+ const historyStore = new HistoryStore(threadPath);
33
+ let messages;
34
+ try {
35
+ messages = await historyStore.getAll();
36
+ }
37
+ catch (err) {
38
+ result.errors.push(`Failed to load messages: ${err}`);
39
+ return result;
40
+ }
41
+ // Filter out session documents (we only want user/assistant messages)
42
+ const conversationMessages = messages.filter(m => m.role !== 'session');
43
+ result.messagesTotal = conversationMessages.length;
44
+ if (conversationMessages.length === 0) {
45
+ onProgress?.({
46
+ phase: 'done',
47
+ current: 1,
48
+ total: 1,
49
+ message: 'No messages to migrate',
50
+ });
51
+ return result;
52
+ }
53
+ // Phase 2: Generate embeddings
54
+ onProgress?.({
55
+ phase: 'embeddings',
56
+ current: 0,
57
+ total: conversationMessages.length,
58
+ message: 'Checking embedding availability...',
59
+ });
60
+ if (await embeddingsAvailable()) {
61
+ onProgress?.({
62
+ phase: 'embeddings',
63
+ current: 0,
64
+ total: conversationMessages.length,
65
+ message: 'Generating embeddings (this may take a while)...',
66
+ });
67
+ try {
68
+ // Count existing embeddings before
69
+ const { loadEmbeddings } = await import('./embeddings.js');
70
+ const existingBefore = await loadEmbeddings(threadPath);
71
+ const countBefore = existingBefore.size;
72
+ // Generate missing embeddings
73
+ await generateMissingEmbeddings(threadPath, conversationMessages.map(m => ({ id: m.id, content: m.content })));
74
+ // Count after
75
+ const existingAfter = await loadEmbeddings(threadPath);
76
+ result.embeddingsGenerated = existingAfter.size - countBefore;
77
+ onProgress?.({
78
+ phase: 'embeddings',
79
+ current: conversationMessages.length,
80
+ total: conversationMessages.length,
81
+ message: `Generated ${result.embeddingsGenerated} embeddings`,
82
+ });
83
+ }
84
+ catch (err) {
85
+ result.errors.push(`Embedding generation error: ${err}`);
86
+ }
87
+ }
88
+ else {
89
+ onProgress?.({
90
+ phase: 'embeddings',
91
+ current: conversationMessages.length,
92
+ total: conversationMessages.length,
93
+ message: 'Embeddings not available (transformers.js not installed)',
94
+ });
95
+ }
96
+ // Phase 3: Create legacy session document
97
+ onProgress?.({
98
+ phase: 'sessions',
99
+ current: 0,
100
+ total: 1,
101
+ message: 'Creating legacy session document...',
102
+ });
103
+ try {
104
+ // Check if any session documents already exist
105
+ let hasExistingSessions = false;
106
+ try {
107
+ const sessionFiles = await fs.readdir(sessionsPath);
108
+ hasExistingSessions = sessionFiles.some(f => f.endsWith('.md'));
109
+ }
110
+ catch {
111
+ // Directory doesn't exist, no existing sessions
112
+ }
113
+ if (hasExistingSessions) {
114
+ onProgress?.({
115
+ phase: 'sessions',
116
+ current: 1,
117
+ total: 1,
118
+ message: 'Session documents already exist, skipping',
119
+ });
120
+ }
121
+ else {
122
+ // Create a legacy session with all old exchanges
123
+ const legacySession = new SessionManager(sessionsPath, threadName, 'ses_legacy');
124
+ await legacySession.initialize();
125
+ // Group messages into user/assistant exchanges
126
+ let exchangeCount = 0;
127
+ for (let i = 0; i < conversationMessages.length - 1; i++) {
128
+ const msg = conversationMessages[i];
129
+ const nextMsg = conversationMessages[i + 1];
130
+ if (msg.role === 'user' && nextMsg.role === 'assistant') {
131
+ await legacySession.appendExchange(msg.content, nextMsg.content);
132
+ exchangeCount++;
133
+ i++; // Skip the assistant message we just processed
134
+ }
135
+ }
136
+ result.sessionCreated = true;
137
+ result.sessionExchanges = exchangeCount;
138
+ // Generate embeddings for the session
139
+ if (await embeddingsAvailable()) {
140
+ await legacySession.generateMissingEmbeddings();
141
+ }
142
+ onProgress?.({
143
+ phase: 'sessions',
144
+ current: 1,
145
+ total: 1,
146
+ message: `Created legacy session with ${exchangeCount} exchanges`,
147
+ });
148
+ }
149
+ }
150
+ catch (err) {
151
+ result.errors.push(`Session creation error: ${err}`);
152
+ }
153
+ onProgress?.({
154
+ phase: 'done',
155
+ current: 1,
156
+ total: 1,
157
+ message: 'Migration complete',
158
+ });
159
+ return result;
160
+ }
161
+ /**
162
+ * Check if a thread needs migration.
163
+ * Returns true if embeddings or sessions are missing.
164
+ */
165
+ export async function needsMigration(threadPath) {
166
+ const sessionsPath = threadPath.replace(/\.jsonl$/, '.sessions');
167
+ const historyStore = new HistoryStore(threadPath);
168
+ const messages = await historyStore.getAll();
169
+ const conversationMessages = messages.filter(m => m.role !== 'session');
170
+ // Check embeddings
171
+ let embeddingCount = 0;
172
+ try {
173
+ const { loadEmbeddings } = await import('./embeddings.js');
174
+ const embeddings = await loadEmbeddings(threadPath);
175
+ embeddingCount = embeddings.size;
176
+ }
177
+ catch {
178
+ // No embeddings file
179
+ }
180
+ // Check sessions
181
+ let hasSessions = false;
182
+ try {
183
+ const sessionFiles = await fs.readdir(sessionsPath);
184
+ hasSessions = sessionFiles.some(f => f.endsWith('.md'));
185
+ }
186
+ catch {
187
+ // No sessions directory
188
+ }
189
+ return {
190
+ needsEmbeddings: embeddingCount < conversationMessages.length,
191
+ needsSessions: !hasSessions && conversationMessages.length > 0,
192
+ messageCount: conversationMessages.length,
193
+ embeddingCount,
194
+ };
195
+ }
196
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/lib/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Automatic RAG retriever for injecting relevant context before Claude invocation.
3
+ * Runs hybrid search (keyword + semantic) on history and content stores.
4
+ */
5
+ import { ContentStore } from './content-store.js';
6
+ import { HistoryStore } from './history.js';
7
+ /** Default budget fraction for retrieved context (25% of effective limit) */
8
+ export declare const RETRIEVAL_BUDGET_FRACTION = 0.25;
9
+ export interface RetrievalResult {
10
+ /** Formatted context string ready for injection into system prompt */
11
+ context: string;
12
+ /** Number of history messages included */
13
+ historyCount: number;
14
+ /** Number of content items included */
15
+ contentCount: number;
16
+ /** Total tokens used by retrieved context */
17
+ tokensUsed: number;
18
+ /** Debug info about what was retrieved */
19
+ debug: {
20
+ historyResults: Array<{
21
+ index: number;
22
+ role: string;
23
+ score: number;
24
+ snippet: string;
25
+ }>;
26
+ contentResults: Array<{
27
+ id: string;
28
+ score: number;
29
+ snippet: string;
30
+ }>;
31
+ sessionResults: Array<{
32
+ sessionId: string;
33
+ score: number;
34
+ snippet: string;
35
+ }>;
36
+ };
37
+ }
38
+ export interface RetrieverOptions {
39
+ /** Token budget for retrieved context */
40
+ budgetTokens: number;
41
+ /** Current session ID (to boost current session results) */
42
+ currentSessionId?: string;
43
+ /** Sessions path for session document search */
44
+ sessionsPath?: string;
45
+ /** Recent conversation messages for query expansion */
46
+ recentMessages?: Array<{
47
+ role: string;
48
+ content: string;
49
+ }>;
50
+ }
51
+ /**
52
+ * Retrieve relevant context for a user query.
53
+ * Runs hybrid search on history, content, and session stores.
54
+ */
55
+ export declare function retrieve(query: string, historyStore: HistoryStore, contentStore: ContentStore | null, options: RetrieverOptions): Promise<RetrievalResult>;
56
+ //# sourceMappingURL=retriever.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retriever.d.ts","sourceRoot":"","sources":["../../src/lib/retriever.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAuB,MAAM,oBAAoB,CAAC;AASvE,OAAO,EAAE,YAAY,EAAW,MAAM,cAAc,CAAC;AAGrD,6EAA6E;AAC7E,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAiB9C,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,KAAK,EAAE;QACL,cAAc,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACvF,cAAc,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACtE,cAAc,EAAE,KAAK,CAAC;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC9E,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D;AAqpBD;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CA+D1B"}