@troykelly/openclaw-projects 0.0.3 → 0.0.6
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.
- package/README.md +197 -9
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +9 -8
- package/dist/api-client.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +6 -66
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -31
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +1 -5
- package/dist/context.js.map +1 -1
- package/dist/gateway/oauth-rpc-methods.d.ts +119 -0
- package/dist/gateway/oauth-rpc-methods.d.ts.map +1 -0
- package/dist/gateway/oauth-rpc-methods.js +266 -0
- package/dist/gateway/oauth-rpc-methods.js.map +1 -0
- package/dist/gateway/rpc-methods.d.ts +2 -3
- package/dist/gateway/rpc-methods.d.ts.map +1 -1
- package/dist/gateway/rpc-methods.js +1 -7
- package/dist/gateway/rpc-methods.js.map +1 -1
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +11 -14
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +7 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -29
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js.map +1 -1
- package/dist/register-openclaw.d.ts.map +1 -1
- package/dist/register-openclaw.js +87 -43
- package/dist/register-openclaw.js.map +1 -1
- package/dist/secrets.d.ts.map +1 -1
- package/dist/secrets.js +24 -14
- package/dist/secrets.js.map +1 -1
- package/dist/services/notification-service.d.ts.map +1 -1
- package/dist/services/notification-service.js +4 -1
- package/dist/services/notification-service.js.map +1 -1
- package/dist/tools/contacts.d.ts.map +1 -1
- package/dist/tools/contacts.js +9 -34
- package/dist/tools/contacts.js.map +1 -1
- package/dist/tools/email-send.d.ts.map +1 -1
- package/dist/tools/email-send.js +5 -15
- package/dist/tools/email-send.js.map +1 -1
- package/dist/tools/file-share.d.ts.map +1 -1
- package/dist/tools/file-share.js +3 -10
- package/dist/tools/file-share.js.map +1 -1
- package/dist/tools/index.d.ts +1 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/memory-forget.d.ts.map +1 -1
- package/dist/tools/memory-forget.js +14 -24
- package/dist/tools/memory-forget.js.map +1 -1
- package/dist/tools/memory-recall.d.ts.map +1 -1
- package/dist/tools/memory-recall.js +5 -33
- package/dist/tools/memory-recall.js.map +1 -1
- package/dist/tools/memory-store.d.ts +3 -3
- package/dist/tools/memory-store.d.ts.map +1 -1
- package/dist/tools/memory-store.js +12 -56
- package/dist/tools/memory-store.js.map +1 -1
- package/dist/tools/message-search.d.ts.map +1 -1
- package/dist/tools/message-search.js +7 -14
- package/dist/tools/message-search.js.map +1 -1
- package/dist/tools/notebooks.d.ts +4 -4
- package/dist/tools/notebooks.d.ts.map +1 -1
- package/dist/tools/notebooks.js +10 -42
- package/dist/tools/notebooks.js.map +1 -1
- package/dist/tools/notes.d.ts +4 -4
- package/dist/tools/notes.d.ts.map +1 -1
- package/dist/tools/notes.js +15 -65
- package/dist/tools/notes.js.map +1 -1
- package/dist/tools/projects.d.ts.map +1 -1
- package/dist/tools/projects.js +7 -34
- package/dist/tools/projects.js.map +1 -1
- package/dist/tools/relationships.d.ts.map +1 -1
- package/dist/tools/relationships.js +9 -53
- package/dist/tools/relationships.js.map +1 -1
- package/dist/tools/skill-store.d.ts.map +1 -1
- package/dist/tools/skill-store.js +26 -73
- package/dist/tools/skill-store.js.map +1 -1
- package/dist/tools/sms-send.d.ts.map +1 -1
- package/dist/tools/sms-send.js +3 -10
- package/dist/tools/sms-send.js.map +1 -1
- package/dist/tools/threads.d.ts.map +1 -1
- package/dist/tools/threads.js +12 -18
- package/dist/tools/threads.js.map +1 -1
- package/dist/tools/todos.d.ts.map +1 -1
- package/dist/tools/todos.js +6 -30
- package/dist/tools/todos.js.map +1 -1
- package/dist/types/openclaw-api.d.ts +29 -5
- package/dist/types/openclaw-api.d.ts.map +1 -1
- package/dist/types/openclaw-api.js +11 -0
- package/dist/types/openclaw-api.js.map +1 -1
- package/dist/utils/sanitize.d.ts +17 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sanitize.js +36 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/dist/utils/zod-to-json-schema.d.ts.map +1 -1
- package/dist/utils/zod-to-json-schema.js.map +1 -1
- package/openclaw.plugin.json +80 -14
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -4,6 +4,132 @@ An [OpenClaw](https://docs.openclaw.ai/) plugin that connects agents to the open
|
|
|
4
4
|
|
|
5
5
|
> **Note:** This is a third-party plugin — not part of OpenClaw itself. It provides OpenClaw agents with tools to interact with the [openclaw-projects](https://github.com/troykelly/openclaw-projects) backend service.
|
|
6
6
|
|
|
7
|
+
## Quickstart
|
|
8
|
+
|
|
9
|
+
Get from zero to a working plugin in under 5 minutes.
|
|
10
|
+
|
|
11
|
+
### 1. Deploy the backend
|
|
12
|
+
|
|
13
|
+
Clone the repository and run the setup wizard:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
git clone https://github.com/troykelly/openclaw-projects.git
|
|
17
|
+
cd openclaw-projects
|
|
18
|
+
./scripts/setup.sh
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
The setup script generates a `.env` file with random secrets and sensible defaults. For CI or unattended setup, use `./scripts/setup.sh --non-interactive`.
|
|
22
|
+
|
|
23
|
+
### 2. Start services
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
docker compose -f docker-compose.quickstart.yml up -d
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Wait for all services to become healthy (this may take 30-60 seconds on first run):
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
docker compose -f docker-compose.quickstart.yml ps
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Expected output:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
NAME STATUS
|
|
39
|
+
openclaw-qs-db running (healthy)
|
|
40
|
+
openclaw-qs-seaweedfs running (healthy)
|
|
41
|
+
openclaw-qs-migrate exited (0)
|
|
42
|
+
openclaw-qs-api running (healthy)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 3. Verify the API is running
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
curl http://localhost:3000/health
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Expected output:
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{"status":"ok"}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 4. Install the plugin
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
openclaw plugins install @troykelly/openclaw-projects
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 5. Configure the plugin
|
|
64
|
+
|
|
65
|
+
Add to your OpenClaw config (`~/.openclaw/config.yaml`):
|
|
66
|
+
|
|
67
|
+
```yaml
|
|
68
|
+
plugins:
|
|
69
|
+
entries:
|
|
70
|
+
openclaw-projects:
|
|
71
|
+
enabled: true
|
|
72
|
+
config:
|
|
73
|
+
apiUrl: http://localhost:3000
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
The quickstart compose disables authentication by default, so no `apiKey` is needed. When you later switch to a production compose file with auth enabled, add `apiKey` with the `OPENCLAW_PROJECTS_AUTH_SECRET` value from your `.env` file. See [Configuration](#configuration) for details.
|
|
77
|
+
|
|
78
|
+
### 6. Verify the connection
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
openclaw openclaw-projects status
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Expected output when healthy:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
openclaw-projects status:
|
|
88
|
+
API URL: http://localhost:3000
|
|
89
|
+
Status: healthy
|
|
90
|
+
Auth: valid
|
|
91
|
+
Latency: 12ms
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
If the status shows unhealthy, see [Troubleshooting](#troubleshooting) below.
|
|
95
|
+
|
|
96
|
+
### Next steps
|
|
97
|
+
|
|
98
|
+
- See [Configuration](#configuration) for optional settings (embedding providers, SMS, email)
|
|
99
|
+
- See [Tools](#tools) for the 27 available agent tools
|
|
100
|
+
- See [Which compose file?](#which-compose-file) to choose the right deployment for your needs
|
|
101
|
+
- For the detailed installation guide, see [docs/installation.md](docs/installation.md)
|
|
102
|
+
|
|
103
|
+
### Which compose file?
|
|
104
|
+
|
|
105
|
+
| File | Auth | Use case |
|
|
106
|
+
|------|------|----------|
|
|
107
|
+
| `docker-compose.quickstart.yml` | Disabled | Local development and testing (recommended for getting started) |
|
|
108
|
+
| `docker-compose.yml` | Enabled | Basic production deployment without TLS |
|
|
109
|
+
| `docker-compose.traefik.yml` | Enabled | Production with automatic TLS, HTTP/3, and WAF |
|
|
110
|
+
| `docker-compose.full.yml` | Enabled | All services including frontend and optional integrations |
|
|
111
|
+
| `docker-compose.test.yml` | Disabled | CI and automated testing |
|
|
112
|
+
|
|
113
|
+
Start with `docker-compose.quickstart.yml`. When you are ready for production, switch to `docker-compose.yml` or `docker-compose.traefik.yml` and configure your `apiKey` in the plugin config.
|
|
114
|
+
|
|
115
|
+
### Moving to Production
|
|
116
|
+
|
|
117
|
+
When you're ready to move from the quickstart to a production setup:
|
|
118
|
+
|
|
119
|
+
1. Stop the quickstart services: `docker compose -f docker-compose.quickstart.yml down`
|
|
120
|
+
2. Open your `.env` file and find the `OPENCLAW_PROJECTS_AUTH_SECRET` value
|
|
121
|
+
3. Set `OPENCLAW_PROJECTS_AUTH_DISABLED=false` in your `.env`
|
|
122
|
+
4. Add the API key to your OpenClaw plugin config:
|
|
123
|
+
```yaml
|
|
124
|
+
plugins:
|
|
125
|
+
entries:
|
|
126
|
+
openclaw-projects:
|
|
127
|
+
config:
|
|
128
|
+
apiUrl: https://your-domain.example.com
|
|
129
|
+
apiKey: your-OPENCLAW_PROJECTS_AUTH_SECRET-value
|
|
130
|
+
```
|
|
131
|
+
5. Switch to a production compose file: `docker compose -f docker-compose.yml up -d`
|
|
132
|
+
|
|
7
133
|
## Features
|
|
8
134
|
|
|
9
135
|
- **Memory Management**: Store, recall, and forget memories with semantic search (pgvector)
|
|
@@ -53,7 +179,51 @@ After installation, verify the plugin is loaded:
|
|
|
53
179
|
openclaw plugins info openclaw-projects
|
|
54
180
|
```
|
|
55
181
|
|
|
56
|
-
|
|
182
|
+
### Health Check (status command)
|
|
183
|
+
|
|
184
|
+
The plugin includes a built-in health check that verifies API connectivity, authentication, and reports latency:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
openclaw openclaw-projects status
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Healthy output:**
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
openclaw-projects status:
|
|
194
|
+
API URL: http://localhost:3000
|
|
195
|
+
Status: healthy
|
|
196
|
+
Auth: valid
|
|
197
|
+
Latency: 12ms
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Unhealthy output (backend unreachable):**
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
openclaw-projects status:
|
|
204
|
+
API URL: http://localhost:3000
|
|
205
|
+
Status: unhealthy
|
|
206
|
+
Error: Connection refused (ECONNREFUSED)
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Unhealthy output (authentication failure):**
|
|
210
|
+
|
|
211
|
+
```
|
|
212
|
+
openclaw-projects status:
|
|
213
|
+
API URL: http://localhost:3000
|
|
214
|
+
Status: unhealthy
|
|
215
|
+
Auth: invalid (401 Unauthorized)
|
|
216
|
+
Latency: 8ms
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
The status command checks:
|
|
220
|
+
- **API connectivity** -- can the plugin reach the backend URL?
|
|
221
|
+
- **Authentication** -- is the API key valid and accepted?
|
|
222
|
+
- **Response time** -- how long does the health check take (latency in ms)?
|
|
223
|
+
|
|
224
|
+
Use this command as the first diagnostic step when tools fail or behave unexpectedly.
|
|
225
|
+
|
|
226
|
+
You can also use the general plugin doctor command:
|
|
57
227
|
|
|
58
228
|
```bash
|
|
59
229
|
openclaw plugins doctor
|
|
@@ -68,9 +238,10 @@ Configure the plugin in your OpenClaw config file or pass config programmaticall
|
|
|
68
238
|
| Option | Type | Description |
|
|
69
239
|
|--------|------|-------------|
|
|
70
240
|
| `apiUrl` | string | Backend API URL (must be HTTPS in production) |
|
|
71
|
-
| `apiKey` | string | API authentication key (direct value) |
|
|
72
241
|
|
|
73
|
-
|
|
242
|
+
### Authentication (Optional)
|
|
243
|
+
|
|
244
|
+
When your backend has authentication enabled, provide the API key via one of three methods. If your backend has auth disabled (e.g., the quickstart compose), no API key is needed.
|
|
74
245
|
|
|
75
246
|
| Method | Config Key | Description |
|
|
76
247
|
|--------|-----------|-------------|
|
|
@@ -133,9 +304,9 @@ To enable email sending, add Postmark credentials:
|
|
|
133
304
|
|
|
134
305
|
| Mode | Description | Use Case |
|
|
135
306
|
|------|-------------|----------|
|
|
136
|
-
| `agent` | Scope by agent ID
|
|
137
|
-
| `session` | Scope by session key
|
|
138
|
-
| `identity` | Scope by canonical identity |
|
|
307
|
+
| `agent` | Scope by agent ID; single user per agent | Personal assistant (default) |
|
|
308
|
+
| `session` | Scope by session key; maximum isolation | Sensitive operations |
|
|
309
|
+
| `identity` | Scope by canonical user identity across agents and sessions | Multi-agent setups, shared identity |
|
|
139
310
|
|
|
140
311
|
## Tools
|
|
141
312
|
|
|
@@ -288,6 +459,8 @@ When `autoCapture` is enabled (default), the plugin automatically analyzes compl
|
|
|
288
459
|
|
|
289
460
|
## Troubleshooting
|
|
290
461
|
|
|
462
|
+
> **First step for any issue:** Run `openclaw openclaw-projects status` to check connectivity, authentication, and latency. See [Health Check](#health-check-status-command) above for expected output.
|
|
463
|
+
|
|
291
464
|
### Plugin not loading
|
|
292
465
|
|
|
293
466
|
Verify the plugin is installed and the manifest is detected:
|
|
@@ -298,12 +471,26 @@ openclaw plugins info openclaw-projects
|
|
|
298
471
|
|
|
299
472
|
### Connection issues
|
|
300
473
|
|
|
301
|
-
|
|
474
|
+
Run the status command to diagnose:
|
|
302
475
|
|
|
303
476
|
```bash
|
|
304
|
-
openclaw
|
|
477
|
+
openclaw openclaw-projects status
|
|
305
478
|
```
|
|
306
479
|
|
|
480
|
+
If the status shows unhealthy, check:
|
|
481
|
+
- Is the backend running? `curl http://localhost:3000/health`
|
|
482
|
+
- Is the `apiUrl` in your config correct?
|
|
483
|
+
- Are there firewall rules blocking the connection?
|
|
484
|
+
|
|
485
|
+
For detailed troubleshooting, see [docs/troubleshooting.md](docs/troubleshooting.md).
|
|
486
|
+
|
|
487
|
+
### Authentication failures
|
|
488
|
+
|
|
489
|
+
If the status command reports `Auth: invalid`:
|
|
490
|
+
- Verify your `apiKey` matches the `OPENCLAW_PROJECTS_AUTH_SECRET` in the backend `.env`
|
|
491
|
+
- Check the secret retrieval method (file, command) is working
|
|
492
|
+
- If using the quickstart compose, auth is disabled by default (`OPENCLAW_PROJECTS_AUTH_DISABLED=true`). If you have overridden this to `false` (enabling auth), ensure your `apiKey` is correctly configured
|
|
493
|
+
|
|
307
494
|
### No memories found
|
|
308
495
|
|
|
309
496
|
- Verify the user scoping mode matches your setup
|
|
@@ -312,9 +499,10 @@ openclaw plugins doctor
|
|
|
312
499
|
|
|
313
500
|
### API errors
|
|
314
501
|
|
|
315
|
-
-
|
|
502
|
+
- Run `openclaw openclaw-projects status` to verify connectivity
|
|
316
503
|
- Check that the API key is valid
|
|
317
504
|
- Review network connectivity
|
|
505
|
+
- Enable debug logging (`debug: true` in config) for detailed request/response info
|
|
318
506
|
|
|
319
507
|
## Contributing
|
|
320
508
|
|
package/dist/api-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAExD,yBAAyB;AACzB,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,2BAA2B;AAC3B,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE9F,sBAAsB;AACtB,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,yBAAyB;AACzB,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,0BAA0B;AAC1B,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AA+CD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,OAAO,EAAE,gBAAgB;IASrC;;OAEG;YACW,OAAO;IA6DrB;;OAEG;YACW,cAAc;IAoE5B,kBAAkB;IACZ,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAI7E,mBAAmB;IACb,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAI9F,kBAAkB;IACZ,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAI7F,oBAAoB;IACd,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAI/F,qBAAqB;IACf,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAIhF;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;CAYhD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAEpE"}
|
package/dist/api-client.js
CHANGED
|
@@ -21,7 +21,7 @@ function generateRequestId() {
|
|
|
21
21
|
*/
|
|
22
22
|
function calculateRetryDelay(attempt, baseDelay = 1000, maxDelay = 10000) {
|
|
23
23
|
// Exponential backoff: 1s, 2s, 4s, 8s...
|
|
24
|
-
const exponentialDelay = baseDelay *
|
|
24
|
+
const exponentialDelay = baseDelay * 2 ** attempt;
|
|
25
25
|
// Add jitter (±25%) to prevent thundering herd
|
|
26
26
|
const jitter = exponentialDelay * (0.75 + Math.random() * 0.5);
|
|
27
27
|
return Math.min(jitter, maxDelay);
|
|
@@ -30,8 +30,8 @@ function calculateRetryDelay(attempt, baseDelay = 1000, maxDelay = 10000) {
|
|
|
30
30
|
* Check if an error is retryable.
|
|
31
31
|
*/
|
|
32
32
|
function isRetryableStatus(status) {
|
|
33
|
-
// Retry on 5xx server errors and network errors (status 0)
|
|
34
|
-
return status === 0 || (status >= 500 && status < 600);
|
|
33
|
+
// Retry on 5xx server errors, 429 rate-limited, and network errors (status 0)
|
|
34
|
+
return status === 0 || status === 429 || (status >= 500 && status < 600);
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
37
|
* Map HTTP status to error code.
|
|
@@ -76,7 +76,8 @@ export class ApiClient {
|
|
|
76
76
|
let lastError = null;
|
|
77
77
|
for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
|
|
78
78
|
if (attempt > 0) {
|
|
79
|
-
|
|
79
|
+
// For 429 responses, prefer the server-specified Retry-After delay
|
|
80
|
+
const delay = lastError?.status === 429 && lastError.retryAfter ? lastError.retryAfter * 1000 : calculateRetryDelay(attempt - 1);
|
|
80
81
|
this.logger.debug(`Retrying request (attempt ${attempt + 1}/${this.maxRetries + 1})`, {
|
|
81
82
|
path,
|
|
82
83
|
delay,
|
|
@@ -89,7 +90,6 @@ export class ApiClient {
|
|
|
89
90
|
return result;
|
|
90
91
|
}
|
|
91
92
|
lastError = result.error;
|
|
92
|
-
// Don't retry 4xx errors (except we could retry 429, but typically you'd wait for Retry-After)
|
|
93
93
|
if (!isRetryableStatus(result.error.status)) {
|
|
94
94
|
return result;
|
|
95
95
|
}
|
|
@@ -109,7 +109,6 @@ export class ApiClient {
|
|
|
109
109
|
});
|
|
110
110
|
// Network errors are retryable
|
|
111
111
|
if (attempt < this.maxRetries) {
|
|
112
|
-
continue;
|
|
113
112
|
}
|
|
114
113
|
}
|
|
115
114
|
}
|
|
@@ -130,10 +129,12 @@ export class ApiClient {
|
|
|
130
129
|
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
131
130
|
try {
|
|
132
131
|
const headers = {
|
|
133
|
-
Authorization: `Bearer ${this.apiKey}`,
|
|
134
132
|
'Content-Type': 'application/json',
|
|
135
133
|
'X-Request-Id': requestId,
|
|
136
134
|
};
|
|
135
|
+
if (this.apiKey) {
|
|
136
|
+
headers.Authorization = `Bearer ${this.apiKey}`;
|
|
137
|
+
}
|
|
137
138
|
if (options?.userId) {
|
|
138
139
|
headers['X-Agent-Id'] = options.userId;
|
|
139
140
|
}
|
|
@@ -158,7 +159,7 @@ export class ApiClient {
|
|
|
158
159
|
message: errorBody.message || response.statusText,
|
|
159
160
|
code: getErrorCode(response.status),
|
|
160
161
|
details: errorBody.details,
|
|
161
|
-
retryAfter: retryAfter ? parseInt(retryAfter, 10) : undefined,
|
|
162
|
+
retryAfter: retryAfter ? Number.parseInt(retryAfter, 10) : undefined,
|
|
162
163
|
},
|
|
163
164
|
};
|
|
164
165
|
}
|
package/dist/api-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAe,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,uCAAuC;AACvC,MAAM,oBAAoB,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export type UserScoping = z.infer<typeof UserScopingSchema>;
|
|
|
15
15
|
* Raw plugin configuration schema (before secret resolution).
|
|
16
16
|
* Accepts direct values, file references, or command references for secrets.
|
|
17
17
|
*/
|
|
18
|
-
export declare const RawPluginConfigSchema: z.
|
|
18
|
+
export declare const RawPluginConfigSchema: z.ZodObject<{
|
|
19
19
|
/** Backend API URL (must be HTTPS in production) */
|
|
20
20
|
apiUrl: z.ZodEffects<z.ZodString, string, string>;
|
|
21
21
|
/** API authentication key (direct value) */
|
|
@@ -74,67 +74,7 @@ export declare const RawPluginConfigSchema: z.ZodEffects<z.ZodObject<{
|
|
|
74
74
|
debug: z.ZodDefault<z.ZodBoolean>;
|
|
75
75
|
/** Base URL for web app (used for generating note/notebook URLs) */
|
|
76
76
|
baseUrl: z.ZodOptional<z.ZodString>;
|
|
77
|
-
}, "
|
|
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
|
-
}>, {
|
|
77
|
+
}, "strict", z.ZodTypeAny, {
|
|
138
78
|
apiUrl: string;
|
|
139
79
|
secretCommandTimeout: number;
|
|
140
80
|
autoRecall: boolean;
|
|
@@ -203,8 +143,8 @@ export type RawPluginConfig = z.infer<typeof RawPluginConfigSchema>;
|
|
|
203
143
|
export declare const PluginConfigSchema: z.ZodObject<{
|
|
204
144
|
/** Backend API URL */
|
|
205
145
|
apiUrl: z.ZodString;
|
|
206
|
-
/** Resolved API authentication key */
|
|
207
|
-
apiKey: z.ZodString
|
|
146
|
+
/** Resolved API authentication key (optional for auth-disabled backends) */
|
|
147
|
+
apiKey: z.ZodOptional<z.ZodString>;
|
|
208
148
|
/** Resolved Twilio Account SID */
|
|
209
149
|
twilioAccountSid: z.ZodOptional<z.ZodString>;
|
|
210
150
|
/** Resolved Twilio Auth Token */
|
|
@@ -237,7 +177,6 @@ export declare const PluginConfigSchema: z.ZodObject<{
|
|
|
237
177
|
baseUrl: z.ZodOptional<z.ZodString>;
|
|
238
178
|
}, "strip", z.ZodTypeAny, {
|
|
239
179
|
apiUrl: string;
|
|
240
|
-
apiKey: string;
|
|
241
180
|
secretCommandTimeout: number;
|
|
242
181
|
autoRecall: boolean;
|
|
243
182
|
autoCapture: boolean;
|
|
@@ -247,6 +186,7 @@ export declare const PluginConfigSchema: z.ZodObject<{
|
|
|
247
186
|
timeout: number;
|
|
248
187
|
maxRetries: number;
|
|
249
188
|
debug: boolean;
|
|
189
|
+
apiKey?: string | undefined;
|
|
250
190
|
twilioAccountSid?: string | undefined;
|
|
251
191
|
twilioAuthToken?: string | undefined;
|
|
252
192
|
twilioPhoneNumber?: string | undefined;
|
|
@@ -255,7 +195,7 @@ export declare const PluginConfigSchema: z.ZodObject<{
|
|
|
255
195
|
baseUrl?: string | undefined;
|
|
256
196
|
}, {
|
|
257
197
|
apiUrl: string;
|
|
258
|
-
apiKey
|
|
198
|
+
apiKey?: string | undefined;
|
|
259
199
|
twilioAccountSid?: string | undefined;
|
|
260
200
|
twilioAuthToken?: string | undefined;
|
|
261
201
|
twilioPhoneNumber?: string | undefined;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,mDAAmD;AACnD,eAAO,MAAM,iBAAiB,6CAA2C,CAAC;AAC1E,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAS5D;;;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;;IAG1C,gDAAgD;;IAGhD,oEAAoE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG7D,CAAC;AAEZ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,kBAAkB;IAC7B,sBAAsB;;IAGtB,4EAA4E;;IAG5E,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,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe,CAElE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG;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,CAM1I;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG;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,CAEvI;AAKD;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAS/D;AAkBD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAsC5F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,eAAe,GAAG,YAAY,CAoCjF"}
|
package/dist/config.js
CHANGED
|
@@ -111,22 +111,13 @@ export const RawPluginConfigSchema = z
|
|
|
111
111
|
.default(30000)
|
|
112
112
|
.describe('Request timeout in ms'),
|
|
113
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'),
|
|
114
|
+
maxRetries: z.number().int().min(0, 'maxRetries must be at least 0').max(5, 'maxRetries must be at most 5').default(3).describe('Maximum retries'),
|
|
121
115
|
/** Enable debug logging (never logs secrets) */
|
|
122
116
|
debug: z.boolean().default(false).describe('Enable debug logging'),
|
|
123
117
|
/** Base URL for web app (used for generating note/notebook URLs) */
|
|
124
118
|
baseUrl: z.string().url().optional().describe('Web app base URL'),
|
|
125
119
|
})
|
|
126
|
-
.
|
|
127
|
-
message: 'At least one of apiKey, apiKeyFile, or apiKeyCommand is required',
|
|
128
|
-
path: ['apiKey'],
|
|
129
|
-
});
|
|
120
|
+
.strict();
|
|
130
121
|
/**
|
|
131
122
|
* Resolved plugin configuration (after secret resolution).
|
|
132
123
|
* Contains the actual secret values ready for use.
|
|
@@ -134,8 +125,8 @@ export const RawPluginConfigSchema = z
|
|
|
134
125
|
export const PluginConfigSchema = z.object({
|
|
135
126
|
/** Backend API URL */
|
|
136
127
|
apiUrl: z.string().url(),
|
|
137
|
-
/** Resolved API authentication key */
|
|
138
|
-
apiKey: z.string().min(1),
|
|
128
|
+
/** Resolved API authentication key (optional for auth-disabled backends) */
|
|
129
|
+
apiKey: z.string().min(1).optional(),
|
|
139
130
|
/** Resolved Twilio Account SID */
|
|
140
131
|
twilioAccountSid: z.string().optional(),
|
|
141
132
|
/** Resolved Twilio Auth Token */
|
|
@@ -204,13 +195,7 @@ export function safeValidateConfig(config) {
|
|
|
204
195
|
return safeValidateRawConfig(config);
|
|
205
196
|
}
|
|
206
197
|
/** Secret fields that should be redacted in logs */
|
|
207
|
-
const SECRET_FIELDS = [
|
|
208
|
-
'apiKey',
|
|
209
|
-
'twilioAccountSid',
|
|
210
|
-
'twilioAuthToken',
|
|
211
|
-
'twilioPhoneNumber',
|
|
212
|
-
'postmarkToken',
|
|
213
|
-
];
|
|
198
|
+
const SECRET_FIELDS = ['apiKey', 'twilioAccountSid', 'twilioAuthToken', 'twilioPhoneNumber', 'postmarkToken'];
|
|
214
199
|
/**
|
|
215
200
|
* Create a safe-to-log version of config with secrets redacted.
|
|
216
201
|
*/
|
|
@@ -219,7 +204,6 @@ export function redactConfig(config) {
|
|
|
219
204
|
for (const field of SECRET_FIELDS) {
|
|
220
205
|
if (redacted[field]) {
|
|
221
206
|
// Type assertion needed because we're setting string fields to '[REDACTED]'
|
|
222
|
-
;
|
|
223
207
|
redacted[field] = '[REDACTED]';
|
|
224
208
|
}
|
|
225
209
|
}
|
|
@@ -248,11 +232,8 @@ function buildSecretConfig(rawConfig, secretName, timeout) {
|
|
|
248
232
|
*/
|
|
249
233
|
export async function resolveConfigSecrets(rawConfig) {
|
|
250
234
|
const timeout = rawConfig.secretCommandTimeout;
|
|
251
|
-
// Resolve API key (
|
|
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
|
-
}
|
|
235
|
+
// Resolve API key (optional — omitted for auth-disabled backends)
|
|
236
|
+
const apiKey = (await resolveSecret(buildSecretConfig(rawConfig, 'apiKey', timeout), 'apiKey')) || undefined;
|
|
256
237
|
// Resolve optional secrets in parallel
|
|
257
238
|
const [twilioAccountSid, twilioAuthToken, twilioPhoneNumber, postmarkToken, postmarkFromEmail] = await Promise.all([
|
|
258
239
|
resolveSecret(buildSecretConfig(rawConfig, 'twilioAccountSid', timeout), 'twilioAccountSid'),
|
|
@@ -297,11 +278,8 @@ export async function resolveConfigSecrets(rawConfig) {
|
|
|
297
278
|
*/
|
|
298
279
|
export function resolveConfigSecretsSync(rawConfig) {
|
|
299
280
|
const timeout = rawConfig.secretCommandTimeout;
|
|
300
|
-
// Resolve API key (
|
|
301
|
-
const apiKey = resolveSecretSync(buildSecretConfig(rawConfig, 'apiKey', timeout), 'apiKey');
|
|
302
|
-
if (!apiKey) {
|
|
303
|
-
throw new Error('Failed to resolve API key from config');
|
|
304
|
-
}
|
|
281
|
+
// Resolve API key (optional — omitted for auth-disabled backends)
|
|
282
|
+
const apiKey = resolveSecretSync(buildSecretConfig(rawConfig, 'apiKey', timeout), 'apiKey') || undefined;
|
|
305
283
|
// Resolve optional secrets
|
|
306
284
|
const twilioAccountSid = resolveSecretSync(buildSecretConfig(rawConfig, 'twilioAccountSid', timeout), 'twilioAccountSid');
|
|
307
285
|
const twilioAuthToken = resolveSecretSync(buildSecretConfig(rawConfig, 'twilioAuthToken', timeout), 'twilioAuthToken');
|