@ravi-hq/ravi 0.5.4 → 0.6.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.
Files changed (83) hide show
  1. package/README.md +56 -69
  2. package/dist/auth.d.ts +2 -0
  3. package/dist/auth.d.ts.map +1 -1
  4. package/dist/auth.js.map +1 -1
  5. package/dist/bin/ravi-secrets.d.ts +3 -3
  6. package/dist/bin/ravi-secrets.js +7 -7
  7. package/dist/bin/ravi-secrets.js.map +1 -1
  8. package/dist/channels/email-trusted.d.ts.map +1 -1
  9. package/dist/channels/email-trusted.js +5 -7
  10. package/dist/channels/email-trusted.js.map +1 -1
  11. package/dist/channels/email-untrusted.d.ts.map +1 -1
  12. package/dist/channels/email-untrusted.js +5 -7
  13. package/dist/channels/email-untrusted.js.map +1 -1
  14. package/dist/channels/email.d.ts +12 -14
  15. package/dist/channels/email.d.ts.map +1 -1
  16. package/dist/channels/email.js +50 -52
  17. package/dist/channels/email.js.map +1 -1
  18. package/dist/cli.d.ts +15 -2
  19. package/dist/cli.d.ts.map +1 -1
  20. package/dist/cli.js +271 -211
  21. package/dist/cli.js.map +1 -1
  22. package/dist/client.d.ts +64 -26
  23. package/dist/client.d.ts.map +1 -1
  24. package/dist/client.js +79 -39
  25. package/dist/client.js.map +1 -1
  26. package/dist/index.d.ts +5 -9
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +17 -26
  29. package/dist/index.js.map +1 -1
  30. package/dist/sse-pool.d.ts +5 -2
  31. package/dist/sse-pool.d.ts.map +1 -1
  32. package/dist/sse-pool.js +9 -7
  33. package/dist/sse-pool.js.map +1 -1
  34. package/dist/sse.d.ts +7 -21
  35. package/dist/sse.d.ts.map +1 -1
  36. package/dist/sse.js +10 -33
  37. package/dist/sse.js.map +1 -1
  38. package/dist/tools/contacts.d.ts +14 -0
  39. package/dist/tools/contacts.d.ts.map +1 -0
  40. package/dist/tools/contacts.js +186 -0
  41. package/dist/tools/contacts.js.map +1 -0
  42. package/dist/tools/email-send.d.ts.map +1 -1
  43. package/dist/tools/email-send.js +18 -21
  44. package/dist/tools/email-send.js.map +1 -1
  45. package/dist/tools/identity.d.ts +2 -2
  46. package/dist/tools/identity.d.ts.map +1 -1
  47. package/dist/tools/identity.js +14 -6
  48. package/dist/tools/identity.js.map +1 -1
  49. package/dist/tools/inbox.d.ts +0 -3
  50. package/dist/tools/inbox.d.ts.map +1 -1
  51. package/dist/tools/inbox.js +13 -58
  52. package/dist/tools/inbox.js.map +1 -1
  53. package/dist/tools/passwords.d.ts.map +1 -1
  54. package/dist/tools/passwords.js +20 -7
  55. package/dist/tools/passwords.js.map +1 -1
  56. package/dist/tools/secrets.d.ts +15 -0
  57. package/dist/tools/secrets.d.ts.map +1 -0
  58. package/dist/tools/{vault.js → secrets.js} +23 -23
  59. package/dist/tools/secrets.js.map +1 -0
  60. package/dist/tools/sms-send.d.ts.map +1 -1
  61. package/dist/tools/sms-send.js +3 -1
  62. package/dist/tools/sms-send.js.map +1 -1
  63. package/dist/types.d.ts +18 -20
  64. package/dist/types.d.ts.map +1 -1
  65. package/dist/types.js +2 -2
  66. package/dist/types.js.map +1 -1
  67. package/openclaw.plugin.json +1 -1
  68. package/package.json +4 -13
  69. package/dist/channels/sms-trusted.d.ts +0 -161
  70. package/dist/channels/sms-trusted.d.ts.map +0 -1
  71. package/dist/channels/sms-trusted.js +0 -306
  72. package/dist/channels/sms-trusted.js.map +0 -1
  73. package/dist/channels/sms-untrusted.d.ts +0 -124
  74. package/dist/channels/sms-untrusted.d.ts.map +0 -1
  75. package/dist/channels/sms-untrusted.js +0 -269
  76. package/dist/channels/sms-untrusted.js.map +0 -1
  77. package/dist/channels/sms.d.ts +0 -269
  78. package/dist/channels/sms.d.ts.map +0 -1
  79. package/dist/channels/sms.js +0 -380
  80. package/dist/channels/sms.js.map +0 -1
  81. package/dist/tools/vault.d.ts +0 -15
  82. package/dist/tools/vault.d.ts.map +0 -1
  83. package/dist/tools/vault.js.map +0 -1
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Contact management tools for the Ravi OpenClaw plugin.
3
+ *
4
+ * Provides tools to list, search, retrieve, create, update, and delete
5
+ * contacts associated with the current identity. Contacts track people
6
+ * the identity has interacted with via email or SMS.
7
+ *
8
+ * @module tools/contacts
9
+ */
10
+ // ─── Contacts Tools ─────────────────────────────────────────────────────────
11
+ /** Tools for managing contacts in the Ravi contacts store. */
12
+ export const contactsTools = [
13
+ {
14
+ name: "ravi_contacts_list",
15
+ description: "List all contacts for the current identity. Returns contact details including email, phone number, " +
16
+ "display name, nickname, source (auto or manual), and interaction count. " +
17
+ "Use ravi_contacts_search instead for fuzzy search by name — especially when resolving a recipient's name " +
18
+ "to an email address or phone number before sending. " +
19
+ "Each contact includes an is_trusted flag indicating whether emails from this contact are routed to the trusted SSE channel.",
20
+ parameters: {
21
+ type: "object",
22
+ properties: {},
23
+ required: [],
24
+ },
25
+ handler: async (_params, { client }) => {
26
+ return client.listContacts();
27
+ },
28
+ },
29
+ {
30
+ name: "ravi_contacts_search",
31
+ description: "Fuzzy search contacts by name, nickname, or email. Returns matching contacts ranked by relevance. " +
32
+ "IMPORTANT: Use this to resolve a person's name to their email or phone before sending email (ravi_email_compose) " +
33
+ "or SMS (ravi_sms_send). Example: 'email Alice' or 'text Bob' → search contacts first to find their address/number. " +
34
+ "When multiple contacts match, confirm with the user which one they mean before proceeding. " +
35
+ "For listing all contacts, use ravi_contacts_list instead.",
36
+ parameters: {
37
+ type: "object",
38
+ properties: {
39
+ query: {
40
+ type: "string",
41
+ description: "Search query — matches against display name, nickname, and email address using fuzzy search. " +
42
+ "Phone numbers are not fuzzy-searched — use ravi_contacts_list to find contacts by phone.",
43
+ },
44
+ },
45
+ required: ["query"],
46
+ },
47
+ handler: async (params, { client }) => {
48
+ return client.searchContacts(params.query);
49
+ },
50
+ },
51
+ {
52
+ name: "ravi_contacts_get",
53
+ description: "Get a specific contact by UUID. Returns full contact details including email, phone number, " +
54
+ "display name, nickname, source, interaction count, and timestamps. " +
55
+ "Use ravi_contacts_list or ravi_contacts_search to find the UUID.",
56
+ parameters: {
57
+ type: "object",
58
+ properties: {
59
+ uuid: {
60
+ type: "string",
61
+ description: "UUID of the contact to retrieve (from ravi_contacts_list or ravi_contacts_search)",
62
+ },
63
+ },
64
+ required: ["uuid"],
65
+ },
66
+ handler: async (params, { client }) => {
67
+ return client.getContact(params.uuid);
68
+ },
69
+ },
70
+ {
71
+ name: "ravi_contacts_create",
72
+ description: "Create a new contact for the current identity. At least one of email or phone_number is required. " +
73
+ "Use this to manually add contacts — auto-discovered contacts are created automatically from email/SMS interactions.",
74
+ parameters: {
75
+ type: "object",
76
+ properties: {
77
+ email: {
78
+ type: "string",
79
+ description: "Contact's email address",
80
+ },
81
+ phone_number: {
82
+ type: "string",
83
+ description: "Contact's phone number in E.164 format (e.g. '+14155551234')",
84
+ },
85
+ display_name: {
86
+ type: "string",
87
+ description: "Contact's display name (e.g. 'Jane Smith')",
88
+ },
89
+ nickname: {
90
+ type: "string",
91
+ description: "Short nickname for the contact (e.g. 'Jane')",
92
+ },
93
+ is_trusted: {
94
+ type: "boolean",
95
+ description: "Mark this contact as trusted. Emails from trusted contacts are routed to the email_trusted SSE channel " +
96
+ "instead of email_untrusted. Defaults to false.",
97
+ },
98
+ },
99
+ required: [],
100
+ },
101
+ handler: async (params, { client }) => {
102
+ const data = {};
103
+ if (params.email !== undefined)
104
+ data.email = params.email;
105
+ if (params.phone_number !== undefined)
106
+ data.phone_number = params.phone_number;
107
+ if (params.display_name !== undefined)
108
+ data.display_name = params.display_name;
109
+ if (params.nickname !== undefined)
110
+ data.nickname = params.nickname;
111
+ if (params.is_trusted !== undefined)
112
+ data.is_trusted = params.is_trusted;
113
+ return client.createContact(data);
114
+ },
115
+ },
116
+ {
117
+ name: "ravi_contacts_update",
118
+ description: "Update an existing contact's fields. Only provided fields are changed — omitted fields remain unchanged. " +
119
+ "Use ravi_contacts_list or ravi_contacts_search to find the UUID of the contact to update.",
120
+ parameters: {
121
+ type: "object",
122
+ properties: {
123
+ uuid: {
124
+ type: "string",
125
+ description: "UUID of the contact to update (from ravi_contacts_list or ravi_contacts_search)",
126
+ },
127
+ email: {
128
+ type: "string",
129
+ description: "New email address for the contact",
130
+ },
131
+ phone_number: {
132
+ type: "string",
133
+ description: "New phone number in E.164 format (e.g. '+14155551234')",
134
+ },
135
+ display_name: {
136
+ type: "string",
137
+ description: "New display name for the contact",
138
+ },
139
+ nickname: {
140
+ type: "string",
141
+ description: "New nickname for the contact",
142
+ },
143
+ is_trusted: {
144
+ type: "boolean",
145
+ description: "Set whether this contact is trusted. Emails from trusted contacts are routed to the email_trusted SSE channel.",
146
+ },
147
+ },
148
+ required: ["uuid"],
149
+ },
150
+ handler: async (params, { client }) => {
151
+ const uuid = params.uuid;
152
+ const data = {};
153
+ if (params.email !== undefined)
154
+ data.email = params.email;
155
+ if (params.phone_number !== undefined)
156
+ data.phone_number = params.phone_number;
157
+ if (params.display_name !== undefined)
158
+ data.display_name = params.display_name;
159
+ if (params.nickname !== undefined)
160
+ data.nickname = params.nickname;
161
+ if (params.is_trusted !== undefined)
162
+ data.is_trusted = params.is_trusted;
163
+ return client.updateContact(uuid, data);
164
+ },
165
+ },
166
+ {
167
+ name: "ravi_contacts_delete",
168
+ description: "Delete a contact by UUID. This is permanent and cannot be undone. " +
169
+ "Use ravi_contacts_list or ravi_contacts_search to find the UUID of the contact to delete.",
170
+ parameters: {
171
+ type: "object",
172
+ properties: {
173
+ uuid: {
174
+ type: "string",
175
+ description: "UUID of the contact to delete (from ravi_contacts_list or ravi_contacts_search)",
176
+ },
177
+ },
178
+ required: ["uuid"],
179
+ },
180
+ handler: async (params, { client }) => {
181
+ await client.deleteContact(params.uuid);
182
+ return { status: "deleted", uuid: params.uuid };
183
+ },
184
+ },
185
+ ];
186
+ //# sourceMappingURL=contacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/tools/contacts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,+EAA+E;AAE/E,8DAA8D;AAC9D,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,qGAAqG;YACrG,0EAA0E;YAC1E,2GAA2G;YAC3G,sDAAsD;YACtD,6HAA6H;QAC/H,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;SACb;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACrC,OAAO,MAAM,CAAC,YAAY,EAAE,CAAC;QAC/B,CAAC;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACT,oGAAoG;YACpG,mHAAmH;YACnH,qHAAqH;YACrH,6FAA6F;YAC7F,2DAA2D;QAC7D,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,+FAA+F;wBAC/F,0FAA0F;iBAC7F;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACpC,OAAO,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,KAAe,CAAC,CAAC;QACvD,CAAC;KACF;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,8FAA8F;YAC9F,qEAAqE;YACrE,kEAAkE;QACpE,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mFAAmF;iBACjG;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACpC,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAc,CAAC,CAAC;QAClD,CAAC;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACT,oGAAoG;YACpG,qHAAqH;QACvH,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,yBAAyB;iBACvC;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8DAA8D;iBAC5E;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4CAA4C;iBAC1D;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8CAA8C;iBAC5D;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,yGAAyG;wBACzG,gDAAgD;iBACnD;aACF;YACD,QAAQ,EAAE,EAAE;SACb;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACpC,MAAM,IAAI,GAAqC,EAAE,CAAC;YAClD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAe,CAAC;YACpE,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;gBAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAsB,CAAC;YACzF,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;gBAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAsB,CAAC;YACzF,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;gBAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAkB,CAAC;YAC7E,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;gBAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAqB,CAAC;YACpF,OAAO,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACT,2GAA2G;YAC3G,2FAA2F;QAC7F,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,iFAAiF;iBAC/F;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mCAAmC;iBACjD;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wDAAwD;iBACtE;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kCAAkC;iBAChD;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8BAA8B;iBAC5C;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,gHAAgH;iBACnH;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACpC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAc,CAAC;YACnC,MAAM,IAAI,GAAqC,EAAE,CAAC;YAClD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAe,CAAC;YACpE,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;gBAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAsB,CAAC;YACzF,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;gBAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAsB,CAAC;YACzF,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;gBAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAkB,CAAC;YAC7E,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;gBAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAqB,CAAC;YACpF,OAAO,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACT,oEAAoE;YACpE,2FAA2F;QAC7F,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,iFAAiF;iBAC/F;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACpC,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAc,CAAC,CAAC;YAClD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAClD,CAAC;KACF;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"email-send.d.ts","sourceRoot":"","sources":["../../src/tools/email-send.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,eAAe,CAAC;AAwCjE,oDAAoD;AACpD,eAAO,MAAM,cAAc,EAAE,cAAc,EAsM1C,CAAC"}
1
+ {"version":3,"file":"email-send.d.ts","sourceRoot":"","sources":["../../src/tools/email-send.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,eAAe,CAAC;AAwCjE,oDAAoD;AACpD,eAAO,MAAM,cAAc,EAAE,cAAc,EA+L1C,CAAC"}
@@ -42,7 +42,9 @@ export const emailSendTools = [
42
42
  {
43
43
  name: "ravi_email_compose",
44
44
  description: "Compose and send a new email. Body is plain text (auto-converted to HTML) — or include your own " +
45
- "HTML tags (<p>, <h2>, <a href>). See Email Writing Best Practices in the Ravi Quick Reference for formatting tips. " +
45
+ "HTML tags (<p>, <h2>, <a href>). See the ravi-email-writing skill for formatting tips. " +
46
+ "IMPORTANT: If you only have the recipient's name (e.g. 'email Alice'), use ravi_contacts_search first " +
47
+ "to look up their email address. If multiple contacts match, confirm with the user before sending. " +
46
48
  "Use ravi_get_info to get your identity name for signatures. " +
47
49
  "Rate limits: 60/hour, 500/day. Supports CC, BCC, and file attachments (max 10 MB each).",
48
50
  parameters: {
@@ -90,8 +92,9 @@ export const emailSendTools = [
90
92
  name: "ravi_email_reply",
91
93
  description: "Reply to an existing email message (threaded with correct headers). " +
92
94
  "Read the thread with ravi_read_email first to understand context and see CC recipients. " +
93
- "Subject is required copy it from the thread (it's E2E encrypted on the server). " +
94
- "Body is plain text (auto-converted) or HTML. Supports reply_all, CC, BCC, and file attachments.",
95
+ "If adding new recipients by name (e.g. 'reply and CC Alice'), use ravi_contacts_search to look up their email first. " +
96
+ "Body is plain text (auto-converted) or HTML. Supports reply_all, CC, BCC, and file attachments. " +
97
+ "The server auto-derives the subject from the original message.",
95
98
  parameters: {
96
99
  type: "object",
97
100
  properties: {
@@ -104,20 +107,18 @@ export const emailSendTools = [
104
107
  description: "Reply body — plain text or HTML. Plain text is auto-converted (newlines become <br>, " +
105
108
  "special characters escaped). HTML content (<p>, <h2>, <a href>, etc.) is sent as-is.",
106
109
  },
107
- subject: {
108
- type: "string",
109
- description: "Subject line (e.g. 'Re: Original Subject'). Required because the original is E2E encrypted " +
110
- "on the server. Copy the subject from the message thread via ravi_read_email.",
111
- },
112
110
  reply_all: {
113
111
  type: "boolean",
114
- description: "If true, reply to all recipients (To + CC). Defaults to false (reply to sender only).",
112
+ description: "If true, reply to all original recipients (To + CC from the original message) automatically. " +
113
+ "Defaults to false (reply to sender only). " +
114
+ "The cc parameter adds additional recipients on top of those included by reply_all.",
115
115
  },
116
116
  cc: {
117
117
  type: "array",
118
118
  items: { type: "string" },
119
- description: "Optional array of CC recipient email addresses. " +
120
- "These recipients are visible to all other recipients.",
119
+ description: "Optional array of additional CC recipient email addresses. " +
120
+ "With reply_all=true, original CC recipients are included automatically " +
121
+ "use this to add new people to the thread. These recipients are visible to all.",
121
122
  },
122
123
  bcc: {
123
124
  type: "array",
@@ -132,7 +133,7 @@ export const emailSendTools = [
132
133
  "Each file is validated (max 10 MB, blocked extensions rejected) and uploaded via presigned URL.",
133
134
  },
134
135
  },
135
- required: ["message_id", "body", "subject"],
136
+ required: ["message_id", "body"],
136
137
  },
137
138
  handler: async (params, { client }) => {
138
139
  const htmlBody = wrapInHtml(params.body);
@@ -140,14 +141,15 @@ export const emailSendTools = [
140
141
  const attachmentUuids = attachmentPaths?.length
141
142
  ? await uploadAttachments(client, attachmentPaths)
142
143
  : undefined;
143
- return client.replyToEmail(params.message_id, htmlBody, params.subject, params.reply_all === true, buildSendOpts(params, attachmentUuids));
144
+ return client.replyToEmail(params.message_id, htmlBody, params.reply_all === true, buildSendOpts(params, attachmentUuids));
144
145
  },
145
146
  },
146
147
  {
147
148
  name: "ravi_email_forward",
148
149
  description: "Forward an email to a new recipient. The original message content is included automatically. " +
149
150
  "Read the thread with ravi_read_email first to review content. " +
150
- "Subject is required copy it from the thread (it's E2E encrypted on the server). " +
151
+ "If you only have the recipient's name (e.g. 'forward this to Bob'), use ravi_contacts_search first to look up their email. " +
152
+ "The server auto-derives the subject from the original message. " +
151
153
  "Supports CC, BCC, and file attachments.",
152
154
  parameters: {
153
155
  type: "object",
@@ -160,11 +162,6 @@ export const emailSendTools = [
160
162
  type: "string",
161
163
  description: "Recipient email address to forward to",
162
164
  },
163
- subject: {
164
- type: "string",
165
- description: "Subject line (typically 'Fwd: Original Subject'). Required because the original is E2E encrypted " +
166
- "on the server. Copy the subject from the message thread via ravi_read_email.",
167
- },
168
165
  body: {
169
166
  type: "string",
170
167
  description: "Forwarding note — plain text or HTML. Plain text is auto-converted (newlines become <br>, " +
@@ -190,7 +187,7 @@ export const emailSendTools = [
190
187
  "Each file is validated (max 10 MB, blocked extensions rejected) and uploaded via presigned URL.",
191
188
  },
192
189
  },
193
- required: ["message_id", "to", "subject", "body"],
190
+ required: ["message_id", "to", "body"],
194
191
  },
195
192
  handler: async (params, { client }) => {
196
193
  const htmlBody = wrapInHtml(params.body);
@@ -198,7 +195,7 @@ export const emailSendTools = [
198
195
  const attachmentUuids = attachmentPaths?.length
199
196
  ? await uploadAttachments(client, attachmentPaths)
200
197
  : undefined;
201
- return client.forwardEmail(params.message_id, params.to, htmlBody, params.subject, buildSendOpts(params, attachmentUuids));
198
+ return client.forwardEmail(params.message_id, params.to, htmlBody, buildSendOpts(params, attachmentUuids));
202
199
  },
203
200
  },
204
201
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"email-send.js","sourceRoot":"","sources":["../../src/tools/email-send.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"email-send.js","sourceRoot":"","sources":["../../src/tools/email-send.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Identity management tools for the Ravi OpenClaw plugin.
3
3
  *
4
4
  * Provides tools to list, create, and inspect Ravi identities. Each identity
5
- * bundles an email address, phone number, and encrypted vault into a coherent
5
+ * bundles an email address, phone number, and encrypted secrets store into a coherent
6
6
  * persona for AI agents.
7
7
  *
8
8
  * @module tools/identity
@@ -30,7 +30,7 @@ export interface ToolDefinition {
30
30
  *
31
31
  * Always includes an authenticated {@link RaviClient}. The optional
32
32
  * {@link CryptoManager} is present when the user has provided an encryption
33
- * PIN, enabling E2E encrypt/decrypt operations on vault data.
33
+ * PIN, enabling E2E encrypt/decrypt operations on encrypted data.
34
34
  */
35
35
  export interface ToolContext {
36
36
  /** Authenticated Ravi API client. */
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/tools/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIlD;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,4DAA4D;IAC5D,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACtF;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,MAAM,EAAE,UAAU,CAAC;IACnB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAID,mEAAmE;AACnE,eAAO,MAAM,aAAa,EAAE,cAAc,EA4DzC,CAAC"}
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/tools/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIlD;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,4DAA4D;IAC5D,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACtF;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,MAAM,EAAE,UAAU,CAAC;IACnB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAID,mEAAmE;AACnE,eAAO,MAAM,aAAa,EAAE,cAAc,EAqEzC,CAAC"}
@@ -2,7 +2,7 @@
2
2
  * Identity management tools for the Ravi OpenClaw plugin.
3
3
  *
4
4
  * Provides tools to list, create, and inspect Ravi identities. Each identity
5
- * bundles an email address, phone number, and encrypted vault into a coherent
5
+ * bundles an email address, phone number, and encrypted secrets store into a coherent
6
6
  * persona for AI agents.
7
7
  *
8
8
  * @module tools/identity
@@ -13,8 +13,8 @@ export const identityTools = [
13
13
  {
14
14
  name: "ravi_identity_list",
15
15
  description: "List all Ravi identities for the authenticated account. " +
16
- "Each identity bundles a unique email address, phone number, and encrypted vault into a coherent agent persona. " +
17
- "Returns an array of objects with uuid, name, display_name, inbox, and phone fields. " +
16
+ "Each identity bundles a unique email address, phone number, and encrypted secrets store into a coherent agent persona. " +
17
+ "Returns an array of objects with uuid, name, inbox, and phone fields. " +
18
18
  "Account-level operation — does not require a specific identity to be configured.",
19
19
  parameters: {
20
20
  type: "object",
@@ -28,7 +28,9 @@ export const identityTools = [
28
28
  {
29
29
  name: "ravi_identity_create",
30
30
  description: "Create a new Ravi identity. This provisions a unique email address, " +
31
- "a phone number, and an encrypted vault — all bundled under the given name. " +
31
+ "a phone number, and an encrypted secrets store — all bundled under the given name. " +
32
+ "Optionally specify a custom email local part (e.g. 'shopping' → shopping@<your-domain>). " +
33
+ "Requires an active paid subscription — returns HTTP 402 if the account doesn't have one. " +
32
34
  "Use the identity name (not the account owner's personal name) when filling out forms or registering on websites. " +
33
35
  "Account-level operation — does not require an existing identity to be configured.",
34
36
  parameters: {
@@ -38,11 +40,17 @@ export const identityTools = [
38
40
  type: "string",
39
41
  description: "Display name for the new identity (e.g. 'Research Agent', 'Customer Support')",
40
42
  },
43
+ email: {
44
+ type: "string",
45
+ description: "Optional custom email local part (e.g. 'shopping', 'research-bot'). " +
46
+ "Must be 3-30 chars, lowercase alphanumeric with dots/hyphens, no consecutive dots/hyphens. " +
47
+ "If omitted, a random address is auto-generated. Returns 409 if already taken.",
48
+ },
41
49
  },
42
50
  required: ["name"],
43
51
  },
44
52
  handler: async (params, { client }) => {
45
- return client.createIdentity(params.name);
53
+ return client.createIdentity(params.name, params.email);
46
54
  },
47
55
  },
48
56
  {
@@ -52,7 +60,7 @@ export const identityTools = [
52
60
  "or fill in a signup form. Returns { email: string, phone: string }. " +
53
61
  "The phone is in E.164 format (e.g. +15551234567). " +
54
62
  "This is NOT the account owner's info — it's the identity's provisioned contact details. " +
55
- "Use the identity name (not the account owner's name) when filling forms or signing emails.",
63
+ "For the identity name (e.g. for form fields or email signatures), use ravi_identity_list.",
56
64
  parameters: {
57
65
  type: "object",
58
66
  properties: {},
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/tools/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAsCH,+EAA+E;AAE/E,mEAAmE;AACnE,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,0DAA0D;YAC1D,iHAAiH;YACjH,sFAAsF;YACtF,kFAAkF;QACpF,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;SACb;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACrC,OAAO,MAAM,CAAC,cAAc,EAAE,CAAC;QACjC,CAAC;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACT,sEAAsE;YACtE,6EAA6E;YAC7E,mHAAmH;YACnH,mFAAmF;QACrF,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+EAA+E;iBAC7F;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACpC,OAAO,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAc,CAAC,CAAC;QACtD,CAAC;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,iFAAiF;YACjF,iGAAiG;YACjG,sEAAsE;YACtE,oDAAoD;YACpD,0FAA0F;YAC1F,4FAA4F;QAC9F,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;SACb;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACrC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACvC,MAAM,CAAC,QAAQ,EAAE;gBACjB,MAAM,CAAC,QAAQ,EAAE;aAClB,CAAC,CAAC;YACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/tools/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAsCH,+EAA+E;AAE/E,mEAAmE;AACnE,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,0DAA0D;YAC1D,yHAAyH;YACzH,wEAAwE;YACxE,kFAAkF;QACpF,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;SACb;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACrC,OAAO,MAAM,CAAC,cAAc,EAAE,CAAC;QACjC,CAAC;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACT,sEAAsE;YACtE,qFAAqF;YACrF,2FAA2F;YAC3F,2FAA2F;YAC3F,mHAAmH;YACnH,mFAAmF;QACrF,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+EAA+E;iBAC7F;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,sEAAsE;wBACtE,6FAA6F;wBAC7F,+EAA+E;iBAClF;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACpC,OAAO,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAc,EAAE,MAAM,CAAC,KAA2B,CAAC,CAAC;QAC1F,CAAC;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,iFAAiF;YACjF,iGAAiG;YACjG,sEAAsE;YACtE,oDAAoD;YACpD,0FAA0F;YAC1F,2FAA2F;QAC7F,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;SACb;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACrC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACvC,MAAM,CAAC,QAAQ,EAAE;gBACjB,MAAM,CAAC,QAAQ,EAAE;aAClB,CAAC,CAAC;YACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC;KACF;CACF,CAAC"}
@@ -2,9 +2,6 @@
2
2
  * Inbox tools for the Ravi OpenClaw plugin.
3
3
  *
4
4
  * Provides tools to browse and read email threads and SMS conversations.
5
- * When a {@link CryptoManager} is available in the tool context, encrypted
6
- * fields (subjects, previews, bodies) are transparently decrypted before
7
- * being returned to the agent.
8
5
  *
9
6
  * @module tools/inbox
10
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/tools/inbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,eAAe,CAAC;AAMjE;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,EAAE,cAAc,EAwJtC,CAAC"}
1
+ {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/tools/inbox.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,eAAe,CAAC;AAKjE;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,EAAE,cAAc,EAoHtC,CAAC"}
@@ -2,13 +2,9 @@
2
2
  * Inbox tools for the Ravi OpenClaw plugin.
3
3
  *
4
4
  * Provides tools to browse and read email threads and SMS conversations.
5
- * When a {@link CryptoManager} is available in the tool context, encrypted
6
- * fields (subjects, previews, bodies) are transparently decrypted before
7
- * being returned to the agent.
8
5
  *
9
6
  * @module tools/inbox
10
7
  */
11
- import { tryDecrypt } from "../utils.js";
12
8
  import { writeFile, mkdtemp } from "node:fs/promises";
13
9
  import { join } from "node:path";
14
10
  import { tmpdir } from "node:os";
@@ -28,7 +24,6 @@ export const inboxTools = [
28
24
  "Returns thread_id, subject, preview, from_email, message_count, unread_count, and latest_message_dt. " +
29
25
  "Pass unread=true to filter to threads with new messages — useful for checking for verification emails or OTPs. " +
30
26
  "Use thread_id with ravi_read_email to read the full conversation and get message IDs for replying. " +
31
- "Encrypted subjects and previews are automatically decrypted. " +
32
27
  "To reply or forward, see ravi_email_reply and ravi_email_forward.",
33
28
  parameters: {
34
29
  type: "object",
@@ -40,27 +35,16 @@ export const inboxTools = [
40
35
  },
41
36
  required: [],
42
37
  },
43
- handler: async (params, { client, crypto }) => {
44
- const threads = await client.listEmailThreads(params.unread);
45
- if (crypto) {
46
- for (const thread of threads) {
47
- if (thread.subject)
48
- thread.subject = await tryDecrypt(crypto, thread.subject, "email.subject");
49
- if (thread.preview)
50
- thread.preview = await tryDecrypt(crypto, thread.preview, "email.preview");
51
- }
52
- }
53
- return threads;
38
+ handler: async (params, { client }) => {
39
+ return client.listEmailThreads(params.unread);
54
40
  },
55
41
  },
56
42
  {
57
43
  name: "ravi_inbox_sms",
58
44
  description: "List SMS conversations grouped by phone number. Each conversation shows the latest message preview, " +
59
45
  "message count, and unread count. Pass unread=true to filter to conversations with new messages. " +
60
- "Use conversation_id with ravi_read_sms to read the full thread. " +
61
- "Tip: to extract OTP/verification codes, look for 4-8 digit numbers in previews — " +
62
- "e.g. grep for /[0-9]{4,8}/ in the preview text. " +
63
- "Encrypted previews are automatically decrypted.",
46
+ "Use conversation_id with ravi_read_sms to read the full thread and extract OTP codes. " +
47
+ "To reply to an SMS, use ravi_sms_send with the sender's phone number.",
64
48
  parameters: {
65
49
  type: "object",
66
50
  properties: {
@@ -71,29 +55,20 @@ export const inboxTools = [
71
55
  },
72
56
  required: [],
73
57
  },
74
- handler: async (params, { client, crypto }) => {
75
- const conversations = await client.listSmsConversations(params.unread);
76
- if (crypto) {
77
- for (const conv of conversations) {
78
- if (conv.preview)
79
- conv.preview = await tryDecrypt(crypto, conv.preview, "sms.preview");
80
- }
81
- }
82
- return conversations;
58
+ handler: async (params, { client }) => {
59
+ return client.listSmsConversations(params.unread);
83
60
  },
84
61
  },
85
62
  {
86
63
  name: "ravi_read_email",
87
64
  description: "Read all messages in an email thread. Returns the full conversation with each message's " +
88
- "id, from_email, to_email, cc (comma-separated CC recipients), subject, text_content, html_content, is_read status, and attachments array. " +
65
+ "id, from_email, from_display_name, to_email, cc (comma-separated CC recipients), subject, text_content, html_content, is_read status, and attachments array. " +
89
66
  "Check the cc field to see who else is in the conversation — use this when deciding who to include in reply CC. " +
90
67
  "Each attachment object has uuid, filename, content_type, size (bytes), is_inline, and download_url. " +
91
68
  "Pass download_attachments=true to download all attachments to a temp directory — each attachment " +
92
69
  "will have a local_path field added that you can use with other tools. " +
93
- "Use the message id with ravi_email_reply to reply — you'll need to copy the subject from here " +
94
- "since it's E2E encrypted on the server. " +
70
+ "Use the message id with ravi_email_reply to reply. " +
95
71
  "Tip: to extract verification links, search for URLs (https://...) in text_content. " +
96
- "Encrypted subjects and bodies are automatically decrypted. " +
97
72
  "After reading, use ravi_email_reply to reply, ravi_email_forward to forward, or ravi_feedback to report delivery issues.",
98
73
  parameters: {
99
74
  type: "object",
@@ -110,22 +85,9 @@ export const inboxTools = [
110
85
  },
111
86
  required: ["thread_id"],
112
87
  },
113
- handler: async (params, { client, crypto }) => {
88
+ handler: async (params, { client }) => {
114
89
  const threadDetail = await client.getEmailThread(params.thread_id);
115
90
  const messages = threadDetail.messages;
116
- if (crypto) {
117
- if (threadDetail.subject) {
118
- threadDetail.subject = await tryDecrypt(crypto, threadDetail.subject, "email.subject");
119
- }
120
- for (const msg of messages) {
121
- if (msg.subject)
122
- msg.subject = await tryDecrypt(crypto, msg.subject, "email.subject");
123
- if (msg.text_content)
124
- msg.text_content = await tryDecrypt(crypto, msg.text_content, "email.text_content");
125
- if (msg.html_content)
126
- msg.html_content = await tryDecrypt(crypto, msg.html_content, "email.html_content");
127
- }
128
- }
129
91
  if (params.download_attachments === true) {
130
92
  const tempDir = await mkdtemp(join(tmpdir(), "ravi-attachments-"));
131
93
  for (const msg of messages) {
@@ -145,11 +107,11 @@ export const inboxTools = [
145
107
  {
146
108
  name: "ravi_read_sms",
147
109
  description: "Read all SMS messages in a conversation. Returns each message's id, body, direction " +
148
- "(inbound/outbound), is_read status, and timestamp. " +
110
+ "(incoming/outgoing), is_read status, and timestamp. " +
149
111
  "Tip: to extract OTP/verification codes, look for 4-8 digit numbers in the body text — " +
150
112
  "e.g. match /[0-9]{4,8}/ against each message body. SMS delivery takes 2-10 seconds, " +
151
113
  "so poll with a short delay if you just triggered a verification. " +
152
- "Encrypted bodies are automatically decrypted.",
114
+ "To reply to an SMS, use ravi_sms_send with the sender's phone number from the conversation.",
153
115
  parameters: {
154
116
  type: "object",
155
117
  properties: {
@@ -160,15 +122,8 @@ export const inboxTools = [
160
122
  },
161
123
  required: ["conversation_id"],
162
124
  },
163
- handler: async (params, { client, crypto }) => {
164
- const messages = await client.listSmsMessages(params.conversation_id);
165
- if (crypto) {
166
- for (const msg of messages) {
167
- if (msg.body)
168
- msg.body = await tryDecrypt(crypto, msg.body, "sms.body");
169
- }
170
- }
171
- return messages;
125
+ handler: async (params, { client }) => {
126
+ return client.listSmsMessages(params.conversation_id);
172
127
  },
173
128
  },
174
129
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/tools/inbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/tools/inbox.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"passwords.d.ts","sourceRoot":"","sources":["../../src/tools/passwords.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAIjE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;AAI5C,0EAA0E;AAC1E,eAAO,MAAM,aAAa,EAAE,cAAc,EAqNzC,CAAC"}
1
+ {"version":3,"file":"passwords.d.ts","sourceRoot":"","sources":["../../src/tools/passwords.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAIjE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;AAI5C,0EAA0E;AAC1E,eAAO,MAAM,aAAa,EAAE,cAAc,EAoOzC,CAAC"}