@troykelly/openclaw-projects 0.0.1

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 (120) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +389 -0
  3. package/dist/api-client.d.ts +81 -0
  4. package/dist/api-client.d.ts.map +1 -0
  5. package/dist/api-client.js +216 -0
  6. package/dist/api-client.js.map +1 -0
  7. package/dist/cli.d.ts +112 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +233 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/config.d.ts +324 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +287 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/context.d.ts +87 -0
  16. package/dist/context.d.ts.map +1 -0
  17. package/dist/context.js +144 -0
  18. package/dist/context.js.map +1 -0
  19. package/dist/gateway/rpc-methods.d.ts +93 -0
  20. package/dist/gateway/rpc-methods.d.ts.map +1 -0
  21. package/dist/gateway/rpc-methods.js +145 -0
  22. package/dist/gateway/rpc-methods.js.map +1 -0
  23. package/dist/hooks.d.ts +86 -0
  24. package/dist/hooks.d.ts.map +1 -0
  25. package/dist/hooks.js +314 -0
  26. package/dist/hooks.js.map +1 -0
  27. package/dist/index.d.ts +106 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +221 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/logger.d.ts +22 -0
  32. package/dist/logger.d.ts.map +1 -0
  33. package/dist/logger.js +78 -0
  34. package/dist/logger.js.map +1 -0
  35. package/dist/register-openclaw.d.ts +43 -0
  36. package/dist/register-openclaw.d.ts.map +1 -0
  37. package/dist/register-openclaw.js +1838 -0
  38. package/dist/register-openclaw.js.map +1 -0
  39. package/dist/secrets.d.ts +56 -0
  40. package/dist/secrets.d.ts.map +1 -0
  41. package/dist/secrets.js +161 -0
  42. package/dist/secrets.js.map +1 -0
  43. package/dist/services/notification-service.d.ts +60 -0
  44. package/dist/services/notification-service.d.ts.map +1 -0
  45. package/dist/services/notification-service.js +145 -0
  46. package/dist/services/notification-service.js.map +1 -0
  47. package/dist/tools/contacts.d.ts +139 -0
  48. package/dist/tools/contacts.d.ts.map +1 -0
  49. package/dist/tools/contacts.js +333 -0
  50. package/dist/tools/contacts.js.map +1 -0
  51. package/dist/tools/email-send.d.ts +71 -0
  52. package/dist/tools/email-send.d.ts.map +1 -0
  53. package/dist/tools/email-send.js +132 -0
  54. package/dist/tools/email-send.js.map +1 -0
  55. package/dist/tools/file-share.d.ts +64 -0
  56. package/dist/tools/file-share.d.ts.map +1 -0
  57. package/dist/tools/file-share.js +133 -0
  58. package/dist/tools/file-share.js.map +1 -0
  59. package/dist/tools/index.d.ts +22 -0
  60. package/dist/tools/index.d.ts.map +1 -0
  61. package/dist/tools/index.js +33 -0
  62. package/dist/tools/index.js.map +1 -0
  63. package/dist/tools/memory-forget.d.ts +69 -0
  64. package/dist/tools/memory-forget.d.ts.map +1 -0
  65. package/dist/tools/memory-forget.js +224 -0
  66. package/dist/tools/memory-forget.js.map +1 -0
  67. package/dist/tools/memory-recall.d.ts +82 -0
  68. package/dist/tools/memory-recall.d.ts.map +1 -0
  69. package/dist/tools/memory-recall.js +161 -0
  70. package/dist/tools/memory-recall.js.map +1 -0
  71. package/dist/tools/memory-store.d.ts +80 -0
  72. package/dist/tools/memory-store.d.ts.map +1 -0
  73. package/dist/tools/memory-store.js +172 -0
  74. package/dist/tools/memory-store.js.map +1 -0
  75. package/dist/tools/message-search.d.ts +85 -0
  76. package/dist/tools/message-search.d.ts.map +1 -0
  77. package/dist/tools/message-search.js +137 -0
  78. package/dist/tools/message-search.js.map +1 -0
  79. package/dist/tools/notebooks.d.ts +155 -0
  80. package/dist/tools/notebooks.d.ts.map +1 -0
  81. package/dist/tools/notebooks.js +287 -0
  82. package/dist/tools/notebooks.js.map +1 -0
  83. package/dist/tools/notes.d.ts +272 -0
  84. package/dist/tools/notes.d.ts.map +1 -0
  85. package/dist/tools/notes.js +530 -0
  86. package/dist/tools/notes.js.map +1 -0
  87. package/dist/tools/projects.d.ts +139 -0
  88. package/dist/tools/projects.d.ts.map +1 -0
  89. package/dist/tools/projects.js +280 -0
  90. package/dist/tools/projects.js.map +1 -0
  91. package/dist/tools/relationships.d.ts +133 -0
  92. package/dist/tools/relationships.d.ts.map +1 -0
  93. package/dist/tools/relationships.js +281 -0
  94. package/dist/tools/relationships.js.map +1 -0
  95. package/dist/tools/sms-send.d.ts +62 -0
  96. package/dist/tools/sms-send.d.ts.map +1 -0
  97. package/dist/tools/sms-send.js +121 -0
  98. package/dist/tools/sms-send.js.map +1 -0
  99. package/dist/tools/threads.d.ts +127 -0
  100. package/dist/tools/threads.d.ts.map +1 -0
  101. package/dist/tools/threads.js +202 -0
  102. package/dist/tools/threads.js.map +1 -0
  103. package/dist/tools/todos.d.ts +142 -0
  104. package/dist/tools/todos.d.ts.map +1 -0
  105. package/dist/tools/todos.js +308 -0
  106. package/dist/tools/todos.js.map +1 -0
  107. package/dist/types/openclaw-api.d.ts +215 -0
  108. package/dist/types/openclaw-api.d.ts.map +1 -0
  109. package/dist/types/openclaw-api.js +10 -0
  110. package/dist/types/openclaw-api.js.map +1 -0
  111. package/dist/utils/zod-to-json-schema.d.ts +19 -0
  112. package/dist/utils/zod-to-json-schema.d.ts.map +1 -0
  113. package/dist/utils/zod-to-json-schema.js +132 -0
  114. package/dist/utils/zod-to-json-schema.js.map +1 -0
  115. package/openclaw.plugin.json +229 -0
  116. package/package.json +69 -0
  117. package/skills/contact-lookup/SKILL.md +30 -0
  118. package/skills/daily-summary/SKILL.md +23 -0
  119. package/skills/project-status/SKILL.md +33 -0
  120. package/skills/send-reminder/SKILL.md +42 -0
