@ynhcj/xiaoyi-channel 0.0.122-beta → 0.0.124-beta

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 (94) hide show
  1. package/dist/src/channel.js +2 -17
  2. package/dist/src/client.js +7 -1
  3. package/dist/src/monitor.js +10 -1
  4. package/dist/src/provider.js +9 -5
  5. package/dist/src/task-manager.js +6 -1
  6. package/dist/src/tools/calendar-tool.d.ts +2 -1
  7. package/dist/src/tools/calendar-tool.js +112 -116
  8. package/dist/src/tools/call-device-tool.d.ts +2 -1
  9. package/dist/src/tools/call-device-tool.js +126 -103
  10. package/dist/src/tools/call-phone-tool.d.ts +2 -1
  11. package/dist/src/tools/call-phone-tool.js +109 -113
  12. package/dist/src/tools/create-alarm-tool.d.ts +2 -1
  13. package/dist/src/tools/create-alarm-tool.js +227 -231
  14. package/dist/src/tools/create-all-tools.d.ts +16 -0
  15. package/dist/src/tools/create-all-tools.js +50 -0
  16. package/dist/src/tools/delete-alarm-tool.d.ts +2 -1
  17. package/dist/src/tools/delete-alarm-tool.js +131 -135
  18. package/dist/src/tools/get-alarm-tool-schema.d.ts +2 -1
  19. package/dist/src/tools/get-alarm-tool-schema.js +16 -10
  20. package/dist/src/tools/get-calendar-tool-schema.d.ts +2 -1
  21. package/dist/src/tools/get-calendar-tool-schema.js +12 -8
  22. package/dist/src/tools/get-collection-tool-schema.d.ts +2 -1
  23. package/dist/src/tools/get-collection-tool-schema.js +11 -9
  24. package/dist/src/tools/get-contact-tool-schema.d.ts +2 -1
  25. package/dist/src/tools/get-contact-tool-schema.js +16 -10
  26. package/dist/src/tools/get-device-file-tool-schema.d.ts +2 -1
  27. package/dist/src/tools/get-device-file-tool-schema.js +13 -9
  28. package/dist/src/tools/get-email-tool-schema.d.ts +2 -1
  29. package/dist/src/tools/get-email-tool-schema.js +11 -8
  30. package/dist/src/tools/get-note-tool-schema.d.ts +2 -1
  31. package/dist/src/tools/get-note-tool-schema.js +14 -9
  32. package/dist/src/tools/get-photo-tool-schema.d.ts +2 -1
  33. package/dist/src/tools/get-photo-tool-schema.js +12 -9
  34. package/dist/src/tools/image-reading-tool.d.ts +2 -1
  35. package/dist/src/tools/image-reading-tool.js +86 -90
  36. package/dist/src/tools/location-tool.d.ts +2 -1
  37. package/dist/src/tools/location-tool.js +87 -91
  38. package/dist/src/tools/login-token-tool.d.ts +2 -1
  39. package/dist/src/tools/login-token-tool.js +113 -116
  40. package/dist/src/tools/modify-alarm-tool.d.ts +2 -1
  41. package/dist/src/tools/modify-alarm-tool.js +232 -236
  42. package/dist/src/tools/modify-note-tool.d.ts +2 -1
  43. package/dist/src/tools/modify-note-tool.js +104 -108
  44. package/dist/src/tools/note-tool.d.ts +2 -1
  45. package/dist/src/tools/note-tool.js +103 -107
  46. package/dist/src/tools/query-app-message-tool.d.ts +2 -1
  47. package/dist/src/tools/query-app-message-tool.js +108 -111
  48. package/dist/src/tools/query-memory-data-tool.d.ts +2 -1
  49. package/dist/src/tools/query-memory-data-tool.js +109 -112
  50. package/dist/src/tools/query-todo-task-tool.d.ts +2 -1
  51. package/dist/src/tools/query-todo-task-tool.js +103 -106
  52. package/dist/src/tools/save-file-to-phone-tool.d.ts +2 -1
  53. package/dist/src/tools/save-file-to-phone-tool.js +127 -131
  54. package/dist/src/tools/save-media-to-gallery-tool.d.ts +2 -1
  55. package/dist/src/tools/save-media-to-gallery-tool.js +134 -138
  56. package/dist/src/tools/save-self-evolution-skill-tool.d.ts +2 -1
  57. package/dist/src/tools/save-self-evolution-skill-tool.js +194 -196
  58. package/dist/src/tools/search-alarm-tool.d.ts +2 -1
  59. package/dist/src/tools/search-alarm-tool.js +171 -175
  60. package/dist/src/tools/search-calendar-tool.d.ts +2 -1
  61. package/dist/src/tools/search-calendar-tool.js +145 -149
  62. package/dist/src/tools/search-contact-tool.d.ts +2 -1
  63. package/dist/src/tools/search-contact-tool.js +98 -102
  64. package/dist/src/tools/search-email-tool.d.ts +2 -1
  65. package/dist/src/tools/search-email-tool.js +107 -111
  66. package/dist/src/tools/search-file-tool.d.ts +2 -1
  67. package/dist/src/tools/search-file-tool.js +99 -103
  68. package/dist/src/tools/search-message-tool.d.ts +2 -1
  69. package/dist/src/tools/search-message-tool.js +100 -104
  70. package/dist/src/tools/search-note-tool.d.ts +2 -1
  71. package/dist/src/tools/search-note-tool.js +95 -99
  72. package/dist/src/tools/search-photo-gallery-tool.d.ts +2 -1
  73. package/dist/src/tools/search-photo-gallery-tool.js +34 -38
  74. package/dist/src/tools/send-email-tool.d.ts +2 -1
  75. package/dist/src/tools/send-email-tool.js +105 -108
  76. package/dist/src/tools/send-file-to-user-tool.d.ts +2 -1
  77. package/dist/src/tools/send-file-to-user-tool.js +151 -155
  78. package/dist/src/tools/send-message-tool.d.ts +2 -1
  79. package/dist/src/tools/send-message-tool.js +119 -123
  80. package/dist/src/tools/session-manager.d.ts +21 -6
  81. package/dist/src/tools/session-manager.js +129 -18
  82. package/dist/src/tools/upload-file-tool.d.ts +2 -1
  83. package/dist/src/tools/upload-file-tool.js +78 -82
  84. package/dist/src/tools/upload-photo-tool.d.ts +2 -1
  85. package/dist/src/tools/upload-photo-tool.js +69 -73
  86. package/dist/src/tools/xiaoyi-add-collection-tool.d.ts +2 -1
  87. package/dist/src/tools/xiaoyi-add-collection-tool.js +143 -147
  88. package/dist/src/tools/xiaoyi-collection-tool.d.ts +2 -1
  89. package/dist/src/tools/xiaoyi-collection-tool.js +111 -115
  90. package/dist/src/tools/xiaoyi-delete-collection-tool.d.ts +2 -1
  91. package/dist/src/tools/xiaoyi-delete-collection-tool.js +124 -128
  92. package/dist/src/tools/xiaoyi-gui-tool.d.ts +2 -1
  93. package/dist/src/tools/xiaoyi-gui-tool.js +84 -88
  94. package/package.json +1 -1
