diff --git a/src/channels/linear.ts b/src/channels/linear.ts index ce7a1206e..0b0b90db9 100644 --- a/src/channels/linear.ts +++ b/src/channels/linear.ts @@ -15,8 +15,12 @@ import { registerChannelAdapter } from './channel-registry.js'; registerChannelAdapter('linear', { factory: () => { const env = readEnvFile([ - 'LINEAR_API_KEY', 'LINEAR_CLIENT_ID', 'LINEAR_CLIENT_SECRET', - 'LINEAR_WEBHOOK_SECRET', 'LINEAR_BOT_USERNAME', 'LINEAR_TEAM_KEY', + 'LINEAR_API_KEY', + 'LINEAR_CLIENT_ID', + 'LINEAR_CLIENT_SECRET', + 'LINEAR_WEBHOOK_SECRET', + 'LINEAR_BOT_USERNAME', + 'LINEAR_TEAM_KEY', ]); if (!env.LINEAR_API_KEY && !env.LINEAR_CLIENT_ID) return null; diff --git a/src/channels/wechat.ts b/src/channels/wechat.ts index 80d784422..041600292 100644 --- a/src/channels/wechat.ts +++ b/src/channels/wechat.ts @@ -176,10 +176,12 @@ registerChannelAdapter('wechat', { connected = false; }); - client.start({ - loadSyncBuf, - saveSyncBuf, - }).catch((err) => log.error('WeChat: monitor loop crashed', { err })); + client + .start({ + loadSyncBuf, + saveSyncBuf, + }) + .catch((err) => log.error('WeChat: monitor loop crashed', { err })); connected = true; log.info('WeChat adapter ready', { accountId }); @@ -195,7 +197,11 @@ registerChannelAdapter('wechat', { return connected; }, - async deliver(platformId: string, _threadId: string | null, message: OutboundMessage): Promise { + async deliver( + platformId: string, + _threadId: string | null, + message: OutboundMessage, + ): Promise { if (!client) return undefined; const to = platformId.replace(/^wechat:/, ''); const text = messageText(message); diff --git a/src/db/migrations/010-engage-modes.ts b/src/db/migrations/010-engage-modes.ts index 4bf9798d4..e7bff99a2 100644 --- a/src/db/migrations/010-engage-modes.ts +++ b/src/db/migrations/010-engage-modes.ts @@ -75,7 +75,9 @@ export const migration010: Migration = { `); // Backfill existing rows in JS (parsing JSON per-row is painful in pure SQL). - const rows = db.prepare('SELECT id, trigger_rules, response_scope FROM messaging_group_agents').all() as LegacyRow[]; + const rows = db + .prepare('SELECT id, trigger_rules, response_scope FROM messaging_group_agents') + .all() as LegacyRow[]; const update = db.prepare( `UPDATE messaging_group_agents SET engage_mode = ?, diff --git a/src/modules/approvals/response-handler.ts b/src/modules/approvals/response-handler.ts index bd0c2c5d7..2bbdc9d32 100644 --- a/src/modules/approvals/response-handler.ts +++ b/src/modules/approvals/response-handler.ts @@ -96,7 +96,9 @@ async function handleRegisteredApproval( log.info('Approval handled', { approvalId: approval.approval_id, action: approval.action, userId }); } catch (err) { log.error('Approval handler threw', { approvalId: approval.approval_id, action: approval.action, err }); - notify(`Your ${approval.action} was approved, but applying it failed: ${err instanceof Error ? err.message : String(err)}.`); + notify( + `Your ${approval.action} was approved, but applying it failed: ${err instanceof Error ? err.message : String(err)}.`, + ); } deletePendingApproval(approval.approval_id); diff --git a/src/modules/index.ts b/src/modules/index.ts index 2df4477af..022850984 100644 --- a/src/modules/index.ts +++ b/src/modules/index.ts @@ -22,4 +22,3 @@ import './scheduling/index.js'; import './permissions/index.js'; import './agent-to-agent/index.js'; import './self-mod/index.js'; - diff --git a/src/modules/interactive/index.ts b/src/modules/interactive/index.ts index 5a3b8afc1..324adbe7e 100644 --- a/src/modules/interactive/index.ts +++ b/src/modules/interactive/index.ts @@ -46,7 +46,11 @@ async function handleInteractiveResponse(payload: ResponsePayload): Promise { await new Promise((r) => setTimeout(r, 10)); const { getDb } = await import('../../db/connection.js'); - const pending = getDb() - .prepare('SELECT messaging_group_id FROM pending_channel_approvals') - .get() as { messaging_group_id: string }; + const pending = getDb().prepare('SELECT messaging_group_id FROM pending_channel_approvals').get() as { + messaging_group_id: string; + }; expect(pending).toBeDefined(); // Owner clicks approve. @@ -240,9 +240,8 @@ describe('unknown-channel registration flow', () => { expect(member).toBeDefined(); // Pending row cleared and container woken via replay. - const stillPending = ( - getDb().prepare('SELECT COUNT(*) AS c FROM pending_channel_approvals').get() as { c: number } - ).c; + const stillPending = (getDb().prepare('SELECT COUNT(*) AS c FROM pending_channel_approvals').get() as { c: number }) + .c; expect(stillPending).toBe(0); expect(wakeContainer).toHaveBeenCalled(); }); @@ -255,9 +254,9 @@ describe('unknown-channel registration flow', () => { await new Promise((r) => setTimeout(r, 10)); const { getDb } = await import('../../db/connection.js'); - const pending = getDb() - .prepare('SELECT messaging_group_id FROM pending_channel_approvals') - .get() as { messaging_group_id: string }; + const pending = getDb().prepare('SELECT messaging_group_id FROM pending_channel_approvals').get() as { + messaging_group_id: string; + }; for (const handler of getResponseHandlers()) { const claimed = await handler({ @@ -285,9 +284,9 @@ describe('unknown-channel registration flow', () => { await routeInbound(groupMention('chat-deny')); await new Promise((r) => setTimeout(r, 10)); const { getDb } = await import('../../db/connection.js'); - const pending = getDb() - .prepare('SELECT messaging_group_id FROM pending_channel_approvals') - .get() as { messaging_group_id: string }; + const pending = getDb().prepare('SELECT messaging_group_id FROM pending_channel_approvals').get() as { + messaging_group_id: string; + }; for (const handler of getResponseHandlers()) { const claimed = await handler({ @@ -317,9 +316,8 @@ describe('unknown-channel registration flow', () => { await routeInbound(groupMention('chat-deny', '@bot please')); await new Promise((r) => setTimeout(r, 10)); expect(deliverMock).not.toHaveBeenCalled(); - const stillPending = ( - getDb().prepare('SELECT COUNT(*) AS c FROM pending_channel_approvals').get() as { c: number } - ).c; + const stillPending = (getDb().prepare('SELECT COUNT(*) AS c FROM pending_channel_approvals').get() as { c: number }) + .c; expect(stillPending).toBe(0); }); @@ -330,9 +328,9 @@ describe('unknown-channel registration flow', () => { await routeInbound(groupMention('chat-unauth')); await new Promise((r) => setTimeout(r, 10)); const { getDb } = await import('../../db/connection.js'); - const pending = getDb() - .prepare('SELECT messaging_group_id FROM pending_channel_approvals') - .get() as { messaging_group_id: string }; + const pending = getDb().prepare('SELECT messaging_group_id FROM pending_channel_approvals').get() as { + messaging_group_id: string; + }; for (const handler of getResponseHandlers()) { const claimed = await handler({ @@ -353,9 +351,8 @@ describe('unknown-channel registration flow', () => { .get(pending.messaging_group_id) as { c: number } ).c; expect(mgaCount).toBe(0); - const stillPending = ( - getDb().prepare('SELECT COUNT(*) AS c FROM pending_channel_approvals').get() as { c: number } - ).c; + const stillPending = (getDb().prepare('SELECT COUNT(*) AS c FROM pending_channel_approvals').get() as { c: number }) + .c; expect(stillPending).toBe(1); }); }); diff --git a/src/modules/permissions/db/pending-sender-approvals.ts b/src/modules/permissions/db/pending-sender-approvals.ts index 9f7e3a4c8..77a5699af 100644 --- a/src/modules/permissions/db/pending-sender-approvals.ts +++ b/src/modules/permissions/db/pending-sender-approvals.ts @@ -37,19 +37,14 @@ export function createPendingSenderApproval(row: PendingSenderApproval): void { } export function getPendingSenderApproval(id: string): PendingSenderApproval | undefined { - return getDb() - .prepare('SELECT * FROM pending_sender_approvals WHERE id = ?') - .get(id) as PendingSenderApproval | undefined; + return getDb().prepare('SELECT * FROM pending_sender_approvals WHERE id = ?').get(id) as + | PendingSenderApproval + | undefined; } -export function hasInFlightSenderApproval( - messagingGroupId: string, - senderIdentity: string, -): boolean { +export function hasInFlightSenderApproval(messagingGroupId: string, senderIdentity: string): boolean { const row = getDb() - .prepare( - 'SELECT 1 AS x FROM pending_sender_approvals WHERE messaging_group_id = ? AND sender_identity = ?', - ) + .prepare('SELECT 1 AS x FROM pending_sender_approvals WHERE messaging_group_id = ? AND sender_identity = ?') .get(messagingGroupId, senderIdentity) as { x: number } | undefined; return row !== undefined; } diff --git a/src/modules/scheduling/recurrence.test.ts b/src/modules/scheduling/recurrence.test.ts index a70d6c8b2..358e6b4f2 100644 --- a/src/modules/scheduling/recurrence.test.ts +++ b/src/modules/scheduling/recurrence.test.ts @@ -59,9 +59,7 @@ describe('handleRecurrence', () => { await handleRecurrence(db, fakeSession()); const rows = db - .prepare( - `SELECT id, status, process_after, recurrence, series_id FROM messages_in ORDER BY seq`, - ) + .prepare(`SELECT id, status, process_after, recurrence, series_id FROM messages_in ORDER BY seq`) .all() as Array<{ id: string; status: string; diff --git a/src/modules/self-mod/apply.ts b/src/modules/self-mod/apply.ts index da33fd0d0..1a3daa893 100644 --- a/src/modules/self-mod/apply.ts +++ b/src/modules/self-mod/apply.ts @@ -24,7 +24,10 @@ export const applyInstallPackages: ApprovalHandler = async ({ session, payload, if (payload.npm) cfg.packages.npm.push(...(payload.npm as string[])); }); - const pkgs = [...((payload.apt as string[] | undefined) || []), ...((payload.npm as string[] | undefined) || [])].join(', '); + const pkgs = [ + ...((payload.apt as string[] | undefined) || []), + ...((payload.npm as string[] | undefined) || []), + ].join(', '); log.info('Package install approved', { agentGroupId: session.agent_group_id, userId }); try { await buildAgentGroupImage(session.agent_group_id);