@ravi-hq/ravi 0.1.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 (85) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +271 -0
  3. package/dist/channels/email.d.ts +221 -0
  4. package/dist/channels/email.d.ts.map +1 -0
  5. package/dist/channels/email.js +143 -0
  6. package/dist/channels/email.js.map +1 -0
  7. package/dist/channels/sms.d.ts +223 -0
  8. package/dist/channels/sms.d.ts.map +1 -0
  9. package/dist/channels/sms.js +141 -0
  10. package/dist/channels/sms.js.map +1 -0
  11. package/dist/cli.d.ts +24 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +390 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/client.d.ts +174 -0
  16. package/dist/client.d.ts.map +1 -0
  17. package/dist/client.js +289 -0
  18. package/dist/client.js.map +1 -0
  19. package/dist/config.d.ts +9 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js +9 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/crypto.d.ts +143 -0
  24. package/dist/crypto.d.ts.map +1 -0
  25. package/dist/crypto.js +310 -0
  26. package/dist/crypto.js.map +1 -0
  27. package/dist/index.d.ts +79 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +143 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/service.d.ts +98 -0
  32. package/dist/service.d.ts.map +1 -0
  33. package/dist/service.js +130 -0
  34. package/dist/service.js.map +1 -0
  35. package/dist/sse.d.ts +110 -0
  36. package/dist/sse.d.ts.map +1 -0
  37. package/dist/sse.js +269 -0
  38. package/dist/sse.js.map +1 -0
  39. package/dist/tools/email-send.d.ts +13 -0
  40. package/dist/tools/email-send.d.ts.map +1 -0
  41. package/dist/tools/email-send.js +60 -0
  42. package/dist/tools/email-send.js.map +1 -0
  43. package/dist/tools/feedback.d.ts +13 -0
  44. package/dist/tools/feedback.d.ts.map +1 -0
  45. package/dist/tools/feedback.js +43 -0
  46. package/dist/tools/feedback.js.map +1 -0
  47. package/dist/tools/identity.d.ts +43 -0
  48. package/dist/tools/identity.d.ts.map +1 -0
  49. package/dist/tools/identity.js +59 -0
  50. package/dist/tools/identity.js.map +1 -0
  51. package/dist/tools/inbox.d.ts +22 -0
  52. package/dist/tools/inbox.d.ts.map +1 -0
  53. package/dist/tools/inbox.js +166 -0
  54. package/dist/tools/inbox.js.map +1 -0
  55. package/dist/tools/passwords.d.ts +19 -0
  56. package/dist/tools/passwords.d.ts.map +1 -0
  57. package/dist/tools/passwords.js +165 -0
  58. package/dist/tools/passwords.js.map +1 -0
  59. package/dist/tools/sms-send.d.ts +11 -0
  60. package/dist/tools/sms-send.d.ts.map +1 -0
  61. package/dist/tools/sms-send.js +32 -0
  62. package/dist/tools/sms-send.js.map +1 -0
  63. package/dist/tools/vault.d.ts +15 -0
  64. package/dist/tools/vault.d.ts.map +1 -0
  65. package/dist/tools/vault.js +97 -0
  66. package/dist/tools/vault.js.map +1 -0
  67. package/dist/types.d.ts +137 -0
  68. package/dist/types.d.ts.map +1 -0
  69. package/dist/types.js +7 -0
  70. package/dist/types.js.map +1 -0
  71. package/dist/utils.d.ts +11 -0
  72. package/dist/utils.d.ts.map +1 -0
  73. package/dist/utils.js +18 -0
  74. package/dist/utils.js.map +1 -0
  75. package/openclaw.plugin.json +33 -0
  76. package/package.json +70 -0
  77. package/skills/CLAUDE.md +36 -0
  78. package/skills/ravi/SKILL.md +46 -0
  79. package/skills/ravi-email-send/SKILL.md +44 -0
  80. package/skills/ravi-feedback/SKILL.md +37 -0
  81. package/skills/ravi-identity/SKILL.md +50 -0
  82. package/skills/ravi-inbox/SKILL.md +58 -0
  83. package/skills/ravi-login/SKILL.md +42 -0
  84. package/skills/ravi-passwords/SKILL.md +48 -0
  85. package/skills/ravi-vault/SKILL.md +54 -0
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Feedback tool for the Ravi OpenClaw plugin.
3
+ *
4
+ * Provides a tool that lets agents report issues, request features, or ask
5
+ * for help with the Ravi identity provider. Currently a local stub that
6
+ * acknowledges the feedback; a future version could POST to a feedback endpoint.
7
+ *
8
+ * @module tools/feedback
9
+ */
10
+ /** Tools for submitting feedback about Ravi. */
11
+ export const feedbackTools = [
12
+ {
13
+ name: "ravi_feedback",
14
+ description: "Submit feedback about the Ravi identity provider. Use this to report issues, request features, or ask for help.",
15
+ parameters: {
16
+ type: "object",
17
+ properties: {
18
+ message: { type: "string", description: "The feedback message" },
19
+ category: {
20
+ type: "string",
21
+ enum: ["bug", "feature", "help", "other"],
22
+ description: "Category of feedback",
23
+ },
24
+ },
25
+ required: ["message"],
26
+ },
27
+ handler: async (params, _context) => {
28
+ const category = params.category ?? "other";
29
+ const message = params.message;
30
+ console.log(`[ravi] Feedback (${category}): ${message}`);
31
+ return {
32
+ status: "acknowledged",
33
+ message: "Feedback noted locally. A future update will submit feedback to the Ravi team.",
34
+ feedback: {
35
+ message,
36
+ category,
37
+ timestamp: new Date().toISOString(),
38
+ },
39
+ };
40
+ },
41
+ },
42
+ ];
43
+ //# sourceMappingURL=feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/tools/feedback.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,gDAAgD;AAChD,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,iHAAiH;QACnH,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;gBAChE,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;oBACzC,WAAW,EAAE,sBAAsB;iBACpC;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;YAClC,MAAM,QAAQ,GAAI,MAAM,CAAC,QAAmB,IAAI,OAAO,CAAC;YACxD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAiB,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,oBAAoB,QAAQ,MAAM,OAAO,EAAE,CAAC,CAAC;YACzD,OAAO;gBACL,MAAM,EAAE,cAAc;gBACtB,OAAO,EAAE,gFAAgF;gBACzF,QAAQ,EAAE;oBACR,OAAO;oBACP,QAAQ;oBACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC;aACF,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Identity management tools for the Ravi OpenClaw plugin.
3
+ *
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
6
+ * persona for AI agents.
7
+ *
8
+ * @module tools/identity
9
+ */
10
+ import type { RaviClient } from "../client.js";
11
+ import type { CryptoManager } from "../crypto.js";
12
+ /**
13
+ * Tool definition for OpenClaw registration.
14
+ *
15
+ * Each tool has a name, human-readable description, JSON Schema parameters,
16
+ * and an async handler that receives parsed parameters and a {@link ToolContext}.
17
+ */
18
+ export interface ToolDefinition {
19
+ /** Unique tool name (e.g. `"ravi_identity_list"`). */
20
+ name: string;
21
+ /** Human-readable description shown to the agent. */
22
+ description: string;
23
+ /** JSON Schema describing the tool's input parameters. */
24
+ parameters: Record<string, unknown>;
25
+ /** Async handler invoked when the agent calls this tool. */
26
+ handler: (params: Record<string, unknown>, context: ToolContext) => Promise<unknown>;
27
+ }
28
+ /**
29
+ * Context provided to every tool handler at invocation time.
30
+ *
31
+ * Always includes an authenticated {@link RaviClient}. The optional
32
+ * {@link CryptoManager} is present when the user has provided an encryption
33
+ * PIN, enabling E2E encrypt/decrypt operations on vault data.
34
+ */
35
+ export interface ToolContext {
36
+ /** Authenticated Ravi API client. */
37
+ client: RaviClient;
38
+ /** E2E crypto manager — present when the user has unlocked encryption. */
39
+ crypto?: CryptoManager;
40
+ }
41
+ /** Tools for managing Ravi identities (list, create, get info). */
42
+ export declare const identityTools: ToolDefinition[];
43
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +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,EAiDzC,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Identity management tools for the Ravi OpenClaw plugin.
3
+ *
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
6
+ * persona for AI agents.
7
+ *
8
+ * @module tools/identity
9
+ */
10
+ // ─── Identity Tools ─────────────────────────────────────────────────────────
11
+ /** Tools for managing Ravi identities (list, create, get info). */
12
+ export const identityTools = [
13
+ {
14
+ name: "ravi_identity_list",
15
+ description: "List all Ravi identities for the authenticated account. Account-level operation — does not require an identity to be configured.",
16
+ parameters: {
17
+ type: "object",
18
+ properties: {},
19
+ required: [],
20
+ },
21
+ handler: async (_params, { client }) => {
22
+ return client.listIdentities();
23
+ },
24
+ },
25
+ {
26
+ name: "ravi_identity_create",
27
+ description: "Create a new Ravi identity with a given name. Provisions a new email address, phone number, and vault. Account-level operation — does not require an identity to be configured.",
28
+ parameters: {
29
+ type: "object",
30
+ properties: {
31
+ name: {
32
+ type: "string",
33
+ description: "Display name for the new identity",
34
+ },
35
+ },
36
+ required: ["name"],
37
+ },
38
+ handler: async (params, { client }) => {
39
+ return client.createIdentity(params.name);
40
+ },
41
+ },
42
+ {
43
+ name: "ravi_get_info",
44
+ description: "Get the configured identity's email address, phone number, and other details. Uses the identity UUID from plugin config.",
45
+ parameters: {
46
+ type: "object",
47
+ properties: {},
48
+ required: [],
49
+ },
50
+ handler: async (_params, { client }) => {
51
+ const [email, phone] = await Promise.all([
52
+ client.getEmail(),
53
+ client.getPhone(),
54
+ ]);
55
+ return { email, phone };
56
+ },
57
+ },
58
+ ];
59
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +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,kIAAkI;QACpI,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,iLAAiL;QACnL,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mCAAmC;iBACjD;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,0HAA0H;QAC5H,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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Inbox tools for the Ravi OpenClaw plugin.
3
+ *
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
+ *
9
+ * @module tools/inbox
10
+ */
11
+ import type { ToolDefinition } from "./identity.js";
12
+ /**
13
+ * Tools for reading email and SMS inboxes.
14
+ *
15
+ * Includes four tools:
16
+ * - `ravi_inbox_email` — list email threads (optionally unread only)
17
+ * - `ravi_inbox_sms` — list SMS conversations (optionally unread only)
18
+ * - `ravi_read_email` — read all messages in an email thread
19
+ * - `ravi_read_sms` — read all messages in an SMS conversation
20
+ */
21
+ export declare const inboxTools: ToolDefinition[];
22
+ //# sourceMappingURL=inbox.d.ts.map
@@ -0,0 +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;AAEjE;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,EAAE,cAAc,EA2HtC,CAAC"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Inbox tools for the Ravi OpenClaw plugin.
3
+ *
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
+ *
9
+ * @module tools/inbox
10
+ */
11
+ /**
12
+ * Tools for reading email and SMS inboxes.
13
+ *
14
+ * Includes four tools:
15
+ * - `ravi_inbox_email` — list email threads (optionally unread only)
16
+ * - `ravi_inbox_sms` — list SMS conversations (optionally unread only)
17
+ * - `ravi_read_email` — read all messages in an email thread
18
+ * - `ravi_read_sms` — read all messages in an SMS conversation
19
+ */
20
+ export const inboxTools = [
21
+ {
22
+ name: "ravi_inbox_email",
23
+ description: "List email threads in the inbox. Optionally filter to unread only. Encrypted subjects/previews are decrypted.",
24
+ parameters: {
25
+ type: "object",
26
+ properties: {
27
+ unread: {
28
+ type: "boolean",
29
+ description: "If true, only show threads with unread messages",
30
+ },
31
+ },
32
+ required: [],
33
+ },
34
+ handler: async (params, { client, crypto }) => {
35
+ const threads = await client.listEmailThreads(params.unread);
36
+ if (crypto) {
37
+ for (const thread of threads) {
38
+ if (thread.subject) {
39
+ try {
40
+ thread.subject = await crypto.decrypt(thread.subject);
41
+ }
42
+ catch {
43
+ thread.subject = "[decryption failed]";
44
+ }
45
+ }
46
+ if (thread.preview) {
47
+ try {
48
+ thread.preview = await crypto.decrypt(thread.preview);
49
+ }
50
+ catch {
51
+ thread.preview = "[decryption failed]";
52
+ }
53
+ }
54
+ }
55
+ }
56
+ return threads;
57
+ },
58
+ },
59
+ {
60
+ name: "ravi_inbox_sms",
61
+ description: "List SMS conversations. Optionally filter to unread only. Encrypted previews are decrypted.",
62
+ parameters: {
63
+ type: "object",
64
+ properties: {
65
+ unread: {
66
+ type: "boolean",
67
+ description: "If true, only show conversations with unread messages",
68
+ },
69
+ },
70
+ required: [],
71
+ },
72
+ handler: async (params, { client, crypto }) => {
73
+ const conversations = await client.listSmsConversations(params.unread);
74
+ if (crypto) {
75
+ for (const conv of conversations) {
76
+ if (conv.preview) {
77
+ try {
78
+ conv.preview = await crypto.decrypt(conv.preview);
79
+ }
80
+ catch {
81
+ conv.preview = "[decryption failed]";
82
+ }
83
+ }
84
+ }
85
+ }
86
+ return conversations;
87
+ },
88
+ },
89
+ {
90
+ name: "ravi_read_email",
91
+ description: "Read all messages in an email thread. Encrypted fields (subject, body) are decrypted.",
92
+ parameters: {
93
+ type: "object",
94
+ properties: {
95
+ thread_id: {
96
+ type: "string",
97
+ description: "The email thread ID to read",
98
+ },
99
+ },
100
+ required: ["thread_id"],
101
+ },
102
+ handler: async (params, { client, crypto }) => {
103
+ const messages = await client.getEmailThread(params.thread_id);
104
+ if (crypto) {
105
+ for (const msg of messages) {
106
+ if (msg.subject) {
107
+ try {
108
+ msg.subject = await crypto.decrypt(msg.subject);
109
+ }
110
+ catch {
111
+ msg.subject = "[decryption failed]";
112
+ }
113
+ }
114
+ if (msg.text_content) {
115
+ try {
116
+ msg.text_content = await crypto.decrypt(msg.text_content);
117
+ }
118
+ catch {
119
+ msg.text_content = "[decryption failed]";
120
+ }
121
+ }
122
+ if (msg.html_content) {
123
+ try {
124
+ msg.html_content = await crypto.decrypt(msg.html_content);
125
+ }
126
+ catch {
127
+ msg.html_content = "[decryption failed]";
128
+ }
129
+ }
130
+ }
131
+ }
132
+ return messages;
133
+ },
134
+ },
135
+ {
136
+ name: "ravi_read_sms",
137
+ description: "Read all SMS messages in a conversation. Encrypted bodies are decrypted.",
138
+ parameters: {
139
+ type: "object",
140
+ properties: {
141
+ conversation_id: {
142
+ type: "string",
143
+ description: "The conversation ID (phone number) to read",
144
+ },
145
+ },
146
+ required: ["conversation_id"],
147
+ },
148
+ handler: async (params, { client, crypto }) => {
149
+ const messages = await client.listSmsMessages(params.conversation_id);
150
+ if (crypto) {
151
+ for (const msg of messages) {
152
+ if (msg.body) {
153
+ try {
154
+ msg.body = await crypto.decrypt(msg.body);
155
+ }
156
+ catch {
157
+ msg.body = "[decryption failed]";
158
+ }
159
+ }
160
+ }
161
+ }
162
+ return messages;
163
+ },
164
+ },
165
+ ];
166
+ //# sourceMappingURL=inbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/tools/inbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Password management tools for the Ravi OpenClaw plugin.
3
+ *
4
+ * Provides tools to list, retrieve, create, and delete website credentials
5
+ * stored in the Ravi password manager. When a {@link CryptoManager} is
6
+ * available in the tool context, sensitive fields (username, password, notes)
7
+ * are automatically decrypted on read and encrypted on write using E2E
8
+ * NaCl SealedBox encryption.
9
+ *
10
+ * List view intentionally hides password values — use the detail tool
11
+ * (`ravi_passwords_get`) to retrieve the decrypted password for a specific entry.
12
+ *
13
+ * @module tools/passwords
14
+ */
15
+ import type { ToolDefinition, ToolContext } from "./identity.js";
16
+ export type { ToolDefinition, ToolContext };
17
+ /** Tools for managing website credentials (list, get, create, delete). */
18
+ export declare const passwordTools: ToolDefinition[];
19
+ //# sourceMappingURL=passwords.d.ts.map
@@ -0,0 +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;AAGjE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;AAI5C,0EAA0E;AAC1E,eAAO,MAAM,aAAa,EAAE,cAAc,EAkIzC,CAAC"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Password management tools for the Ravi OpenClaw plugin.
3
+ *
4
+ * Provides tools to list, retrieve, create, and delete website credentials
5
+ * stored in the Ravi password manager. When a {@link CryptoManager} is
6
+ * available in the tool context, sensitive fields (username, password, notes)
7
+ * are automatically decrypted on read and encrypted on write using E2E
8
+ * NaCl SealedBox encryption.
9
+ *
10
+ * List view intentionally hides password values — use the detail tool
11
+ * (`ravi_passwords_get`) to retrieve the decrypted password for a specific entry.
12
+ *
13
+ * @module tools/passwords
14
+ */
15
+ // ─── Password Tools ─────────────────────────────────────────────────────────
16
+ /** Tools for managing website credentials (list, get, create, delete). */
17
+ export const passwordTools = [
18
+ {
19
+ name: "ravi_passwords_list",
20
+ description: "List all saved passwords. Usernames are decrypted; passwords are NOT returned in list view.",
21
+ parameters: {
22
+ type: "object",
23
+ properties: {},
24
+ required: [],
25
+ },
26
+ handler: async (_params, { client, crypto }) => {
27
+ const entries = await client.listPasswords();
28
+ if (crypto) {
29
+ for (const entry of entries) {
30
+ if (entry.username) {
31
+ try {
32
+ entry.username = await crypto.decrypt(entry.username);
33
+ }
34
+ catch {
35
+ entry.username = "[decryption failed]";
36
+ }
37
+ }
38
+ if (entry.notes) {
39
+ try {
40
+ entry.notes = await crypto.decrypt(entry.notes);
41
+ }
42
+ catch {
43
+ entry.notes = "[decryption failed]";
44
+ }
45
+ }
46
+ }
47
+ }
48
+ // Never expose passwords in list view — only in detail view
49
+ for (const entry of entries) {
50
+ entry.password = "[hidden]";
51
+ }
52
+ return entries;
53
+ },
54
+ },
55
+ {
56
+ name: "ravi_passwords_get",
57
+ description: "Get a specific password entry with the password decrypted. Use the UUID from ravi_passwords_list.",
58
+ parameters: {
59
+ type: "object",
60
+ properties: {
61
+ uuid: {
62
+ type: "string",
63
+ description: "UUID of the password entry",
64
+ },
65
+ },
66
+ required: ["uuid"],
67
+ },
68
+ handler: async (params, { client, crypto }) => {
69
+ const entry = await client.getPassword(params.uuid);
70
+ if (crypto) {
71
+ if (entry.username) {
72
+ try {
73
+ entry.username = await crypto.decrypt(entry.username);
74
+ }
75
+ catch {
76
+ entry.username = "[decryption failed]";
77
+ }
78
+ }
79
+ if (entry.password) {
80
+ try {
81
+ entry.password = await crypto.decrypt(entry.password);
82
+ }
83
+ catch {
84
+ entry.password = "[decryption failed]";
85
+ }
86
+ }
87
+ if (entry.notes) {
88
+ try {
89
+ entry.notes = await crypto.decrypt(entry.notes);
90
+ }
91
+ catch {
92
+ entry.notes = "[decryption failed]";
93
+ }
94
+ }
95
+ }
96
+ return entry;
97
+ },
98
+ },
99
+ {
100
+ name: "ravi_passwords_create",
101
+ description: "Create a new password entry. Fields are encrypted before storage.",
102
+ parameters: {
103
+ type: "object",
104
+ properties: {
105
+ domain: {
106
+ type: "string",
107
+ description: "Website domain (e.g. 'github.com')",
108
+ },
109
+ username: {
110
+ type: "string",
111
+ description: "Username or email for the account",
112
+ },
113
+ password: {
114
+ type: "string",
115
+ description: "Password for the account",
116
+ },
117
+ notes: {
118
+ type: "string",
119
+ description: "Optional notes",
120
+ },
121
+ },
122
+ required: ["domain"],
123
+ },
124
+ handler: async (params, { client, crypto }) => {
125
+ if (!crypto) {
126
+ return {
127
+ error: "Cannot create password entry: E2E encryption is not configured. " +
128
+ "Add your PIN to the plugin config to enable encrypted storage.",
129
+ };
130
+ }
131
+ const data = {
132
+ domain: params.domain,
133
+ };
134
+ if (params.username) {
135
+ data.username = await crypto.encrypt(params.username);
136
+ }
137
+ if (params.password) {
138
+ data.password = await crypto.encrypt(params.password);
139
+ }
140
+ if (params.notes) {
141
+ data.notes = await crypto.encrypt(params.notes);
142
+ }
143
+ return client.createPassword(data);
144
+ },
145
+ },
146
+ {
147
+ name: "ravi_passwords_delete",
148
+ description: "Delete a password entry by UUID.",
149
+ parameters: {
150
+ type: "object",
151
+ properties: {
152
+ uuid: {
153
+ type: "string",
154
+ description: "UUID of the password entry to delete",
155
+ },
156
+ },
157
+ required: ["uuid"],
158
+ },
159
+ handler: async (params, { client }) => {
160
+ await client.deletePassword(params.uuid);
161
+ return { status: "deleted", uuid: params.uuid };
162
+ },
163
+ },
164
+ ];
165
+ //# sourceMappingURL=passwords.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passwords.js","sourceRoot":"","sources":["../../src/tools/passwords.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * SMS send tool for the Ravi OpenClaw plugin.
3
+ *
4
+ * Provides a tool to send SMS messages from the active identity's phone number.
5
+ *
6
+ * @module tools/sms-send
7
+ */
8
+ import type { ToolDefinition } from "./identity.js";
9
+ /** Tool for sending SMS messages. */
10
+ export declare const smsSendTools: ToolDefinition[];
11
+ //# sourceMappingURL=sms-send.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sms-send.d.ts","sourceRoot":"","sources":["../../src/tools/sms-send.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,eAAe,CAAC;AAEjE,qCAAqC;AACrC,eAAO,MAAM,YAAY,EAAE,cAAc,EAsBxC,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * SMS send tool for the Ravi OpenClaw plugin.
3
+ *
4
+ * Provides a tool to send SMS messages from the active identity's phone number.
5
+ *
6
+ * @module tools/sms-send
7
+ */
8
+ /** Tool for sending SMS messages. */
9
+ export const smsSendTools = [
10
+ {
11
+ name: "ravi_sms_send",
12
+ description: "Send an SMS message from the active identity's phone number.",
13
+ parameters: {
14
+ type: "object",
15
+ properties: {
16
+ to_number: {
17
+ type: "string",
18
+ description: "Recipient phone number in E.164 format (e.g. +15551234567)",
19
+ },
20
+ body: {
21
+ type: "string",
22
+ description: "SMS message text",
23
+ },
24
+ },
25
+ required: ["to_number", "body"],
26
+ },
27
+ handler: async (params, { client }) => {
28
+ return client.sendSms(params.to_number, params.body);
29
+ },
30
+ },
31
+ ];
32
+ //# sourceMappingURL=sms-send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sms-send.js","sourceRoot":"","sources":["../../src/tools/sms-send.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,qCAAqC;AACrC,MAAM,CAAC,MAAM,YAAY,GAAqB;IAC5C;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,8DAA8D;QAC3E,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4DAA4D;iBAC1E;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kBAAkB;iBAChC;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;SAChC;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACpC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAmB,EAAE,MAAM,CAAC,IAAc,CAAC,CAAC;QAC3E,CAAC;KACF;CACF,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Vault secret management tools for the Ravi OpenClaw plugin.
3
+ *
4
+ * Provides tools to list, retrieve, and store key-value secrets in the Ravi
5
+ * vault. When a {@link CryptoManager} is available in the tool context, values
6
+ * are automatically decrypted on read and encrypted on write using E2E
7
+ * NaCl SealedBox encryption.
8
+ *
9
+ * @module tools/vault
10
+ */
11
+ import type { ToolDefinition, ToolContext } from "./identity.js";
12
+ export type { ToolDefinition, ToolContext };
13
+ /** Tools for managing secrets in the Ravi vault (list, get, set). */
14
+ export declare const vaultTools: ToolDefinition[];
15
+ //# sourceMappingURL=vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../src/tools/vault.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;AAI5C,qEAAqE;AACrE,eAAO,MAAM,UAAU,EAAE,cAAc,EAiFtC,CAAC"}