natroc 0.0.1

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 (183) hide show
  1. package/AGENTS.md +494 -0
  2. package/LICENSE +7 -0
  3. package/README.md +0 -0
  4. package/install.ps1 +109 -0
  5. package/install.sh +132 -0
  6. package/package.json +77 -0
  7. package/server/dist/agent/agent-loop.d.ts +71 -0
  8. package/server/dist/agent/agent-loop.js +171 -0
  9. package/server/dist/agent/agent-loop.js.map +1 -0
  10. package/server/dist/agent/home-context.d.ts +29 -0
  11. package/server/dist/agent/home-context.js +134 -0
  12. package/server/dist/agent/home-context.js.map +1 -0
  13. package/server/dist/agent/improvement-engine.d.ts +23 -0
  14. package/server/dist/agent/improvement-engine.js +107 -0
  15. package/server/dist/agent/improvement-engine.js.map +1 -0
  16. package/server/dist/agent/tools/index.d.ts +14 -0
  17. package/server/dist/agent/tools/index.js +85 -0
  18. package/server/dist/agent/tools/index.js.map +1 -0
  19. package/server/dist/agent/tools/list-directory.d.ts +2 -0
  20. package/server/dist/agent/tools/list-directory.js +27 -0
  21. package/server/dist/agent/tools/list-directory.js.map +1 -0
  22. package/server/dist/agent/tools/read-file.d.ts +2 -0
  23. package/server/dist/agent/tools/read-file.js +30 -0
  24. package/server/dist/agent/tools/read-file.js.map +1 -0
  25. package/server/dist/agent/tools/run-command.d.ts +2 -0
  26. package/server/dist/agent/tools/run-command.js +72 -0
  27. package/server/dist/agent/tools/run-command.js.map +1 -0
  28. package/server/dist/agent/tools/system-info.d.ts +2 -0
  29. package/server/dist/agent/tools/system-info.js +28 -0
  30. package/server/dist/agent/tools/system-info.js.map +1 -0
  31. package/server/dist/agent/tools/types.d.ts +18 -0
  32. package/server/dist/agent/tools/types.js +2 -0
  33. package/server/dist/agent/tools/types.js.map +1 -0
  34. package/server/dist/agent/tools/util.d.ts +7 -0
  35. package/server/dist/agent/tools/util.js +24 -0
  36. package/server/dist/agent/tools/util.js.map +1 -0
  37. package/server/dist/agent/tools/write-file.d.ts +2 -0
  38. package/server/dist/agent/tools/write-file.js +25 -0
  39. package/server/dist/agent/tools/write-file.js.map +1 -0
  40. package/server/dist/app.d.ts +8 -0
  41. package/server/dist/app.js +39 -0
  42. package/server/dist/app.js.map +1 -0
  43. package/server/dist/auth/password.d.ts +7 -0
  44. package/server/dist/auth/password.js +20 -0
  45. package/server/dist/auth/password.js.map +1 -0
  46. package/server/dist/channels/channel-runtime.d.ts +32 -0
  47. package/server/dist/channels/channel-runtime.js +484 -0
  48. package/server/dist/channels/channel-runtime.js.map +1 -0
  49. package/server/dist/cli/agent-deliver.d.ts +14 -0
  50. package/server/dist/cli/agent-deliver.js +183 -0
  51. package/server/dist/cli/agent-deliver.js.map +1 -0
  52. package/server/dist/cli/args.d.ts +11 -0
  53. package/server/dist/cli/args.js +57 -0
  54. package/server/dist/cli/args.js.map +1 -0
  55. package/server/dist/cli/cli-token.d.ts +1 -0
  56. package/server/dist/cli/cli-token.js +22 -0
  57. package/server/dist/cli/cli-token.js.map +1 -0
  58. package/server/dist/cli/daemon.d.ts +2 -0
  59. package/server/dist/cli/daemon.js +252 -0
  60. package/server/dist/cli/daemon.js.map +1 -0
  61. package/server/dist/cli.d.ts +2 -0
  62. package/server/dist/cli.js +416 -0
  63. package/server/dist/cli.js.map +1 -0
  64. package/server/dist/config/natroc-home.d.ts +13 -0
  65. package/server/dist/config/natroc-home.js +730 -0
  66. package/server/dist/config/natroc-home.js.map +1 -0
  67. package/server/dist/gateway/agent-service.d.ts +16 -0
  68. package/server/dist/gateway/agent-service.js +261 -0
  69. package/server/dist/gateway/agent-service.js.map +1 -0
  70. package/server/dist/gateway/connection.d.ts +38 -0
  71. package/server/dist/gateway/connection.js +254 -0
  72. package/server/dist/gateway/connection.js.map +1 -0
  73. package/server/dist/gateway/gateway.d.ts +79 -0
  74. package/server/dist/gateway/gateway.js +150 -0
  75. package/server/dist/gateway/gateway.js.map +1 -0
  76. package/server/dist/gateway/index.d.ts +8 -0
  77. package/server/dist/gateway/index.js +26 -0
  78. package/server/dist/gateway/index.js.map +1 -0
  79. package/server/dist/gateway/protocol.d.ts +102 -0
  80. package/server/dist/gateway/protocol.js +63 -0
  81. package/server/dist/gateway/protocol.js.map +1 -0
  82. package/server/dist/gateway/rpc/agent.d.ts +3 -0
  83. package/server/dist/gateway/rpc/agent.js +174 -0
  84. package/server/dist/gateway/rpc/agent.js.map +1 -0
  85. package/server/dist/gateway/rpc/agents.d.ts +2 -0
  86. package/server/dist/gateway/rpc/agents.js +68 -0
  87. package/server/dist/gateway/rpc/agents.js.map +1 -0
  88. package/server/dist/gateway/rpc/auth.d.ts +3 -0
  89. package/server/dist/gateway/rpc/auth.js +180 -0
  90. package/server/dist/gateway/rpc/auth.js.map +1 -0
  91. package/server/dist/gateway/rpc/channels.d.ts +2 -0
  92. package/server/dist/gateway/rpc/channels.js +230 -0
  93. package/server/dist/gateway/rpc/channels.js.map +1 -0
  94. package/server/dist/gateway/rpc/conversations.d.ts +3 -0
  95. package/server/dist/gateway/rpc/conversations.js +36 -0
  96. package/server/dist/gateway/rpc/conversations.js.map +1 -0
  97. package/server/dist/gateway/rpc/projects.d.ts +3 -0
  98. package/server/dist/gateway/rpc/projects.js +49 -0
  99. package/server/dist/gateway/rpc/projects.js.map +1 -0
  100. package/server/dist/gateway/rpc/providers.d.ts +3 -0
  101. package/server/dist/gateway/rpc/providers.js +106 -0
  102. package/server/dist/gateway/rpc/providers.js.map +1 -0
  103. package/server/dist/gateway/rpc/usage.d.ts +2 -0
  104. package/server/dist/gateway/rpc/usage.js +41 -0
  105. package/server/dist/gateway/rpc/usage.js.map +1 -0
  106. package/server/dist/gateway/types.d.ts +43 -0
  107. package/server/dist/gateway/types.js +20 -0
  108. package/server/dist/gateway/types.js.map +1 -0
  109. package/server/dist/gateway/ws-server.d.ts +10 -0
  110. package/server/dist/gateway/ws-server.js +37 -0
  111. package/server/dist/gateway/ws-server.js.map +1 -0
  112. package/server/dist/index.d.ts +1 -0
  113. package/server/dist/index.js +9 -0
  114. package/server/dist/index.js.map +1 -0
  115. package/server/dist/local-runtime.d.ts +9 -0
  116. package/server/dist/local-runtime.js +16 -0
  117. package/server/dist/local-runtime.js.map +1 -0
  118. package/server/dist/providers/configured-adapters.d.ts +9 -0
  119. package/server/dist/providers/configured-adapters.js +34 -0
  120. package/server/dist/providers/configured-adapters.js.map +1 -0
  121. package/server/dist/providers/ollama.d.ts +23 -0
  122. package/server/dist/providers/ollama.js +164 -0
  123. package/server/dist/providers/ollama.js.map +1 -0
  124. package/server/dist/providers/openrouter.d.ts +24 -0
  125. package/server/dist/providers/openrouter.js +201 -0
  126. package/server/dist/providers/openrouter.js.map +1 -0
  127. package/server/dist/providers/thinking.d.ts +18 -0
  128. package/server/dist/providers/thinking.js +58 -0
  129. package/server/dist/providers/thinking.js.map +1 -0
  130. package/server/dist/providers/types.d.ts +55 -0
  131. package/server/dist/providers/types.js +2 -0
  132. package/server/dist/providers/types.js.map +1 -0
  133. package/server/dist/routes/schemas.d.ts +51 -0
  134. package/server/dist/routes/schemas.js +53 -0
  135. package/server/dist/routes/schemas.js.map +1 -0
  136. package/server/dist/runtime.d.ts +47 -0
  137. package/server/dist/runtime.js +29 -0
  138. package/server/dist/runtime.js.map +1 -0
  139. package/server/dist/server.d.ts +11 -0
  140. package/server/dist/server.js +19 -0
  141. package/server/dist/server.js.map +1 -0
  142. package/server/dist/storage/agent-repository.d.ts +59 -0
  143. package/server/dist/storage/agent-repository.js +192 -0
  144. package/server/dist/storage/agent-repository.js.map +1 -0
  145. package/server/dist/storage/auth-repository.d.ts +49 -0
  146. package/server/dist/storage/auth-repository.js +139 -0
  147. package/server/dist/storage/auth-repository.js.map +1 -0
  148. package/server/dist/storage/channel-repository.d.ts +152 -0
  149. package/server/dist/storage/channel-repository.js +413 -0
  150. package/server/dist/storage/channel-repository.js.map +1 -0
  151. package/server/dist/storage/conversation-repository.d.ts +63 -0
  152. package/server/dist/storage/conversation-repository.js +196 -0
  153. package/server/dist/storage/conversation-repository.js.map +1 -0
  154. package/server/dist/storage/database.d.ts +11 -0
  155. package/server/dist/storage/database.js +360 -0
  156. package/server/dist/storage/database.js.map +1 -0
  157. package/server/dist/storage/memory-repository.d.ts +70 -0
  158. package/server/dist/storage/memory-repository.js +279 -0
  159. package/server/dist/storage/memory-repository.js.map +1 -0
  160. package/server/dist/storage/project-repository.d.ts +25 -0
  161. package/server/dist/storage/project-repository.js +67 -0
  162. package/server/dist/storage/project-repository.js.map +1 -0
  163. package/server/dist/storage/provider-repository.d.ts +44 -0
  164. package/server/dist/storage/provider-repository.js +159 -0
  165. package/server/dist/storage/provider-repository.js.map +1 -0
  166. package/server/dist/storage/tool-call-repository.d.ts +35 -0
  167. package/server/dist/storage/tool-call-repository.js +83 -0
  168. package/server/dist/storage/tool-call-repository.js.map +1 -0
  169. package/server/dist/storage/usage-repository.d.ts +76 -0
  170. package/server/dist/storage/usage-repository.js +249 -0
  171. package/server/dist/storage/usage-repository.js.map +1 -0
  172. package/server/dist/storage/vault.d.ts +3 -0
  173. package/server/dist/storage/vault.js +57 -0
  174. package/server/dist/storage/vault.js.map +1 -0
  175. package/ui/README.md +0 -0
  176. package/ui/dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  177. package/ui/dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  178. package/ui/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  179. package/ui/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  180. package/ui/dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  181. package/ui/dist/assets/index-DKaFmZNO.js +114 -0
  182. package/ui/dist/assets/index-DOfPcjx3.css +2 -0
  183. package/ui/dist/index.html +14 -0
