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.
- package/LICENSE +21 -0
- package/README.md +83 -10
- package/bin/cli.ts +7 -7
- package/bin/ctl.ts +42 -42
- package/dist/assets/{AgentsPage-BPhirnCe.js → AgentsPage-B-AAmsMK.js} +3 -3
- package/dist/assets/AssistantPage-BV1Mfwdt.js +2 -0
- package/dist/assets/BusinessPage-tLpNEz19.js +1 -0
- package/dist/assets/{CronManager-DDbz-yiT.js → CronManager-B-K_n3Jg.js} +1 -1
- package/dist/assets/HelpPage-Bhf_j6Xr.js +1 -0
- package/dist/assets/{IntegrationsPage-CrOitCmJ.js → IntegrationsPage-DAMjs9tM.js} +1 -1
- package/dist/assets/JarvisHUD-C_TGXCCn.js +120 -0
- package/dist/assets/MediaPage-C48HTTrt.js +1 -0
- package/dist/assets/MemoryPage-JkC-qtgp.js +1 -0
- package/dist/assets/{PlatformDashboard-Do6F0O2p.js → PlatformDashboard-AUo7tNnE.js} +1 -1
- package/dist/assets/{Playground-Fc5cdc5p.js → Playground-AzNMsRBL.js} +1 -1
- package/dist/assets/{ProcessPanel-CslEiZkI.js → ProcessPanel-DpE_2sX3.js} +1 -1
- package/dist/assets/{PromptsPage-D2EhsdNO.js → PromptsPage-C2RQOs6p.js} +2 -2
- package/dist/assets/RunsPage-B9UOyO79.js +1 -0
- package/dist/assets/{SandboxManager-a1AVI5q2.js → SandboxManager-jHvYjwfh.js} +1 -1
- package/dist/assets/SettingsPage-BBJax6gt.js +51 -0
- package/dist/assets/SkillsMarketplace-IjmjfdjD.js +1 -0
- package/dist/assets/SocialMediaPage-DoPZHhr2.js +10 -0
- package/dist/assets/{TailscalePage-CHiFhZXF.js → TailscalePage-DDEY7ckO.js} +1 -1
- package/dist/assets/TelephonyPage-OPNBZYKt.js +9 -0
- package/dist/assets/{TerminalPage-Drwyrnfd.js → TerminalPage-BjMbHHW3.js} +1 -1
- package/dist/assets/{gemini-live-client-C7rqAW7G.js → gemini-live-client-C70FEtX2.js} +11 -8
- package/dist/assets/{index-CEqZnThB.js → index-BgYM4wXw.js} +94 -93
- package/dist/assets/index-BkjSoVgn.css +32 -0
- package/dist/assets/sw-register-C7NOHtIu.js +1 -0
- package/dist/assets/text-chat-client-BSbLJerZ.js +2 -0
- package/dist/index.html +2 -2
- package/dist/sw.js +1 -1
- package/package.json +6 -1
- package/server/agent-executor.ts +37 -2
- package/server/agent-store.ts +3 -3
- package/server/agent-types.ts +11 -0
- package/server/assistant-store.ts +232 -6
- package/server/auth-manager.ts +9 -0
- package/server/cache-headers.ts +1 -1
- package/server/calendar-service.ts +10 -0
- package/server/ceo/document-store.ts +129 -0
- package/server/ceo/finance-store.ts +343 -0
- package/server/ceo/kpi-store.ts +208 -0
- package/server/ceo/memory-import.ts +277 -0
- package/server/ceo/news-store.ts +208 -0
- package/server/ceo/template-store.ts +134 -0
- package/server/ceo/time-tracking-store.ts +227 -0
- package/server/claude-auth-monitor.ts +128 -0
- package/server/claude-code-worker.ts +86 -0
- package/server/claude-session-discovery.ts +74 -1
- package/server/cli-launcher.ts +32 -10
- package/server/codex-adapter.ts +2 -2
- package/server/codex-ws-proxy.cjs +1 -1
- package/server/container-manager.ts +4 -4
- package/server/content-intelligence/content-engine.ts +1112 -0
- package/server/content-intelligence/platform-knowledge.ts +870 -0
- package/server/cron-store.ts +3 -3
- package/server/embedding-service.ts +49 -0
- package/server/event-bus-types.ts +13 -0
- package/server/federation/node-store.ts +5 -4
- package/server/fs-utils.ts +28 -1
- package/server/hank-notifications-store.ts +91 -0
- package/server/hank-tool-executor.ts +1835 -0
- package/server/hank-tools.ts +2107 -0
- package/server/image-pull-manager.ts +2 -2
- package/server/index.ts +25 -2
- package/server/llm-providers-streaming.ts +541 -0
- package/server/llm-providers.ts +12 -0
- package/server/marketplace.ts +249 -0
- package/server/mcp-registry.ts +158 -0
- package/server/memory-service.ts +296 -0
- package/server/obsidian-sync.ts +184 -0
- package/server/provider-manager.ts +5 -2
- package/server/provider-registry.ts +12 -0
- package/server/reminder-scheduler.ts +37 -1
- package/server/routes/agent-routes.ts +2 -1
- package/server/routes/assistant-routes.ts +198 -5
- package/server/routes/ceo-finance-kpi-routes.ts +167 -0
- package/server/routes/ceo-news-time-routes.ts +137 -0
- package/server/routes/ceo-routes.ts +99 -0
- package/server/routes/content-routes.ts +116 -0
- package/server/routes/email-routes.ts +147 -0
- package/server/routes/env-routes.ts +3 -3
- package/server/routes/fs-routes.ts +12 -9
- package/server/routes/hank-chat-routes.ts +592 -0
- package/server/routes/llm-routes.ts +12 -0
- package/server/routes/marketplace-routes.ts +63 -0
- package/server/routes/media-routes.ts +1 -1
- package/server/routes/memory-routes.ts +127 -0
- package/server/routes/platform-routes.ts +14 -675
- package/server/routes/sandbox-routes.ts +1 -1
- package/server/routes/settings-routes.ts +51 -1
- package/server/routes/socialmedia-routes.ts +152 -2
- package/server/routes/system-routes.ts +2 -2
- package/server/routes/team-routes.ts +71 -0
- package/server/routes/telephony-routes.ts +98 -18
- package/server/routes.ts +36 -9
- package/server/session-creation-service.ts +2 -2
- package/server/session-orchestrator.ts +54 -2
- package/server/session-types.ts +2 -0
- package/server/settings-manager.ts +50 -2
- package/server/skill-discovery.ts +68 -0
- package/server/socialmedia/adapters/browser-adapter.ts +179 -0
- package/server/socialmedia/adapters/postiz-adapter.ts +291 -14
- package/server/socialmedia/manager.ts +234 -15
- package/server/socialmedia/store.ts +51 -1
- package/server/socialmedia/types.ts +35 -2
- package/server/socialview/browser-manager.ts +150 -0
- package/server/socialview/extractors.ts +1298 -0
- package/server/socialview/image-describe.ts +188 -0
- package/server/socialview/library.ts +119 -0
- package/server/socialview/poster.ts +276 -0
- package/server/socialview/routes.ts +371 -0
- package/server/socialview/style-analyzer.ts +187 -0
- package/server/socialview/style-profiles.ts +67 -0
- package/server/socialview/types.ts +166 -0
- package/server/socialview/vision.ts +127 -0
- package/server/socialview/vnc-manager.ts +110 -0
- package/server/style-injector.ts +135 -0
- package/server/team-service.ts +239 -0
- package/server/team-store.ts +75 -0
- package/server/team-types.ts +52 -0
- package/server/telephony/audio-bridge.ts +281 -35
- package/server/telephony/audio-recorder.ts +132 -0
- package/server/telephony/call-manager.ts +803 -104
- package/server/telephony/call-types.ts +67 -1
- package/server/telephony/esl-client.ts +319 -0
- package/server/telephony/freeswitch-sync.ts +155 -0
- package/server/telephony/phone-utils.ts +63 -0
- package/server/telephony/telephony-store.ts +9 -8
- package/server/url-validator.ts +82 -0
- package/server/vault-markdown.ts +317 -0
- package/server/vault-migration.ts +121 -0
- package/server/vault-store.ts +466 -0
- package/server/vault-watcher.ts +59 -0
- package/server/vector-store.ts +210 -0
- package/server/voice-pipeline/gemini-live-adapter.ts +97 -0
- package/server/voice-pipeline/greeting-cache.ts +200 -0
- package/server/voice-pipeline/manager.ts +249 -0
- package/server/voice-pipeline/pipeline.ts +335 -0
- package/server/voice-pipeline/providers/index.ts +47 -0
- package/server/voice-pipeline/providers/llm-internal.ts +527 -0
- package/server/voice-pipeline/providers/stt-google.ts +157 -0
- package/server/voice-pipeline/providers/tts-google.ts +126 -0
- package/server/voice-pipeline/types.ts +247 -0
- package/server/ws-bridge-types.ts +6 -1
- package/dist/assets/AssistantPage-DJ-cMQfb.js +0 -1
- package/dist/assets/HelpPage-DMfkzERp.js +0 -1
- package/dist/assets/MediaPage-CE5rdvkC.js +0 -1
- package/dist/assets/RunsPage-C5BZF5Rx.js +0 -1
- package/dist/assets/SettingsPage-DirhjQrJ.js +0 -51
- package/dist/assets/SocialMediaPage-DBuM28vD.js +0 -1
- package/dist/assets/TelephonyPage-x0VV0fOo.js +0 -1
- package/dist/assets/index-C8M_PUmX.css +0 -32
- package/dist/assets/sw-register-LSSpj6RU.js +0 -1
- 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
|
+
}
|