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.
Files changed (120) hide show
  1. package/.cursor/rules/orchestrator-auto.mdc +2 -0
  2. package/.cursor/rules/orchestrator-main.mdc +37 -7
  3. package/.cursor/rules/orchestrator-sub.mdc +89 -27
  4. package/README.md +278 -66
  5. package/dist/bin/cli.d.ts +1 -0
  6. package/dist/bin/cli.d.ts.map +1 -1
  7. package/dist/bin/cli.js +54 -157
  8. package/dist/bin/cli.js.map +1 -1
  9. package/dist/bin/cursorCommands.d.ts +3 -0
  10. package/dist/bin/cursorCommands.d.ts.map +1 -0
  11. package/dist/bin/cursorCommands.js +330 -0
  12. package/dist/bin/cursorCommands.js.map +1 -0
  13. package/dist/database.d.ts +32 -1
  14. package/dist/database.d.ts.map +1 -1
  15. package/dist/database.js +105 -5
  16. package/dist/database.js.map +1 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +6 -2
  19. package/dist/index.js.map +1 -1
  20. package/dist/models.d.ts +59 -0
  21. package/dist/models.d.ts.map +1 -1
  22. package/dist/models.js +69 -0
  23. package/dist/models.js.map +1 -1
  24. package/dist/providers/cursor.d.ts +14 -0
  25. package/dist/providers/cursor.d.ts.map +1 -0
  26. package/dist/providers/cursor.js +203 -0
  27. package/dist/providers/cursor.js.map +1 -0
  28. package/dist/providers/types.d.ts +60 -0
  29. package/dist/providers/types.d.ts.map +1 -0
  30. package/dist/providers/types.js +2 -0
  31. package/dist/providers/types.js.map +1 -0
  32. package/dist/tools/agent.d.ts.map +1 -1
  33. package/dist/tools/agent.js +5 -0
  34. package/dist/tools/agent.js.map +1 -1
  35. package/dist/tools/coordination.d.ts.map +1 -1
  36. package/dist/tools/coordination.js +47 -0
  37. package/dist/tools/coordination.js.map +1 -1
  38. package/dist/tools/index.d.ts +3 -0
  39. package/dist/tools/index.d.ts.map +1 -1
  40. package/dist/tools/index.js +3 -0
  41. package/dist/tools/index.js.map +1 -1
  42. package/dist/tools/memory.d.ts.map +1 -1
  43. package/dist/tools/memory.js +6 -1
  44. package/dist/tools/memory.js.map +1 -1
  45. package/dist/tools/provider.d.ts +3 -0
  46. package/dist/tools/provider.d.ts.map +1 -0
  47. package/dist/tools/provider.js +403 -0
  48. package/dist/tools/provider.js.map +1 -0
  49. package/dist/tools/proxy.d.ts +6 -0
  50. package/dist/tools/proxy.d.ts.map +1 -0
  51. package/dist/tools/proxy.js +107 -0
  52. package/dist/tools/proxy.js.map +1 -0
  53. package/dist/tools/research.d.ts +9 -0
  54. package/dist/tools/research.d.ts.map +1 -0
  55. package/dist/tools/research.js +182 -0
  56. package/dist/tools/research.js.map +1 -0
  57. package/dist/tools/task.d.ts.map +1 -1
  58. package/dist/tools/task.js +98 -9
  59. package/dist/tools/task.js.map +1 -1
  60. package/dist/tools/utility.d.ts.map +1 -1
  61. package/dist/tools/utility.js +85 -16
  62. package/dist/tools/utility.js.map +1 -1
  63. package/dist/utils/autoDocumentation.d.ts +8 -0
  64. package/dist/utils/autoDocumentation.d.ts.map +1 -0
  65. package/dist/utils/autoDocumentation.js +140 -0
  66. package/dist/utils/autoDocumentation.js.map +1 -0
  67. package/dist/utils/autoDocumentation.test.d.ts +2 -0
  68. package/dist/utils/autoDocumentation.test.d.ts.map +1 -0
  69. package/dist/utils/autoDocumentation.test.js +47 -0
  70. package/dist/utils/autoDocumentation.test.js.map +1 -0
  71. package/dist/utils/contextSync.d.ts.map +1 -1
  72. package/dist/utils/contextSync.js +21 -1
  73. package/dist/utils/contextSync.js.map +1 -1
  74. package/dist/utils/cursorCli.d.ts +46 -0
  75. package/dist/utils/cursorCli.d.ts.map +1 -0
  76. package/dist/utils/cursorCli.js +176 -0
  77. package/dist/utils/cursorCli.js.map +1 -0
  78. package/dist/utils/cursorCli.test.d.ts +2 -0
  79. package/dist/utils/cursorCli.test.d.ts.map +1 -0
  80. package/dist/utils/cursorCli.test.js +134 -0
  81. package/dist/utils/cursorCli.test.js.map +1 -0
  82. package/dist/utils/delegatedTaskRuntime.d.ts +45 -0
  83. package/dist/utils/delegatedTaskRuntime.d.ts.map +1 -0
  84. package/dist/utils/delegatedTaskRuntime.js +147 -0
  85. package/dist/utils/delegatedTaskRuntime.js.map +1 -0
  86. package/dist/utils/delegationKnowledge.d.ts +51 -0
  87. package/dist/utils/delegationKnowledge.d.ts.map +1 -0
  88. package/dist/utils/delegationKnowledge.js +197 -0
  89. package/dist/utils/delegationKnowledge.js.map +1 -0
  90. package/dist/utils/delegationRecovery.d.ts +17 -0
  91. package/dist/utils/delegationRecovery.d.ts.map +1 -0
  92. package/dist/utils/delegationRecovery.js +63 -0
  93. package/dist/utils/delegationRecovery.js.map +1 -0
  94. package/dist/utils/delegationRecovery.test.d.ts +2 -0
  95. package/dist/utils/delegationRecovery.test.d.ts.map +1 -0
  96. package/dist/utils/delegationRecovery.test.js +42 -0
  97. package/dist/utils/delegationRecovery.test.js.map +1 -0
  98. package/dist/utils/orchestratorConfig.d.ts +19 -0
  99. package/dist/utils/orchestratorConfig.d.ts.map +1 -0
  100. package/dist/utils/orchestratorConfig.js +38 -0
  101. package/dist/utils/orchestratorConfig.js.map +1 -0
  102. package/dist/utils/subprocess.d.ts +27 -0
  103. package/dist/utils/subprocess.d.ts.map +1 -0
  104. package/dist/utils/subprocess.js +84 -0
  105. package/dist/utils/subprocess.js.map +1 -0
  106. package/package.json +17 -5
  107. package/templates/AGENTS.md +164 -0
  108. package/activeContext.md +0 -37
  109. package/src/bin/cli.ts +0 -430
  110. package/src/database.ts +0 -764
  111. package/src/index.ts +0 -71
  112. package/src/models.ts +0 -226
  113. package/src/tools/agent.ts +0 -241
  114. package/src/tools/coordination.ts +0 -152
  115. package/src/tools/index.ts +0 -9
  116. package/src/tools/memory.ts +0 -150
  117. package/src/tools/task.ts +0 -334
  118. package/src/tools/utility.ts +0 -202
  119. package/src/utils/contextSync.ts +0 -144
  120. package/tsconfig.json +0 -20
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Research workflow tools
3
+ *
4
+ * These tools implement the Research-First Workflow, ensuring agents
5
+ * properly understand context, requirements, and design before implementation.
6
+ */
7
+ import { z } from 'zod';
8
+ import { getDatabase } from '../database.js';
9
+ import { TaskComplexity, RESEARCH_REQUIREMENTS } from '../models.js';
10
+ export function registerResearchTools(server) {
11
+ // research_ready
12
+ server.tool('research_ready', 'Mark research as complete for a task. Validates that all required research items are documented based on task complexity. Call this before starting implementation.', {
13
+ task_id: z.string().describe('The task ID to mark as research-ready'),
14
+ }, async ({ task_id }) => {
15
+ const db = getDatabase();
16
+ const result = db.markResearchReady(task_id);
17
+ if (!result.success) {
18
+ return {
19
+ content: [{ type: 'text', text: `❌ ${result.message}` }],
20
+ };
21
+ }
22
+ const lines = [
23
+ '# ✅ Research Complete',
24
+ '',
25
+ `**Task**: ${result.task?.title}`,
26
+ `**Complexity**: ${result.task?.complexity}`,
27
+ '',
28
+ 'You may now proceed with implementation.',
29
+ '',
30
+ 'Next steps:',
31
+ '1. `task_claim` to start working',
32
+ '2. `lock_acquire` on files you\'ll edit',
33
+ '3. Implement the solution',
34
+ '4. `task_complete` when done',
35
+ ];
36
+ return {
37
+ content: [{ type: 'text', text: lines.join('\n') }],
38
+ };
39
+ });
40
+ // research_status
41
+ server.tool('research_status', 'Check research progress for a task. Shows what research is required, completed, and missing based on task complexity.', {
42
+ task_id: z.string().describe('The task ID to check research status for'),
43
+ }, async ({ task_id }) => {
44
+ const db = getDatabase();
45
+ const status = db.getResearchStatus(task_id);
46
+ if (!status.task) {
47
+ return {
48
+ content: [{ type: 'text', text: `Task ${task_id} not found.` }],
49
+ };
50
+ }
51
+ const task = status.task;
52
+ const lines = [
53
+ '# Research Status',
54
+ '',
55
+ `**Task**: ${task.title}`,
56
+ `**Complexity**: ${task.complexity}`,
57
+ `**Research Ready**: ${task.researchReady ? '✅ Yes' : '❌ No'}`,
58
+ '',
59
+ ];
60
+ if (status.required.length === 0) {
61
+ lines.push('_No research required for trivial tasks._');
62
+ }
63
+ else {
64
+ lines.push('## Checklist');
65
+ lines.push('');
66
+ for (const item of status.required) {
67
+ const done = status.completed.includes(item);
68
+ const emoji = done ? '✅' : '⬜';
69
+ const namespace = `research:${task_id}:${item}`;
70
+ lines.push(`${emoji} **${item}** - \`${namespace}\``);
71
+ }
72
+ if (status.missing.length > 0) {
73
+ lines.push('');
74
+ lines.push('## How to Complete');
75
+ lines.push('');
76
+ lines.push('Use `memory_set` to document each missing item:');
77
+ lines.push('');
78
+ lines.push('```');
79
+ lines.push('memory_set:');
80
+ lines.push(` key: "<finding_name>"`);
81
+ lines.push(` value: "<your findings>"`);
82
+ lines.push(` namespace: "research:${task_id}:${status.missing[0]}"`);
83
+ lines.push('```');
84
+ }
85
+ }
86
+ // Show existing research
87
+ const research = db.getTaskResearch(task_id);
88
+ const categories = Object.keys(research);
89
+ if (categories.length > 0) {
90
+ lines.push('');
91
+ lines.push('## Documented Research');
92
+ for (const category of categories) {
93
+ lines.push('');
94
+ lines.push(`### ${category}`);
95
+ for (const entry of research[category]) {
96
+ const valueStr = typeof entry.value === 'string'
97
+ ? entry.value.slice(0, 100)
98
+ : JSON.stringify(entry.value).slice(0, 100);
99
+ lines.push(`- **${entry.key}**: ${valueStr}${valueStr.length >= 100 ? '...' : ''}`);
100
+ }
101
+ }
102
+ }
103
+ return {
104
+ content: [{ type: 'text', text: lines.join('\n') }],
105
+ };
106
+ });
107
+ // research_query
108
+ server.tool('research_query', 'Search past research findings across all tasks. Useful for finding relevant context from previous work.', {
109
+ query: z.string().describe('Search term to find in research findings'),
110
+ limit: z.number().optional().default(10).describe('Maximum results to return'),
111
+ }, async ({ query, limit }) => {
112
+ const db = getDatabase();
113
+ const results = db.searchResearch(query, limit);
114
+ if (results.length === 0) {
115
+ return {
116
+ content: [{ type: 'text', text: `No research findings match "${query}".` }],
117
+ };
118
+ }
119
+ const lines = [
120
+ `# Research Results for "${query}"`,
121
+ '',
122
+ `Found ${results.length} result(s):`,
123
+ '',
124
+ ];
125
+ for (const entry of results) {
126
+ // Parse namespace to get task ID and category
127
+ const parts = entry.namespace.split(':');
128
+ const taskId = parts[1] || 'unknown';
129
+ const category = parts[2] || 'unknown';
130
+ const valueStr = typeof entry.value === 'string'
131
+ ? entry.value.slice(0, 150)
132
+ : JSON.stringify(entry.value).slice(0, 150);
133
+ lines.push(`### ${entry.key}`);
134
+ lines.push(`- **Task**: \`${taskId.slice(0, 8)}...\``);
135
+ lines.push(`- **Category**: ${category}`);
136
+ lines.push(`- **Value**: ${valueStr}${valueStr.length >= 150 ? '...' : ''}`);
137
+ lines.push('');
138
+ }
139
+ return {
140
+ content: [{ type: 'text', text: lines.join('\n') }],
141
+ };
142
+ });
143
+ // research_checklist
144
+ server.tool('research_checklist', 'Get the research checklist for a specific complexity level. Shows what needs to be documented before implementation.', {
145
+ complexity: z
146
+ .enum(['trivial', 'simple', 'moderate', 'complex'])
147
+ .optional()
148
+ .describe('Complexity level. If omitted, shows all levels.'),
149
+ }, async ({ complexity }) => {
150
+ const lines = ['# Research Checklists', ''];
151
+ const levels = complexity
152
+ ? [complexity]
153
+ : [TaskComplexity.TRIVIAL, TaskComplexity.SIMPLE, TaskComplexity.MODERATE, TaskComplexity.COMPLEX];
154
+ for (const level of levels) {
155
+ const requirements = RESEARCH_REQUIREMENTS[level];
156
+ lines.push(`## ${level.charAt(0).toUpperCase() + level.slice(1)}`);
157
+ lines.push('');
158
+ if (requirements.length === 0) {
159
+ lines.push('_No research required - can proceed directly to implementation._');
160
+ }
161
+ else {
162
+ for (const req of requirements) {
163
+ const descriptions = {
164
+ context: 'Understand the current state, existing patterns, and project context',
165
+ files: 'Identify all files that will be affected by this change',
166
+ requirements: 'Document specs, acceptance criteria, and edge cases',
167
+ design: 'Make architecture decisions and document component structure',
168
+ };
169
+ lines.push(`- **${req}**: ${descriptions[req] || req}`);
170
+ }
171
+ }
172
+ lines.push('');
173
+ }
174
+ lines.push('---');
175
+ lines.push('');
176
+ lines.push('Use `memory_set` with namespace `research:<task_id>:<category>` to document each item.');
177
+ return {
178
+ content: [{ type: 'text', text: lines.join('\n') }],
179
+ };
180
+ });
181
+ }
182
+ //# sourceMappingURL=research.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/tools/research.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/tools/task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmUzD"}
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/tools/task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsazD"}
@@ -3,11 +3,13 @@
3
3
  */
