capacitor-mobile-claw 1.0.11 → 1.0.12
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.
|
@@ -1088,15 +1088,16 @@ function buildAgentTools() {
|
|
|
1088
1088
|
|
|
1089
1089
|
// ── AgentEvent → Bridge event mapping ────────────────────────────────────
|
|
1090
1090
|
|
|
1091
|
-
|
|
1091
|
+
// skillContext: if set, events are tagged as skill events and ignored by the main session view
|
|
1092
|
+
function bridgeEvent(event, skillContext = null) {
|
|
1092
1093
|
switch (event.type) {
|
|
1093
1094
|
case 'message_update': {
|
|
1094
1095
|
const e = event.assistantMessageEvent;
|
|
1095
1096
|
if (e.type === 'text_delta') {
|
|
1096
|
-
channel.send('message', { type: 'agent.event', eventType: 'text_delta', data: { text: e.delta } });
|
|
1097
|
+
channel.send('message', { type: 'agent.event', eventType: 'text_delta', data: { text: e.delta }, skill: skillContext });
|
|
1097
1098
|
}
|
|
1098
1099
|
if (e.type === 'thinking_delta') {
|
|
1099
|
-
channel.send('message', { type: 'agent.event', eventType: 'thinking', data: { text: e.delta } });
|
|
1100
|
+
channel.send('message', { type: 'agent.event', eventType: 'thinking', data: { text: e.delta }, skill: skillContext });
|
|
1100
1101
|
}
|
|
1101
1102
|
break;
|
|
1102
1103
|
}
|
|
@@ -1105,6 +1106,7 @@ function bridgeEvent(event) {
|
|
|
1105
1106
|
type: 'agent.event',
|
|
1106
1107
|
eventType: 'tool_use',
|
|
1107
1108
|
data: { toolName: event.toolName, toolCallId: event.toolCallId, args: event.args },
|
|
1109
|
+
skill: skillContext,
|
|
1108
1110
|
});
|
|
1109
1111
|
break;
|
|
1110
1112
|
case 'tool_execution_end':
|
|
@@ -1112,6 +1114,7 @@ function bridgeEvent(event) {
|
|
|
1112
1114
|
type: 'agent.event',
|
|
1113
1115
|
eventType: 'tool_result',
|
|
1114
1116
|
data: { toolName: event.toolName, toolCallId: event.toolCallId, result: event.result },
|
|
1117
|
+
skill: skillContext,
|
|
1115
1118
|
});
|
|
1116
1119
|
break;
|
|
1117
1120
|
}
|
|
@@ -1516,7 +1519,7 @@ function buildSkillTools(injectedTools, milestones) {
|
|
|
1516
1519
|
});
|
|
1517
1520
|
}
|
|
1518
1521
|
|
|
1519
|
-
async function
|
|
1522
|
+
async function runSkill(agentId, locale = 'en', injectedConfig = null) {
|
|
1520
1523
|
await refreshOAuthTokenIfNeeded(agentId);
|
|
1521
1524
|
const authProfiles = loadAuthProfiles(agentId);
|
|
1522
1525
|
const apiKey = resolveApiKey(authProfiles);
|
|
@@ -1549,7 +1552,8 @@ async function runSetupSkill(agentId, locale = 'en', injectedConfig = null) {
|
|
|
1549
1552
|
const filteredMcp = mcpTools.filter(t => !setupNames.has(t.name));
|
|
1550
1553
|
const tools = [...setupTools, ...filteredBase, ...filteredMcp];
|
|
1551
1554
|
|
|
1552
|
-
const
|
|
1555
|
+
const skillId = injectedConfig?.id || 'setup';
|
|
1556
|
+
const sessionKey = `${skillId}/${Date.now()}`;
|
|
1553
1557
|
const agent = new Agent({
|
|
1554
1558
|
initialState: {
|
|
1555
1559
|
systemPrompt,
|
|
@@ -1568,12 +1572,15 @@ async function runSetupSkill(agentId, locale = 'en', injectedConfig = null) {
|
|
|
1568
1572
|
setupMilestonesReached.clear();
|
|
1569
1573
|
|
|
1570
1574
|
agent.subscribe((event) => {
|
|
1571
|
-
bridgeEvent(event);
|
|
1575
|
+
bridgeEvent(event, sessionKey); // tag all events with skill sessionKey
|
|
1572
1576
|
if (event.type === 'tool_execution_end' && sessionKey) {
|
|
1573
1577
|
_checkpointMessages(agent, agentId, sessionKey);
|
|
1574
1578
|
}
|
|
1575
1579
|
});
|
|
1576
1580
|
|
|
1581
|
+
// Notify client that the skill session has started (used to init isolated conversation view)
|
|
1582
|
+
channel.send('message', { type: 'skill.session_started', sessionKey, skillId });
|
|
1583
|
+
|
|
1577
1584
|
const startTime = Date.now();
|
|
1578
1585
|
try {
|
|
1579
1586
|
await agent.prompt(kickoff);
|
|
@@ -1585,17 +1592,21 @@ async function runSetupSkill(agentId, locale = 'en', injectedConfig = null) {
|
|
|
1585
1592
|
channel.send('message', {
|
|
1586
1593
|
type: 'agent.completed',
|
|
1587
1594
|
sessionKey,
|
|
1595
|
+
skill: sessionKey,
|
|
1588
1596
|
usage,
|
|
1589
1597
|
cumulativeUsage: usage,
|
|
1590
1598
|
durationMs: Date.now() - startTime,
|
|
1591
1599
|
});
|
|
1600
|
+
channel.send('message', { type: 'skill.ended', skillId, sessionKey });
|
|
1592
1601
|
} catch (err) {
|
|
1593
1602
|
channel.send('message', {
|
|
1594
1603
|
type: 'agent.error',
|
|
1595
|
-
|
|
1604
|
+
skill: sessionKey,
|
|
1605
|
+
error: err.message || 'Skill error',
|
|
1596
1606
|
code: err.status ? String(err.status) : undefined,
|
|
1597
1607
|
retryable: isTransientError(err),
|
|
1598
1608
|
});
|
|
1609
|
+
channel.send('message', { type: 'skill.ended', skillId, sessionKey });
|
|
1599
1610
|
}
|
|
1600
1611
|
}
|
|
1601
1612
|
|
|
@@ -1897,7 +1908,7 @@ channel.addListener('message', async (event) => {
|
|
|
1897
1908
|
case 'skill.start': {
|
|
1898
1909
|
const agentId = msg.agentId || 'main';
|
|
1899
1910
|
const locale = msg.locale || 'en';
|
|
1900
|
-
await
|
|
1911
|
+
await runSkill(agentId, locale, msg.config || null);
|
|
1901
1912
|
break;
|
|
1902
1913
|
}
|
|
1903
1914
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "capacitor-mobile-claw",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.12",
|
|
4
4
|
"description": "On-device AI agent engine for Capacitor apps — embedded Node.js worker with LLM, file tools, code execution, git, and extensible MCP server",
|
|
5
5
|
"main": "dist/esm/index.js",
|
|
6
6
|
"types": "dist/esm/index.d.ts",
|