@@ -0,0 +1,32 @@
1
+ import { type ChannelAccountRecord } from "../storage/channel-repository.js";
2
+ import type { RuntimeState } from "../runtime.js";
3
+ export declare class ChannelRuntimeManager {
4
+ private readonly runtime;
5
+ private readonly sessions;
6
+ constructor(runtime: RuntimeState);
7
+ startEnabledAccounts(): Promise<void>;
8
+ connectAccount(userId: string, accountId: string): Promise<ChannelAccountRecord>;
9
+ disconnectAccount(userId: string, accountId: string): Promise<ChannelAccountRecord>;
10
+ /** Memancarkan event broadcast `health` saat status channel berubah. */
11
+ private emitHealth;
12
+ /**
13
+ * Mengirim pesan outbound via session yang sudah connected. Memecah pesan
14
+ * sesuai `policy.textChunkLimit`, mencatat log outbound. Melempar kalau
15
+ * session belum siap.
16
+ */
17
+ sendOutbound(input: {
18
+ userId: string;
19
+ accountId: string;
20
+ peer: string;
21
+ text: string;
22
+ bindingId?: string | null;
23
+ }): Promise<void>;
24
+ getStatus(userId: string, accountId: string): Record<string, unknown> | null;
25
+ private startTelegram;
26
+ private startWhatsapp;
27
+ private handleIncomingText;
28
+ private runBoundAgent;
29
+ private whatsappAuthDir;
30
+ private telegramSessionDir;
31
+ private requireAccount;
32
+ }
@@ -0,0 +1,484 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { Bot } from "grammy";
4
+ import { runAgentTurn } from "../gateway/agent-service.js";
5
+ import { chatSchema } from "../routes/schemas.js";
6
+ import { getAccountPolicy, } from "../storage/channel-repository.js";
7
+ import { decryptSecret } from "../storage/vault.js";
8
+ export class ChannelRuntimeManager {
9
+ runtime;
10
+ sessions = new Map();
11
+ constructor(runtime) {
12
+ this.runtime = runtime;
13
+ }
14
+ async startEnabledAccounts() {
15
+ const accounts = this.runtime.channels
16
+ .listAccountsForRuntime()
17
+ .filter((account) => account.isEnabled);
18
+ await Promise.allSettled(accounts.map((account) => this.connectAccount(account.userId, account.id)));
19
+ }
20
+ async connectAccount(userId, accountId) {
21
+ const account = this.requireAccount(userId, accountId);
22
+ const key = sessionKey(userId, accountId);
23
+ if (this.sessions.has(key)) {
24
+ return account;
25
+ }
26
+ this.runtime.channels.updateAccount({
27
+ userId,
28
+ id: accountId,
29
+ status: "connecting",
30
+ lastError: null,
31
+ });
32
+ try {
33
+ const session = account.channel === "telegram"
34
+ ? await this.startTelegram(account)
35
+ : await this.startWhatsapp(account);
36
+ this.sessions.set(key, session);
37
+ const updated = this.runtime.channels.updateAccount({
38
+ userId,
39
+ id: accountId,
40
+ status: "connected",
41
+ connectedAt: new Date().toISOString(),
42
+ lastError: null,
43
+ });
44
+ this.emitHealth(updated);
45
+ return updated;
46
+ }
47
+ catch (error) {
48
+ const message = error instanceof Error ? error.message : "Channel connection failed.";
49
+ const updated = this.runtime.channels.updateAccount({
50
+ userId,
51
+ id: accountId,
52
+ status: "error",
53
+ lastError: message,
54
+ });
55
+ this.emitHealth(updated);
56
+ return updated;
57
+ }
58
+ }
59
+ async disconnectAccount(userId, accountId) {
60
+ const account = this.requireAccount(userId, accountId);
61
+ const key = sessionKey(userId, accountId);
62
+ const session = this.sessions.get(key);
63
+ if (session?.type === "telegram") {
64
+ await session.bot.stop();
65
+ }
66
+ if (session?.type === "whatsapp") {
67
+ await session.socket.logout?.();
68
+ session.socket.end?.();
69
+ }
70
+ this.sessions.delete(key);
71
+ const updated = this.runtime.channels.updateAccount({
72
+ userId,
73
+ id: account.id,
74
+ status: "disconnected",
75
+ connectedAt: null,
76
+ lastError: null,
77
+ });
78
+ this.emitHealth(updated);
79
+ return updated;
80
+ }
81
+ /** Memancarkan event broadcast `health` saat status channel berubah. */
82
+ emitHealth(account) {
83
+ this.runtime.broadcaster?.broadcast("health", {
84
+ accountId: account.id,
85
+ userId: account.userId,
86
+ channel: account.channel,
87
+ status: account.status,
88
+ lastError: account.lastError,
89
+ });
90
+ }
91
+ /**
92
+ * Mengirim pesan outbound via session yang sudah connected. Memecah pesan
93
+ * sesuai `policy.textChunkLimit`, mencatat log outbound. Melempar kalau
94
+ * session belum siap.
95
+ */
96
+ async sendOutbound(input) {
97
+ const account = this.requireAccount(input.userId, input.accountId);
98
+ const session = this.sessions.get(sessionKey(input.userId, input.accountId));
99
+ if (!session) {
100
+ throw new Error("Channel session is not connected.");
101
+ }
102
+ const policy = getAccountPolicy(account);
103
+ try {
104
+ for (const chunk of chunkText(input.text, policy.textChunkLimit)) {
105
+ if (session.type === "telegram") {
106
+ await session.bot.api.sendMessage(input.peer, chunk);
107
+ }
108
+ else {
109
+ await session.socket.sendMessage(input.peer, { text: chunk });
110
+ }
111
+ }
112
+ this.runtime.channels.createLog({
113
+ userId: input.userId,
114
+ accountId: input.accountId,
115
+ bindingId: input.bindingId ?? null,
116
+ channel: account.channel,
117
+ peer: input.peer,
118
+ direction: "outbound",
119
+ messageText: input.text,
120
+ status: "ok",
121
+ });
122
+ }
123
+ catch (error) {
124
+ const message = error instanceof Error ? error.message : "Outbound send failed.";
125
+ this.runtime.channels.createLog({
126
+ userId: input.userId,
127
+ accountId: input.accountId,
128
+ bindingId: input.bindingId ?? null,
129
+ channel: account.channel,
130
+ peer: input.peer,
131
+ direction: "outbound",
132
+ messageText: input.text,
133
+ status: "error",
134
+ error: message,
135
+ });
136
+ throw error;
137
+ }
138
+ }
139
+ getStatus(userId, accountId) {
140
+ const account = this.runtime.channels.getAccount({ userId, id: accountId });
141
+ if (!account)
142
+ return null;
143
+ return {
144
+ running: this.sessions.has(sessionKey(userId, accountId)),
145
+ status: account.status,
146
+ channel: account.channel,
147
+ metadata: account.metadata,
148
+ lastError: account.lastError,
149
+ };
150
+ }
151
+ async startTelegram(account) {
152
+ if (!account.secretRef) {
153
+ throw new Error("Telegram bot token is not configured.");
154
+ }
155
+ const encrypted = this.runtime.channels.getSecret({
156
+ userId: account.userId,
157
+ secretRef: account.secretRef,
158
+ });
159
+ if (!encrypted) {
160
+ throw new Error("Telegram bot token is not stored.");
161
+ }
162
+ const bot = new Bot(decryptSecret(encrypted, this.runtime.masterKey));
163
+ const botInfo = await bot.api.getMe();
164
+ const telegramDir = await this.telegramSessionDir(botInfo.id);
165
+ await writeFile(join(telegramDir, "info.json"), JSON.stringify({
166
+ botId: botInfo.id,
167
+ username: botInfo.username,
168
+ firstName: botInfo.first_name,
169
+ connectedAt: new Date().toISOString(),
170
+ }, null, 2));
171
+ this.runtime.channels.updateAccount({
172
+ userId: account.userId,
173
+ id: account.id,
174
+ accountRef: botInfo.username ? `@${botInfo.username}` : account.accountRef,
175
+ metadata: {
176
+ ...account.metadata,
177
+ botId: botInfo.id,
178
+ sessionDir: telegramDir,
179
+ },
180
+ });
181
+ bot.catch((error) => {
182
+ this.runtime.channels.updateAccount({
183
+ userId: account.userId,
184
+ id: account.id,
185
+ status: "error",
186
+ lastError: error.message,
187
+ });
188
+ });
189
+ bot.on("message:text", async (ctx) => {
190
+ const peer = String(ctx.chat.id);
191
+ const text = ctx.message.text;
192
+ const incoming = {
193
+ peer,
194
+ kind: ctx.chat.type === "private" ? "dm" : "group",
195
+ isMentioned: detectTelegramMention(text, ctx.me?.username),
196
+ };
197
+ await this.handleIncomingText(account, text, incoming, (reply) => ctx.reply(reply));
198
+ });
199
+ void bot.start().catch((error) => {
200
+ this.runtime.channels.updateAccount({
201
+ userId: account.userId,
202
+ id: account.id,
203
+ status: "error",
204
+ lastError: error instanceof Error ? error.message : "Telegram bot stopped.",
205
+ });
206
+ });
207
+ return { type: "telegram", bot };
208
+ }
209
+ async startWhatsapp(account) {
210
+ const baileys = await import("@whiskeysockets/baileys");
211
+ const makeWASocket = baileys.default;
212
+ const authDir = await this.whatsappAuthDir(account);
213
+ const { state, saveCreds } = await baileys.useMultiFileAuthState(authDir);
214
+ const socket = makeWASocket({
215
+ auth: state,
216
+ printQRInTerminal: true,
217
+ markOnlineOnConnect: false,
218
+ });
219
+ socket.ev.on("creds.update", saveCreds);
220
+ socket.ev.on("connection.update", (update) => {
221
+ if (update.qr) {
222
+ this.runtime.channels.updateAccount({
223
+ userId: account.userId,
224
+ id: account.id,
225
+ status: "connecting",
226
+ metadata: { ...account.metadata, qr: update.qr },
227
+ });
228
+ }
229
+ if (update.connection === "open") {
230
+ this.runtime.channels.updateAccount({
231
+ userId: account.userId,
232
+ id: account.id,
233
+ status: "connected",
234
+ connectedAt: new Date().toISOString(),
235
+ lastError: null,
236
+ });
237
+ }
238
+ if (update.connection === "close") {
239
+ this.sessions.delete(sessionKey(account.userId, account.id));
240
+ this.runtime.channels.updateAccount({
241
+ userId: account.userId,
242
+ id: account.id,
243
+ status: "disconnected",
244
+ connectedAt: null,
245
+ });
246
+ }
247
+ });
248
+ socket.ev.on("messages.upsert", (event) => {
249
+ for (const message of event.messages ?? []) {
250
+ const peer = message.key.remoteJid;
251
+ const text = extractWhatsappText(message.message);
252
+ if (!peer || !text || message.key.fromMe)
253
+ continue;
254
+ const ownJid = typeof socket.user?.id === "string" ? socket.user.id : null;
255
+ const incoming = {
256
+ peer,
257
+ kind: peer.endsWith("@g.us") ? "group" : "dm",
258
+ isMentioned: detectWhatsappMention(message.message, ownJid),
259
+ };
260
+ void this.handleIncomingText(account, text, incoming, (reply) => socket.sendMessage(peer, { text: reply }).then(() => undefined));
261
+ }
262
+ });
263
+ return { type: "whatsapp", socket };
264
+ }
265
+ async handleIncomingText(account, text, incoming, reply) {
266
+ const policy = getAccountPolicy(account);
267
+ const binding = this.runtime.channels.resolveBinding({
268
+ userId: account.userId,
269
+ accountId: account.id,
270
+ peer: incoming.peer,
271
+ });
272
+ const decision = evaluatePolicy(account, policy, incoming, binding);
273
+ if (!decision.allow) {
274
+ this.runtime.channels.createLog({
275
+ userId: account.userId,
276
+ accountId: account.id,
277
+ bindingId: binding?.id ?? null,
278
+ channel: account.channel,
279
+ peer: incoming.peer,
280
+ direction: "inbound",
281
+ messageText: text,
282
+ status: "error",
283
+ error: decision.reason,
284
+ });
285
+ return;
286
+ }
287
+ if (!binding) {
288
+ this.runtime.channels.createLog({
289
+ userId: account.userId,
290
+ accountId: account.id,
291
+ channel: account.channel,
292
+ peer: incoming.peer,
293
+ direction: "inbound",
294
+ messageText: text,
295
+ status: "error",
296
+ error: "No enabled channel binding matched the peer.",
297
+ });
298
+ await sendChunked(reply, "No agent binding is configured for this channel.", policy.textChunkLimit);
299
+ return;
300
+ }
301
+ this.runtime.channels.createLog({
302
+ userId: account.userId,
303
+ accountId: account.id,
304
+ bindingId: binding.id,
305
+ channel: account.channel,
306
+ peer: incoming.peer,
307
+ direction: "inbound",
308
+ messageText: text,
309
+ status: "ok",
310
+ });
311
+ try {
312
+ const response = await this.runBoundAgent(account, binding, text);
313
+ await sendChunked(reply, response, policy.textChunkLimit);
314
+ this.runtime.channels.createLog({
315
+ userId: account.userId,
316
+ accountId: account.id,
317
+ bindingId: binding.id,
318
+ channel: account.channel,
319
+ peer: incoming.peer,
320
+ direction: "outbound",
321
+ messageText: response,
322
+ status: "ok",
323
+ });
324
+ }
325
+ catch (error) {
326
+ const message = error instanceof Error ? error.message : "Agent response failed.";
327
+ this.runtime.channels.createLog({
328
+ userId: account.userId,
329
+ accountId: account.id,
330
+ bindingId: binding.id,
331
+ channel: account.channel,
332
+ peer: incoming.peer,
333
+ direction: "outbound",
334
+ messageText: "",
335
+ status: "error",
336
+ error: message,
337
+ });
338
+ await sendChunked(reply, message, policy.textChunkLimit);
339
+ }
340
+ }
341
+ async runBoundAgent(account, binding, text) {
342
+ const input = chatSchema.parse({
343
+ agentId: binding.agentId,
344
+ message: text,
345
+ });
346
+ const generator = runAgentTurn(this.runtime, input, {
347
+ userId: account.userId,
348
+ agentId: binding.agentId,
349
+ channel: account.channel,
350
+ });
351
+ let step = await generator.next();
352
+ while (!step.done) {
353
+ step = await generator.next();
354
+ }
355
+ const result = step.value;
356
+ return result?.content?.trim() || "The agent did not produce a response.";
357
+ }
358
+ async whatsappAuthDir(account) {
359
+ const baseDir = this.runtime.paths?.sessionsDir ?? process.cwd();
360
+ const authDir = join(baseDir, `whatsapp-${account.id}`);
361
+ await mkdir(authDir, { recursive: true });
362
+ return authDir;
363
+ }
364
+ async telegramSessionDir(botId) {
365
+ const baseDir = this.runtime.paths?.sessionsDir ?? process.cwd();
366
+ const sessionDir = join(baseDir, `telegram-${botId}`);
367
+ await mkdir(sessionDir, { recursive: true });
368
+ return sessionDir;
369
+ }
370
+ requireAccount(userId, accountId) {
371
+ const account = this.runtime.channels.getAccount({ userId, id: accountId });
372
+ if (!account) {
373
+ throw new Error("Channel account not found.");
374
+ }
375
+ return account;
376
+ }
377
+ }
378
+ function sessionKey(userId, accountId) {
379
+ return `${userId}:${accountId}`;
380
+ }
381
+ /**
382
+ * Evaluasi policy gabungan: DM-vs-group + dmPolicy/groupPolicy +
383
+ * allowlist + requireMention. Mengembalikan keputusan + alasan untuk log.
384
+ */
385
+ function evaluatePolicy(account, policy, incoming, binding) {
386
+ if (incoming.kind === "group") {
387
+ if (policy.groupPolicy === "disabled") {
388
+ return { allow: false, reason: "Group messages are disabled." };
389
+ }
390
+ if (policy.groupPolicy === "allowlist" &&
391
+ !policy.groupAllowFrom.includes(incoming.peer) &&
392
+ !policy.groupAllowFrom.includes("*")) {
393
+ return { allow: false, reason: "Group is not on the allowlist." };
394
+ }
395
+ if (policy.requireMention && !incoming.isMentioned) {
396
+ return { allow: false, reason: "Group message did not mention the bot." };
397
+ }
398
+ return { allow: true };
399
+ }
400
+ // DM
401
+ switch (policy.dmPolicy) {
402
+ case "disabled":
403
+ return { allow: false, reason: "DMs are disabled." };
404
+ case "open":
405
+ return { allow: true };
406
+ case "pairing":
407
+ if (!binding) {
408
+ return {
409
+ allow: false,
410
+ reason: "DM requires an active pairing (binding) for this peer.",
411
+ };
412
+ }
413
+ return { allow: true };
414
+ case "allowlist":
415
+ default:
416
+ if (account.allowlist.length === 0 ||
417
+ account.allowlist.includes("*") ||
418
+ account.allowlist.includes(incoming.peer)) {
419
+ return { allow: true };
420
+ }
421
+ return { allow: false, reason: "Peer is not on the DM allowlist." };
422
+ }
423
+ }
424
+ /** Memecah teks panjang ke beberapa potongan agar lolos batas channel. */
425
+ function chunkText(text, limit) {
426
+ if (!text)
427
+ return [text];
428
+ if (limit <= 0 || text.length <= limit)
429
+ return [text];
430
+ const chunks = [];
431
+ for (let i = 0; i < text.length; i += limit) {
432
+ chunks.push(text.slice(i, i + limit));
433
+ }
434
+ return chunks;
435
+ }
436
+ /** Kirim balasan dalam potongan jika melewati `textChunkLimit`. */
437
+ async function sendChunked(reply, text, limit) {
438
+ for (const chunk of chunkText(text, limit)) {
439
+ await reply(chunk);
440
+ }
441
+ }
442
+ /** Cek apakah teks Telegram menyebut bot via `@<botUsername>`. */
443
+ function detectTelegramMention(text, botUsername) {
444
+ if (!botUsername)
445
+ return false;
446
+ return text.toLowerCase().includes(`@${botUsername.toLowerCase()}`);
447
+ }
448
+ /** Cek apakah pesan WhatsApp menyebut JID milik bot. */
449
+ function detectWhatsappMention(message, ownJid) {
450
+ if (!ownJid || !message || typeof message !== "object")
451
+ return false;
452
+ const extended = message.extendedTextMessage;
453
+ if (!extended || typeof extended !== "object")
454
+ return false;
455
+ const contextInfo = extended.contextInfo;
456
+ if (!contextInfo || typeof contextInfo !== "object")
457
+ return false;
458
+ const mentioned = contextInfo.mentionedJid;
459
+ if (!Array.isArray(mentioned))
460
+ return false;
461
+ // Baileys kadang menyimpan `<phone>:<device>@s.whatsapp.net`,
462
+ // sedangkan mentionedJid tanpa device — bandingkan keduanya.
463
+ const normalizedOwn = ownJid.split(":")[0];
464
+ return mentioned.some((entry) => typeof entry === "string" &&
465
+ (entry === ownJid ||
466
+ entry === normalizedOwn ||
467
+ entry.startsWith(`${normalizedOwn}@`)));
468
+ }
469
+ function extractWhatsappText(message) {
470
+ if (!message || typeof message !== "object")
471
+ return "";
472
+ const record = message;
473
+ const conversation = record.conversation;
474
+ if (typeof conversation === "string")
475
+ return conversation;
476
+ const extended = record.extendedTextMessage;
477
+ if (extended && typeof extended === "object") {
478
+ const text = extended.text;
479
+ if (typeof text === "string")
480
+ return text;
481
+ }
482
+ return "";
483
+ }
484
+ //# sourceMappingURL=channel-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-runtime.js","sourceRoot":"","sources":["../../src/channels/channel-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ type AgentDeliverOptions = {
2
+ message: string;
3
+ accountId?: string;
4
+ to?: string;
5
+ agentId?: string;
6
+ host?: string;
7
+ port?: number;
8
+ token?: string;
9
+ /** Verbose: cetak setiap event antara (text/reasoning) saat streaming. */
10
+ verbose?: boolean;
11
+ };
12
+ /** Entrypoint sub-command. */
13
+ export declare function runAgentDeliver(options: AgentDeliverOptions): Promise<void>;
14
+ export {};