tuplet 2.11.0 → 2.15.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 (45) hide show
  1. package/README.md +8 -1
  2. package/dist/activity.d.ts +143 -0
  3. package/dist/activity.d.ts.map +1 -0
  4. package/dist/activity.js +423 -0
  5. package/dist/activity.js.map +1 -0
  6. package/dist/activity.test.d.ts +2 -0
  7. package/dist/activity.test.d.ts.map +1 -0
  8. package/dist/activity.test.js +589 -0
  9. package/dist/activity.test.js.map +1 -0
  10. package/dist/agent.d.ts.map +1 -1
  11. package/dist/agent.js +51 -21
  12. package/dist/agent.js.map +1 -1
  13. package/dist/built-in-agents/explore.d.ts.map +1 -1
  14. package/dist/built-in-agents/explore.js +6 -5
  15. package/dist/built-in-agents/explore.js.map +1 -1
  16. package/dist/executor.d.ts.map +1 -1
  17. package/dist/executor.js +71 -44
  18. package/dist/executor.js.map +1 -1
  19. package/dist/index.d.ts +1 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +2 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/prompt/sub-agent-builder.d.ts.map +1 -1
  24. package/dist/prompt/sub-agent-builder.js +5 -3
  25. package/dist/prompt/sub-agent-builder.js.map +1 -1
  26. package/dist/providers/workspace/file.d.ts.map +1 -1
  27. package/dist/providers/workspace/file.js +6 -0
  28. package/dist/providers/workspace/file.js.map +1 -1
  29. package/dist/shell/commands/curl.d.ts.map +1 -1
  30. package/dist/shell/commands/curl.js +9 -1
  31. package/dist/shell/commands/curl.js.map +1 -1
  32. package/dist/shell/shell.d.ts.map +1 -1
  33. package/dist/shell/shell.js +5 -1
  34. package/dist/shell/shell.js.map +1 -1
  35. package/dist/shell/shell.test.js +4 -0
  36. package/dist/shell/shell.test.js.map +1 -1
  37. package/dist/tools/shell.d.ts.map +1 -1
  38. package/dist/tools/shell.js +14 -0
  39. package/dist/tools/shell.js.map +1 -1
  40. package/dist/tools/sub-agent.d.ts.map +1 -1
  41. package/dist/tools/sub-agent.js +20 -3
  42. package/dist/tools/sub-agent.js.map +1 -1
  43. package/dist/types.d.ts +12 -2
  44. package/dist/types.d.ts.map +1 -1
  45. package/package.json +1 -1
package/README.md CHANGED
@@ -14,6 +14,13 @@ Claude Code is impressive: you open a terminal, ask it to code something, and it
14
14
 
15
15
  Tuplet gives you exactly that. A powerful, multi-agent framework you plug into your application. Your users get an AI that feels custom-built. You get a library that handles the hard parts.
16
16
 
17
+ ## Demo
18
+
19
+ <!-- VIDEO_PLACEHOLDER: Replace with uploaded video -->
20
+ <!-- Example: https://github.com/user-attachments/assets/xxxxx -->
21
+
22
+ > See Tuplet in action — AI agent planning tasks, asking clarifying questions, and working with workspace files in a real web app.
23
+
17
24
  ## You Need Tuplet If
18
25
 
19
26
  - You want your own AI agent in your app that codes, manages documents, or works with any workspace you share with it
@@ -29,7 +36,7 @@ Tuplet gives you exactly that. A powerful, multi-agent framework you plug into y
29
36
 
30
37
  - **Built-in planning & exploration sub-agents** — AI plans its work before executing, just like Claude Code
31
38
  - **Task generation & tracking** — AI generates tasks and follows them, showing progress in real time
32
- - **Rich progress events** — Stream AI reasoning text, tool execution, token usage, and nested sub-agent activity with structured depth for tree-like UIs
39
+ - **Rich progress events** — Stream AI reasoning text, tool execution, token usage, and nested sub-agent activity with structured depth for tree-like UIs. Every event includes a typed `activity` classification and a user-friendly `label` — just `statusBar.setText(update.label)` and you're done
33
40
  - **Clarifying questions** — AI asks one question or a series of questions when it needs more context
