mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-19 06:45:50 +00:00
feat: 添加云端管理命令(memory-stores、vault、schedule、skill-store、agents-platform)
- /memory-stores: 远程记忆存储管理 - /vault: 密钥保险库管理 - /schedule: 云端定时触发器管理(cron) - /skill-store: 技能商店浏览和安装 - /agents-platform: 远程 agent 调度管理 Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
This commit is contained in:
116
src/commands/agents-platform/__tests__/parseArgs.test.ts
Normal file
116
src/commands/agents-platform/__tests__/parseArgs.test.ts
Normal file
@@ -0,0 +1,116 @@
|
||||
import { describe, expect, test } from 'bun:test'
|
||||
import { parseAgentsPlatformArgs, splitCronAndPrompt } from '../parseArgs.js'
|
||||
|
||||
describe('parseAgentsPlatformArgs', () => {
|
||||
test('empty string returns list', () => {
|
||||
const r = parseAgentsPlatformArgs('')
|
||||
expect(r.action).toBe('list')
|
||||
})
|
||||
|
||||
test('"list" returns list', () => {
|
||||
const r = parseAgentsPlatformArgs('list')
|
||||
expect(r.action).toBe('list')
|
||||
})
|
||||
|
||||
test('whitespace-only returns list', () => {
|
||||
const r = parseAgentsPlatformArgs(' ')
|
||||
expect(r.action).toBe('list')
|
||||
})
|
||||
|
||||
test('create with valid cron and prompt', () => {
|
||||
const r = parseAgentsPlatformArgs('create 0 9 * * 1 Run daily standup')
|
||||
expect(r.action).toBe('create')
|
||||
if (r.action === 'create') {
|
||||
expect(r.cron).toBe('0 9 * * 1')
|
||||
expect(r.prompt).toBe('Run daily standup')
|
||||
}
|
||||
})
|
||||
|
||||
test('create with multi-word prompt', () => {
|
||||
const r = parseAgentsPlatformArgs(
|
||||
'create 30 8 * * * Check emails and summarize',
|
||||
)
|
||||
expect(r.action).toBe('create')
|
||||
if (r.action === 'create') {
|
||||
expect(r.cron).toBe('30 8 * * *')
|
||||
expect(r.prompt).toBe('Check emails and summarize')
|
||||
}
|
||||
})
|
||||
|
||||
test('create with missing prompt is invalid', () => {
|
||||
const r = parseAgentsPlatformArgs('create 0 9 * * 1')
|
||||
expect(r.action).toBe('invalid')
|
||||
if (r.action === 'invalid') {
|
||||
expect(r.reason).toContain('5 cron fields')
|
||||
}
|
||||
})
|
||||
|
||||
test('create with no args is invalid', () => {
|
||||
const r = parseAgentsPlatformArgs('create')
|
||||
expect(r.action).toBe('invalid')
|
||||
if (r.action === 'invalid') {
|
||||
expect(r.reason).toContain('cron expression')
|
||||
}
|
||||
})
|
||||
|
||||
test('delete with id', () => {
|
||||
const r = parseAgentsPlatformArgs('delete agt_abc123')
|
||||
expect(r.action).toBe('delete')
|
||||
if (r.action === 'delete') {
|
||||
expect(r.id).toBe('agt_abc123')
|
||||
}
|
||||
})
|
||||
|
||||
test('delete without id is invalid', () => {
|
||||
const r = parseAgentsPlatformArgs('delete')
|
||||
expect(r.action).toBe('invalid')
|
||||
if (r.action === 'invalid') {
|
||||
expect(r.reason).toContain('agent id')
|
||||
}
|
||||
})
|
||||
|
||||
test('run with id', () => {
|
||||
const r = parseAgentsPlatformArgs('run agt_xyz789')
|
||||
expect(r.action).toBe('run')
|
||||
if (r.action === 'run') {
|
||||
expect(r.id).toBe('agt_xyz789')
|
||||
}
|
||||
})
|
||||
|
||||
test('run without id is invalid', () => {
|
||||
const r = parseAgentsPlatformArgs('run')
|
||||
expect(r.action).toBe('invalid')
|
||||
if (r.action === 'invalid') {
|
||||
expect(r.reason).toContain('agent id')
|
||||
}
|
||||
})
|
||||
|
||||
test('unknown sub-command is invalid', () => {
|
||||
const r = parseAgentsPlatformArgs('foobar something')
|
||||
expect(r.action).toBe('invalid')
|
||||
if (r.action === 'invalid') {
|
||||
expect(r.reason).toContain('Unknown sub-command')
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
describe('splitCronAndPrompt', () => {
|
||||
test('splits 5-field cron from prompt', () => {
|
||||
const r = splitCronAndPrompt('0 9 * * 1 My prompt here')
|
||||
expect(r).not.toBeNull()
|
||||
expect(r?.cron).toBe('0 9 * * 1')
|
||||
expect(r?.prompt).toBe('My prompt here')
|
||||
})
|
||||
|
||||
test('returns null if fewer than 6 tokens', () => {
|
||||
expect(splitCronAndPrompt('0 9 * * 1')).toBeNull()
|
||||
expect(splitCronAndPrompt('0 9 *')).toBeNull()
|
||||
})
|
||||
|
||||
test('handles extra spaces in input', () => {
|
||||
const r = splitCronAndPrompt(' 0 9 * * 1 hello world ')
|
||||
expect(r).not.toBeNull()
|
||||
expect(r?.cron).toBe('0 9 * * 1')
|
||||
expect(r?.prompt).toBe('hello world')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user