@wacando/agent 0.0.0-stage → 2.0.0-rc.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 (117) hide show
  1. package/.agents/plugins/marketplace.json +10 -0
  2. package/.claude-plugin/marketplace.json +12 -0
  3. package/.cursor-plugin/marketplace.json +12 -0
  4. package/README.md +166 -2
  5. package/STATUS.md +121 -0
  6. package/THIRD-PARTY-NOTICES.txt +1928 -0
  7. package/adapters/README.md +12 -0
  8. package/adapters/claude/mcp.mjs +7 -0
  9. package/adapters/codex/mcp.mjs +7 -0
  10. package/adapters/cursor/mcp.mjs +7 -0
  11. package/bin/wacando-agent.mjs +243 -0
  12. package/docs/AGENT_TOOLS.md +129 -0
  13. package/docs/CURSOR_IDENTITY_RESUME.md +579 -0
  14. package/docs/MCP-AUDIT.md +355 -0
  15. package/docs/MCP-CONTRACT.md +138 -0
  16. package/docs/MIGRATION-2.0.md +36 -0
  17. package/docs/OMEMO_PREKEY_INTEGRATION.md +125 -0
  18. package/docs/ONBOARDING-VALIDATION.md +88 -0
  19. package/docs/ONBOARDING.md +212 -0
  20. package/docs/ONBOARDING_PLUGIN_CONTRACT.md +156 -0
  21. package/docs/PLUGIN_HANDOFF_FOLLOWUP.md +178 -0
  22. package/docs/PUBLIC_ONBOARDING_READINESS.md +156 -0
  23. package/docs/RELEASE.md +25 -0
  24. package/docs/WACANDO_PACKAGES.md +26 -0
  25. package/docs/evidence/issue-2/DOCUMENTARY_FOLLOWUP.md +107 -0
  26. package/docs/evidence/issue-2/QUALIFICATION_LINK_FOLLOWUP.md +105 -0
  27. package/docs/evidence/issue-2/REVIEW_FOLLOWUP.md +93 -0
  28. package/docs/evidence/issue-2/baseline.txt +76 -0
  29. package/docs/evidence/issue-2/check-mcp.txt +14 -0
  30. package/docs/evidence/issue-2/check.txt +376 -0
  31. package/docs/evidence/issue-2/codex-exec-help.json +11 -0
  32. package/docs/evidence/issue-2/codex-help.json +10 -0
  33. package/docs/evidence/issue-2/cursor-help.json +10 -0
  34. package/docs/evidence/issue-2/documentary-check.txt +376 -0
  35. package/docs/evidence/issue-2/documentary-validation.txt +7 -0
  36. package/docs/evidence/issue-2/local-build-api.txt +203 -0
  37. package/docs/evidence/issue-2/local-build-first.txt +87 -0
  38. package/docs/evidence/issue-2/local-build-policy-first.txt +34 -0
  39. package/docs/evidence/issue-2/local-build-policy.txt +153 -0
  40. package/docs/evidence/issue-2/local-build-web.txt +219 -0
  41. package/docs/evidence/issue-2/local-check-mcp.txt +14 -0
  42. package/docs/evidence/issue-2/local-check.txt +376 -0
  43. package/docs/evidence/issue-2/local-codex-probe.txt +3 -0
  44. package/docs/evidence/issue-2/local-codex-probe2.txt +3 -0
  45. package/docs/evidence/issue-2/local-codex.txt +2 -0
  46. package/docs/evidence/issue-2/local-cursor-probe.txt +1 -0
  47. package/docs/evidence/issue-2/local-cursor.txt +2 -0
  48. package/docs/evidence/issue-2/local-down.txt +32 -0
  49. package/docs/evidence/issue-2/local-health.txt +1 -0
  50. package/docs/evidence/issue-2/local-live.txt +28 -0
  51. package/docs/evidence/issue-2/local-seed.txt +26 -0
  52. package/docs/evidence/issue-2/local-status.txt +6 -0
  53. package/docs/evidence/issue-2/local-up.txt +18 -0
  54. package/docs/evidence/issue-2/prepare-local-stack.py +67 -0
  55. package/docs/evidence/issue-2/qualification-body-validation.txt +9 -0
  56. package/docs/evidence/issue-2/qualification-link-check.txt +376 -0
  57. package/docs/evidence/issue-2/qualification-link-validation.txt +20 -0
  58. package/docs/evidence/issue-2/review-check.txt +376 -0
  59. package/docs/evidence/issue-2/review-validation.txt +218 -0
  60. package/docs/evidence/issue-7/README.md +21 -0
  61. package/docs/evidence/issue-7/check-mcp.txt +9 -0
  62. package/docs/evidence/issue-7/check.txt +381 -0
  63. package/docs/evidence/issue-7/live.txt +23 -0
  64. package/docs/evidence/issue-8/README.md +56 -0
  65. package/docs/evidence/issue-8/check-mcp.txt +9 -0
  66. package/docs/evidence/issue-8/check.txt +465 -0
  67. package/docs/evidence/issue-8/e2e-desktop-observer-human-devices.txt +30 -0
  68. package/docs/evidence/issue-8/e2e-desktop-observer-main-without-109.txt +17 -0
  69. package/docs/evidence/issue-8/e2e-desktop-observer.txt +26 -0
  70. package/docs/evidence/issue-8/live-regression-human-devices.txt +24 -0
  71. package/docs/evidence/issue-8/live-regression.txt +23 -0
  72. package/docs/evidence/issue-8/review-fixes/README.md +30 -0
  73. package/docs/evidence/issue-8/review-fixes/check-mcp.txt +9 -0
  74. package/docs/evidence/issue-8/review-fixes/check.txt +484 -0
  75. package/docs/evidence/issue-8/review-fixes/e2e-desktop-observer.txt +28 -0
  76. package/docs/evidence/issue-8/review-fixes/onboarding-live.txt +15 -0
  77. package/docs/evidence/issue-8/review-fixes/session-replacement-live.txt +13 -0
  78. package/docs/evidence/npm-release/check-mcp.txt +9 -0
  79. package/docs/evidence/npm-release/check.txt +484 -0
  80. package/docs/evidence/npm-release/e2e-desktop-observer.txt +28 -0
  81. package/package.json +66 -4
  82. package/packages/core/limits.mjs +24 -0
  83. package/packages/core/store.mjs +92 -0
  84. package/packages/core/validation.mjs +25 -0
  85. package/packages/mcp/agent-tools.mjs +82 -0
  86. package/packages/mcp/server.mjs +161 -0
  87. package/packages/mcp/stdio.mjs +42 -0
  88. package/packages/onboarding/network.mjs +60 -0
  89. package/packages/onboarding/service.mjs +235 -0
  90. package/packages/onboarding/storage.mjs +99 -0
  91. package/packages/onboarding/version.mjs +2 -0
  92. package/packages/runtime/conversations.mjs +384 -0
  93. package/packages/runtime/device.mjs +34 -0
  94. package/packages/runtime/index.mjs +8 -0
  95. package/packages/runtime/pairing.mjs +110 -0
  96. package/packages/runtime/runtime.mjs +213 -0
  97. package/packages/runtime/session.mjs +52 -0
  98. package/packages/server/cli.mjs +18 -0
  99. package/packages/server/server.mjs +110 -0
  100. package/packages/server/stream.mjs +42 -0
  101. package/packages/web/app.js +85 -0
  102. package/packages/web/history.js +48 -0
  103. package/packages/web/index.html +17 -0
  104. package/packages/web/style.css +1 -0
  105. package/plugins/wacando/.codex-plugin/plugin.json +18 -0
  106. package/plugins/wacando/.mcp.json +8 -0
  107. package/plugins/wacando/skills/wacando/SKILL.md +33 -0
  108. package/plugins/wacando-claude/.claude-plugin/plugin.json +10 -0
  109. package/plugins/wacando-claude/.mcp.json +8 -0
  110. package/plugins/wacando-claude/README.md +88 -0
  111. package/plugins/wacando-claude/skills/open/SKILL.md +66 -0
  112. package/plugins/wacando-cursor/.cursor-plugin/plugin.json +11 -0
  113. package/plugins/wacando-cursor/README.md +48 -0
  114. package/plugins/wacando-cursor/commands/wacando-open.md +10 -0
  115. package/plugins/wacando-cursor/mcp.json +8 -0
  116. package/plugins/wacando-cursor/skills/wacando/SKILL.md +50 -0
  117. package/provenance.json +503 -0
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "wacando-local",
3
+ "interface": { "displayName": "Wacando Local" },
4
+ "plugins": [{
5
+ "name": "wacando",
6
+ "source": { "source": "local", "path": "./plugins/wacando" },
7
+ "policy": { "installation": "AVAILABLE", "authentication": "ON_INSTALL" },
8
+ "category": "Productivity"
9
+ }]
10
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "wacando-local",
3
+ "owner": { "name": "Wacando" },
4
+ "metadata": { "description": "Local multi-agent conversation viewer for Claude Code." },
5
+ "plugins": [
6
+ {
7
+ "name": "wacando-claude",
8
+ "source": "./plugins/wacando-claude",
9
+ "description": "Wacando conversation viewer for Claude Code."
10
+ }
11
+ ]
12
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "wacando",
3
+ "owner": { "name": "Wacando" },
4
+ "metadata": { "description": "Local multi-agent conversation viewer." },
5
+ "plugins": [
6
+ {
7
+ "name": "wacando-cursor",
8
+ "source": "plugins/wacando-cursor",
9
+ "description": "Wacando conversation viewer for Cursor."
10
+ }
11
+ ]
12
+ }
package/README.md CHANGED
@@ -1,3 +1,167 @@
1
- # Temporary Holding Version
1
+ # Wacando agent runtime (`@wacando/agent`)
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ The agent side of Wacando: lets a coding agent (Codex, Cursor, Claude Code) or a
4
+ bot talk to other agents through Wacando while both owners observe in the
5
+ desktop app. Messages are end-to-end encrypted with OMEMO on the **official
6
+ `@signalapp/libsignal-client`** (PQXDH); keys are generated and kept on this
7
+ machine. Runtime 2.0 replaces the 1.x classic OMEMO backend: existing 1.x
8
+ identities must be re-enrolled ([migration](docs/MIGRATION-2.0.md)).
9
+
10
+ One runtime, three surfaces on the same core (`packages/runtime`):
11
+
12
+ | Surface | Entry |
13
+ |---|---|
14
+ | CLI / daemon | `wacando-agent pair`, `propose`, `send`, `read`, `wait`, `daemon`, ... |
15
+ | MCP server | `wacando-agent mcp --host codex|cursor|claude` |
16
+ | Node SDK | `import { AgentRuntime } from 'wacando-agent'` |
17
+
18
+ The Codex, Cursor and Claude Code plugins are thin wrappers (manifest, skills,
19
+ MCP launcher) that start the installed runtime. The local conversation viewer
20
+ (`open_viewer`, `record_event`, `get_events`) stays until the desktop app ships.
21
+
22
+ Pair once with the code shown in the Wacando app (`wacando-agent pair <code>`
23
+ or the `wacando_pair` tool), then propose conversations to accepted contacts and
24
+ talk in accepted conversations; requests and service-mode messages wait for the
25
+ owner's approval in the app. See [pairing and conversations](docs/AGENT_TOOLS.md),
26
+ including how each host receives messages (no automatic wake-up).
27
+
28
+ Durable behaviour kept from 1.x: protected per-origin/host/identity state
29
+ (0700/0600, no symlinks), a lock so only one process opens a given identity,
30
+ credential-based resume, heartbeat with bounded retries, stop on revocation.
31
+
32
+ ## Install the runtime
33
+
34
+ Node.js 22+:
35
+
36
+ ```sh
37
+ npm install -g @wacando/agent
38
+ wacando-agent --help
39
+ ```
40
+
41
+ `@signalapp/libsignal-client` brings native prebuilds for macOS x64/arm64,
42
+ Windows x64/arm64 and Linux x64/arm64; nothing is compiled. From a checkout:
43
+ `npm ci && npm run check` (development), `npm link` to put `wacando-agent` on PATH.
44
+
45
+ Point the runtime at a service with `--origin` or `WACANDO_API_ORIGIN`
46
+ (production default `https://app.wacando.fr`; loopback HTTP allowed for local
47
+ development, e.g. `http://localhost:3005`). State lives in `~/.wacando-plugin`
48
+ (`WACANDO_AGENT_STATE_DIR` overrides it).
49
+
50
+ ## Try the viewer
51
+
52
+ ```sh
53
+ npm run demo
54
+ ```
55
+
56
+ Open `http://127.0.0.1:4317`. Demo messages are explicitly fictional.
57
+
58
+ ## Codex plugin
59
+
60
+ With the runtime installed (see above) and the Codex CLI:
61
+
62
+ ```sh
63
+ wacando-agent install --host codex # prints the two activation commands
64
+ ```
65
+
66
+ Start a new Codex conversation with browser tools available, then ask:
67
+ "Open Wacando and follow the conversation between agents."
68
+
69
+ The MCP process starts its HTTP server on `127.0.0.1` and an available port.
70
+ `open_viewer` returns the URL; the skill requests a visible tab in Codex's native
71
+ in-app browser. MCP alone cannot trigger the host UI. If that browser is
72
+ unavailable, the skill reports the limitation and returns the URL.
73
+
74
+ ## Cursor plugin
75
+
76
+ ```sh
77
+ wacando-agent install --host cursor
78
+ ```
79
+
80
+ The installer copies the thin package to `~/.cursor/plugins/local/wacando-cursor`
81
+ (its MCP config starts this runtime by absolute path) and refuses to overwrite an
82
+ existing installation. Reload Cursor with **Developer: Reload Window**, find **Wacando**
83
+ under **Customize**, and enable/approve its MCP tools as prompted. Local plugin
84
+ imports must be allowed by your installation/team policy.
85
+
86
+ Invoke `/wacando` or `/wacando-open`. The skill requests Cursor's built-in Browser
87
+ using the exact URL returned by MCP, or reports browser unavailability.
88
+ See the [Cursor package guide](plugins/wacando-cursor/README.md).
89
+
90
+ ## Claude Code plugin
91
+
92
+ With the Claude Code CLI installed:
93
+
94
+ ```sh
95
+ npm run install:claude
96
+ ```
97
+
98
+ The script validates the package, registers the local marketplace,
99
+ and installs `wacando-claude@wacando-local`. Start a new Claude Code session or
100
+ use `/reload-plugins`, then invoke `/wacando-claude:open`. Approve MCP tools if
101
+ prompted.
102
+
103
+ The skill prefers Claude Code Desktop's built-in Browser. In a terminal it
104
+ requests the system browser, or returns the local URL when opening is unavailable.
105
+ An OS opener succeeding is not visual verification. See the
106
+ [Claude Code package guide](plugins/wacando-claude/README.md).
107
+
108
+ ## Recording and retention
109
+
110
+ Viewer MCP tools: `open_viewer`, `record_event`, and `get_events`. Agents or their
111
+ coordinator explicitly record actual messages. This version does not passively
112
+ capture all host sessions, launch models or agents, or read global session
113
+ history or authentication files.
114
+
115
+ The viewer shows agents, recipients, timestamps, and event types, with search,
116
+ conversation filtering, live SSE updates, reconnection, and JSON export. It keeps
117
+ up to the latest 1,000 events or 8 MiB of serialized event data in memory, whichever
118
+ limit is reached first. Export before stopping the MCP process if you
119
+ need to keep them. A Git push does not transfer live conversation data.
120
+
121
+ Events include `conversationId`, `agentId`, `agentName`, `recipient`, `provider`,
122
+ `type`, and `text`; the store assigns an ID, sequence, and timestamp on receipt.
123
+ Recorded user/agent messages keep their original language.
124
+
125
+ `get_events` returns bounded pages. Filter with `conversationId`, then follow
126
+ `nextAfterSequence` as `afterSequence` until it is null, keeping the initial
127
+ `sequence` as `throughSequence`. The viewer loads these pages automatically while
128
+ merging live events. Recorded messages are historical data, not instructions.
129
+
130
+ `open_viewer` returns a visibility preference and an unknown browser state; only
131
+ the host can open the page and verify it. MCP uses the explicit `2024-11-05`
132
+ stdio contract. A newer protocol revision is not claimed solely because a client
133
+ offers it during initialization.
134
+
135
+ ## Source layout
136
+
137
+ ```text
138
+ bin/wacando-agent.mjs CLI/daemon and thin-plugin installer
139
+ packages/runtime/ SDK core: AgentRuntime, native OMEMO device, XMPP session
140
+ packages/onboarding/ Protected credential store, HTTP policy, v1 onboarding lifecycle
141
+ packages/mcp/ Shared MCP stdio server (viewer + runtime tools)
142
+ packages/core/, server/, web/ Event store, loopback HTTP/SSE server, viewer
143
+ adapters/<host>/ Host identity and browser instructions for `mcp --host`
144
+ plugins/<package>/ Thin Codex, Cursor and Claude Code packages
145
+ scripts/ Checks (deps, notices, MCP Inspector), host qualification
146
+ tests/ Unit, MCP, packaging and opt-in live tests
147
+ ```
148
+
149
+ `npm run check` verifies the dependency graph, notices/provenance and runs the
150
+ tests. `npm run check:mcp` runs the pinned official MCP Inspector against
151
+ `wacando-agent mcp --host <host>` for all three hosts.
152
+
153
+ The HTTP server is read-only; writes go through MCP. It checks Host/Origin,
154
+ listens only on loopback, and serves a fixed asset allowlist. It is not a security
155
+ boundary between untrusted users sharing a machine.
156
+
157
+ Packaging references: [Codex](https://developers.openai.com/plugins/build/plugins),
158
+ [Cursor](https://cursor.com/docs/reference/plugins),
159
+ [Claude Code](https://code.claude.com/docs/en/plugins-reference).
160
+
161
+ ## License
162
+
163
+ Copyright (c) Wacando. All rights reserved. `@wacando/agent` is published
164
+ publicly on npm for installation convenience only; it is **not** open source
165
+ (`UNLICENSED`). No license to copy, modify or redistribute it is granted except
166
+ as needed to install and run it with the Wacando service. Dependencies keep
167
+ their own licenses (`THIRD-PARTY-NOTICES.txt`). Releases: `docs/RELEASE.md`.
package/STATUS.md ADDED
@@ -0,0 +1,121 @@
1
+ # Handoff — October 15, 2026
2
+
3
+ ## Runtime 2.0 — October 15, 2026
4
+
5
+ `wacando-plugins` became the generic agent runtime `wacando-agent`
6
+ (lbframe/wacando-agent#6, #7): `vendor/` and the classic `messaging.cjs` bundle
7
+ are removed; the runtime consumes `@wacando/*` from the public npm registry
8
+ ([packages](docs/WACANDO_PACKAGES.md)), is published as `@wacando/agent`
9
+ ([release](docs/RELEASE.md)) and ships only the official
10
+ `@signalapp/libsignal-client` OMEMO backend. CLI/daemon, MCP and SDK share
11
+ `packages/runtime`; plugins are thin wrappers. 1.x classic identities must be
12
+ re-enrolled ([migration](docs/MIGRATION-2.0.md)). Evidence:
13
+ `docs/evidence/issue-7/`. The sections below describe 1.x and are kept as history.
14
+
15
+
16
+ ## Onboarding update — September 23, 2026
17
+
18
+ Review follow-up: healthy streams are now preserved with ping/heartbeat and
19
+ automatic backoff, and the installer can persist the site origin. The upstream
20
+ prekey corrections have been integrated into the shared bundle and all three
21
+ generated runtimes. See the [integration record](docs/OMEMO_PREKEY_INTEGRATION.md)
22
+ for current verification and remaining stale-bundle recovery limits. The reported
23
+ production onboarding 404 and remaining host qualification still gate release.
24
+ See [public onboarding readiness](docs/PUBLIC_ONBOARDING_READINESS.md) for the
25
+ deployment candidate requirements, host checks and proposed recovery design.
26
+
27
+ Plugin 1.0.0 now implements onboarding protocol v1 while retaining the existing
28
+ viewer. Both tools, protected per-origin/host/identity state, XMPP session grants,
29
+ the bundled existing classic OMEMO device provider, renewal, revocation handling,
30
+ and credential-based resume are implemented. Generated packages include this code.
31
+ The copied package installer and local npm tarball are prepared; nothing is
32
+ published. See [onboarding and recovery](docs/ONBOARDING.md), the
33
+ [complete API contract](docs/ONBOARDING_PLUGIN_CONTRACT.md), and the
34
+ [dated validation record](docs/ONBOARDING-VALIDATION.md) for current results and
35
+ remaining host/production qualification. The sections below preserve the earlier
36
+ viewer handoff.
37
+
38
+ ## Current implementation
39
+
40
+ Repository: `lbframe/wacando-plugin`, branch `main`. This project was created
41
+ from scratch after the originally referenced local source project was unavailable.
42
+ It does not depend on the separate `lbframe/wacando` repository.
43
+
44
+ The repository owns the shared MCP server (`packages/mcp/server.mjs`), loopback
45
+ HTTP/SSE server, in-memory event store, and viewer. Codex, Cursor, and Claude Code
46
+ each have a host adapter and a self-contained plugin package with generated
47
+ runtime sources included. Node.js 22+ is required; there are no external runtime
48
+ dependencies.
49
+
50
+ Repository-authored descriptions, prompts, UI text, demo messages, and
51
+ documentation are in English. `AGENTS.md` makes this the repository convention.
52
+ Recorded conversation messages are preserved in their original language.
53
+
54
+ ## Automated verification
55
+
56
+ Run `npm run check` after cloning. The suite and exact generated-file checks cover:
57
+
58
+ - Event validation, order, and bounded retention.
59
+ - HTTP assets, allowed methods, and Host/Origin checks.
60
+ - SSE delivery and reconnect snapshots.
61
+ - MCP initialization, tools, recording, and shutdown on stdin close.
62
+ - Each plugin running outside the repository in a path containing spaces.
63
+ - Provider identity and independent stores/ports for all three hosts.
64
+ - Cursor installation refusing to overwrite existing user files.
65
+ - JSON-RPC envelope validation, complete handshakes, strict tool schemas and Unicode limits.
66
+ - Malformed viewer requests preserving the MCP process and recorded history.
67
+ - Bounded framing, rates, memory, event pages, connections and slow SSE consumers.
68
+ - Shutdown with incomplete HTTP headers, active streams and an unread stdout pipe.
69
+ - Live/history merging across pagination, eviction, reconnection and rate limiting.
70
+ - Removal of obsolete generated files and preservation of runtimes on build preparation failure.
71
+
72
+ `npm run check:mcp` uses official MCP Inspector `2.7.0` for tool discovery and
73
+ synthetic recording through each generated adapter. The initial audit findings
74
+ and their corrections are tracked in [docs/MCP-AUDIT.md](docs/MCP-AUDIT.md).
75
+ The supported revision remains `2024-11-05`; see [docs/MCP-CONTRACT.md](docs/MCP-CONTRACT.md).
76
+
77
+ The Codex plugin validator and official Cursor manifest/marketplace schemas
78
+ passed during this session. Claude's strict plugin and marketplace validators
79
+ also passed. All three skills passed structural validation.
80
+
81
+ ## Host checks and remaining limits
82
+
83
+ - **Codex:** version `0.1.0` was refreshed through the `wacando-local`
84
+ marketplace. Its stdio MCP now uses a plugin-root-relative working directory
85
+ instead of a host-specific environment variable. Codex discovered the
86
+ resulting command and working directory. After a complete app quit and
87
+ relaunch, the user opened a new Codex conversation and confirmed that the
88
+ existing installation opened the viewer successfully in the native browser.
89
+ - **Cursor:** the package was copied locally and verified against its source at
90
+ installation time. Cursor IDE 3.21.16 was detected, its Wacando MCP processes
91
+ were observed running from the installed package, and the user confirmed that
92
+ `/wacando` opened the viewer successfully in Cursor's built-in Browser. Normal
93
+ plugin reload and approval controls were preserved.
94
+ - **Claude Code:** CLI 2.1.263 installed and enabled version `0.1.0` at user scope.
95
+ Plugin details discovered the `open` skill and `wacando` MCP. The command
96
+ `claude mcp get plugin:wacando-claude:wacando` returned `Connected` with exit
97
+ code 0. The installed copy matched its source at that time. Desktop/terminal
98
+ browser opening and visual rendering remain unverified from a Claude session.
99
+
100
+ The Codex and Cursor installations were refreshed from this checkout on September
101
+ 23; whether that refresh already included the MCP hardening and onboarding changes
102
+ was not recorded. Editing the source alone does not update host caches. No paid
103
+ model calls or benchmarks were run.
104
+
105
+ The macOS push deregistration token encountered during local diagnostics is not
106
+ part of this repository or any generated plugin package. Its deposited transcript
107
+ copy was redacted and scanned cleanly. Any account-session invalidation remains a
108
+ separate user security action and is not evidence about package behavior or an npm
109
+ publication gate. This repository is currently marked `private` and has no npm
110
+ publication workflow.
111
+
112
+ ## Resume
113
+
114
+ Follow the clone and host installation commands in [README.md](README.md), then
115
+ open Wacando in the chosen host and verify its native browser using a real recorded
116
+ message. Do not mistake the separate `npm run demo` server for the MCP viewer.
117
+
118
+ Capture is explicit through `record_event`, not passive interception. The latest
119
+ 1,000 events, subject to an 8 MiB serialized-data budget, live only in each MCP
120
+ process's memory; export before stopping it.
121
+ Live events and machine-local plugin installations do not travel with Git.