@ravi-hq/ravi 0.1.0 → 0.2.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 (63) hide show
  1. package/README.md +56 -6
  2. package/dist/auth.d.ts +39 -0
  3. package/dist/auth.d.ts.map +1 -0
  4. package/dist/auth.js +97 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/bin/ravi-secrets.d.ts +23 -0
  7. package/dist/bin/ravi-secrets.d.ts.map +1 -0
  8. package/dist/bin/ravi-secrets.js +113 -0
  9. package/dist/bin/ravi-secrets.js.map +1 -0
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +142 -188
  12. package/dist/cli.js.map +1 -1
  13. package/dist/client.d.ts +4 -1
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/client.js +26 -17
  16. package/dist/client.js.map +1 -1
  17. package/dist/crypto.d.ts +13 -0
  18. package/dist/crypto.d.ts.map +1 -1
  19. package/dist/crypto.js +45 -5
  20. package/dist/crypto.js.map +1 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +68 -46
  23. package/dist/index.js.map +1 -1
  24. package/dist/service.d.ts +7 -0
  25. package/dist/service.d.ts.map +1 -1
  26. package/dist/service.js +11 -0
  27. package/dist/service.js.map +1 -1
  28. package/dist/sse.d.ts +9 -0
  29. package/dist/sse.d.ts.map +1 -1
  30. package/dist/sse.js +20 -2
  31. package/dist/sse.js.map +1 -1
  32. package/dist/tools/email-send.js +1 -1
  33. package/dist/tools/email-send.js.map +1 -1
  34. package/dist/tools/feedback.d.ts +2 -3
  35. package/dist/tools/feedback.d.ts.map +1 -1
  36. package/dist/tools/feedback.js +26 -18
  37. package/dist/tools/feedback.js.map +1 -1
  38. package/dist/tools/inbox.d.ts.map +1 -1
  39. package/dist/tools/inbox.js +15 -56
  40. package/dist/tools/inbox.js.map +1 -1
  41. package/dist/tools/passwords.d.ts.map +1 -1
  42. package/dist/tools/passwords.js +21 -51
  43. package/dist/tools/passwords.js.map +1 -1
  44. package/dist/tools/vault.d.ts.map +1 -1
  45. package/dist/tools/vault.js +4 -8
  46. package/dist/tools/vault.js.map +1 -1
  47. package/dist/types.d.ts +10 -9
  48. package/dist/types.d.ts.map +1 -1
  49. package/dist/utils.d.ts +6 -0
  50. package/dist/utils.d.ts.map +1 -1
  51. package/dist/utils.js +18 -0
  52. package/dist/utils.js.map +1 -1
  53. package/openclaw.plugin.json +3 -23
  54. package/package.json +5 -3
  55. package/skills/CLAUDE.md +0 -36
  56. package/skills/ravi/SKILL.md +0 -46
  57. package/skills/ravi-email-send/SKILL.md +0 -44
  58. package/skills/ravi-feedback/SKILL.md +0 -37
  59. package/skills/ravi-identity/SKILL.md +0 -50
  60. package/skills/ravi-inbox/SKILL.md +0 -58
  61. package/skills/ravi-login/SKILL.md +0 -42
  62. package/skills/ravi-passwords/SKILL.md +0 -48
  63. package/skills/ravi-vault/SKILL.md +0 -54
@@ -1,42 +1,50 @@
1
1
  /**
2
2
  * Feedback tool for the Ravi OpenClaw plugin.
3
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.
4
+ * Sends feedback to the Ravi team by composing an email to feedback@ravi.app
5
+ * from the agent's identity inbox. Matches the Go CLI's `ravi feedback` command.
7
6
  *
8
7
  * @module tools/feedback
9
8
  */
9
+ import { wrapInHtml } from "../utils.js";
10
+ const FEEDBACK_EMAIL = "feedback@ravi.app";
10
11
  /** Tools for submitting feedback about Ravi. */
