@runfusion/fusion 0.19.0 → 0.20.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/dist/bin.js +5019 -2164
- package/dist/client/assets/AgentDetailView-C6BG7O7i.js +18 -0
- package/dist/client/assets/AgentDetailView-CUtWvXBn.css +1 -0
- package/dist/client/assets/ChatView-DeXUYwSY.js +1 -0
- package/dist/client/assets/{DevServerView-DI71QIND.js → DevServerView-Dariyxt_.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-6eBfMR3k.js → DirectoryPicker-SchiK-Aq.js} +1 -1
- package/dist/client/assets/{DocumentsView-D9pxwmaa.js → DocumentsView-C6v-tBhG.js} +1 -1
- package/dist/client/assets/InsightsView-AWo5o_81.css +1 -0
- package/dist/client/assets/InsightsView-Cqim12az.js +11 -0
- package/dist/client/assets/{MemoryView-DfjllRpZ.js → MemoryView-CakLoJtY.js} +2 -2
- package/dist/client/assets/NodesView-BxGm3poT.js +14 -0
- package/dist/client/assets/{NodesView-sJgPLTzz.css → NodesView-fXqDk9ur.css} +1 -1
- package/dist/client/assets/PiExtensionsManager-lJbmskyZ.js +6 -0
- package/dist/client/assets/PluginManager-BZjNNf9m.js +1 -0
- package/dist/client/assets/ResearchView-Bzsr9V0y.js +1 -0
- package/dist/client/assets/{RoadmapsView-ajwwf979.js → RoadmapsView-CeKks_OI.js} +2 -2
- package/dist/client/assets/SettingsModal-D-9CLguN.js +31 -0
- package/dist/client/assets/{SettingsModal-D732WMft.js → SettingsModal-YdeVPhRJ.js} +1 -1
- package/dist/client/assets/{SetupWizardModal-DRF5fOoR.css → SetupWizardModal-CGYGKurR.css} +1 -1
- package/dist/client/assets/SetupWizardModal-DAC04LlA.js +1 -0
- package/dist/client/assets/{SkillsView-CzVO7yTO.js → SkillsView-CClC_5RN.js} +1 -1
- package/dist/client/assets/index-CrHLf3pB.js +1222 -0
- package/dist/client/assets/index-Df1bHDY4.css +1 -0
- package/dist/client/assets/star-DxVRh9VT.js +6 -0
- package/dist/client/assets/{users-R3_m9pE5.js → users-3SD3oNMQ.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/index.ts +3 -5
- package/dist/droid-cli/package.json +1 -1
- package/dist/droid-cli/src/__tests__/event-bridge.test.ts +6 -1315
- package/dist/droid-cli/src/__tests__/provider.test.ts +6 -1927
- package/dist/droid-cli/src/control-handler.ts +1 -82
- package/dist/droid-cli/src/event-bridge.ts +1 -397
- package/dist/droid-cli/src/mcp-config.ts +1 -144
- package/dist/droid-cli/src/process-manager.ts +1 -358
- package/dist/droid-cli/src/prompt-builder.ts +1 -629
- package/dist/droid-cli/src/provider.ts +1 -447
- package/dist/droid-cli/src/stream-parser.ts +1 -37
- package/dist/droid-cli/src/thinking-config.ts +1 -83
- package/dist/droid-cli/src/tool-mapping.ts +1 -147
- package/dist/droid-cli/src/types.ts +1 -87
- package/dist/extension.js +4084 -1654
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/package.json +3 -3
- package/skill/fusion/references/engine-tools.md +3 -1
- package/skill/fusion/references/extension-tools.md +3 -1
- package/dist/client/assets/ChatView-DEG93wpC.js +0 -1
- package/dist/client/assets/InsightsView-4KiUKzbz.css +0 -1
- package/dist/client/assets/InsightsView-D2_XwizY.js +0 -11
- package/dist/client/assets/NodesView-D7hWWUCW.js +0 -14
- package/dist/client/assets/PiExtensionsManager-d8cJKjcL.js +0 -11
- package/dist/client/assets/PluginManager-CNzhmPzJ.js +0 -1
- package/dist/client/assets/ResearchView-2xAa3pzZ.js +0 -1
- package/dist/client/assets/SettingsModal-Dk0zKdTy.js +0 -31
- package/dist/client/assets/SetupWizardModal-DohGTvQT.js +0 -1
- package/dist/client/assets/index-CVCt2pCH.css +0 -1
- package/dist/client/assets/index-hnO5QagU.js +0 -1239
|
@@ -1,147 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Single-source-of-truth tool mapping table for bidirectional translation
|
|
3
|
-
* between Droid CLI tool names/arguments and pi tool names/arguments.
|
|
4
|
-
*
|
|
5
|
-
* All lookup tables are derived from the TOOL_MAPPINGS array.
|
|
6
|
-
* Unknown tools and arguments pass through unchanged.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* A mapping entry for a single tool.
|
|
11
|
-
* `args` maps Claude argument names to pi argument names (only renamed args).
|
|
12
|
-
*/
|
|
13
|
-
export interface ToolMapping {
|
|
14
|
-
claude: string;
|
|
15
|
-
pi: string;
|
|
16
|
-
args: Record<string, string>;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* The canonical tool mapping table. All other lookup structures are derived from this.
|
|
21
|
-
*/
|
|
22
|
-
export const TOOL_MAPPINGS: ToolMapping[] = [
|
|
23
|
-
{ claude: "Read", pi: "read", args: { file_path: "path" } },
|
|
24
|
-
{ claude: "Write", pi: "write", args: { file_path: "path" } },
|
|
25
|
-
{
|
|
26
|
-
claude: "Edit",
|
|
27
|
-
pi: "edit",
|
|
28
|
-
args: { file_path: "path", old_string: "oldText", new_string: "newText" },
|
|
29
|
-
},
|
|
30
|
-
{ claude: "Bash", pi: "bash", args: {} },
|
|
31
|
-
{ claude: "Grep", pi: "grep", args: { head_limit: "limit" } },
|
|
32
|
-
{ claude: "Glob", pi: "find", args: {} },
|
|
33
|
-
];
|
|
34
|
-
|
|
35
|
-
/** Prefix for custom pi tools exposed via MCP. */
|
|
36
|
-
export const CUSTOM_TOOLS_MCP_PREFIX = "mcp__custom-tools__";
|
|
37
|
-
|
|
38
|
-
/** Set of built-in pi tool names derived from TOOL_MAPPINGS for O(1) lookup. */
|
|
39
|
-
const BUILT_IN_PI_NAMES = new Set(TOOL_MAPPINGS.map((m) => m.pi));
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Check if a pi tool name is a custom tool (not one of the 6 built-in tools).
|
|
43
|
-
* Used by prompt builder to decide whether to add MCP prefix in history replay.
|
|
44
|
-
*/
|
|
45
|
-
export function isCustomToolName(piName: string): boolean {
|
|
46
|
-
return !BUILT_IN_PI_NAMES.has(piName);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Check if a Claude tool name maps to a pi-known tool.
|
|
51
|
-
* Returns true for built-in tools (Read, Write, etc.) and custom MCP tools (mcp__custom-tools__*).
|
|
52
|
-
* Returns false for internal Claude Code tools (ToolSearch, Task, Agent, etc.) that pi cannot execute.
|
|
53
|
-
* Used by event bridge to filter out internal tool calls.
|
|
54
|
-
*/
|
|
55
|
-
export function isPiKnownDroidTool(claudeName: string): boolean {
|
|
56
|
-
if (claudeName.startsWith(CUSTOM_TOOLS_MCP_PREFIX)) return true;
|
|
57
|
-
return claudeName.toLowerCase() in DROID_TO_PI_NAME;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Derived lookup maps
|
|
61
|
-
|
|
62
|
-
/** Lowercase Claude name -> pi name */
|
|
63
|
-
const DROID_TO_PI_NAME: Record<string, string> = {};
|
|
64
|
-
/** Pi name -> PascalCase Claude name */
|
|
65
|
-
const PI_TO_DROID_NAME: Record<string, string> = {};
|
|
66
|
-
/** Lowercase Claude name -> { claudeArgName: piArgName } */
|
|
67
|
-
const DROID_TO_PI_ARGS: Record<string, Record<string, string>> = {};
|
|
68
|
-
/** Pi name -> { piArgName: claudeArgName } */
|
|
69
|
-
const PI_TO_DROID_ARGS: Record<string, Record<string, string>> = {};
|
|
70
|
-
|
|
71
|
-
for (const m of TOOL_MAPPINGS) {
|
|
72
|
-
DROID_TO_PI_NAME[m.claude.toLowerCase()] = m.pi;
|
|
73
|
-
PI_TO_DROID_NAME[m.pi] = m.claude;
|
|
74
|
-
DROID_TO_PI_ARGS[m.claude.toLowerCase()] = m.args;
|
|
75
|
-
|
|
76
|
-
// Build reverse arg map
|
|
77
|
-
const reverseArgs: Record<string, string> = {};
|
|
78
|
-
for (const [from, to] of Object.entries(m.args)) {
|
|
79
|
-
reverseArgs[to] = from;
|
|
80
|
-
}
|
|
81
|
-
PI_TO_DROID_ARGS[m.pi] = reverseArgs;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Handle glob/find asymmetry: pi's "glob" also maps back to Claude's "Glob"
|
|
85
|
-
PI_TO_DROID_NAME["glob"] = "Glob";
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Map a Claude tool name to the corresponding pi tool name.
|
|
89
|
-
* Strips the mcp__custom-tools__ prefix for custom tools first,
|
|
90
|
-
* then falls back to case-insensitive built-in lookup.
|
|
91
|
-
* Unknown tool names pass through unchanged.
|
|
92
|
-
*/
|
|
93
|
-
export function mapDroidToolNameToPi(claudeName: string): string {
|
|
94
|
-
// Strip custom-tools MCP prefix first (e.g., "mcp__custom-tools__deploy" -> "deploy")
|
|
95
|
-
if (claudeName.startsWith(CUSTOM_TOOLS_MCP_PREFIX)) {
|
|
96
|
-
return claudeName.slice(CUSTOM_TOOLS_MCP_PREFIX.length);
|
|
97
|
-
}
|
|
98
|
-
// Standard built-in tool mapping (case-insensitive)
|
|
99
|
-
return DROID_TO_PI_NAME[claudeName.toLowerCase()] ?? claudeName;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Map a pi tool name to the corresponding Claude tool name.
|
|
104
|
-
* Direct lookup. Unknown tool names pass through unchanged.
|
|
105
|
-
*/
|
|
106
|
-
export function mapPiToolNameToDroid(piName: string): string {
|
|
107
|
-
return PI_TO_DROID_NAME[piName] ?? piName;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Translate Claude tool arguments to pi format.
|
|
112
|
-
* Only known renamed arguments are translated; all others pass through unchanged.
|
|
113
|
-
* This prevents dropping unknown/extra arguments (Pitfall 5).
|
|
114
|
-
*/
|
|
115
|
-
export function translateDroidArgsToPi(
|
|
116
|
-
claudeToolName: string,
|
|
117
|
-
args: Record<string, unknown>,
|
|
118
|
-
): Record<string, unknown> {
|
|
119
|
-
const renames = DROID_TO_PI_ARGS[claudeToolName.toLowerCase()];
|
|
120
|
-
if (!renames || Object.keys(renames).length === 0) return args;
|
|
121
|
-
|
|
122
|
-
const result: Record<string, unknown> = {};
|
|
123
|
-
for (const [key, value] of Object.entries(args)) {
|
|
124
|
-
const newKey = renames[key] ?? key;
|
|
125
|
-
result[newKey] = value;
|
|
126
|
-
}
|
|
127
|
-
return result;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Translate pi tool arguments to Claude format.
|
|
132
|
-
* Only known renamed arguments are translated; all others pass through unchanged.
|
|
133
|
-
*/
|
|
134
|
-
export function translatePiArgsToDroid(
|
|
135
|
-
piToolName: string,
|
|
136
|
-
args: Record<string, unknown>,
|
|
137
|
-
): Record<string, unknown> {
|
|
138
|
-
const renames = PI_TO_DROID_ARGS[piToolName];
|
|
139
|
-
if (!renames || Object.keys(renames).length === 0) return args;
|
|
140
|
-
|
|
141
|
-
const result: Record<string, unknown> = {};
|
|
142
|
-
for (const [key, value] of Object.entries(args)) {
|
|
143
|
-
const newKey = renames[key] ?? key;
|
|
144
|
-
result[newKey] = value;
|
|
145
|
-
}
|
|
146
|
-
return result;
|
|
147
|
-
}
|
|
1
|
+
export * from "../../../plugins/fusion-plugin-droid-runtime/src/tool-mapping.js";
|
|
@@ -1,87 +1 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// NDJSON message types from Droid CLI stdout
|
|
4
|
-
|
|
5
|
-
export interface ClaudeStreamEventMessage {
|
|
6
|
-
type: "stream_event";
|
|
7
|
-
event: ClaudeApiEvent;
|
|
8
|
-
/** Present on sub-agent stream events; null/undefined for top-level events. */
|
|
9
|
-
parent_tool_use_id?: string | null;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export interface ClaudeResultMessage {
|
|
13
|
-
type: "result";
|
|
14
|
-
subtype: "success" | "error";
|
|
15
|
-
result?: string;
|
|
16
|
-
error?: string;
|
|
17
|
-
session_id?: string;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface ClaudeSystemMessage {
|
|
21
|
-
type: "system";
|
|
22
|
-
subtype: string;
|
|
23
|
-
session_id?: string;
|
|
24
|
-
tools?: unknown[];
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export interface ClaudeControlRequest {
|
|
28
|
-
type: "control_request";
|
|
29
|
-
request_id: string;
|
|
30
|
-
request: {
|
|
31
|
-
subtype: "can_use_tool";
|
|
32
|
-
tool_name: string;
|
|
33
|
-
input: Record<string, unknown>;
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export type NdjsonMessage =
|
|
38
|
-
| ClaudeStreamEventMessage
|
|
39
|
-
| ClaudeResultMessage
|
|
40
|
-
| ClaudeSystemMessage
|
|
41
|
-
| ClaudeControlRequest;
|
|
42
|
-
|
|
43
|
-
// Claude API event types (inside stream_event wrapper)
|
|
44
|
-
|
|
45
|
-
export interface ClaudeApiEvent {
|
|
46
|
-
type: string; // message_start, content_block_start, content_block_delta, content_block_stop, message_delta, message_stop
|
|
47
|
-
index?: number;
|
|
48
|
-
message?: {
|
|
49
|
-
id?: string;
|
|
50
|
-
type?: string;
|
|
51
|
-
role?: string;
|
|
52
|
-
content?: unknown[];
|
|
53
|
-
model?: string;
|
|
54
|
-
usage?: ClaudeUsage;
|
|
55
|
-
};
|
|
56
|
-
content_block?: {
|
|
57
|
-
type: string; // "text", "tool_use", "thinking"
|
|
58
|
-
text?: string;
|
|
59
|
-
id?: string;
|
|
60
|
-
name?: string;
|
|
61
|
-
input?: string;
|
|
62
|
-
};
|
|
63
|
-
delta?: {
|
|
64
|
-
type?: string; // "text_delta", "input_json_delta", "thinking_delta", "signature_delta"
|
|
65
|
-
text?: string;
|
|
66
|
-
partial_json?: string;
|
|
67
|
-
thinking?: string;
|
|
68
|
-
signature?: string;
|
|
69
|
-
stop_reason?: string;
|
|
70
|
-
};
|
|
71
|
-
usage?: ClaudeUsage;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export interface ClaudeUsage {
|
|
75
|
-
input_tokens?: number;
|
|
76
|
-
output_tokens?: number;
|
|
77
|
-
cache_read_input_tokens?: number;
|
|
78
|
-
cache_creation_input_tokens?: number;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// Content block tracking during stream processing
|
|
82
|
-
|
|
83
|
-
export interface TrackedContentBlock {
|
|
84
|
-
type: "text" | "thinking";
|
|
85
|
-
text: string;
|
|
86
|
-
index: number; // Claude's content_block index
|
|
87
|
-
}
|
|
1
|
+
export * from "../../../plugins/fusion-plugin-droid-runtime/src/types.js";
|