@codeany/open-agent-sdk 0.2.2 → 0.2.4

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 (280) hide show
  1. package/dist/agent.d.ts +113 -0
  2. package/dist/agent.d.ts.map +1 -0
  3. package/dist/agent.js +453 -0
  4. package/dist/agent.js.map +1 -0
  5. package/dist/engine.d.ts +62 -0
  6. package/dist/engine.d.ts.map +1 -0
  7. package/dist/engine.js +496 -0
  8. package/dist/engine.js.map +1 -0
  9. package/dist/hooks.d.ts +111 -0
  10. package/dist/hooks.d.ts.map +1 -0
  11. package/dist/hooks.js +179 -0
  12. package/dist/hooks.js.map +1 -0
  13. package/dist/index.d.ts +66 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +133 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/mcp/client.d.ts +19 -0
  18. package/dist/mcp/client.d.ts.map +1 -0
  19. package/dist/mcp/client.js +126 -0
  20. package/dist/mcp/client.js.map +1 -0
  21. package/dist/providers/anthropic.d.ts +17 -0
  22. package/dist/providers/anthropic.d.ts.map +1 -0
  23. package/dist/providers/anthropic.js +47 -0
  24. package/dist/providers/anthropic.js.map +1 -0
  25. package/dist/providers/index.d.ts +20 -0
  26. package/dist/providers/index.d.ts.map +1 -0
  27. package/dist/providers/index.js +26 -0
  28. package/dist/providers/index.js.map +1 -0
  29. package/dist/providers/openai.d.ts +26 -0
  30. package/dist/providers/openai.d.ts.map +1 -0
  31. package/dist/providers/openai.js +212 -0
  32. package/dist/providers/openai.js.map +1 -0
  33. package/dist/providers/types.d.ts +84 -0
  34. package/dist/providers/types.d.ts.map +1 -0
  35. package/dist/providers/types.js +11 -0
  36. package/dist/providers/types.js.map +1 -0
  37. package/dist/sdk-mcp-server.d.ts +52 -0
  38. package/dist/sdk-mcp-server.d.ts.map +1 -0
  39. package/dist/sdk-mcp-server.js +57 -0
  40. package/dist/sdk-mcp-server.js.map +1 -0
  41. package/dist/session.d.ts +73 -0
  42. package/dist/session.d.ts.map +1 -0
  43. package/dist/session.js +159 -0
  44. package/dist/session.js.map +1 -0
  45. package/dist/skills/bundled/commit.d.ts +7 -0
  46. package/dist/skills/bundled/commit.d.ts.map +1 -0
  47. package/dist/skills/bundled/commit.js +35 -0
  48. package/dist/skills/bundled/commit.js.map +1 -0
  49. package/dist/skills/bundled/debug.d.ts +7 -0
  50. package/dist/skills/bundled/debug.d.ts.map +1 -0
  51. package/{src/skills/bundled/debug.ts → dist/skills/bundled/debug.js} +20 -22
  52. package/dist/skills/bundled/debug.js.map +1 -0
  53. package/dist/skills/bundled/index.d.ts +11 -0
  54. package/dist/skills/bundled/index.d.ts.map +1 -0
  55. package/dist/skills/bundled/index.js +26 -0
  56. package/dist/skills/bundled/index.js.map +1 -0
  57. package/dist/skills/bundled/review.d.ts +7 -0
  58. package/dist/skills/bundled/review.d.ts.map +1 -0
  59. package/{src/skills/bundled/review.ts → dist/skills/bundled/review.js} +18 -21
  60. package/dist/skills/bundled/review.js.map +1 -0
  61. package/dist/skills/bundled/simplify.d.ts +8 -0
  62. package/dist/skills/bundled/simplify.d.ts.map +1 -0
  63. package/{src/skills/bundled/simplify.ts → dist/skills/bundled/simplify.js} +16 -19
  64. package/dist/skills/bundled/simplify.js.map +1 -0
  65. package/dist/skills/bundled/test.d.ts +7 -0
  66. package/dist/skills/bundled/test.d.ts.map +1 -0
  67. package/{src/skills/bundled/test.ts → dist/skills/bundled/test.js} +18 -21
  68. package/dist/skills/bundled/test.js.map +1 -0
  69. package/dist/skills/index.d.ts +7 -0
  70. package/dist/skills/index.d.ts.map +1 -0
  71. package/dist/skills/index.js +8 -0
  72. package/dist/skills/index.js.map +1 -0
  73. package/dist/skills/registry.d.ts +43 -0
  74. package/dist/skills/registry.d.ts.map +1 -0
  75. package/dist/skills/registry.js +111 -0
  76. package/dist/skills/registry.js.map +1 -0
  77. package/dist/skills/types.d.ts +83 -0
  78. package/dist/skills/types.d.ts.map +1 -0
  79. package/dist/skills/types.js +8 -0
  80. package/dist/skills/types.js.map +1 -0
  81. package/dist/tool-helper.d.ts +73 -0
  82. package/dist/tool-helper.d.ts.map +1 -0
  83. package/dist/tool-helper.js +86 -0
  84. package/dist/tool-helper.js.map +1 -0
  85. package/dist/tools/agent-tool.d.ts +17 -0
  86. package/dist/tools/agent-tool.d.ts.map +1 -0
  87. package/dist/tools/agent-tool.js +146 -0
  88. package/dist/tools/agent-tool.js.map +1 -0
  89. package/dist/tools/ask-user.d.ts +18 -0
  90. package/dist/tools/ask-user.d.ts.map +1 -0
  91. package/dist/tools/ask-user.js +72 -0
  92. package/dist/tools/ask-user.js.map +1 -0
  93. package/dist/tools/bash.d.ts +5 -0
  94. package/dist/tools/bash.d.ts.map +1 -0
  95. package/dist/tools/bash.js +67 -0
  96. package/dist/tools/bash.js.map +1 -0
  97. package/dist/tools/config-tool.d.ts +20 -0
  98. package/dist/tools/config-tool.d.ts.map +1 -0
  99. package/dist/tools/config-tool.js +83 -0
  100. package/dist/tools/config-tool.js.map +1 -0
  101. package/dist/tools/cron-tools.d.ts +33 -0
  102. package/dist/tools/cron-tools.d.ts.map +1 -0
  103. package/dist/tools/cron-tools.js +128 -0
  104. package/dist/tools/cron-tools.js.map +1 -0
  105. package/dist/tools/edit.d.ts +5 -0
  106. package/dist/tools/edit.d.ts.map +1 -0
  107. package/dist/tools/edit.js +70 -0
  108. package/dist/tools/edit.js.map +1 -0
  109. package/dist/tools/glob.d.ts +5 -0
  110. package/dist/tools/glob.d.ts.map +1 -0
  111. package/dist/tools/glob.js +75 -0
  112. package/dist/tools/glob.js.map +1 -0
  113. package/dist/tools/grep.d.ts +5 -0
  114. package/dist/tools/grep.d.ts.map +1 -0
  115. package/dist/tools/grep.js +168 -0
  116. package/dist/tools/grep.js.map +1 -0
  117. package/dist/tools/index.d.ts +45 -0
  118. package/dist/tools/index.d.ts.map +1 -0
  119. package/dist/tools/index.js +162 -0
  120. package/dist/tools/index.js.map +1 -0
  121. package/dist/tools/lsp-tool.d.ts +9 -0
  122. package/dist/tools/lsp-tool.d.ts.map +1 -0
  123. package/dist/tools/lsp-tool.js +137 -0
  124. package/dist/tools/lsp-tool.js.map +1 -0
  125. package/dist/tools/mcp-resource-tools.d.ts +14 -0
  126. package/dist/tools/mcp-resource-tools.d.ts.map +1 -0
  127. package/dist/tools/mcp-resource-tools.js +117 -0
  128. package/dist/tools/mcp-resource-tools.js.map +1 -0
  129. package/dist/tools/notebook-edit.d.ts +5 -0
  130. package/dist/tools/notebook-edit.d.ts.map +1 -0
  131. package/dist/tools/notebook-edit.js +85 -0
  132. package/dist/tools/notebook-edit.js.map +1 -0
  133. package/dist/tools/plan-tools.d.ts +12 -0
  134. package/dist/tools/plan-tools.d.ts.map +1 -0
  135. package/dist/tools/plan-tools.js +77 -0
  136. package/dist/tools/plan-tools.js.map +1 -0
  137. package/dist/tools/read.d.ts +5 -0
  138. package/dist/tools/read.d.ts.map +1 -0
  139. package/dist/tools/read.js +66 -0
  140. package/dist/tools/read.js.map +1 -0
  141. package/dist/tools/send-message.d.ts +31 -0
  142. package/dist/tools/send-message.d.ts.map +1 -0
  143. package/dist/tools/send-message.js +77 -0
  144. package/dist/tools/send-message.js.map +1 -0
  145. package/dist/tools/skill-tool.d.ts +9 -0
  146. package/dist/tools/skill-tool.d.ts.map +1 -0
  147. package/dist/tools/skill-tool.js +115 -0
  148. package/dist/tools/skill-tool.js.map +1 -0
  149. package/dist/tools/task-tools.d.ts +48 -0
  150. package/dist/tools/task-tools.d.ts.map +1 -0
  151. package/dist/tools/task-tools.js +242 -0
  152. package/dist/tools/task-tools.js.map +1 -0
  153. package/dist/tools/team-tools.d.ts +34 -0
  154. package/dist/tools/team-tools.d.ts.map +1 -0
  155. package/dist/tools/team-tools.js +103 -0
  156. package/dist/tools/team-tools.js.map +1 -0
  157. package/dist/tools/todo-tool.d.ts +22 -0
  158. package/dist/tools/todo-tool.d.ts.map +1 -0
  159. package/dist/tools/todo-tool.js +93 -0
  160. package/dist/tools/todo-tool.js.map +1 -0
  161. package/dist/tools/tool-search.d.ts +13 -0
  162. package/dist/tools/tool-search.d.ts.map +1 -0
  163. package/dist/tools/tool-search.js +76 -0
  164. package/dist/tools/tool-search.js.map +1 -0
  165. package/dist/tools/types.d.ts +29 -0
  166. package/dist/tools/types.d.ts.map +1 -0
  167. package/dist/tools/types.js +52 -0
  168. package/dist/tools/types.js.map +1 -0
  169. package/dist/tools/web-fetch.d.ts +5 -0
  170. package/dist/tools/web-fetch.d.ts.map +1 -0
  171. package/dist/tools/web-fetch.js +60 -0
  172. package/dist/tools/web-fetch.js.map +1 -0
  173. package/dist/tools/web-search.d.ts +5 -0
  174. package/dist/tools/web-search.d.ts.map +1 -0
  175. package/dist/tools/web-search.js +77 -0
  176. package/dist/tools/web-search.js.map +1 -0
  177. package/dist/tools/worktree-tools.d.ts +10 -0
  178. package/dist/tools/worktree-tools.d.ts.map +1 -0
  179. package/dist/tools/worktree-tools.js +130 -0
  180. package/dist/tools/worktree-tools.js.map +1 -0
  181. package/dist/tools/write.d.ts +5 -0
  182. package/dist/tools/write.d.ts.map +1 -0
  183. package/dist/tools/write.js +40 -0
  184. package/dist/tools/write.js.map +1 -0
  185. package/dist/types.d.ts +432 -0
  186. package/dist/types.d.ts.map +1 -0
  187. package/dist/types.js +5 -0
  188. package/dist/types.js.map +1 -0
  189. package/dist/utils/compact.d.ts +44 -0
  190. package/dist/utils/compact.d.ts.map +1 -0
  191. package/dist/utils/compact.js +162 -0
  192. package/dist/utils/compact.js.map +1 -0
  193. package/dist/utils/context.d.ts +35 -0
  194. package/dist/utils/context.d.ts.map +1 -0
  195. package/dist/utils/context.js +174 -0
  196. package/dist/utils/context.js.map +1 -0
  197. package/dist/utils/fileCache.d.ts +64 -0
  198. package/dist/utils/fileCache.d.ts.map +1 -0
  199. package/dist/utils/fileCache.js +117 -0
  200. package/dist/utils/fileCache.js.map +1 -0
  201. package/dist/utils/messages.d.ts +57 -0
  202. package/dist/utils/messages.d.ts.map +1 -0
  203. package/dist/utils/messages.js +152 -0
  204. package/dist/utils/messages.js.map +1 -0
  205. package/dist/utils/retry.d.ts +48 -0
  206. package/dist/utils/retry.d.ts.map +1 -0
  207. package/dist/utils/retry.js +111 -0
  208. package/dist/utils/retry.js.map +1 -0
  209. package/dist/utils/tokens.d.ts +57 -0
  210. package/dist/utils/tokens.d.ts.map +1 -0
  211. package/dist/utils/tokens.js +134 -0
  212. package/dist/utils/tokens.js.map +1 -0
  213. package/package.json +6 -1
  214. package/.env.example +0 -8
  215. package/examples/01-simple-query.ts +0 -43
  216. package/examples/02-multi-tool.ts +0 -44
  217. package/examples/03-multi-turn.ts +0 -39
  218. package/examples/04-prompt-api.ts +0 -29
  219. package/examples/05-custom-system-prompt.ts +0 -26
  220. package/examples/06-mcp-server.ts +0 -49
  221. package/examples/07-custom-tools.ts +0 -87
  222. package/examples/08-official-api-compat.ts +0 -38
  223. package/examples/09-subagents.ts +0 -48
  224. package/examples/10-permissions.ts +0 -40
  225. package/examples/11-custom-mcp-tools.ts +0 -101
  226. package/examples/12-skills.ts +0 -88
  227. package/examples/13-hooks.ts +0 -88
  228. package/examples/14-openai-compat.ts +0 -71
  229. package/examples/web/index.html +0 -365
  230. package/examples/web/server.ts +0 -157
  231. package/src/agent.ts +0 -516
  232. package/src/engine.ts +0 -633
  233. package/src/hooks.ts +0 -261
  234. package/src/index.ts +0 -426
  235. package/src/mcp/client.ts +0 -150
  236. package/src/providers/anthropic.ts +0 -60
  237. package/src/providers/index.ts +0 -34
  238. package/src/providers/openai.ts +0 -315
  239. package/src/providers/types.ts +0 -85
  240. package/src/sdk-mcp-server.ts +0 -78
  241. package/src/session.ts +0 -227
  242. package/src/skills/bundled/commit.ts +0 -38
  243. package/src/skills/bundled/index.ts +0 -28
  244. package/src/skills/index.ts +0 -25
  245. package/src/skills/registry.ts +0 -133
  246. package/src/skills/types.ts +0 -99
  247. package/src/tool-helper.ts +0 -127
  248. package/src/tools/agent-tool.ts +0 -164
  249. package/src/tools/ask-user.ts +0 -79
  250. package/src/tools/bash.ts +0 -75
  251. package/src/tools/config-tool.ts +0 -89
  252. package/src/tools/cron-tools.ts +0 -153
  253. package/src/tools/edit.ts +0 -74
  254. package/src/tools/glob.ts +0 -77
  255. package/src/tools/grep.ts +0 -168
  256. package/src/tools/index.ts +0 -240
  257. package/src/tools/lsp-tool.ts +0 -163
  258. package/src/tools/mcp-resource-tools.ts +0 -125
  259. package/src/tools/notebook-edit.ts +0 -93
  260. package/src/tools/plan-tools.ts +0 -88
  261. package/src/tools/read.ts +0 -73
  262. package/src/tools/send-message.ts +0 -96
  263. package/src/tools/skill-tool.ts +0 -133
  264. package/src/tools/task-tools.ts +0 -290
  265. package/src/tools/team-tools.ts +0 -128
  266. package/src/tools/todo-tool.ts +0 -112
  267. package/src/tools/tool-search.ts +0 -87
  268. package/src/tools/types.ts +0 -66
  269. package/src/tools/web-fetch.ts +0 -66
  270. package/src/tools/web-search.ts +0 -86
  271. package/src/tools/worktree-tools.ts +0 -140
  272. package/src/tools/write.ts +0 -42
  273. package/src/types.ts +0 -486
  274. package/src/utils/compact.ts +0 -207
  275. package/src/utils/context.ts +0 -191
  276. package/src/utils/fileCache.ts +0 -148
  277. package/src/utils/messages.ts +0 -195
  278. package/src/utils/retry.ts +0 -140
  279. package/src/utils/tokens.ts +0 -145
  280. package/tsconfig.json +0 -19