11
12
  export const feedbackTools = [
12
13
  {
13
14
  name: "ravi_feedback",
14
- description: "Submit feedback about the Ravi identity provider. Use this to report issues, request features, or ask for help.",
15
+ description: "Send feedback to the Ravi team about any experience with Ravi tools good or bad. " +
16
+ "Use this whenever you encounter bugs, have feature requests, notice UX friction, " +
17
+ "or have a positive experience worth sharing. Proactive feedback helps improve Ravi for all agents.",
15
18
  parameters: {
16
19
  type: "object",
17
20
  properties: {
18
- message: { type: "string", description: "The feedback message" },
21
+ message: { type: "string", description: "The feedback message describing your experience" },
19
22
  category: {
20
23
  type: "string",
21
- enum: ["bug", "feature", "help", "other"],
22
- description: "Category of feedback",
24
+ enum: ["bug", "feature", "positive", "friction", "other"],
25
+ description: "Category: bug report, feature request, positive experience, UX friction, or other",
23
26
  },
24
27
  },
25
28
  required: ["message"],
26
29
  },
27
- handler: async (params, _context) => {
30
+ handler: async (params, context) => {
28
31
  const category = params.category ?? "other";
29
32
  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
- };
33
+ const subject = `[${category}] Agent Feedback`;
34
+ try {
35
+ await context.client.composeEmail(FEEDBACK_EMAIL, subject, wrapInHtml(message));
36
+ return {
37
+ status: "sent",
38
+ message: `Feedback sent to ${FEEDBACK_EMAIL}.`,
39
+ };
40
+ }
41
+ catch (err) {
42
+ const detail = err instanceof Error ? err.message : String(err);
43
+ return {
44
+ status: "error",
45
+ message: `Failed to send feedback: ${detail}`,
46
+ };
47
+ }
40
48
  },
41
49
  },
42
50
  ];
@@ -1 +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"}
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/tools/feedback.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAE3C,gDAAgD;AAChD,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,qFAAqF;YACrF,mFAAmF;YACnF,oGAAoG;QACtG,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iDAAiD,EAAE;gBAC3F,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC;oBACzD,WAAW,EAAE,mFAAmF;iBACjG;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAoB,EAAE,EAAE;YAC9C,MAAM,QAAQ,GAAI,MAAM,CAAC,QAAmB,IAAI,OAAO,CAAC;YACxD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAiB,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,QAAQ,kBAAkB,CAAC;YAE/C,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,MAAM,CAAC,YAAY,CAC/B,cAAc,EACd,OAAO,EACP,UAAU,CAAC,OAAO,CAAC,CACpB,CAAC;gBACF,OAAO;oBACL,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,oBAAoB,cAAc,GAAG;iBAC/C,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChE,OAAO;oBACL,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,4BAA4B,MAAM,EAAE;iBAC9C,CAAC;YACJ,CAAC;QACH,CAAC;KACF;CACF,CAAC"}
@@ -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;AAEjE;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,EAAE,cAAc,EA2HtC,CAAC"}
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;AAGjE;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,EAAE,cAAc,EAsGtC,CAAC"}
@@ -8,6 +8,7 @@
8
8
  *
9
9
  * @module tools/inbox
10
10
  */
