@traqr/memory 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 (156) hide show
  1. package/README.md +135 -0
  2. package/dist/index.d.ts +34 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +38 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/auth.d.ts +18 -0
  7. package/dist/lib/auth.d.ts.map +1 -0
  8. package/dist/lib/auth.js +31 -0
  9. package/dist/lib/auth.js.map +1 -0
  10. package/dist/lib/auto-derive.d.ts +35 -0
  11. package/dist/lib/auto-derive.js +261 -0
  12. package/dist/lib/auto-derive.js.map +1 -0
  13. package/dist/lib/borderline.d.ts +26 -0
  14. package/dist/lib/borderline.js +121 -0
  15. package/dist/lib/borderline.js.map +1 -0
  16. package/dist/lib/client.d.ts +28 -0
  17. package/dist/lib/client.d.ts.map +1 -0
  18. package/dist/lib/client.js +60 -0
  19. package/dist/lib/client.js.map +1 -0
  20. package/dist/lib/context.d.ts +38 -0
  21. package/dist/lib/context.d.ts.map +1 -0
  22. package/dist/lib/context.js +334 -0
  23. package/dist/lib/context.js.map +1 -0
  24. package/dist/lib/embeddings.d.ts +60 -0
  25. package/dist/lib/embeddings.d.ts.map +1 -0
  26. package/dist/lib/embeddings.js +229 -0
  27. package/dist/lib/embeddings.js.map +1 -0
  28. package/dist/lib/entity-pipeline.d.ts +23 -0
  29. package/dist/lib/entity-pipeline.js +151 -0
  30. package/dist/lib/entity-pipeline.js.map +1 -0
  31. package/dist/lib/formatting.d.ts +13 -0
  32. package/dist/lib/formatting.d.ts.map +1 -0
  33. package/dist/lib/formatting.js +60 -0
  34. package/dist/lib/formatting.js.map +1 -0
  35. package/dist/lib/learning-extractor.d.ts +144 -0
  36. package/dist/lib/learning-extractor.d.ts.map +1 -0
  37. package/dist/lib/learning-extractor.js +921 -0
  38. package/dist/lib/learning-extractor.js.map +1 -0
  39. package/dist/lib/lifecycle.d.ts +45 -0
  40. package/dist/lib/lifecycle.js +84 -0
  41. package/dist/lib/lifecycle.js.map +1 -0
  42. package/dist/lib/memory.d.ts +128 -0
  43. package/dist/lib/memory.d.ts.map +1 -0
  44. package/dist/lib/memory.js +590 -0
  45. package/dist/lib/memory.js.map +1 -0
  46. package/dist/lib/quality-gate.d.ts +32 -0
  47. package/dist/lib/quality-gate.js +158 -0
  48. package/dist/lib/quality-gate.js.map +1 -0
  49. package/dist/lib/quality-gate.test.d.ts +7 -0
  50. package/dist/lib/quality-gate.test.js +75 -0
  51. package/dist/lib/quality-gate.test.js.map +1 -0
  52. package/dist/lib/rerank.d.ts +22 -0
  53. package/dist/lib/rerank.js +61 -0
  54. package/dist/lib/rerank.js.map +1 -0
  55. package/dist/lib/retrieval.d.ts +75 -0
  56. package/dist/lib/retrieval.js +380 -0
  57. package/dist/lib/retrieval.js.map +1 -0
  58. package/dist/migrate.d.ts +17 -0
  59. package/dist/migrate.d.ts.map +1 -0
  60. package/dist/migrate.js +81 -0
  61. package/dist/migrate.js.map +1 -0
  62. package/dist/routes/analyze-codebase.d.ts +9 -0
  63. package/dist/routes/analyze-codebase.d.ts.map +1 -0
  64. package/dist/routes/analyze-codebase.js +70 -0
  65. package/dist/routes/analyze-codebase.js.map +1 -0
  66. package/dist/routes/analyze-voice.d.ts +9 -0
  67. package/dist/routes/analyze-voice.d.ts.map +1 -0
  68. package/dist/routes/analyze-voice.js +63 -0
  69. package/dist/routes/analyze-voice.js.map +1 -0
  70. package/dist/routes/assemble-context.d.ts +9 -0
  71. package/dist/routes/assemble-context.d.ts.map +1 -0
  72. package/dist/routes/assemble-context.js +68 -0
  73. package/dist/routes/assemble-context.js.map +1 -0
  74. package/dist/routes/bootstrap.d.ts +12 -0
  75. package/dist/routes/bootstrap.d.ts.map +1 -0
  76. package/dist/routes/bootstrap.js +102 -0
  77. package/dist/routes/bootstrap.js.map +1 -0
  78. package/dist/routes/browse.d.ts +11 -0
  79. package/dist/routes/browse.js +85 -0
  80. package/dist/routes/browse.js.map +1 -0
  81. package/dist/routes/capture-thought.d.ts +13 -0
  82. package/dist/routes/capture-thought.d.ts.map +1 -0
  83. package/dist/routes/capture-thought.js +178 -0
  84. package/dist/routes/capture-thought.js.map +1 -0
  85. package/dist/routes/capture.d.ts +13 -0
  86. package/dist/routes/capture.d.ts.map +1 -0
  87. package/dist/routes/capture.js +86 -0
  88. package/dist/routes/capture.js.map +1 -0
  89. package/dist/routes/cite.d.ts +9 -0
  90. package/dist/routes/cite.d.ts.map +1 -0
  91. package/dist/routes/cite.js +49 -0
  92. package/dist/routes/cite.js.map +1 -0
  93. package/dist/routes/crud.d.ts +11 -0
  94. package/dist/routes/crud.d.ts.map +1 -0
  95. package/dist/routes/crud.js +176 -0
  96. package/dist/routes/crud.js.map +1 -0
  97. package/dist/routes/dashboard.d.ts +9 -0
  98. package/dist/routes/dashboard.d.ts.map +1 -0
  99. package/dist/routes/dashboard.js +85 -0
  100. package/dist/routes/dashboard.js.map +1 -0
  101. package/dist/routes/entity-cron.d.ts +8 -0
  102. package/dist/routes/entity-cron.js +31 -0
  103. package/dist/routes/entity-cron.js.map +1 -0
  104. package/dist/routes/export.d.ts +8 -0
  105. package/dist/routes/export.d.ts.map +1 -0
  106. package/dist/routes/export.js +69 -0
  107. package/dist/routes/export.js.map +1 -0
  108. package/dist/routes/extract-pr-learnings.d.ts +12 -0
  109. package/dist/routes/extract-pr-learnings.d.ts.map +1 -0
  110. package/dist/routes/extract-pr-learnings.js +127 -0
  111. package/dist/routes/extract-pr-learnings.js.map +1 -0
  112. package/dist/routes/forget-cron.d.ts +9 -0
  113. package/dist/routes/forget-cron.js +30 -0
  114. package/dist/routes/forget-cron.js.map +1 -0
  115. package/dist/routes/learnings.d.ts +9 -0
  116. package/dist/routes/learnings.d.ts.map +1 -0
  117. package/dist/routes/learnings.js +237 -0
  118. package/dist/routes/learnings.js.map +1 -0
  119. package/dist/routes/pulse.d.ts +9 -0
  120. package/dist/routes/pulse.d.ts.map +1 -0
  121. package/dist/routes/pulse.js +133 -0
  122. package/dist/routes/pulse.js.map +1 -0
  123. package/dist/routes/search.d.ts +8 -0
  124. package/dist/routes/search.d.ts.map +1 -0
  125. package/dist/routes/search.js +107 -0
  126. package/dist/routes/search.js.map +1 -0
  127. package/dist/routes/store.d.ts +8 -0
  128. package/dist/routes/store.d.ts.map +1 -0
  129. package/dist/routes/store.js +89 -0
  130. package/dist/routes/store.js.map +1 -0
  131. package/dist/routes/sync.d.ts +12 -0
  132. package/dist/routes/sync.d.ts.map +1 -0
  133. package/dist/routes/sync.js +83 -0
  134. package/dist/routes/sync.js.map +1 -0
  135. package/dist/routes/voice-profile.d.ts +9 -0
  136. package/dist/routes/voice-profile.d.ts.map +1 -0
  137. package/dist/routes/voice-profile.js +124 -0
  138. package/dist/routes/voice-profile.js.map +1 -0
  139. package/dist/server.d.ts +37 -0
  140. package/dist/server.d.ts.map +1 -0
  141. package/dist/server.js +99 -0
  142. package/dist/server.js.map +1 -0
  143. package/dist/vectordb/index.d.ts +17 -0
  144. package/dist/vectordb/index.d.ts.map +1 -0
  145. package/dist/vectordb/index.js +39 -0
  146. package/dist/vectordb/index.js.map +1 -0
  147. package/dist/vectordb/supabase.d.ts +62 -0
  148. package/dist/vectordb/supabase.d.ts.map +1 -0
  149. package/dist/vectordb/supabase.js +711 -0
  150. package/dist/vectordb/supabase.js.map +1 -0
  151. package/dist/vectordb/types.d.ts +217 -0
  152. package/dist/vectordb/types.d.ts.map +1 -0
  153. package/dist/vectordb/types.js +28 -0
  154. package/dist/vectordb/types.js.map +1 -0
  155. package/package.json +49 -0
  156. package/setup.sql +1037 -0
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Memory Search Route
3
+ *
4
+ * GET /search?q=<query>&limit=10&category=gotcha&threshold=0.3
5
+ */
6
+ import { Hono } from 'hono';
7
+ import { searchMemories } from '../lib/memory.js';
8
+ import { searchMemoriesV2 } from '../lib/retrieval.js';
9
+ const VALID_CATEGORIES = ['gotcha', 'pattern', 'fix', 'insight', 'question', 'preference', 'convention'];
10
+ const MAX_LIMIT = 50;
11
+ const DEFAULT_LIMIT = 10;
12
+ const DEFAULT_THRESHOLD = 0.35;
13
+ const app = new Hono();
14
+ app.get('/', async (c) => {
15
+ try {
16
+ const query = c.req.query('q');
17
+ if (!query || query.trim().length === 0) {
18
+ return c.json({ success: false, error: 'Query parameter "q" is required' }, 400);
19
+ }
20
+ let limit = DEFAULT_LIMIT;
21
+ const limitParam = c.req.query('limit');
22
+ if (limitParam) {
23
+ const parsed = parseInt(limitParam, 10);
24
+ if (isNaN(parsed) || parsed < 1) {
25
+ return c.json({ success: false, error: 'limit must be a positive integer' }, 400);
26
+ }
27
+ limit = Math.min(parsed, MAX_LIMIT);
28
+ }
29
+ let category;
30
+ const categoryParam = c.req.query('category');
31
+ if (categoryParam) {
32
+ if (!VALID_CATEGORIES.includes(categoryParam)) {
33
+ return c.json({ success: false, error: `category must be one of: ${VALID_CATEGORIES.join(', ')}` }, 400);
34
+ }
35
+ category = categoryParam;
36
+ }
37
+ let tags;
38
+ const tagsParam = c.req.query('tags');
39
+ if (tagsParam) {
40
+ tags = tagsParam.split(',').map(t => t.trim()).filter(Boolean);
41
+ }
42
+ const includeArchived = c.req.query('includeArchived') === 'true';
43
+ let threshold = DEFAULT_THRESHOLD;
44
+ const thresholdParam = c.req.query('threshold');
45
+ if (thresholdParam) {
46
+ const parsed = parseFloat(thresholdParam);
47
+ if (isNaN(parsed) || parsed < 0 || parsed > 1) {
48
+ return c.json({ success: false, error: 'threshold must be a number between 0 and 1' }, 400);
49
+ }
50
+ threshold = parsed;
51
+ }
52
+ let durability;
53
+ const durabilityParam = c.req.query('durability');
54
+ if (durabilityParam) {
55
+ if (!['permanent', 'temporary', 'session'].includes(durabilityParam)) {
56
+ return c.json({ success: false, error: 'durability must be one of: permanent, temporary, session' }, 400);
57
+ }
58
+ durability = durabilityParam;
59
+ }
60
+ // Cross-project search: project=<slug> filters, crossProject=true includes all
61
+ const projectParam = c.req.query('project');
62
+ const crossProject = c.req.query('crossProject') === 'true';
63
+ // v2: lifecycle filters
64
+ const latestOnly = c.req.query('latestOnly') !== 'false';
65
+ const memoryType = c.req.query('memoryType');
66
+ const options = {
67
+ limit,
68
+ category,
69
+ tags,
70
+ includeArchived,
71
+ similarityThreshold: threshold,
72
+ durability,
73
+ excludeExpired: true,
74
+ sourceProject: projectParam || undefined,
75
+ includeUniversal: crossProject || !!projectParam,
76
+ latestOnly,
77
+ memoryType: memoryType || undefined,
78
+ };
79
+ // Fetch more results than requested if domain filter is active (post-filter)
80
+ const domainParam = c.req.query('domain');
81
+ if (domainParam) {
82
+ options.limit = Math.min(limit * 3, MAX_LIMIT); // over-fetch for post-filter
83
+ }
84
+ // v2: multi-strategy fusion (semantic + BM25 + temporal + graph via RRF)
85
+ const useFusion = c.req.query('fusion') !== 'false';
86
+ const entityIds = c.req.query('entityIds')?.split(',').filter(Boolean);
87
+ let results = useFusion
88
+ ? await searchMemoriesV2(query.trim(), { ...options, entityIds })
89
+ : await searchMemories(query.trim(), options);
90
+ // Post-filter by domain (column not in RPC)
91
+ if (domainParam) {
92
+ results = results.filter((r) => r.domain === domainParam).slice(0, limit);
93
+ }
94
+ return c.json({
95
+ success: true,
96
+ query: query.trim(),
97
+ count: results.length,
98
+ results,
99
+ });
100
+ }
101
+ catch (error) {
102
+ console.error('[Memory Search] Error:', error);
103
+ return c.json({ success: false, error: error instanceof Error ? error.message : 'Unknown error searching memories' }, 500);
104
+ }
105
+ });
106
+ export default app;
107
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/routes/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Memory Store Route
3
+ *
4
+ * POST /store
5
+ */
6
+ import { Hono } from 'hono';
7
+ declare const app: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
8
+ export default app;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/routes/store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAQ3B,QAAA,MAAM,GAAG,4EAAa,CAAA;AAkEtB,eAAe,GAAG,CAAA"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Memory Store Route
3
+ *
4
+ * POST /store
5
+ */
6
+ import { Hono } from 'hono';
7
+ import { storeMemory } from '../lib/memory.js';
8
+ import { passesIngestionGate } from '../lib/quality-gate.js';
9
+ import { deriveAll } from '../lib/auto-derive.js';
10
+ const VALID_CATEGORIES = ['gotcha', 'pattern', 'fix', 'insight', 'question', 'preference', 'convention'];
11
+ const VALID_SOURCE_TYPES = ['pr', 'manual', 'extracted', 'bootstrap', 'advisor_session', 'plan', 'web_research', 'session', 'codebase_analysis'];
12
+ const VALID_DURABILITIES = ['permanent', 'temporary', 'session'];
13
+ const app = new Hono();
14
+ app.post('/', async (c) => {
15
+ try {
16
+ const body = await c.req.json();
17
+ if (!body.content || typeof body.content !== 'string') {
18
+ return c.json({ success: false, error: 'content is required and must be a string' }, 400);
19
+ }
20
+ if (!body.skipQualityGate) {
21
+ const gate = passesIngestionGate(body.content.trim());
22
+ if (!gate.passes) {
23
+ return c.json({ success: false, error: `Quality gate rejected: ${gate.reason}` }, 400);
24
+ }
25
+ }
26
+ if (!body.sourceType) {
27
+ body.sourceType = 'manual';
28
+ }
29
+ else if (!VALID_SOURCE_TYPES.includes(body.sourceType)) {
30
+ return c.json({ success: false, error: `sourceType must be one of: ${VALID_SOURCE_TYPES.join(', ')}` }, 400);
31
+ }
32
+ if (body.category && !VALID_CATEGORIES.includes(body.category)) {
33
+ return c.json({ success: false, error: `category must be one of: ${VALID_CATEGORIES.join(', ')}` }, 400);
34
+ }
35
+ if (body.confidence !== undefined) {
36
+ const conf = Number(body.confidence);
37
+ if (isNaN(conf) || conf < 0 || conf > 1) {
38
+ return c.json({ success: false, error: 'confidence must be a number between 0 and 1' }, 400);
39
+ }
40
+ }
41
+ if (body.durability && !VALID_DURABILITIES.includes(body.durability)) {
42
+ return c.json({ success: false, error: `durability must be one of: ${VALID_DURABILITIES.join(', ')}` }, 400);
43
+ }
44
+ if (body.expiresAt) {
45
+ const parsed = new Date(body.expiresAt);
46
+ if (isNaN(parsed.getTime())) {
47
+ return c.json({ success: false, error: 'expiresAt must be a valid ISO date string' }, 400);
48
+ }
49
+ }
50
+ // Auto-derive missing fields from content
51
+ const content = body.content.trim();
52
+ const derived = deriveAll(content, {
53
+ category: body.category || undefined,
54
+ tags: Array.isArray(body.tags) && body.tags.length > 0 ? body.tags : undefined,
55
+ summary: body.summary?.trim() || undefined,
56
+ domain: body.domain?.trim() || undefined,
57
+ topic: body.topic?.trim() || undefined,
58
+ memoryType: body.memoryType || undefined,
59
+ sourceTool: body.sourceTool?.trim() || 'http-store',
60
+ });
61
+ const input = {
62
+ content,
63
+ summary: derived.summary,
64
+ category: derived.category,
65
+ tags: derived.tags,
66
+ contextTags: Array.isArray(body.contextTags) ? body.contextTags.filter(Boolean) : [],
67
+ sourceType: body.sourceType,
68
+ sourceRef: body.sourceRef?.trim(),
69
+ sourceProject: body.sourceProject?.trim() || 'default',
70
+ confidence: body.confidence,
71
+ relatedTo: Array.isArray(body.relatedTo) ? body.relatedTo : [],
72
+ isContradiction: body.isContradiction || false,
73
+ durability: body.durability || 'permanent',
74
+ expiresAt: body.expiresAt ? new Date(body.expiresAt) : undefined,
75
+ domain: derived.domain,
76
+ topic: derived.topic,
77
+ memoryType: derived.memoryType,
78
+ sourceTool: derived.sourceTool,
79
+ };
80
+ const memory = await storeMemory(input);
81
+ return c.json({ success: true, memory });
82
+ }
83
+ catch (error) {
84
+ console.error('[Memory Store] Error:', error);
85
+ return c.json({ success: false, error: error instanceof Error ? error.message : 'Unknown error storing memory' }, 500);
86
+ }
87
+ });
88
+ export default app;
89
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/routes/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Memory Sync Route (Portable)
3
+ *
4
+ * GET /sync?since=<timestamp>&limit=50
5
+ * Returns new learnings since the given timestamp
6
+ *
7
+ * POST /sync
8
+ * Returns recent learnings (simplified from NookTraqr's broadcast system)
9
+ */
10
+ import { Hono } from 'hono';
11
+ declare const app: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
12
+ export default app;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/routes/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,QAAA,MAAM,GAAG,4EAAa,CAAA;AAsFtB,eAAe,GAAG,CAAA"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Memory Sync Route (Portable)
3
+ *
4
+ * GET /sync?since=<timestamp>&limit=50
5
+ * Returns new learnings since the given timestamp
6
+ *
7
+ * POST /sync
8
+ * Returns recent learnings (simplified from NookTraqr's broadcast system)
9
+ */
10
+ import { Hono } from 'hono';
11
+ import { getMemoryClient, getTableName } from '../lib/client.js';
12
+ const app = new Hono();
13
+ app.get('/', async (c) => {
14
+ try {
15
+ const sinceParam = c.req.query('since');
16
+ const limit = parseInt(c.req.query('limit') || '50', 10);
17
+ let sinceTimestamp;
18
+ if (sinceParam) {
19
+ sinceTimestamp = parseInt(sinceParam, 10);
20
+ if (isNaN(sinceTimestamp)) {
21
+ return c.json({ success: false, error: 'Invalid since timestamp' }, 400);
22
+ }
23
+ }
24
+ else {
25
+ sinceTimestamp = Date.now() - 60 * 60 * 1000;
26
+ }
27
+ const sinceDate = new Date(sinceTimestamp).toISOString();
28
+ const client = getMemoryClient();
29
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
+ const { data, error } = await client.from(getTableName())
31
+ .select('id, content, category, tags, source_type, created_at, original_confidence')
32
+ .eq('is_archived', false)
33
+ .gte('created_at', sinceDate)
34
+ .order('created_at', { ascending: false })
35
+ .limit(limit);
36
+ if (error) {
37
+ throw new Error(error.message);
38
+ }
39
+ return c.json({
40
+ success: true,
41
+ learnings: data || [],
42
+ total: (data || []).length,
43
+ syncedAt: Date.now(),
44
+ since: sinceTimestamp,
45
+ });
46
+ }
47
+ catch (error) {
48
+ console.error('[memory/sync] GET error:', error);
49
+ return c.json({ success: false, error: error instanceof Error ? error.message : 'Unknown error' }, 500);
50
+ }
51
+ });
52
+ app.post('/', async (c) => {
53
+ try {
54
+ const body = await c.req.json();
55
+ const since = body.since || Date.now() - 60 * 60 * 1000;
56
+ const limit = body.limit || 50;
57
+ const sinceDate = new Date(since).toISOString();
58
+ const client = getMemoryClient();
59
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
+ const { data, error } = await client.from(getTableName())
61
+ .select('id, content, category, tags, source_type, created_at, original_confidence')
62
+ .eq('is_archived', false)
63
+ .gte('created_at', sinceDate)
64
+ .order('created_at', { ascending: false })
65
+ .limit(limit);
66
+ if (error) {
67
+ throw new Error(error.message);
68
+ }
69
+ return c.json({
70
+ success: true,
71
+ learnings: data || [],
72
+ total: (data || []).length,
73
+ syncedAt: Date.now(),
74
+ previousSync: since,
75
+ });
76
+ }
77
+ catch (error) {
78
+ console.error('[memory/sync] POST error:', error);
79
+ return c.json({ success: false, error: error instanceof Error ? error.message : 'Unknown error' }, 500);
80
+ }
81
+ });
82
+ export default app;
83
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/routes/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Voice Profile Route (Portable)
3
+ *
4
+ * GET /voice-profile?audience=user-facing|business|technical|social
5
+ * Aggregates voice-tagged memories into a structured voice profile.
6
+ */
7
+ import { Hono } from 'hono';
8
+ declare const app: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
9
+ export default app;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-profile.d.ts","sourceRoot":"","sources":["../../src/routes/voice-profile.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAyB3B,QAAA,MAAM,GAAG,4EAAa,CAAA;AAkJtB,eAAe,GAAG,CAAA"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Voice Profile Route (Portable)
3
+ *
4
+ * GET /voice-profile?audience=user-facing|business|technical|social
5
+ * Aggregates voice-tagged memories into a structured voice profile.
6
+ */
7
+ import { Hono } from 'hono';
8
+ import { searchMemories } from '../lib/memory.js';
9
+ const AUDIENCE_TYPES = ['user-facing', 'business', 'technical', 'social', 'brand'];
10
+ const app = new Hono();
11
+ app.get('/', async (c) => {
12
+ try {
13
+ const audienceFilter = c.req.query('audience');
14
+ if (audienceFilter && !AUDIENCE_TYPES.includes(audienceFilter)) {
15
+ return c.json({ success: false, error: `Invalid audience: ${audienceFilter}. Must be one of: ${AUDIENCE_TYPES.join(', ')}` }, 400);
16
+ }
17
+ const queries = [
18
+ 'voice writing style tone',
19
+ 'voice communication pattern',
20
+ 'voice signature phrase sign-off',
21
+ 'voice audience adaptation',
22
+ 'voice vocabulary emoji',
23
+ ];
24
+ const allMemories = new Map();
25
+ for (const query of queries) {
26
+ const results = await searchMemories(query, {
27
+ limit: 30,
28
+ tags: ['voice'],
29
+ similarityThreshold: 0.2,
30
+ });
31
+ for (const r of results) {
32
+ if (!allMemories.has(r.id)) {
33
+ allMemories.set(r.id, {
34
+ id: r.id,
35
+ content: r.content,
36
+ confidence: r.relevanceScore,
37
+ category: r.category || 'preference',
38
+ tags: r.tags || [],
39
+ });
40
+ }
41
+ }
42
+ }
43
+ const memories = Array.from(allMemories.values());
44
+ const profile = {
45
+ audiences: {},
46
+ universal: [],
47
+ totalVoiceMemories: memories.length,
48
+ promptContext: '',
49
+ };
50
+ for (const memory of memories) {
51
+ let matched = false;
52
+ for (const audience of AUDIENCE_TYPES) {
53
+ const hasAudienceTag = memory.tags.some(t => t === `audience:${audience}` ||
54
+ t === audience ||
55
+ t === audience.replace('-', '_'));
56
+ if (hasAudienceTag) {
57
+ if (audienceFilter && audience !== audienceFilter)
58
+ continue;
59
+ if (!profile.audiences[audience]) {
60
+ profile.audiences[audience] = { traits: [], count: 0 };
61
+ }
62
+ profile.audiences[audience].traits.push({
63
+ content: memory.content,
64
+ confidence: memory.confidence,
65
+ category: memory.category,
66
+ tags: memory.tags,
67
+ });
68
+ profile.audiences[audience].count++;
69
+ matched = true;
70
+ }
71
+ }
72
+ if (!matched && !audienceFilter) {
73
+ profile.universal.push({
74
+ content: memory.content,
75
+ confidence: memory.confidence,
76
+ category: memory.category,
77
+ tags: memory.tags,
78
+ });
79
+ }
80
+ }
81
+ for (const audience of AUDIENCE_TYPES) {
82
+ if (profile.audiences[audience]) {
83
+ profile.audiences[audience].traits.sort((a, b) => b.confidence - a.confidence);
84
+ }
85
+ }
86
+ profile.universal.sort((a, b) => b.confidence - a.confidence);
87
+ profile.promptContext = buildPromptContext(profile, audienceFilter);
88
+ return c.json({ success: true, ...profile });
89
+ }
90
+ catch (error) {
91
+ console.error('[Voice Profile] Error:', error);
92
+ return c.json({ success: false, error: error instanceof Error ? error.message : 'Unknown error building voice profile' }, 500);
93
+ }
94
+ });
95
+ function buildPromptContext(profile, audienceFilter) {
96
+ const lines = [];
97
+ lines.push('=== VOICE PROFILE ===');
98
+ lines.push('');
99
+ if (profile.totalVoiceMemories === 0) {
100
+ lines.push('No voice profile data available. Run /voice to analyze writing samples first.');
101
+ return lines.join('\n');
102
+ }
103
+ for (const audience of AUDIENCE_TYPES) {
104
+ const section = profile.audiences[audience];
105
+ if (!section || section.traits.length === 0)
106
+ continue;
107
+ lines.push(`## ${audience.toUpperCase()} Voice`);
108
+ for (const trait of section.traits) {
109
+ lines.push(`- ${trait.content}`);
110
+ }
111
+ lines.push('');
112
+ }
113
+ if (profile.universal.length > 0 && !audienceFilter) {
114
+ lines.push('## UNIVERSAL Traits (across all audiences)');
115
+ for (const trait of profile.universal) {
116
+ lines.push(`- ${trait.content}`);
117
+ }
118
+ lines.push('');
119
+ }
120
+ lines.push('=== END VOICE PROFILE ===');
121
+ return lines.join('\n');
122
+ }
123
+ export default app;
124
+ //# sourceMappingURL=voice-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-profile.js","sourceRoot":"","sources":["../../src/routes/voice-profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @traqr/memory — Standalone Hono HTTP Server
3
+ *
4
+ * Provides 11 memory API routes as a standalone server.
5
+ * Drop-in replacement for NookTraqr's Next.js memory API routes.
6
+ *
7
+ * Usage:
8
+ * SUPABASE_URL=... SUPABASE_SERVICE_ROLE_KEY=... OPENAI_API_KEY=... \
9
+ * node --loader ts-node/esm packages/memory/src/server.ts
10
+ *
11
+ * Routes:
12
+ * GET /search — Semantic memory search
13
+ * POST /store — Store a new memory
14
+ * GET /get — Get memory by ID
15
+ * PATCH /update — Update a memory
16
+ * GET /verify — System health check
17
+ * POST /verify — Full round-trip verification
18
+ * GET /export — Export all memories
19
+ * POST /cite — Record memory citations
20
+ * GET /dashboard — Memory stats dashboard
21
+ * GET /sync — Get recent learnings
22
+ * POST /sync — Sync learnings
23
+ * GET /bootstrap — Bootstrap usage info
24
+ * POST /bootstrap — Import markdown sections
25
+ * POST /capture-session — Store captured session learnings
26
+ * POST /pulse — Batched capture + search + update
27
+ * POST /assemble-context — Session context assembly
28
+ * GET /learnings — Domain-organized learning query
29
+ * POST /extract-pr-learnings — On-demand PR learning extraction
30
+ * GET /voice-profile — Voice profile aggregation
31
+ * POST /analyze-voice — Voice analysis extraction
32
+ * POST /analyze-codebase — Codebase convention analysis
33
+ * POST /capture — Passive knowledge capture
34
+ * GET /capture — List recent captures
35
+ */
36
+ import { Hono } from 'hono';
37
+ export declare function createMemoryServer(): Hono;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAqB3B,wBAAgB,kBAAkB,IAAI,IAAI,CA4BzC"}
package/dist/server.js ADDED
@@ -0,0 +1,99 @@
1
+ /**
2
+ * @traqr/memory — Standalone Hono HTTP Server
3
+ *
4
+ * Provides 11 memory API routes as a standalone server.
5
+ * Drop-in replacement for NookTraqr's Next.js memory API routes.
6
+ *
7
+ * Usage:
8
+ * SUPABASE_URL=... SUPABASE_SERVICE_ROLE_KEY=... OPENAI_API_KEY=... \
9
+ * node --loader ts-node/esm packages/memory/src/server.ts
10
+ *
11
+ * Routes:
12
+ * GET /search — Semantic memory search
13
+ * POST /store — Store a new memory
14
+ * GET /get — Get memory by ID
15
+ * PATCH /update — Update a memory
16
+ * GET /verify — System health check
17
+ * POST /verify — Full round-trip verification
18
+ * GET /export — Export all memories
19
+ * POST /cite — Record memory citations
20
+ * GET /dashboard — Memory stats dashboard
21
+ * GET /sync — Get recent learnings
22
+ * POST /sync — Sync learnings
23
+ * GET /bootstrap — Bootstrap usage info
24
+ * POST /bootstrap — Import markdown sections
25
+ * POST /capture-session — Store captured session learnings
26
+ * POST /pulse — Batched capture + search + update
27
+ * POST /assemble-context — Session context assembly
28
+ * GET /learnings — Domain-organized learning query
29
+ * POST /extract-pr-learnings — On-demand PR learning extraction
30
+ * GET /voice-profile — Voice profile aggregation
31
+ * POST /analyze-voice — Voice analysis extraction
32
+ * POST /analyze-codebase — Codebase convention analysis
33
+ * POST /capture — Passive knowledge capture
34
+ * GET /capture — List recent captures
35
+ */
36
+ import { Hono } from 'hono';
37
+ import { serve } from '@hono/node-server';
38
+ import searchRoutes from './routes/search.js';
39
+ import storeRoutes from './routes/store.js';
40
+ import crudRoutes from './routes/crud.js';
41
+ import exportRoutes from './routes/export.js';
42
+ import citeRoutes from './routes/cite.js';
43
+ import dashboardRoutes from './routes/dashboard.js';
44
+ import syncRoutes from './routes/sync.js';
45
+ import bootstrapRoutes from './routes/bootstrap.js';
46
+ import captureSessionRoutes from './routes/capture.js';
47
+ import pulseRoutes from './routes/pulse.js';
48
+ import assembleContextRoutes from './routes/assemble-context.js';
49
+ import learningsRoutes from './routes/learnings.js';
50
+ import extractPrLearningsRoutes from './routes/extract-pr-learnings.js';
51
+ import voiceProfileRoutes from './routes/voice-profile.js';
52
+ import analyzeVoiceRoutes from './routes/analyze-voice.js';
53
+ import analyzeCodebaseRoutes from './routes/analyze-codebase.js';
54
+ import captureThoughtRoutes from './routes/capture-thought.js';
55
+ import browseRoutes from './routes/browse.js';
56
+ import forgetCronRoutes from './routes/forget-cron.js';
57
+ import entityCronRoutes from './routes/entity-cron.js';
58
+ export function createMemoryServer() {
59
+ const app = new Hono();
60
+ // Health check
61
+ app.get('/health', (c) => c.json({ status: 'ok', service: '@traqr/memory' }));
62
+ // Core routes (existing)
63
+ app.route('/search', searchRoutes);
64
+ app.route('/store', storeRoutes);
65
+ app.route('/', crudRoutes); // /get, /update, /verify
66
+ app.route('/export', exportRoutes);
67
+ app.route('/cite', citeRoutes);
68
+ app.route('/dashboard', dashboardRoutes);
69
+ app.route('/sync', syncRoutes);
70
+ app.route('/bootstrap', bootstrapRoutes);
71
+ app.route('/capture-session', captureSessionRoutes);
72
+ // New portable routes (Phase 1)
73
+ app.route('/pulse', pulseRoutes);
74
+ app.route('/assemble-context', assembleContextRoutes);
75
+ app.route('/learnings', learningsRoutes);
76
+ app.route('/extract-pr-learnings', extractPrLearningsRoutes);
77
+ app.route('/voice-profile', voiceProfileRoutes);
78
+ app.route('/analyze-voice', analyzeVoiceRoutes);
79
+ app.route('/analyze-codebase', analyzeCodebaseRoutes);
80
+ app.route('/capture', captureThoughtRoutes);
81
+ app.route('/browse', browseRoutes);
82
+ app.route('/forget-cron', forgetCronRoutes);
83
+ app.route('/entity-cron', entityCronRoutes);
84
+ return app;
85
+ }
86
+ // Start server if run directly
87
+ const isMain = process.argv[1]?.endsWith('server.ts') || process.argv[1]?.endsWith('server.js');
88
+ if (isMain) {
89
+ const port = parseInt(process.env.PORT || '4100', 10);
90
+ const app = createMemoryServer();
91
+ console.log(`@traqr/memory server starting on port ${port}...`);
92
+ serve({
93
+ fetch: app.fetch,
94
+ port,
95
+ }, (info) => {
96
+ console.log(`@traqr/memory server running at http://localhost:${info.port}`);
97
+ });
98
+ }
99
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}