@@ -0,0 +1,324 @@
1
+ /**
2
+ * Plugin configuration schema using Zod.
3
+ * Validates configuration at runtime to ensure type safety.
4
+ *
5
+ * Supports flexible secret handling with three patterns:
6
+ * 1. Direct value (e.g., apiKey: "sk-xxx")
7
+ * 2. File reference (e.g., apiKeyFile: "~/.secrets/api_key")
8
+ * 3. Command reference (e.g., apiKeyCommand: "op read op://...")
9
+ */
10
+ import { z } from 'zod';
11
+ /** User scoping strategies for memory isolation */
12
+ export declare const UserScopingSchema: z.ZodEnum<["agent", "identity", "session"]>;
13
+ export type UserScoping = z.infer<typeof UserScopingSchema>;
14
+ /**
15
+ * Raw plugin configuration schema (before secret resolution).
16
+ * Accepts direct values, file references, or command references for secrets.
17
+ */
18
+ export declare const RawPluginConfigSchema: z.ZodEffects<z.ZodObject<{
19
+ /** Backend API URL (must be HTTPS in production) */
20
+ apiUrl: z.ZodEffects<z.ZodString, string, string>;
21
+ /** API authentication key (direct value) */
22
+ apiKey: z.ZodOptional<z.ZodString>;
23
+ /** Path to file containing API key */
24
+ apiKeyFile: z.ZodOptional<z.ZodString>;
25
+ /** Command to execute to get API key */
26
+ apiKeyCommand: z.ZodOptional<z.ZodString>;
27
+ /** Twilio Account SID (direct value) */
28
+ twilioAccountSid: z.ZodOptional<z.ZodString>;
29
+ /** Path to file containing Twilio Account SID */
30
+ twilioAccountSidFile: z.ZodOptional<z.ZodString>;
31
+ /** Command to get Twilio Account SID */
32
+ twilioAccountSidCommand: z.ZodOptional<z.ZodString>;
33
+ /** Twilio Auth Token (direct value) */
34
+ twilioAuthToken: z.ZodOptional<z.ZodString>;
35
+ /** Path to file containing Twilio Auth Token */
36
+ twilioAuthTokenFile: z.ZodOptional<z.ZodString>;
37
+ /** Command to get Twilio Auth Token */
38
+ twilioAuthTokenCommand: z.ZodOptional<z.ZodString>;
39
+ /** Twilio Phone Number (direct value) */
40
+ twilioPhoneNumber: z.ZodOptional<z.ZodString>;
41
+ /** Path to file containing Twilio Phone Number */
42
+ twilioPhoneNumberFile: z.ZodOptional<z.ZodString>;
43
+ /** Command to get Twilio Phone Number */
44
+ twilioPhoneNumberCommand: z.ZodOptional<z.ZodString>;
45
+ /** Postmark API Token (direct value) */
46
+ postmarkToken: z.ZodOptional<z.ZodString>;
47
+ /** Path to file containing Postmark Token */
48
+ postmarkTokenFile: z.ZodOptional<z.ZodString>;
49
+ /** Command to get Postmark Token */
50
+ postmarkTokenCommand: z.ZodOptional<z.ZodString>;
51
+ /** Postmark From Email address (direct value) */
52
+ postmarkFromEmail: z.ZodOptional<z.ZodString>;
53
+ /** Path to file containing Postmark From Email */
54
+ postmarkFromEmailFile: z.ZodOptional<z.ZodString>;
55
+ /** Command to get Postmark From Email */
56
+ postmarkFromEmailCommand: z.ZodOptional<z.ZodString>;
57
+ /** Timeout for secret command execution in milliseconds */
58
+ secretCommandTimeout: z.ZodDefault<z.ZodNumber>;
59
+ /** Automatically recall relevant memories on conversation start */
60
+ autoRecall: z.ZodDefault<z.ZodBoolean>;
61
+ /** Automatically capture important information as memories */
62
+ autoCapture: z.ZodDefault<z.ZodBoolean>;
63
+ /** How to scope user memories */
64
+ userScoping: z.ZodDefault<z.ZodEnum<["agent", "identity", "session"]>>;
65
+ /** Maximum memories to inject in auto-recall */
66
+ maxRecallMemories: z.ZodDefault<z.ZodNumber>;
67
+ /** Minimum relevance score for auto-recall (0-1) */
68
+ minRecallScore: z.ZodDefault<z.ZodNumber>;
69
+ /** Request timeout in milliseconds */
70
+ timeout: z.ZodDefault<z.ZodNumber>;
71
+ /** Maximum retries for failed requests */
72
+ maxRetries: z.ZodDefault<z.ZodNumber>;
73
+ /** Enable debug logging (never logs secrets) */
74
+ debug: z.ZodDefault<z.ZodBoolean>;
75
+ /** Base URL for web app (used for generating note/notebook URLs) */
76
+ baseUrl: z.ZodOptional<z.ZodString>;
77
+ }, "strip", z.ZodTypeAny, {
78
+ apiUrl: string;
79
+ secretCommandTimeout: number;
80
+ autoRecall: boolean;
81
+ autoCapture: boolean;
82
+ userScoping: "agent" | "identity" | "session";
83
+ maxRecallMemories: number;
84
+ minRecallScore: number;
85
+ timeout: number;
86
+ maxRetries: number;
87
+ debug: boolean;
88
+ apiKey?: string | undefined;
89
+ apiKeyFile?: string | undefined;
90
+ apiKeyCommand?: string | undefined;
91
+ twilioAccountSid?: string | undefined;
92
+ twilioAccountSidFile?: string | undefined;
93
+ twilioAccountSidCommand?: string | undefined;
94
+ twilioAuthToken?: string | undefined;
95
+ twilioAuthTokenFile?: string | undefined;
96
+ twilioAuthTokenCommand?: string | undefined;
97
+ twilioPhoneNumber?: string | undefined;
98
+ twilioPhoneNumberFile?: string | undefined;
99
+ twilioPhoneNumberCommand?: string | undefined;
100
+ postmarkToken?: string | undefined;
101
+ postmarkTokenFile?: string | undefined;
102
+ postmarkTokenCommand?: string | undefined;
103
+ postmarkFromEmail?: string | undefined;
104
+ postmarkFromEmailFile?: string | undefined;
105
+ postmarkFromEmailCommand?: string | undefined;
106
+ baseUrl?: string | undefined;
107
+ }, {
108
+ apiUrl: string;
109
+ apiKey?: string | undefined;
110
+ apiKeyFile?: string | undefined;
111
+ apiKeyCommand?: string | undefined;
112
+ twilioAccountSid?: string | undefined;
113
+ twilioAccountSidFile?: string | undefined;
114
+ twilioAccountSidCommand?: string | undefined;
115
+ twilioAuthToken?: string | undefined;
116
+ twilioAuthTokenFile?: string | undefined;
117
+ twilioAuthTokenCommand?: string | undefined;
118
+ twilioPhoneNumber?: string | undefined;
119
+ twilioPhoneNumberFile?: string | undefined;
120
+ twilioPhoneNumberCommand?: string | undefined;
121
+ postmarkToken?: string | undefined;
122
+ postmarkTokenFile?: string | undefined;
123
+ postmarkTokenCommand?: string | undefined;
124
+ postmarkFromEmail?: string | undefined;
125
+ postmarkFromEmailFile?: string | undefined;
126
+ postmarkFromEmailCommand?: string | undefined;
127
+ secretCommandTimeout?: number | undefined;
128
+ autoRecall?: boolean | undefined;
129
+ autoCapture?: boolean | undefined;
130
+ userScoping?: "agent" | "identity" | "session" | undefined;
131
+ maxRecallMemories?: number | undefined;
132
+ minRecallScore?: number | undefined;
133
+ timeout?: number | undefined;
134
+ maxRetries?: number | undefined;
135
+ debug?: boolean | undefined;
136
+ baseUrl?: string | undefined;
137
+ }>, {
138
+ apiUrl: string;
139
+ secretCommandTimeout: number;
140
+ autoRecall: boolean;
141
+ autoCapture: boolean;
142
+ userScoping: "agent" | "identity" | "session";
143
+ maxRecallMemories: number;
144
+ minRecallScore: number;
145
+ timeout: number;
146
+ maxRetries: number;
147
+ debug: boolean;
148
+ apiKey?: string | undefined;
149
+ apiKeyFile?: string | undefined;
150
+ apiKeyCommand?: string | undefined;
151
+ twilioAccountSid?: string | undefined;
152
+ twilioAccountSidFile?: string | undefined;
153
+ twilioAccountSidCommand?: string | undefined;
154
+ twilioAuthToken?: string | undefined;
155
+ twilioAuthTokenFile?: string | undefined;
156
+ twilioAuthTokenCommand?: string | undefined;
157
+ twilioPhoneNumber?: string | undefined;
158
+ twilioPhoneNumberFile?: string | undefined;
159
+ twilioPhoneNumberCommand?: string | undefined;
160
+ postmarkToken?: string | undefined;
161
+ postmarkTokenFile?: string | undefined;
162
+ postmarkTokenCommand?: string | undefined;
163
+ postmarkFromEmail?: string | undefined;
164
+ postmarkFromEmailFile?: string | undefined;
165
+ postmarkFromEmailCommand?: string | undefined;
166
+ baseUrl?: string | undefined;
167
+ }, {
168
+ apiUrl: string;
169
+ apiKey?: string | undefined;
170
+ apiKeyFile?: string | undefined;
171
+ apiKeyCommand?: string | undefined;
172
+ twilioAccountSid?: string | undefined;
173
+ twilioAccountSidFile?: string | undefined;
174
+ twilioAccountSidCommand?: string | undefined;
175
+ twilioAuthToken?: string | undefined;
176
+ twilioAuthTokenFile?: string | undefined;
177
+ twilioAuthTokenCommand?: string | undefined;
178
+ twilioPhoneNumber?: string | undefined;
179
+ twilioPhoneNumberFile?: string | undefined;
180
+ twilioPhoneNumberCommand?: string | undefined;
181
+ postmarkToken?: string | undefined;
182
+ postmarkTokenFile?: string | undefined;
183
+ postmarkTokenCommand?: string | undefined;
184
+ postmarkFromEmail?: string | undefined;
185
+ postmarkFromEmailFile?: string | undefined;
186
+ postmarkFromEmailCommand?: string | undefined;
187
+ secretCommandTimeout?: number | undefined;
188
+ autoRecall?: boolean | undefined;
189
+ autoCapture?: boolean | undefined;
190
+ userScoping?: "agent" | "identity" | "session" | undefined;
191
+ maxRecallMemories?: number | undefined;
192
+ minRecallScore?: number | undefined;
193
+ timeout?: number | undefined;
194
+ maxRetries?: number | undefined;
195
+ debug?: boolean | undefined;
196
+ baseUrl?: string | undefined;
197
+ }>;
198
+ export type RawPluginConfig = z.infer<typeof RawPluginConfigSchema>;
199
+ /**
200
+ * Resolved plugin configuration (after secret resolution).
201
+ * Contains the actual secret values ready for use.
202
+ */
203
+ export declare const PluginConfigSchema: z.ZodObject<{
204
+ /** Backend API URL */
205
+ apiUrl: z.ZodString;
206
+ /** Resolved API authentication key */
207
+ apiKey: z.ZodString;
208
+ /** Resolved Twilio Account SID */
209
+ twilioAccountSid: z.ZodOptional<z.ZodString>;
210
+ /** Resolved Twilio Auth Token */
211
+ twilioAuthToken: z.ZodOptional<z.ZodString>;
212
+ /** Resolved Twilio Phone Number */
213
+ twilioPhoneNumber: z.ZodOptional<z.ZodString>;
214
+ /** Resolved Postmark Token */
215
+ postmarkToken: z.ZodOptional<z.ZodString>;
216
+ /** Resolved Postmark From Email */
217
+ postmarkFromEmail: z.ZodOptional<z.ZodString>;
218
+ /** Secret command timeout */
219
+ secretCommandTimeout: z.ZodDefault<z.ZodNumber>;
220
+ /** Auto-recall memories */
221
+ autoRecall: z.ZodDefault<z.ZodBoolean>;
222
+ /** Auto-capture memories */
223
+ autoCapture: z.ZodDefault<z.ZodBoolean>;
224
+ /** User scoping strategy */
225
+ userScoping: z.ZodDefault<z.ZodEnum<["agent", "identity", "session"]>>;
226
+ /** Maximum memories to inject */
227
+ maxRecallMemories: z.ZodDefault<z.ZodNumber>;
228
+ /** Minimum relevance score */
229
+ minRecallScore: z.ZodDefault<z.ZodNumber>;
230
+ /** Request timeout in ms */
231
+ timeout: z.ZodDefault<z.ZodNumber>;
232
+ /** Maximum retries */
233
+ maxRetries: z.ZodDefault<z.ZodNumber>;
234
+ /** Enable debug logging */
235
+ debug: z.ZodDefault<z.ZodBoolean>;
236
+ /** Base URL for web app */
237
+ baseUrl: z.ZodOptional<z.ZodString>;
238
+ }, "strip", z.ZodTypeAny, {
239
+ apiUrl: string;
240
+ apiKey: string;
241
+ secretCommandTimeout: number;
242
+ autoRecall: boolean;
243
+ autoCapture: boolean;
244
+ userScoping: "agent" | "identity" | "session";
245
+ maxRecallMemories: number;
246
+ minRecallScore: number;
247
+ timeout: number;
248
+ maxRetries: number;
249
+ debug: boolean;
250
+ twilioAccountSid?: string | undefined;
251
+ twilioAuthToken?: string | undefined;
252
+ twilioPhoneNumber?: string | undefined;
253
+ postmarkToken?: string | undefined;
254
+ postmarkFromEmail?: string | undefined;
255
+ baseUrl?: string | undefined;
256
+ }, {
257
+ apiUrl: string;
258
+ apiKey: string;
259
+ twilioAccountSid?: string | undefined;
260
+ twilioAuthToken?: string | undefined;
261
+ twilioPhoneNumber?: string | undefined;
262
+ postmarkToken?: string | undefined;
263
+ postmarkFromEmail?: string | undefined;
264
+ secretCommandTimeout?: number | undefined;
265
+ autoRecall?: boolean | undefined;
266
+ autoCapture?: boolean | undefined;
267
+ userScoping?: "agent" | "identity" | "session" | undefined;
268
+ maxRecallMemories?: number | undefined;
269
+ minRecallScore?: number | undefined;
270
+ timeout?: number | undefined;
271
+ maxRetries?: number | undefined;
272
+ debug?: boolean | undefined;
273
+ baseUrl?: string | undefined;
274
+ }>;
275
+ export type PluginConfig = z.infer<typeof PluginConfigSchema>;
276
+ /**
277
+ * Validates raw plugin configuration (before secret resolution).
278
+ * Use this for initial config validation before resolving secrets.
279
+ * Throws a ZodError if validation fails.
280
+ */
281
+ export declare function validateRawConfig(config: unknown): RawPluginConfig;
282
+ /**
283
+ * Safely validates raw configuration without throwing.
284
+ * Returns a result object with either the validated config or errors.
285
+ */
286
+ export declare function safeValidateRawConfig(config: unknown): {
287
+ success: true;
288
+ data: RawPluginConfig;
289
+ } | {
290
+ success: false;
291
+ errors: z.ZodIssue[];
292
+ };
293
+ /**
294
+ * Validates resolved plugin configuration (after secret resolution).
295
+ * Throws a ZodError if validation fails.
296
+ */
297
+ export declare function validateConfig(config: unknown): PluginConfig;
298
+ /**
299
+ * Safely validates resolved configuration without throwing.
300
+ * Returns a result object with either the validated config or errors.
301
+ *
302
+ * Note: This validates raw config for backwards compatibility.
303
+ * Use safeValidateRawConfig for explicit raw config validation.
304
+ */
305
+ export declare function safeValidateConfig(config: unknown): {
306
+ success: true;
307
+ data: RawPluginConfig;
308
+ } | {
309
+ success: false;
310
+ errors: z.ZodIssue[];
311
+ };
312
+ /**
313
+ * Create a safe-to-log version of config with secrets redacted.
314
+ */
315
+ export declare function redactConfig(config: PluginConfig): PluginConfig;
316
+ /**
317
+ * Resolves all secrets in a raw config to produce a resolved config.
318
+ *
319
+ * @param rawConfig - The raw plugin configuration with secret references
320
+ * @returns The resolved plugin configuration with actual secret values
321
+ * @throws If required secrets cannot be resolved
322
+ */
323
+ export declare function resolveConfigSecrets(rawConfig: RawPluginConfig): Promise<PluginConfig>;
324
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,mDAAmD;AACnD,eAAO,MAAM,iBAAiB,6CAA2C,CAAA;AACzE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAS3D;;;GAGG;AACH,eAAO,MAAM,qBAAqB;IAE9B,oDAAoD;;IAUpD,4CAA4C;;IAE5C,sCAAsC;;IAEtC,wCAAwC;;IAIxC,wCAAwC;;IAExC,iDAAiD;;IAEjD,wCAAwC;;IAIxC,uCAAuC;;IAEvC,gDAAgD;;IAEhD,uCAAuC;;IAIvC,yCAAyC;;IAEzC,kDAAkD;;IAElD,yCAAyC;;IAIzC,wCAAwC;;IAExC,6CAA6C;;IAE7C,oCAAoC;;IAIpC,iDAAiD;;IAEjD,kDAAkD;;IAElD,yCAAyC;;IAGzC,2DAA2D;;IAS3D,mEAAmE;;IAGnE,8DAA8D;;IAG9D,iCAAiC;;IAGjC,gDAAgD;;IAShD,oDAAoD;;IAQpD,sCAAsC;;IAStC,0CAA0C;;IAS1C,gDAAgD;;IAGhD,oEAAoE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASrE,CAAA;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE;;;GAGG;AACH,eAAO,MAAM,kBAAkB;IAC7B,sBAAsB;;IAGtB,sCAAsC;;IAGtC,kCAAkC;;IAGlC,iCAAiC;;IAGjC,mCAAmC;;IAGnC,8BAA8B;;IAG9B,mCAAmC;;IAGnC,6BAA6B;;IAG7B,2BAA2B;;IAG3B,4BAA4B;;IAG5B,4BAA4B;;IAG5B,iCAAiC;;IAGjC,8BAA8B;;IAG9B,4BAA4B;;IAG5B,sBAAsB;;IAGtB,2BAA2B;;IAG3B,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAE3B,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAE7D;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe,CAElE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,GACd;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;CAAE,CAMrF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,GACd;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;CAAE,CAErF;AAWD;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAS/D;AAsBD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CA6C5F"}
package/dist/config.js ADDED
@@ -0,0 +1,287 @@
1
+ /**
2
+ * Plugin configuration schema using Zod.
3
+ * Validates configuration at runtime to ensure type safety.
4
+ *
5
+ * Supports flexible secret handling with three patterns:
6
+ * 1. Direct value (e.g., apiKey: "sk-xxx")
7
+ * 2. File reference (e.g., apiKeyFile: "~/.secrets/api_key")
8
+ * 3. Command reference (e.g., apiKeyCommand: "op read op://...")
9
+ */
10
+ import { z } from 'zod';
11
+ import { resolveSecret } from './secrets.js';
12
+ /** User scoping strategies for memory isolation */
13
+ export const UserScopingSchema = z.enum(['agent', 'identity', 'session']);
14
+ /**
15
+ * Checks if running in production mode.
16
+ */
17
+ function isProduction() {
18
+ return process.env.NODE_ENV === 'production';
19
+ }
20
+ /**
21
+ * Raw plugin configuration schema (before secret resolution).
22
+ * Accepts direct values, file references, or command references for secrets.
23
+ */
24
+ export const RawPluginConfigSchema = z
25
+ .object({
26
+ /** Backend API URL (must be HTTPS in production) */
27
+ apiUrl: z
28
+ .string()
29
+ .url('apiUrl must be a valid URL')
30
+ .refine((url) => url.startsWith('https://') || !isProduction(), {
31
+ message: 'apiUrl must use HTTPS in production',
32
+ })
33
+ .describe('Backend API URL'),
34
+ // API Key - supports three patterns
35
+ /** API authentication key (direct value) */
36
+ apiKey: z.string().min(1).optional().describe('API key (direct value)'),
37
+ /** Path to file containing API key */
38
+ apiKeyFile: z.string().optional().describe('Path to API key file'),
39
+ /** Command to execute to get API key */
40
+ apiKeyCommand: z.string().optional().describe('Command to get API key'),
41
+ // Twilio Account SID
42
+ /** Twilio Account SID (direct value) */
43
+ twilioAccountSid: z.string().optional().describe('Twilio Account SID'),
44
+ /** Path to file containing Twilio Account SID */
45
+ twilioAccountSidFile: z.string().optional().describe('Path to Twilio Account SID file'),
46
+ /** Command to get Twilio Account SID */
47
+ twilioAccountSidCommand: z.string().optional().describe('Command to get Twilio Account SID'),
48
+ // Twilio Auth Token
49
+ /** Twilio Auth Token (direct value) */
50
+ twilioAuthToken: z.string().optional().describe('Twilio Auth Token'),
51
+ /** Path to file containing Twilio Auth Token */
52
+ twilioAuthTokenFile: z.string().optional().describe('Path to Twilio Auth Token file'),
53
+ /** Command to get Twilio Auth Token */
54
+ twilioAuthTokenCommand: z.string().optional().describe('Command to get Twilio Auth Token'),
55
+ // Twilio Phone Number
56
+ /** Twilio Phone Number (direct value) */
57
+ twilioPhoneNumber: z.string().optional().describe('Twilio Phone Number'),
58
+ /** Path to file containing Twilio Phone Number */
59
+ twilioPhoneNumberFile: z.string().optional().describe('Path to Twilio Phone Number file'),
60
+ /** Command to get Twilio Phone Number */
61
+ twilioPhoneNumberCommand: z.string().optional().describe('Command to get Twilio Phone Number'),
62
+ // Postmark Token
63
+ /** Postmark API Token (direct value) */
64
+ postmarkToken: z.string().optional().describe('Postmark Token'),
65
+ /** Path to file containing Postmark Token */
66
+ postmarkTokenFile: z.string().optional().describe('Path to Postmark Token file'),
67
+ /** Command to get Postmark Token */
68
+ postmarkTokenCommand: z.string().optional().describe('Command to get Postmark Token'),
69
+ // Postmark From Email
70
+ /** Postmark From Email address (direct value) */
71
+ postmarkFromEmail: z.string().email().optional().describe('Postmark From Email'),
72
+ /** Path to file containing Postmark From Email */
73
+ postmarkFromEmailFile: z.string().optional().describe('Path to Postmark From Email file'),
74
+ /** Command to get Postmark From Email */
75
+ postmarkFromEmailCommand: z.string().optional().describe('Command to get Postmark From Email'),
76
+ /** Timeout for secret command execution in milliseconds */
77
+ secretCommandTimeout: z
78
+ .number()
79
+ .int()
80
+ .min(1000, 'secretCommandTimeout must be at least 1000ms')
81
+ .max(30000, 'secretCommandTimeout must be at most 30000ms')
82
+ .default(5000)
83
+ .describe('Secret command timeout in ms'),
84
+ /** Automatically recall relevant memories on conversation start */
85
+ autoRecall: z.boolean().default(true).describe('Auto-recall memories'),
86
+ /** Automatically capture important information as memories */
87
+ autoCapture: z.boolean().default(true).describe('Auto-capture memories'),
88
+ /** How to scope user memories */
89
+ userScoping: UserScopingSchema.default('agent').describe('User scoping strategy'),
90
+ /** Maximum memories to inject in auto-recall */
91
+ maxRecallMemories: z
92
+ .number()
93
+ .int()
94
+ .min(1, 'maxRecallMemories must be at least 1')
95
+ .max(20, 'maxRecallMemories must be at most 20')
96
+ .default(5)
97
+ .describe('Maximum memories to inject'),
98
+ /** Minimum relevance score for auto-recall (0-1) */
99
+ minRecallScore: z
100
+ .number()
101
+ .min(0, 'minRecallScore must be at least 0')
102
+ .max(1, 'minRecallScore must be at most 1')
103
+ .default(0.7)
104
+ .describe('Minimum relevance score'),
105
+ /** Request timeout in milliseconds */
106
+ timeout: z
107
+ .number()
108
+ .int()
109
+ .min(1000, 'timeout must be at least 1000ms')
110
+ .max(60000, 'timeout must be at most 60000ms')
111
+ .default(30000)
112
+ .describe('Request timeout in ms'),
113
+ /** Maximum retries for failed requests */
114
+ maxRetries: z
115
+ .number()
116
+ .int()
117
+ .min(0, 'maxRetries must be at least 0')
118
+ .max(5, 'maxRetries must be at most 5')
119
+ .default(3)
120
+ .describe('Maximum retries'),
121
+ /** Enable debug logging (never logs secrets) */
122
+ debug: z.boolean().default(false).describe('Enable debug logging'),
123
+ /** Base URL for web app (used for generating note/notebook URLs) */
124
+ baseUrl: z.string().url().optional().describe('Web app base URL'),
125
+ })
126
+ .refine((data) => data.apiKey || data.apiKeyFile || data.apiKeyCommand, {
127
+ message: 'At least one of apiKey, apiKeyFile, or apiKeyCommand is required',
128
+ path: ['apiKey'],
129
+ });
130
+ /**
131
+ * Resolved plugin configuration (after secret resolution).
132
+ * Contains the actual secret values ready for use.
133
+ */
134
+ export const PluginConfigSchema = z.object({
135
+ /** Backend API URL */
136
+ apiUrl: z.string().url(),
137
+ /** Resolved API authentication key */
138
+ apiKey: z.string().min(1),
139
+ /** Resolved Twilio Account SID */
140
+ twilioAccountSid: z.string().optional(),
141
+ /** Resolved Twilio Auth Token */
142
+ twilioAuthToken: z.string().optional(),
143
+ /** Resolved Twilio Phone Number */
144
+ twilioPhoneNumber: z.string().optional(),
145
+ /** Resolved Postmark Token */
146
+ postmarkToken: z.string().optional(),
147
+ /** Resolved Postmark From Email */
148
+ postmarkFromEmail: z.string().email().optional(),
149
+ /** Secret command timeout */
150
+ secretCommandTimeout: z.number().int().default(5000),
151
+ /** Auto-recall memories */
152
+ autoRecall: z.boolean().default(true),
153
+ /** Auto-capture memories */
154
+ autoCapture: z.boolean().default(true),
155
+ /** User scoping strategy */
156
+ userScoping: UserScopingSchema.default('agent'),
157
+ /** Maximum memories to inject */
158
+ maxRecallMemories: z.number().int().default(5),
159
+ /** Minimum relevance score */
160
+ minRecallScore: z.number().default(0.7),
161
+ /** Request timeout in ms */
162
+ timeout: z.number().int().default(30000),
163
+ /** Maximum retries */
164
+ maxRetries: z.number().int().default(3),
165
+ /** Enable debug logging */
166
+ debug: z.boolean().default(false),
167
+ /** Base URL for web app */
168
+ baseUrl: z.string().url().optional(),
169
+ });
170
+ /**
171
+ * Validates raw plugin configuration (before secret resolution).
172
+ * Use this for initial config validation before resolving secrets.
173
+ * Throws a ZodError if validation fails.
174
+ */
175
+ export function validateRawConfig(config) {
176
+ return RawPluginConfigSchema.parse(config);
177
+ }
178
+ /**
179
+ * Safely validates raw configuration without throwing.
180
+ * Returns a result object with either the validated config or errors.
181
+ */
182
+ export function safeValidateRawConfig(config) {
183
+ const result = RawPluginConfigSchema.safeParse(config);
184
+ if (result.success) {
185
+ return { success: true, data: result.data };
186
+ }
187
+ return { success: false, errors: result.error.issues };
188
+ }
189
+ /**
190
+ * Validates resolved plugin configuration (after secret resolution).
191
+ * Throws a ZodError if validation fails.
192
+ */
193
+ export function validateConfig(config) {
194
+ return PluginConfigSchema.parse(config);
195
+ }
196
+ /**
197
+ * Safely validates resolved configuration without throwing.
198
+ * Returns a result object with either the validated config or errors.
199
+ *
200
+ * Note: This validates raw config for backwards compatibility.
201
+ * Use safeValidateRawConfig for explicit raw config validation.
202
+ */
203
+ export function safeValidateConfig(config) {
204
+ return safeValidateRawConfig(config);
205
+ }
206
+ /** Secret fields that should be redacted in logs */
207
+ const SECRET_FIELDS = [
208
+ 'apiKey',
209
+ 'twilioAccountSid',
210
+ 'twilioAuthToken',
211
+ 'twilioPhoneNumber',
212
+ 'postmarkToken',
213
+ ];
214
+ /**
215
+ * Create a safe-to-log version of config with secrets redacted.
216
+ */
217
+ export function redactConfig(config) {
218
+ const redacted = { ...config };
219
+ for (const field of SECRET_FIELDS) {
220
+ if (redacted[field]) {
221
+ // Type assertion needed because we're setting string fields to '[REDACTED]'
222
+ ;
223
+ redacted[field] = '[REDACTED]';
224
+ }
225
+ }
226
+ return redacted;
227
+ }
228
+ /**
229
+ * Builds a SecretConfig from the raw config for a given secret name.
230
+ */
231
+ function buildSecretConfig(rawConfig, secretName, timeout) {
232
+ const direct = rawConfig[secretName];
233
+ const file = rawConfig[`${secretName}File`];
234
+ const command = rawConfig[`${secretName}Command`];
235
+ return {
236
+ direct,
237
+ file,
238
+ command,
239
+ commandTimeout: timeout,
240
+ };
241
+ }
242
+ /**
243
+ * Resolves all secrets in a raw config to produce a resolved config.
244
+ *
245
+ * @param rawConfig - The raw plugin configuration with secret references
246
+ * @returns The resolved plugin configuration with actual secret values
247
+ * @throws If required secrets cannot be resolved
248
+ */
249
+ export async function resolveConfigSecrets(rawConfig) {
250
+ const timeout = rawConfig.secretCommandTimeout;
251
+ // Resolve API key (required)
252
+ const apiKey = await resolveSecret(buildSecretConfig(rawConfig, 'apiKey', timeout), 'apiKey');
253
+ if (!apiKey) {
254
+ throw new Error('Failed to resolve API key from config');
255
+ }
256
+ // Resolve optional secrets in parallel
257
+ const [twilioAccountSid, twilioAuthToken, twilioPhoneNumber, postmarkToken, postmarkFromEmail] = await Promise.all([
258
+ resolveSecret(buildSecretConfig(rawConfig, 'twilioAccountSid', timeout), 'twilioAccountSid'),
259
+ resolveSecret(buildSecretConfig(rawConfig, 'twilioAuthToken', timeout), 'twilioAuthToken'),
260
+ resolveSecret(buildSecretConfig(rawConfig, 'twilioPhoneNumber', timeout), 'twilioPhoneNumber'),
261
+ resolveSecret(buildSecretConfig(rawConfig, 'postmarkToken', timeout), 'postmarkToken'),
262
+ resolveSecret(buildSecretConfig(rawConfig, 'postmarkFromEmail', timeout), 'postmarkFromEmail'),
263
+ ]);
264
+ // Build the resolved config
265
+ const resolvedConfig = {
266
+ apiUrl: rawConfig.apiUrl,
267
+ apiKey,
268
+ twilioAccountSid,
269
+ twilioAuthToken,
270
+ twilioPhoneNumber,
271
+ postmarkToken,
272
+ postmarkFromEmail,
273
+ secretCommandTimeout: timeout,
274
+ autoRecall: rawConfig.autoRecall,
275
+ autoCapture: rawConfig.autoCapture,
276
+ userScoping: rawConfig.userScoping,
277
+ maxRecallMemories: rawConfig.maxRecallMemories,
278
+ minRecallScore: rawConfig.minRecallScore,
279
+ timeout: rawConfig.timeout,
280
+ maxRetries: rawConfig.maxRetries,
281
+ debug: rawConfig.debug,
282
+ baseUrl: rawConfig.baseUrl,
283
+ };
284
+ // Validate the resolved config
285
+ return validateConfig(resolvedConfig);
286
+ }
287
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}