11
+ import { tryDecrypt } from "../utils.js";
11
12
  /**
12
13
  * Tools for reading email and SMS inboxes.
13
14
  *
@@ -35,22 +36,10 @@ export const inboxTools = [
35
36
  const threads = await client.listEmailThreads(params.unread);
36
37
  if (crypto) {
37
38
  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
- }
39
+ if (thread.subject)
40
+ thread.subject = await tryDecrypt(crypto, thread.subject, "email.subject");
41
+ if (thread.preview)
42
+ thread.preview = await tryDecrypt(crypto, thread.preview, "email.preview");
54
43
  }
55
44
  }
56
45
  return threads;
@@ -73,14 +62,8 @@ export const inboxTools = [
73
62
  const conversations = await client.listSmsConversations(params.unread);
74
63
  if (crypto) {
75
64
  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
- }
65
+ if (conv.preview)
66
+ conv.preview = await tryDecrypt(crypto, conv.preview, "sms.preview");
84
67
  }
85
68
  }
86
69
  return conversations;
@@ -103,30 +86,12 @@ export const inboxTools = [
103
86
  const messages = await client.getEmailThread(params.thread_id);
104
87
  if (crypto) {
105
88
  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
- }
89
+ if (msg.subject)
90
+ msg.subject = await tryDecrypt(crypto, msg.subject, "email.subject");
91
+ if (msg.text_content)
92
+ msg.text_content = await tryDecrypt(crypto, msg.text_content, "email.text_content");
93
+ if (msg.html_content)
94
+ msg.html_content = await tryDecrypt(crypto, msg.html_content, "email.html_content");
130
95
  }
131
96
  }
132
97
  return messages;
@@ -149,14 +114,8 @@ export const inboxTools = [
149
114
  const messages = await client.listSmsMessages(params.conversation_id);
150
115
  if (crypto) {
151
116
  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
- }
117
+ if (msg.body)
118
+ msg.body = await tryDecrypt(crypto, msg.body, "sms.body");
160
119
  }
161
120
  }
162
121
  return messages;
@@ -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":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,UAAU,GAAqB;IAC1C;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,+GAA+G;QACjH,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,iDAAiD;iBAC/D;aACF;YACD,QAAQ,EAAE,EAAE;SACb;QACD,OAAO,EAAE,KAAK,EAAE,MAA+B,EAAE,EAAE,MAAM,EAAE,MAAM,EAAe,EAAE,EAAE;YAClF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAA6B,CAAC,CAAC;YACpF,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,IAAI,MAAM,CAAC,OAAO;wBAAE,MAAM,CAAC,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;oBAC/F,IAAI,MAAM,CAAC,OAAO;wBAAE,MAAM,CAAC,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;gBACjG,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,6FAA6F;QAC/F,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,uDAAuD;iBACrE;aACF;YACD,QAAQ,EAAE,EAAE;SACb;QACD,OAAO,EAAE,KAAK,EAAE,MAA+B,EAAE,EAAE,MAAM,EAAE,MAAM,EAAe,EAAE,EAAE;YAClF,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,oBAAoB,CACrD,MAAM,CAAC,MAA6B,CACrC,CAAC;YACF,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;oBACjC,IAAI,IAAI,CAAC,OAAO;wBAAE,IAAI,CAAC,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBACzF,CAAC;YACH,CAAC;YACD,OAAO,aAAa,CAAC;QACvB,CAAC;KACF;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,uFAAuF;QACzF,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6BAA6B;iBAC3C;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;QACD,OAAO,EAAE,KAAK,EAAE,MAA+B,EAAE,EAAE,MAAM,EAAE,MAAM,EAAe,EAAE,EAAE;YAClF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAmB,CAAC,CAAC;YACzE,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;oBAC3B,IAAI,GAAG,CAAC,OAAO;wBAAE,GAAG,CAAC,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;oBACtF,IAAI,GAAG,CAAC,YAAY;wBAAE,GAAG,CAAC,YAAY,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;oBAC1G,IAAI,GAAG,CAAC,YAAY;wBAAE,GAAG,CAAC,YAAY,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;gBAC5G,CAAC;YACH,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,0EAA0E;QAC5E,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,eAAe,EAAE;oBACf,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4CAA4C;iBAC1D;aACF;YACD,QAAQ,EAAE,CAAC,iBAAiB,CAAC;SAC9B;QACD,OAAO,EAAE,KAAK,EAAE,MAA+B,EAAE,EAAE,MAAM,EAAE,MAAM,EAAe,EAAE,EAAE;YAClF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,eAAyB,CAAC,CAAC;YAChF,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;oBAC3B,IAAI,GAAG,CAAC,IAAI;wBAAE,GAAG,CAAC,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF;CACF,CAAC"}
@@ -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;AAGjE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;AAI5C,0EAA0E;AAC1E,eAAO,MAAM,aAAa,EAAE,cAAc,EAkIzC,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,EAkHzC,CAAC"}
@@ -12,6 +12,7 @@
12
12
  *
13
13
  * @module tools/passwords
14
14
  */
15
+ import { tryDecrypt } from "../utils.js";
15
16
  // ─── Password Tools ─────────────────────────────────────────────────────────
