feat: add agent targeting + reply overrides
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import {
|
||||
listAgentIds,
|
||||
resolveAgentDir,
|
||||
resolveAgentModelFallbacksOverride,
|
||||
resolveAgentModelPrimary,
|
||||
@@ -53,6 +54,7 @@ import { deliverAgentCommandResult } from "./agent/delivery.js";
|
||||
import { resolveSession } from "./agent/session.js";
|
||||
import { updateSessionStoreAfterAgentRun } from "./agent/session-store.js";
|
||||
import type { AgentCommandOpts } from "./agent/types.js";
|
||||
import { normalizeAgentId } from "../routing/session-key.js";
|
||||
|
||||
export async function agentCommand(
|
||||
opts: AgentCommandOpts,
|
||||
@@ -61,13 +63,31 @@ export async function agentCommand(
|
||||
) {
|
||||
const body = (opts.message ?? "").trim();
|
||||
if (!body) throw new Error("Message (--message) is required");
|
||||
if (!opts.to && !opts.sessionId && !opts.sessionKey) {
|
||||
throw new Error("Pass --to <E.164> or --session-id to choose a session");
|
||||
if (!opts.to && !opts.sessionId && !opts.sessionKey && !opts.agentId) {
|
||||
throw new Error("Pass --to <E.164>, --session-id, or --agent to choose a session");
|
||||
}
|
||||
|
||||
const cfg = loadConfig();
|
||||
const agentIdOverrideRaw = opts.agentId?.trim();
|
||||
const agentIdOverride = agentIdOverrideRaw ? normalizeAgentId(agentIdOverrideRaw) : undefined;
|
||||
if (agentIdOverride) {
|
||||
const knownAgents = listAgentIds(cfg);
|
||||
if (!knownAgents.includes(agentIdOverride)) {
|
||||
throw new Error(
|
||||
`Unknown agent id "${agentIdOverrideRaw}". Use "clawdbot agents list" to see configured agents.`,
|
||||
);
|
||||
}
|
||||
}
|
||||
if (agentIdOverride && opts.sessionKey) {
|
||||
const sessionAgentId = resolveAgentIdFromSessionKey(opts.sessionKey);
|
||||
if (sessionAgentId !== agentIdOverride) {
|
||||
throw new Error(
|
||||
`Agent id "${agentIdOverrideRaw}" does not match session key agent "${sessionAgentId}".`,
|
||||
);
|
||||
}
|
||||
}
|
||||
const agentCfg = cfg.agents?.defaults;
|
||||
const sessionAgentId = resolveAgentIdFromSessionKey(opts.sessionKey?.trim());
|
||||
const sessionAgentId = agentIdOverride ?? resolveAgentIdFromSessionKey(opts.sessionKey?.trim());
|
||||
const workspaceDirRaw = resolveAgentWorkspaceDir(cfg, sessionAgentId);
|
||||
const agentDir = resolveAgentDir(cfg, sessionAgentId);
|
||||
const workspace = await ensureAgentWorkspace({
|
||||
@@ -114,6 +134,7 @@ export async function agentCommand(
|
||||
to: opts.to,
|
||||
sessionId: opts.sessionId,
|
||||
sessionKey: opts.sessionKey,
|
||||
agentId: agentIdOverride,
|
||||
});
|
||||
|
||||
const {
|
||||
@@ -346,7 +367,10 @@ export async function agentCommand(
|
||||
let fallbackProvider = provider;
|
||||
let fallbackModel = model;
|
||||
try {
|
||||
const messageChannel = resolveMessageChannel(opts.messageChannel, opts.channel);
|
||||
const messageChannel = resolveMessageChannel(
|
||||
opts.messageChannel,
|
||||
opts.replyChannel ?? opts.channel,
|
||||
);
|
||||
const fallbackResult = await runWithModelFallback({
|
||||
cfg,
|
||||
provider,
|
||||
|
||||
Reference in New Issue
Block a user