4
4
  import { z } from 'zod';
5
5
  import { getDatabase } from '../database.js';
6
- import { TaskStatus } from '../models.js';
6
+ import { TaskStatus, RESEARCH_REQUIREMENTS } from '../models.js';
7
7
  import { getCurrentAgentId } from './agent.js';
8
+ import { syncToActiveContext } from '../utils/contextSync.js';
9
+ import { generateTaskDocumentation } from '../utils/autoDocumentation.js';
8
10
  export function registerTaskTools(server) {
9
11
  // task_create
10
- server.tool('task_create', 'Create a new task in the task queue.', {
12
+ server.tool('task_create', 'Create a new task in the task queue. Complexity is auto-detected from title/description but can be overridden.', {
11
13
  title: z.string().describe('Short title for the task'),
12
14
  description: z.string().optional().default('').describe('Detailed description'),
13
15
  priority: z
@@ -15,38 +17,54 @@ export function registerTaskTools(server) {
15
17
  .optional()
16
18
  .default('normal')
17
19
  .describe('Priority level'),
20
+ complexity: z
21
+ .enum(['trivial', 'simple', 'moderate', 'complex'])
22
+ .optional()
23
+ .describe('Task complexity (auto-detected if not provided). Determines research requirements.'),
18
24
  assigned_to: z.string().optional().describe('Agent ID to assign to'),
19
25
  dependencies: z
20
26
  .array(z.string())
21
27
  .optional()
22
28
  .default([])
23
29
  .describe('List of task IDs that must complete first'),
24
- }, async ({ title, description, priority, assigned_to, dependencies }) => {
30
+ }, async ({ title, description, priority, complexity, assigned_to, dependencies }) => {
25
31
  const agentId = getCurrentAgentId();
26
32
  const task = getDatabase().createTask({
27
33
  title,
28
34
  description,
29
35
  priority: priority,
36
+ complexity: complexity,
30
37
  createdBy: agentId,
31
38
  assignedTo: assigned_to ?? null,
32
39
  dependencies,
33
40
  });
41
+ // Keep activeContext.md up-to-date (if enabled)
42
+ syncToActiveContext();
43
+ const requirements = RESEARCH_REQUIREMENTS[task.complexity];
44
+ const researchInfo = requirements.length > 0
45
+ ? `\n\n**Research required** (${task.complexity}): ${requirements.join(', ')}\nUse \`research_status ${task.id}\` to see checklist.`
46
+ : '\n\n_No research required (trivial task)._';
34
47
  return {
35
48
  content: [
36
49
  {
37
50
  type: 'text',
38
- text: `Task created: '${task.title}' (\`${task.id}\`)`,
51
+ text: `Task created: '${task.title}' (\`${task.id}\`)\n**Complexity**: ${task.complexity}${researchInfo}`,
39
52
  },
40
53
  ],
41
54
  };
42
55
  });
43
56
  // task_claim
44
- server.tool('task_claim', 'Claim a task to work on it. Sets status to in_progress.', {
57
+ server.tool('task_claim', 'Claim a task to work on it. Sets status to in_progress. Requires research to be complete for non-trivial tasks.', {
45
58
  task_id: z
46
59
  .string()
47
60
  .optional()
48
61
  .describe('Task ID to claim. If omitted, claims the next available task.'),
49
- }, async ({ task_id }) => {
62
+ skip_research: z
63
+ .boolean()
64
+ .optional()
65
+ .default(false)
66
+ .describe('Force claim without research (not recommended). Use only for urgent fixes.'),
67
+ }, async ({ task_id, skip_research }) => {
50
68
  const agentId = getCurrentAgentId();
51
69
  if (!agentId) {
52
70
  return {
@@ -77,17 +95,61 @@ export function registerTaskTools(server) {
77
95
  content: [{ type: 'text', text: `Cannot claim: dependencies not met.` }],
78
96
  };
79
97
  }
98
+ // Check research gate (unless skipped or trivial)
99
+ const requirements = RESEARCH_REQUIREMENTS[task.complexity];
100
+ if (!skip_research && requirements.length > 0 && !task.researchReady) {
101
+ const status = db.getResearchStatus(task.id);
102
+ const lines = [
103
+ '❌ **Cannot claim: Research not complete**',
104
+ '',
105
+ `**Task**: ${task.title}`,
106
+ `**Complexity**: ${task.complexity}`,
107
+ '',
108
+ '## Required Research',
109
+ ];
110
+ for (const req of requirements) {
111
+ const done = status.completed.includes(req);
112
+ lines.push(`${done ? '✅' : '⬜'} ${req}`);
113
+ }
114
+ if (status.missing.length > 0) {
115
+ lines.push('');
116
+ lines.push('## How to Complete');
117
+ lines.push('');
118
+ lines.push('1. Document each missing item with `memory_set`:');
119
+ lines.push('```');
120
+ lines.push(`memory_set key="<finding>" value="<details>" namespace="research:${task.id}:${status.missing[0]}"`);
121
+ lines.push('```');
122
+ lines.push('');
123
+ lines.push('2. Mark research complete:');
124
+ lines.push('```');
125
+ lines.push(`research_ready task_id="${task.id}"`);
126
+ lines.push('```');
127
+ lines.push('');
128
+ lines.push('3. Then claim the task again.');
129
+ lines.push('');
130
+ lines.push('_Use `skip_research: true` to bypass (not recommended)._');
131
+ }
132
+ return {
133
+ content: [{ type: 'text', text: lines.join('\n') }],
134
+ };
135
+ }
80
136
  // Claim it
81
137
  const updated = db.updateTask(task.id, {
82
138
  status: TaskStatus.IN_PROGRESS,
83
139
  assignedTo: agentId,
84
140
  });
85
141
  if (updated) {
142
+ generateTaskDocumentation(db, updated.id);
143
+ // Keep activeContext.md up-to-date (if enabled)
144
+ syncToActiveContext();
145
+ const skippedWarning = skip_research && requirements.length > 0 && !task.researchReady
146
+ ? '\n\n⚠️ _Research was skipped. Consider documenting findings as you work._'
147
+ : '';
86
148
  return {
87
149
  content: [
88
150
  {
89
151
  type: 'text',
90
- text: `Claimed task: '${updated.title}' (\`${updated.id}\`)`,
152
+ text: `Claimed task: '${updated.title}' (\`${updated.id}\`)${skippedWarning}`,
91
153
  },
92
154
  ],
93
155
  };
@@ -120,6 +182,8 @@ export function registerTaskTools(server) {
120
182
  metadata,
121
183
  });
122
184
  if (updated) {
185
+ // Keep activeContext.md up-to-date (if enabled)
186
+ syncToActiveContext();
123
187
  const statusInfo = status ? ` → ${status}` : '';
124
188
  const progressInfo = progress !== undefined ? ` (${progress}%)` : '';
125
189
  return {
@@ -152,6 +216,8 @@ export function registerTaskTools(server) {
152
216
  output,
153
217
  });
154
218
  if (updated) {
219
+ // Keep activeContext.md up-to-date (if enabled)
220
+ syncToActiveContext();
155
221
  return {
156
222
  content: [
157
223
  {
@@ -199,8 +265,9 @@ export function registerTaskTools(server) {
199
265
  failed: '❌',
200
266
  cancelled: '🚫',
201
267
  }[task.status];
202
- lines.push(`${emoji} **${task.title}** (\`${task.id.slice(0, 8)}...\`)`);
203
- lines.push(` Status: ${task.status} | Assigned: ${task.assignedTo || 'none'}`);
268
+ const researchIcon = task.researchReady ? '📚' : (RESEARCH_REQUIREMENTS[task.complexity].length > 0 ? '🔬' : '');
269
+ lines.push(`${emoji} **${task.title}** (\`${task.id.slice(0, 8)}...\`) ${researchIcon}`);
270
+ lines.push(` Status: ${task.status} | Complexity: ${task.complexity} | Research: ${task.researchReady ? 'ready' : 'pending'}`);
204
271
  }
205
272
  return {
206
273
  content: [{ type: 'text', text: lines.join('\n') }],
@@ -247,6 +314,17 @@ export function registerTaskTools(server) {
247
314
  content: [{ type: 'text', text: 'No - already completed.' }],
248
315
  };
249
316
  }
317
+ const requirements = RESEARCH_REQUIREMENTS[task.complexity];
318
+ if (requirements.length > 0 && !task.researchReady) {
319
+ return {
320
+ content: [
321
+ {
322
+ type: 'text',
323
+ text: `Yes - task is assigned to you, but research is not complete. Use research_status task_id="${task.id}" then research_ready, then task_claim.`,
324
+ },
325
+ ],
326
+ };
327
+ }
250
328
  return {
251
329
  content: [{ type: 'text', text: 'Yes - task is ready for you. Use task_claim to start.' }],
252
330
  };
@@ -254,6 +332,17 @@ export function registerTaskTools(server) {
254
332
  else {
255
333
  const available = db.getNextAvailableTask(agentId);
256
334
  if (available) {
335
+ const requirements = RESEARCH_REQUIREMENTS[available.complexity];
336
+ if (requirements.length > 0 && !available.researchReady) {
337
+ return {
338
+ content: [
339
+ {
340
+ type: 'text',
341
+ text: `Yes - '${available.title}' is available, but research is required before you can claim it. Use research_status task_id="${available.id}" then research_ready, then task_claim.`,
342
+ },
343
+ ],
344
+ };
345
+ }
257
346
  return {
258
347
  content: [{ type: 'text', text: `Yes - '${available.title}' is available.` }],
259
348
  };
@@ -1 +1 @@
1
- {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/tools/task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAgB,UAAU,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,cAAc;IACd,MAAM,CAAC,IAAI,CACT,aAAa,EACb,sCAAsC,EACtC;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACtD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAC/E,QAAQ,EAAE,CAAC;aACR,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;aACzC,QAAQ,EAAE;aACV,OAAO,CAAC,QAAQ,CAAC;aACjB,QAAQ,CAAC,gBAAgB,CAAC;QAC7B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACpE,YAAY,EAAE,CAAC;aACZ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,EAAE;aACV,OAAO,CAAC,EAAE,CAAC;aACX,QAAQ,CAAC,2CAA2C,CAAC;KACzD,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,EAAE;QACpE,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QAEpC,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC,UAAU,CAAC;YACpC,KAAK;YACL,WAAW;YACX,QAAQ,EAAE,QAAwB;YAClC,SAAS,EAAE,OAAO;YAClB,UAAU,EAAE,WAAW,IAAI,IAAI;YAC/B,YAAY;SACb,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,kBAAkB,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,EAAE,KAAK;iBACvD;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,aAAa;IACb,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,yDAAyD,EACzD;QACE,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,+DAA+D,CAAC;KAC7E,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;aAC5D,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC;QAET,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,OAAO,aAAa,EAAE,CAAC;iBAChE,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;iBAClE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACtC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qCAAqC,EAAE,CAAC;aACzE,CAAC;QACJ,CAAC;QAED,WAAW;QACX,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE;YACrC,MAAM,EAAE,UAAU,CAAC,WAAW;YAC9B,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,kBAAkB,OAAO,CAAC,KAAK,QAAQ,OAAO,CAAC,EAAE,KAAK;qBAC7D;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC;SAC3D,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,cAAc;IACd,MAAM,CAAC,IAAI,CACT,aAAa,EACb,mCAAmC,EACnC;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACrD,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;aAChF,QAAQ,EAAE;aACV,QAAQ,CAAC,YAAY,CAAC;QACzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACvF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KAC1D,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;QAC9C,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEjC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,OAAO,aAAa,EAAE,CAAC;aAChE,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAEnE,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE;YACrC,MAAM,EAAE,MAAgC;YACxC,MAAM;YACN,QAAQ;SACT,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,MAAM,YAAY,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAErE,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,iBAAiB,OAAO,CAAC,KAAK,IAAI,UAAU,GAAG,YAAY,EAAE;qBACpE;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;SAC5D,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,gBAAgB;IAChB,MAAM,CAAC,IAAI,CACT,eAAe,EACf,gDAAgD,EAChD;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACvD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KACnE,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5B,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEjC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,OAAO,aAAa,EAAE,CAAC;aAChE,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE;YACrC,MAAM,EAAE,UAAU,CAAC,SAAS;YAC5B,MAAM;SACP,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,sBAAsB,OAAO,CAAC,KAAK,GAAG;qBAC7C;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC;SAC9D,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,YAAY;IACZ,MAAM,CAAC,IAAI,CACT,WAAW,EACX,mCAAmC,EACnC;QACE,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;aAChF,QAAQ,EAAE;aACV,QAAQ,CAAC,kBAAkB,CAAC;QAC/B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QAC1E,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KAC5D,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QAEzB,IAAI,QAAQ,GAAG,WAAW,CAAC;QAC3B,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;YACpB,QAAQ,GAAG,OAAO,CAAC;QACrB,CAAC;QAED,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC;YACzB,MAAM,EAAE,MAAgC;YACxC,UAAU,EAAE,QAAQ;SACrB,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;aACrD,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC;QAE5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG;gBACZ,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,GAAG;gBACd,MAAM,EAAE,GAAG;gBACX,SAAS,EAAE,IAAI;aAChB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEf,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,MAAM,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YACzE,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,MAAM,gBAAgB,IAAI,CAAC,UAAU,IAAI,MAAM,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SACpD,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,aAAa;IACb,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,oEAAoE,EACpE;QACE,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,kEAAkE,CAAC;KAChF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;aAC5D,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QAEzB,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,OAAO,aAAa,EAAE,CAAC;iBAChE,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;gBAChC,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,oBAAoB,IAAI,CAAC,UAAU,IAAI,QAAQ,GAAG;yBACzD;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtC,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,EAAE,CAAC;iBACpE,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,SAAS,EAAE,CAAC;gBACzC,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC;iBAC7D,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uDAAuD,EAAE,CAAC;aAC3F,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,SAAS,CAAC,KAAK,iBAAiB,EAAE,CAAC;iBAC9E,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/tools/task.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utility.d.ts","sourceRoot":"","sources":["../../src/tools/utility.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2L5D"}
1
+ {"version":3,"file":"utility.d.ts","sourceRoot":"","sources":["../../src/tools/utility.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmQ5D"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { z } from 'zod';
5
5
  import { getDatabase } from '../database.js';
6
- import { AgentRole, AgentStatus, TaskStatus } from '../models.js';
6
+ import { AgentRole, AgentStatus, TaskStatus, RESEARCH_REQUIREMENTS } from '../models.js';
7
7
  import { setCurrentAgent, } from './agent.js';
8
8
  import { syncToActiveContext } from '../utils/contextSync.js';
9
9
  export function registerUtilityTools(server) {
@@ -94,7 +94,7 @@ export function registerUtilityTools(server) {
94
94
  };
95
95
  });
96
96
  // claim_todo
97
- server.tool('claim_todo', 'FOR SUB-AGENTS: Register yourself AND claim a specific task in one call. Use this when you were spawned to work on a specific todo. This creates the task if it doesn\'t exist, then claims it for you.', {
97
+ server.tool('claim_todo', 'FOR SUB-AGENTS: Register yourself AND claim a specific task in one call. Use this when you were spawned to work on a specific todo. This creates the task if it doesn\'t exist. Shows research checklist based on complexity.', {
98
98
  title: z.string().describe('The title of the todo/task you were spawned to work on'),
99
99
  description: z.string().optional().default('').describe('Additional details about the task'),
100
100
  priority: z
@@ -102,7 +102,11 @@ export function registerUtilityTools(server) {
102
102
  .optional()
103
103
  .default('normal')
104
104
  .describe('Priority level'),
105
- }, async ({ title, description, priority }) => {
105
+ complexity: z
106
+ .enum(['trivial', 'simple', 'moderate', 'complex'])
107
+ .optional()
108
+ .describe('Task complexity (auto-detected if not provided). Determines research requirements.'),
109
+ }, async ({ title, description, priority, complexity }) => {
106
110
  const db = getDatabase();
107
111
  // Generate agent name
108
112
  const agentName = `sub-${Date.now()}`;
@@ -111,49 +115,114 @@ export function registerUtilityTools(server) {
111
115
  name: agentName,
112
116
  role: AgentRole.SUB,
113
117
  capabilities: ['code'],
114
- status: AgentStatus.BUSY, // Already working
118
+ status: AgentStatus.ACTIVE, // Active, not busy yet (need to do research first)
115
119
  });
116
120
  setCurrentAgent(agent.id, agent.name);
117
121
  // Check if a task with this title already exists and is pending
118
122
  const allTasks = db.listTasks();
119
123
  let task = allTasks.find((t) => t.title.toLowerCase().trim() === title.toLowerCase().trim() &&
120
124
  ['pending', 'assigned'].includes(t.status));
125
+ let isNewTask = false;
121
126
  if (task) {
122
- // Claim the existing task
127
+ // Assign the existing task to this agent (but don't start yet if research needed)
123
128
  task = db.updateTask(task.id, {
124
129
  assignedTo: agent.id,
125
- status: TaskStatus.IN_PROGRESS,
130
+ status: TaskStatus.ASSIGNED,
126
131
  });
127
132
  }
128
133
  else {
129
- // Create a new task and claim it
134
+ // Create a new task (assigned, not in_progress)
135
+ isNewTask = true;
130
136
  task = db.createTask({
131
137
  title,
132
138
  description,
133
139
  priority: priority,
134
- status: TaskStatus.IN_PROGRESS,
140
+ complexity: complexity,
141
+ status: TaskStatus.ASSIGNED,
135
142
  assignedTo: agent.id,
136
143
  createdBy: agent.id,
137
- startedAt: new Date(),
138
144
  });
139
145
  }
140
146
  // Sync context
141
147
  syncToActiveContext();
148
+ // Get research requirements
149
+ const requirements = RESEARCH_REQUIREMENTS[task.complexity];
150
+ const researchStatus = db.getResearchStatus(task.id);
142
151
  const lines = [
143
152
  '# Task Claimed',
144
153
  '',
145
154
  `**You are**: ${agent.name} (\`${agent.id}\`)`,
146
155
  `**Working on**: ${task.title}`,
147
156
  `**Task ID**: \`${task.id}\``,
157
+ `**Complexity**: ${task.complexity}`,
148
158
  '',
149
- '---',
150
- '',
151
- 'Now you can start working. Remember to:',
152
- '1. `lock_acquire` on any files you edit',
153
- '2. `task_update` to report progress',
154
- '3. `task_complete` when done',
155
- '4. `agent_unregister` when finished',
156
159
  ];
160
+ // Show research checklist based on complexity
161
+ if (requirements.length === 0) {
162
+ // Trivial task - no research needed
163
+ lines.push('## ✅ No Research Required');
164
+ lines.push('');
165
+ lines.push('This is a trivial task. You can start working immediately.');
166
+ lines.push('');
167
+ lines.push('**Next steps:**');
168
+ lines.push('1. `task_claim` to start working');
169
+ lines.push('2. `lock_acquire` on any files you edit');
170
+ lines.push('3. Implement the solution');
171
+ lines.push('4. `task_complete` when done');
172
+ lines.push('5. `agent_unregister` when finished');
173
+ }
174
+ else if (researchStatus.isReady) {
175
+ // Research already done
176
+ lines.push('## ✅ Research Complete');
177
+ lines.push('');
178
+ lines.push('Research has already been documented. You can start working.');
179
+ lines.push('');
180
+ lines.push('**Next steps:**');
181
+ lines.push('1. `task_claim` to start working');
182
+ lines.push('2. `lock_acquire` on any files you edit');
183
+ lines.push('3. Implement the solution');
184
+ lines.push('4. `task_complete` when done');
185
+ }
186
+ else {
187
+ // Research needed
188
+ lines.push('## 🔬 Research Required');
189
+ lines.push('');
190
+ lines.push('Before implementing, document your research:');
191
+ lines.push('');
192
+ const descriptions = {
193
+ context: 'Understand the current state, existing patterns, and project context',
194
+ files: 'Identify all files that will be affected by this change',
195
+ requirements: 'Document specs, acceptance criteria, and edge cases',
196
+ design: 'Make architecture decisions and document component structure',
197
+ };
198
+ for (const req of requirements) {
199
+ const done = researchStatus.completed.includes(req);
200
+ const emoji = done ? '✅' : '⬜';
201
+ lines.push(`${emoji} **${req}**: ${descriptions[req] || req}`);
202
+ }
203
+ lines.push('');
204
+ lines.push('### How to Document Research');
205
+ lines.push('');
206
+ lines.push('Use `memory_set` for each item:');
207
+ lines.push('```');
208
+ lines.push('memory_set:');
209
+ lines.push(' key: "<finding_name>"');
210
+ lines.push(' value: "<your findings>"');
211
+ lines.push(` namespace: "research:${task.id}:<category>"`);
212
+ lines.push('```');
213
+ lines.push('');
214
+ lines.push('### When Done');
215
+ lines.push('');
216
+ lines.push('1. Mark research complete:');
217
+ lines.push('```');
218
+ lines.push(`research_ready task_id="${task.id}"`);
219
+ lines.push('```');
220
+ lines.push('');
221
+ lines.push('2. Then claim to start implementation:');
222
+ lines.push('```');
223
+ lines.push(`task_claim task_id="${task.id}"`);
224
+ lines.push('```');
225
+ }
157
226
  return {
158
227
  content: [{ type: 'text', text: lines.join('\n') }],
159
228
  };