@alexnetrebskii/hive-agent 0.24.0 → 0.25.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 (61) hide show
  1. package/dist/agent.d.ts +2 -2
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +48 -360
  4. package/dist/agent.js.map +1 -1
  5. package/dist/executor.d.ts +1 -1
  6. package/dist/executor.d.ts.map +1 -1
  7. package/dist/index.d.ts +2 -2
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +6 -2
  10. package/dist/index.js.map +1 -1
  11. package/dist/prompt/index.d.ts +10 -0
  12. package/dist/prompt/index.d.ts.map +1 -0
  13. package/dist/prompt/index.js +11 -0
  14. package/dist/prompt/index.js.map +1 -0
  15. package/dist/prompt/main-agent-builder.d.ts +92 -0
  16. package/dist/prompt/main-agent-builder.d.ts.map +1 -0
  17. package/dist/prompt/main-agent-builder.js +244 -0
  18. package/dist/prompt/main-agent-builder.js.map +1 -0
  19. package/dist/prompt/sub-agent-builder.d.ts +137 -0
  20. package/dist/prompt/sub-agent-builder.d.ts.map +1 -0
  21. package/dist/prompt/sub-agent-builder.js +342 -0
  22. package/dist/prompt/sub-agent-builder.js.map +1 -0
  23. package/dist/prompt/templates.d.ts +87 -0
  24. package/dist/prompt/templates.d.ts.map +1 -0
  25. package/dist/prompt/templates.js +338 -0
  26. package/dist/prompt/templates.js.map +1 -0
  27. package/dist/prompt/types.d.ts +159 -0
  28. package/dist/prompt/types.d.ts.map +1 -0
  29. package/dist/prompt/types.js +5 -0
  30. package/dist/prompt/types.js.map +1 -0
  31. package/dist/prompt.d.ts +1 -0
  32. package/dist/prompt.d.ts.map +1 -1
  33. package/dist/prompt.js +2 -0
  34. package/dist/prompt.js.map +1 -1
  35. package/dist/providers/dataset/recorder.d.ts.map +1 -1
  36. package/dist/providers/dataset/recorder.js +8 -2
  37. package/dist/providers/dataset/recorder.js.map +1 -1
  38. package/dist/tools/ask-user.d.ts +11 -0
  39. package/dist/tools/ask-user.d.ts.map +1 -0
  40. package/dist/tools/ask-user.js +88 -0
  41. package/dist/tools/ask-user.js.map +1 -0
  42. package/dist/tools/index.d.ts +10 -0
  43. package/dist/tools/index.d.ts.map +1 -0
  44. package/dist/tools/index.js +14 -0
  45. package/dist/tools/index.js.map +1 -0
  46. package/dist/tools/output.d.ts +15 -0
  47. package/dist/tools/output.d.ts.map +1 -0
  48. package/dist/tools/output.js +40 -0
  49. package/dist/tools/output.js.map +1 -0
  50. package/dist/tools/task.d.ts +25 -0
  51. package/dist/tools/task.d.ts.map +1 -0
  52. package/dist/tools/task.js +292 -0
  53. package/dist/tools/task.js.map +1 -0
  54. package/dist/{todo.d.ts → tools/todo.d.ts} +1 -1
  55. package/dist/tools/todo.d.ts.map +1 -0
  56. package/dist/tools/todo.js +476 -0
  57. package/dist/tools/todo.js.map +1 -0
  58. package/package.json +1 -1
  59. package/dist/todo.d.ts.map +0 -1
  60. package/dist/todo.js +0 -325
  61. package/dist/todo.js.map +0 -1