@@ -1,92 +1,115 @@
1
- import { noteTool } from "./note-tool.js";
2
- import { searchNoteTool } from "./search-note-tool.js";
3
- import { modifyNoteTool } from "./modify-note-tool.js";
4
- import { createAlarmTool } from "./create-alarm-tool.js";
5
- import { searchAlarmTool } from "./search-alarm-tool.js";
6
- import { modifyAlarmTool } from "./modify-alarm-tool.js";
7
- import { deleteAlarmTool } from "./delete-alarm-tool.js";
8
- import { searchContactTool } from "./search-contact-tool.js";
9
- import { callPhoneTool } from "./call-phone-tool.js";
10
- import { searchMessageTool } from "./search-message-tool.js";
11
- import { sendMessageTool } from "./send-message-tool.js";
12
- import { xiaoyiAddCollectionTool } from "./xiaoyi-add-collection-tool.js";
13
- import { xiaoyiCollectionTool } from "./xiaoyi-collection-tool.js";
14
- import { xiaoyiDeleteCollectionTool } from "./xiaoyi-delete-collection-tool.js";
15
- import { calendarTool } from "./calendar-tool.js";
16
- import { searchCalendarTool } from "./search-calendar-tool.js";
17
- import { searchPhotoGalleryTool } from "./search-photo-gallery-tool.js";
18
- import { uploadPhotoTool } from "./upload-photo-tool.js";
19
- import { saveMediaToGalleryTool } from "./save-media-to-gallery-tool.js";
20
- import { searchFileTool } from "./search-file-tool.js";
21
- import { uploadFileTool } from "./upload-file-tool.js";
22
- import { saveFileToPhoneTool } from "./save-file-to-phone-tool.js";
23
- import { sendEmailTool } from "./send-email-tool.js";
24
- import { searchEmailTool } from "./search-email-tool.js";
1
+ import { createNoteTool } from "./note-tool.js";
2
+ import { createSearchNoteTool } from "./search-note-tool.js";
3
+ import { createModifyNoteTool } from "./modify-note-tool.js";
4
+ import { makeAlarmTool } from "./create-alarm-tool.js";
5
+ import { createSearchAlarmTool } from "./search-alarm-tool.js";
6
+ import { createModifyAlarmTool } from "./modify-alarm-tool.js";
7
+ import { createDeleteAlarmTool } from "./delete-alarm-tool.js";
8
+ import { createSearchContactTool } from "./search-contact-tool.js";
9
+ import { createCallPhoneTool } from "./call-phone-tool.js";
10
+ import { createSearchMessageTool } from "./search-message-tool.js";
11
+ import { createSendMessageTool } from "./send-message-tool.js";
12
+ import { createXiaoyiAddCollectionTool } from "./xiaoyi-add-collection-tool.js";
13
+ import { createXiaoyiCollectionTool } from "./xiaoyi-collection-tool.js";
14
+ import { createXiaoyiDeleteCollectionTool } from "./xiaoyi-delete-collection-tool.js";
15
+ import { createCalendarTool } from "./calendar-tool.js";
16
+ import { createSearchCalendarTool } from "./search-calendar-tool.js";
17
+ import { createSearchPhotoGalleryTool } from "./search-photo-gallery-tool.js";
18
+ import { createUploadPhotoTool } from "./upload-photo-tool.js";
19
+ import { createSaveMediaToGalleryTool } from "./save-media-to-gallery-tool.js";
20
+ import { createSearchFileTool } from "./search-file-tool.js";
21
+ import { createUploadFileTool } from "./upload-file-tool.js";
22
+ import { createSaveFileToPhoneTool } from "./save-file-to-phone-tool.js";
23
+ import { createSendEmailTool } from "./send-email-tool.js";
24
+ import { createSearchEmailTool } from "./search-email-tool.js";
25
25
  import { sendStatusUpdate } from "../formatter.js";
