asyncwf 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -66
- package/dist/commands/agent.d.ts +2 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +79 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/init.d.ts +7 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +65 -19
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/taskmgr.d.ts +1 -0
- package/dist/commands/taskmgr.d.ts.map +1 -1
- package/dist/commands/taskmgr.js +17 -3
- package/dist/commands/taskmgr.js.map +1 -1
- package/dist/index.js +15 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/agent.d.ts +7 -2
- package/dist/lib/agent.d.ts.map +1 -1
- package/dist/lib/agent.js +30 -9
- package/dist/lib/agent.js.map +1 -1
- package/dist/lib/templates.d.ts +5 -1
- package/dist/lib/templates.d.ts.map +1 -1
- package/dist/lib/templates.js +135 -6
- package/dist/lib/templates.js.map +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# AsyncWF
|
|
2
2
|
|
|
3
|
-
**Model-Driven Parallel Agent Workflow CLI
|
|
3
|
+
**Model-Driven Parallel Agent Workflow CLI**
|
|
4
4
|
|
|
5
|
-
AsyncWF empowers
|
|
5
|
+
AsyncWF empowers AI coding assistants (Claude Code, Codex, Gemini) with asynchronous multitasking capabilities. Instead of wrapping the LLM in a rigid control loop, AsyncWF injects a "Parallel Workflow Protocol" directly into the model's context.
|
|
6
6
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
9
|
+
- 🤖 **Multi-Agent Support** - Claude, Codex, Gemini working together
|
|
9
10
|
- 🚀 **Parallel Task Dispatch** - Spawn multiple sub-agents concurrently
|
|
10
11
|
- 📚 **Skills System** - Global reusable action templates
|
|
11
12
|
- 🧠 **Knowledge Base** - Model-driven learning and context persistence
|
|
12
|
-
- 🔗 **Project Linking** - Connect specs to global knowledge base
|
|
13
13
|
|
|
14
14
|
## Installation
|
|
15
15
|
|
|
@@ -17,95 +17,78 @@ AsyncWF empowers claude-code with asynchronous multitasking capabilities through
|
|
|
17
17
|
npm install -g asyncwf
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
Or from source:
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
git clone https://github.com/yourname/asyncwf
|
|
24
|
-
cd asyncwf
|
|
25
|
-
npm install
|
|
26
|
-
npm run build
|
|
27
|
-
npm link
|
|
28
|
-
```
|
|
29
|
-
|
|
30
20
|
## Quick Start
|
|
31
21
|
|
|
32
22
|
```bash
|
|
33
|
-
# Initialize
|
|
23
|
+
# Initialize for Claude (default)
|
|
34
24
|
asyncwf init
|
|
35
25
|
|
|
36
|
-
#
|
|
37
|
-
asyncwf
|
|
38
|
-
|
|
39
|
-
# Dispatch parallel tasks
|
|
40
|
-
asyncwf taskmgr dispatch --job api --prompt "Write a REST API handler"
|
|
41
|
-
asyncwf taskmgr dispatch --job tests --prompt "Write unit tests"
|
|
26
|
+
# Initialize for multiple agents
|
|
27
|
+
asyncwf init -c -g -x # Claude + Gemini + Codex
|
|
42
28
|
|
|
43
|
-
#
|
|
44
|
-
asyncwf taskmgr
|
|
29
|
+
# Multi-agent parallel workflow
|
|
30
|
+
asyncwf taskmgr dispatch --job frontend --agent gemini --prompt "Create React UI..."
|
|
31
|
+
asyncwf taskmgr dispatch --job backend --agent claude --prompt "Build REST API..."
|
|
32
|
+
asyncwf taskmgr dispatch --job fullstack --agent codex --prompt "Integrate..."
|
|
45
33
|
|
|
46
|
-
#
|
|
47
|
-
asyncwf taskmgr
|
|
34
|
+
# Wait and fetch
|
|
35
|
+
asyncwf taskmgr wait --jobs frontend,backend,fullstack
|
|
36
|
+
asyncwf taskmgr fetch --job frontend
|
|
48
37
|
```
|
|
49
38
|
|
|
50
39
|
## Commands
|
|
51
40
|
|
|
52
|
-
###
|
|
41
|
+
### Init Options
|
|
53
42
|
|
|
54
|
-
|
|
|
55
|
-
|
|
56
|
-
|
|
|
57
|
-
|
|
|
43
|
+
| Flag | Description |
|
|
44
|
+
|------|-------------|
|
|
45
|
+
| `-c, --claude` | Configure for Claude Code (default) |
|
|
46
|
+
| `-g, --gemini` | Configure for Gemini CLI |
|
|
47
|
+
| `-x, --codex` | Configure for OpenAI Codex |
|
|
58
48
|
|
|
59
49
|
### Task Manager
|
|
60
50
|
|
|
61
51
|
| Command | Description |
|
|
62
52
|
|---------|-------------|
|
|
63
|
-
| `
|
|
64
|
-
| `
|
|
65
|
-
| `
|
|
66
|
-
| `
|
|
67
|
-
| `
|
|
53
|
+
| `dispatch --job <id> --agent <type> --prompt "<text>"` | Spawn sub-agent |
|
|
54
|
+
| `list [--status <status>]` | List tasks |
|
|
55
|
+
| `wait --jobs <ids>` | Wait for completion |
|
|
56
|
+
| `fetch --job <id>` | Get output |
|
|
57
|
+
| `kill --job <id>` | Terminate |
|
|
68
58
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
| Command | Description |
|
|
72
|
-
|---------|-------------|
|
|
73
|
-
| `asyncwf skill list` | List available skills |
|
|
74
|
-
| `asyncwf skill show <name>` | Display skill content |
|
|
75
|
-
| `asyncwf skill add <name> --content "<md>"` | Add/update skill |
|
|
76
|
-
| `asyncwf skill use <name>` | Output for prompt injection |
|
|
77
|
-
| `asyncwf skill delete <name>` | Remove skill |
|
|
59
|
+
**Agent types:** `claude`, `codex`, `gemini`
|
|
78
60
|
|
|
79
|
-
### Knowledge Base
|
|
61
|
+
### Skills & Knowledge Base
|
|
80
62
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
| `asyncwf kb delete <topic>` | Remove entry |
|
|
63
|
+
```bash
|
|
64
|
+
asyncwf skill list # List skills
|
|
65
|
+
asyncwf skill add <name> --content "..." # Add skill
|
|
66
|
+
asyncwf kb learn --topic <n> --content "..." # Learn
|
|
67
|
+
asyncwf kb search <query> # Search
|
|
68
|
+
```
|
|
88
69
|
|
|
89
|
-
##
|
|
70
|
+
## Multi-Agent Workflow Example
|
|
90
71
|
|
|
91
72
|
```
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
.asyncwf
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
└── logs/
|
|
73
|
+
User: "Build a login system with React frontend and Rust backend"
|
|
74
|
+
|
|
75
|
+
Claude (Controller):
|
|
76
|
+
1. asyncwf taskmgr dispatch --job ui --agent gemini --prompt "React login form..."
|
|
77
|
+
2. asyncwf taskmgr dispatch --job api --agent claude --prompt "Rust Actix handler..."
|
|
78
|
+
3. asyncwf taskmgr wait --jobs ui,api
|
|
79
|
+
4. asyncwf taskmgr fetch --job ui
|
|
80
|
+
5. asyncwf taskmgr fetch --job api
|
|
101
81
|
```
|
|
102
82
|
|
|
103
|
-
##
|
|
83
|
+
## Directory Structure
|
|
104
84
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
85
|
+
```
|
|
86
|
+
~/.ckb/ # Global KB (skills, knowledge, projects)
|
|
87
|
+
.asyncwf/ # Local state (config, tasks, logs)
|
|
88
|
+
claude.md # Claude protocol
|
|
89
|
+
GEMINI.md # Gemini protocol (if -g)
|
|
90
|
+
AGENTS.md # Codex protocol (if -x)
|
|
91
|
+
```
|
|
109
92
|
|
|
110
93
|
## License
|
|
111
94
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AA4CA,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAShE"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { spawn } from 'child_process';
|
|
3
|
+
async function checkAgentAvailable(command) {
|
|
4
|
+
return new Promise((resolve) => {
|
|
5
|
+
const child = spawn(command, ['--version'], {
|
|
6
|
+
shell: true,
|
|
7
|
+
timeout: 5000,
|
|
8
|
+
});
|
|
9
|
+
let output = '';
|
|
10
|
+
child.stdout?.on('data', (data) => {
|
|
11
|
+
output += data.toString();
|
|
12
|
+
});
|
|
13
|
+
child.on('error', () => {
|
|
14
|
+
resolve({ available: false });
|
|
15
|
+
});
|
|
16
|
+
child.on('close', (code) => {
|
|
17
|
+
if (code === 0) {
|
|
18
|
+
const version = output.trim().split('\n')[0];
|
|
19
|
+
resolve({ available: true, version });
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
resolve({ available: false });
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
// Timeout fallback
|
|
26
|
+
setTimeout(() => {
|
|
27
|
+
child.kill();
|
|
28
|
+
resolve({ available: false });
|
|
29
|
+
}, 5000);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
export async function agentCommand(action) {
|
|
33
|
+
switch (action) {
|
|
34
|
+
case 'status':
|
|
35
|
+
await handleStatus();
|
|
36
|
+
break;
|
|
37
|
+
default:
|
|
38
|
+
console.log(chalk.red(`Unknown action: ${action}`));
|
|
39
|
+
console.log(chalk.gray('Available: status'));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async function handleStatus() {
|
|
43
|
+
console.log(chalk.cyan('🤖 Checking agent availability...\n'));
|
|
44
|
+
const agents = [
|
|
45
|
+
{ name: 'claude', command: 'claude', description: 'Backend, system design, complex logic' },
|
|
46
|
+
{ name: 'codex', command: 'codex', description: 'Full-stack, rapid prototyping' },
|
|
47
|
+
{ name: 'gemini', command: 'gemini', description: 'Frontend, UI/UX, documentation' },
|
|
48
|
+
];
|
|
49
|
+
const results = [];
|
|
50
|
+
for (const agent of agents) {
|
|
51
|
+
const { available, version } = await checkAgentAvailable(agent.command);
|
|
52
|
+
results.push({
|
|
53
|
+
name: agent.name,
|
|
54
|
+
command: agent.command,
|
|
55
|
+
available,
|
|
56
|
+
version,
|
|
57
|
+
});
|
|
58
|
+
const statusIcon = available ? chalk.green('✓') : chalk.red('✗');
|
|
59
|
+
const statusText = available ? chalk.green('available') : chalk.gray('not found');
|
|
60
|
+
const versionText = version ? chalk.gray(` (${version})`) : '';
|
|
61
|
+
console.log(`${statusIcon} ${chalk.bold(agent.name)}: ${statusText}${versionText}`);
|
|
62
|
+
console.log(chalk.gray(` ${agent.description}`));
|
|
63
|
+
console.log();
|
|
64
|
+
}
|
|
65
|
+
// Summary
|
|
66
|
+
const availableCount = results.filter(r => r.available).length;
|
|
67
|
+
console.log(chalk.cyan('---'));
|
|
68
|
+
console.log(`Available agents: ${availableCount}/${agents.length}`);
|
|
69
|
+
if (availableCount === 0) {
|
|
70
|
+
console.log(chalk.yellow('\n⚠ No agents found. Install at least one:'));
|
|
71
|
+
console.log(chalk.gray(' • Claude: npm install -g @anthropic-ai/claude-code'));
|
|
72
|
+
console.log(chalk.gray(' • Codex: npm install -g @openai/codex'));
|
|
73
|
+
console.log(chalk.gray(' • Gemini: npm install -g @anthropic-ai/gemini-cli'));
|
|
74
|
+
}
|
|
75
|
+
// JSON output for programmatic use
|
|
76
|
+
console.log(chalk.gray('\n--- JSON ---'));
|
|
77
|
+
console.log(JSON.stringify(results, null, 2));
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
interface InitOptions {
|
|
2
|
+
claude?: boolean;
|
|
3
|
+
gemini?: boolean;
|
|
4
|
+
codex?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function initCommand(options?: InitOptions): Promise<void>;
|
|
7
|
+
export {};
|
|
2
8
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AASA,UAAU,WAAW;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiI1E"}
|
package/dist/commands/init.js
CHANGED
|
@@ -2,12 +2,28 @@ import { existsSync, mkdirSync, writeFileSync } from 'fs';
|
|
|
2
2
|
import { join } from 'path';
|
|
3
3
|
import { homedir } from 'os';
|
|
4
4
|
import chalk from 'chalk';
|
|
5
|
-
import { generateClaudeMD } from '../lib/templates.js';
|
|
5
|
+
import { generateClaudeMD, generateGeminiMD, generateCodexMD } from '../lib/templates.js';
|
|
6
6
|
import { ensureSkillsDir } from '../lib/skills.js';
|
|
7
7
|
import { ensureKnowledgeDir } from '../lib/knowledge.js';
|
|
8
|
-
export async function initCommand() {
|
|
8
|
+
export async function initCommand(options = {}) {
|
|
9
9
|
const cwd = process.cwd();
|
|
10
|
+
// Determine default agent from flags
|
|
11
|
+
let defaultAgent = 'claude';
|
|
12
|
+
const agents = [];
|
|
13
|
+
if (options.claude)
|
|
14
|
+
agents.push('claude');
|
|
15
|
+
if (options.gemini)
|
|
16
|
+
agents.push('gemini');
|
|
17
|
+
if (options.codex)
|
|
18
|
+
agents.push('codex');
|
|
19
|
+
// If no flags, default to claude
|
|
20
|
+
if (agents.length === 0) {
|
|
21
|
+
agents.push('claude');
|
|
22
|
+
}
|
|
23
|
+
defaultAgent = agents[0];
|
|
10
24
|
console.log(chalk.cyan('🚀 Initializing AsyncWF...\n'));
|
|
25
|
+
console.log(chalk.gray(` Default agent: ${defaultAgent}`));
|
|
26
|
+
console.log(chalk.gray(` Configured agents: ${agents.join(', ')}\n`));
|
|
11
27
|
// 1. Ensure global ~/.ckb exists
|
|
12
28
|
const ckbDir = join(homedir(), '.ckb');
|
|
13
29
|
if (!existsSync(ckbDir)) {
|
|
@@ -36,16 +52,15 @@ export async function initCommand() {
|
|
|
36
52
|
else {
|
|
37
53
|
console.log(chalk.gray('• .asyncwf/ exists'));
|
|
38
54
|
}
|
|
39
|
-
// Create config.json
|
|
55
|
+
// Create config.json with agent configuration
|
|
40
56
|
const configPath = join(asyncwfDir, 'config.json');
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
57
|
+
writeFileSync(configPath, JSON.stringify({
|
|
58
|
+
version: '1.0.0',
|
|
59
|
+
defaultAgent: defaultAgent,
|
|
60
|
+
configuredAgents: agents,
|
|
61
|
+
ckbPath: ckbDir,
|
|
62
|
+
}, null, 2));
|
|
63
|
+
console.log(chalk.green('✓ Created .asyncwf/config.json'));
|
|
49
64
|
// Create tasks.json
|
|
50
65
|
const tasksPath = join(asyncwfDir, 'tasks.json');
|
|
51
66
|
if (!existsSync(tasksPath)) {
|
|
@@ -58,15 +73,42 @@ export async function initCommand() {
|
|
|
58
73
|
mkdirSync(logsDir, { recursive: true });
|
|
59
74
|
console.log(chalk.green('✓ Created .asyncwf/logs/'));
|
|
60
75
|
}
|
|
61
|
-
// 3. Generate
|
|
62
|
-
|
|
63
|
-
if (
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
76
|
+
// 3. Generate agent-specific config files
|
|
77
|
+
// Always generate claude.md for claude (or as default)
|
|
78
|
+
if (agents.includes('claude') || defaultAgent === 'claude') {
|
|
79
|
+
const claudeMdPath = join(cwd, 'claude.md');
|
|
80
|
+
if (!existsSync(claudeMdPath)) {
|
|
81
|
+
const content = generateClaudeMD();
|
|
82
|
+
writeFileSync(claudeMdPath, content);
|
|
83
|
+
console.log(chalk.green('✓ Generated claude.md'));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
console.log(chalk.yellow('⚠ claude.md already exists (skipped)'));
|
|
87
|
+
}
|
|
67
88
|
}
|
|
68
|
-
|
|
69
|
-
|
|
89
|
+
// Generate GEMINI.md for gemini-cli
|
|
90
|
+
if (agents.includes('gemini')) {
|
|
91
|
+
const geminiMdPath = join(cwd, 'GEMINI.md');
|
|
92
|
+
if (!existsSync(geminiMdPath)) {
|
|
93
|
+
const content = generateGeminiMD();
|
|
94
|
+
writeFileSync(geminiMdPath, content);
|
|
95
|
+
console.log(chalk.green('✓ Generated GEMINI.md'));
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
console.log(chalk.yellow('⚠ GEMINI.md already exists (skipped)'));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Generate AGENTS.md for codex
|
|
102
|
+
if (agents.includes('codex')) {
|
|
103
|
+
const codexMdPath = join(cwd, 'AGENTS.md');
|
|
104
|
+
if (!existsSync(codexMdPath)) {
|
|
105
|
+
const content = generateCodexMD();
|
|
106
|
+
writeFileSync(codexMdPath, content);
|
|
107
|
+
console.log(chalk.green('✓ Generated AGENTS.md (for Codex)'));
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
console.log(chalk.yellow('⚠ AGENTS.md already exists (skipped)'));
|
|
111
|
+
}
|
|
70
112
|
}
|
|
71
113
|
// 4. Create specs directory if missing
|
|
72
114
|
const specsDir = join(cwd, 'specs');
|
|
@@ -79,5 +121,9 @@ export async function initCommand() {
|
|
|
79
121
|
console.log(chalk.gray(' 1. Add your specs to specs/'));
|
|
80
122
|
console.log(chalk.gray(' 2. Run `asyncwf link` to connect to global KB'));
|
|
81
123
|
console.log(chalk.gray(' 3. Start using taskmgr for parallel workflows'));
|
|
124
|
+
console.log(chalk.gray('\nExample multi-agent dispatch:'));
|
|
125
|
+
console.log(chalk.gray(' asyncwf taskmgr dispatch --job frontend --agent gemini --prompt "..."'));
|
|
126
|
+
console.log(chalk.gray(' asyncwf taskmgr dispatch --job backend --agent claude --prompt "..."'));
|
|
127
|
+
console.log(chalk.gray(' asyncwf taskmgr dispatch --job fullstack --agent codex --prompt "..."'));
|
|
82
128
|
}
|
|
83
129
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taskmgr.d.ts","sourceRoot":"","sources":["../../src/commands/taskmgr.ts"],"names":[],"mappings":"AAWA,UAAU,cAAc;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,cAAc,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,cAAc,GACxB,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|
|
1
|
+
{"version":3,"file":"taskmgr.d.ts","sourceRoot":"","sources":["../../src/commands/taskmgr.ts"],"names":[],"mappings":"AAWA,UAAU,cAAc;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,cAAc,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,cAAc,GACxB,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|
package/dist/commands/taskmgr.js
CHANGED
|
@@ -24,11 +24,21 @@ export async function taskmgrCommand(action, options) {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
async function handleDispatch(options) {
|
|
27
|
-
const { job, prompt, skill } = options;
|
|
27
|
+
const { job, prompt, skill, agent } = options;
|
|
28
28
|
if (!job || !prompt) {
|
|
29
29
|
console.log(chalk.red('Error: --job and --prompt are required'));
|
|
30
30
|
return;
|
|
31
31
|
}
|
|
32
|
+
// Validate agent type if provided
|
|
33
|
+
const validAgents = ['claude', 'codex', 'gemini'];
|
|
34
|
+
let agentType;
|
|
35
|
+
if (agent) {
|
|
36
|
+
if (!validAgents.includes(agent)) {
|
|
37
|
+
console.log(chalk.red(`Error: Invalid agent "${agent}". Valid options: ${validAgents.join(', ')}`));
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
agentType = agent;
|
|
41
|
+
}
|
|
32
42
|
// Check if job already exists
|
|
33
43
|
const existing = await getTask(job);
|
|
34
44
|
if (existing) {
|
|
@@ -36,13 +46,17 @@ async function handleDispatch(options) {
|
|
|
36
46
|
return;
|
|
37
47
|
}
|
|
38
48
|
console.log(chalk.cyan(`🚀 Dispatching job: ${job}`));
|
|
49
|
+
if (agentType) {
|
|
50
|
+
console.log(chalk.gray(` Agent: ${agentType}`));
|
|
51
|
+
}
|
|
39
52
|
if (skill) {
|
|
40
|
-
console.log(chalk.gray(`
|
|
53
|
+
console.log(chalk.gray(` Skill: ${skill}`));
|
|
41
54
|
}
|
|
42
|
-
const task = await dispatchAgent(job, prompt, skill);
|
|
55
|
+
const task = await dispatchAgent(job, prompt, skill, agentType);
|
|
43
56
|
console.log(chalk.green(`✓ Job dispatched`));
|
|
44
57
|
console.log(JSON.stringify({
|
|
45
58
|
id: task.id,
|
|
59
|
+
agent: task.agent,
|
|
46
60
|
status: task.status,
|
|
47
61
|
pid: task.pid,
|
|
48
62
|
skill: task.skill,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taskmgr.js","sourceRoot":"","sources":["../../src/commands/taskmgr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACH,WAAW,EACX,gBAAgB,EAChB,OAAO,EACP,UAAU,EACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"taskmgr.js","sourceRoot":"","sources":["../../src/commands/taskmgr.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,16 +6,20 @@ import { linkCommand } from './commands/link.js';
|
|
|
6
6
|
import { taskmgrCommand } from './commands/taskmgr.js';
|
|
7
7
|
import { skillCommand } from './commands/skill.js';
|
|
8
8
|
import { kbCommand } from './commands/kb.js';
|
|
9
|
+
import { agentCommand } from './commands/agent.js';
|
|
9
10
|
const program = new Command();
|
|
10
11
|
program
|
|
11
12
|
.name('asyncwf')
|
|
12
13
|
.description(chalk.cyan('AsyncWF - Model-Driven Parallel Agent Workflow CLI'))
|
|
13
|
-
.version('1.
|
|
14
|
+
.version('1.2.0');
|
|
14
15
|
// Setup commands
|
|
15
16
|
program
|
|
16
17
|
.command('init')
|
|
17
18
|
.description('Initialize AsyncWF in the current directory')
|
|
18
|
-
.
|
|
19
|
+
.option('-c, --claude', 'Configure for Claude Code (default)')
|
|
20
|
+
.option('-g, --gemini', 'Configure for Gemini CLI')
|
|
21
|
+
.option('-x, --codex', 'Configure for OpenAI Codex')
|
|
22
|
+
.action((opts) => initCommand(opts));
|
|
19
23
|
program
|
|
20
24
|
.command('link')
|
|
21
25
|
.description('Link local specs to global knowledge base')
|
|
@@ -30,6 +34,7 @@ taskmgr
|
|
|
30
34
|
.requiredOption('--job <id>', 'Job identifier')
|
|
31
35
|
.requiredOption('--prompt <text>', 'Prompt for the sub-agent')
|
|
32
36
|
.option('--skill <name>', 'Skill to inject into prompt')
|
|
37
|
+
.option('--agent <type>', 'Agent type: claude, codex, or gemini')
|
|
33
38
|
.action((opts) => taskmgrCommand('dispatch', opts));
|
|
34
39
|
taskmgr
|
|
35
40
|
.command('list')
|
|
@@ -105,5 +110,13 @@ kb
|
|
|
105
110
|
.command('delete <topic>')
|
|
106
111
|
.description('Delete knowledge entry')
|
|
107
112
|
.action((topic) => kbCommand('delete', { topic }));
|
|
113
|
+
// Agent Manager
|
|
114
|
+
const agent = program
|
|
115
|
+
.command('agent')
|
|
116
|
+
.description('Manage and check AI agent backends');
|
|
117
|
+
agent
|
|
118
|
+
.command('status')
|
|
119
|
+
.description('Check availability of agent backends (claude/codex/gemini)')
|
|
120
|
+
.action(() => agentCommand('status'));
|
|
108
121
|
program.parse();
|
|
109
122
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/agent.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import type { Task } from '../types.js';
|
|
2
|
-
export declare
|
|
1
|
+
import type { Task, AgentType } from '../types.js';
|
|
2
|
+
export declare const AGENT_CONFIGS: Record<AgentType, {
|
|
3
|
+
command: string;
|
|
4
|
+
promptArg: string[];
|
|
5
|
+
}>;
|
|
6
|
+
export declare function getDefaultAgent(): AgentType;
|
|
7
|
+
export declare function dispatchAgent(jobId: string, prompt: string, skillName?: string, agentType?: AgentType): Promise<Task>;
|
|
3
8
|
export declare function killAgent(jobId: string): Promise<boolean>;
|
|
4
9
|
export declare function waitForJobs(jobIds: string[], timeoutMs?: number): Promise<Task[]>;
|
|
5
10
|
//# sourceMappingURL=agent.d.ts.map
|
package/dist/lib/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/lib/agent.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/lib/agent.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAMnD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAIrF,CAAC;AAGF,wBAAgB,eAAe,IAAI,SAAS,CAW3C;AAED,wBAAsB,aAAa,CAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,SAAS,GACtB,OAAO,CAAC,IAAI,CAAC,CAsFf;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAyB/D;AAED,wBAAsB,WAAW,CAC7B,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,GAAE,MAAe,GAC3B,OAAO,CAAC,IAAI,EAAE,CAAC,CAwBjB"}
|
package/dist/lib/agent.js
CHANGED
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
import { spawn } from 'child_process';
|
|
2
|
-
import { createWriteStream, existsSync } from 'fs';
|
|
2
|
+
import { createWriteStream, existsSync, readFileSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
3
4
|
import { getLogPath, getLogsDir, createTask, updateTask, getTask } from './state.js';
|
|
4
5
|
import { getSkill, formatSkillForPrompt } from './skills.js';
|
|
5
6
|
// Store child process references for kill
|
|
6
7
|
const processes = new Map();
|
|
7
|
-
|
|
8
|
+
// Agent command configurations
|
|
9
|
+
export const AGENT_CONFIGS = {
|
|
10
|
+
claude: { command: 'claude', promptArg: ['-p'] },
|
|
11
|
+
codex: { command: 'codex', promptArg: ['-q'] }, // codex uses -q for quiet mode with prompt
|
|
12
|
+
gemini: { command: 'gemini', promptArg: ['-p'] }, // gemini-cli
|
|
13
|
+
};
|
|
14
|
+
// Get default agent from config
|
|
15
|
+
export function getDefaultAgent() {
|
|
16
|
+
const configPath = join(process.cwd(), '.asyncwf', 'config.json');
|
|
17
|
+
if (existsSync(configPath)) {
|
|
18
|
+
try {
|
|
19
|
+
const config = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
20
|
+
return config.defaultAgent || 'claude';
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return 'claude';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return 'claude';
|
|
27
|
+
}
|
|
28
|
+
export async function dispatchAgent(jobId, prompt, skillName, agentType) {
|
|
8
29
|
// Build full prompt with skill if provided
|
|
9
30
|
let fullPrompt = prompt;
|
|
10
31
|
if (skillName) {
|
|
@@ -21,22 +42,22 @@ export async function dispatchAgent(jobId, prompt, skillName) {
|
|
|
21
42
|
}
|
|
22
43
|
const logPath = getLogPath(jobId);
|
|
23
44
|
const logStream = createWriteStream(logPath);
|
|
45
|
+
// Determine which agent to use
|
|
46
|
+
const agent = agentType || getDefaultAgent();
|
|
47
|
+
const agentConfig = AGENT_CONFIGS[agent];
|
|
24
48
|
// Create task record
|
|
25
49
|
const task = await createTask({
|
|
26
50
|
id: jobId,
|
|
27
51
|
prompt: fullPrompt,
|
|
28
52
|
skill: skillName,
|
|
53
|
+
agent: agent,
|
|
29
54
|
status: 'running',
|
|
30
55
|
logFile: logPath,
|
|
31
56
|
});
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
const agentCommand = process.env.ASYNCWF_AGENT || 'claude';
|
|
35
|
-
const args = agentCommand === 'claude'
|
|
36
|
-
? ['-p', fullPrompt]
|
|
37
|
-
: [fullPrompt]; // For testing with echo
|
|
57
|
+
// Build command args
|
|
58
|
+
const args = [...agentConfig.promptArg, fullPrompt];
|
|
38
59
|
try {
|
|
39
|
-
const child = spawn(
|
|
60
|
+
const child = spawn(agentConfig.command, args, {
|
|
40
61
|
detached: true,
|
|
41
62
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
42
63
|
shell: true,
|
package/dist/lib/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/lib/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/lib/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/templates.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
export declare const ARCHITECT_PERSONA = "## Architect Persona\n\nYou are operating as a senior software architect with the ability to parallelize work.\nYou have access to the `asyncwf` tool suite for managing parallel agent workflows.\n\n**Capabilities:**\n- Analyze complex tasks and decompose into independent sub-tasks\n- Dispatch parallel sub-agents for concurrent execution\n- Coordinate and integrate outputs from multiple agents\n- Learn and reuse skills across projects\n";
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const AGENT_SELECTION_GUIDE = "## Agent Selection Guide\n\n### Check Available Agents\nBefore dispatching, check which agents are available:\n```bash\nasyncwf agent status\n```\n\n### Agent Comparison\n\n| Agent | Strengths | Weaknesses | Best For |\n|-------|-----------|------------|----------|\n| **Claude Code** | Deep reasoning, complex logic, system design, debugging | Slower on simple tasks | Backend, architecture, Rust/Go/Python, debugging |\n| **Codex (cx)** | Fast iteration, full-stack, good context | Less deep analysis | Rapid prototyping, JS/TS, full-stack features |\n| **Gemini** | Multimodal, long context, documentation | Less coding-focused | Frontend, UI/UX, docs, code review, large files |\n\n### Decision Framework\n\n1. **Backend / System Design / Complex Logic**\n \u2192 Use `--agent claude`\n - Complex algorithms, multi-file refactoring, architecture decisions\n \n2. **Frontend / UI / Documentation**\n \u2192 Use `--agent gemini`\n - React/Vue components, CSS, markdown docs, multimodal tasks\n \n3. **Full-Stack / Quick Features / Integration**\n \u2192 Use `--agent codex`\n - End-to-end features, API + UI together, rapid prototyping\n\n4. **Fallback Strategy**\n - If preferred agent unavailable, use the next best match\n - Claude \u2192 Codex \u2192 Gemini (for backend)\n - Gemini \u2192 Codex \u2192 Claude (for frontend)\n\n### Example: Intelligent Dispatch\n```bash\n# Check availability first\nasyncwf agent status\n\n# Then dispatch based on task type\nasyncwf taskmgr dispatch --job auth-api --agent claude --prompt \"Implement JWT auth...\"\nasyncwf taskmgr dispatch --job login-ui --agent gemini --prompt \"Create login form...\"\nasyncwf taskmgr dispatch --job connect --agent codex --prompt \"Wire API to UI...\"\n```\n";
|
|
3
|
+
export declare const MULTI_AGENT_PROTOCOL = "## Multi-Agent Collaboration\n\nYou can dispatch tasks to different AI agents based on their strengths:\n\n| Agent | Flag | Best For |\n|-------|------|----------|\n| Claude Code | `--agent claude` | Backend, system design, complex logic |\n| Codex | `--agent codex` | Full-stack, rapid prototyping |\n| Gemini | `--agent gemini` | Frontend, UI/UX, documentation |\n\n**Example - Parallel Multi-Agent Workflow:**\n```bash\n# Frontend with Gemini\nasyncwf taskmgr dispatch --job frontend --agent gemini --prompt \"Create React components for...\"\n\n# Backend with Claude\nasyncwf taskmgr dispatch --job backend --agent claude --prompt \"Implement REST API for...\"\n\n# Full-stack integration with Codex\nasyncwf taskmgr dispatch --job integration --agent codex --prompt \"Connect frontend and backend...\"\n\n# Wait for all\nasyncwf taskmgr wait --jobs frontend,backend,integration\n```\n";
|
|
4
|
+
export declare const PARALLEL_PROTOCOL = "## Parallel Execution Protocol\n\n[SYSTEM: ASYNCWF ENABLED]\n\n### When to Parallelize\nIf a request involves multiple distinct, independent modules (e.g., \"Write the Rust Client AND the Python Backend\"), DO NOT do them sequentially.\n\n### How to Use\n\n1. **Analyze**: Break the request into independent sub-tasks.\n2. **Check Agents**: Run `asyncwf agent status` to see available backends.\n3. **Check Skills**: Run `asyncwf skill list` to see available reusable patterns.\n4. **Dispatch**: Run multiple dispatch commands:\n ```bash\n asyncwf taskmgr dispatch --job <id> --agent <type> --prompt \"<context>\" [--skill <name>]\n ```\n Agents: `claude` | `codex` | `gemini`\n5. **Wait**: Run `asyncwf taskmgr wait --jobs <id1>,<id2>,...`\n6. **Fetch & Integrate**: Run `asyncwf taskmgr fetch --job <id>` to see outputs.\n7. **Review**: Check for consistency between outputs.\n\n### Skills Usage\n- List skills: `asyncwf skill list`\n- Use skill in dispatch: `asyncwf taskmgr dispatch --job api --skill rust-api --prompt \"...\"`\n- Add new skill: `asyncwf skill add <name> --content \"<markdown>\"`\n\n### Knowledge Base\n- Search knowledge: `asyncwf kb search <query>`\n- Learn new knowledge: `asyncwf kb learn --topic <name> --content \"<insights>\"`\n- Review knowledge: `asyncwf kb show <topic>`\n\n### Constraints\n- Sub-agents cannot see your conversation history - provide FULL context in --prompt\n- Use skills to ensure consistent patterns across agents\n- Learn reusable patterns to knowledge base for future reference\n- Always check `asyncwf link` status before starting to ensure specs are up to date\n";
|
|
3
5
|
export declare const FILE_WATCH_DIRECTIVE = "## File Watching\n\nMonitor the `specs/` directory for specification changes.\nWhen specs are updated, run `asyncwf link` to refresh project context.\n";
|
|
4
6
|
export declare function generateClaudeMD(projectContext?: string): string;
|
|
7
|
+
export declare function generateGeminiMD(projectContext?: string): string;
|
|
8
|
+
export declare function generateCodexMD(projectContext?: string): string;
|
|
5
9
|
export declare function generateProjectContext(specs: Array<{
|
|
6
10
|
name: string;
|
|
7
11
|
summary: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,4bAU7B,CAAC;AAEF,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,4bAU7B,CAAC;AAEF,eAAO,MAAM,qBAAqB,ouDA6CjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,83BAwBhC,CAAC;AAEF,eAAO,MAAM,iBAAiB,+lDAoC7B,CAAC;AAEF,eAAO,MAAM,oBAAoB,4JAIhC,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,cAAc,GAAE,MAAW,GAAG,MAAM,CAuBpE;AAED,wBAAgB,gBAAgB,CAAC,cAAc,GAAE,MAAW,GAAG,MAAM,CA2BpE;AAED,wBAAgB,eAAe,CAAC,cAAc,GAAE,MAAW,GAAG,MAAM,CA2BnE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAQ9F"}
|
package/dist/lib/templates.js
CHANGED
|
@@ -9,6 +9,77 @@ You have access to the \`asyncwf\` tool suite for managing parallel agent workfl
|
|
|
9
9
|
- Coordinate and integrate outputs from multiple agents
|
|
10
10
|
- Learn and reuse skills across projects
|
|
11
11
|
`;
|
|
12
|
+
export const AGENT_SELECTION_GUIDE = `## Agent Selection Guide
|
|
13
|
+
|
|
14
|
+
### Check Available Agents
|
|
15
|
+
Before dispatching, check which agents are available:
|
|
16
|
+
\`\`\`bash
|
|
17
|
+
asyncwf agent status
|
|
18
|
+
\`\`\`
|
|
19
|
+
|
|
20
|
+
### Agent Comparison
|
|
21
|
+
|
|
22
|
+
| Agent | Strengths | Weaknesses | Best For |
|
|
23
|
+
|-------|-----------|------------|----------|
|
|
24
|
+
| **Claude Code** | Deep reasoning, complex logic, system design, debugging | Slower on simple tasks | Backend, architecture, Rust/Go/Python, debugging |
|
|
25
|
+
| **Codex (cx)** | Fast iteration, full-stack, good context | Less deep analysis | Rapid prototyping, JS/TS, full-stack features |
|
|
26
|
+
| **Gemini** | Multimodal, long context, documentation | Less coding-focused | Frontend, UI/UX, docs, code review, large files |
|
|
27
|
+
|
|
28
|
+
### Decision Framework
|
|
29
|
+
|
|
30
|
+
1. **Backend / System Design / Complex Logic**
|
|
31
|
+
→ Use \`--agent claude\`
|
|
32
|
+
- Complex algorithms, multi-file refactoring, architecture decisions
|
|
33
|
+
|
|
34
|
+
2. **Frontend / UI / Documentation**
|
|
35
|
+
→ Use \`--agent gemini\`
|
|
36
|
+
- React/Vue components, CSS, markdown docs, multimodal tasks
|
|
37
|
+
|
|
38
|
+
3. **Full-Stack / Quick Features / Integration**
|
|
39
|
+
→ Use \`--agent codex\`
|
|
40
|
+
- End-to-end features, API + UI together, rapid prototyping
|
|
41
|
+
|
|
42
|
+
4. **Fallback Strategy**
|
|
43
|
+
- If preferred agent unavailable, use the next best match
|
|
44
|
+
- Claude → Codex → Gemini (for backend)
|
|
45
|
+
- Gemini → Codex → Claude (for frontend)
|
|
46
|
+
|
|
47
|
+
### Example: Intelligent Dispatch
|
|
48
|
+
\`\`\`bash
|
|
49
|
+
# Check availability first
|
|
50
|
+
asyncwf agent status
|
|
51
|
+
|
|
52
|
+
# Then dispatch based on task type
|
|
53
|
+
asyncwf taskmgr dispatch --job auth-api --agent claude --prompt "Implement JWT auth..."
|
|
54
|
+
asyncwf taskmgr dispatch --job login-ui --agent gemini --prompt "Create login form..."
|
|
55
|
+
asyncwf taskmgr dispatch --job connect --agent codex --prompt "Wire API to UI..."
|
|
56
|
+
\`\`\`
|
|
57
|
+
`;
|
|
58
|
+
export const MULTI_AGENT_PROTOCOL = `## Multi-Agent Collaboration
|
|
59
|
+
|
|
60
|
+
You can dispatch tasks to different AI agents based on their strengths:
|
|
61
|
+
|
|
62
|
+
| Agent | Flag | Best For |
|
|
63
|
+
|-------|------|----------|
|
|
64
|
+
| Claude Code | \`--agent claude\` | Backend, system design, complex logic |
|
|
65
|
+
| Codex | \`--agent codex\` | Full-stack, rapid prototyping |
|
|
66
|
+
| Gemini | \`--agent gemini\` | Frontend, UI/UX, documentation |
|
|
67
|
+
|
|
68
|
+
**Example - Parallel Multi-Agent Workflow:**
|
|
69
|
+
\`\`\`bash
|
|
70
|
+
# Frontend with Gemini
|
|
71
|
+
asyncwf taskmgr dispatch --job frontend --agent gemini --prompt "Create React components for..."
|
|
72
|
+
|
|
73
|
+
# Backend with Claude
|
|
74
|
+
asyncwf taskmgr dispatch --job backend --agent claude --prompt "Implement REST API for..."
|
|
75
|
+
|
|
76
|
+
# Full-stack integration with Codex
|
|
77
|
+
asyncwf taskmgr dispatch --job integration --agent codex --prompt "Connect frontend and backend..."
|
|
78
|
+
|
|
79
|
+
# Wait for all
|
|
80
|
+
asyncwf taskmgr wait --jobs frontend,backend,integration
|
|
81
|
+
\`\`\`
|
|
82
|
+
`;
|
|
12
83
|
export const PARALLEL_PROTOCOL = `## Parallel Execution Protocol
|
|
13
84
|
|
|
14
85
|
[SYSTEM: ASYNCWF ENABLED]
|
|
@@ -19,14 +90,16 @@ If a request involves multiple distinct, independent modules (e.g., "Write the R
|
|
|
19
90
|
### How to Use
|
|
20
91
|
|
|
21
92
|
1. **Analyze**: Break the request into independent sub-tasks.
|
|
22
|
-
2. **Check
|
|
23
|
-
3. **
|
|
93
|
+
2. **Check Agents**: Run \`asyncwf agent status\` to see available backends.
|
|
94
|
+
3. **Check Skills**: Run \`asyncwf skill list\` to see available reusable patterns.
|
|
95
|
+
4. **Dispatch**: Run multiple dispatch commands:
|
|
24
96
|
\`\`\`bash
|
|
25
|
-
asyncwf taskmgr dispatch --job <id> --prompt "<context>" [--skill <name>]
|
|
97
|
+
asyncwf taskmgr dispatch --job <id> --agent <type> --prompt "<context>" [--skill <name>]
|
|
26
98
|
\`\`\`
|
|
27
|
-
|
|
28
|
-
5. **
|
|
29
|
-
6. **
|
|
99
|
+
Agents: \`claude\` | \`codex\` | \`gemini\`
|
|
100
|
+
5. **Wait**: Run \`asyncwf taskmgr wait --jobs <id1>,<id2>,...\`
|
|
101
|
+
6. **Fetch & Integrate**: Run \`asyncwf taskmgr fetch --job <id>\` to see outputs.
|
|
102
|
+
7. **Review**: Check for consistency between outputs.
|
|
30
103
|
|
|
31
104
|
### Skills Usage
|
|
32
105
|
- List skills: \`asyncwf skill list\`
|
|
@@ -54,6 +127,62 @@ export function generateClaudeMD(projectContext = '') {
|
|
|
54
127
|
|
|
55
128
|
${ARCHITECT_PERSONA}
|
|
56
129
|
|
|
130
|
+
${AGENT_SELECTION_GUIDE}
|
|
131
|
+
|
|
132
|
+
${MULTI_AGENT_PROTOCOL}
|
|
133
|
+
|
|
134
|
+
${PARALLEL_PROTOCOL}
|
|
135
|
+
|
|
136
|
+
${FILE_WATCH_DIRECTIVE}
|
|
137
|
+
`;
|
|
138
|
+
if (projectContext) {
|
|
139
|
+
content += `
|
|
140
|
+
## Project Context
|
|
141
|
+
|
|
142
|
+
${projectContext}
|
|
143
|
+
`;
|
|
144
|
+
}
|
|
145
|
+
return content;
|
|
146
|
+
}
|
|
147
|
+
export function generateGeminiMD(projectContext = '') {
|
|
148
|
+
let content = `# AsyncWF - Gemini Agent Configuration
|
|
149
|
+
|
|
150
|
+
${ARCHITECT_PERSONA}
|
|
151
|
+
|
|
152
|
+
## Your Role
|
|
153
|
+
You are the **Frontend & UI Specialist** in a multi-agent team.
|
|
154
|
+
Focus on: React, Vue, CSS, UI/UX design, documentation.
|
|
155
|
+
|
|
156
|
+
${AGENT_SELECTION_GUIDE}
|
|
157
|
+
|
|
158
|
+
${MULTI_AGENT_PROTOCOL}
|
|
159
|
+
|
|
160
|
+
${PARALLEL_PROTOCOL}
|
|
161
|
+
|
|
162
|
+
${FILE_WATCH_DIRECTIVE}
|
|
163
|
+
`;
|
|
164
|
+
if (projectContext) {
|
|
165
|
+
content += `
|
|
166
|
+
## Project Context
|
|
167
|
+
|
|
168
|
+
${projectContext}
|
|
169
|
+
`;
|
|
170
|
+
}
|
|
171
|
+
return content;
|
|
172
|
+
}
|
|
173
|
+
export function generateCodexMD(projectContext = '') {
|
|
174
|
+
let content = `# AsyncWF - Codex Agent Configuration
|
|
175
|
+
|
|
176
|
+
${ARCHITECT_PERSONA}
|
|
177
|
+
|
|
178
|
+
## Your Role
|
|
179
|
+
You are the **Full-Stack Integrator** in a multi-agent team.
|
|
180
|
+
Focus on: connecting components, rapid prototyping, end-to-end features.
|
|
181
|
+
|
|
182
|
+
${AGENT_SELECTION_GUIDE}
|
|
183
|
+
|
|
184
|
+
${MULTI_AGENT_PROTOCOL}
|
|
185
|
+
|
|
57
186
|
${PARALLEL_PROTOCOL}
|
|
58
187
|
|
|
59
188
|
${FILE_WATCH_DIRECTIVE}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;CAUhC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;CAUhC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6CpC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBnC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoChC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;CAInC,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,iBAAyB,EAAE;IACxD,IAAI,OAAO,GAAG;;EAEhB,iBAAiB;;EAEjB,qBAAqB;;EAErB,oBAAoB;;EAEpB,iBAAiB;;EAEjB,oBAAoB;CACrB,CAAC;IAEE,IAAI,cAAc,EAAE,CAAC;QACjB,OAAO,IAAI;;;EAGjB,cAAc;CACf,CAAC;IACE,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,iBAAyB,EAAE;IACxD,IAAI,OAAO,GAAG;;EAEhB,iBAAiB;;;;;;EAMjB,qBAAqB;;EAErB,oBAAoB;;EAEpB,iBAAiB;;EAEjB,oBAAoB;CACrB,CAAC;IAEE,IAAI,cAAc,EAAE,CAAC;QACjB,OAAO,IAAI;;;EAGjB,cAAc;CACf,CAAC;IACE,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,iBAAyB,EAAE;IACvD,IAAI,OAAO,GAAG;;EAEhB,iBAAiB;;;;;;EAMjB,qBAAqB;;EAErB,oBAAoB;;EAEpB,iBAAiB;;EAEjB,oBAAoB;CACrB,CAAC;IAEE,IAAI,cAAc,EAAE,CAAC;QACjB,OAAO,IAAI;;;EAGjB,cAAc;CACf,CAAC;IACE,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAA+C;IAClF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,IAAI,OAAO,GAAG,iDAAiD,CAAC;IAChE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,OAAO,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
export type AgentType = 'claude' | 'codex' | 'gemini';
|
|
1
2
|
export type TaskStatus = 'pending' | 'running' | 'done' | 'failed';
|
|
2
3
|
export interface Task {
|
|
3
4
|
id: string;
|
|
4
5
|
prompt: string;
|
|
5
6
|
skill?: string;
|
|
7
|
+
agent?: AgentType;
|
|
6
8
|
status: TaskStatus;
|
|
7
9
|
pid?: number;
|
|
8
10
|
exitCode?: number;
|
|
@@ -47,7 +49,7 @@ export interface KnowledgeIndex {
|
|
|
47
49
|
}
|
|
48
50
|
export interface AsyncWFConfig {
|
|
49
51
|
version: string;
|
|
50
|
-
|
|
52
|
+
defaultAgent: AgentType;
|
|
51
53
|
ckbPath: string;
|
|
52
54
|
}
|
|
53
55
|
export interface GlobalConfig {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAGnE,MAAM,WAAW,IAAI;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,IAAI,EAAE,CAAC;CACjB;AAGD,MAAM,WAAW,KAAK;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,KAAK,CAAC;QACV,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACN;AAGD,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,GAAG,eAAe,GAAG,UAAU,CAAC;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,KAAK,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACN;AAGD,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAGtD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAGnE,MAAM,WAAW,IAAI;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,IAAI,EAAE,CAAC;CACjB;AAGD,MAAM,WAAW,KAAK;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,KAAK,CAAC;QACV,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACN;AAGD,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,GAAG,eAAe,GAAG,UAAU,CAAC;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,KAAK,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACN;AAGD,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,SAAS,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,MAAM,CAAC;CAC/B"}
|