heyhank 0.1.0 → 0.2.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/LICENSE +21 -0
  2. package/README.md +83 -10
  3. package/bin/cli.ts +7 -7
  4. package/bin/ctl.ts +42 -42
  5. package/dist/assets/{AgentsPage-BPhirnCe.js → AgentsPage-B-AAmsMK.js} +3 -3
  6. package/dist/assets/AssistantPage-BV1Mfwdt.js +2 -0
  7. package/dist/assets/BusinessPage-tLpNEz19.js +1 -0
  8. package/dist/assets/{CronManager-DDbz-yiT.js → CronManager-B-K_n3Jg.js} +1 -1
  9. package/dist/assets/HelpPage-Bhf_j6Xr.js +1 -0
  10. package/dist/assets/{IntegrationsPage-CrOitCmJ.js → IntegrationsPage-DAMjs9tM.js} +1 -1
  11. package/dist/assets/JarvisHUD-C_TGXCCn.js +120 -0
  12. package/dist/assets/MediaPage-C48HTTrt.js +1 -0
  13. package/dist/assets/MemoryPage-JkC-qtgp.js +1 -0
  14. package/dist/assets/{PlatformDashboard-Do6F0O2p.js → PlatformDashboard-AUo7tNnE.js} +1 -1
  15. package/dist/assets/{Playground-Fc5cdc5p.js → Playground-AzNMsRBL.js} +1 -1
  16. package/dist/assets/{ProcessPanel-CslEiZkI.js → ProcessPanel-DpE_2sX3.js} +1 -1
  17. package/dist/assets/{PromptsPage-D2EhsdNO.js → PromptsPage-C2RQOs6p.js} +2 -2
  18. package/dist/assets/RunsPage-B9UOyO79.js +1 -0
  19. package/dist/assets/{SandboxManager-a1AVI5q2.js → SandboxManager-jHvYjwfh.js} +1 -1
  20. package/dist/assets/SettingsPage-BBJax6gt.js +51 -0
  21. package/dist/assets/SkillsMarketplace-IjmjfdjD.js +1 -0
  22. package/dist/assets/SocialMediaPage-DoPZHhr2.js +10 -0
  23. package/dist/assets/{TailscalePage-CHiFhZXF.js → TailscalePage-DDEY7ckO.js} +1 -1
  24. package/dist/assets/TelephonyPage-OPNBZYKt.js +9 -0
  25. package/dist/assets/{TerminalPage-Drwyrnfd.js → TerminalPage-BjMbHHW3.js} +1 -1
  26. package/dist/assets/{gemini-live-client-C7rqAW7G.js → gemini-live-client-C70FEtX2.js} +11 -8
  27. package/dist/assets/{index-CEqZnThB.js → index-BgYM4wXw.js} +94 -93
  28. package/dist/assets/index-BkjSoVgn.css +32 -0
  29. package/dist/assets/sw-register-C7NOHtIu.js +1 -0
  30. package/dist/assets/text-chat-client-BSbLJerZ.js +2 -0
  31. package/dist/index.html +2 -2
  32. package/dist/sw.js +1 -1
  33. package/package.json +6 -1
  34. package/server/agent-executor.ts +37 -2
  35. package/server/agent-store.ts +3 -3
  36. package/server/agent-types.ts +11 -0
  37. package/server/assistant-store.ts +232 -6
  38. package/server/auth-manager.ts +9 -0
  39. package/server/cache-headers.ts +1 -1
  40. package/server/calendar-service.ts +10 -0
  41. package/server/ceo/document-store.ts +129 -0
  42. package/server/ceo/finance-store.ts +343 -0
  43. package/server/ceo/kpi-store.ts +208 -0
  44. package/server/ceo/memory-import.ts +277 -0
  45. package/server/ceo/news-store.ts +208 -0
  46. package/server/ceo/template-store.ts +134 -0
  47. package/server/ceo/time-tracking-store.ts +227 -0
  48. package/server/claude-auth-monitor.ts +128 -0
  49. package/server/claude-code-worker.ts +86 -0
  50. package/server/claude-session-discovery.ts +74 -1
  51. package/server/cli-launcher.ts +32 -10
  52. package/server/codex-adapter.ts +2 -2
  53. package/server/codex-ws-proxy.cjs +1 -1
  54. package/server/container-manager.ts +4 -4
  55. package/server/content-intelligence/content-engine.ts +1112 -0
  56. package/server/content-intelligence/platform-knowledge.ts +870 -0
  57. package/server/cron-store.ts +3 -3
  58. package/server/embedding-service.ts +49 -0
  59. package/server/event-bus-types.ts +13 -0
  60. package/server/federation/node-store.ts +5 -4
  61. package/server/fs-utils.ts +28 -1
  62. package/server/hank-notifications-store.ts +91 -0
  63. package/server/hank-tool-executor.ts +1835 -0
  64. package/server/hank-tools.ts +2107 -0
  65. package/server/image-pull-manager.ts +2 -2
  66. package/server/index.ts +25 -2
  67. package/server/llm-providers-streaming.ts +541 -0
  68. package/server/llm-providers.ts +12 -0
  69. package/server/marketplace.ts +249 -0
  70. package/server/mcp-registry.ts +158 -0
  71. package/server/memory-service.ts +296 -0
  72. package/server/obsidian-sync.ts +184 -0
  73. package/server/provider-manager.ts +5 -2
  74. package/server/provider-registry.ts +12 -0
  75. package/server/reminder-scheduler.ts +37 -1
  76. package/server/routes/agent-routes.ts +2 -1
  77. package/server/routes/assistant-routes.ts +198 -5
  78. package/server/routes/ceo-finance-kpi-routes.ts +167 -0
  79. package/server/routes/ceo-news-time-routes.ts +137 -0
  80. package/server/routes/ceo-routes.ts +99 -0
  81. package/server/routes/content-routes.ts +116 -0
  82. package/server/routes/email-routes.ts +147 -0
  83. package/server/routes/env-routes.ts +3 -3
  84. package/server/routes/fs-routes.ts +12 -9
  85. package/server/routes/hank-chat-routes.ts +592 -0
  86. package/server/routes/llm-routes.ts +12 -0
  87. package/server/routes/marketplace-routes.ts +63 -0
  88. package/server/routes/media-routes.ts +1 -1
  89. package/server/routes/memory-routes.ts +127 -0
  90. package/server/routes/platform-routes.ts +14 -675
  91. package/server/routes/sandbox-routes.ts +1 -1
  92. package/server/routes/settings-routes.ts +51 -1
  93. package/server/routes/socialmedia-routes.ts +152 -2
  94. package/server/routes/system-routes.ts +2 -2
  95. package/server/routes/team-routes.ts +71 -0
  96. package/server/routes/telephony-routes.ts +98 -18
  97. package/server/routes.ts +36 -9
  98. package/server/session-creation-service.ts +2 -2
  99. package/server/session-orchestrator.ts +54 -2
  100. package/server/session-types.ts +2 -0
  101. package/server/settings-manager.ts +50 -2
  102. package/server/skill-discovery.ts +68 -0
  103. package/server/socialmedia/adapters/browser-adapter.ts +179 -0
  104. package/server/socialmedia/adapters/postiz-adapter.ts +291 -14
  105. package/server/socialmedia/manager.ts +234 -15
  106. package/server/socialmedia/store.ts +51 -1
  107. package/server/socialmedia/types.ts +35 -2
  108. package/server/socialview/browser-manager.ts +150 -0
  109. package/server/socialview/extractors.ts +1298 -0
  110. package/server/socialview/image-describe.ts +188 -0
  111. package/server/socialview/library.ts +119 -0
  112. package/server/socialview/poster.ts +276 -0
  113. package/server/socialview/routes.ts +371 -0
  114. package/server/socialview/style-analyzer.ts +187 -0
  115. package/server/socialview/style-profiles.ts +67 -0
  116. package/server/socialview/types.ts +166 -0
  117. package/server/socialview/vision.ts +127 -0
  118. package/server/socialview/vnc-manager.ts +110 -0
  119. package/server/style-injector.ts +135 -0
  120. package/server/team-service.ts +239 -0
  121. package/server/team-store.ts +75 -0
  122. package/server/team-types.ts +52 -0
  123. package/server/telephony/audio-bridge.ts +281 -35
  124. package/server/telephony/audio-recorder.ts +132 -0
  125. package/server/telephony/call-manager.ts +803 -104
  126. package/server/telephony/call-types.ts +67 -1
  127. package/server/telephony/esl-client.ts +319 -0
  128. package/server/telephony/freeswitch-sync.ts +155 -0
  129. package/server/telephony/phone-utils.ts +63 -0
  130. package/server/telephony/telephony-store.ts +9 -8
  131. package/server/url-validator.ts +82 -0
  132. package/server/vault-markdown.ts +317 -0
  133. package/server/vault-migration.ts +121 -0
  134. package/server/vault-store.ts +466 -0
  135. package/server/vault-watcher.ts +59 -0
  136. package/server/vector-store.ts +210 -0
  137. package/server/voice-pipeline/gemini-live-adapter.ts +97 -0
  138. package/server/voice-pipeline/greeting-cache.ts +200 -0
  139. package/server/voice-pipeline/manager.ts +249 -0
  140. package/server/voice-pipeline/pipeline.ts +335 -0
  141. package/server/voice-pipeline/providers/index.ts +47 -0
  142. package/server/voice-pipeline/providers/llm-internal.ts +527 -0
  143. package/server/voice-pipeline/providers/stt-google.ts +157 -0
  144. package/server/voice-pipeline/providers/tts-google.ts +126 -0
  145. package/server/voice-pipeline/types.ts +247 -0
  146. package/server/ws-bridge-types.ts +6 -1
  147. package/dist/assets/AssistantPage-DJ-cMQfb.js +0 -1
  148. package/dist/assets/HelpPage-DMfkzERp.js +0 -1
  149. package/dist/assets/MediaPage-CE5rdvkC.js +0 -1
  150. package/dist/assets/RunsPage-C5BZF5Rx.js +0 -1
  151. package/dist/assets/SettingsPage-DirhjQrJ.js +0 -51
  152. package/dist/assets/SocialMediaPage-DBuM28vD.js +0 -1
  153. package/dist/assets/TelephonyPage-x0VV0fOo.js +0 -1
  154. package/dist/assets/index-C8M_PUmX.css +0 -32
  155. package/dist/assets/sw-register-LSSpj6RU.js +0 -1
  156. package/server/socialmedia/adapters/ayrshare-adapter.ts +0 -169