package/dist/todo.js DELETED
@@ -1,325 +0,0 @@
1
- /**
2
- * Todo List Management
3
- *
4
- * Provides todo list functionality for agents to track and execute tasks.
5
- */
6
- /**
7
- * Generate unique ID for todo items
8
- */
9
- function generateId() {
10
- return Math.random().toString(36).substring(2, 9);
11
- }
12
- /**
13
- * Format todo list for display
14
- */
15
- export function formatTodoList(todos) {
16
- if (todos.length === 0) {
17
- return 'No tasks in the todo list.';
18
- }
19
- const statusEmoji = {
20
- pending: '⬜',
21
- in_progress: '🔄',
22
- completed: '✅'
23
- };
24
- return todos
25
- .map((todo, index) => {
26
- const emoji = statusEmoji[todo.status];
27
- // Show activeForm when in_progress, otherwise show content
28
- const label = todo.status === 'in_progress' && todo.activeForm
29
- ? todo.activeForm
30
- : todo.content;
31
- return `${index + 1}. ${emoji} ${label}`;
32
- })
33
- .join('\n');
34
- }
35
- /**
36
- * Create the TodoManager class for tracking todos during execution
37
- */
38
- export class TodoManager {
39
- items = new Map();
40
- currentTaskId;
41
- /**
42
- * Get all todo items
43
- */
44
- getAll() {
45
- return Array.from(this.items.values());
46
- }
47
- /**
48
- * Get current task being worked on
49
- */
50
- getCurrentTask() {
51
- if (!this.currentTaskId)
52
- return undefined;
53
- return this.items.get(this.currentTaskId);
54
- }
55
- /**
56
- * Add a new todo item
57
- */
58
- add(content, activeForm) {
59
- const item = {
60
- id: generateId(),
61
- content,
62
- activeForm,
63
- status: 'pending',
64
- createdAt: Date.now()
65
- };
66
- this.items.set(item.id, item);
67
- return item;
68
- }
69
- /**
70
- * Set multiple todos at once (replaces existing)
71
- */
72
- setAll(todos) {
73
- this.items.clear();
74
- this.currentTaskId = undefined;
75
- const items = todos.map(todo => {
76
- const item = {
77
- id: generateId(),
78
- content: todo.content,
79
- activeForm: todo.activeForm,
80
- status: todo.status || 'pending',
81
- createdAt: Date.now()
82
- };
83
- this.items.set(item.id, item);
84
- return item;
85
- });
86
- // Set first pending as in_progress
87
- const firstPending = items.find(i => i.status === 'pending');
88
- if (firstPending) {
89
- firstPending.status = 'in_progress';
90
- this.currentTaskId = firstPending.id;
91
- }
92
- return items;
93
- }
94
- /**
95
- * Mark a todo as in progress
96
- */
97
- startTask(id) {
98
- const item = this.items.get(id);
99
- if (!item)
100
- return undefined;
101
- // Mark previous current as pending if not completed
102
- if (this.currentTaskId && this.currentTaskId !== id) {
103
- const current = this.items.get(this.currentTaskId);
104
- if (current && current.status === 'in_progress') {
105
- current.status = 'pending';
106
- }
107
- }
108
- item.status = 'in_progress';
109
- this.currentTaskId = id;
110
- return item;
111
- }
112
- /**
113
- * Mark a todo as completed and start next
114
- */
115
- completeTask(id) {
116
- const item = this.items.get(id);
117
- if (!item)
118
- return undefined;
119
- item.status = 'completed';
120
- item.completedAt = Date.now();
121
- if (this.currentTaskId === id) {
122
- this.currentTaskId = undefined;
123
- }
124
- // Find and start next pending task
125
- const nextPending = Array.from(this.items.values()).find(i => i.status === 'pending');
126
- if (nextPending) {
127
- nextPending.status = 'in_progress';
128
- this.currentTaskId = nextPending.id;
129
- return { completed: item, next: nextPending };
130
- }
131
- return { completed: item };
132
- }
133
- /**
134
- * Complete current task and move to next
135
- */
136
- completeCurrentAndNext() {
137
- if (!this.currentTaskId) {
138
- // No current task, find first pending
139
- const pending = Array.from(this.items.values()).find(i => i.status === 'pending');
140
- if (pending) {
141
- pending.status = 'in_progress';
142
- this.currentTaskId = pending.id;
143
- return { next: pending };
144
- }
145
- return {};
146
- }
147
- return this.completeTask(this.currentTaskId) || {};
148
- }
149
- /**
150
- * Check if all tasks are completed
151
- */
152
- isAllCompleted() {
153
- return Array.from(this.items.values()).every(i => i.status === 'completed');
154
- }
155
- /**
156
- * Get progress stats
157
- */
158
- getProgress() {
159
- const items = Array.from(this.items.values());
160
- return {
161
- total: items.length,
162
- completed: items.filter(i => i.status === 'completed').length,
163
- pending: items.filter(i => i.status === 'pending').length,
164
- inProgress: items.filter(i => i.status === 'in_progress').length
165
- };
166
- }
167
- }
168
- /**
169
- * Create the __todo__ tool
170
- */
171
- export function createTodoTool(manager) {
172
- return {
173
- name: '__todo__',
174
- description: `Manage a todo list to track REAL tasks you are performing.
175
-
176
- IMPORTANT: Only use for tasks YOU will actually execute using tools. Do NOT:
177
- - Create fictional tasks you cannot perform (cooking, gym, etc.)
178
- - Create tasks about what the USER is doing
179
- - Mark tasks complete without actually doing work
180
-
181
- Use this tool to:
182
- - Track multi-step work YOU are doing (code changes, file edits, searches)
183
- - Mark tasks complete AFTER you've actually performed them with other tools
184
- - Show progress through complex technical tasks
185
-
186
- Actions:
187
- - "set": Create a list of tasks (only for work you'll do with tools)
188
- - "complete": Mark current task done (only AFTER you've done it)
189
- - "list": Show current progress
190
-
191
- Items format:
192
- - content: Task description (e.g., "Update config file")
193
- - activeForm: Active form (e.g., "Updating config file")
194
-
195
- Example (correct - actual work):
196
- { "action": "set", "items": [
197
- {"content": "Search for error handling", "activeForm": "Searching for error handling"},
198
- {"content": "Fix the bug in auth.ts", "activeForm": "Fixing the bug"},
199
- {"content": "Run tests", "activeForm": "Running tests"}
200
- ]}
201
-
202
- WRONG - do NOT create:
203
- - "Make breakfast" (you can't cook)
204
- - "Go to gym" (you can't move)
205
- - "User will review" (that's not your task)`,
206
- parameters: {
207
- type: 'object',
208
- properties: {
209
- action: {
210
- type: 'string',
211
- enum: ['set', 'complete', 'list'],
212
- description: 'The action to perform'
213
- },
214
- items: {
215
- type: 'string',
216
- description: 'Array of task descriptions (for "set" action)'
217
- }
218
- },
219
- required: ['action']
220
- },
221
- execute: async (params) => {
222
- const { action, items: rawItems } = params;
223
- let items;
224
- if (rawItems) {
225
- let parsed = rawItems;
226
- // Parse JSON string if needed
227
- if (typeof rawItems === 'string') {
228
- try {
229
- parsed = JSON.parse(rawItems);
230
- }
231
- catch {
232
- // Single string item
233
- parsed = [rawItems];
234
- }
235
- }
236
- // Convert to TodoInput array
237
- if (Array.isArray(parsed)) {
238
- items = parsed.map(item => {
239
- if (typeof item === 'string') {
240
- return { content: item };
241
- }
242
- if (typeof item === 'object' && item !== null && 'content' in item) {
243
- return {
244
- content: item.content,
245
- activeForm: item.activeForm
246
- };
247
- }
248
- return { content: String(item) };
249
- });
250
- }
251
- }
252
- switch (action) {
253
- case 'set': {
254
- if (!items || items.length === 0) {
255
- return { success: false, error: 'Items array is required for "set" action' };
256
- }
257
- const todos = manager.setAll(items);
258
- const current = manager.getCurrentTask();
259
- const currentLabel = current?.activeForm || current?.content;
260
- return {
261
- success: true,
262
- data: {
263
- message: `Created ${todos.length} tasks. Starting: "${currentLabel}"`,
264
- todos: manager.getAll(),
265
- current: currentLabel
266
- }
267
- };
268
- }
269
- case 'complete': {
270
- const { completed, next } = manager.completeCurrentAndNext();
271
- if (!completed && !next) {
272
- return {
273
- success: true,
274
- data: {
275
- message: 'No tasks to complete.',
276
- todos: manager.getAll()
277
- }
278
- };
279
- }
280
- const progress = manager.getProgress();
281
- let message = '';
282
- if (completed) {
283
- message = `Completed: "${completed.content}". `;
284
- }
285
- if (next) {
286
- const nextLabel = next.activeForm || next.content;
287
- message += `Next: "${nextLabel}". `;
288
- }
289
- else if (manager.isAllCompleted()) {
290
- message += 'All tasks completed!';
291
- }
292
- message += `Progress: ${progress.completed}/${progress.total}`;
293
- const nextLabel = next ? (next.activeForm || next.content) : undefined;
294
- return {
295
- success: true,
296
- data: {
297
- message,
298
- todos: manager.getAll(),
299
- current: nextLabel,
300
- progress
301
- }
302
- };
303
- }
304
- case 'list': {
305
- const todos = manager.getAll();
306
- const current = manager.getCurrentTask();
307
- const progress = manager.getProgress();
308
- const currentLabel = current ? (current.activeForm || current.content) : undefined;
309
- return {
310
- success: true,
311
- data: {
312
- message: formatTodoList(todos),
313
- todos,
314
- current: currentLabel,
315
- progress
316
- }
317
- };
318
- }
319
- default:
320
- return { success: false, error: `Unknown action: ${action}` };
321
- }
322
- }
323
- };
324
- }
325
- //# sourceMappingURL=todo.js.map
package/dist/todo.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"todo.js","sourceRoot":"","sources":["../src/todo.ts"],"names":[],"mappings":"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"}