@@ -1,133 +0,0 @@
1
- /**
2
- * Skill Tool
3
- *
4
- * Allows the model to invoke registered skills by name.
5
- * Skills are prompt templates that provide specialized capabilities.
6
- */
7
-
8
- import type { ToolDefinition, ToolResult, ToolContext } from '../types.js'
9
- import { getSkill, getUserInvocableSkills } from '../skills/registry.js'
10
-
11
- export const SkillTool: ToolDefinition = {
12
- name: 'Skill',
13
- description:
14
- 'Execute a skill within the current conversation. ' +
15
- 'Skills provide specialized capabilities and domain knowledge. ' +
16
- 'Use this tool with the skill name and optional arguments. ' +
17
- 'Available skills are listed in system-reminder messages.',
18
- inputSchema: {
19
- type: 'object',
20
- properties: {
21
- skill: {
22
- type: 'string',
23
- description: 'The skill name to execute (e.g., "commit", "review", "simplify")',
24
- },
25
- args: {
26
- type: 'string',
27
- description: 'Optional arguments for the skill',
28
- },
29
- },
30
- required: ['skill'],
31
- },
32
-
33
- isReadOnly: () => false,
34
- isConcurrencySafe: () => false,
35
- isEnabled: () => getUserInvocableSkills().length > 0,
36
-
37
- async prompt(): Promise<string> {
38
- const skills = getUserInvocableSkills()
39
- if (skills.length === 0) return ''
40
-
41
- const lines = skills.map((s) => {
42
- const desc =
43
- s.description.length > 200
44
- ? s.description.slice(0, 200) + '...'
45
- : s.description
46
- return `- ${s.name}: ${desc}`
47
- })
48
-
49
- return (
50
- 'Execute a skill within the main conversation.\n\n' +
51
- 'Available skills:\n' +
52
- lines.join('\n') +
53
- '\n\nWhen a skill matches the user\'s request, invoke it using the Skill tool.'
54
- )
55
- },
56
-
57
- async call(input: any, context: ToolContext): Promise<ToolResult> {
58
- const skillName: string = input.skill
59
- const args: string = input.args || ''
60
-
61
- if (!skillName) {
62
- return {
63
- type: 'tool_result',
64
- tool_use_id: '',
65
- content: 'Error: skill name is required',
66
- is_error: true,
67
- }
68
- }
69
-
70
- const skill = getSkill(skillName)
71
- if (!skill) {
72
- const available = getUserInvocableSkills()
73
- .map((s) => s.name)
74
- .join(', ')
75
- return {
76
- type: 'tool_result',
77
- tool_use_id: '',
78
- content: `Error: Unknown skill "${skillName}". Available skills: ${available || 'none'}`,
79
- is_error: true,
80
- }
81
- }
82
-
83
- // Check if skill is enabled
84
- if (skill.isEnabled && !skill.isEnabled()) {
85
- return {
86
- type: 'tool_result',
87
- tool_use_id: '',
88
- content: `Error: Skill "${skillName}" is currently disabled`,
89
- is_error: true,
90
- }
91
- }
92
-
93
- try {
94
- // Get skill prompt
95
- const contentBlocks = await skill.getPrompt(args, context)
96
-
97
- // Convert content blocks to text
98
- const promptText = contentBlocks
99
- .filter((b): b is { type: 'text'; text: string } => b.type === 'text')
100
- .map((b) => b.text)
101
- .join('\n\n')
102
-
103
- // Build result with metadata
104
- const result: Record<string, unknown> = {
105
- success: true,
106
- commandName: skill.name,
107
- status: skill.context === 'fork' ? 'forked' : 'inline',
108
- prompt: promptText,
109
- }
110
-
111
- if (skill.allowedTools) {
112
- result.allowedTools = skill.allowedTools
113
- }
114
-
115
- if (skill.model) {
116
- result.model = skill.model
117
- }
118
-
119
- return {
120
- type: 'tool_result',
121
- tool_use_id: '',
122
- content: JSON.stringify(result),
123
- }
124
- } catch (err: any) {
125
- return {
126
- type: 'tool_result',
127
- tool_use_id: '',
128
- content: `Error executing skill "${skillName}": ${err.message}`,
129
- is_error: true,
130
- }
131
- }
132
- },
133
- }
@@ -1,290 +0,0 @@
1
- /**
2
- * Task Management Tools
3
- *
4
- * TaskCreate, TaskList, TaskUpdate, TaskGet, TaskStop, TaskOutput
5
- *
6
- * Provides in-memory task tracking for agent coordination.
7
- * Tasks persist across turns within a session.
8
- */
9
-
10
- import type { ToolDefinition, ToolContext, ToolResult } from '../types.js'
11
-
12
- /**
13
- * Task status.
14
- */
15
- export type TaskStatus = 'pending' | 'in_progress' | 'completed' | 'failed' | 'cancelled'
16
-
17
- /**
18
- * Task entry.
19
- */
20
- export interface Task {
21
- id: string
22
- subject: string
23
- description?: string
24
- status: TaskStatus
25
- owner?: string
26
- createdAt: string
27
- updatedAt: string
28
- output?: string
29
- blockedBy?: string[]
30
- blocks?: string[]
31
- metadata?: Record<string, unknown>
32
- }
33
-
34
- /**
35
- * Global task store (shared across tools in a session).
36
- */
37
- const taskStore = new Map<string, Task>()
38
-
39
- let taskCounter = 0
40
-
41
- /**
42
- * Get all tasks.
43
- */
44
- export function getAllTasks(): Task[] {
45
- return Array.from(taskStore.values())
46
- }
47
-
48
- /**
49
- * Get a task by ID.
50
- */
51
- export function getTask(id: string): Task | undefined {
52
- return taskStore.get(id)
53
- }
54
-
55
- /**
56
- * Clear all tasks (for session reset).
57
- */
58
- export function clearTasks(): void {
59
- taskStore.clear()
60
- taskCounter = 0
61
- }
62
-
63
- // ============================================================================
64
- // TaskCreateTool
65
- // ============================================================================
66
-
67
- export const TaskCreateTool: ToolDefinition = {
68
- name: 'TaskCreate',
69
- description: 'Create a new task for tracking work progress. Tasks help organize multi-step operations.',
70
- inputSchema: {
71
- type: 'object',
72
- properties: {
73
- subject: { type: 'string', description: 'Short task title' },
74
- description: { type: 'string', description: 'Detailed task description' },
75
- owner: { type: 'string', description: 'Task owner/assignee' },
76
- status: { type: 'string', enum: ['pending', 'in_progress'], description: 'Initial status' },
77
- },
78
- required: ['subject'],
79
- },
80
- isReadOnly: () => false,
81
- isConcurrencySafe: () => true,
82
- isEnabled: () => true,
83
- async prompt() { return 'Create a task for tracking progress.' },
84
- async call(input: any): Promise<ToolResult> {
85
- const id = `task_${++taskCounter}`
86
- const task: Task = {
87
- id,
88
- subject: input.subject,
89
- description: input.description,
90
- status: input.status || 'pending',
91
- owner: input.owner,
92
- createdAt: new Date().toISOString(),
93
- updatedAt: new Date().toISOString(),
94
- }
95
- taskStore.set(id, task)
96
-
97
- return {
98
- type: 'tool_result',
99
- tool_use_id: '',
100
- content: `Task created: ${id} - "${task.subject}" (${task.status})`,
101
- }
102
- },
103
- }
104
-
105
- // ============================================================================
106
- // TaskListTool
107
- // ============================================================================
108
-
109
- export const TaskListTool: ToolDefinition = {
110
- name: 'TaskList',
111
- description: 'List all tasks with their status, ownership, and dependencies.',
112
- inputSchema: {
113
- type: 'object',
114
- properties: {
115
- status: { type: 'string', description: 'Filter by status' },
116
- owner: { type: 'string', description: 'Filter by owner' },
117
- },
118
- },
119
- isReadOnly: () => true,
120
- isConcurrencySafe: () => true,
121
- isEnabled: () => true,
122
- async prompt() { return 'List tasks.' },
123
- async call(input: any): Promise<ToolResult> {
124
- let tasks = getAllTasks()
125
-
126
- if (input.status) {
127
- tasks = tasks.filter(t => t.status === input.status)
128
- }
129
- if (input.owner) {
130
- tasks = tasks.filter(t => t.owner === input.owner)
131
- }
132
-
133
- if (tasks.length === 0) {
134
- return { type: 'tool_result', tool_use_id: '', content: 'No tasks found.' }
135
- }
136
-
137
- const lines = tasks.map(t =>
138
- `[${t.id}] ${t.status.toUpperCase()} - ${t.subject}${t.owner ? ` (owner: ${t.owner})` : ''}`
139
- )
140
-
141
- return {
142
- type: 'tool_result',
143
- tool_use_id: '',
144
- content: lines.join('\n'),
145
- }
146
- },
147
- }
148
-
149
- // ============================================================================
150
- // TaskUpdateTool
151
- // ============================================================================
152
-
153
- export const TaskUpdateTool: ToolDefinition = {
154
- name: 'TaskUpdate',
155
- description: 'Update a task\'s status, description, or other properties.',
156
- inputSchema: {
157
- type: 'object',
158
- properties: {
159
- id: { type: 'string', description: 'Task ID' },
160
- status: { type: 'string', enum: ['pending', 'in_progress', 'completed', 'failed', 'cancelled'] },
161
- description: { type: 'string', description: 'Updated description' },
162
- owner: { type: 'string', description: 'New owner' },
163
- output: { type: 'string', description: 'Task output/result' },
164
- },
165
- required: ['id'],
166
- },
167
- isReadOnly: () => false,
168
- isConcurrencySafe: () => true,
169
- isEnabled: () => true,
170
- async prompt() { return 'Update a task.' },
171
- async call(input: any): Promise<ToolResult> {
172
- const task = taskStore.get(input.id)
173
- if (!task) {
174
- return { type: 'tool_result', tool_use_id: '', content: `Task not found: ${input.id}`, is_error: true }
175
- }
176
-
177
- if (input.status) task.status = input.status
178
- if (input.description) task.description = input.description
179
- if (input.owner) task.owner = input.owner
180
- if (input.output) task.output = input.output
181
- task.updatedAt = new Date().toISOString()
182
-
183
- return {
184
- type: 'tool_result',
185
- tool_use_id: '',
186
- content: `Task updated: ${task.id} - ${task.status} - "${task.subject}"`,
187
- }
188
- },
189
- }
190
-
191
- // ============================================================================
192
- // TaskGetTool
193
- // ============================================================================
194
-
195
- export const TaskGetTool: ToolDefinition = {
196
- name: 'TaskGet',
197
- description: 'Get full details of a specific task.',
198
- inputSchema: {
199
- type: 'object',
200
- properties: {
201
- id: { type: 'string', description: 'Task ID' },
202
- },
203
- required: ['id'],
204
- },
205
- isReadOnly: () => true,
206
- isConcurrencySafe: () => true,
207
- isEnabled: () => true,
208
- async prompt() { return 'Get task details.' },
209
- async call(input: any): Promise<ToolResult> {
210
- const task = taskStore.get(input.id)
211
- if (!task) {
212
- return { type: 'tool_result', tool_use_id: '', content: `Task not found: ${input.id}`, is_error: true }
213
- }
214
-
215
- return {
216
- type: 'tool_result',
217
- tool_use_id: '',
218
- content: JSON.stringify(task, null, 2),
219
- }
220
- },
221
- }
222
-
223
- // ============================================================================
224
- // TaskStopTool
225
- // ============================================================================
226
-
227
- export const TaskStopTool: ToolDefinition = {
228
- name: 'TaskStop',
229
- description: 'Stop/cancel a running task.',
230
- inputSchema: {
231
- type: 'object',
232
- properties: {
233
- id: { type: 'string', description: 'Task ID to stop' },
234
- reason: { type: 'string', description: 'Reason for stopping' },
235
- },
236
- required: ['id'],
237
- },
238
- isReadOnly: () => false,
239
- isConcurrencySafe: () => true,
240
- isEnabled: () => true,
241
- async prompt() { return 'Stop a task.' },
242
- async call(input: any): Promise<ToolResult> {
243
- const task = taskStore.get(input.id)
244
- if (!task) {
245
- return { type: 'tool_result', tool_use_id: '', content: `Task not found: ${input.id}`, is_error: true }
246
- }
247
-
248
- task.status = 'cancelled'
249
- task.updatedAt = new Date().toISOString()
250
- if (input.reason) task.output = `Stopped: ${input.reason}`
251
-
252
- return {
253
- type: 'tool_result',
254
- tool_use_id: '',
255
- content: `Task stopped: ${task.id}`,
256
- }
257
- },
258
- }
259
-
260
- // ============================================================================
261
- // TaskOutputTool
262
- // ============================================================================
263
-
264
- export const TaskOutputTool: ToolDefinition = {
265
- name: 'TaskOutput',
266
- description: 'Get the output/result of a task.',
267
- inputSchema: {
268
- type: 'object',
269
- properties: {
270
- id: { type: 'string', description: 'Task ID' },
271
- },
272
- required: ['id'],
273
- },
274
- isReadOnly: () => true,
275
- isConcurrencySafe: () => true,
276
- isEnabled: () => true,
277
- async prompt() { return 'Get task output.' },
278
- async call(input: any): Promise<ToolResult> {
279
- const task = taskStore.get(input.id)
280
- if (!task) {
281
- return { type: 'tool_result', tool_use_id: '', content: `Task not found: ${input.id}`, is_error: true }
282
- }
283
-
284
- return {
285
- type: 'tool_result',
286
- tool_use_id: '',
287
- content: task.output || '(no output yet)',
288
- }
289
- },
290
- }
@@ -1,128 +0,0 @@
1
- /**
2
- * Team Management Tools
3
- *
4
- * TeamCreate, TeamDelete - Multi-agent team coordination.
5
- * Manages team composition, task lists, and inter-agent messaging.
6
- */
7
-
8
- import type { ToolDefinition, ToolResult } from '../types.js'
9
-
10
- /**
11
- * Team definition.
12
- */
13
- export interface Team {
14
- id: string
15
- name: string
16
- members: string[]
17
- leaderId: string
18
- taskListId?: string
19
- createdAt: string
20
- status: 'active' | 'disbanded'
21
- }
22
-
23
- /**
24
- * Global team store.
25
- */
26
- const teamStore = new Map<string, Team>()
27
- let teamCounter = 0
28
-
29
- /**
30
- * Get all teams.
31
- */
32
- export function getAllTeams(): Team[] {
33
- return Array.from(teamStore.values())
34
- }
35
-
36
- /**
37
- * Get a team by ID.
38
- */
39
- export function getTeam(id: string): Team | undefined {
40
- return teamStore.get(id)
41
- }
42
-
43
- /**
44
- * Clear all teams.
45
- */
46
- export function clearTeams(): void {
47
- teamStore.clear()
48
- teamCounter = 0
49
- }
50
-
51
- // ============================================================================
52
- // TeamCreateTool
53
- // ============================================================================
54
-
55
- export const TeamCreateTool: ToolDefinition = {
56
- name: 'TeamCreate',
57
- description: 'Create a multi-agent team for coordinated work. Assigns a lead and manages member composition.',
58
- inputSchema: {
59
- type: 'object',
60
- properties: {
61
- name: { type: 'string', description: 'Team name' },
62
- members: {
63
- type: 'array',
64
- items: { type: 'string' },
65
- description: 'List of agent/teammate names',
66
- },
67
- task_description: { type: 'string', description: 'Description of the team\'s mission' },
68
- },
69
- required: ['name'],
70
- },
71
- isReadOnly: () => false,
72
- isConcurrencySafe: () => false,
73
- isEnabled: () => true,
74
- async prompt() { return 'Create a team for multi-agent coordination.' },
75
- async call(input: any): Promise<ToolResult> {
76
- const id = `team_${++teamCounter}`
77
- const team: Team = {
78
- id,
79
- name: input.name,
80
- members: input.members || [],
81
- leaderId: 'self',
82
- createdAt: new Date().toISOString(),
83
- status: 'active',
84
- }
85
- teamStore.set(id, team)
86
-
87
- return {
88
- type: 'tool_result',
89
- tool_use_id: '',
90
- content: `Team created: ${id} "${team.name}" with ${team.members.length} members`,
91
- }
92
- },
93
- }
94
-
95
- // ============================================================================
96
- // TeamDeleteTool
97
- // ============================================================================
98
-
99
- export const TeamDeleteTool: ToolDefinition = {
100
- name: 'TeamDelete',
101
- description: 'Disband a team and clean up resources.',
102
- inputSchema: {
103
- type: 'object',
104
- properties: {
105
- id: { type: 'string', description: 'Team ID to disband' },
106
- },
107
- required: ['id'],
108
- },
109
- isReadOnly: () => false,
110
- isConcurrencySafe: () => false,
111
- isEnabled: () => true,
112
- async prompt() { return 'Delete/disband a team.' },
113
- async call(input: any): Promise<ToolResult> {
114
- const team = teamStore.get(input.id)
115
- if (!team) {
116
- return { type: 'tool_result', tool_use_id: '', content: `Team not found: ${input.id}`, is_error: true }
117
- }
118
-
119
- team.status = 'disbanded'
120
- teamStore.delete(input.id)
121
-
122
- return {
123
- type: 'tool_result',
124
- tool_use_id: '',
125
- content: `Team disbanded: ${team.name}`,
126
- }
127
- },
128
- }
@@ -1,112 +0,0 @@
1
- /**
2
- * TodoWriteTool - Session todo/checklist management
3
- *
4
- * Manages a session-scoped todo list for tracking work items.
5
- */
6
-
7
- import type { ToolDefinition, ToolResult } from '../types.js'
8
-
9
- export interface TodoItem {
10
- id: number
11
- text: string
12
- done: boolean
13
- priority?: 'high' | 'medium' | 'low'
14
- }
15
-
16
- const todoList: TodoItem[] = []
17
- let todoCounter = 0
18
-
19
- /**
20
- * Get all todos.
21
- */
22
- export function getTodos(): TodoItem[] {
23
- return [...todoList]
24
- }
25
-
26
- /**
27
- * Clear all todos.
28
- */
29
- export function clearTodos(): void {
30
- todoList.length = 0
31
- todoCounter = 0
32
- }
33
-
34
- export const TodoWriteTool: ToolDefinition = {
35
- name: 'TodoWrite',
36
- description: 'Manage a session todo/checklist. Supports add, toggle, remove, and list operations.',
37
- inputSchema: {
38
- type: 'object',
39
- properties: {
40
- action: {
41
- type: 'string',
42
- enum: ['add', 'toggle', 'remove', 'list', 'clear'],
43
- description: 'Operation to perform',
44
- },
45
- text: { type: 'string', description: 'Todo item text (for add)' },
46
- id: { type: 'number', description: 'Todo item ID (for toggle/remove)' },
47
- priority: {
48
- type: 'string',
49
- enum: ['high', 'medium', 'low'],
50
- description: 'Priority level (for add)',
51
- },
52
- },
53
- required: ['action'],
54
- },
55
- isReadOnly: () => false,
56
- isConcurrencySafe: () => true,
57
- isEnabled: () => true,
58
- async prompt() { return 'Manage session todo list.' },
59
- async call(input: any): Promise<ToolResult> {
60
- switch (input.action) {
61
- case 'add': {
62
- if (!input.text) {
63
- return { type: 'tool_result', tool_use_id: '', content: 'text required', is_error: true }
64
- }
65
- const item: TodoItem = {
66
- id: ++todoCounter,
67
- text: input.text,
68
- done: false,
69
- priority: input.priority,
70
- }
71
- todoList.push(item)
72
- return { type: 'tool_result', tool_use_id: '', content: `Todo added: #${item.id} "${item.text}"` }
73
- }
74
-
75
- case 'toggle': {
76
- const item = todoList.find(t => t.id === input.id)
77
- if (!item) {
78
- return { type: 'tool_result', tool_use_id: '', content: `Todo #${input.id} not found`, is_error: true }
79
- }
80
- item.done = !item.done
81
- return { type: 'tool_result', tool_use_id: '', content: `Todo #${item.id} ${item.done ? 'completed' : 'reopened'}` }
82
- }
83
-
84
- case 'remove': {
85
- const idx = todoList.findIndex(t => t.id === input.id)
86
- if (idx === -1) {
87
- return { type: 'tool_result', tool_use_id: '', content: `Todo #${input.id} not found`, is_error: true }
88
- }
89
- todoList.splice(idx, 1)
90
- return { type: 'tool_result', tool_use_id: '', content: `Todo #${input.id} removed` }
91
- }
92
-
93
- case 'list': {
94
- if (todoList.length === 0) {
95
- return { type: 'tool_result', tool_use_id: '', content: 'No todos.' }
96
- }
97
- const lines = todoList.map(t =>
98
- `${t.done ? '[x]' : '[ ]'} #${t.id} ${t.text}${t.priority ? ` (${t.priority})` : ''}`
99
- )
100
- return { type: 'tool_result', tool_use_id: '', content: lines.join('\n') }
101
- }
102
-
103
- case 'clear': {
104
- todoList.length = 0
105
- return { type: 'tool_result', tool_use_id: '', content: 'All todos cleared.' }
106
- }
107
-
108
- default:
109
- return { type: 'tool_result', tool_use_id: '', content: `Unknown action: ${input.action}`, is_error: true }
110
- }
111
- },
112
- }