agent-orchestration 0.5.0 → 0.6.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/.cursor/rules/orchestrator-auto.mdc +2 -0
- package/.cursor/rules/orchestrator-main.mdc +37 -7
- package/.cursor/rules/orchestrator-sub.mdc +89 -27
- package/README.md +278 -66
- package/dist/bin/cli.d.ts +1 -0
- package/dist/bin/cli.d.ts.map +1 -1
- package/dist/bin/cli.js +54 -157
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/cursorCommands.d.ts +3 -0
- package/dist/bin/cursorCommands.d.ts.map +1 -0
- package/dist/bin/cursorCommands.js +330 -0
- package/dist/bin/cursorCommands.js.map +1 -0
- package/dist/database.d.ts +32 -1
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +105 -5
- package/dist/database.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/models.d.ts +59 -0
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +69 -0
- package/dist/models.js.map +1 -1
- package/dist/providers/cursor.d.ts +14 -0
- package/dist/providers/cursor.d.ts.map +1 -0
- package/dist/providers/cursor.js +203 -0
- package/dist/providers/cursor.js.map +1 -0
- package/dist/providers/types.d.ts +60 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/tools/agent.d.ts.map +1 -1
- package/dist/tools/agent.js +5 -0
- package/dist/tools/agent.js.map +1 -1
- package/dist/tools/coordination.d.ts.map +1 -1
- package/dist/tools/coordination.js +47 -0
- package/dist/tools/coordination.js.map +1 -1
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/memory.d.ts.map +1 -1
- package/dist/tools/memory.js +6 -1
- package/dist/tools/memory.js.map +1 -1
- package/dist/tools/provider.d.ts +3 -0
- package/dist/tools/provider.d.ts.map +1 -0
- package/dist/tools/provider.js +403 -0
- package/dist/tools/provider.js.map +1 -0
- package/dist/tools/proxy.d.ts +6 -0
- package/dist/tools/proxy.d.ts.map +1 -0
- package/dist/tools/proxy.js +107 -0
- package/dist/tools/proxy.js.map +1 -0
- package/dist/tools/research.d.ts +9 -0
- package/dist/tools/research.d.ts.map +1 -0
- package/dist/tools/research.js +182 -0
- package/dist/tools/research.js.map +1 -0
- package/dist/tools/task.d.ts.map +1 -1
- package/dist/tools/task.js +98 -9
- package/dist/tools/task.js.map +1 -1
- package/dist/tools/utility.d.ts.map +1 -1
- package/dist/tools/utility.js +85 -16
- package/dist/tools/utility.js.map +1 -1
- package/dist/utils/autoDocumentation.d.ts +8 -0
- package/dist/utils/autoDocumentation.d.ts.map +1 -0
- package/dist/utils/autoDocumentation.js +140 -0
- package/dist/utils/autoDocumentation.js.map +1 -0
- package/dist/utils/autoDocumentation.test.d.ts +2 -0
- package/dist/utils/autoDocumentation.test.d.ts.map +1 -0
- package/dist/utils/autoDocumentation.test.js +47 -0
- package/dist/utils/autoDocumentation.test.js.map +1 -0
- package/dist/utils/contextSync.d.ts.map +1 -1
- package/dist/utils/contextSync.js +21 -1
- package/dist/utils/contextSync.js.map +1 -1
- package/dist/utils/cursorCli.d.ts +46 -0
- package/dist/utils/cursorCli.d.ts.map +1 -0
- package/dist/utils/cursorCli.js +176 -0
- package/dist/utils/cursorCli.js.map +1 -0
- package/dist/utils/cursorCli.test.d.ts +2 -0
- package/dist/utils/cursorCli.test.d.ts.map +1 -0
- package/dist/utils/cursorCli.test.js +134 -0
- package/dist/utils/cursorCli.test.js.map +1 -0
- package/dist/utils/delegatedTaskRuntime.d.ts +45 -0
- package/dist/utils/delegatedTaskRuntime.d.ts.map +1 -0
- package/dist/utils/delegatedTaskRuntime.js +147 -0
- package/dist/utils/delegatedTaskRuntime.js.map +1 -0
- package/dist/utils/delegationKnowledge.d.ts +51 -0
- package/dist/utils/delegationKnowledge.d.ts.map +1 -0
- package/dist/utils/delegationKnowledge.js +197 -0
- package/dist/utils/delegationKnowledge.js.map +1 -0
- package/dist/utils/delegationRecovery.d.ts +17 -0
- package/dist/utils/delegationRecovery.d.ts.map +1 -0
- package/dist/utils/delegationRecovery.js +63 -0
- package/dist/utils/delegationRecovery.js.map +1 -0
- package/dist/utils/delegationRecovery.test.d.ts +2 -0
- package/dist/utils/delegationRecovery.test.d.ts.map +1 -0
- package/dist/utils/delegationRecovery.test.js +42 -0
- package/dist/utils/delegationRecovery.test.js.map +1 -0
- package/dist/utils/orchestratorConfig.d.ts +19 -0
- package/dist/utils/orchestratorConfig.d.ts.map +1 -0
- package/dist/utils/orchestratorConfig.js +38 -0
- package/dist/utils/orchestratorConfig.js.map +1 -0
- package/dist/utils/subprocess.d.ts +27 -0
- package/dist/utils/subprocess.d.ts.map +1 -0
- package/dist/utils/subprocess.js +84 -0
- package/dist/utils/subprocess.js.map +1 -0
- package/package.json +17 -5
- package/templates/AGENTS.md +164 -0
- package/activeContext.md +0 -37
- package/src/bin/cli.ts +0 -430
- package/src/database.ts +0 -764
- package/src/index.ts +0 -71
- package/src/models.ts +0 -226
- package/src/tools/agent.ts +0 -241
- package/src/tools/coordination.ts +0 -152
- package/src/tools/index.ts +0 -9
- package/src/tools/memory.ts +0 -150
- package/src/tools/task.ts +0 -334
- package/src/tools/utility.ts +0 -202
- package/src/utils/contextSync.ts +0 -144
- package/tsconfig.json +0 -20
package/dist/bin/cli.js
CHANGED
|
@@ -6,10 +6,12 @@
|
|
|
6
6
|
* init - Creates AGENTS.md for cross-IDE/CLI compatibility
|
|
7
7
|
* init-cursor - Copies .cursor/rules/ for Cursor IDE
|
|
8
8
|
* serve - Run the MCP server (used by IDEs via npx)
|
|
9
|
+
* cursor - Cursor-native orchestration helpers
|
|
9
10
|
*/
|
|
10
11
|
import * as fs from 'fs';
|
|
11
12
|
import * as path from 'path';
|
|
12
13
|
import { fileURLToPath } from 'url';
|
|
14
|
+
import { runCursorCommand, runDocCommand } from './cursorCommands.js';
|
|
13
15
|
const __filename = fileURLToPath(import.meta.url);
|
|
14
16
|
const __dirname = path.dirname(__filename);
|
|
15
17
|
// Path to the package root (dist/bin/cli.js -> ../../)
|
|
@@ -22,6 +24,15 @@ Usage:
|
|
|
22
24
|
npx agent-orchestration init Create AGENTS.md (works with any AI agent)
|
|
23
25
|
npx agent-orchestration init-cursor Setup for Cursor IDE (.cursor/rules/)
|
|
24
26
|
npx agent-orchestration serve Run the MCP server
|
|
27
|
+
npx agent-orchestration doc --task <id> Generate task documentation
|
|
28
|
+
npx agent-orchestration cursor check Verify Cursor CLI integration
|
|
29
|
+
npx agent-orchestration cursor delegate --task <id> [--mode ask|plan|agent]
|
|
30
|
+
npx agent-orchestration cursor status --task <id>
|
|
31
|
+
npx agent-orchestration cursor resume --task <id> [--exec]
|
|
32
|
+
npx agent-orchestration cursor sync --task <id>
|
|
33
|
+
npx agent-orchestration cursor recover --task <id> [--force]
|
|
34
|
+
npx agent-orchestration cursor handoff --task <id> --summary "..."
|
|
35
|
+
npx agent-orchestration cursor list Show delegated Cursor tasks
|
|
25
36
|
npx agent-orchestration help Show this help message
|
|
26
37
|
|
|
27
38
|
Commands:
|
|
@@ -35,184 +46,51 @@ Commands:
|
|
|
35
46
|
serve Runs the MCP server. IDEs call this via their MCP config.
|
|
36
47
|
The server uses the current working directory as the project root.
|
|
37
48
|
|
|
49
|
+
doc Generates Markdown documentation for a task from orchestration state.
|
|
50
|
+
|
|
51
|
+
cursor Provides Cursor-native task delegation helpers.
|
|
52
|
+
Use "cursor check", "cursor delegate", "cursor status", "cursor resume",
|
|
53
|
+
"cursor sync", "cursor recover", "cursor handoff", or "cursor list".
|
|
54
|
+
|
|
38
55
|
Example:
|
|
39
56
|
cd /path/to/my-project
|
|
40
57
|
npx agent-orchestration init
|
|
41
58
|
`);
|
|
42
59
|
}
|
|
43
60
|
/**
|
|
44
|
-
*
|
|
61
|
+
* Load AGENTS.md template content from the package.
|
|
45
62
|
*/
|
|
46
|
-
function
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
Add this to your IDE's MCP configuration:
|
|
54
|
-
|
|
55
|
-
\`\`\`json
|
|
56
|
-
{
|
|
57
|
-
"mcpServers": {
|
|
58
|
-
"agent-orchestration": {
|
|
59
|
-
"command": "npx",
|
|
60
|
-
"args": ["-y", "agent-orchestration", "serve"],
|
|
61
|
-
"env": {
|
|
62
|
-
"MCP_ORCH_SYNC_CONTEXT": "true"
|
|
63
|
-
}
|
|
63
|
+
function loadAgentsMdTemplate() {
|
|
64
|
+
const templatePath = path.join(packageRoot, 'templates', 'AGENTS.md');
|
|
65
|
+
try {
|
|
66
|
+
if (!fs.existsSync(templatePath)) {
|
|
67
|
+
throw new Error(`Missing template: ${templatePath}`);
|
|
68
|
+
}
|
|
69
|
+
return fs.readFileSync(templatePath, 'utf-8');
|
|
64
70
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
**Note**: Run from your project root. The server uses the current directory.
|
|
71
|
+
catch (error) {
|
|
72
|
+
// Fallback to a minimal stub so init still works even if the template isn't shipped.
|
|
73
|
+
console.warn('[init] Failed to load templates/AGENTS.md. Writing a minimal AGENTS.md instead.', error);
|
|
74
|
+
return `# AGENTS.md
|
|
70
75
|
|
|
71
|
-
|
|
76
|
+
This project uses **Agent Orchestration** for multi-agent coordination.
|
|
72
77
|
|
|
73
|
-
## First Action
|
|
78
|
+
## First Action
|
|
74
79
|
|
|
75
|
-
|
|
80
|
+
Run the MCP tool:
|
|
76
81
|
|
|
77
82
|
\`\`\`
|
|
78
83
|
bootstrap
|
|
79
84
|
\`\`\`
|
|
80
85
|
|
|
81
|
-
|
|
82
|
-
- Current project focus
|
|
83
|
-
- Tasks assigned to you
|
|
84
|
-
- Recent decisions
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
## If You Have a Specific Task
|
|
89
|
-
|
|
90
|
-
If you were given a specific task to work on, run:
|
|
91
|
-
|
|
92
|
-
\`\`\`
|
|
93
|
-
claim_todo:
|
|
94
|
-
title: "<the task title>"
|
|
95
|
-
\`\`\`
|
|
96
|
-
|
|
97
|
-
This registers you AND claims the task in one call.
|
|
98
|
-
|
|
99
|
-
---
|
|
100
|
-
|
|
101
|
-
## Available Tools
|
|
102
|
-
|
|
103
|
-
### Session Management
|
|
104
|
-
| Tool | Description |
|
|
105
|
-
|------|-------------|
|
|
106
|
-
| \`bootstrap\` | Initialize session: register, get focus, tasks, decisions |
|
|
107
|
-
| \`claim_todo\` | Register + claim a task in one call |
|
|
108
|
-
| \`agent_whoami\` | Get your current agent info |
|
|
109
|
-
|
|
110
|
-
### Agent Coordination
|
|
111
|
-
| Tool | Description |
|
|
112
|
-
|------|-------------|
|
|
113
|
-
| \`agent_register\` | Register with the orchestration system |
|
|
114
|
-
| \`agent_heartbeat\` | Send heartbeat to indicate you're active |
|
|
115
|
-
| \`agent_list\` | List all registered agents |
|
|
116
|
-
| \`agent_unregister\` | Unregister (releases all locks) |
|
|
117
|
-
|
|
118
|
-
### Shared Memory
|
|
119
|
-
| Tool | Description |
|
|
120
|
-
|------|-------------|
|
|
121
|
-
| \`memory_set\` | Store a value in shared memory |
|
|
122
|
-
| \`memory_get\` | Retrieve a value from shared memory |
|
|
123
|
-
| \`memory_list\` | List all keys in a namespace |
|
|
124
|
-
| \`memory_delete\` | Delete a value from shared memory |
|
|
125
|
-
|
|
126
|
-
### Task Management
|
|
127
|
-
| Tool | Description |
|
|
128
|
-
|------|-------------|
|
|
129
|
-
| \`task_create\` | Create a new task |
|
|
130
|
-
| \`task_claim\` | Claim a task to work on |
|
|
131
|
-
| \`task_update\` | Update task status or progress |
|
|
132
|
-
| \`task_complete\` | Mark task as completed |
|
|
133
|
-
| \`task_list\` | List tasks with filters |
|
|
134
|
-
| \`is_my_turn\` | Check if work is available |
|
|
135
|
-
|
|
136
|
-
### Resource Locking
|
|
137
|
-
| Tool | Description |
|
|
138
|
-
|------|-------------|
|
|
139
|
-
| \`lock_acquire\` | Acquire a lock on a file/resource |
|
|
140
|
-
| \`lock_release\` | Release a held lock |
|
|
141
|
-
| \`lock_check\` | Check if a resource is locked |
|
|
142
|
-
| \`coordination_status\` | Get overall system status |
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
## Workflow for Main Orchestrator
|
|
147
|
-
|
|
148
|
-
\`\`\`
|
|
149
|
-
1. bootstrap # Start session
|
|
150
|
-
2. memory_set current_focus "..." # Set project focus
|
|
151
|
-
3. task_create "Feature X" # Create tasks
|
|
152
|
-
4. coordination_status # Monitor progress
|
|
153
|
-
\`\`\`
|
|
154
|
-
|
|
155
|
-
## Workflow for Sub-Agents
|
|
156
|
-
|
|
157
|
-
\`\`\`
|
|
158
|
-
1. claim_todo "Feature X" # Register + claim
|
|
159
|
-
2. lock_acquire "src/feature.ts" # Lock before editing
|
|
160
|
-
3. [do the work]
|
|
161
|
-
4. task_complete <task_id> "Done" # Complete the task
|
|
162
|
-
5. agent_unregister # Clean up
|
|
163
|
-
\`\`\`
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## Memory Namespaces
|
|
168
|
-
|
|
169
|
-
Use these namespaces for organization:
|
|
170
|
-
|
|
171
|
-
| Namespace | Purpose | Example Keys |
|
|
172
|
-
|-----------|---------|--------------|
|
|
173
|
-
| \`context\` | Current state and focus | \`current_focus\`, \`current_branch\` |
|
|
174
|
-
| \`decisions\` | Architectural decisions | \`auth_strategy\`, \`db_choice\` |
|
|
175
|
-
| \`findings\` | Analysis results | \`perf_issues\`, \`security_audit\` |
|
|
176
|
-
| \`blockers\` | Issues blocking progress | \`api_down\`, \`missing_deps\` |
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
## Coordination Patterns
|
|
181
|
-
|
|
182
|
-
### Before Editing Files
|
|
183
|
-
\`\`\`
|
|
184
|
-
lock_check: { resource: "src/file.ts" }
|
|
185
|
-
lock_acquire: { resource: "src/file.ts", reason: "Implementing feature" }
|
|
186
|
-
\`\`\`
|
|
187
|
-
|
|
188
|
-
### After Editing Files
|
|
189
|
-
\`\`\`
|
|
190
|
-
lock_release: { resource: "src/file.ts" }
|
|
191
|
-
\`\`\`
|
|
192
|
-
|
|
193
|
-
### Check Before Major Work
|
|
194
|
-
\`\`\`
|
|
195
|
-
is_my_turn
|
|
196
|
-
\`\`\`
|
|
197
|
-
|
|
198
|
-
### When Done
|
|
199
|
-
\`\`\`
|
|
200
|
-
task_complete: { task_id: "<id>", output: "Summary of changes" }
|
|
201
|
-
agent_unregister
|
|
202
|
-
\`\`\`
|
|
203
|
-
|
|
204
|
-
---
|
|
205
|
-
|
|
206
|
-
## Reference activeContext.md
|
|
207
|
-
|
|
208
|
-
Check \`activeContext.md\` for current project state - it's auto-updated.
|
|
86
|
+
Note: \`bootstrap\` is an MCP tool invocation in your agent/IDE, not a terminal command.
|
|
209
87
|
`;
|
|
88
|
+
}
|
|
210
89
|
}
|
|
211
90
|
/**
|
|
212
91
|
* Run the MCP server
|
|
213
92
|
*/
|
|
214
93
|
async function runServer() {
|
|
215
|
-
// Import and start the server
|
|
216
94
|
const { startServer } = await import('../index.js');
|
|
217
95
|
await startServer();
|
|
218
96
|
}
|
|
@@ -225,7 +103,7 @@ function initAgentsMd() {
|
|
|
225
103
|
// 1. Create AGENTS.md
|
|
226
104
|
const agentsMdPath = path.join(cwd, 'AGENTS.md');
|
|
227
105
|
if (!fs.existsSync(agentsMdPath)) {
|
|
228
|
-
fs.writeFileSync(agentsMdPath,
|
|
106
|
+
fs.writeFileSync(agentsMdPath, loadAgentsMdTemplate());
|
|
229
107
|
console.log('✓ Created AGENTS.md');
|
|
230
108
|
}
|
|
231
109
|
else {
|
|
@@ -359,6 +237,10 @@ _No tasks in progress._
|
|
|
359
237
|
|
|
360
238
|
_No pending tasks. Create tasks using the \`task_create\` tool._
|
|
361
239
|
|
|
240
|
+
## Cursor Delegations
|
|
241
|
+
|
|
242
|
+
_No Cursor delegations. Use \`cursor_delegate_task\` or the CLI cursor commands._
|
|
243
|
+
|
|
362
244
|
## Recent Decisions
|
|
363
245
|
|
|
364
246
|
_No decisions recorded. Use \`memory_set\` in namespace "decisions" to record decisions._
|
|
@@ -395,6 +277,21 @@ switch (command) {
|
|
|
395
277
|
process.exit(1);
|
|
396
278
|
});
|
|
397
279
|
break;
|
|
280
|
+
case 'doc':
|
|
281
|
+
try {
|
|
282
|
+
runDocCommand(args.slice(1));
|
|
283
|
+
}
|
|
284
|
+
catch (err) {
|
|
285
|
+
console.error('Doc command error:', err instanceof Error ? err.message : err);
|
|
286
|
+
process.exit(1);
|
|
287
|
+
}
|
|
288
|
+
break;
|
|
289
|
+
case 'cursor':
|
|
290
|
+
runCursorCommand(args.slice(1)).catch((err) => {
|
|
291
|
+
console.error('Cursor command error:', err instanceof Error ? err.message : err);
|
|
292
|
+
process.exit(1);
|
|
293
|
+
});
|
|
294
|
+
break;
|
|
398
295
|
case 'help':
|
|
399
296
|
case '--help':
|
|
400
297
|
case '-h':
|
package/dist/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursorCommands.d.ts","sourceRoot":"","sources":["../../src/bin/cursorCommands.ts"],"names":[],"mappings":"AA2BA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAalD;AAuTD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BpE"}
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import { spawn } from 'child_process';
|
|
2
|
+
import { getDatabase } from '../database.js';
|
|
3
|
+
import { CursorProvider, getCursorMetadata } from '../providers/cursor.js';
|
|
4
|
+
import { TaskStatus } from '../models.js';
|
|
5
|
+
import { writeDelegationBrief, writeDelegationHandoff, writeDelegationSync, } from '../utils/delegationKnowledge.js';
|
|
6
|
+
import { syncToActiveContext } from '../utils/contextSync.js';
|
|
7
|
+
import { getRecoveryDisplayLine } from '../utils/delegationRecovery.js';
|
|
8
|
+
import { generateTaskDocumentation } from '../utils/autoDocumentation.js';
|
|
9
|
+
import { getTaskDelegationContext, recoverDelegatedTask } from '../utils/delegatedTaskRuntime.js';
|
|
10
|
+
function getFlagValue(args, flag) {
|
|
11
|
+
const index = args.indexOf(flag);
|
|
12
|
+
if (index === -1 || index === args.length - 1) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
return args[index + 1];
|
|
16
|
+
}
|
|
17
|
+
function hasFlag(args, flag) {
|
|
18
|
+
return args.includes(flag);
|
|
19
|
+
}
|
|
20
|
+
export function runDocCommand(args) {
|
|
21
|
+
const taskId = getFlagValue(args, '--task');
|
|
22
|
+
if (!taskId) {
|
|
23
|
+
throw new Error('Missing required flag: --task <taskId>');
|
|
24
|
+
}
|
|
25
|
+
const generated = generateTaskDocumentation(getDatabase(), taskId);
|
|
26
|
+
if (!generated) {
|
|
27
|
+
throw new Error(`Task ${taskId} not found.`);
|
|
28
|
+
}
|
|
29
|
+
console.log(`Task doc: ${generated.taskDocPath}`);
|
|
30
|
+
console.log(`Index doc: ${generated.indexDocPath}`);
|
|
31
|
+
}
|
|
32
|
+
async function runCursorCheck() {
|
|
33
|
+
const result = await new CursorProvider(process.cwd()).check();
|
|
34
|
+
console.log(`Cursor available: ${result.available ? 'yes' : 'no'}`);
|
|
35
|
+
console.log(`Binary: ${result.binary}`);
|
|
36
|
+
console.log(`Runtime: ${result.runtime}`);
|
|
37
|
+
console.log(`Version: ${result.version ?? 'unknown'}`);
|
|
38
|
+
console.log(`Features: ${result.features.join(', ') || 'none detected'}`);
|
|
39
|
+
if (result.warnings.length > 0) {
|
|
40
|
+
for (const warning of result.warnings) {
|
|
41
|
+
console.log(`Warning: ${warning}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (!result.available) {
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async function runCursorDelegate(args) {
|
|
49
|
+
const taskId = getFlagValue(args, '--task');
|
|
50
|
+
if (!taskId) {
|
|
51
|
+
throw new Error('Missing required flag: --task <taskId>');
|
|
52
|
+
}
|
|
53
|
+
const db = getDatabase();
|
|
54
|
+
const context = getTaskDelegationContext(db, taskId);
|
|
55
|
+
if (!context) {
|
|
56
|
+
throw new Error(`Task ${taskId} not found.`);
|
|
57
|
+
}
|
|
58
|
+
const { task, currentFocus, decisions, research } = context;
|
|
59
|
+
const provider = new CursorProvider(process.cwd());
|
|
60
|
+
const check = await provider.check();
|
|
61
|
+
if (!check.available) {
|
|
62
|
+
throw new Error(check.warnings.join('\n') || 'Cursor CLI is not available.');
|
|
63
|
+
}
|
|
64
|
+
const delegated = await provider.spawnTask({
|
|
65
|
+
cwd: process.cwd(),
|
|
66
|
+
task,
|
|
67
|
+
currentFocus,
|
|
68
|
+
decisions,
|
|
69
|
+
research,
|
|
70
|
+
mode: getFlagValue(args, '--mode') ?? undefined,
|
|
71
|
+
model: getFlagValue(args, '--model'),
|
|
72
|
+
cloud: hasFlag(args, '--cloud'),
|
|
73
|
+
useWorktree: hasFlag(args, '--worktree') ? true : hasFlag(args, '--no-worktree') ? false : undefined,
|
|
74
|
+
force: hasFlag(args, '--force') ? true : hasFlag(args, '--no-force') ? false : undefined,
|
|
75
|
+
});
|
|
76
|
+
const updated = db.updateTask(task.id, {
|
|
77
|
+
status: TaskStatus.IN_PROGRESS,
|
|
78
|
+
metadata: delegated.metadata,
|
|
79
|
+
});
|
|
80
|
+
if (updated) {
|
|
81
|
+
writeDelegationBrief({
|
|
82
|
+
db,
|
|
83
|
+
task: updated,
|
|
84
|
+
currentFocus,
|
|
85
|
+
decisions,
|
|
86
|
+
research,
|
|
87
|
+
metadata: delegated.metadata,
|
|
88
|
+
});
|
|
89
|
+
generateTaskDocumentation(db, updated.id);
|
|
90
|
+
}
|
|
91
|
+
syncToActiveContext();
|
|
92
|
+
console.log(`Delegated task '${task.title}' to Cursor.`);
|
|
93
|
+
console.log(`Command: ${delegated.command}`);
|
|
94
|
+
console.log(`Chat ID: ${delegated.metadata.providerChatId ?? 'unavailable'}`);
|
|
95
|
+
console.log(`Run log: ${delegated.metadata.providerLogPath ?? 'unavailable'}`);
|
|
96
|
+
if (delegated.warnings.length > 0) {
|
|
97
|
+
for (const warning of delegated.warnings) {
|
|
98
|
+
console.log(`Warning: ${warning}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async function runCursorResume(args) {
|
|
103
|
+
const taskId = getFlagValue(args, '--task');
|
|
104
|
+
if (!taskId) {
|
|
105
|
+
throw new Error('Missing required flag: --task <taskId>');
|
|
106
|
+
}
|
|
107
|
+
const db = getDatabase();
|
|
108
|
+
const context = getTaskDelegationContext(db, taskId);
|
|
109
|
+
if (!context) {
|
|
110
|
+
throw new Error(`Task ${taskId} not found.`);
|
|
111
|
+
}
|
|
112
|
+
const { task, currentFocus, decisions, research, knowledge } = context;
|
|
113
|
+
const metadata = getCursorMetadata(task.metadata);
|
|
114
|
+
if (!metadata) {
|
|
115
|
+
throw new Error(`Task ${taskId} is not delegated to Cursor.`);
|
|
116
|
+
}
|
|
117
|
+
const provider = new CursorProvider(process.cwd());
|
|
118
|
+
const result = await provider.resumeSession({
|
|
119
|
+
cwd: process.cwd(),
|
|
120
|
+
task,
|
|
121
|
+
currentFocus,
|
|
122
|
+
decisions,
|
|
123
|
+
research,
|
|
124
|
+
delegationKnowledge: knowledge,
|
|
125
|
+
metadata,
|
|
126
|
+
});
|
|
127
|
+
console.log(`Resume command: ${result.command}`);
|
|
128
|
+
if (result.prompt) {
|
|
129
|
+
console.log('Resume prompt:');
|
|
130
|
+
console.log(result.prompt);
|
|
131
|
+
}
|
|
132
|
+
if (result.warnings.length > 0) {
|
|
133
|
+
for (const warning of result.warnings) {
|
|
134
|
+
console.log(`Warning: ${warning}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (hasFlag(args, '--exec')) {
|
|
138
|
+
const check = await provider.check();
|
|
139
|
+
const child = spawn(check.binary, result.args, {
|
|
140
|
+
cwd: process.cwd(),
|
|
141
|
+
stdio: 'inherit',
|
|
142
|
+
});
|
|
143
|
+
child.on('exit', (code) => {
|
|
144
|
+
process.exit(code ?? 0);
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async function syncCliDelegatedTask(taskId) {
|
|
149
|
+
const db = getDatabase();
|
|
150
|
+
const task = db.getTask(taskId);
|
|
151
|
+
if (!task) {
|
|
152
|
+
throw new Error(`Task ${taskId} not found.`);
|
|
153
|
+
}
|
|
154
|
+
const metadata = getCursorMetadata(task.metadata);
|
|
155
|
+
if (!metadata) {
|
|
156
|
+
throw new Error(`Task ${taskId} is not delegated to Cursor.`);
|
|
157
|
+
}
|
|
158
|
+
const provider = new CursorProvider(process.cwd());
|
|
159
|
+
const result = await provider.syncTask(metadata);
|
|
160
|
+
const updated = db.updateTask(task.id, {
|
|
161
|
+
metadata: result.metadata,
|
|
162
|
+
status: result.metadata.providerStatus === 'completed'
|
|
163
|
+
? TaskStatus.COMPLETED
|
|
164
|
+
: result.metadata.providerStatus === 'failed'
|
|
165
|
+
? TaskStatus.FAILED
|
|
166
|
+
: undefined,
|
|
167
|
+
output: result.outputSummary ?? task.output ?? undefined,
|
|
168
|
+
});
|
|
169
|
+
if (updated) {
|
|
170
|
+
writeDelegationSync({
|
|
171
|
+
db,
|
|
172
|
+
task: updated,
|
|
173
|
+
metadata: result.metadata,
|
|
174
|
+
outputSummary: result.outputSummary,
|
|
175
|
+
finished: result.finished,
|
|
176
|
+
});
|
|
177
|
+
generateTaskDocumentation(db, updated.id);
|
|
178
|
+
}
|
|
179
|
+
syncToActiveContext();
|
|
180
|
+
return { task, result };
|
|
181
|
+
}
|
|
182
|
+
async function runCursorStatus(args) {
|
|
183
|
+
const taskId = getFlagValue(args, '--task');
|
|
184
|
+
if (!taskId) {
|
|
185
|
+
throw new Error('Missing required flag: --task <taskId>');
|
|
186
|
+
}
|
|
187
|
+
const { task, result } = await syncCliDelegatedTask(taskId);
|
|
188
|
+
console.log(`Task: ${task.title}`);
|
|
189
|
+
console.log(`Provider status: ${result.metadata.providerStatus}`);
|
|
190
|
+
console.log(`Recovery: ${getRecoveryDisplayLine(result.metadata)}`);
|
|
191
|
+
console.log(`Retry count: ${result.metadata.providerRetryCount ?? 0}`);
|
|
192
|
+
if (result.reason) {
|
|
193
|
+
console.log(`Reason: ${result.reason}`);
|
|
194
|
+
}
|
|
195
|
+
if (result.recoveryHints.length > 0) {
|
|
196
|
+
for (const hint of result.recoveryHints) {
|
|
197
|
+
console.log(`Hint: ${hint}`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async function runCursorSync(args) {
|
|
202
|
+
const taskId = getFlagValue(args, '--task');
|
|
203
|
+
if (!taskId) {
|
|
204
|
+
throw new Error('Missing required flag: --task <taskId>');
|
|
205
|
+
}
|
|
206
|
+
const { task, result } = await syncCliDelegatedTask(taskId);
|
|
207
|
+
console.log(`Synced task '${task.title}'.`);
|
|
208
|
+
console.log(`Provider status: ${result.metadata.providerStatus}`);
|
|
209
|
+
console.log(`Recovery: ${getRecoveryDisplayLine(result.metadata)}`);
|
|
210
|
+
if (result.reason) {
|
|
211
|
+
console.log(`Reason: ${result.reason}`);
|
|
212
|
+
}
|
|
213
|
+
if (result.recoveryHints.length > 0) {
|
|
214
|
+
for (const hint of result.recoveryHints) {
|
|
215
|
+
console.log(`Hint: ${hint}`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (result.outputSummary) {
|
|
219
|
+
console.log(`Latest output: ${result.outputSummary}`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
async function runCursorRecover(args) {
|
|
223
|
+
const taskId = getFlagValue(args, '--task');
|
|
224
|
+
if (!taskId) {
|
|
225
|
+
throw new Error('Missing required flag: --task <taskId>');
|
|
226
|
+
}
|
|
227
|
+
const result = await recoverDelegatedTask({
|
|
228
|
+
db: getDatabase(),
|
|
229
|
+
taskId,
|
|
230
|
+
cwd: process.cwd(),
|
|
231
|
+
options: {
|
|
232
|
+
mode: getFlagValue(args, '--mode') ?? undefined,
|
|
233
|
+
model: getFlagValue(args, '--model'),
|
|
234
|
+
cloud: hasFlag(args, '--cloud') ? true : undefined,
|
|
235
|
+
useWorktree: hasFlag(args, '--worktree') ? true : hasFlag(args, '--no-worktree') ? false : undefined,
|
|
236
|
+
force: hasFlag(args, '--force') ? true : undefined,
|
|
237
|
+
},
|
|
238
|
+
});
|
|
239
|
+
if (!result) {
|
|
240
|
+
throw new Error(`Task ${taskId} not found.`);
|
|
241
|
+
}
|
|
242
|
+
if (result.blocked) {
|
|
243
|
+
throw new Error(result.reason ?? 'Recovery blocked.');
|
|
244
|
+
}
|
|
245
|
+
console.log(`Recovered task '${result.task.title}'.`);
|
|
246
|
+
console.log(`Command: ${result.delegated.command}`);
|
|
247
|
+
console.log(`Retry count: ${result.metadata.providerRetryCount ?? 0}`);
|
|
248
|
+
}
|
|
249
|
+
async function runCursorHandoff(args) {
|
|
250
|
+
const taskId = getFlagValue(args, '--task');
|
|
251
|
+
const summary = getFlagValue(args, '--summary');
|
|
252
|
+
if (!taskId || !summary) {
|
|
253
|
+
throw new Error('Missing required flags: --task <taskId> --summary "..."');
|
|
254
|
+
}
|
|
255
|
+
const db = getDatabase();
|
|
256
|
+
const task = db.getTask(taskId);
|
|
257
|
+
if (!task) {
|
|
258
|
+
throw new Error(`Task ${taskId} not found.`);
|
|
259
|
+
}
|
|
260
|
+
const metadata = getCursorMetadata(task.metadata);
|
|
261
|
+
if (!metadata) {
|
|
262
|
+
throw new Error(`Task ${taskId} is not delegated to Cursor.`);
|
|
263
|
+
}
|
|
264
|
+
const findings = getFlagValue(args, '--findings')?.split('||').map((value) => value.trim()).filter(Boolean) ?? [];
|
|
265
|
+
const nextSteps = getFlagValue(args, '--next-steps')?.split('||').map((value) => value.trim()).filter(Boolean) ?? [];
|
|
266
|
+
const blockers = getFlagValue(args, '--blockers')?.split('||').map((value) => value.trim()).filter(Boolean) ?? [];
|
|
267
|
+
writeDelegationHandoff({
|
|
268
|
+
db,
|
|
269
|
+
taskId,
|
|
270
|
+
summary,
|
|
271
|
+
findings,
|
|
272
|
+
nextSteps,
|
|
273
|
+
blockers,
|
|
274
|
+
});
|
|
275
|
+
generateTaskDocumentation(db, task.id);
|
|
276
|
+
syncToActiveContext();
|
|
277
|
+
console.log(`Recorded handoff for '${task.title}'.`);
|
|
278
|
+
}
|
|
279
|
+
function runCursorList() {
|
|
280
|
+
const db = getDatabase();
|
|
281
|
+
const delegatedTasks = db.listTasks().filter((task) => getCursorMetadata(task.metadata));
|
|
282
|
+
if (delegatedTasks.length === 0) {
|
|
283
|
+
console.log('No Cursor delegations found.');
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
for (const task of delegatedTasks) {
|
|
287
|
+
const metadata = getCursorMetadata(task.metadata);
|
|
288
|
+
if (!metadata) {
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
console.log(`${task.title} (${task.id})`);
|
|
292
|
+
console.log(` Status: ${metadata.providerStatus}`);
|
|
293
|
+
console.log(` Mode: ${metadata.providerMode ?? 'agent'}`);
|
|
294
|
+
console.log(` Chat ID: ${metadata.providerChatId ?? 'n/a'}`);
|
|
295
|
+
console.log(` Worktree: ${metadata.providerWorktree ? 'yes' : 'no'}`);
|
|
296
|
+
console.log(` Log: ${metadata.providerLogPath ?? 'n/a'}`);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
export async function runCursorCommand(args) {
|
|
300
|
+
const subcommand = args[0];
|
|
301
|
+
switch (subcommand) {
|
|
302
|
+
case 'check':
|
|
303
|
+
await runCursorCheck();
|
|
304
|
+
return;
|
|
305
|
+
case 'delegate':
|
|
306
|
+
await runCursorDelegate(args.slice(1));
|
|
307
|
+
return;
|
|
308
|
+
case 'status':
|
|
309
|
+
await runCursorStatus(args.slice(1));
|
|
310
|
+
return;
|
|
311
|
+
case 'resume':
|
|
312
|
+
await runCursorResume(args.slice(1));
|
|
313
|
+
return;
|
|
314
|
+
case 'sync':
|
|
315
|
+
await runCursorSync(args.slice(1));
|
|
316
|
+
return;
|
|
317
|
+
case 'recover':
|
|
318
|
+
await runCursorRecover(args.slice(1));
|
|
319
|
+
return;
|
|
320
|
+
case 'handoff':
|
|
321
|
+
await runCursorHandoff(args.slice(1));
|
|
322
|
+
return;
|
|
323
|
+
case 'list':
|
|
324
|
+
runCursorList();
|
|
325
|
+
return;
|
|
326
|
+
default:
|
|
327
|
+
throw new Error(`Unknown cursor subcommand: ${subcommand ?? '(none)'}`);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=cursorCommands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursorCommands.js","sourceRoot":"","sources":["../../src/bin/cursorCommands.ts"],"names":[],"mappings":"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"}
|