16
17
  /** Tools for managing website credentials (list, get, create, delete). */
17
18
  export const passwordTools = [
@@ -25,31 +26,18 @@ export const passwordTools = [
25
26
  },
26
27
  handler: async (_params, { client, crypto }) => {
27
28
  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
- }
29
+ // Never expose passwords in list view — only in detail view.
30
+ // Build new objects to avoid mutating the API response.
31
+ return Promise.all(entries.map(async (entry) => {
32
+ const result = { ...entry, password: "[hidden]" };
33
+ if (crypto) {
34
+ if (entry.username)
35
+ result.username = await tryDecrypt(crypto, entry.username, "password.username");
36
+ if (entry.notes)
37
+ result.notes = await tryDecrypt(crypto, entry.notes, "password.notes");
46
38
  }
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;
39
+ return result;
40
+ }));
53
41
  },
54
42
  },
55
43
  {
@@ -68,30 +56,12 @@ export const passwordTools = [
68
56
  handler: async (params, { client, crypto }) => {
69
57
  const entry = await client.getPassword(params.uuid);
70
58
  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
- }
59
+ if (entry.username)
60
+ entry.username = await tryDecrypt(crypto, entry.username, "password.username");
61
+ if (entry.password)
62
+ entry.password = await tryDecrypt(crypto, entry.password, "password.password");
63
+ if (entry.notes)
64
+ entry.notes = await tryDecrypt(crypto, entry.notes, "password.notes");
95
65
  }
96
66
  return entry;
97
67
  },
