@totalreclaw/totalreclaw 3.3.0-rc.2 → 3.3.0-rc.3

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 (3) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/index.ts +6 -4
  3. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,54 @@ All notable changes to `@totalreclaw/totalreclaw` (the OpenClaw plugin) are docu
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [3.3.0-rc.3] — 2026-04-20
8
+
9
+ Third release candidate for 3.3.0. Sole change vs rc.2: adds the mandatory
10
+ `auth` field to the 4 `registerHttpRoute` calls that were silently dropped by
11
+ the OpenClaw 2026.4.2 loader. QR-pairing was end-to-end dead in rc.2 despite
12
+ the scanner and all other gates passing. See internal QA report at
13
+ `totalreclaw-internal#21`.
14
+
15
+ ### Fixed
16
+
17
+ - `skill/plugin/index.ts` — added `auth: 'gateway'` to all 4
18
+ `api.registerHttpRoute!({...})` calls (lines 2750–2753). OpenClaw 2026.4.2
19
+ introduced a mandatory `auth` field; registrations without it are silently
20
+ dropped at load time. Affected routes: `/pair/finish`, `/pair/start`,
21
+ `/pair/respond`, `/pair/status`. The plugin's `logger.info('registered 4
22
+ QR-pairing HTTP routes')` still fired in rc.2, masking the failure — only
23
+ surfaced when `GET /plugin/totalreclaw/pair/finish` fell through to the SPA
24
+ and `POST /pair/respond` returned 404.
25
+ - `skill/plugin/index.ts` `PluginApi` interface — `registerHttpRoute` param
26
+ type updated to include `auth: 'gateway' | 'plugin'` so TypeScript enforces
27
+ the field going forward.
28
+
29
+ **Before:**
30
+ ```ts
31
+ api.registerHttpRoute!({ path: bundle.finishPath, handler: bundle.handlers.finish });
32
+ api.registerHttpRoute!({ path: bundle.startPath, handler: bundle.handlers.start });
33
+ api.registerHttpRoute!({ path: bundle.respondPath, handler: bundle.handlers.respond });
34
+ api.registerHttpRoute!({ path: bundle.statusPath, handler: bundle.handlers.status });
35
+ ```
36
+
37
+ **After:**
38
+ ```ts
39
+ api.registerHttpRoute!({ path: bundle.finishPath, handler: bundle.handlers.finish, auth: 'gateway' });
40
+ api.registerHttpRoute!({ path: bundle.startPath, handler: bundle.handlers.start, auth: 'gateway' });
41
+ api.registerHttpRoute!({ path: bundle.respondPath, handler: bundle.handlers.respond, auth: 'gateway' });
42
+ api.registerHttpRoute!({ path: bundle.statusPath, handler: bundle.handlers.status, auth: 'gateway' });
43
+ ```
44
+
45
+ ### Added
46
+
47
+ - `skill/plugin/pair-http-route-registration.test.ts` — new unit test (23
48
+ assertions) covering: 4 calls made, `auth` field present on every call,
49
+ `auth === 'gateway'`, paths contain `/pair/`, handlers are functions, all 4
50
+ endpoint segments covered (finish/start/respond/status), and no-throw when
51
+ `registerHttpRoute` is absent.
52
+
53
+ ---
54
+
7
55
  ## [3.3.0-rc.2] — 2026-04-20
8
56
 
9
57
  Second release candidate for 3.3.0. Bundles the scanner false-positive
package/index.ts CHANGED
@@ -214,6 +214,8 @@ interface OpenClawPluginApi {
214
214
  registerHttpRoute?(params: {
215
215
  path: string;
216
216
  handler: (req: import('node:http').IncomingMessage, res: import('node:http').ServerResponse) => Promise<void> | void;
217
+ /** OpenClaw 2026.4.2+ — required; loader silently drops the route if absent. */
218
+ auth: 'gateway' | 'plugin';
217
219
  }): void;
218
220
  }
219
221
 
@@ -2745,10 +2747,10 @@ const plugin = {
2745
2747
  return { state: 'active' };
2746
2748
  },
2747
2749
  });
2748
- api.registerHttpRoute!({ path: bundle.finishPath, handler: bundle.handlers.finish });
2749
- api.registerHttpRoute!({ path: bundle.startPath, handler: bundle.handlers.start });
2750
- api.registerHttpRoute!({ path: bundle.respondPath, handler: bundle.handlers.respond });
2751
- api.registerHttpRoute!({ path: bundle.statusPath, handler: bundle.handlers.status });
2750
+ api.registerHttpRoute!({ path: bundle.finishPath, handler: bundle.handlers.finish, auth: 'gateway' });
2751
+ api.registerHttpRoute!({ path: bundle.startPath, handler: bundle.handlers.start, auth: 'gateway' });
2752
+ api.registerHttpRoute!({ path: bundle.respondPath, handler: bundle.handlers.respond, auth: 'gateway' });
2753
+ api.registerHttpRoute!({ path: bundle.statusPath, handler: bundle.handlers.status, auth: 'gateway' });
2752
2754
  api.logger.info('TotalReclaw: registered 4 QR-pairing HTTP routes');
2753
2755
  } catch (err) {
2754
2756
  const msg = err instanceof Error ? err.message : String(err);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@totalreclaw/totalreclaw",
3
- "version": "3.3.0-rc.2",
3
+ "version": "3.3.0-rc.3",
4
4
  "description": "End-to-end encrypted, agent-portable memory for OpenClaw and any LLM-agent runtime. XChaCha20-Poly1305 with protobuf v4 + on-chain Memory Taxonomy v1 (claim / preference / directive / commitment / episode / summary).",
5
5
  "type": "module",
6
6
  "keywords": [