mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-18 06:15:51 +00:00
- /memory-stores: 远程记忆存储管理 - /vault: 密钥保险库管理 - /schedule: 云端定时触发器管理(cron) - /skill-store: 技能商店浏览和安装 - /agents-platform: 远程 agent 调度管理 Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
133 lines
5.1 KiB
TypeScript
133 lines
5.1 KiB
TypeScript
import React from 'react';
|
|
import {
|
|
type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
logEvent,
|
|
} from '../../services/analytics/index.js';
|
|
import { parseCronExpression } from '../../utils/cron.js';
|
|
import type { LocalJSXCommandCall, LocalJSXCommandOnDone } from '../../types/command.js';
|
|
import { createAgent, deleteAgent, listAgents, runAgent } from './agentsApi.js';
|
|
import { AgentsPlatformView } from './AgentsPlatformView.js';
|
|
import { parseAgentsPlatformArgs } from './parseArgs.js';
|
|
import { launchCommand } from '../_shared/launchCommand.js';
|
|
|
|
type AgentsPlatformViewProps = React.ComponentProps<typeof AgentsPlatformView>;
|
|
|
|
async function dispatchAgentsPlatform(
|
|
parsed: ReturnType<typeof parseAgentsPlatformArgs>,
|
|
onDone: LocalJSXCommandOnDone,
|
|
): Promise<AgentsPlatformViewProps | null> {
|
|
if (parsed.action === 'list') {
|
|
logEvent('tengu_agents_platform_list', {});
|
|
try {
|
|
const agents = await listAgents();
|
|
onDone(agents.length === 0 ? 'No scheduled agents found.' : `${agents.length} scheduled agent(s).`, {
|
|
display: 'system',
|
|
});
|
|
return { mode: 'list', agents };
|
|
} catch (err: unknown) {
|
|
const msg = err instanceof Error ? err.message : String(err);
|
|
logEvent('tengu_agents_platform_failed', {
|
|
reason: msg as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
});
|
|
onDone(`Failed to list agents: ${msg}`, { display: 'system' });
|
|
return { mode: 'error', message: msg };
|
|
}
|
|
}
|
|
|
|
if (parsed.action === 'create') {
|
|
const { cron, prompt } = parsed;
|
|
|
|
// Validate cron expression client-side before hitting the network
|
|
const cronFields = parseCronExpression(cron);
|
|
if (!cronFields) {
|
|
const reason = `Invalid cron expression: "${cron}". Expected 5 fields (minute hour day month weekday).`;
|
|
logEvent('tengu_agents_platform_failed', {
|
|
reason: reason as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
});
|
|
onDone(reason, { display: 'system' });
|
|
return null;
|
|
}
|
|
|
|
logEvent('tengu_agents_platform_create', {
|
|
cron: cron as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
});
|
|
try {
|
|
const agent = await createAgent(cron, prompt);
|
|
onDone(`Agent created: ${agent.id}`, { display: 'system' });
|
|
return { mode: 'created', agent };
|
|
} catch (err: unknown) {
|
|
const msg = err instanceof Error ? err.message : String(err);
|
|
logEvent('tengu_agents_platform_failed', {
|
|
reason: msg as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
});
|
|
onDone(`Failed to create agent: ${msg}`, { display: 'system' });
|
|
return { mode: 'error', message: msg };
|
|
}
|
|
}
|
|
|
|
if (parsed.action === 'delete') {
|
|
const { id } = parsed;
|
|
logEvent('tengu_agents_platform_delete', {
|
|
id: id as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
});
|
|
try {
|
|
await deleteAgent(id);
|
|
onDone(`Agent ${id} deleted.`, { display: 'system' });
|
|
return { mode: 'deleted', id };
|
|
} catch (err: unknown) {
|
|
const msg = err instanceof Error ? err.message : String(err);
|
|
logEvent('tengu_agents_platform_failed', {
|
|
reason: msg as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
});
|
|
onDone(`Failed to delete agent ${id}: ${msg}`, { display: 'system' });
|
|
return { mode: 'error', message: msg };
|
|
}
|
|
}
|
|
|
|
// parsed.action === 'run' (all other actions handled above)
|
|
const runParsed = parsed as { action: 'run'; id: string };
|
|
const { id } = runParsed;
|
|
logEvent('tengu_agents_platform_run', {
|
|
id: id as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
});
|
|
try {
|
|
const result = await runAgent(id);
|
|
onDone(`Agent ${id} triggered. Run ID: ${result.run_id}`, { display: 'system' });
|
|
return { mode: 'ran', id, runId: result.run_id };
|
|
} catch (err: unknown) {
|
|
const msg = err instanceof Error ? err.message : String(err);
|
|
logEvent('tengu_agents_platform_failed', {
|
|
reason: msg as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
});
|
|
onDone(`Failed to run agent ${id}: ${msg}`, { display: 'system' });
|
|
return { mode: 'error', message: msg };
|
|
}
|
|
}
|
|
|
|
export const callAgentsPlatform: LocalJSXCommandCall = launchCommand<
|
|
ReturnType<typeof parseAgentsPlatformArgs>,
|
|
AgentsPlatformViewProps
|
|
>({
|
|
commandName: 'agents-platform',
|
|
parseArgs: (raw: string) => {
|
|
logEvent('tengu_agents_platform_started', {
|
|
args: raw as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
});
|
|
const result = parseAgentsPlatformArgs(raw);
|
|
if (result.action === 'invalid') {
|
|
logEvent('tengu_agents_platform_failed', {
|
|
reason: result.reason as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
});
|
|
return {
|
|
action: 'invalid' as const,
|
|
reason: `Usage: /agents-platform list | create CRON PROMPT | delete ID | run ID\n${result.reason}`,
|
|
};
|
|
}
|
|
return result;
|
|
},
|
|
dispatch: dispatchAgentsPlatform,
|
|
View: AgentsPlatformView,
|
|
// Invalid args returns null to match original behaviour (error already surfaced via onDone)
|
|
errorView: (_msg: string) => null,
|
|
});
|