@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,484 @@
1
+ /**
2
+ * Pattern Graph - Build and query graph-based patterns from journal entries
3
+ */
4
+ export class PatternGraphBuilder {
5
+ graph;
6
+ entries;
7
+ constructor(entries) {
8
+ this.entries = entries;
9
+ this.graph = {
10
+ nodes: new Map(),
11
+ edges: new Map(),
12
+ embeddings: new Map(),
13
+ };
14
+ }
15
+ /**
16
+ * Build the complete pattern graph from entries
17
+ */
18
+ build() {
19
+ this.entries.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
20
+ // Clear existing graph
21
+ this.graph = {
22
+ nodes: new Map(),
23
+ edges: new Map(),
24
+ embeddings: new Map(),
25
+ };
26
+ // Build nodes and edges for each entry
27
+ for (const entry of this.entries) {
28
+ this.addEntryNodes(entry);
29
+ this.addEntryEdges(entry);
30
+ }
31
+ // Calculate edge weights
32
+ this.normalizeEdgeWeights();
33
+ return this.graph;
34
+ }
35
+ /**
36
+ * Add nodes for an entry
37
+ */
38
+ addEntryNodes(entry) {
39
+ // Mood nodes
40
+ for (const mood of entry.moodTags) {
41
+ this.addNode('mood', mood, {
42
+ moods: [mood],
43
+ entryCount: 1,
44
+ });
45
+ }
46
+ // Energy node
47
+ if (entry.energyLevel) {
48
+ this.addNode('energy', entry.energyLevel, {
49
+ level: entry.energyLevel,
50
+ entryCount: 1,
51
+ });
52
+ // Connect mood to energy
53
+ for (const mood of entry.moodTags) {
54
+ this.addEdge(`mood:${mood}`, `energy:${entry.energyLevel}`, 'has_energy', 1);
55
+ }
56
+ }
57
+ // Time node
58
+ if (entry.context?.timeOfDay) {
59
+ this.addNode('time', entry.context.timeOfDay, {
60
+ timeOfDay: entry.context.timeOfDay,
61
+ entryCount: 1,
62
+ });
63
+ for (const mood of entry.moodTags) {
64
+ this.addEdge(`time:${entry.context.timeOfDay}`, `mood:${mood}`, 'commonly_mood', 1);
65
+ }
66
+ }
67
+ // Activity node
68
+ if (entry.context?.activity) {
69
+ this.addNode('activity', entry.context.activity, {
70
+ activity: entry.context.activity,
71
+ entryCount: 1,
72
+ });
73
+ for (const mood of entry.moodTags) {
74
+ this.addEdge(`activity:${entry.context.activity}`, `mood:${mood}`, 'evokes_mood', 1);
75
+ }
76
+ }
77
+ // Device node
78
+ this.addNode('device', entry.device, {
79
+ device: entry.device,
80
+ entryCount: 1,
81
+ });
82
+ // Source node
83
+ this.addNode('source', entry.source, {
84
+ source: entry.source,
85
+ entryCount: 1,
86
+ });
87
+ }
88
+ /**
89
+ * Add edges for an entry (temporal relationships)
90
+ */
91
+ addEntryEdges(entry) {
92
+ // Find previous entry for temporal transitions
93
+ const prevEntry = this.findPreviousEntry(entry);
94
+ if (prevEntry) {
95
+ // Mood transitions
96
+ for (const mood of entry.moodTags) {
97
+ for (const prevMood of prevEntry.moodTags) {
98
+ this.addEdge(`mood:${prevMood}`, `mood:${mood}`, 'transitions_to', 1);
99
+ }
100
+ }
101
+ // Energy transitions
102
+ if (entry.energyLevel && prevEntry.energyLevel) {
103
+ this.addEdge(`energy:${prevEntry.energyLevel}`, `energy:${entry.energyLevel}`, 'changes_to', 1);
104
+ }
105
+ }
106
+ // Mood co-occurrence
107
+ const moods = entry.moodTags;
108
+ for (let i = 0; i < moods.length; i++) {
109
+ for (let j = i + 1; j < moods.length; j++) {
110
+ this.addEdge(`mood:${moods[i]}`, `mood:${moods[j]}`, 'co_occurs_with', 1);
111
+ }
112
+ }
113
+ }
114
+ /**
115
+ * Add a node to the graph
116
+ */
117
+ addNode(type, label, properties) {
118
+ const key = this.getNodeKey({ type, label });
119
+ const existing = this.graph.nodes.get(key);
120
+ if (existing) {
121
+ existing.weight += 1;
122
+ // Merge properties
123
+ if (existing.properties.entryCount) {
124
+ existing.properties.entryCount = existing.properties.entryCount + 1;
125
+ }
126
+ }
127
+ else {
128
+ this.graph.nodes.set(key, {
129
+ id: key,
130
+ type: type,
131
+ label,
132
+ properties,
133
+ weight: 1,
134
+ });
135
+ }
136
+ }
137
+ /**
138
+ * Add an edge to the graph
139
+ */
140
+ addEdge(source, target, relationship, weight) {
141
+ const edgeKey = `${source}::${relationship}::${target}`;
142
+ const existing = this.graph.edges.get(edgeKey);
143
+ if (existing) {
144
+ existing.weight += weight;
145
+ existing.count += 1;
146
+ }
147
+ else {
148
+ this.graph.edges.set(edgeKey, {
149
+ source,
150
+ target,
151
+ relationship,
152
+ weight,
153
+ count: 1,
154
+ });
155
+ }
156
+ }
157
+ /**
158
+ * Normalize edge weights by max count
159
+ */
160
+ normalizeEdgeWeights() {
161
+ let maxCount = 1;
162
+ for (const edge of this.graph.edges.values()) {
163
+ if (edge.count > maxCount) {
164
+ maxCount = edge.count;
165
+ }
166
+ }
167
+ for (const edge of this.graph.edges.values()) {
168
+ edge.weight = edge.count / maxCount;
169
+ }
170
+ }
171
+ /**
172
+ * Find the previous entry in chronological order
173
+ */
174
+ findPreviousEntry(current) {
175
+ let prev = null;
176
+ for (const entry of this.entries) {
177
+ if (entry.timestamp < current.timestamp) {
178
+ prev = entry;
179
+ }
180
+ else {
181
+ break;
182
+ }
183
+ }
184
+ return prev;
185
+ }
186
+ getNodeKey(node) {
187
+ return `${node.type}:${node.label}`;
188
+ }
189
+ /**
190
+ * Get the built graph
191
+ */
192
+ getGraph() {
193
+ return this.graph;
194
+ }
195
+ }
196
+ /**
197
+ * Pattern Detector - Extract high-level patterns from the graph
198
+ */
199
+ export class PatternDetector {
200
+ graph;
201
+ entries;
202
+ constructor(graph, entries) {
203
+ this.graph = graph;
204
+ this.entries = entries;
205
+ }
206
+ /**
207
+ * Detect time-based patterns
208
+ */
209
+ detectTimePatterns() {
210
+ const timePatterns = new Map();
211
+ // Group entries by time of day
212
+ for (const entry of this.entries) {
213
+ const timeOfDay = entry.context?.timeOfDay || 'unknown';
214
+ const existing = timePatterns.get(timeOfDay);
215
+ if (existing) {
216
+ existing.commonMoods.push(...entry.moodTags);
217
+ existing.frequency += 1;
218
+ if (entry.energyLevel) {
219
+ // Track most common energy
220
+ }
221
+ }
222
+ else {
223
+ timePatterns.set(timeOfDay, {
224
+ timeOfDay,
225
+ commonMoods: [...entry.moodTags],
226
+ commonEnergy: entry.energyLevel || 'medium',
227
+ avgSessionDuration: entry.policy?.durationMs ? entry.policy.durationMs / 60000 : 0,
228
+ frequency: 1,
229
+ });
230
+ }
231
+ }
232
+ // Process patterns
233
+ const results = [];
234
+ for (const [_, pattern] of timePatterns) {
235
+ // Count mood frequencies
236
+ const moodCounts = new Map();
237
+ for (const mood of pattern.commonMoods) {
238
+ moodCounts.set(mood, (moodCounts.get(mood) || 0) + 1);
239
+ }
240
+ const sortedMoods = [...moodCounts.entries()]
241
+ .sort((a, b) => b[1] - a[1])
242
+ .slice(0, 5)
243
+ .map(([mood]) => mood);
244
+ results.push({
245
+ ...pattern,
246
+ commonMoods: sortedMoods,
247
+ });
248
+ }
249
+ return results;
250
+ }
251
+ /**
252
+ * Detect mood-energy transition patterns
253
+ */
254
+ detectMoodEnergyPatterns() {
255
+ const patterns = [];
256
+ const moodEnergyMap = new Map();
257
+ for (const entry of this.entries) {
258
+ const key = `${entry.energyLevel || 'unknown'}:${entry.moodTags.join(',')}`;
259
+ if (!moodEnergyMap.has(key)) {
260
+ moodEnergyMap.set(key, {
261
+ mood: entry.moodTags[0] || 'calm',
262
+ energy: entry.energyLevel || 'medium',
263
+ transitionProbability: 0,
264
+ commonActivities: [],
265
+ });
266
+ }
267
+ }
268
+ // Calculate transitions
269
+ for (let i = 1; i < this.entries.length; i++) {
270
+ const curr = this.entries[i];
271
+ const prev = this.entries[i - 1];
272
+ if (curr.energyLevel && prev.energyLevel && curr.energyLevel !== prev.energyLevel) {
273
+ const key = `${prev.energyLevel}:${prev.moodTags.join(',')}`;
274
+ const pattern = moodEnergyMap.get(key);
275
+ if (pattern) {
276
+ pattern.nextMood = curr.moodTags[0];
277
+ pattern.transitionProbability += 0.1;
278
+ }
279
+ }
280
+ if (curr.context?.activity) {
281
+ const key = `${curr.energyLevel || 'medium'}:${curr.moodTags.join(',')}`;
282
+ const pattern = moodEnergyMap.get(key);
283
+ if (pattern && !pattern.commonActivities.includes(curr.context.activity)) {
284
+ pattern.commonActivities.push(curr.context.activity);
285
+ }
286
+ }
287
+ }
288
+ return [...moodEnergyMap.values()];
289
+ }
290
+ /**
291
+ * Cluster similar policies to find patterns
292
+ */
293
+ detectPolicyPatterns() {
294
+ const clusters = new Map();
295
+ for (const entry of this.entries) {
296
+ if (!entry.policy)
297
+ continue;
298
+ // Create a simple hash based on policy structure
299
+ const policyHash = this.hashPolicy(entry.policy);
300
+ const key = `${policyHash}`;
301
+ if (!clusters.has(key)) {
302
+ clusters.set(key, {
303
+ policyHash,
304
+ moodTags: entry.moodTags,
305
+ energyLevel: entry.energyLevel,
306
+ count: 0,
307
+ avgDuration: 0,
308
+ hardConstraints: entry.policy.hard || {},
309
+ softWeights: entry.policy.soft || {},
310
+ });
311
+ }
312
+ const cluster = clusters.get(key);
313
+ cluster.count += 1;
314
+ cluster.avgDuration =
315
+ (cluster.avgDuration * (cluster.count - 1) + (entry.policy.durationMs || 0)) / cluster.count;
316
+ }
317
+ return [...clusters.values()]
318
+ .filter((c) => c.count >= 2)
319
+ .map((c) => ({
320
+ patternId: c.policyHash,
321
+ moodTags: c.moodTags,
322
+ energyLevel: c.energyLevel,
323
+ typicalDuration: c.avgDuration,
324
+ hardConstraints: c.hardConstraints,
325
+ softWeights: c.softWeights,
326
+ usageCount: c.count,
327
+ }));
328
+ }
329
+ /**
330
+ * Simple hash function for policy objects
331
+ */
332
+ hashPolicy(policy) {
333
+ const str = JSON.stringify(policy, Object.keys(policy).sort());
334
+ let hash = 0;
335
+ for (let i = 0; i < str.length; i++) {
336
+ const char = str.charCodeAt(i);
337
+ hash = ((hash << 5) - hash) + char;
338
+ hash |= 0;
339
+ }
340
+ return Math.abs(hash).toString(36);
341
+ }
342
+ /**
343
+ * Get all detected patterns
344
+ */
345
+ getAllPatterns() {
346
+ return {
347
+ timePatterns: this.detectTimePatterns(),
348
+ moodEnergyPatterns: this.detectMoodEnergyPatterns(),
349
+ policyPatterns: this.detectPolicyPatterns(),
350
+ };
351
+ }
352
+ }
353
+ /**
354
+ * Suggestion Engine - Generate suggestions based on patterns
355
+ */
356
+ export class SuggestionEngine {
357
+ graph;
358
+ entries;
359
+ timePatterns;
360
+ moodEnergyPatterns;
361
+ policyPatterns;
362
+ constructor(graph, entries) {
363
+ this.graph = graph;
364
+ this.entries = entries;
365
+ const detector = new PatternDetector(graph, entries);
366
+ const patterns = detector.getAllPatterns();
367
+ this.timePatterns = patterns.timePatterns;
368
+ this.moodEnergyPatterns = patterns.moodEnergyPatterns;
369
+ this.policyPatterns = patterns.policyPatterns;
370
+ }
371
+ /**
372
+ * Generate suggestions based on current context
373
+ */
374
+ suggest(currentMood, energy, timeOfDay) {
375
+ const suggestions = [];
376
+ // Find matching time pattern
377
+ const timePattern = timeOfDay
378
+ ? this.timePatterns.find((p) => p.timeOfDay === timeOfDay)
379
+ : undefined;
380
+ // Suggest based on mood-energy combination
381
+ const moodEnergyMatch = this.moodEnergyPatterns.find((p) => p.mood === currentMood[0] && p.energy === energy);
382
+ if (moodEnergyMatch?.nextMood) {
383
+ suggestions.push({
384
+ id: `shift-${Date.now()}`,
385
+ type: 'mood_shift',
386
+ confidence: moodEnergyMatch.transitionProbability,
387
+ reasoning: `Based on your patterns, ${currentMood[0]} with ${energy} energy often leads to ${moodEnergyMatch.nextMood}`,
388
+ moodTags: [moodEnergyMatch.nextMood],
389
+ basedOnEntries: this.entries.slice(-10).map((e) => e.id),
390
+ });
391
+ }
392
+ // Find matching policy pattern
393
+ const policyMatch = this.policyPatterns.find((p) => p.moodTags.some((m) => currentMood.includes(m)) &&
394
+ (!p.energyLevel || p.energyLevel === energy));
395
+ if (policyMatch) {
396
+ suggestions.push({
397
+ id: `policy-${Date.now()}`,
398
+ type: 'policy',
399
+ confidence: Math.min(0.9, policyMatch.usageCount / 10),
400
+ reasoning: `You often use this policy pattern when feeling ${currentMood.join(', ')}`,
401
+ suggestedPolicy: {
402
+ version: 1,
403
+ mode: 'custom',
404
+ durationMs: policyMatch.typicalDuration,
405
+ hard: policyMatch.hardConstraints,
406
+ soft: { weights: policyMatch.softWeights },
407
+ },
408
+ moodTags: currentMood,
409
+ energyLevel: energy,
410
+ basedOnEntries: this.entries.slice(-policyMatch.usageCount).map((e) => e.id),
411
+ });
412
+ }
413
+ // Time-based suggestion
414
+ if (timePattern && timePattern.commonMoods.length > 0) {
415
+ suggestions.push({
416
+ id: `time-${Date.now()}`,
417
+ type: 'session',
418
+ confidence: Math.min(0.7, timePattern.frequency / 5),
419
+ reasoning: `During ${timeOfDay || 'this time'}, you often feel ${timePattern.commonMoods.slice(0, 3).join(', ')}`,
420
+ moodTags: timePattern.commonMoods.slice(0, 3),
421
+ energyLevel: timePattern.commonEnergy,
422
+ basedOnEntries: this.entries.filter((e) => e.context?.timeOfDay === timeOfDay).map((e) => e.id),
423
+ });
424
+ }
425
+ return suggestions.sort((a, b) => b.confidence - a.confidence);
426
+ }
427
+ /**
428
+ * Get similar historical entries
429
+ */
430
+ findSimilarEntries(mood, energy, limit = 5) {
431
+ const scored = this.entries.map((entry) => {
432
+ let similarity = 0;
433
+ // Mood overlap
434
+ const moodOverlap = entry.moodTags.filter((m) => mood.includes(m)).length;
435
+ similarity += moodOverlap / Math.max(entry.moodTags.length, mood.length);
436
+ // Energy match
437
+ if (energy && entry.energyLevel === energy) {
438
+ similarity += 0.5;
439
+ }
440
+ return { entry, similarity };
441
+ });
442
+ return scored
443
+ .filter((s) => s.similarity > 0)
444
+ .sort((a, b) => b.similarity - a.similarity)
445
+ .slice(0, limit);
446
+ }
447
+ /**
448
+ * Get pattern statistics
449
+ */
450
+ getStats() {
451
+ return {
452
+ totalEntries: this.entries.length,
453
+ timePatterns: this.timePatterns.length,
454
+ moodEnergyPatterns: this.moodEnergyPatterns.length,
455
+ policyPatterns: this.policyPatterns.length,
456
+ topMoodTags: this.getTopMoodTags(),
457
+ topEnergyLevels: this.getTopEnergyLevels(),
458
+ };
459
+ }
460
+ getTopMoodTags() {
461
+ const counts = new Map();
462
+ for (const entry of this.entries) {
463
+ for (const mood of entry.moodTags) {
464
+ counts.set(mood, (counts.get(mood) || 0) + 1);
465
+ }
466
+ }
467
+ return [...counts.entries()]
468
+ .sort((a, b) => b[1] - a[1])
469
+ .slice(0, 5)
470
+ .map(([mood, count]) => ({ mood, count }));
471
+ }
472
+ getTopEnergyLevels() {
473
+ const counts = new Map();
474
+ for (const entry of this.entries) {
475
+ if (entry.energyLevel) {
476
+ counts.set(entry.energyLevel, (counts.get(entry.energyLevel) || 0) + 1);
477
+ }
478
+ }
479
+ return [...counts.entries()]
480
+ .sort((a, b) => b[1] - a[1])
481
+ .map(([level, count]) => ({ level, count }));
482
+ }
483
+ }
484
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/graph/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Harmon Flow - Local graph-based journal for music session patterns
3
+ */
4
+ export type { JournalEntry, JournalEntryFrontmatter, MoodTag, EnergyLevel, SessionContext, PatternGraph, GraphNode, GraphEdge, TimePattern, MoodEnergyPattern, PolicyPattern, Suggestion, ToolDefinition, ToolHandler, } from './types.js';
5
+ export { MarkdownParser, createFlowParser } from './parser/index.js';
6
+ export { PatternGraphBuilder, PatternDetector, SuggestionEngine } from './graph/index.js';
7
+ export { HarmonAppMCPServer, HarmonFlowMCPServer, createAppMCPServer, createMCPServer, } from './mcp/index.js';
8
+ export type { HarmonAppMCPServerConfig, HarmonMcpAuthConfig } from './mcp/index.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,YAAY,EACZ,uBAAuB,EACvB,OAAO,EACP,WAAW,EACX,cAAc,EACd,YAAY,EACZ,SAAS,EACT,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,cAAc,EACd,WAAW,GACZ,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAG1F,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Harmon Flow - Local graph-based journal for music session patterns
3
+ */
4
+ // Parser
5
+ export { MarkdownParser, createFlowParser } from './parser/index.js';
6
+ // Graph & Patterns
7
+ export { PatternGraphBuilder, PatternDetector, SuggestionEngine } from './graph/index.js';
8
+ // MCP Server
9
+ export { HarmonAppMCPServer, HarmonFlowMCPServer, createAppMCPServer, createMCPServer, } from './mcp/index.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoBH,SAAS;AACT,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErE,mBAAmB;AACnB,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE1F,aAAa;AACb,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,GAChB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Remote MCP server for ChatGPT/OpenAI app integration.
3
+ */
4
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ import { type HarmonMcpAuthConfig } from './auth.js';
6
+ import { type DaemonClientConfig, type HarmonDaemonAppClient } from './daemon-client.js';
7
+ export interface HarmonAppMCPServerConfig extends DaemonClientConfig {
8
+ allowedHosts?: string[];
9
+ allowUnauthenticatedWrites?: boolean;
10
+ auth?: HarmonMcpAuthConfig;
11
+ bearerToken?: string;
12
+ daemonClient?: HarmonDaemonAppClient;
13
+ flowDir?: string;
14
+ host?: string;
15
+ name?: string;
16
+ path?: string;
17
+ port?: number;
18
+ version?: string;
19
+ }
20
+ /**
21
+ * I expose a narrow tool surface that is honest enough for ChatGPT app import.
22
+ */
23
+ export declare class HarmonAppMCPServer {
24
+ private readonly config;
25
+ private readonly app;
26
+ private readonly auth;
27
+ private readonly bearerToken?;
28
+ private readonly daemonClient;
29
+ private readonly flowParser;
30
+ private readonly host;
31
+ private readonly mcpPath;
32
+ private readonly port;
33
+ private readonly server;
34
+ private httpServer;
35
+ private readonly transports;
36
+ constructor(config?: HarmonAppMCPServerConfig);
37
+ /**
38
+ * I expose the underlying MCP server for tests and advanced callers.
39
+ */
40
+ getMcpServer(): McpServer;
41
+ /**
42
+ * I return the remote MCP URL after the HTTP server is listening.
43
+ */
44
+ getMcpUrl(): string;
45
+ /**
46
+ * I start a remote streamable HTTP MCP endpoint and a small health route.
47
+ */
48
+ start(): Promise<void>;
49
+ /**
50
+ * I close the HTTP listener and every in-flight MCP session.
51
+ */
52
+ close(): Promise<void>;
53
+ private registerTools;
54
+ private shouldAllowUnauthenticatedWrites;
55
+ private handleMcpRequest;
56
+ private getPublicStatus;
57
+ private readEntries;
58
+ private resolvePlayTarget;
59
+ private jsonResult;
60
+ private setupHttpRoutes;
61
+ }
62
+ /**
63
+ * I create and start the remote MCP app server.
64
+ */
65
+ export declare function createAppMCPServer(config?: HarmonAppMCPServerConfig): Promise<HarmonAppMCPServer>;
66
+ //# sourceMappingURL=app-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-server.d.ts","sourceRoot":"","sources":["../../src/mcp/app-server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQpE,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAyB,KAAK,kBAAkB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAKhH,MAAM,WAAW,wBAAyB,SAAQ,kBAAkB;IAClE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD;;GAEG;AACH,qBAAa,kBAAkB;IAajB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAZnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;IACrD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoD;gBAElD,MAAM,GAAE,wBAA6B;IA8BlE;;OAEG;IACH,YAAY,IAAI,SAAS;IAIzB;;OAEG;IACH,SAAS,IAAI,MAAM;IAMnB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B,OAAO,CAAC,aAAa;IA0drB,OAAO,CAAC,gCAAgC;YAO1B,gBAAgB;YAgChB,eAAe;IAkB7B,OAAO,CAAC,WAAW;YAIL,iBAAiB;IA8B/B,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,eAAe;CAgCxB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAIvG"}