26
- import { getCurrentSessionContext } from "./session-manager.js";
27
26
  import { getCurrentTaskId, getCurrentMessageId } from "../task-manager.js";
28
- /**
29
- * 端工具注册表 —— 按 name 索引所有可通过 call_device_tool 调度的工具。
30
- */
31
- const deviceToolRegistry = new Map([
32
- [noteTool.name, noteTool],
33
- [searchNoteTool.name, searchNoteTool],
34
- [modifyNoteTool.name, modifyNoteTool],
35
- [createAlarmTool.name, createAlarmTool],
36
- [searchAlarmTool.name, searchAlarmTool],
37
- [modifyAlarmTool.name, modifyAlarmTool],
38
- [deleteAlarmTool.name, deleteAlarmTool],
39
- [searchContactTool.name, searchContactTool],
40
- [callPhoneTool.name, callPhoneTool],
41
- [searchMessageTool.name, searchMessageTool],
42
- [sendMessageTool.name, sendMessageTool],
43
- [xiaoyiAddCollectionTool.name, xiaoyiAddCollectionTool],
44
- [xiaoyiCollectionTool.name, xiaoyiCollectionTool],
45
- [xiaoyiDeleteCollectionTool.name, xiaoyiDeleteCollectionTool],
46
- [calendarTool.name, calendarTool],
47
- [searchCalendarTool.name, searchCalendarTool],
48
- [searchPhotoGalleryTool.name, searchPhotoGalleryTool],
49
- [uploadPhotoTool.name, uploadPhotoTool],
50
- [saveMediaToGalleryTool.name, saveMediaToGalleryTool],
51
- [searchFileTool.name, searchFileTool],
52
- [uploadFileTool.name, uploadFileTool],
53
- [saveFileToPhoneTool.name, saveFileToPhoneTool],
54
- [sendEmailTool.name, sendEmailTool],
55
- [searchEmailTool.name, searchEmailTool],
56
- ]);
57
27
  /**
58
28
  * call_device_tool - 通用端工具调度器。
59
29
  * LLM 必须先通过 get_xxx_tool_schema 获取具体工具 schema,再用本工具执行。
60
30
  */