@@ -95,7 +95,7 @@ export function registerMediaRoutes(api: Hono): void {
95
95
  }
96
96
  const mime = body.mimeType || "image/png";
97
97
  const ext = mime.includes("png") ? "png" : mime.includes("jpeg") || mime.includes("jpg") ? "jpg" : mime.includes("webp") ? "webp" : mime.includes("mp4") ? "mp4" : "bin";
98
- filename = body.filename || `upload_${Date.now()}_${Math.random().toString(36).slice(2, 8)}.${ext}`;
98
+ filename = basename(body.filename || `upload_${Date.now()}_${Math.random().toString(36).slice(2, 8)}.${ext}`);
99
99
  data = Buffer.from(body.base64, "base64");
100
100
  }
101
101
 
@@ -0,0 +1,127 @@
1
+ // ─── Memory Routes ──────────────────────────────────────────────────────────
2
+ // REST API for memory CRUD + search
3
+
4
+ import type { Hono } from "hono";
5
+ import * as memoryService from "../memory-service.js";
6
+
7
+ export function registerMemoryRoutes(api: Hono): void {
8
+ // List all memories
9
+ api.get("/memory", async (c) => {
10
+ try {
11
+ const memories = await memoryService.listMemories();
12
+ return c.json({ memories, count: memories.length, backend: memoryService.getBackendName() });
13
+ } catch (err) {
14
+ return c.json({ error: err instanceof Error ? err.message : "Failed to list memories" }, 500);
15
+ }
16
+ });
17
+
18
+ // Search memories
19
+ api.get("/memory/search", async (c) => {
20
+ const query = c.req.query("q") || "";
21
+ if (!query) return c.json({ error: "q parameter required" }, 400);
22
+ try {
23
+ const memories = await memoryService.searchMemories(query);
24
+ return c.json({ memories, count: memories.length });
25
+ } catch (err) {
26
+ return c.json({ error: err instanceof Error ? err.message : "Search failed" }, 500);
27
+ }
28
+ });
29
+
30
+ // Get context for a message
31
+ api.post("/memory/context", async (c) => {
32
+ const body = await c.req.json().catch(() => ({} as { message?: string }));
33
+ if (!body.message) return c.json({ error: "message required" }, 400);
34
+ const context = await memoryService.getContextForMessage(body.message);
35
+ return c.json({ context });
36
+ });
37
+
38
+ // Add a memory
39
+ api.post("/memory", async (c) => {
40
+ const body = await c.req.json().catch(() => ({} as { content?: string; metadata?: Record<string, unknown> }));
41
+ if (!body.content) return c.json({ error: "content required" }, 400);
42
+ try {
43
+ const memory = await memoryService.addMemory(body.content, body.metadata);
44
+ return c.json({ memory, message: "Memory saved." });
45
+ } catch (err) {
46
+ return c.json({ error: err instanceof Error ? err.message : "Failed to save memory" }, 500);
47
+ }
48
+ });
49
+
50
+ // Update a memory
51
+ api.put("/memory/:id", async (c) => {
52
+ const id = c.req.param("id");
53
+ const body = await c.req.json().catch(() => ({} as { content?: string; metadata?: Record<string, unknown> }));
54
+ if (!body.content) return c.json({ error: "content required" }, 400);
55
+ try {
56
+ const memory = await memoryService.updateMemory(id, body.content, body.metadata);
57
+ if (!memory) return c.json({ error: "Memory not found." }, 404);
58
+ return c.json({ memory, message: "Memory updated." });
59
+ } catch (err) {
60
+ return c.json({ error: err instanceof Error ? err.message : "Failed to update memory" }, 500);
61
+ }
62
+ });
63
+
64
+ // Delete a memory
65
+ api.delete("/memory/:id", async (c) => {
66
+ const id = c.req.param("id");
67
+ try {
68
+ const ok = await memoryService.deleteMemory(id);
69
+ return c.json({ ok, message: ok ? "Memory deleted." : "Memory not found." });
70
+ } catch (err) {
71
+ return c.json({ error: err instanceof Error ? err.message : "Failed to delete memory" }, 500);
72
+ }
73
+ });
74
+
75
+ // Import: detect platform
76
+ api.post("/memory/import/detect", async (c) => {
77
+ try {
78
+ const body = await c.req.json();
79
+ const { detectPlatform } = await import("../ceo/memory-import.js");
80
+ const platform = detectPlatform(body.data);
81
+ return c.json({ platform });
82
+ } catch (err) {
83
+ return c.json({ error: err instanceof Error ? err.message : "Detection failed" }, 400);
84
+ }
85
+ });
86
+
87
+ // Import: process and save memories
88
+ api.post("/memory/import", async (c) => {
89
+ try {
90
+ const body = await c.req.json();
91
+ const { data, platform: platformOverride, options } = body;
92
+ if (!data) return c.json({ error: "data is required" }, 400);
93
+
94
+ const { detectPlatform, processImport } = await import("../ceo/memory-import.js");
95
+ const platform = platformOverride || detectPlatform(data);
96
+ const importOptions = {
97
+ mode: options?.mode || "both",
98
+ extractFacts: options?.extractFacts !== false,
99
+ maxConversations: options?.maxConversations || 500,
100
+ };
101
+
102
+ const result = processImport(data, platform, importOptions);
103
+
104
+ // Save extracted memories
105
+ let saved = 0;
106
+ for (const content of result.memories) {
107
+ try {
108
+ await memoryService.addMemory(content, {
109
+ source: `import-${platform}`,
110
+ category: "imported",
111
+ });
112
+ saved++;
113
+ } catch {
114
+ result.errors.push(`Failed to save: ${content.slice(0, 50)}...`);
115
+ }
116
+ }
117
+
118
+ return c.json({
119
+ ...result,
120
+ saved,
121
+ message: `Imported ${saved} memories from ${platform}. ${result.conversations} conversations processed, ${result.messagesProcessed} messages scanned.`,
122
+ });
123
+ } catch (err) {
124
+ return c.json({ error: err instanceof Error ? err.message : "Import failed" }, 500);
125
+ }
126
+ });
127
+ }