@sriinnu/harmon-flow 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +79 -0
  3. package/SKILL.md +44 -0
  4. package/dist/graph/index.d.ts +116 -0
  5. package/dist/graph/index.d.ts.map +1 -0
  6. package/dist/graph/index.js +484 -0
  7. package/dist/graph/index.js.map +1 -0
  8. package/dist/index.d.ts +9 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +10 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/mcp/app-server.d.ts +66 -0
  13. package/dist/mcp/app-server.d.ts.map +1 -0
  14. package/dist/mcp/app-server.js +682 -0
  15. package/dist/mcp/app-server.js.map +1 -0
  16. package/dist/mcp/auth.d.ts +37 -0
  17. package/dist/mcp/auth.d.ts.map +1 -0
  18. package/dist/mcp/auth.js +156 -0
  19. package/dist/mcp/auth.js.map +1 -0
  20. package/dist/mcp/cli.d.ts +8 -0
  21. package/dist/mcp/cli.d.ts.map +1 -0
  22. package/dist/mcp/cli.js +84 -0
  23. package/dist/mcp/cli.js.map +1 -0
  24. package/dist/mcp/daemon-client.d.ts +89 -0
  25. package/dist/mcp/daemon-client.d.ts.map +1 -0
  26. package/dist/mcp/daemon-client.js +400 -0
  27. package/dist/mcp/daemon-client.js.map +1 -0
  28. package/dist/mcp/http-utils.d.ts +13 -0
  29. package/dist/mcp/http-utils.d.ts.map +1 -0
  30. package/dist/mcp/http-utils.js +23 -0
  31. package/dist/mcp/http-utils.js.map +1 -0
  32. package/dist/mcp/index.d.ts +90 -0
  33. package/dist/mcp/index.d.ts.map +1 -0
  34. package/dist/mcp/index.js +602 -0
  35. package/dist/mcp/index.js.map +1 -0
  36. package/dist/mcp/journal-search.d.ts +31 -0
  37. package/dist/mcp/journal-search.d.ts.map +1 -0
  38. package/dist/mcp/journal-search.js +90 -0
  39. package/dist/mcp/journal-search.js.map +1 -0
  40. package/dist/mcp/tool-auth.d.ts +14 -0
  41. package/dist/mcp/tool-auth.d.ts.map +1 -0
  42. package/dist/mcp/tool-auth.js +25 -0
  43. package/dist/mcp/tool-auth.js.map +1 -0
  44. package/dist/parser/frontmatter.d.ts +11 -0
  45. package/dist/parser/frontmatter.d.ts.map +1 -0
  46. package/dist/parser/frontmatter.js +28 -0
  47. package/dist/parser/frontmatter.js.map +1 -0
  48. package/dist/parser/index.d.ts +53 -0
  49. package/dist/parser/index.d.ts.map +1 -0
  50. package/dist/parser/index.js +178 -0
  51. package/dist/parser/index.js.map +1 -0
  52. package/dist/types.d.ts +197 -0
  53. package/dist/types.d.ts.map +1 -0
  54. package/dist/types.js +38 -0
  55. package/dist/types.js.map +1 -0
  56. package/dist/version.d.ts +8 -0
  57. package/dist/version.d.ts.map +1 -0
  58. package/dist/version.js +21 -0
  59. package/dist/version.js.map +1 -0
  60. package/logo.svg +13 -0
  61. package/package.json +65 -0
