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
- function bridgeEvent(event) {
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 runSetupSkill(agentId, locale = 'en', injectedConfig = null) {
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 sessionKey = `setup/${Date.now()}`;
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
- error: err.message || 'Setup skill error',
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 runSetupSkill(agentId, locale, msg.config || null);
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.11",
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",