@wacando/agent 2.0.0-rc.1 → 2.0.2
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/THIRD-PARTY-NOTICES.txt +3 -3
- package/docs/AGENT_TOOLS.md +18 -0
- package/docs/RELEASE.md +33 -6
- package/package.json +5 -5
- package/packages/onboarding/version.mjs +1 -1
- package/packages/runtime/conversations.mjs +53 -4
- package/packages/runtime/recovery.mjs +49 -0
- package/plugins/wacando/.codex-plugin/plugin.json +1 -1
- package/plugins/wacando-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/wacando-cursor/.cursor-plugin/plugin.json +1 -1
- package/provenance.json +6 -6
- package/docs/evidence/issue-2/DOCUMENTARY_FOLLOWUP.md +0 -107
- package/docs/evidence/issue-2/QUALIFICATION_LINK_FOLLOWUP.md +0 -105
- package/docs/evidence/issue-2/REVIEW_FOLLOWUP.md +0 -93
- package/docs/evidence/issue-2/baseline.txt +0 -76
- package/docs/evidence/issue-2/check-mcp.txt +0 -14
- package/docs/evidence/issue-2/check.txt +0 -376
- package/docs/evidence/issue-2/codex-exec-help.json +0 -11
- package/docs/evidence/issue-2/codex-help.json +0 -10
- package/docs/evidence/issue-2/cursor-help.json +0 -10
- package/docs/evidence/issue-2/documentary-check.txt +0 -376
- package/docs/evidence/issue-2/documentary-validation.txt +0 -7
- package/docs/evidence/issue-2/local-build-api.txt +0 -203
- package/docs/evidence/issue-2/local-build-first.txt +0 -87
- package/docs/evidence/issue-2/local-build-policy-first.txt +0 -34
- package/docs/evidence/issue-2/local-build-policy.txt +0 -153
- package/docs/evidence/issue-2/local-build-web.txt +0 -219
- package/docs/evidence/issue-2/local-check-mcp.txt +0 -14
- package/docs/evidence/issue-2/local-check.txt +0 -376
- package/docs/evidence/issue-2/local-codex-probe.txt +0 -3
- package/docs/evidence/issue-2/local-codex-probe2.txt +0 -3
- package/docs/evidence/issue-2/local-codex.txt +0 -2
- package/docs/evidence/issue-2/local-cursor-probe.txt +0 -1
- package/docs/evidence/issue-2/local-cursor.txt +0 -2
- package/docs/evidence/issue-2/local-down.txt +0 -32
- package/docs/evidence/issue-2/local-health.txt +0 -1
- package/docs/evidence/issue-2/local-live.txt +0 -28
- package/docs/evidence/issue-2/local-seed.txt +0 -26
- package/docs/evidence/issue-2/local-status.txt +0 -6
- package/docs/evidence/issue-2/local-up.txt +0 -18
- package/docs/evidence/issue-2/prepare-local-stack.py +0 -67
- package/docs/evidence/issue-2/qualification-body-validation.txt +0 -9
- package/docs/evidence/issue-2/qualification-link-check.txt +0 -376
- package/docs/evidence/issue-2/qualification-link-validation.txt +0 -20
- package/docs/evidence/issue-2/review-check.txt +0 -376
- package/docs/evidence/issue-2/review-validation.txt +0 -218
- package/docs/evidence/issue-7/README.md +0 -21
- package/docs/evidence/issue-7/check-mcp.txt +0 -9
- package/docs/evidence/issue-7/check.txt +0 -381
- package/docs/evidence/issue-7/live.txt +0 -23
- package/docs/evidence/issue-8/README.md +0 -56
- package/docs/evidence/issue-8/check-mcp.txt +0 -9
- package/docs/evidence/issue-8/check.txt +0 -465
- package/docs/evidence/issue-8/e2e-desktop-observer-human-devices.txt +0 -30
- package/docs/evidence/issue-8/e2e-desktop-observer-main-without-109.txt +0 -17
- package/docs/evidence/issue-8/e2e-desktop-observer.txt +0 -26
- package/docs/evidence/issue-8/live-regression-human-devices.txt +0 -24
- package/docs/evidence/issue-8/live-regression.txt +0 -23
- package/docs/evidence/issue-8/review-fixes/README.md +0 -30
- package/docs/evidence/issue-8/review-fixes/check-mcp.txt +0 -9
- package/docs/evidence/issue-8/review-fixes/check.txt +0 -484
- package/docs/evidence/issue-8/review-fixes/e2e-desktop-observer.txt +0 -28
- package/docs/evidence/issue-8/review-fixes/onboarding-live.txt +0 -15
- package/docs/evidence/issue-8/review-fixes/session-replacement-live.txt +0 -13
- package/docs/evidence/npm-release/check-mcp.txt +0 -9
- package/docs/evidence/npm-release/check.txt +0 -484
- package/docs/evidence/npm-release/e2e-desktop-observer.txt +0 -28
|
@@ -1,381 +0,0 @@
|
|
|
1
|
-
$ node --version && npm --version
|
|
2
|
-
v22.22.0
|
|
3
|
-
11.11.1
|
|
4
|
-
$ npm ci
|
|
5
|
-
|
|
6
|
-
added 83 packages in 2s
|
|
7
|
-
$ npm run check
|
|
8
|
-
|
|
9
|
-
> wacando-agent@2.0.0 check
|
|
10
|
-
> node scripts/check-deps.mjs && npm run check:notices && npm test
|
|
11
|
-
|
|
12
|
-
Verified 3 pinned Wacando archives from https://github.com/lbframe/wacando @ 5f0f0a1f0ccc20c47383fed6f8e072aca5302486
|
|
13
|
-
|
|
14
|
-
> wacando-agent@2.0.0 check:notices
|
|
15
|
-
> node scripts/notices.mjs --check
|
|
16
|
-
|
|
17
|
-
Verified notices and provenance for 83 runtime packages
|
|
18
|
-
|
|
19
|
-
> wacando-agent@2.0.0 test
|
|
20
|
-
> node --test tests/*.test.mjs
|
|
21
|
-
|
|
22
|
-
TAP version 13
|
|
23
|
-
# Subtest: cursor checker requires an affirmative parsed payload even when the wrapper says success
|
|
24
|
-
ok 1 - cursor checker requires an affirmative parsed payload even when the wrapper says success
|
|
25
|
-
---
|
|
26
|
-
duration_ms: 2.65577
|
|
27
|
-
type: 'test'
|
|
28
|
-
...
|
|
29
|
-
# Subtest: cursor checker distinguishes clear revocation from a crash, lock error or false connection
|
|
30
|
-
ok 2 - cursor checker distinguishes clear revocation from a crash, lock error or false connection
|
|
31
|
-
---
|
|
32
|
-
duration_ms: 1.34947
|
|
33
|
-
type: 'test'
|
|
34
|
-
...
|
|
35
|
-
# Subtest: codex checker requires an affirmative parsed payload even when the wrapper says success
|
|
36
|
-
ok 3 - codex checker requires an affirmative parsed payload even when the wrapper says success
|
|
37
|
-
---
|
|
38
|
-
duration_ms: 0.494954
|
|
39
|
-
type: 'test'
|
|
40
|
-
...
|
|
41
|
-
# Subtest: codex checker distinguishes clear revocation from a crash, lock error or false connection
|
|
42
|
-
ok 4 - codex checker distinguishes clear revocation from a crash, lock error or false connection
|
|
43
|
-
---
|
|
44
|
-
duration_ms: 0.416783
|
|
45
|
-
type: 'test'
|
|
46
|
-
...
|
|
47
|
-
# Subtest: checker requires verified:true for installation readiness
|
|
48
|
-
ok 5 - checker requires verified:true for installation readiness
|
|
49
|
-
---
|
|
50
|
-
duration_ms: 0.401913
|
|
51
|
-
type: 'test'
|
|
52
|
-
...
|
|
53
|
-
# Subtest: malformed viewer request targets return 400 without losing MCP events
|
|
54
|
-
ok 6 - malformed viewer request targets return 400 without losing MCP events
|
|
55
|
-
---
|
|
56
|
-
duration_ms: 87.176164
|
|
57
|
-
type: 'test'
|
|
58
|
-
...
|
|
59
|
-
# Subtest: MCP shutdown on EOF closes SSE and unfinished HTTP headers
|
|
60
|
-
ok 7 - MCP shutdown on EOF closes SSE and unfinished HTTP headers
|
|
61
|
-
---
|
|
62
|
-
duration_ms: 2048.494643
|
|
63
|
-
type: 'test'
|
|
64
|
-
...
|
|
65
|
-
# Subtest: MCP shutdown on SIGTERM closes SSE and unfinished HTTP headers
|
|
66
|
-
ok 8 - MCP shutdown on SIGTERM closes SSE and unfinished HTTP headers
|
|
67
|
-
---
|
|
68
|
-
duration_ms: 348.349795
|
|
69
|
-
type: 'test'
|
|
70
|
-
...
|
|
71
|
-
# Subtest: HTTP and SSE snapshots use bounded pages and preserve large Unicode events
|
|
72
|
-
ok 9 - HTTP and SSE snapshots use bounded pages and preserve large Unicode events
|
|
73
|
-
---
|
|
74
|
-
duration_ms: 292.115179
|
|
75
|
-
type: 'test'
|
|
76
|
-
...
|
|
77
|
-
# Subtest: SSE client and queue limits isolate slow readers
|
|
78
|
-
ok 10 - SSE client and queue limits isolate slow readers
|
|
79
|
-
---
|
|
80
|
-
duration_ms: 69.699795
|
|
81
|
-
type: 'test'
|
|
82
|
-
...
|
|
83
|
-
# Subtest: legacy negotiation requires valid initialization and the initialized notification
|
|
84
|
-
ok 11 - legacy negotiation requires valid initialization and the initialized notification
|
|
85
|
-
---
|
|
86
|
-
duration_ms: 65.860727
|
|
87
|
-
type: 'test'
|
|
88
|
-
...
|
|
89
|
-
# Subtest: JSON-RPC rejects invalid IDs and parameters without answering responses or notifications
|
|
90
|
-
ok 12 - JSON-RPC rejects invalid IDs and parameters without answering responses or notifications
|
|
91
|
-
---
|
|
92
|
-
duration_ms: 79.676029
|
|
93
|
-
type: 'test'
|
|
94
|
-
...
|
|
95
|
-
# Subtest: tools enforce schemas, preserve Unicode limits, and never claim observed visibility
|
|
96
|
-
ok 13 - tools enforce schemas, preserve Unicode limits, and never claim observed visibility
|
|
97
|
-
---
|
|
98
|
-
duration_ms: 65.199482
|
|
99
|
-
type: 'test'
|
|
100
|
-
...
|
|
101
|
-
# Subtest: event pages obey encoded byte limits and traverse without losing filtered records
|
|
102
|
-
ok 14 - event pages obey encoded byte limits and traverse without losing filtered records
|
|
103
|
-
---
|
|
104
|
-
duration_ms: 12.039959
|
|
105
|
-
type: 'test'
|
|
106
|
-
...
|
|
107
|
-
# Subtest: retention is bounded by bytes as well as event count and reports eviction
|
|
108
|
-
ok 15 - retention is bounded by bytes as well as event count and reports eviction
|
|
109
|
-
---
|
|
110
|
-
duration_ms: 1.856943
|
|
111
|
-
type: 'test'
|
|
112
|
-
...
|
|
113
|
-
# Subtest: stdio framing handles split UTF-8, CRLF and escaped newlines with strict byte bounds
|
|
114
|
-
ok 16 - stdio framing handles split UTF-8, CRLF and escaped newlines with strict byte bounds
|
|
115
|
-
---
|
|
116
|
-
duration_ms: 2.605379
|
|
117
|
-
type: 'test'
|
|
118
|
-
...
|
|
119
|
-
# Subtest: an oversized unfinished frame closes the MCP process promptly
|
|
120
|
-
ok 17 - an oversized unfinished frame closes the MCP process promptly
|
|
121
|
-
---
|
|
122
|
-
duration_ms: 1679.419605
|
|
123
|
-
type: 'test'
|
|
124
|
-
...
|
|
125
|
-
# Subtest: SIGTERM exits within a deadline even when the host stops reading stdout
|
|
126
|
-
ok 18 - SIGTERM exits within a deadline even when the host stops reading stdout
|
|
127
|
-
---
|
|
128
|
-
duration_ms: 1134.679158
|
|
129
|
-
type: 'test'
|
|
130
|
-
...
|
|
131
|
-
# Subtest: stdio writes wait for readers and reject stalled or oversized output
|
|
132
|
-
ok 19 - stdio writes wait for readers and reject stalled or oversized output
|
|
133
|
-
---
|
|
134
|
-
duration_ms: 1008.765007
|
|
135
|
-
type: 'test'
|
|
136
|
-
...
|
|
137
|
-
# Subtest: rate limiting admits bursts, rejects excess calls and refills over time
|
|
138
|
-
ok 20 - rate limiting admits bursts, rejects excess calls and refills over time
|
|
139
|
-
---
|
|
140
|
-
duration_ms: 0.406953
|
|
141
|
-
type: 'test'
|
|
142
|
-
...
|
|
143
|
-
# Subtest: MCP tool floods receive actionable rate-limit errors
|
|
144
|
-
ok 21 - MCP tool floods receive actionable rate-limit errors
|
|
145
|
-
---
|
|
146
|
-
duration_ms: 126.460675
|
|
147
|
-
type: 'test'
|
|
148
|
-
...
|
|
149
|
-
# Subtest: live dev API: codex installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation
|
|
150
|
-
ok 22 - live dev API: codex installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation # SKIP
|
|
151
|
-
---
|
|
152
|
-
duration_ms: 0.681815
|
|
153
|
-
type: 'test'
|
|
154
|
-
...
|
|
155
|
-
# Subtest: live dev API: cursor installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation
|
|
156
|
-
ok 23 - live dev API: cursor installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation # SKIP
|
|
157
|
-
---
|
|
158
|
-
duration_ms: 0.101911
|
|
159
|
-
type: 'test'
|
|
160
|
-
...
|
|
161
|
-
# Subtest: live dev API: claude installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation
|
|
162
|
-
ok 24 - live dev API: claude installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation # SKIP
|
|
163
|
-
---
|
|
164
|
-
duration_ms: 0.09195
|
|
165
|
-
type: 'test'
|
|
166
|
-
...
|
|
167
|
-
# cursor: delayed shutdown released session lock; OMEMO snapshot unchanged
|
|
168
|
-
# Subtest: cursor shutdown waits for session cleanup and releases its own lock without changing keys
|
|
169
|
-
ok 25 - cursor shutdown waits for session cleanup and releases its own lock without changing keys
|
|
170
|
-
---
|
|
171
|
-
duration_ms: 1275.467369
|
|
172
|
-
type: 'test'
|
|
173
|
-
...
|
|
174
|
-
# codex: delayed shutdown released session lock; OMEMO snapshot unchanged
|
|
175
|
-
# Subtest: codex shutdown waits for session cleanup and releases its own lock without changing keys
|
|
176
|
-
ok 26 - codex shutdown waits for session cleanup and releases its own lock without changing keys
|
|
177
|
-
---
|
|
178
|
-
duration_ms: 1351.612221
|
|
179
|
-
type: 'test'
|
|
180
|
-
...
|
|
181
|
-
# Subtest: MCP shutdown finishes saving an in-flight verification response before exiting
|
|
182
|
-
ok 27 - MCP shutdown finishes saving an in-flight verification response before exiting
|
|
183
|
-
---
|
|
184
|
-
duration_ms: 1953.411831
|
|
185
|
-
type: 'test'
|
|
186
|
-
...
|
|
187
|
-
# Subtest: enrollment saves durable credential before XMPP, publishes before callback, and resumes without redemption
|
|
188
|
-
ok 28 - enrollment saves durable credential before XMPP, publishes before callback, and resumes without redemption
|
|
189
|
-
---
|
|
190
|
-
duration_ms: 1403.838277
|
|
191
|
-
type: 'test'
|
|
192
|
-
...
|
|
193
|
-
# Subtest: origins, host identities and installations cannot be substituted
|
|
194
|
-
ok 29 - origins, host identities and installations cannot be substituted
|
|
195
|
-
---
|
|
196
|
-
duration_ms: 169.675815
|
|
197
|
-
type: 'test'
|
|
198
|
-
...
|
|
199
|
-
# Subtest: expiration, replay, wrong installation and revocation return safe actions
|
|
200
|
-
ok 30 - expiration, replay, wrong installation and revocation return safe actions
|
|
201
|
-
---
|
|
202
|
-
duration_ms: 154.704354
|
|
203
|
-
type: 'test'
|
|
204
|
-
...
|
|
205
|
-
# Subtest: background heartbeats preserve the stream and retry outages with bounded backoff and safe diagnostics
|
|
206
|
-
ok 31 - background heartbeats preserve the stream and retry outages with bounded backoff and safe diagnostics
|
|
207
|
-
---
|
|
208
|
-
duration_ms: 206.266035
|
|
209
|
-
type: 'test'
|
|
210
|
-
...
|
|
211
|
-
# Subtest: failed initial connection recovers in background without another redemption and close cancels retries
|
|
212
|
-
ok 32 - failed initial connection recovers in background without another redemption and close cancels retries
|
|
213
|
-
---
|
|
214
|
-
duration_ms: 61.715907
|
|
215
|
-
type: 'test'
|
|
216
|
-
...
|
|
217
|
-
# Subtest: failed XMPP ping closes only the broken stream and obtains a fresh grant on automatic retry
|
|
218
|
-
ok 33 - failed XMPP ping closes only the broken stream and obtains a fresh grant on automatic retry
|
|
219
|
-
---
|
|
220
|
-
duration_ms: 120.923834
|
|
221
|
-
type: 'test'
|
|
222
|
-
...
|
|
223
|
-
# Subtest: shutdown waits for a background grant request and prevents a new session after closing
|
|
224
|
-
ok 34 - shutdown waits for a background grant request and prevents a new session after closing
|
|
225
|
-
---
|
|
226
|
-
duration_ms: 253.289892
|
|
227
|
-
type: 'test'
|
|
228
|
-
...
|
|
229
|
-
# Subtest: failed OMEMO registration preserves credential, suppresses connected callback, and resumes
|
|
230
|
-
ok 35 - failed OMEMO registration preserves credential, suppresses connected callback, and resumes
|
|
231
|
-
---
|
|
232
|
-
duration_ms: 1119.517586
|
|
233
|
-
type: 'test'
|
|
234
|
-
...
|
|
235
|
-
# Subtest: lost redemption and failed persistence never claim success
|
|
236
|
-
ok 36 - lost redemption and failed persistence never claim success
|
|
237
|
-
---
|
|
238
|
-
duration_ms: 77.407802
|
|
239
|
-
type: 'test'
|
|
240
|
-
...
|
|
241
|
-
# Subtest: unsafe permissions, symlinks and concurrent writes fail closed
|
|
242
|
-
ok 37 - unsafe permissions, symlinks and concurrent writes fail closed
|
|
243
|
-
---
|
|
244
|
-
duration_ms: 3.062512
|
|
245
|
-
type: 'test'
|
|
246
|
-
...
|
|
247
|
-
# Subtest: HTTP policy rejects non-loopback cleartext, URL credentials and redirects
|
|
248
|
-
ok 38 - HTTP policy rejects non-loopback cleartext, URL credentials and redirects
|
|
249
|
-
---
|
|
250
|
-
duration_ms: 20.389721
|
|
251
|
-
type: 'test'
|
|
252
|
-
...
|
|
253
|
-
# Subtest: existing native OMEMO identity survives reload; corrupt state is never regenerated
|
|
254
|
-
ok 39 - existing native OMEMO identity survives reload; corrupt state is never regenerated
|
|
255
|
-
---
|
|
256
|
-
duration_ms: 41.758989
|
|
257
|
-
type: 'test'
|
|
258
|
-
...
|
|
259
|
-
# Subtest: unsafe native OMEMO state permissions fail closed
|
|
260
|
-
ok 40 - unsafe native OMEMO state permissions fail closed
|
|
261
|
-
---
|
|
262
|
-
duration_ms: 4.823516
|
|
263
|
-
type: 'test'
|
|
264
|
-
...
|
|
265
|
-
# Subtest: a 1.x classic OMEMO identity is refused with re-enrollment guidance and left untouched
|
|
266
|
-
ok 41 - a 1.x classic OMEMO identity is refused with re-enrollment guidance and left untouched
|
|
267
|
-
---
|
|
268
|
-
duration_ms: 0.975417
|
|
269
|
-
type: 'test'
|
|
270
|
-
...
|
|
271
|
-
# Subtest: installed MCP tools verify via HTTP and never expose response credentials
|
|
272
|
-
ok 42 - installed MCP tools verify via HTTP and never expose response credentials
|
|
273
|
-
---
|
|
274
|
-
duration_ms: 216.128158
|
|
275
|
-
type: 'test'
|
|
276
|
-
...
|
|
277
|
-
# Subtest: cursor packaged MCP rejects a locally revoked identity without crashing or reporting connection
|
|
278
|
-
ok 43 - cursor packaged MCP rejects a locally revoked identity without crashing or reporting connection
|
|
279
|
-
---
|
|
280
|
-
duration_ms: 785.252075
|
|
281
|
-
type: 'test'
|
|
282
|
-
...
|
|
283
|
-
# Subtest: codex packaged MCP rejects a locally revoked identity without crashing or reporting connection
|
|
284
|
-
ok 44 - codex packaged MCP rejects a locally revoked identity without crashing or reporting connection
|
|
285
|
-
---
|
|
286
|
-
duration_ms: 140.427218
|
|
287
|
-
type: 'test'
|
|
288
|
-
...
|
|
289
|
-
# Subtest: release version matches all manifests
|
|
290
|
-
ok 45 - release version matches all manifests
|
|
291
|
-
---
|
|
292
|
-
duration_ms: 5.264819
|
|
293
|
-
type: 'test'
|
|
294
|
-
...
|
|
295
|
-
# Subtest: npm tarball installs the runtime with official libsignal and its thin plugins start it
|
|
296
|
-
ok 46 - npm tarball installs the runtime with official libsignal and its thin plugins start it
|
|
297
|
-
---
|
|
298
|
-
duration_ms: 7229.1955
|
|
299
|
-
type: 'test'
|
|
300
|
-
...
|
|
301
|
-
# Subtest: codex plugin is a thin wrapper that starts this runtime and records its own provider
|
|
302
|
-
ok 47 - codex plugin is a thin wrapper that starts this runtime and records its own provider
|
|
303
|
-
---
|
|
304
|
-
duration_ms: 1548.057324
|
|
305
|
-
type: 'test'
|
|
306
|
-
...
|
|
307
|
-
# Subtest: cursor plugin is a thin wrapper that starts this runtime and records its own provider
|
|
308
|
-
ok 48 - cursor plugin is a thin wrapper that starts this runtime and records its own provider
|
|
309
|
-
---
|
|
310
|
-
duration_ms: 267.536468
|
|
311
|
-
type: 'test'
|
|
312
|
-
...
|
|
313
|
-
# Subtest: claude plugin is a thin wrapper that starts this runtime and records its own provider
|
|
314
|
-
ok 49 - claude plugin is a thin wrapper that starts this runtime and records its own provider
|
|
315
|
-
---
|
|
316
|
-
duration_ms: 189.33055
|
|
317
|
-
type: 'test'
|
|
318
|
-
...
|
|
319
|
-
# Subtest: Claude, Cursor and Codex MCP processes have independent stores and ports
|
|
320
|
-
ok 50 - Claude, Cursor and Codex MCP processes have independent stores and ports
|
|
321
|
-
---
|
|
322
|
-
duration_ms: 69.973938
|
|
323
|
-
type: 'test'
|
|
324
|
-
...
|
|
325
|
-
# Subtest: installer refuses to overwrite an existing installation
|
|
326
|
-
ok 51 - installer refuses to overwrite an existing installation
|
|
327
|
-
---
|
|
328
|
-
duration_ms: 85.632553
|
|
329
|
-
type: 'test'
|
|
330
|
-
...
|
|
331
|
-
# Subtest: store validates messages, orders events and bounds retention
|
|
332
|
-
ok 52 - store validates messages, orders events and bounds retention
|
|
333
|
-
---
|
|
334
|
-
duration_ms: 2.68943
|
|
335
|
-
type: 'test'
|
|
336
|
-
...
|
|
337
|
-
# Subtest: loopback viewer serves assets and blocks cross-origin writes and traversal
|
|
338
|
-
ok 53 - loopback viewer serves assets and blocks cross-origin writes and traversal
|
|
339
|
-
---
|
|
340
|
-
duration_ms: 46.340583
|
|
341
|
-
type: 'test'
|
|
342
|
-
...
|
|
343
|
-
# Subtest: SSE delivers snapshot and live message, reconnect recovers snapshot
|
|
344
|
-
ok 54 - SSE delivers snapshot and live message, reconnect recovers snapshot
|
|
345
|
-
---
|
|
346
|
-
duration_ms: 261.199481
|
|
347
|
-
type: 'test'
|
|
348
|
-
...
|
|
349
|
-
# Subtest: MCP starts HTTP, records events and shuts down on stdin EOF
|
|
350
|
-
ok 55 - MCP starts HTTP, records events and shuts down on stdin EOF
|
|
351
|
-
---
|
|
352
|
-
duration_ms: 62.176779
|
|
353
|
-
type: 'test'
|
|
354
|
-
...
|
|
355
|
-
# Subtest: late history pages cannot duplicate live events, resurrect evictions or replace a new connection
|
|
356
|
-
ok 56 - late history pages cannot duplicate live events, resurrect evictions or replace a new connection
|
|
357
|
-
---
|
|
358
|
-
duration_ms: 1.774133
|
|
359
|
-
type: 'test'
|
|
360
|
-
...
|
|
361
|
-
# Subtest: history loading pins the snapshot sequence, follows cursors and respects cancellation
|
|
362
|
-
ok 57 - history loading pins the snapshot sequence, follows cursors and respects cancellation
|
|
363
|
-
---
|
|
364
|
-
duration_ms: 1.020178
|
|
365
|
-
type: 'test'
|
|
366
|
-
...
|
|
367
|
-
# Subtest: rate-limited history loading resumes from the same page instead of restarting the stream
|
|
368
|
-
ok 58 - rate-limited history loading resumes from the same page instead of restarting the stream
|
|
369
|
-
---
|
|
370
|
-
duration_ms: 1001.920706
|
|
371
|
-
type: 'test'
|
|
372
|
-
...
|
|
373
|
-
1..58
|
|
374
|
-
# tests 58
|
|
375
|
-
# suites 0
|
|
376
|
-
# pass 55
|
|
377
|
-
# fail 0
|
|
378
|
-
# cancelled 0
|
|
379
|
-
# skipped 3
|
|
380
|
-
# todo 0
|
|
381
|
-
# duration_ms 7297.569426
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
$ WACANDO_LIVE_TEST_ORIGIN=http://localhost:43001 node --test tests/onboarding-live.test.mjs
|
|
2
|
-
# Subtest: live dev API: codex installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation
|
|
3
|
-
ok 1 - live dev API: codex installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation
|
|
4
|
-
# Subtest: live dev API: cursor installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation
|
|
5
|
-
ok 2 - live dev API: cursor installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation
|
|
6
|
-
# Subtest: live dev API: claude installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation
|
|
7
|
-
ok 3 - live dev API: claude installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation
|
|
8
|
-
# tests 3
|
|
9
|
-
# suites 0
|
|
10
|
-
# pass 3
|
|
11
|
-
# fail 0
|
|
12
|
-
# cancelled 0
|
|
13
|
-
# skipped 0
|
|
14
|
-
# todo 0
|
|
15
|
-
# duration_ms 4115.907774
|
|
16
|
-
$ WACANDO_LIVE_TEST_ORIGIN=http://localhost:43001 node scripts/check-daemon-live.mjs
|
|
17
|
-
enrolled @daemon_962d3aa864c8/bot for host "cli" (synthetic owner)
|
|
18
|
-
status: [{"agentId":"agt_354244b5-6fee-449d-9243-5f946f3c89a1","handle":"@daemon_962d3aa864c8/bot","origin":"http://localhost:43001","mode":"human","revoked":false,"connection":"disconnected"}]
|
|
19
|
-
daemon: connected (grant, native OMEMO publication, presence echo, API callback) and running
|
|
20
|
-
second daemon on the same identity: refused by the identity lock
|
|
21
|
-
daemon: SIGTERM -> clean exit 0, lock released
|
|
22
|
-
daemon restarted on the same saved identity and keys: connected again
|
|
23
|
-
exit=0
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
# lbframe/wacando-agent#8, #3, #4 — pairing and consent-aware conversations
|
|
2
|
-
|
|
3
|
-
Branch `feat/8-pairing-consent` (on top of `feat/7-generic-runtime`, PR #11).
|
|
4
|
-
Linux x64, Node.js 22.22.0, npm 10.9.4.
|
|
5
|
-
|
|
6
|
-
## Real local stack (nothing mocked)
|
|
7
|
-
|
|
8
|
-
- Postgres container `wacando-issue10-postgres` (127.0.0.1:15432), own database
|
|
9
|
-
`wacando_agentside`, migrations from lbframe/wacando main (`drizzle-kit migrate`).
|
|
10
|
-
- ejabberd `ejabberd/ecs:26.07`, own container `wacando-agentside-ejabberd`
|
|
11
|
-
(127.0.0.1:45222/45280/45347), configured with lbframe/wacando
|
|
12
|
-
`infra/ejabberd/ci-up.sh`: CI config + compiled `mod_wacando_guard` (#102).
|
|
13
|
-
- API (:43001) and policy component (:43002) from lbframe/wacando main
|
|
14
|
-
`50b9d26` (includes #60 pairing, #98 consent, #102 guard), `tsx src/index.ts`;
|
|
15
|
-
then a second stack: main `f21f742` + #108 + #109 (fresh DB `wacando_agentside_int`).
|
|
16
|
-
- Desktop observer: `apps/desktop/src/main/observer-hub.ts` (main-process,
|
|
17
|
-
official `@signalapp/libsignal-client`), one hub per owner.
|
|
18
|
-
|
|
19
|
-
## Results
|
|
20
|
-
|
|
21
|
-
| File | What | Result |
|
|
22
|
-
|---|---|---|
|
|
23
|
-
| `check.txt` | `npm run check` | deps + notices verified; 73 tests: 70 pass, 0 fail, 3 opt-in live skipped. Also: recipient discovery validation (fail closed), a replaced session never reconnects. New: pairing proofs equal the API's RFC 8032 interoperability vectors byte for byte; key saved before redeem; refusal/expiry leave no file; resume after interruption; 5 s polling + Retry-After; recipient set, accepted-only views, content-free refusals |
|
|
24
|
-
| `check-mcp.txt` | `npm run check:mcp` | official MCP Inspector 2.7.0: 13 tools, 3 hosts |
|
|
25
|
-
| `e2e-desktop-observer.txt` | `scripts/e2e-desktop-observer.mts` with the desktop fix lbframe/wacando#109 | **18/18 PASS** (below) |
|
|
26
|
-
| `e2e-desktop-observer-main-without-109.txt` | same run with main's desktop hub | steps 1–14 pass, then the owners' desktop shows the 2 relayed messages as undecryptable: the gap fixed by lbframe/wacando#109 |
|
|
27
|
-
| `live-regression.txt` | live onboarding (3 hosts) + CLI daemon qualification | 3/3 pass; daemon connected, lock refusal, SIGTERM exit 0, restart |
|
|
28
|
-
| `e2e-desktop-observer-human-devices.txt` | same E2E on lbframe/wacando main `f21f742` (+#105, #106 one session per agent) with PR #108 (per-installation human devices) and #109 merged locally; ejabberd reconfigured from that tree | **18/18 PASS**: each owner's desktop enrolls a `dev_…` installation (password re-auth, device-bound grant, activation after bundle publication); the runtime discovers recipients before every send and both `dev_` observers decrypt all 3 messages |
|
|
29
|
-
| `live-regression-human-devices.txt` | live onboarding + daemon on that stack | 3/3 pass; daemon pass |
|
|
30
|
-
|
|
31
|
-
E2E steps (`e2e-desktop-observer.txt`):
|
|
32
|
-
1. two owners; 2. CLI `wacando-agent pair` (service bot), owner confirms after
|
|
33
|
-
seeing the key fingerprint; 3. MCP `wacando_pair` (human, Codex host), resumed by
|
|
34
|
-
a second call; 4. contact accepted; 5. both runtimes connected through the SDK
|
|
35
|
-
(native OMEMO device, presence echo); 6. `propose` creates the request and
|
|
36
|
-
refuses the first message fail-closed while the owners have no device;
|
|
37
|
-
7. recipient agent sees nothing before acceptance; 8. both owners' desktop hubs
|
|
38
|
-
publish devices and observe; 9. first message **held**, status visible to the
|
|
39
|
-
agent; 10. owner A recomputes the digest locally from the held ciphertext and
|
|
40
|
-
approves; 11. owner B sees it in the consent inbox and accepts; 12. recipient
|
|
41
|
-
(human, member) decrypts the first message from MAM; 13. human reply sent
|
|
42
|
-
freely, service agent decrypts it from a policy delivery; 14. service message
|
|
43
|
-
held, nothing reaches the recipient before approval, then delivered;
|
|
44
|
-
15–16. **both owners' desktop ObserverHubs decrypt all 3 messages**; 17. STOP:
|
|
45
|
-
both agents refused; 18. canary absent from ejabberd storage (MAM, offline,
|
|
46
|
-
pubsub, logs), API/policy logs and runtime CLI/MCP output.
|
|
47
|
-
|
|
48
|
-
## Not tested
|
|
49
|
-
|
|
50
|
-
- Real Codex/Cursor/Claude hosts driving the MCP tools (the MCP process is
|
|
51
|
-
driven over stdio by the test); macOS/Windows.
|
|
52
|
-
- A `service`-mode recipient (it cannot receive the first message by design of
|
|
53
|
-
the server, documented in `docs/AGENT_TOOLS.md`).
|
|
54
|
-
- Direct 1:1 refusal by the guard (covered in lbframe/wacando #102); the runtime
|
|
55
|
-
never sends `chat` stanzas and ignores incoming ones.
|
|
56
|
-
- Pairing refusal/expiry against the real API (unit-tested; the real window is 10 minutes).
|