34
41
  - **Interruption mode** — Correct the AI mid-execution if it goes in the wrong direction, just like Claude Code
35
42
  - **Optimized built-in prompts** — Carefully tuned prompts for better results across all providers
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Activity Types and Label Generation
3
+ *
4
+ * Semantic activity classification for progress callbacks.
5
+ * Provides typed activity objects and user-friendly labels.
6
+ */
7
+ import type { ParsedCommand } from './shell/types.js';
8
+ export interface ShellHttpRequestActivity {
9
+ type: 'shell:http_request';
10
+ url?: string;
11
+ method: string;
12
+ }
13
+ export interface ShellBrowseActivity {
14
+ type: 'shell:browse';
15
+ url?: string;
16
+ }
17
+ export interface ShellFileReadActivity {
18
+ type: 'shell:file_read';
19
+ path?: string;
20
+ lines?: number;
21
+ }
22
+ export interface ShellFileWriteActivity {
23
+ type: 'shell:file_write';
24
+ path?: string;
25
+ target?: string;
26
+ pattern?: string;
27
+ }
28
+ export interface ShellFileSearchActivity {
29
+ type: 'shell:file_search';
30
+ pattern?: string;
31
+ path?: string;
32
+ namePattern?: string;
33
+ fileType?: string;
34
+ flags?: string[];
35
+ }
36
+ export interface ShellFileManageActivity {
37
+ type: 'shell:file_manage';
38
+ action?: 'list' | 'create_dir' | 'remove' | 'copy' | 'move' | 'chmod' | 'touch';
39
+ path?: string;
40
+ recursive?: boolean;
41
+ }
42
+ export interface ShellFileInfoActivity {
43
+ type: 'shell:file_info';
44
+ path?: string;
45
+ mode?: 'lines' | 'words' | 'chars';
46
+ }
47
+ export interface ShellDataTransformActivity {
48
+ type: 'shell:data_transform';
49
+ filter?: string;
50
+ path?: string;
51
+ numeric?: boolean;
52
+ reverse?: boolean;
53
+ }
54
+ export interface ShellSystemActivity {
55
+ type: 'shell:system';
56
+ action?: 'env' | 'date' | 'help' | 'which' | 'whoami' | 'pwd' | 'uname';
57
+ command?: string;
58
+ format?: string;
59
+ }
60
+ export interface ShellOtherActivity {
61
+ type: 'shell:other';
62
+ }
63
+ export interface ToolReadFileActivity {
64
+ type: 'tool:read_file';
65
+ path: string;
66
+ }
67
+ export interface ToolEditFileActivity {
68
+ type: 'tool:edit_file';
69
+ path: string;
70
+ }
71
+ export interface ToolWriteFileActivity {
72
+ type: 'tool:write_file';
73
+ path: string;
74
+ }
75
+ export interface ToolSearchFilesActivity {
76
+ type: 'tool:search_files';
77
+ pattern: string;
78
+ }
79
+ export interface ToolSearchContentActivity {
80
+ type: 'tool:search_content';
81
+ pattern: string;
82
+ path?: string;
83
+ }
84
+ export interface ToolWebFetchActivity {
85
+ type: 'tool:web_fetch';
86
+ url: string;
87
+ method: string;
88
+ }
89
+ export interface ToolWebSearchActivity {
90
+ type: 'tool:web_search';
91
+ query: string;
92
+ }
93
+ export interface ToolSubAgentActivity {
94
+ type: 'tool:sub_agent';
95
+ agentName: string;
96
+ }
97
+ export interface ToolTaskManageActivity {
98
+ type: 'tool:task_manage';
99
+ action: 'create' | 'update' | 'list' | 'get' | 'delete';
100
+ subject?: string;
101
+ }
102
+ export interface ToolOtherActivity {
103
+ type: 'tool:other';
104
+ toolName: string;
105
+ }
106
+ export interface AgentThinkingActivity {
107
+ type: 'agent:thinking';
108
+ }
109
+ export interface AgentRespondingActivity {
110
+ type: 'agent:responding';
111
+ }
112
+ export interface AgentInterruptedActivity {
113
+ type: 'agent:interrupted';
114
+ reason?: string;
115
+ }
116
+ export type Activity = ShellHttpRequestActivity | ShellBrowseActivity | ShellFileReadActivity | ShellFileWriteActivity | ShellFileSearchActivity | ShellFileManageActivity | ShellFileInfoActivity | ShellDataTransformActivity | ShellSystemActivity | ShellOtherActivity | ToolReadFileActivity | ToolEditFileActivity | ToolWriteFileActivity | ToolSearchFilesActivity | ToolSearchContentActivity | ToolWebFetchActivity | ToolWebSearchActivity | ToolSubAgentActivity | ToolTaskManageActivity | ToolOtherActivity | AgentThinkingActivity | AgentRespondingActivity | AgentInterruptedActivity;
117
+ /**
118
+ * Generate a user-friendly label from an Activity object.
119
+ *
120
+ * Called internally by the framework when building ProgressUpdate events.
121
+ * Also exported for consumers who want to regenerate labels.
122
+ */
123
+ export declare function describeActivity(activity: Activity): string;
124
+ /**
125
+ * Extract a typed Activity from a ParsedCommand.
126
+ */
127
+ export declare function extractShellActivity(parsed: ParsedCommand): Activity;
128
+ /**
129
+ * Extract activity from a pipeline of commands.
130
+ * Classifies by first command, enriched with context from downstream commands.
131
+ */
132
+ export declare function extractPipelineActivity(parsed: ParsedCommand): Activity;
133
+ /**
134
+ * Classify a built-in tool call into an Activity.
135
+ */
136
+ export declare function classifyTool(toolName: string, params: Record<string, unknown>): Activity | undefined;
137
+ /**
138
+ * Classify a shell command string into a typed Activity.
139
+ * Parses the command and extracts semantic activity information.
140
+ * Returns undefined if parsing fails.
141
+ */
142
+ export declare function classifyShellCommand(command: string): Activity | undefined;
143
+ //# sourceMappingURL=activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,423 @@
1
+ /**
2
+ * Activity Types and Label Generation
3
+ *
4
+ * Semantic activity classification for progress callbacks.
5
+ * Provides typed activity objects and user-friendly labels.
6
+ */
7
+ import { parseCommand } from './shell/parser.js';
8
+ // ============================================================================
9
+ // Label Generation
10
+ // ============================================================================
11
+ /**
12
+ * Generate a user-friendly label from an Activity object.
13
+ *
14
+ * Called internally by the framework when building ProgressUpdate events.
15
+ * Also exported for consumers who want to regenerate labels.
16
+ */
17
+ export function describeActivity(activity) {
18
+ switch (activity.type) {
19
+ // ---- Shell ----
20
+ case 'shell:http_request': {
21
+ const host = tryParseHost(activity.url);
22
+ return host
23
+ ? `Requesting ${host}...`
24
+ : `Sending ${activity.method} request...`;
25
+ }
26
+ case 'shell:browse': {
27
+ const host = tryParseHost(activity.url);
28
+ return host
29
+ ? `Browsing ${host}...`
30
+ : 'Browsing web page...';
31
+ }
32
+ case 'shell:file_read':
33
+ return activity.path
34
+ ? `Reading ${basename(activity.path)}...`
35
+ : 'Reading file...';
36
+ case 'shell:file_write':
37
+ if (activity.target)
38
+ return `Writing to ${basename(activity.target)}...`;
39
+ if (activity.path)
40
+ return `Editing ${basename(activity.path)}...`;
41
+ return 'Writing file...';
42
+ case 'shell:file_search':
43
+ if (activity.pattern)
44
+ return `Searching for "${activity.pattern}"...`;
45
+ if (activity.namePattern)
46
+ return `Finding ${activity.namePattern} files...`;
47
+ return 'Searching files...';
48
+ case 'shell:file_manage': {
49
+ const name = activity.path ? basename(activity.path) : undefined;
50
+ switch (activity.action) {
51
+ case 'list':
52
+ return name ? `Listing ${name}...` : 'Listing files...';
53
+ case 'create_dir':
54
+ return name ? `Creating ${name}/...` : 'Creating directory...';
55
+ case 'remove':
56
+ return name ? `Removing ${name}...` : 'Removing files...';
57
+ case 'copy':
58
+ return name ? `Copying ${name}...` : 'Copying files...';
59
+ case 'move':
60
+ return name ? `Moving ${name}...` : 'Moving files...';
61
+ case 'chmod':
62
+ return name ? `Changing permissions on ${name}...` : 'Changing permissions...';
63
+ case 'touch':
64
+ return name ? `Touching ${name}...` : 'Creating file...';
65
+ default:
66
+ return name ? `Managing ${name}...` : 'Managing files...';
67
+ }
68
+ }
69
+ case 'shell:file_info': {
70
+ const name = activity.path ? basename(activity.path) : undefined;
71
+ switch (activity.mode) {
72
+ case 'lines': return name ? `Counting lines in ${name}...` : 'Counting lines...';
73
+ case 'words': return name ? `Counting words in ${name}...` : 'Counting words...';
74
+ case 'chars': return name ? `Counting chars in ${name}...` : 'Counting characters...';
75
+ default: return name ? `Inspecting ${name}...` : 'Inspecting file...';
76
+ }
77
+ }
78
+ case 'shell:data_transform':
79
+ return activity.path
80
+ ? `Processing ${basename(activity.path)}...`
81
+ : 'Processing data...';
82
+ case 'shell:system': {
83
+ switch (activity.action) {
84
+ case 'env': return 'Checking environment...';
85
+ case 'date': return 'Getting date...';
86
+ case 'help': return activity.command ? `Getting help for ${activity.command}...` : 'Getting help...';
87
+ case 'which': return activity.command ? `Finding ${activity.command}...` : 'Finding command...';
88
+ case 'whoami': return 'Checking user...';
89
+ case 'pwd': return 'Getting working directory...';
90
+ case 'uname': return 'Checking system info...';
91
+ default: return 'Running system command...';
92
+ }
93
+ }
94
+ case 'shell:other':
95
+ return 'Running command...';
96
+ // ---- Built-in tools ----
97
+ case 'tool:read_file':
98
+ return `Reading ${basename(activity.path)}...`;
99
+ case 'tool:edit_file':
100
+ return `Editing ${basename(activity.path)}...`;
101
+ case 'tool:write_file':
102
+ return `Writing ${basename(activity.path)}...`;
103
+ case 'tool:search_files':
104
+ return `Finding ${activity.pattern} files...`;
105
+ case 'tool:search_content':
106
+ return `Searching for "${activity.pattern}"...`;
107
+ case 'tool:web_fetch': {
108
+ const host = tryParseHost(activity.url);
109
+ return host
110
+ ? `Fetching ${host}...`
111
+ : 'Fetching URL...';
112
+ }
113
+ case 'tool:web_search':
114
+ return `Searching: "${activity.query}"...`;
115
+ case 'tool:sub_agent':
116
+ return `Delegating to ${activity.agentName}...`;
117
+ case 'tool:task_manage': {
118
+ switch (activity.action) {
119
+ case 'create': return activity.subject
120
+ ? `Creating task: ${activity.subject}...`
121
+ : 'Creating task...';
122
+ case 'update': return 'Updating task...';
123
+ case 'delete': return 'Deleting task...';
124
+ case 'list': return 'Checking tasks...';
125
+ case 'get': return 'Getting task details...';
126
+ }
127
+ return 'Managing task...';
128
+ }
129
+ case 'tool:other':
130
+ return `Running ${activity.toolName}...`;
131
+ // ---- Agent lifecycle ----
132
+ case 'agent:thinking':
133
+ return 'Thinking...';
134
+ case 'agent:responding':
135
+ return 'Responding...';
136
+ case 'agent:interrupted':
137
+ return activity.reason
138
+ ? `Interrupted: ${activity.reason}`
139
+ : 'Interrupted';
140
+ }
141
+ }
142
+ // ============================================================================
143
+ // Shell Activity Extraction
144
+ // ============================================================================
145
+ /**
146
+ * Extract a typed Activity from a ParsedCommand.
147
+ */
148
+ export function extractShellActivity(parsed) {
149
+ switch (parsed.command) {
150
+ case 'curl': {
151
+ const url = parsed.args.find(a => a.startsWith('http'));
152
+ const methodIdx = parsed.args.indexOf('-X');
153
+ const method = methodIdx >= 0 ? (parsed.args[methodIdx + 1] ?? 'GET') :
154
+ (parsed.args.includes('-d') || parsed.args.includes('--data-raw') ? 'POST' : 'GET');
155
+ return { type: 'shell:http_request', url, method };
156
+ }
157
+ case 'wget': {
158
+ const url = parsed.args.find(a => a.startsWith('http'));
159
+ return { type: 'shell:http_request', url, method: 'GET' };
160
+ }
161
+ case 'browse':
162
+ return { type: 'shell:browse', url: parsed.args[0] };
163
+ case 'cat':
164
+ return { type: 'shell:file_read', path: parsed.args.find(a => !a.startsWith('-')) };
165
+ case 'head':
166
+ case 'tail': {
167
+ const nIdx = parsed.args.indexOf('-n');
168
+ const nValue = nIdx >= 0 ? parsed.args[nIdx + 1] : undefined;
169
+ // Skip the -n flag, its value, and any flag-like args to find the file path
170
+ const skipIndices = new Set();
171
+ for (let i = 0; i < parsed.args.length; i++) {
172
+ if (parsed.args[i].startsWith('-')) {
173
+ skipIndices.add(i);
174
+ skipIndices.add(i + 1);
175
+ }
176
+ }
177
+ const path = parsed.args.find((_a, i) => !skipIndices.has(i));
178
+ return {
179
+ type: 'shell:file_read',
180
+ path,
181
+ lines: nValue ? Number(nValue) : undefined
182
+ };
183
+ }
184
+ case 'grep': {
185
+ const flags = parsed.args.filter(a => a.startsWith('-'));
186
+ const positional = parsed.args.filter(a => !a.startsWith('-'));
187
+ return { type: 'shell:file_search', pattern: positional[0], path: positional[1], flags };
188
+ }
189
+ case 'find': {
190
+ const nameIdx = parsed.args.indexOf('-name');
191
+ const typeIdx = parsed.args.indexOf('-type');
192
+ return {
193
+ type: 'shell:file_search',
194
+ path: parsed.args[0],
195
+ namePattern: nameIdx >= 0 ? parsed.args[nameIdx + 1] : undefined,
196
+ fileType: typeIdx >= 0 ? parsed.args[typeIdx + 1] : undefined
197
+ };
198
+ }
199
+ case 'ls':
200
+ return { type: 'shell:file_manage', action: 'list', path: parsed.args.find(a => !a.startsWith('-')) ?? '.' };
201
+ case 'mkdir':
202
+ return { type: 'shell:file_manage', action: 'create_dir', path: parsed.args.find(a => !a.startsWith('-')) };
203
+ case 'rm':
204
+ return {
205
+ type: 'shell:file_manage',
206
+ action: 'remove',
207
+ path: parsed.args.find(a => !a.startsWith('-')),
208
+ recursive: parsed.args.includes('-r') || parsed.args.includes('-rf') || parsed.args.includes('-fr')
209
+ };
210
+ case 'cp':
211
+ return { type: 'shell:file_manage', action: 'copy', path: parsed.args.find(a => !a.startsWith('-')) };
212
+ case 'mv':
213
+ return { type: 'shell:file_manage', action: 'move', path: parsed.args.find(a => !a.startsWith('-')) };
214
+ case 'chmod':
215
+ return { type: 'shell:file_manage', action: 'chmod', path: parsed.args.find(a => !a.startsWith('-')) };
216
+ case 'touch':
217
+ return { type: 'shell:file_manage', action: 'touch', path: parsed.args.find(a => !a.startsWith('-')) };
218
+ case 'echo':
219
+ return { type: 'shell:file_write', target: parsed.outputFile ?? parsed.appendFile };
220
+ case 'sed': {
221
+ const pattern = parsed.args.find(a => a.includes('/'));
222
+ return {
223
+ type: 'shell:file_write',
224
+ path: parsed.args.find(a => !a.startsWith('-') && !a.includes('/')),
225
+ pattern
226
+ };
227
+ }
228
+ case 'file':
229
+ return { type: 'shell:file_info', path: parsed.args[0] };
230
+ case 'wc': {
231
+ const mode = parsed.args.includes('-l') ? 'lines'
232
+ : parsed.args.includes('-w') ? 'words'
233
+ : 'chars';
234
+ return { type: 'shell:file_info', path: parsed.args.find(a => !a.startsWith('-')), mode };
235
+ }
236
+ case 'jq':
237
+ return {
238
+ type: 'shell:data_transform',
239
+ filter: parsed.args.find(a => !a.startsWith('-')),
240
+ path: parsed.args.find((a, i) => i > 0 && !a.startsWith('-'))
241
+ };
242
+ case 'sort':
243
+ return {
244
+ type: 'shell:data_transform',
245
+ path: parsed.args.find(a => !a.startsWith('-')),
246
+ numeric: parsed.args.includes('-n'),
247
+ reverse: parsed.args.includes('-r')
248
+ };
249
+ case 'env':
250
+ return { type: 'shell:system', action: 'env' };
251
+ case 'date': {
252
+ const fmt = parsed.args.find(a => a.startsWith('+'));
253
+ return { type: 'shell:system', action: 'date', format: fmt?.slice(1) };
254
+ }
255
+ case 'help':
256
+ return { type: 'shell:system', action: 'help', command: parsed.args[0] };
257
+ case 'which':
258
+ return { type: 'shell:system', action: 'which', command: parsed.args[0] };
259
+ case 'whoami':
260
+ return { type: 'shell:system', action: 'whoami' };
261
+ case 'pwd':
262
+ return { type: 'shell:system', action: 'pwd' };
263
+ case 'uname':
264
+ return { type: 'shell:system', action: 'uname' };
265
+ default:
266
+ return { type: 'shell:other' };
267
+ }
268
+ }
269
+ /**
270
+ * Extract activity from a pipeline of commands.
271
+ * Classifies by first command, enriched with context from downstream commands.
272
+ */
273
+ export function extractPipelineActivity(parsed) {
274
+ const first = parsed;
275
+ const last = getLastInPipeline(parsed);
276
+ // Network commands always win
277
+ if (first.command === 'curl' || first.command === 'wget' || first.command === 'browse') {
278
+ return extractShellActivity(first);
279
+ }
280
+ // File read piped into transform -> it's a transform with source context
281
+ const fileReaders = ['cat', 'head', 'tail'];
282
+ const transformers = ['jq', 'sort', 'sed'];
283
+ if (fileReaders.includes(first.command) && transformers.includes(last.command)) {
284
+ const path = first.args.find(a => !a.startsWith('-'));
285
+ const transformActivity = extractShellActivity(last);
286
+ if (transformActivity.type === 'shell:data_transform') {
287
+ return { ...transformActivity, path: path ?? transformActivity.path };
288
+ }
289
+ }
290
+ // Default: classify by first command
291
+ return extractShellActivity(first);
292
+ }
293
+ function getLastInPipeline(parsed) {
294
+ let current = parsed;
295
+ while (current.pipe)
296
+ current = current.pipe;
297
+ return current;
298
+ }
299
+ /**
300
+ * Classify a built-in tool call into an Activity.
301
+ */
302
+ export function classifyTool(toolName, params) {
303
+ switch (toolName) {
304
+ case '__shell__':
305
+ return undefined; // Handled separately via extractShellActivity/extractPipelineActivity
306
+ case '__sub_agent__': {
307
+ const agent = params.agent;
308
+ return { type: 'tool:sub_agent', agentName: agent ?? 'unknown' };
309
+ }
310
+ case 'TaskCreate': {
311
+ const subject = params.subject;
312
+ return { type: 'tool:task_manage', action: 'create', subject };
313
+ }
314
+ case 'TaskUpdate': {
315
+ const status = params.status;
316
+ return { type: 'tool:task_manage', action: status === 'deleted' ? 'delete' : 'update' };
317
+ }
318
+ case 'TaskList':
319
+ return { type: 'tool:task_manage', action: 'list' };
320
+ case 'TaskGet':
321
+ return { type: 'tool:task_manage', action: 'get' };
322
+ default:
323
+ // Try to detect common tool patterns by name
324
+ return classifyByToolName(toolName, params);
325
+ }
326
+ }
327
+ /**
328
+ * Classify tools by naming conventions (Read, Write, Edit, Glob, Grep, WebFetch, WebSearch, etc.)
329
+ */
330
+ function classifyByToolName(toolName, params) {
331
+ const nameLower = toolName.toLowerCase();
332
+ // File read tools
333
+ if (nameLower === 'read' || nameLower.endsWith('_read') || nameLower === 'readfile') {
334
+ const path = params.file_path
335
+ ?? params.path ?? '';
336
+ return { type: 'tool:read_file', path };
337
+ }
338
+ // File edit tools
339
+ if (nameLower === 'edit' || nameLower.endsWith('_edit') || nameLower === 'editfile') {
340
+ const path = params.file_path
341
+ ?? params.path ?? '';
342
+ return { type: 'tool:edit_file', path };
343
+ }
344
+ // File write tools
345
+ if (nameLower === 'write' || nameLower.endsWith('_write') || nameLower === 'writefile') {
346
+ const path = params.file_path
347
+ ?? params.path ?? '';
348
+ return { type: 'tool:write_file', path };
349
+ }
350
+ // File search (glob) tools
351
+ if (nameLower === 'glob' || nameLower === 'searchfiles' || nameLower === 'search_files') {
352
+ const pattern = params.pattern ?? '*';
353
+ return { type: 'tool:search_files', pattern };
354
+ }
355
+ // Content search (grep) tools
356
+ if (nameLower === 'grep' || nameLower === 'searchcontent' || nameLower === 'search_content') {
357
+ const pattern = params.pattern ?? '';
358
+ const path = params.path;
359
+ return { type: 'tool:search_content', pattern, path };
360
+ }
361
+ // Web fetch tools
362
+ if (nameLower === 'webfetch' || nameLower === 'web_fetch' || nameLower === 'fetch') {
363
+ const url = params.url ?? '';
364
+ const method = params.method ?? 'GET';
365
+ return { type: 'tool:web_fetch', url, method };
366
+ }
367
+ // Web search tools
368
+ if (nameLower === 'websearch' || nameLower === 'web_search') {
369
+ const query = params.query ?? '';
370
+ return { type: 'tool:web_search', query };
371
+ }
372
+ // Workspace tools
373
+ if (nameLower.startsWith('workspace_read') || nameLower === 'workspace_get') {
374
+ const path = params.path ?? '';
375
+ return { type: 'tool:read_file', path };
376
+ }
377
+ if (nameLower.startsWith('workspace_write') || nameLower === 'workspace_set') {
378
+ const path = params.path ?? '';
379
+ return { type: 'tool:write_file', path };
380
+ }
381
+ if (nameLower.startsWith('workspace_list')) {
382
+ return { type: 'tool:search_files', pattern: '*' };
383
+ }
384
+ // Unknown tool
385
+ return { type: 'tool:other', toolName };
386
+ }
387
+ // ============================================================================
388
+ // Shell Command Classification (public API)
389
+ // ============================================================================
390
+ /**
391
+ * Classify a shell command string into a typed Activity.
392
+ * Parses the command and extracts semantic activity information.
393
+ * Returns undefined if parsing fails.
394
+ */
395
+ export function classifyShellCommand(command) {
396
+ try {
397
+ const parsed = parseCommand(command);
398
+ if (!parsed || parsed.length === 0)
399
+ return undefined;
400
+ const first = parsed[0];
401
+ return first.pipe ? extractPipelineActivity(first) : extractShellActivity(first);
402
+ }
403
+ catch {
404
+ return undefined;
405
+ }
406
+ }
407
+ // ============================================================================
408
+ // Helpers
409
+ // ============================================================================
410
+ function tryParseHost(url) {
411
+ if (!url)
412
+ return undefined;
413
+ try {
414
+ return new URL(url).hostname;
415
+ }
416
+ catch {
417
+ return undefined;
418
+ }
419
+ }
420
+ function basename(path) {
421
+ return path.split('/').pop() ?? path;
422
+ }
423
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=activity.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.test.d.ts","sourceRoot":"","sources":["../src/activity.test.ts"],"names":[],"mappings":""}