tuplet 2.10.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.
- package/README.md +8 -1
- package/dist/activity.d.ts +143 -0
- package/dist/activity.d.ts.map +1 -0
- package/dist/activity.js +423 -0
- package/dist/activity.js.map +1 -0
- package/dist/activity.test.d.ts +2 -0
- package/dist/activity.test.d.ts.map +1 -0
- package/dist/activity.test.js +589 -0
- package/dist/activity.test.js.map +1 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +51 -21
- package/dist/agent.js.map +1 -1
- package/dist/built-in-agents/explore.d.ts.map +1 -1
- package/dist/built-in-agents/explore.js +6 -5
- package/dist/built-in-agents/explore.js.map +1 -1
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +80 -47
- package/dist/executor.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/prompt/sub-agent-builder.d.ts.map +1 -1
- package/dist/prompt/sub-agent-builder.js +5 -3
- package/dist/prompt/sub-agent-builder.js.map +1 -1
- package/dist/providers/workspace/file.d.ts.map +1 -1
- package/dist/providers/workspace/file.js +6 -0
- package/dist/providers/workspace/file.js.map +1 -1
- package/dist/shell/commands/curl.d.ts.map +1 -1
- package/dist/shell/commands/curl.js +9 -1
- package/dist/shell/commands/curl.js.map +1 -1
- package/dist/shell/shell.d.ts.map +1 -1
- package/dist/shell/shell.js +5 -1
- package/dist/shell/shell.js.map +1 -1
- package/dist/shell/shell.test.js +4 -0
- package/dist/shell/shell.test.js.map +1 -1
- package/dist/tools/shell.d.ts.map +1 -1
- package/dist/tools/shell.js +14 -0
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/sub-agent.d.ts.map +1 -1
- package/dist/tools/sub-agent.js +20 -3
- package/dist/tools/sub-agent.js.map +1 -1
- package/dist/trace/builder.d.ts +4 -0
- package/dist/trace/builder.d.ts.map +1 -1
- package/dist/trace/builder.js +15 -0
- package/dist/trace/builder.js.map +1 -1
- package/dist/trace/index.d.ts +1 -1
- package/dist/trace/index.d.ts.map +1 -1
- package/dist/trace/index.js.map +1 -1
- package/dist/trace/types.d.ts +16 -0
- package/dist/trace/types.d.ts.map +1 -1
- package/dist/types.d.ts +17 -2
- package/dist/types.d.ts.map +1 -1
- 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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"}
|
package/dist/activity.js
ADDED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"activity.test.d.ts","sourceRoot":"","sources":["../src/activity.test.ts"],"names":[],"mappings":""}
|