@@ -0,0 +1,602 @@
1
+ /**
2
+ * Harmon Flow MCP Server - Local MCP server for journal-based pattern detection
3
+ */
4
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
5
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
6
+ import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
7
+ import { createFlowParser } from '../parser/index.js';
8
+ import { PatternGraphBuilder, PatternDetector, SuggestionEngine } from '../graph/index.js';
9
+ import { getFlowServerVersion } from '../version.js';
10
+ export { HarmonAppMCPServer, createAppMCPServer } from './app-server.js';
11
+ export class HarmonFlowMCPServer {
12
+ server;
13
+ parser;
14
+ entries = [];
15
+ graphBuilt = false;
16
+ graph = null;
17
+ suggestionEngine = null;
18
+ constructor(config = {}) {
19
+ this.server = new Server({
20
+ name: config.name || 'harmon-flow',
21
+ version: config.version || getFlowServerVersion(),
22
+ });
23
+ this.parser = createFlowParser(config.flowDir);
24
+ this.setupHandlers();
25
+ }
26
+ /**
27
+ * Set up request handlers
28
+ */
29
+ setupHandlers() {
30
+ // List available tools
31
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => {
32
+ return {
33
+ tools: this.getToolDefinitions(),
34
+ };
35
+ });
36
+ // Handle tool calls
37
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
38
+ const { name, arguments: args } = request.params;
39
+ const handler = this.getToolHandler(name);
40
+ if (!handler) {
41
+ return {
42
+ content: [
43
+ {
44
+ type: 'text',
45
+ text: `Unknown tool: ${name}`,
46
+ },
47
+ ],
48
+ isError: true,
49
+ };
50
+ }
51
+ try {
52
+ const result = await handler(args || {});
53
+ return result;
54
+ }
55
+ catch (error) {
56
+ return {
57
+ content: [
58
+ {
59
+ type: 'text',
60
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`,
61
+ },
62
+ ],
63
+ isError: true,
64
+ };
65
+ }
66
+ });
67
+ // List resources (journal entries)
68
+ this.server.setRequestHandler(ListResourcesRequestSchema, async () => {
69
+ this.refreshEntries();
70
+ return {
71
+ resources: this.entries.map((entry) => ({
72
+ uri: `harmon-flow://entry/${entry.id}`,
73
+ name: entry.filename,
74
+ description: `Journal entry from ${entry.timestamp.toISOString()}`,
75
+ mimeType: 'text/markdown',
76
+ })),
77
+ };
78
+ });
79
+ // Read resource content
80
+ this.server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
81
+ const entryId = request.params.uri.split('/').pop();
82
+ this.refreshEntries();
83
+ const entry = this.entries.find((e) => e.id === entryId);
84
+ if (!entry) {
85
+ return {
86
+ contents: [
87
+ {
88
+ uri: request.params.uri,
89
+ mimeType: 'text/plain',
90
+ text: 'Entry not found',
91
+ },
92
+ ],
93
+ };
94
+ }
95
+ return {
96
+ contents: [
97
+ {
98
+ uri: request.params.uri,
99
+ mimeType: 'text/markdown',
100
+ text: this.formatEntryForDisplay(entry),
101
+ },
102
+ ],
103
+ };
104
+ });
105
+ }
106
+ /**
107
+ * Refresh entries from disk
108
+ */
109
+ refreshEntries() {
110
+ this.entries = this.parser.scanDirectory();
111
+ this.graphBuilt = false;
112
+ }
113
+ /**
114
+ * Build the graph if not already built
115
+ */
116
+ ensureGraphBuilt() {
117
+ if (!this.graphBuilt) {
118
+ this.refreshEntries();
119
+ const builder = new PatternGraphBuilder(this.entries);
120
+ const graph = builder.build();
121
+ this.graph = graph;
122
+ const detector = new PatternDetector(graph, this.entries);
123
+ const patterns = detector.getAllPatterns();
124
+ this.suggestionEngine = new SuggestionEngine(graph, this.entries);
125
+ this.graphBuilt = true;
126
+ }
127
+ }
128
+ /**
129
+ * Get all tool definitions
130
+ */
131
+ getToolDefinitions() {
132
+ return [
133
+ {
134
+ name: 'get_suggestions',
135
+ description: 'Get session suggestions based on current mood and energy',
136
+ inputSchema: {
137
+ type: 'object',
138
+ properties: {
139
+ mood: {
140
+ type: 'array',
141
+ items: { type: 'string' },
142
+ description: 'Current mood tags (e.g., ["calm", "focused"])',
143
+ },
144
+ energy: {
145
+ type: 'string',
146
+ enum: ['low', 'medium', 'high'],
147
+ description: 'Current energy level',
148
+ },
149
+ time_of_day: {
150
+ type: 'string',
151
+ enum: ['morning', 'afternoon', 'evening', 'night'],
152
+ description: 'Optional: time of day for more relevant suggestions',
153
+ },
154
+ },
155
+ required: ['mood', 'energy'],
156
+ },
157
+ },
158
+ {
159
+ name: 'find_similar_sessions',
160
+ description: 'Find similar historical sessions based on mood and energy',
161
+ inputSchema: {
162
+ type: 'object',
163
+ properties: {
164
+ mood: {
165
+ type: 'array',
166
+ items: { type: 'string' },
167
+ description: 'Mood tags to match',
168
+ },
169
+ energy: {
170
+ type: 'string',
171
+ enum: ['low', 'medium', 'high'],
172
+ description: 'Energy level to match',
173
+ },
174
+ limit: {
175
+ type: 'number',
176
+ description: 'Maximum number of results (default: 5)',
177
+ },
178
+ },
179
+ required: ['mood'],
180
+ },
181
+ },
182
+ {
183
+ name: 'get_patterns',
184
+ description: 'Get all detected patterns from journal entries',
185
+ inputSchema: {
186
+ type: 'object',
187
+ properties: {
188
+ type: {
189
+ type: 'string',
190
+ enum: ['time', 'mood_energy', 'policy', 'all'],
191
+ description: 'Type of patterns to retrieve',
192
+ },
193
+ },
194
+ },
195
+ },
196
+ {
197
+ name: 'get_stats',
198
+ description: 'Get statistics about the journal entries',
199
+ inputSchema: {
200
+ type: 'object',
201
+ properties: {},
202
+ },
203
+ },
204
+ {
205
+ name: 'get_entries',
206
+ description: 'List all journal entries with optional filtering',
207
+ inputSchema: {
208
+ type: 'object',
209
+ properties: {
210
+ limit: {
211
+ type: 'number',
212
+ description: 'Maximum number of entries (default: 10)',
213
+ },
214
+ mood: {
215
+ type: 'string',
216
+ description: 'Filter by mood tag',
217
+ },
218
+ },
219
+ },
220
+ },
221
+ {
222
+ name: 'write_entry',
223
+ description: 'Write a new journal entry',
224
+ inputSchema: {
225
+ type: 'object',
226
+ properties: {
227
+ mood: {
228
+ type: 'array',
229
+ items: { type: 'string' },
230
+ description: 'Mood tags',
231
+ },
232
+ energy: {
233
+ type: 'string',
234
+ enum: ['low', 'medium', 'high'],
235
+ description: 'Energy level',
236
+ },
237
+ content: {
238
+ type: 'string',
239
+ description: 'Journal entry content',
240
+ },
241
+ time_of_day: {
242
+ type: 'string',
243
+ enum: ['morning', 'afternoon', 'evening', 'night'],
244
+ description: 'Time of day context',
245
+ },
246
+ activity: {
247
+ type: 'string',
248
+ description: 'Activity context',
249
+ },
250
+ },
251
+ required: ['mood', 'content'],
252
+ },
253
+ },
254
+ {
255
+ name: 'analyze_mood_trends',
256
+ description: 'Analyze mood trends over time',
257
+ inputSchema: {
258
+ type: 'object',
259
+ properties: {
260
+ days: {
261
+ type: 'number',
262
+ description: 'Number of days to analyze (default: 7)',
263
+ },
264
+ },
265
+ },
266
+ },
267
+ {
268
+ name: 'get_graph',
269
+ description: 'Get the current pattern graph structure',
270
+ inputSchema: {
271
+ type: 'object',
272
+ properties: {
273
+ node_type: {
274
+ type: 'string',
275
+ description: 'Filter by node type (mood, energy, time, activity)',
276
+ },
277
+ },
278
+ },
279
+ },
280
+ ];
281
+ }
282
+ /**
283
+ * Get tool handler by name
284
+ */
285
+ getToolHandler(name) {
286
+ const handlers = {
287
+ get_suggestions: this.handleGetSuggestions.bind(this),
288
+ find_similar_sessions: this.handleFindSimilarSessions.bind(this),
289
+ get_patterns: this.handleGetPatterns.bind(this),
290
+ get_stats: this.handleGetStats.bind(this),
291
+ get_entries: this.handleGetEntries.bind(this),
292
+ write_entry: this.handleWriteEntry.bind(this),
293
+ analyze_mood_trends: this.handleAnalyzeMoodTrends.bind(this),
294
+ get_graph: this.handleGetGraph.bind(this),
295
+ };
296
+ return handlers[name] || null;
297
+ }
298
+ /**
299
+ * Handle get_suggestions tool
300
+ */
301
+ async handleGetSuggestions(args) {
302
+ const mood = args.mood;
303
+ const energy = args.energy;
304
+ const timeOfDay = args.time_of_day;
305
+ this.ensureGraphBuilt();
306
+ if (!this.suggestionEngine) {
307
+ return {
308
+ content: [{ type: 'text', text: 'No suggestions available' }],
309
+ };
310
+ }
311
+ const suggestions = this.suggestionEngine.suggest(mood, energy, timeOfDay);
312
+ return {
313
+ content: [
314
+ {
315
+ type: 'text',
316
+ text: JSON.stringify({
317
+ suggestions: suggestions.map((s) => ({
318
+ id: s.id,
319
+ type: s.type,
320
+ confidence: Math.round(s.confidence * 100) + '%',
321
+ reasoning: s.reasoning,
322
+ suggestedPolicy: s.suggestedPolicy,
323
+ moodTags: s.moodTags,
324
+ energyLevel: s.energyLevel,
325
+ })),
326
+ count: suggestions.length,
327
+ }, null, 2),
328
+ },
329
+ ],
330
+ };
331
+ }
332
+ /**
333
+ * Handle find_similar_sessions tool
334
+ */
335
+ async handleFindSimilarSessions(args) {
336
+ const mood = args.mood;
337
+ const energy = args.energy;
338
+ const limit = args.limit || 5;
339
+ this.ensureGraphBuilt();
340
+ if (!this.suggestionEngine) {
341
+ return {
342
+ content: [{ type: 'text', text: 'No similar sessions found' }],
343
+ };
344
+ }
345
+ const similar = this.suggestionEngine.findSimilarEntries(mood, energy, limit);
346
+ return {
347
+ content: [
348
+ {
349
+ type: 'text',
350
+ text: JSON.stringify({
351
+ similarSessions: similar.map((s) => ({
352
+ id: s.entry.id,
353
+ timestamp: s.entry.timestamp.toISOString(),
354
+ moodTags: s.entry.moodTags,
355
+ energyLevel: s.entry.energyLevel,
356
+ similarity: Math.round(s.similarity * 100) + '%',
357
+ context: s.entry.context,
358
+ })),
359
+ count: similar.length,
360
+ }, null, 2),
361
+ },
362
+ ],
363
+ };
364
+ }
365
+ /**
366
+ * Handle get_patterns tool
367
+ */
368
+ async handleGetPatterns(args) {
369
+ const type = args.type;
370
+ this.ensureGraphBuilt();
371
+ const detector = new PatternDetector(this.graph, this.entries);
372
+ const patterns = detector.getAllPatterns();
373
+ let result = {};
374
+ if (!type || type === 'all' || type === 'time') {
375
+ result.timePatterns = patterns.timePatterns;
376
+ }
377
+ if (!type || type === 'all' || type === 'mood_energy') {
378
+ result.moodEnergyPatterns = patterns.moodEnergyPatterns;
379
+ }
380
+ if (!type || type === 'all' || type === 'policy') {
381
+ result.policyPatterns = patterns.policyPatterns;
382
+ }
383
+ return {
384
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
385
+ };
386
+ }
387
+ /**
388
+ * Handle get_stats tool
389
+ */
390
+ async handleGetStats(_args) {
391
+ this.ensureGraphBuilt();
392
+ const stats = this.suggestionEngine?.getStats() || {
393
+ totalEntries: this.entries.length,
394
+ timePatterns: 0,
395
+ moodEnergyPatterns: 0,
396
+ policyPatterns: 0,
397
+ topMoodTags: [],
398
+ topEnergyLevels: [],
399
+ };
400
+ return {
401
+ content: [{ type: 'text', text: JSON.stringify(stats, null, 2) }],
402
+ };
403
+ }
404
+ /**
405
+ * Handle get_entries tool
406
+ */
407
+ async handleGetEntries(args) {
408
+ const limit = args.limit || 10;
409
+ const moodFilter = args.mood;
410
+ this.refreshEntries();
411
+ let filtered = this.entries;
412
+ if (moodFilter) {
413
+ filtered = filtered.filter((e) => e.moodTags.includes(moodFilter));
414
+ }
415
+ const recent = filtered.slice(-limit).reverse();
416
+ return {
417
+ content: [
418
+ {
419
+ type: 'text',
420
+ text: JSON.stringify({
421
+ entries: recent.map((e) => ({
422
+ id: e.id,
423
+ timestamp: e.timestamp.toISOString(),
424
+ moodTags: e.moodTags,
425
+ energyLevel: e.energyLevel,
426
+ context: e.context,
427
+ content: e.content.slice(0, 200) + (e.content.length > 200 ? '...' : ''),
428
+ })),
429
+ count: recent.length,
430
+ }, null, 2),
431
+ },
432
+ ],
433
+ };
434
+ }
435
+ /**
436
+ * Handle write_entry tool
437
+ */
438
+ async handleWriteEntry(args) {
439
+ const mood = args.mood;
440
+ const energy = args.energy;
441
+ const content = args.content;
442
+ const timeOfDay = args.time_of_day;
443
+ const activity = args.activity;
444
+ const filename = this.parser.writeEntry({
445
+ timestamp: new Date(),
446
+ source: args.source || 'mcp',
447
+ device: args.device || (process.platform === 'darwin' ? 'macos' : 'linux'),
448
+ moodTags: mood,
449
+ energyLevel: energy,
450
+ context: {
451
+ timeOfDay: timeOfDay,
452
+ activity,
453
+ },
454
+ content,
455
+ });
456
+ this.graphBuilt = false; // Force rebuild on next access
457
+ return {
458
+ content: [
459
+ {
460
+ type: 'text',
461
+ text: JSON.stringify({ success: true, filename }, null, 2),
462
+ },
463
+ ],
464
+ };
465
+ }
466
+ /**
467
+ * Handle analyze_mood_trends tool
468
+ */
469
+ async handleAnalyzeMoodTrends(args) {
470
+ const days = args.days || 7;
471
+ const cutoff = new Date(Date.now() - days * 24 * 60 * 60 * 1000);
472
+ this.refreshEntries();
473
+ const recent = this.entries.filter((e) => e.timestamp >= cutoff);
474
+ if (recent.length === 0) {
475
+ return {
476
+ content: [
477
+ {
478
+ type: 'text',
479
+ text: JSON.stringify({
480
+ period: `${days} days`,
481
+ totalEntries: 0,
482
+ topMoods: [],
483
+ energyDistribution: [],
484
+ }, null, 2),
485
+ },
486
+ ],
487
+ };
488
+ }
489
+ // Calculate mood frequency
490
+ const moodCounts = new Map();
491
+ const energyCounts = new Map();
492
+ for (const entry of recent) {
493
+ for (const mood of entry.moodTags) {
494
+ moodCounts.set(mood, (moodCounts.get(mood) || 0) + 1);
495
+ }
496
+ if (entry.energyLevel) {
497
+ energyCounts.set(entry.energyLevel, (energyCounts.get(entry.energyLevel) || 0) + 1);
498
+ }
499
+ }
500
+ const topMoods = [...moodCounts.entries()]
501
+ .sort((a, b) => b[1] - a[1])
502
+ .slice(0, 5)
503
+ .map(([mood, count]) => ({ mood, count, percentage: Math.round((count / recent.length) * 100) }));
504
+ const energyDistribution = [...energyCounts.entries()].map(([level, count]) => ({
505
+ level,
506
+ count,
507
+ percentage: Math.round((count / recent.length) * 100),
508
+ }));
509
+ return {
510
+ content: [
511
+ {
512
+ type: 'text',
513
+ text: JSON.stringify({
514
+ period: `${days} days`,
515
+ totalEntries: recent.length,
516
+ topMoods,
517
+ energyDistribution,
518
+ }, null, 2),
519
+ },
520
+ ],
521
+ };
522
+ }
523
+ /**
524
+ * Handle get_graph tool
525
+ */
526
+ async handleGetGraph(args) {
527
+ const nodeType = args.node_type;
528
+ this.ensureGraphBuilt();
529
+ const graph = this.graph;
530
+ const nodes = [...graph.nodes.values()];
531
+ const edges = [...graph.edges.values()];
532
+ let filteredNodes = nodes;
533
+ if (nodeType) {
534
+ filteredNodes = nodes.filter((n) => n.type === nodeType);
535
+ }
536
+ return {
537
+ content: [
538
+ {
539
+ type: 'text',
540
+ text: JSON.stringify({
541
+ nodes: filteredNodes.map((n) => ({
542
+ id: n.id,
543
+ type: n.type,
544
+ label: n.label,
545
+ weight: n.weight,
546
+ })),
547
+ edges: edges.map((e) => ({
548
+ source: e.source,
549
+ target: e.target,
550
+ relationship: e.relationship,
551
+ weight: Math.round(e.weight * 100) / 100,
552
+ })),
553
+ nodeCount: filteredNodes.length,
554
+ edgeCount: edges.length,
555
+ }, null, 2),
556
+ },
557
+ ],
558
+ };
559
+ }
560
+ /**
561
+ * Format entry for display
562
+ */
563
+ formatEntryForDisplay(entry) {
564
+ return `---
565
+ Timestamp: ${entry.timestamp.toISOString()}
566
+ Source: ${entry.source}
567
+ Device: ${entry.device}
568
+ Mood: ${entry.moodTags.join(', ') || 'N/A'}
569
+ Energy: ${entry.energyLevel || 'N/A'}
570
+ Context: ${JSON.stringify(entry.context || {})}
571
+ ---
572
+
573
+ ${entry.content}`;
574
+ }
575
+ /**
576
+ * Start the MCP server
577
+ */
578
+ async start() {
579
+ const transport = new StdioServerTransport();
580
+ await this.server.connect(transport);
581
+ console.error('Harmon Flow MCP Server started');
582
+ }
583
+ /**
584
+ * Get server instance
585
+ */
586
+ getServer() {
587
+ return this.server;
588
+ }
589
+ }
590
+ /**
591
+ * Create and start the MCP server
592
+ */
593
+ export async function createMCPServer(config) {
594
+ const server = new HarmonFlowMCPServer(config);
595
+ await server.start();
596
+ return server;
597
+ }
598
+ // Run as standalone server
599
+ if (import.meta.url === `file://${process.argv[1]}`) {
600
+ createMCPServer().catch(console.error);
601
+ }
602
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Journal search helpers for MCP-compatible knowledge tools.
3
+ */
4
+ import type { JournalEntry } from '../types.js';
5
+ export interface JournalSearchResult {
6
+ id: string;
7
+ title: string;
8
+ text: string;
9
+ url: string;
10
+ }
11
+ export interface JournalFetchResult {
12
+ id: string;
13
+ metadata: Record<string, unknown>;
14
+ text: string;
15
+ title: string;
16
+ url: string;
17
+ }
18
+ /**
19
+ * I search parsed journal entries with a simple scoring model that favors exact
20
+ * text hits, mood tags, and newer entries.
21
+ */
22
+ export declare function searchJournalEntries(entries: JournalEntry[], query: string, limit?: number): JournalSearchResult[];
23
+ /**
24
+ * I fetch a single entry in the shape expected by ChatGPT-compatible `fetch`.
25
+ */
26
+ export declare function fetchJournalEntry(entries: JournalEntry[], id: string): JournalFetchResult | null;
27
+ /**
28
+ * I keep the journal URL stable for citations inside MCP clients.
29
+ */
30
+ export declare function getJournalEntryUrl(id: string): string;
31
+ //# sourceMappingURL=journal-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal-search.d.ts","sourceRoot":"","sources":["../../src/mcp/journal-search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,mBAAmB,EAAE,CAsB7G;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAiBhG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAErD"}