61
- export const callDeviceTool = {
62
- name: "call_device_tool",
63
- label: "Call Device Tool",
64
- description: "用户设备侧工具调用。必须先调用get_xxx_tool_schema获取了具体的工具schema,才能使用本工具执行对应设备侧工具。",
65
- parameters: {
66
- type: "object",
67
- properties: {
68
- toolName: {
69
- type: "string",
70
- description: "要调用的具体端工具名称,即get_xxx_tool_schema返回的工具的name",
71
- },
72
- arguments: {
73
- type: "object",
74
- description: "工具所需的具体参数JSON键值对",
31
+ export function createCallDeviceTool(ctx) {
32
+ const { config, sessionId, taskId, messageId } = ctx;
33
+ const noteTool = createNoteTool(ctx);
34
+ const modifyNoteTool = createModifyNoteTool(ctx);
35
+ const createAlarmTool = makeAlarmTool(ctx);
36
+ const modifyAlarmTool = createModifyAlarmTool(ctx);
37
+ const deleteAlarmTool = createDeleteAlarmTool(ctx);
38
+ const callPhoneTool = createCallPhoneTool(ctx);
39
+ const calendarTool = createCalendarTool(ctx);
40
+ const searchNoteTool = createSearchNoteTool(ctx);
41
+ const searchMessageTool = createSearchMessageTool(ctx);
42
+ const sendMessageTool = createSendMessageTool(ctx);
43
+ const xiaoyiAddCollectionTool = createXiaoyiAddCollectionTool(ctx);
44
+ const xiaoyiCollectionTool = createXiaoyiCollectionTool(ctx);
45
+ const xiaoyiDeleteCollectionTool = createXiaoyiDeleteCollectionTool(ctx);
46
+ const searchPhotoGalleryTool = createSearchPhotoGalleryTool(ctx);
47
+ const uploadPhotoTool = createUploadPhotoTool(ctx);
48
+ const uploadFileTool = createUploadFileTool(ctx);
49
+ const sendEmailTool = createSendEmailTool(ctx);
50
+ const searchAlarmTool = createSearchAlarmTool(ctx);
51
+ const searchContactTool = createSearchContactTool(ctx);
52
+ const searchCalendarTool = createSearchCalendarTool(ctx);
53
+ const saveMediaToGalleryTool = createSaveMediaToGalleryTool(ctx);
54
+ const searchFileTool = createSearchFileTool(ctx);
55
+ const saveFileToPhoneTool = createSaveFileToPhoneTool(ctx);
56
+ const searchEmailTool = createSearchEmailTool(ctx);
57
+ /**
58
+ * 端工具注册表 —— 按 name 索引所有可通过 call_device_tool 调度的工具。
59
+ */
60
+ const deviceToolRegistry = new Map([
61
+ [noteTool.name, noteTool],
62
+ [searchNoteTool.name, searchNoteTool],
63
+ [modifyNoteTool.name, modifyNoteTool],
64
+ [createAlarmTool.name, createAlarmTool],
65
+ [searchAlarmTool.name, searchAlarmTool],
66
+ [modifyAlarmTool.name, modifyAlarmTool],
67
+ [deleteAlarmTool.name, deleteAlarmTool],
68
+ [searchContactTool.name, searchContactTool],
69
+ [callPhoneTool.name, callPhoneTool],
70
+ [searchMessageTool.name, searchMessageTool],
71
+ [sendMessageTool.name, sendMessageTool],
72
+ [xiaoyiAddCollectionTool.name, xiaoyiAddCollectionTool],
73
+ [xiaoyiCollectionTool.name, xiaoyiCollectionTool],
74
+ [xiaoyiDeleteCollectionTool.name, xiaoyiDeleteCollectionTool],
75
+ [calendarTool.name, calendarTool],
76
+ [searchCalendarTool.name, searchCalendarTool],
77
+ [searchPhotoGalleryTool.name, searchPhotoGalleryTool],
78
+ [uploadPhotoTool.name, uploadPhotoTool],
79
+ [saveMediaToGalleryTool.name, saveMediaToGalleryTool],
80
+ [searchFileTool.name, searchFileTool],
81
+ [uploadFileTool.name, uploadFileTool],
82
+ [saveFileToPhoneTool.name, saveFileToPhoneTool],
83
+ [sendEmailTool.name, sendEmailTool],
84
+ [searchEmailTool.name, searchEmailTool],
85
+ ]);
86
+ return {
87
+ name: "call_device_tool",
88
+ label: "Call Device Tool",
89
+ description: "用户设备侧工具调用。必须先调用get_xxx_tool_schema获取了具体的工具schema,才能使用本工具执行对应设备侧工具。",
90
+ parameters: {
91
+ type: "object",
92
+ properties: {
93
+ toolName: {
94
+ type: "string",
95
+ description: "要调用的具体端工具名称,即get_xxx_tool_schema返回的工具的name",
96
+ },
97
+ arguments: {
98
+ type: "object",
99
+ description: "工具所需的具体参数JSON键值对",
100
+ },
75
101
  },
102
+ required: ["toolName", "arguments"],
76
103
  },
77
- required: ["toolName", "arguments"],
78
- },
79
- async execute(toolCallId, params) {
80
- const { toolName, arguments: toolArgs } = params;
81
- // 向用户端发送具体工具名的状态更新
82
- const ctx = getCurrentSessionContext();
83
- if (ctx) {
84
- const currentTaskId = getCurrentTaskId(ctx.sessionId) ?? ctx.taskId;
85
- const currentMessageId = getCurrentMessageId(ctx.sessionId) ?? ctx.messageId;
104
+ async execute(toolCallId, params) {
105
+ const { toolName, arguments: toolArgs } = params;
106
+ // 向用户端发送具体工具名的状态更新
107
+ const currentTaskId = getCurrentTaskId(sessionId) ?? taskId;
108
+ const currentMessageId = getCurrentMessageId(sessionId) ?? messageId;
86
109
  try {
87
110
  await sendStatusUpdate({
88
- config: ctx.config,
89
- sessionId: ctx.sessionId,
111
+ config,
112
+ sessionId,
90
113
  taskId: currentTaskId,
91
114
  messageId: currentMessageId,
92
115
  text: `正在使用工具: ${toolName}...`,
@@ -96,35 +119,35 @@ export const callDeviceTool = {
96
119
  catch (_) {
97
120
  // 状态更新失败不影响工具执行
98
121
  }
99
- }
100
- const tool = deviceToolRegistry.get(toolName);
101
- if (!tool) {
102
- return {
103
- content: [
104
- {
105
- type: "text",
106
- text: `端工具${toolName}不存在。请确保toolName为get_xxx_tool_schema返回的工具的name。`,
107
- },
108
- ],
109
- };
110
- }
111
- try {
112
- return await tool.execute(toolCallId, toolArgs);
113
- }
114
- catch (error) {
115
- // ToolInputError (.name === "ToolInputError") 或其他参数校验错误
116
- if (error.name === "ToolInputError") {
122
+ const tool = deviceToolRegistry.get(toolName);
123
+ if (!tool) {
117
124
  return {
118
125
  content: [
119
126
  {
120
127
  type: "text",
121
- text: `端工具参数错误:${error.message}。请确保arguments符合get_xxx_tool_schema返回的工具schema。`,
128
+ text: `端工具${toolName}不存在。请确保toolName为get_xxx_tool_schema返回的工具的name。`,
122
129
  },
123
130
  ],
124
131
  };
125
132
  }
126
- // 非参数错误(网络超时等),直接向上抛出
127
- throw error;
128
- }
129
- },
130
- };
133
+ try {
134
+ return await tool.execute(toolCallId, toolArgs);
135
+ }
136
+ catch (error) {
137
+ // ToolInputError (.name === "ToolInputError") 或其他参数校验错误
138
+ if (error.name === "ToolInputError") {
139
+ return {
140
+ content: [
141
+ {
142
+ type: "text",
143
+ text: `端工具参数错误:${error.message}。请确保arguments符合get_xxx_tool_schema返回的工具schema。`,
144
+ },
145
+ ],
146
+ };
147
+ }
148
+ // 非参数错误(网络超时等),直接向上抛出
149
+ throw error;
150
+ }
151
+ },
152
+ };
153
+ }
@@ -1,5 +1,6 @@
1
+ import type { SessionContext } from "./session-manager.js";
1
2
  /**
2
3
  * XY call phone tool - makes a phone call on user's device.
3
4
  * Requires phoneNumber parameter and optional slotId (0 for primary SIM, 1 for secondary SIM).
4
5
  */
5
- export declare const callPhoneTool: any;
6
+ export declare function createCallPhoneTool(ctx: SessionContext): any;
@@ -1,126 +1,122 @@
1
1
  import { getXYWebSocketManager } from "../client.js";
2
2
  import { sendCommand } from "../formatter.js";
3
- import { getCurrentSessionContext } from "./session-manager.js";
4
3
  /**
5
4
  * XY call phone tool - makes a phone call on user's device.
6
5
  * Requires phoneNumber parameter and optional slotId (0 for primary SIM, 1 for secondary SIM).
7
6
  */
8
- export const callPhoneTool = {
9
- name: "call_phone",
10
- label: "Call Phone",
11
- description: "拨打电话。需要提供要拨打的电话号码。slotId参数可选,默认为0(主卡),如果用户明确要求使用副卡则设置为1。注意:操作超时时间为60秒,请勿重复调用此工具,如果超时或失败,最多重试一次。回复约束:如果工具返回没有授权或者其他报错,只需要完整描述没有授权或者其他报错内容即可,不需要主动给用户提供解决方案,例如告诉用户如何授权,如何解决报错等都是不需要的,请严格遵守。",
12
- parameters: {
13
- type: "object",
14
- properties: {
15
- phoneNumber: {
16
- type: "string",
17
- description: "要拨打的电话号码",
18
- },
19
- slotId: {
20
- type: "number",
21
- description: "SIM卡槽ID,默认为0(主卡),设置为1表示副卡。仅当用户明确要求使用副卡时才设置为1",
22
- default: 0,
7
+ export function createCallPhoneTool(ctx) {
8
+ const { config, sessionId, taskId, messageId } = ctx;
9
+ return {
10
+ name: "call_phone",
11
+ label: "Call Phone",
12
+ description: "拨打电话。需要提供要拨打的电话号码。slotId参数可选,默认为0(主卡),如果用户明确要求使用副卡则设置为1。注意:操作超时时间为60秒,请勿重复调用此工具,如果超时或失败,最多重试一次。回复约束:如果工具返回没有授权或者其他报错,只需要完整描述没有授权或者其他报错内容即可,不需要主动给用户提供解决方案,例如告诉用户如何授权,如何解决报错等都是不需要的,请严格遵守。",
13
+ parameters: {
14
+ type: "object",
15
+ properties: {
16
+ phoneNumber: {
17
+ type: "string",
18
+ description: "要拨打的电话号码",
19
+ },
20
+ slotId: {
21
+ type: "number",
22
+ description: "SIM卡槽ID,默认为0(主卡),设置为1表示副卡。仅当用户明确要求使用副卡时才设置为1",
23
+ default: 0,
24
+ },
23
25
  },
26
+ required: ["phoneNumber"],
24
27
  },
25
- required: ["phoneNumber"],
26
- },
27
- async execute(toolCallId, params) {
28
- // Validate phoneNumber parameter
29
- if (!params.phoneNumber || typeof params.phoneNumber !== "string" || params.phoneNumber.trim() === "") {
30
- throw new Error("Missing required parameter: phoneNumber must be a non-empty string");
31
- }
32
- // Set default slotId if not provided
33
- const slotId = params.slotId !== undefined && params.slotId !== null ? params.slotId : 0;
34
- // Validate slotId (must be 0 or 1)
35
- if (slotId !== 0 && slotId !== 1) {
36
- throw new Error("Invalid slotId: must be 0 (primary SIM) or 1 (secondary SIM)");
37
- }
38
- // Get session context
39
- const sessionContext = getCurrentSessionContext();
40
- if (!sessionContext) {
41
- throw new Error("No active XY session found. Call phone tool can only be used during an active conversation.");
42
- }
43
- const { config, sessionId, taskId, messageId } = sessionContext;
44
- // Get WebSocket manager
45
- const wsManager = getXYWebSocketManager(config);
46
- // Build StartCall command
47
- const command = {
48
- header: {
49
- namespace: "Common",
50
- name: "Action",
51
- },
52
- payload: {
53
- cardParam: {},
54
- executeParam: {
55
- executeMode: "background",
56
- intentName: "StartCall",
57
- bundleName: "com.huawei.hmos.aidispatchservice",
58
- dimension: "",
59
- needUnlock: true,
60
- actionResponse: true,
61
- timeOut: 5,
62
- intentParam: {
63
- phoneNumber: params.phoneNumber.trim(),
64
- slotId: slotId,
65
- },
66
- permissionId: [],
67
- achieveType: "INTENT",
28
+ async execute(toolCallId, params) {
29
+ // Validate phoneNumber parameter
30
+ if (!params.phoneNumber || typeof params.phoneNumber !== "string" || params.phoneNumber.trim() === "") {
31
+ throw new Error("Missing required parameter: phoneNumber must be a non-empty string");
32
+ }
33
+ // Set default slotId if not provided
34
+ const slotId = params.slotId !== undefined && params.slotId !== null ? params.slotId : 0;
35
+ // Validate slotId (must be 0 or 1)
36
+ if (slotId !== 0 && slotId !== 1) {
37
+ throw new Error("Invalid slotId: must be 0 (primary SIM) or 1 (secondary SIM)");
38
+ }
39
+ // Get WebSocket manager
40
+ const wsManager = getXYWebSocketManager(config);
41
+ // Build StartCall command
42
+ const command = {
43
+ header: {
44
+ namespace: "Common",
45
+ name: "Action",
68
46
  },
69
- responses: [
70
- {
71
- resultCode: "",
72
- displayText: "",
73
- ttsText: "",
47
+ payload: {
48
+ cardParam: {},
49
+ executeParam: {
50
+ executeMode: "background",
51
+ intentName: "StartCall",
52
+ bundleName: "com.huawei.hmos.aidispatchservice",
53
+ dimension: "",
54
+ needUnlock: true,
55
+ actionResponse: true,
56
+ timeOut: 5,
57
+ intentParam: {
58
+ phoneNumber: params.phoneNumber.trim(),
59
+ slotId: slotId,
60
+ },
61
+ permissionId: [],
62
+ achieveType: "INTENT",
74
63
  },
75
- ],
76
- needUploadResult: true,
77
- noHalfPage: false,
78
- pageControlRelated: false,
79
- },
80
- };
81
- // Send command and wait for response (60 second timeout)
82
- return new Promise((resolve, reject) => {
83
- const timeout = setTimeout(() => {
84
- wsManager.off("data-event", handler);
85
- reject(new Error("拨打电话超时(60秒)"));
86
- }, 60000);
87
- // Listen for data events from WebSocket
88
- const handler = (event) => {
89
- if (event.intentName === "StartCall") {
90
- clearTimeout(timeout);
64
+ responses: [
65
+ {
66
+ resultCode: "",
67
+ displayText: "",
68
+ ttsText: "",
69
+ },
70
+ ],
71
+ needUploadResult: true,
72
+ noHalfPage: false,
73
+ pageControlRelated: false,
74
+ },
75
+ };
76
+ // Send command and wait for response (60 second timeout)
77
+ return new Promise((resolve, reject) => {
78
+ const timeout = setTimeout(() => {
91
79
  wsManager.off("data-event", handler);
92
- if (event.status === "success" && event.outputs) {
93
- resolve({
94
- content: [
95
- {
96
- type: "text",
97
- text: JSON.stringify(event.outputs),
98
- },
99
- ],
100
- });
80
+ reject(new Error("拨打电话超时(60秒)"));
81
+ }, 60000);
82
+ // Listen for data events from WebSocket
83
+ const handler = (event) => {
84
+ if (event.intentName === "StartCall") {
85
+ clearTimeout(timeout);
86
+ wsManager.off("data-event", handler);
87
+ if (event.status === "success" && event.outputs) {
88
+ resolve({
89
+ content: [
90
+ {
91
+ type: "text",
92
+ text: JSON.stringify(event.outputs),
93
+ },
94
+ ],
95
+ });
96
+ }
97
+ else {
98
+ reject(new Error(`拨打电话失败: ${event.status}`));
99
+ }
101
100
  }
102
- else {
103
- reject(new Error(`拨打电话失败: ${event.status}`));
104
- }
105
- }
106
- };
107
- // Register event handler
108
- wsManager.on("data-event", handler);
109
- // Send the command
110
- sendCommand({
111
- config,
112
- sessionId,
113
- taskId,
114
- messageId,
115
- command,
116
- })
117
- .then(() => {
118
- })
119
- .catch((error) => {
120
- clearTimeout(timeout);
121
- wsManager.off("data-event", handler);
122
- reject(error);
101
+ };
102
+ // Register event handler
103
+ wsManager.on("data-event", handler);
104
+ // Send the command
105
+ sendCommand({
106
+ config,
107
+ sessionId,
108
+ taskId,
109
+ messageId,
110
+ command,
111
+ })
112
+ .then(() => {
113
+ })
114
+ .catch((error) => {
115
+ clearTimeout(timeout);
116
+ wsManager.off("data-event", handler);
117
+ reject(error);
118
+ });
123
119
  });
124
- });
125
- },
126
- };
120
+ },
121
+ };
122
+ }
@@ -1,7 +1,8 @@
1
+ import type { SessionContext } from "./session-manager.js";
1
2
  /**
2
3
  * XY create alarm tool - creates an alarm on user's device.
3
4
  * Requires alarmTime parameter. Other parameters are optional with sensible defaults.
4
5
  *
5
6
  * Time format: YYYYMMDD hhmmss (e.g., 20240315 143000)
6
7
  */
7
- export declare const createAlarmTool: any;
8
+ export declare function makeAlarmTool(ctx: SessionContext): any;