@@ -131,13 +101,13 @@ export const passwordTools = [
131
101
  const data = {
132
102
  domain: params.domain,
133
103
  };
134
- if (params.username) {
104
+ if (params.username !== undefined) {
135
105
  data.username = await crypto.encrypt(params.username);
136
106
  }
137
- if (params.password) {
107
+ if (params.password !== undefined) {
138
108
  data.password = await crypto.encrypt(params.password);
139
109
  }
140
- if (params.notes) {
110
+ if (params.notes !== undefined) {
141
111
  data.notes = await crypto.encrypt(params.notes);
142
112
  }
143
113
  return client.createPassword(data);
@@ -1 +1 @@
1
- {"version":3,"file":"passwords.js","sourceRoot":"","sources":["../../src/tools/passwords.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"passwords.js","sourceRoot":"","sources":["../../src/tools/passwords.ts"],"names":[],"mappings":"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"}
@@ -1 +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"}
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;AAIjE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;AAI5C,qEAAqE;AACrE,eAAO,MAAM,UAAU,EAAE,cAAc,EAgFtC,CAAC"}
@@ -8,6 +8,7 @@
8
8
  *
9
9
  * @module tools/vault
10
10
  */
11
+ import { tryDecrypt } from "../utils.js";
11
12
  // ─── Vault Tools ────────────────────────────────────────────────────────────
12
13
  /** Tools for managing secrets in the Ravi vault (list, get, set). */
13
14
  export const vaultTools = [
@@ -26,7 +27,7 @@ export const vaultTools = [
26
27
  },
27
28
  {
28
29
  name: "ravi_vault_get",
29
- description: "Get a secret from the Ravi vault by key. The value is decrypted automatically.",
30
+ description: "Get a secret from the Ravi vault by key. Response includes the secret's UUID, needed for deletion.",
30
31
  parameters: {
31
32
  type: "object",
32
33
  properties: {
@@ -40,12 +41,7 @@ export const vaultTools = [
40
41
  handler: async (params, { client, crypto }) => {
41
42
  const secret = await client.getSecret(params.key);
42
43
  if (crypto && secret.value) {
43
- try {
44
- secret.value = await crypto.decrypt(secret.value);
45
- }
46
- catch {
47
- secret.value = "[decryption failed]";
48
- }
44
+ secret.value = await tryDecrypt(crypto, secret.value, "vault.value");
49
45
  }
50
46
  return secret;
51
47
  },
@@ -80,7 +76,7 @@ export const vaultTools = [
80
76
  },
81
77
  {
82
78
  name: "ravi_vault_delete",
83
- description: "Delete a secret from the Ravi vault by UUID.",
79
+ description: "Delete a secret from the Ravi vault by UUID. Use ravi_vault_get or ravi_vault_list to find the UUID.",
84
80
  parameters: {
85
81
  type: "object",
86
82
  properties: {
@@ -1 +1 @@
1
- {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/tools/vault.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/tools/vault.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -123,15 +123,16 @@ export interface SmsEvent {
123
123
  sender_type: SenderType;
124
124
  created_dt: string;
125
125
  }
126
- /** Configuration shape for the Ravi OpenClaw plugin */
126
+ /**
127
+ * Configuration shape for the Ravi OpenClaw plugin.
128
+ *
129
+ * Auth credentials (tokens, keypair) are stored in ~/.ravi/auth.json
130
+ * (managed by `openclaw ravi login`). The OpenClaw config only needs
131
+ * the identity UUID to scope this agent to a specific Ravi identity.
132
+ */
127
133
  export interface RaviPluginConfig {
128
- /** JWT bearer token for authentication */
129
- token: string;
130
- /** Refresh token for automatic access token renewal */
131
- refreshToken?: string;
132
- /** Identity UUID for scoped operations (from 'openclaw ravi setup') */
133
- identityUuid?: string;
134
- /** User PIN for E2E encryption key derivation */
135
- pin: string;
134
+ /** Identity UUID maps this OpenClaw agent to a Ravi identity.
135
+ * Set in the OpenClaw agent config (each agent binds to one identity). */
136
+ identityUuid: string;
136
137
  }
137
138
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/utils.d.ts CHANGED
@@ -3,9 +3,15 @@
3
3
  *
4
4
  * @module utils
5
5
  */
6
+ import type { CryptoManager } from "./crypto.js";
6
7
  /**
7
8
  * Wraps plain text in HTML for email sending.
8
9
  * Escapes &, <, > and converts newlines to <br> tags.
9
10
  */
10
11
  export declare function wrapInHtml(text: string): string;
12
+ /**
13
+ * Try to decrypt a value, returning a fallback on failure.
14
+ * Logs the first decryption failure to help diagnose wrong-PIN issues.
15
+ */
16
+ export declare function tryDecrypt(crypto: CryptoManager, value: string, context: string): Promise<string>;
11
17
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO/C"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO/C;AAID;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAWjB"}
package/dist/utils.js CHANGED
@@ -15,4 +15,22 @@ export function wrapInHtml(text) {
15
15
  .replace(/\n/g, "<br>");
16
16
  return `<div>${escaped}</div>`;
17
17
  }
18
+ let decryptionWarningLogged = false;
19
+ /**
20
+ * Try to decrypt a value, returning a fallback on failure.
21
+ * Logs the first decryption failure to help diagnose wrong-PIN issues.
22
+ */
23
+ export async function tryDecrypt(crypto, value, context) {
24
+ try {
25
+ return await crypto.decrypt(value);
26
+ }
27
+ catch (err) {
28
+ if (!decryptionWarningLogged) {
29
+ const detail = err instanceof Error ? err.message : String(err);
30
+ console.error(`[ravi] Decryption failed (${context}): ${detail}. Wrong PIN?`);
31
+ decryptionWarningLogged = true;
32
+ }
33
+ return "[decryption failed]";
34
+ }
35
+ }
18
36
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,OAAO,GAAG,IAAI;SACjB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1B,OAAO,QAAQ,OAAO,QAAQ,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,OAAO,GAAG,IAAI;SACjB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1B,OAAO,QAAQ,OAAO,QAAQ,CAAC;AACjC,CAAC;AAED,IAAI,uBAAuB,GAAG,KAAK,CAAC;AAEpC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAqB,EACrB,KAAa,EACb,OAAe;IAEf,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,OAAO,CAAC,KAAK,CAAC,6BAA6B,OAAO,MAAM,MAAM,cAAc,CAAC,CAAC;YAC9E,uBAAuB,GAAG,IAAI,CAAC;QACjC,CAAC;QACD,OAAO,qBAAqB,CAAC;IAC/B,CAAC;AACH,CAAC"}
@@ -5,29 +5,9 @@
5
5
  "configSchema": {
6
6
  "type": "object",
7
7
  "properties": {
8
- "token": {
9
- "type": "string",
10
- "description": "Access token from 'openclaw ravi login'"
11
- },
12
- "refreshToken": {
13
- "type": "string",
14
- "description": "Refresh token for automatic access token renewal"
15
- },
16
- "identityUuid": {
17
- "type": "string",
18
- "description": "Identity UUID for scoped operations (from 'openclaw ravi setup')"
19
- },
20
- "pin": {
21
- "type": "string",
22
- "pattern": "^[0-9]{6}$",
23
- "description": "6-digit E2E encryption PIN"
24
- }
8
+ "identityUuid": { "type": "string" }
25
9
  },
26
- "required": ["token", "pin"]
10
+ "required": ["identityUuid"]
27
11
  },
28
- "uiHints": {
29
- "token": { "label": "Access Token", "sensitive": true },
30
- "refreshToken": { "label": "Refresh Token", "sensitive": true },
31
- "pin": { "label": "E2E PIN", "sensitive": true }
32
- }
12
+ "uiHints": {}
33
13
  }
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
1
  {
2
2
  "name": "@ravi-hq/ravi",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "OpenClaw plugin for Ravi — identity provider for AI agents. Email & SMS channels + full agent toolbox.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "type": "module",
8
+ "bin": {
9
+ "ravi-secrets": "dist/bin/ravi-secrets.js"
10
+ },
8
11
  "scripts": {
9
12
  "build": "bash scripts/build.sh",
10
13
  "build:prod": "RAVI_API_URL=https://ravi.app bash scripts/build.sh",
@@ -50,8 +53,7 @@
50
53
  },
51
54
  "files": [
52
55
  "dist",
53
- "openclaw.plugin.json",
54
- "skills"
56
+ "openclaw.plugin.json"
55
57
  ],
56
58
  "license": "MIT",
57
59
  "repository": {
package/skills/CLAUDE.md DELETED
@@ -1,36 +0,0 @@
1
- # skills/
2
-
3
- Agent-facing skill documentation bundled with the plugin. 8 skills total.
4
-
5
- ## Skills vs Tools
6
-
7
- **Skills** are documentation files (SKILL.md) that teach agents _when_ and _how_ to use tools. **Tools** are executable functions registered with the runtime. Skills reference tools but do not contain executable code.
8
-
9
- ## SKILL.md Format
10
-
11
- Each skill is a directory containing a single `SKILL.md` file with:
12
-
13
- 1. **YAML frontmatter**: `name` and `description` (used for skill discovery and routing)
14
- 2. **Markdown body**: Usage examples, parameter docs, workflow patterns, important notes
15
-
16
- The `description` frontmatter includes negative guidance ("Do NOT use for...") to help agents route to the correct skill.
17
-
18
- ## Skill Inventory
19
-
20
- | Directory | Name | Purpose |
21
- |-----------|------|---------|
22
- | `ravi/` | `ravi` | Overview of all tools and when to use each one |
23
- | `ravi-identity/` | `ravi-identity` | Manage identities (list, create, get info) |
24
- | `ravi-inbox/` | `ravi-inbox` | Read incoming email and SMS (OTPs, verification codes) |
25
- | `ravi-email-send/` | `ravi-email-send` | Compose and reply to emails |
26
- | `ravi-passwords/` | `ravi-passwords` | Store and retrieve website credentials |
27
- | `ravi-vault/` | `ravi-vault` | Store and retrieve key-value secrets (API keys) |
28
- | `ravi-login/` | `ravi-login` | Sign up/login workflows, 2FA, OTP handling |
29
- | `ravi-feedback/` | `ravi-feedback` | Submit feedback, bugs, feature requests |
30
-
31
- ## Distribution
32
-
33
- Skills are distributed through multiple channels from this single repo:
34
- - **skills.sh**: `npx skills add ravi-hq/ravi-skills` reads `skills/*/SKILL.md`
35
- - **Claude Code plugin**: reads `.claude-plugin/plugin.json`
36
- - **ClawdHub**: published individually via CI