style: fix lint formatting

This commit is contained in:
Peter Steinberger 2026-01-04 06:09:04 +01:00
parent d9987a65b2
commit 56274eb76e
5 changed files with 78 additions and 46 deletions

View File

@ -125,7 +125,7 @@ describe("sessions tools", () => {
callGatewayMock.mockReset(); callGatewayMock.mockReset();
const calls: Array<{ method?: string; params?: unknown }> = []; const calls: Array<{ method?: string; params?: unknown }> = [];
let agentCallCount = 0; let agentCallCount = 0;
let historyCallCount = 0; let _historyCallCount = 0;
let sendCallCount = 0; let sendCallCount = 0;
let waitRunId: string | undefined; let waitRunId: string | undefined;
let nextHistoryIsWaitReply = false; let nextHistoryIsWaitReply = false;
@ -153,7 +153,7 @@ describe("sessions tools", () => {
return { runId: params?.runId ?? "run-1", status: "ok" }; return { runId: params?.runId ?? "run-1", status: "ok" };
} }
if (request.method === "chat.history") { if (request.method === "chat.history") {
historyCallCount += 1; _historyCallCount += 1;
const text = nextHistoryIsWaitReply ? "done" : "ANNOUNCE_SKIP"; const text = nextHistoryIsWaitReply ? "done" : "ANNOUNCE_SKIP";
nextHistoryIsWaitReply = false; nextHistoryIsWaitReply = false;
return { return {
@ -219,8 +219,9 @@ describe("sessions tools", () => {
(call) => (call) =>
typeof (call.params as { extraSystemPrompt?: string }) typeof (call.params as { extraSystemPrompt?: string })
?.extraSystemPrompt === "string" && ?.extraSystemPrompt === "string" &&
(call.params as { extraSystemPrompt?: string }) (
?.extraSystemPrompt?.includes("Agent-to-agent message context"), call.params as { extraSystemPrompt?: string }
)?.extraSystemPrompt?.includes("Agent-to-agent message context"),
), ),
).toBe(true); ).toBe(true);
expect( expect(
@ -228,8 +229,9 @@ describe("sessions tools", () => {
(call) => (call) =>
typeof (call.params as { extraSystemPrompt?: string }) typeof (call.params as { extraSystemPrompt?: string })
?.extraSystemPrompt === "string" && ?.extraSystemPrompt === "string" &&
(call.params as { extraSystemPrompt?: string }) (
?.extraSystemPrompt?.includes("Agent-to-agent post step"), call.params as { extraSystemPrompt?: string }
)?.extraSystemPrompt?.includes("Agent-to-agent post step"),
), ),
).toBe(true); ).toBe(true);
expect(waitCalls).toHaveLength(3); expect(waitCalls).toHaveLength(3);

View File

@ -2774,7 +2774,9 @@ function buildAgentToAgentPostContext(params: {
? `Requester surface: ${params.requesterSurface}.` ? `Requester surface: ${params.requesterSurface}.`
: undefined, : undefined,
`Target session: ${params.targetSessionKey}.`, `Target session: ${params.targetSessionKey}.`,
params.targetChannel ? `Target surface: ${params.targetChannel}.` : undefined, params.targetChannel
? `Target surface: ${params.targetChannel}.`
: undefined,
`Original request: ${params.originalMessage}`, `Original request: ${params.originalMessage}`,
params.roundOneReply params.roundOneReply
? `Round 1 reply: ${params.roundOneReply}` ? `Round 1 reply: ${params.roundOneReply}`
@ -2840,34 +2842,35 @@ function createSessionsSendTool(opts?: {
extraSystemPrompt: agentMessageContext, extraSystemPrompt: agentMessageContext,
}; };
const resolveAnnounceTarget = async (): Promise<AnnounceTarget | null> => { const resolveAnnounceTarget =
const parsed = resolveAnnounceTargetFromKey(resolvedKey); async (): Promise<AnnounceTarget | null> => {
if (parsed) return parsed; const parsed = resolveAnnounceTargetFromKey(resolvedKey);
try { if (parsed) return parsed;
const list = (await callGateway({ try {
method: "sessions.list", const list = (await callGateway({
params: { method: "sessions.list",
includeGlobal: true, params: {
includeUnknown: true, includeGlobal: true,
limit: 200, includeUnknown: true,
}, limit: 200,
})) as { sessions?: Array<Record<string, unknown>> }; },
const sessions = Array.isArray(list?.sessions) ? list.sessions : []; })) as { sessions?: Array<Record<string, unknown>> };
const match = const sessions = Array.isArray(list?.sessions) ? list.sessions : [];
sessions.find((entry) => entry?.key === resolvedKey) ?? const match =
sessions.find((entry) => entry?.key === displayKey); sessions.find((entry) => entry?.key === resolvedKey) ??
const channel = sessions.find((entry) => entry?.key === displayKey);
typeof match?.lastChannel === "string" const channel =
? match.lastChannel typeof match?.lastChannel === "string"
: undefined; ? match.lastChannel
const to = : undefined;
typeof match?.lastTo === "string" ? match.lastTo : undefined; const to =
if (channel && to) return { channel, to }; typeof match?.lastTo === "string" ? match.lastTo : undefined;
} catch { if (channel && to) return { channel, to };
// ignore; fall through to null } catch {
} // ignore; fall through to null
return null; }
}; return null;
};
const runAgentToAgentPost = async (roundOneReply?: string) => { const runAgentToAgentPost = async (roundOneReply?: string) => {
const announceTarget = await resolveAnnounceTarget(); const announceTarget = await resolveAnnounceTarget();
@ -2917,9 +2920,7 @@ function createSessionsSendTool(opts?: {
params: { sessionKey: resolvedKey, limit: 50 }, params: { sessionKey: resolvedKey, limit: 50 },
})) as { messages?: unknown[] }; })) as { messages?: unknown[] };
const postFiltered = stripToolMessages( const postFiltered = stripToolMessages(
Array.isArray(postHistory?.messages) Array.isArray(postHistory?.messages) ? postHistory.messages : [],
? postHistory.messages
: [],
); );
const postLast = const postLast =
postFiltered.length > 0 postFiltered.length > 0

View File

@ -3,7 +3,7 @@ import { buildWorkspaceSkillStatus } from "../agents/skills-status.js";
import type { ClawdisConfig } from "../config/config.js"; import type { ClawdisConfig } from "../config/config.js";
import type { RuntimeEnv } from "../runtime.js"; import type { RuntimeEnv } from "../runtime.js";
import type { WizardPrompter } from "../wizard/prompts.js"; import type { WizardPrompter } from "../wizard/prompts.js";
import { resolveNodeManagerOptions } from "./onboard-helpers.js"; import { detectBinary, resolveNodeManagerOptions } from "./onboard-helpers.js";
function summarizeInstallFailure(message: string): string | undefined { function summarizeInstallFailure(message: string): string | undefined {
const cleaned = message const cleaned = message
@ -59,6 +59,13 @@ export async function setupSkills(
); );
const blocked = report.skills.filter((s) => s.blockedByAllowlist); const blocked = report.skills.filter((s) => s.blockedByAllowlist);
const needsBrewPrompt =
process.platform !== "win32" &&
report.skills.some((skill) =>
skill.install.some((option) => option.kind === "brew"),
) &&
!(await detectBinary("brew"));
await prompter.note( await prompter.note(
[ [
`Eligible: ${eligible.length}`, `Eligible: ${eligible.length}`,
@ -74,6 +81,29 @@ export async function setupSkills(
}); });
if (!shouldConfigure) return cfg; if (!shouldConfigure) return cfg;
if (needsBrewPrompt) {
await prompter.note(
[
"Many skill dependencies are shipped via Homebrew.",
"Without brew, you'll need to build from source or download releases manually.",
].join("\n"),
"Homebrew recommended",
);
const showBrewInstall = await prompter.confirm({
message: "Show Homebrew install command?",
initialValue: true,
});
if (showBrewInstall) {
await prompter.note(
[
"Run:",
'/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"',
].join("\n"),
"Homebrew install",
);
}
}
const nodeManager = (await prompter.select({ const nodeManager = (await prompter.select({
message: "Preferred node manager for skill installs", message: "Preferred node manager for skill installs",
options: resolveNodeManagerOptions(), options: resolveNodeManagerOptions(),

View File

@ -57,7 +57,10 @@ import { type DiscordProbe, probeDiscord } from "../discord/probe.js";
import { shouldLogVerbose } from "../globals.js"; import { shouldLogVerbose } from "../globals.js";
import { sendMessageIMessage } from "../imessage/index.js"; import { sendMessageIMessage } from "../imessage/index.js";
import { type IMessageProbe, probeIMessage } from "../imessage/probe.js"; import { type IMessageProbe, probeIMessage } from "../imessage/probe.js";
import { onAgentEvent, registerAgentRunContext } from "../infra/agent-events.js"; import {
onAgentEvent,
registerAgentRunContext,
} from "../infra/agent-events.js";
import type { startNodeBridgeServer } from "../infra/bridge/server.js"; import type { startNodeBridgeServer } from "../infra/bridge/server.js";
import { getLastHeartbeatEvent } from "../infra/heartbeat-events.js"; import { getLastHeartbeatEvent } from "../infra/heartbeat-events.js";
import { setHeartbeatsEnabled } from "../infra/heartbeat-runner.js"; import { setHeartbeatsEnabled } from "../infra/heartbeat-runner.js";

View File

@ -214,9 +214,7 @@ describe("gateway server cron", () => {
testState.cronStorePath = undefined; testState.cronStorePath = undefined;
}); });
test( test("enables cron scheduler by default and runs due jobs automatically", async () => {
"enables cron scheduler by default and runs due jobs automatically",
async () => {
const dir = await fs.mkdtemp( const dir = await fs.mkdtemp(
path.join(os.tmpdir(), "clawdis-gw-cron-default-on-"), path.join(os.tmpdir(), "clawdis-gw-cron-default-on-"),
); );
@ -307,7 +305,5 @@ describe("gateway server cron", () => {
testState.cronStorePath = undefined; testState.cronStorePath = undefined;
await fs.rm(dir, { recursive: true, force: true }); await fs.rm(dir, { recursive: true, force: true });
} }
}, }, 15_000);
15_000,
);
}); });