@imisbahk/hive 0.2.0 → 0.2.2
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/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +6 -1
- package/dist/agent/agent.js.map +1 -1
- package/dist/cli/commands/chat.d.ts.map +1 -1
- package/dist/cli/commands/chat.js +218 -5
- package/dist/cli/commands/chat.js.map +1 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +30 -0
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/daemon-service.d.ts +1 -0
- package/dist/cli/commands/daemon-service.d.ts.map +1 -1
- package/dist/cli/commands/daemon-service.js +45 -8
- package/dist/cli/commands/daemon-service.js.map +1 -1
- package/dist/cli/commands/daemon.d.ts +1 -1
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/daemon.js +187 -58
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +122 -1
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/integrations.d.ts +3 -0
- package/dist/cli/commands/integrations.d.ts.map +1 -0
- package/dist/cli/commands/integrations.js +360 -0
- package/dist/cli/commands/integrations.js.map +1 -0
- package/dist/cli/commands/nuke.d.ts.map +1 -1
- package/dist/cli/commands/nuke.js +9 -0
- package/dist/cli/commands/nuke.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +31 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/task.d.ts +8 -0
- package/dist/cli/commands/task.d.ts.map +1 -0
- package/dist/cli/commands/task.js +262 -0
- package/dist/cli/commands/task.js.map +1 -0
- package/dist/cli/helpers/tasks.d.ts +6 -0
- package/dist/cli/helpers/tasks.d.ts.map +1 -0
- package/dist/cli/helpers/tasks.js +57 -0
- package/dist/cli/helpers/tasks.js.map +1 -0
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/theme.d.ts +1 -0
- package/dist/cli/theme.d.ts.map +1 -1
- package/dist/cli/theme.js +1 -0
- package/dist/cli/theme.js.map +1 -1
- package/dist/daemon/index.js +381 -6
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/watcher.js +4 -1
- package/dist/daemon/watcher.js.map +1 -1
- package/dist/integrations/auth.d.ts +34 -0
- package/dist/integrations/auth.d.ts.map +1 -0
- package/dist/integrations/auth.js +111 -0
- package/dist/integrations/auth.js.map +1 -0
- package/dist/integrations/discord.d.ts +14 -0
- package/dist/integrations/discord.d.ts.map +1 -0
- package/dist/integrations/discord.js +132 -0
- package/dist/integrations/discord.js.map +1 -0
- package/dist/integrations/handler.d.ts +29 -0
- package/dist/integrations/handler.d.ts.map +1 -0
- package/dist/integrations/handler.js +138 -0
- package/dist/integrations/handler.js.map +1 -0
- package/dist/integrations/index.d.ts +8 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +8 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/keychain.d.ts +5 -0
- package/dist/integrations/keychain.d.ts.map +1 -0
- package/dist/integrations/keychain.js +22 -0
- package/dist/integrations/keychain.js.map +1 -0
- package/dist/integrations/rate-limit.d.ts +12 -0
- package/dist/integrations/rate-limit.d.ts.map +1 -0
- package/dist/integrations/rate-limit.js +17 -0
- package/dist/integrations/rate-limit.js.map +1 -0
- package/dist/integrations/slack.d.ts +20 -0
- package/dist/integrations/slack.d.ts.map +1 -0
- package/dist/integrations/slack.js +100 -0
- package/dist/integrations/slack.js.map +1 -0
- package/dist/integrations/telegram.d.ts +19 -0
- package/dist/integrations/telegram.d.ts.map +1 -0
- package/dist/integrations/telegram.js +92 -0
- package/dist/integrations/telegram.js.map +1 -0
- package/dist/integrations/whatsapp.d.ts +17 -0
- package/dist/integrations/whatsapp.d.ts.map +1 -0
- package/dist/integrations/whatsapp.js +82 -0
- package/dist/integrations/whatsapp.js.map +1 -0
- package/dist/providers/groq.js +1 -1
- package/dist/providers/groq.js.map +1 -1
- package/dist/providers/openai-compatible.d.ts +2 -0
- package/dist/providers/openai-compatible.d.ts.map +1 -1
- package/dist/providers/openai-compatible.js +29 -2
- package/dist/providers/openai-compatible.js.map +1 -1
- package/dist/storage/db.d.ts +30 -2
- package/dist/storage/db.d.ts.map +1 -1
- package/dist/storage/db.js +183 -0
- package/dist/storage/db.js.map +1 -1
- package/dist/storage/schema.d.ts +21 -1
- package/dist/storage/schema.d.ts.map +1 -1
- package/dist/storage/schema.js +38 -1
- package/dist/storage/schema.js.map +1 -1
- package/package.json +77 -70
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import slackPkg from "@slack/bolt";
|
|
2
|
+
const { App } = slackPkg;
|
|
3
|
+
export async function startSlackIntegration(deps) {
|
|
4
|
+
const socketMode = Boolean(deps.tokens.appToken);
|
|
5
|
+
const app = new App({
|
|
6
|
+
token: deps.tokens.botToken,
|
|
7
|
+
appToken: deps.tokens.appToken,
|
|
8
|
+
signingSecret: deps.tokens.signingSecret ?? "hive-signing-secret",
|
|
9
|
+
socketMode,
|
|
10
|
+
});
|
|
11
|
+
const postBlocks = async (channel, text) => {
|
|
12
|
+
const blocks = [
|
|
13
|
+
{
|
|
14
|
+
type: "section",
|
|
15
|
+
text: { type: "mrkdwn", text },
|
|
16
|
+
},
|
|
17
|
+
];
|
|
18
|
+
await app.client.chat.postMessage({ channel, text, blocks });
|
|
19
|
+
};
|
|
20
|
+
app.command("/hive", async ({ command, ack }) => {
|
|
21
|
+
await ack();
|
|
22
|
+
try {
|
|
23
|
+
const result = await deps.handleIncoming({
|
|
24
|
+
platform: "slack",
|
|
25
|
+
from: String(command.user_id),
|
|
26
|
+
text: String(command.text ?? "").trim(),
|
|
27
|
+
messageId: String(command.trigger_id ?? ""),
|
|
28
|
+
timestamp: Date.now(),
|
|
29
|
+
});
|
|
30
|
+
await postBlocks(String(command.channel_id), result);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
deps.log(`[integrations][slack] /hive error: ${String(error)}`);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
app.event("app_mention", async ({ event }) => {
|
|
37
|
+
try {
|
|
38
|
+
const channel = String(event.channel);
|
|
39
|
+
const user = String(event.user);
|
|
40
|
+
const text = String(event.text ?? "").replace(/<@[^>]+>/g, "").trim();
|
|
41
|
+
if (!text)
|
|
42
|
+
return;
|
|
43
|
+
const result = await deps.handleIncoming({
|
|
44
|
+
platform: "slack",
|
|
45
|
+
from: user,
|
|
46
|
+
text,
|
|
47
|
+
messageId: String(event.ts ?? ""),
|
|
48
|
+
timestamp: Date.now(),
|
|
49
|
+
});
|
|
50
|
+
await postBlocks(channel, result);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
deps.log(`[integrations][slack] mention error: ${String(error)}`);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
app.message(async ({ message, say }) => {
|
|
57
|
+
try {
|
|
58
|
+
if (message.subtype)
|
|
59
|
+
return;
|
|
60
|
+
if (message.channel_type !== "im")
|
|
61
|
+
return;
|
|
62
|
+
const user = String(message.user);
|
|
63
|
+
const text = String(message.text ?? "").trim();
|
|
64
|
+
if (!text)
|
|
65
|
+
return;
|
|
66
|
+
const result = await deps.handleIncoming({
|
|
67
|
+
platform: "slack",
|
|
68
|
+
from: user,
|
|
69
|
+
text,
|
|
70
|
+
messageId: String(message.ts ?? ""),
|
|
71
|
+
timestamp: Date.now(),
|
|
72
|
+
});
|
|
73
|
+
await say({
|
|
74
|
+
text: result,
|
|
75
|
+
blocks: [
|
|
76
|
+
{
|
|
77
|
+
type: "section",
|
|
78
|
+
text: { type: "mrkdwn", text: result },
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
deps.log(`[integrations][slack] dm error: ${String(error)}`);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
await app.start();
|
|
88
|
+
deps.log("[integrations][slack] started");
|
|
89
|
+
const platform = "slack";
|
|
90
|
+
const stop = async () => {
|
|
91
|
+
try {
|
|
92
|
+
await app.stop();
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// ignore
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
return { platform, stop };
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=slack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/integrations/slack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { IncomingMessage } from "./handler.js";
|
|
2
|
+
import type { IntegrationPlatform } from "./auth.js";
|
|
3
|
+
export interface TelegramIntegrationDeps {
|
|
4
|
+
token: string;
|
|
5
|
+
handleMessage: (msg: IncomingMessage) => Promise<{
|
|
6
|
+
text: string;
|
|
7
|
+
replyTo?: string;
|
|
8
|
+
to: string;
|
|
9
|
+
}>;
|
|
10
|
+
log: (line: string) => void;
|
|
11
|
+
getTasksText: () => Promise<string>;
|
|
12
|
+
getStatusText: () => Promise<string>;
|
|
13
|
+
}
|
|
14
|
+
export interface RunningIntegration {
|
|
15
|
+
platform: IntegrationPlatform;
|
|
16
|
+
stop: () => Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
export declare function startTelegramIntegration(deps: TelegramIntegrationDeps): Promise<RunningIntegration>;
|
|
19
|
+
//# sourceMappingURL=telegram.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../../src/integrations/telegram.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGrD,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjG,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AA4BD,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuFzG"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import TelegramBot from "node-telegram-bot-api";
|
|
2
|
+
const TELEGRAM_MAX_MESSAGE = 4096;
|
|
3
|
+
function splitTelegramText(text) {
|
|
4
|
+
if (text.length <= TELEGRAM_MAX_MESSAGE) {
|
|
5
|
+
return [text];
|
|
6
|
+
}
|
|
7
|
+
const parts = [];
|
|
8
|
+
let remaining = text;
|
|
9
|
+
while (remaining.length > TELEGRAM_MAX_MESSAGE) {
|
|
10
|
+
let cut = remaining.lastIndexOf("\n", TELEGRAM_MAX_MESSAGE);
|
|
11
|
+
if (cut < 1000) {
|
|
12
|
+
cut = TELEGRAM_MAX_MESSAGE;
|
|
13
|
+
}
|
|
14
|
+
parts.push(remaining.slice(0, cut));
|
|
15
|
+
remaining = remaining.slice(cut);
|
|
16
|
+
}
|
|
17
|
+
if (remaining.trim().length > 0) {
|
|
18
|
+
parts.push(remaining);
|
|
19
|
+
}
|
|
20
|
+
return parts;
|
|
21
|
+
}
|
|
22
|
+
export async function startTelegramIntegration(deps) {
|
|
23
|
+
const bot = new TelegramBot(encodeURIComponent(deps.token), { polling: true });
|
|
24
|
+
const stop = async () => {
|
|
25
|
+
try {
|
|
26
|
+
await bot.stopPolling();
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// ignore
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
bot.on("polling_error", (error) => {
|
|
33
|
+
deps.log(`[integrations][telegram] polling_error: ${error?.message ?? String(error)}`);
|
|
34
|
+
});
|
|
35
|
+
bot.on("message", async (message) => {
|
|
36
|
+
try {
|
|
37
|
+
const text = typeof message?.text === "string" ? message.text : "";
|
|
38
|
+
if (!text)
|
|
39
|
+
return;
|
|
40
|
+
const chatId = String(message.chat?.id);
|
|
41
|
+
const messageId = String(message.message_id ?? "");
|
|
42
|
+
const timestamp = typeof message.date === "number" ? message.date * 1000 : Date.now();
|
|
43
|
+
const normalized = text.trim();
|
|
44
|
+
const lower = normalized.toLowerCase();
|
|
45
|
+
if (lower === "/help") {
|
|
46
|
+
await bot.sendMessage(chatId, ["Commands:", "/help", "/status", "/tasks", "", "Just message me to ask anything."].join("\n"));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (lower === "/status") {
|
|
50
|
+
const status = await deps.getStatusText();
|
|
51
|
+
await bot.sendMessage(chatId, status);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (lower === "/tasks") {
|
|
55
|
+
const tasks = await deps.getTasksText();
|
|
56
|
+
await bot.sendMessage(chatId, tasks);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
await bot.sendChatAction(chatId, "typing").catch(() => { });
|
|
60
|
+
const outgoing = await deps.handleMessage({
|
|
61
|
+
platform: "telegram",
|
|
62
|
+
from: chatId,
|
|
63
|
+
text: normalized,
|
|
64
|
+
messageId,
|
|
65
|
+
timestamp,
|
|
66
|
+
});
|
|
67
|
+
const replyTo = outgoing.replyTo ? Number.parseInt(outgoing.replyTo, 10) : undefined;
|
|
68
|
+
for (const part of splitTelegramText(outgoing.text)) {
|
|
69
|
+
// eslint-disable-next-line no-await-in-loop
|
|
70
|
+
await bot.sendMessage(chatId, part, {
|
|
71
|
+
parse_mode: "Markdown",
|
|
72
|
+
reply_to_message_id: Number.isFinite(replyTo) ? replyTo : undefined,
|
|
73
|
+
disable_web_page_preview: true,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
deps.log(`[integrations][telegram] message handler error: ${error instanceof Error ? error.message : String(error)}`);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
// Validate token and report bot username to logs
|
|
82
|
+
try {
|
|
83
|
+
const me = await bot.getMe();
|
|
84
|
+
deps.log(`[integrations][telegram] started as @${me.username ?? "unknown"}`);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
deps.log(`[integrations][telegram] getMe failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
88
|
+
}
|
|
89
|
+
const platform = "telegram";
|
|
90
|
+
return { platform, stop };
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=telegram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/integrations/telegram.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { IncomingMessage } from "./handler.js";
|
|
2
|
+
import type { IntegrationPlatform } from "./auth.js";
|
|
3
|
+
export interface WhatsAppIntegrationDeps {
|
|
4
|
+
sessionDir: string;
|
|
5
|
+
handleMessage: (msg: IncomingMessage) => Promise<{
|
|
6
|
+
text: string;
|
|
7
|
+
}>;
|
|
8
|
+
log: (line: string) => void;
|
|
9
|
+
agentName: string;
|
|
10
|
+
}
|
|
11
|
+
export interface RunningIntegration {
|
|
12
|
+
platform: IntegrationPlatform;
|
|
13
|
+
stop: () => Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export declare function startWhatsAppIntegration(deps: WhatsAppIntegrationDeps): Promise<RunningIntegration>;
|
|
16
|
+
export declare function runWhatsAppSetup(sessionDir: string, log: (line: string) => void): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=whatsapp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whatsapp.d.ts","sourceRoot":"","sources":["../../src/integrations/whatsapp.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAErD,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CA6D7B;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BrG"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import pkg from "whatsapp-web.js";
|
|
3
|
+
import qrcode from "qrcode-terminal";
|
|
4
|
+
const { Client, LocalAuth } = pkg;
|
|
5
|
+
export async function startWhatsAppIntegration(deps) {
|
|
6
|
+
if (!fs.existsSync(deps.sessionDir)) {
|
|
7
|
+
fs.mkdirSync(deps.sessionDir, { recursive: true });
|
|
8
|
+
}
|
|
9
|
+
const client = new Client({
|
|
10
|
+
authStrategy: new LocalAuth({
|
|
11
|
+
dataPath: deps.sessionDir,
|
|
12
|
+
}),
|
|
13
|
+
puppeteer: {
|
|
14
|
+
headless: true,
|
|
15
|
+
args: ["--no-sandbox", "--disable-setuid-sandbox"],
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
client.on("ready", () => deps.log("[integrations][whatsapp] ready"));
|
|
19
|
+
client.on("auth_failure", (msg) => deps.log(`[integrations][whatsapp] auth_failure: ${String(msg)}`));
|
|
20
|
+
client.on("disconnected", (reason) => deps.log(`[integrations][whatsapp] disconnected: ${String(reason)}`));
|
|
21
|
+
client.on("message", async (message) => {
|
|
22
|
+
try {
|
|
23
|
+
const body = typeof message?.body === "string" ? message.body : "";
|
|
24
|
+
if (!body)
|
|
25
|
+
return;
|
|
26
|
+
const from = typeof message?.from === "string" ? message.from : "";
|
|
27
|
+
if (!from)
|
|
28
|
+
return;
|
|
29
|
+
await client.sendStateTyping(from).catch(() => { });
|
|
30
|
+
const outgoing = await deps.handleMessage({
|
|
31
|
+
platform: "whatsapp",
|
|
32
|
+
from,
|
|
33
|
+
text: body.trim(),
|
|
34
|
+
messageId: String(message?.id?._serialized ?? message?.id ?? ""),
|
|
35
|
+
timestamp: Date.now(),
|
|
36
|
+
});
|
|
37
|
+
const response = `${deps.agentName}: ${outgoing.text}`;
|
|
38
|
+
await client.sendMessage(from, response);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
deps.log(`[integrations][whatsapp] message handler error: ${error instanceof Error ? error.message : String(error)}`);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
await client.initialize();
|
|
45
|
+
const platform = "whatsapp";
|
|
46
|
+
const stop = async () => {
|
|
47
|
+
try {
|
|
48
|
+
await client.destroy();
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// ignore
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
return { platform, stop };
|
|
55
|
+
}
|
|
56
|
+
export async function runWhatsAppSetup(sessionDir, log) {
|
|
57
|
+
fs.mkdirSync(sessionDir, { recursive: true });
|
|
58
|
+
const client = new Client({
|
|
59
|
+
authStrategy: new LocalAuth({ dataPath: sessionDir }),
|
|
60
|
+
puppeteer: {
|
|
61
|
+
headless: true,
|
|
62
|
+
args: ["--no-sandbox", "--disable-setuid-sandbox"],
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
client.on("qr", (qr) => {
|
|
66
|
+
log("Scan this QR code in WhatsApp (Linked devices):");
|
|
67
|
+
qrcode.generate(qr, { small: true });
|
|
68
|
+
});
|
|
69
|
+
await new Promise((resolve, reject) => {
|
|
70
|
+
client.on("ready", () => resolve());
|
|
71
|
+
client.on("auth_failure", (msg) => reject(new Error(String(msg))));
|
|
72
|
+
client.initialize().catch(reject);
|
|
73
|
+
});
|
|
74
|
+
log("WhatsApp session saved.");
|
|
75
|
+
try {
|
|
76
|
+
await client.destroy();
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// ignore
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=whatsapp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whatsapp.js","sourceRoot":"","sources":["../../src/integrations/whatsapp.ts"],"names":[],"mappings":"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"}
|
package/dist/providers/groq.js
CHANGED
|
@@ -9,7 +9,7 @@ export class GroqProvider extends OpenAICompatibleProvider {
|
|
|
9
9
|
baseUrl: process.env.GROQ_BASE_URL ?? DEFAULT_GROQ_BASE_URL,
|
|
10
10
|
apiKey,
|
|
11
11
|
defaultModel: process.env.GROQ_MODEL ?? DEFAULT_GROQ_MODEL,
|
|
12
|
-
supportsTools:
|
|
12
|
+
supportsTools: true,
|
|
13
13
|
});
|
|
14
14
|
}
|
|
15
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groq.js","sourceRoot":"","sources":["../../src/providers/groq.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,MAAM,qBAAqB,GAAG,gCAAgC,CAAC;AAC/D,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;AAErD,MAAM,OAAO,YAAa,SAAQ,wBAAwB;IACxD,YAAY,MAAe;QACzB,KAAK,CAAC;YACJ,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,qBAAqB;YAC3D,MAAM;YACN,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,kBAAkB;YAC1D,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"groq.js","sourceRoot":"","sources":["../../src/providers/groq.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,MAAM,qBAAqB,GAAG,gCAAgC,CAAC;AAC/D,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;AAErD,MAAM,OAAO,YAAa,SAAQ,wBAAwB;IACxD,YAAY,MAAe;QACzB,KAAK,CAAC;YACJ,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,qBAAqB;YAC3D,MAAM;YACN,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,kBAAkB;YAC1D,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACnE,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -21,5 +21,7 @@ export declare class OpenAICompatibleProvider implements Provider {
|
|
|
21
21
|
constructor(config: OpenAICompatibleProviderConfig);
|
|
22
22
|
streamChat(request: StreamChatRequest): AsyncGenerator<string>;
|
|
23
23
|
completeChat(request: CompleteChatRequest): Promise<CompleteChatResponse>;
|
|
24
|
+
private completeChatInternal;
|
|
25
|
+
private shouldRetryWithoutTools;
|
|
24
26
|
}
|
|
25
27
|
//# sourceMappingURL=openai-compatible.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-compatible.d.ts","sourceRoot":"","sources":["../../src/providers/openai-compatible.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openai-compatible.d.ts","sourceRoot":"","sources":["../../src/providers/openai-compatible.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAGzB,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,iBAAiB,EAEvB,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,wBAAyB,YAAW,QAAQ;IACvD,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAEhC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAyB;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAA0B;gBAEzC,MAAM,EAAE,8BAA8B;IAW3C,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAAC,MAAM,CAAC;IAkB/D,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAiB/E,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,uBAAuB;CAmBhC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { completeOpenAICompatibleChat, ProviderConfigurationError, ProviderRequestError, streamOpenAICompatibleChat, } from "./base.js";
|
|
2
3
|
export class OpenAICompatibleProvider {
|
|
3
4
|
name;
|
|
4
5
|
defaultModel;
|
|
@@ -38,6 +39,18 @@ export class OpenAICompatibleProvider {
|
|
|
38
39
|
if (!this.allowMissingApiKey && !this.apiKey) {
|
|
39
40
|
throw new ProviderConfigurationError(`Provider "${this.name}" is missing an API key.`);
|
|
40
41
|
}
|
|
42
|
+
try {
|
|
43
|
+
return await this.completeChatInternal(request, { includeTools: this.supportsTools });
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if (this.shouldRetryWithoutTools(error, request)) {
|
|
47
|
+
process.stderr.write(chalk.dim("· tool call failed — retrying without tools") + "\n");
|
|
48
|
+
return await this.completeChatInternal(request, { includeTools: false });
|
|
49
|
+
}
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
completeChatInternal(request, options) {
|
|
41
54
|
return completeOpenAICompatibleChat({
|
|
42
55
|
provider: this.name,
|
|
43
56
|
baseUrl: this.baseUrl,
|
|
@@ -46,10 +59,24 @@ export class OpenAICompatibleProvider {
|
|
|
46
59
|
messages: request.messages,
|
|
47
60
|
temperature: request.temperature,
|
|
48
61
|
maxTokens: request.maxTokens,
|
|
49
|
-
tools:
|
|
62
|
+
tools: options.includeTools ? request.tools : undefined,
|
|
50
63
|
extraHeaders: this.extraHeaders,
|
|
51
64
|
extraBody: this.extraBody,
|
|
52
65
|
});
|
|
53
66
|
}
|
|
67
|
+
shouldRetryWithoutTools(error, request) {
|
|
68
|
+
if (this.name !== "groq") {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
if (!this.supportsTools || !request.tools || request.tools.length === 0) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
if (!(error instanceof ProviderRequestError)) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
const message = error.message.toLowerCase();
|
|
78
|
+
const is400 = message.includes("http 400") || message.includes("status 400") || message.includes(" 400 ");
|
|
79
|
+
return is400 && message.includes("tool_use_failed");
|
|
80
|
+
}
|
|
54
81
|
}
|
|
55
82
|
//# sourceMappingURL=openai-compatible.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-compatible.js","sourceRoot":"","sources":["../../src/providers/openai-compatible.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAG5B,0BAA0B,
|
|
1
|
+
{"version":3,"file":"openai-compatible.js","sourceRoot":"","sources":["../../src/providers/openai-compatible.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/db.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import Database from "better-sqlite3";
|
|
2
|
-
import { type AgentRecord, type ConversationRecord, type EpisodeRecord, type KnowledgeRecord, type MessageRecord, type MessageRole } from "./schema.js";
|
|
2
|
+
import { type AgentRecord, type ConversationRecord, type EpisodeRecord, type KnowledgeRecord, type MessageRecord, type MessageRole, type PlatformConversationRecord, type TaskRecord, type TaskStatus } from "./schema.js";
|
|
3
3
|
export type HiveDatabase = Database.Database;
|
|
4
|
-
export type { AgentRecord, ConversationRecord, EpisodeRecord, KnowledgeRecord, MessageRecord, MessageRole, MetaRecord, } from "./schema.js";
|
|
4
|
+
export type { AgentRecord, ConversationRecord, EpisodeRecord, KnowledgeRecord, MessageRecord, MessageRole, MetaRecord, PlatformConversationRecord, TaskRecord, TaskStatus, } from "./schema.js";
|
|
5
5
|
export interface UpsertAgentInput {
|
|
6
6
|
name: string;
|
|
7
7
|
provider: string;
|
|
@@ -45,12 +45,29 @@ export interface RelevantEpisode {
|
|
|
45
45
|
episode: EpisodeRecord;
|
|
46
46
|
score: number;
|
|
47
47
|
}
|
|
48
|
+
export interface InsertTaskInput {
|
|
49
|
+
id: string;
|
|
50
|
+
title: string;
|
|
51
|
+
agentId?: string | null;
|
|
52
|
+
}
|
|
53
|
+
export interface PlatformConversationMessage {
|
|
54
|
+
role: "user" | "assistant";
|
|
55
|
+
text: string;
|
|
56
|
+
messageId?: string;
|
|
57
|
+
timestamp: number;
|
|
58
|
+
}
|
|
48
59
|
export declare const HIVE_DIRECTORY_NAME = ".hive";
|
|
49
60
|
export declare const HIVE_DB_FILENAME = "hive.db";
|
|
50
61
|
export declare function getHiveHomeDir(): string;
|
|
51
62
|
export declare function getHiveDatabasePath(): string;
|
|
52
63
|
export declare function openHiveDatabase(databasePath?: string): HiveDatabase;
|
|
53
64
|
export declare function closeHiveDatabase(db: HiveDatabase): void;
|
|
65
|
+
export declare function upsertPlatformConversation(db: HiveDatabase, input: {
|
|
66
|
+
platform: string;
|
|
67
|
+
externalId: string;
|
|
68
|
+
messages: PlatformConversationMessage[];
|
|
69
|
+
}): PlatformConversationRecord;
|
|
70
|
+
export declare function getPlatformConversation(db: HiveDatabase, platform: string, externalId: string): PlatformConversationRecord | null;
|
|
54
71
|
export declare function runMigrations(db: HiveDatabase): void;
|
|
55
72
|
export declare function getMetaValue(db: HiveDatabase, key: string): string | null;
|
|
56
73
|
export declare function setMetaValue(db: HiveDatabase, key: string, value: string): void;
|
|
@@ -77,4 +94,15 @@ export declare function insertEpisode(db: HiveDatabase, content: string): Episod
|
|
|
77
94
|
export declare function listEpisodes(db: HiveDatabase, limit?: number): EpisodeRecord[];
|
|
78
95
|
export declare function findRelevantEpisodes(db: HiveDatabase, query: string, limit?: number): RelevantEpisode[];
|
|
79
96
|
export declare function clearEpisodes(db: HiveDatabase): void;
|
|
97
|
+
export declare function insertTask(db: HiveDatabase, input: InsertTaskInput): TaskRecord;
|
|
98
|
+
export declare function getTaskById(db: HiveDatabase, id: string): TaskRecord | null;
|
|
99
|
+
export declare function listTasks(db: HiveDatabase): TaskRecord[];
|
|
100
|
+
export declare function countTasksByStatus(db: HiveDatabase): Record<TaskStatus, number>;
|
|
101
|
+
export declare function claimNextQueuedTask(db: HiveDatabase): TaskRecord | null;
|
|
102
|
+
export declare function resetRunningTasksToQueued(db: HiveDatabase): number;
|
|
103
|
+
export declare function markTaskRunning(db: HiveDatabase, id: string): void;
|
|
104
|
+
export declare function markTaskDone(db: HiveDatabase, id: string, result: string): void;
|
|
105
|
+
export declare function markTaskFailed(db: HiveDatabase, id: string, error: string): void;
|
|
106
|
+
export declare function cancelTask(db: HiveDatabase, id: string): boolean;
|
|
107
|
+
export declare function clearCompletedTasks(db: HiveDatabase): number;
|
|
80
108
|
//# sourceMappingURL=db.d.ts.map
|
package/dist/storage/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/storage/db.ts"],"names":[],"mappings":"AAIA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,WAAW,
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/storage/db.ts"],"names":[],"mappings":"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"}
|