@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,376 @@
1
+
2
+ > wacando-plugins@1.0.0 check
3
+ > npm run build && npm run check:generated && npm test
4
+
5
+
6
+ > wacando-plugins@1.0.0 build
7
+ > node scripts/build.mjs
8
+
9
+ Built self-contained codex plugin: wacando@1.0.0
10
+ Built self-contained cursor plugin: wacando-cursor@1.0.0
11
+ Built self-contained claude plugin: wacando-claude@1.0.0
12
+
13
+ > wacando-plugins@1.0.0 check:generated
14
+ > node scripts/check-generated.mjs
15
+
16
+ Verified exact runtime: wacando
17
+ Verified exact runtime: wacando-cursor
18
+ Verified exact runtime: wacando-claude
19
+
20
+ > wacando-plugins@1.0.0 test
21
+ > node --test tests/*.test.mjs
22
+
23
+ TAP version 13
24
+ # Subtest: clean package builds remove deleted sources and preserve the old runtime on preparation failure
25
+ ok 1 - clean package builds remove deleted sources and preserve the old runtime on preparation failure
26
+ ---
27
+ duration_ms: 1051.087639
28
+ type: 'test'
29
+ ...
30
+ # Subtest: cursor checker requires an affirmative parsed payload even when the wrapper says success
31
+ ok 2 - cursor checker requires an affirmative parsed payload even when the wrapper says success
32
+ ---
33
+ duration_ms: 2.664519
34
+ type: 'test'
35
+ ...
36
+ # Subtest: cursor checker distinguishes clear revocation from a crash, lock error or false connection
37
+ ok 3 - cursor checker distinguishes clear revocation from a crash, lock error or false connection
38
+ ---
39
+ duration_ms: 1.38043
40
+ type: 'test'
41
+ ...
42
+ # Subtest: codex checker requires an affirmative parsed payload even when the wrapper says success
43
+ ok 4 - codex checker requires an affirmative parsed payload even when the wrapper says success
44
+ ---
45
+ duration_ms: 0.489554
46
+ type: 'test'
47
+ ...
48
+ # Subtest: codex checker distinguishes clear revocation from a crash, lock error or false connection
49
+ ok 5 - codex checker distinguishes clear revocation from a crash, lock error or false connection
50
+ ---
51
+ duration_ms: 0.411003
52
+ type: 'test'
53
+ ...
54
+ # Subtest: checker requires verified:true for installation readiness
55
+ ok 6 - checker requires verified:true for installation readiness
56
+ ---
57
+ duration_ms: 0.405553
58
+ type: 'test'
59
+ ...
60
+ # Subtest: malformed viewer request targets return 400 without losing MCP events
61
+ ok 7 - malformed viewer request targets return 400 without losing MCP events
62
+ ---
63
+ duration_ms: 82.943859
64
+ type: 'test'
65
+ ...
66
+ # Subtest: MCP shutdown on EOF closes SSE and unfinished HTTP headers
67
+ ok 8 - MCP shutdown on EOF closes SSE and unfinished HTTP headers
68
+ ---
69
+ duration_ms: 315.184055
70
+ type: 'test'
71
+ ...
72
+ # Subtest: MCP shutdown on SIGTERM closes SSE and unfinished HTTP headers
73
+ ok 9 - MCP shutdown on SIGTERM closes SSE and unfinished HTTP headers
74
+ ---
75
+ duration_ms: 305.673835
76
+ type: 'test'
77
+ ...
78
+ # Subtest: HTTP and SSE snapshots use bounded pages and preserve large Unicode events
79
+ ok 10 - HTTP and SSE snapshots use bounded pages and preserve large Unicode events
80
+ ---
81
+ duration_ms: 61.905405
82
+ type: 'test'
83
+ ...
84
+ # Subtest: SSE client and queue limits isolate slow readers
85
+ ok 11 - SSE client and queue limits isolate slow readers
86
+ ---
87
+ duration_ms: 12.125679
88
+ type: 'test'
89
+ ...
90
+ # Subtest: legacy negotiation requires valid initialization and the initialized notification
91
+ ok 12 - legacy negotiation requires valid initialization and the initialized notification
92
+ ---
93
+ duration_ms: 62.283697
94
+ type: 'test'
95
+ ...
96
+ # Subtest: JSON-RPC rejects invalid IDs and parameters without answering responses or notifications
97
+ ok 13 - JSON-RPC rejects invalid IDs and parameters without answering responses or notifications
98
+ ---
99
+ duration_ms: 54.601141
100
+ type: 'test'
101
+ ...
102
+ # Subtest: tools enforce schemas, preserve Unicode limits, and never claim observed visibility
103
+ ok 14 - tools enforce schemas, preserve Unicode limits, and never claim observed visibility
104
+ ---
105
+ duration_ms: 66.77478
106
+ type: 'test'
107
+ ...
108
+ # Subtest: event pages obey encoded byte limits and traverse without losing filtered records
109
+ ok 15 - event pages obey encoded byte limits and traverse without losing filtered records
110
+ ---
111
+ duration_ms: 11.553055
112
+ type: 'test'
113
+ ...
114
+ # Subtest: retention is bounded by bytes as well as event count and reports eviction
115
+ ok 16 - retention is bounded by bytes as well as event count and reports eviction
116
+ ---
117
+ duration_ms: 1.935104
118
+ type: 'test'
119
+ ...
120
+ # Subtest: stdio framing handles split UTF-8, CRLF and escaped newlines with strict byte bounds
121
+ ok 17 - stdio framing handles split UTF-8, CRLF and escaped newlines with strict byte bounds
122
+ ---
123
+ duration_ms: 2.863391
124
+ type: 'test'
125
+ ...
126
+ # Subtest: an oversized unfinished frame closes the MCP process promptly
127
+ ok 18 - an oversized unfinished frame closes the MCP process promptly
128
+ ---
129
+ duration_ms: 54.294119
130
+ type: 'test'
131
+ ...
132
+ # Subtest: SIGTERM exits within a deadline even when the host stops reading stdout
133
+ ok 19 - SIGTERM exits within a deadline even when the host stops reading stdout
134
+ ---
135
+ duration_ms: 1107.18707
136
+ type: 'test'
137
+ ...
138
+ # Subtest: stdio writes wait for readers and reject stalled or oversized output
139
+ ok 20 - stdio writes wait for readers and reject stalled or oversized output
140
+ ---
141
+ duration_ms: 1004.277874
142
+ type: 'test'
143
+ ...
144
+ # Subtest: rate limiting admits bursts, rejects excess calls and refills over time
145
+ ok 21 - rate limiting admits bursts, rejects excess calls and refills over time
146
+ ---
147
+ duration_ms: 0.322933
148
+ type: 'test'
149
+ ...
150
+ # Subtest: MCP tool floods receive actionable rate-limit errors
151
+ ok 22 - MCP tool floods receive actionable rate-limit errors
152
+ ---
153
+ duration_ms: 63.699898
154
+ type: 'test'
155
+ ...
156
+ # Subtest: live dev API: codex installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation
157
+ ok 23 - live dev API: codex installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation # SKIP
158
+ ---
159
+ duration_ms: 0.656305
160
+ type: 'test'
161
+ ...
162
+ # Subtest: live dev API: cursor installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation
163
+ ok 24 - live dev API: cursor installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation # SKIP
164
+ ---
165
+ duration_ms: 0.101111
166
+ type: 'test'
167
+ ...
168
+ # Subtest: live dev API: claude installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation
169
+ ok 25 - live dev API: claude installed runtime verifies, enrolls, publishes OMEMO, restarts and stops on revocation # SKIP
170
+ ---
171
+ duration_ms: 0.090091
172
+ type: 'test'
173
+ ...
174
+ # cursor: delayed shutdown released session lock; OMEMO snapshot unchanged
175
+ # Subtest: cursor shutdown waits for session cleanup and releases its own lock without changing keys
176
+ ok 26 - cursor shutdown waits for session cleanup and releases its own lock without changing keys
177
+ ---
178
+ duration_ms: 2282.813723
179
+ type: 'test'
180
+ ...
181
+ # codex: delayed shutdown released session lock; OMEMO snapshot unchanged
182
+ # Subtest: codex shutdown waits for session cleanup and releases its own lock without changing keys
183
+ ok 27 - codex shutdown waits for session cleanup and releases its own lock without changing keys
184
+ ---
185
+ duration_ms: 1598.667168
186
+ type: 'test'
187
+ ...
188
+ # Subtest: MCP shutdown finishes saving an in-flight verification response before exiting
189
+ ok 28 - MCP shutdown finishes saving an in-flight verification response before exiting
190
+ ---
191
+ duration_ms: 1332.841137
192
+ type: 'test'
193
+ ...
194
+ # Subtest: enrollment saves durable credential before XMPP, publishes before callback, and resumes without redemption
195
+ ok 29 - enrollment saves durable credential before XMPP, publishes before callback, and resumes without redemption
196
+ ---
197
+ duration_ms: 1043.328531
198
+ type: 'test'
199
+ ...
200
+ # Subtest: origins, host identities and installations cannot be substituted
201
+ ok 30 - origins, host identities and installations cannot be substituted
202
+ ---
203
+ duration_ms: 208.854253
204
+ type: 'test'
205
+ ...
206
+ # Subtest: expiration, replay, wrong installation and revocation return safe actions
207
+ ok 31 - expiration, replay, wrong installation and revocation return safe actions
208
+ ---
209
+ duration_ms: 42.991905
210
+ type: 'test'
211
+ ...
212
+ # Subtest: background heartbeats preserve the stream and retry outages with bounded backoff and safe diagnostics
213
+ ok 32 - background heartbeats preserve the stream and retry outages with bounded backoff and safe diagnostics
214
+ ---
215
+ duration_ms: 114.009357
216
+ type: 'test'
217
+ ...
218
+ # Subtest: failed initial connection recovers in background without another redemption and close cancels retries
219
+ ok 33 - failed initial connection recovers in background without another redemption and close cancels retries
220
+ ---
221
+ duration_ms: 18.615887
222
+ type: 'test'
223
+ ...
224
+ # Subtest: failed XMPP ping closes only the broken stream and obtains a fresh grant on automatic retry
225
+ ok 34 - failed XMPP ping closes only the broken stream and obtains a fresh grant on automatic retry
226
+ ---
227
+ duration_ms: 19.640814
228
+ type: 'test'
229
+ ...
230
+ # Subtest: shutdown waits for a background grant request and prevents a new session after closing
231
+ ok 35 - shutdown waits for a background grant request and prevents a new session after closing
232
+ ---
233
+ duration_ms: 96.954952
234
+ type: 'test'
235
+ ...
236
+ # Subtest: failed OMEMO registration preserves credential, suppresses connected callback, and resumes
237
+ ok 36 - failed OMEMO registration preserves credential, suppresses connected callback, and resumes
238
+ ---
239
+ duration_ms: 32.641529
240
+ type: 'test'
241
+ ...
242
+ # Subtest: lost redemption and failed persistence never claim success
243
+ ok 37 - lost redemption and failed persistence never claim success
244
+ ---
245
+ duration_ms: 15.961747
246
+ type: 'test'
247
+ ...
248
+ # Subtest: unsafe permissions, symlinks and concurrent writes fail closed
249
+ ok 38 - unsafe permissions, symlinks and concurrent writes fail closed
250
+ ---
251
+ duration_ms: 2.011264
252
+ type: 'test'
253
+ ...
254
+ # Subtest: HTTP policy rejects non-loopback cleartext, URL credentials and redirects
255
+ ok 39 - HTTP policy rejects non-loopback cleartext, URL credentials and redirects
256
+ ---
257
+ duration_ms: 15.899446
258
+ type: 'test'
259
+ ...
260
+ # Subtest: existing Wacando OMEMO identity survives reload; corrupt state is never regenerated
261
+ ok 40 - existing Wacando OMEMO identity survives reload; corrupt state is never regenerated
262
+ ---
263
+ duration_ms: 403.376792
264
+ type: 'test'
265
+ ...
266
+ # Subtest: installed MCP tools verify via HTTP and never expose response credentials
267
+ ok 41 - installed MCP tools verify via HTTP and never expose response credentials
268
+ ---
269
+ duration_ms: 88.259078
270
+ type: 'test'
271
+ ...
272
+ # Subtest: cursor packaged MCP rejects a locally revoked identity without crashing or reporting connection
273
+ ok 42 - cursor packaged MCP rejects a locally revoked identity without crashing or reporting connection
274
+ ---
275
+ duration_ms: 71.019902
276
+ type: 'test'
277
+ ...
278
+ # Subtest: codex packaged MCP rejects a locally revoked identity without crashing or reporting connection
279
+ ok 43 - codex packaged MCP rejects a locally revoked identity without crashing or reporting connection
280
+ ---
281
+ duration_ms: 73.068047
282
+ type: 'test'
283
+ ...
284
+ # Subtest: release version matches all manifests
285
+ ok 44 - release version matches all manifests
286
+ ---
287
+ duration_ms: 6.070935
288
+ type: 'test'
289
+ ...
290
+ # Subtest: local npm tarball contains standalone hosts and installer preserves existing installations
291
+ ok 45 - local npm tarball contains standalone hosts and installer preserves existing installations
292
+ ---
293
+ duration_ms: 1231.05584
294
+ type: 'test'
295
+ ...
296
+ # Subtest: codex package runs relocated without the repository and records its own provider
297
+ ok 46 - codex package runs relocated without the repository and records its own provider
298
+ ---
299
+ duration_ms: 180.434215
300
+ type: 'test'
301
+ ...
302
+ # Subtest: cursor package runs relocated without the repository and records its own provider
303
+ ok 47 - cursor package runs relocated without the repository and records its own provider
304
+ ---
305
+ duration_ms: 261.805562
306
+ type: 'test'
307
+ ...
308
+ # Subtest: claude package runs relocated without the repository and records its own provider
309
+ ok 48 - claude package runs relocated without the repository and records its own provider
310
+ ---
311
+ duration_ms: 190.058795
312
+ type: 'test'
313
+ ...
314
+ # Subtest: Claude, Cursor and Codex MCP processes have independent stores and ports
315
+ ok 49 - Claude, Cursor and Codex MCP processes have independent stores and ports
316
+ ---
317
+ duration_ms: 70.82851
318
+ type: 'test'
319
+ ...
320
+ # Subtest: Cursor installer copies a real package and refuses to overwrite an existing install
321
+ ok 50 - Cursor installer copies a real package and refuses to overwrite an existing install
322
+ ---
323
+ duration_ms: 301.01033
324
+ type: 'test'
325
+ ...
326
+ # Subtest: store validates messages, orders events and bounds retention
327
+ ok 51 - store validates messages, orders events and bounds retention
328
+ ---
329
+ duration_ms: 1.795423
330
+ type: 'test'
331
+ ...
332
+ # Subtest: loopback viewer serves assets and blocks cross-origin writes and traversal
333
+ ok 52 - loopback viewer serves assets and blocks cross-origin writes and traversal
334
+ ---
335
+ duration_ms: 31.956835
336
+ type: 'test'
337
+ ...
338
+ # Subtest: SSE delivers snapshot and live message, reconnect recovers snapshot
339
+ ok 53 - SSE delivers snapshot and live message, reconnect recovers snapshot
340
+ ---
341
+ duration_ms: 258.948192
342
+ type: 'test'
343
+ ...
344
+ # Subtest: MCP starts HTTP, records events and shuts down on stdin EOF
345
+ ok 54 - MCP starts HTTP, records events and shuts down on stdin EOF
346
+ ---
347
+ duration_ms: 58.386089
348
+ type: 'test'
349
+ ...
350
+ # Subtest: late history pages cannot duplicate live events, resurrect evictions or replace a new connection
351
+ ok 55 - late history pages cannot duplicate live events, resurrect evictions or replace a new connection
352
+ ---
353
+ duration_ms: 1.604591
354
+ type: 'test'
355
+ ...
356
+ # Subtest: history loading pins the snapshot sequence, follows cursors and respects cancellation
357
+ ok 56 - history loading pins the snapshot sequence, follows cursors and respects cancellation
358
+ ---
359
+ duration_ms: 1.007087
360
+ type: 'test'
361
+ ...
362
+ # Subtest: rate-limited history loading resumes from the same page instead of restarting the stream
363
+ ok 57 - rate-limited history loading resumes from the same page instead of restarting the stream
364
+ ---
365
+ duration_ms: 1001.664905
366
+ type: 'test'
367
+ ...
368
+ 1..57
369
+ # tests 57
370
+ # suites 0
371
+ # pass 54
372
+ # fail 0
373
+ # cancelled 0
374
+ # skipped 3
375
+ # todo 0
376
+ # duration_ms 5282.140907
@@ -0,0 +1,11 @@
1
+ {
2
+ "command": [
3
+ "timeout",
4
+ "20s",
5
+ "codex",
6
+ "exec",
7
+ "--help"
8
+ ],
9
+ "exit_code": 0,
10
+ "combined_output": "WARNING: proceeding, even though we could not create PATH aliases: Read-only file system (os error 30)\nRun Codex non-interactively\n\nUsage: codex exec [OPTIONS] [PROMPT]\n codex exec [OPTIONS] <COMMAND> [ARGS]\n\nCommands:\n resume Resume a previous session by id or pick the most recent with --last\n fork Fork a previous session by id into a new session\n review Run a code review against the current repository\n help Print this message or the help of the given subcommand(s)\n\nArguments:\n [PROMPT]\n Initial instructions for the agent. If not provided as an argument (or if `-` is used),\n instructions are read from stdin. If stdin is piped and a prompt is also provided, stdin\n is appended as a `<stdin>` block\n\nOptions:\n -c, --config <key=value>\n Override a configuration value that would otherwise be loaded from `~/.codex/config.toml`.\n Use a dotted path (`foo.bar.baz`) to override nested values. The `value` portion is parsed\n as TOML. If it fails to parse as TOML, the raw string is used as a literal.\n \n Examples: - `-c model=\"o3\"` - `-c 'sandbox_permissions=[\"disk-full-read-access\"]'` - `-c\n shell_environment_policy.inherit=all`\n\n --enable <FEATURE>\n Enable a feature (repeatable). Equivalent to `-c features.<name>=true`\n\n --disable <FEATURE>\n Disable a feature (repeatable). Equivalent to `-c features.<name>=false`\n\n --strict-config\n Error out when config.toml contains fields that are not recognized by this version of\n Codex\n\n -i, --image <FILE>...\n Optional image(s) to attach to the initial prompt\n\n -m, --model <MODEL>\n Model the agent should use\n\n --oss\n Use open-source provider\n\n --local-provider <OSS_PROVIDER>\n Specify which local provider to use (lmstudio or ollama). If not specified with --oss,\n will use config default or show selection\n\n -p, --profile <CONFIG_PROFILE_V2>\n Layer $CODEX_HOME/<name>.config.toml on top of the base user config\n\n -s, --sandbox <SANDBOX_MODE>\n Select the sandbox policy to use when executing model-generated shell commands\n \n [possible values: read-only, workspace-write, danger-full-access]\n\n --approve-for-me\n Route approval requests through automatic review using the workspace-write sandbox\n\n --dangerously-bypass-approvals-and-sandbox\n Skip all confirmation prompts and execute commands without sandboxing. EXTREMELY\n DANGEROUS. Intended solely for running in environments that are externally sandboxed\n\n --dangerously-bypass-hook-trust\n Run enabled hooks without requiring persisted hook trust for this invocation. DANGEROUS.\n Intended only for automation that already vets hook sources\n\n -C, --cd <DIR>\n Tell the agent to use the specified directory as its working root\n\n --worktree\n Run the session in a new managed Git worktree\n\n --add-dir <DIR>\n Additional directories that should be writable alongside the primary workspace\n\n --thread-source <SOURCE>\n Source classification for newly created or forked threads\n\n --cyber-access-program <PROGRAM>\n Request an experimental Cyber access program for this turn (OpenAI provider only). Omit to\n use server defaults. Not supported with review; fork requires a prompt\n \n [possible values: standard, daybreak_blue, daybreak_red]\n\n --skip-git-repo-check\n Allow running Codex outside a Git repository\n\n --ephemeral\n Run without persisting session files to disk\n\n --ignore-user-config\n Do not load `$CODEX_HOME/config.toml`; auth still uses `CODEX_HOME`\n\n --ignore-rules\n Do not load user or project execpolicy `.rules` files\n\n --output-schema <FILE>\n Path to a JSON Schema file describing the model's final response shape\n\n --color <COLOR>\n Specifies color settings for use in the output\n \n [default: auto]\n [possible values: always, never, auto]\n\n --json\n Print events to stdout as JSONL\n\n -o, --output-last-message <FILE>\n Specifies file where the last message from the agent should be written\n\n -h, --help\n Print help (see a summary with '-h')\n\n -V, --version\n Print version\n"
11
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "command": [
3
+ "timeout",
4
+ "20s",
5
+ "codex",
6
+ "--help"
7
+ ],
8
+ "exit_code": 0,
9
+ "combined_output": "WARNING: proceeding, even though we could not create PATH aliases: Read-only file system (os error 30)\nCodex CLI\n\nIf no subcommand is specified, options will be forwarded to the interactive CLI.\n\nUsage: codex [OPTIONS] [PROMPT]\n codex [OPTIONS] <COMMAND> [ARGS]\n\nCommands:\n agents Browse all agent sessions on the shared local app-server daemon\n exec Run Codex non-interactively [aliases: e]\n review Run a code review non-interactively\n login Manage login\n logout Remove stored authentication credentials\n mcp Manage external MCP servers for Codex\n plugin Manage Codex plugins\n app-server [experimental] Run the app server or related tooling\n remote-control [experimental] Manage the app-server daemon with remote control enabled\n completion Generate shell completion scripts\n update Update Codex to the latest version\n doctor Diagnose local Codex installation, config, auth, and runtime health\n sandbox Run commands within a Codex-provided sandbox\n debug Debugging tools\n apply Apply the latest diff produced by Codex agent as a `git apply` to your local\n working tree [aliases: a]\n resume Resume a previous interactive session (picker by default; use --last to continue\n the most recent)\n queue Queue a message for an existing session\n archive Archive a saved session by id or session name\n delete Permanently delete a saved session by id or session name\n migrate-rollouts Inspect or migrate legacy local sessions to paginated thread history\n unarchive Unarchive a saved session by id or session name\n fork Fork a previous interactive session (picker by default; use --last to fork the\n most recent)\n cloud [EXPERIMENTAL] Browse tasks from Codex Cloud and apply changes locally\n exec-server [EXPERIMENTAL] Run the standalone exec-server service\n features Inspect feature flags\n help Print this message or the help of the given subcommand(s)\n\nArguments:\n [PROMPT]\n Optional user prompt to start the session\n\nOptions:\n -c, --config <key=value>\n Override a configuration value that would otherwise be loaded from `~/.codex/config.toml`.\n Use a dotted path (`foo.bar.baz`) to override nested values. The `value` portion is parsed\n as TOML. If it fails to parse as TOML, the raw string is used as a literal.\n \n Examples: - `-c model=\"o3\"` - `-c 'sandbox_permissions=[\"disk-full-read-access\"]'` - `-c\n shell_environment_policy.inherit=all`\n\n --enable <FEATURE>\n Enable a feature (repeatable). Equivalent to `-c features.<name>=true`\n\n --disable <FEATURE>\n Disable a feature (repeatable). Equivalent to `-c features.<name>=false`\n\n --remote <ADDR>\n Connect the TUI to a remote app server endpoint.\n \n Accepted forms: `ws://host:port`, `wss://host:port`, `unix://`, or `unix://PATH`.\n\n --remote-auth-token-env <ENV_VAR>\n Name of the environment variable containing the bearer token to send to a remote app\n server websocket\n\n --strict-config\n Error out when config.toml contains fields that are not recognized by this version of\n Codex\n\n -i, --image <FILE>...\n Optional image(s) to attach to the initial prompt\n\n -m, --model <MODEL>\n Model the agent should use\n\n --oss\n Use open-source provider\n\n --local-provider <OSS_PROVIDER>\n Specify which local provider to use (lmstudio or ollama). If not specified with --oss,\n will use config default or show selection\n\n -p, --profile <CONFIG_PROFILE_V2>\n Layer $CODEX_HOME/<name>.config.toml on top of the base user config\n\n -s, --sandbox <SANDBOX_MODE>\n Select the sandbox policy to use when executing model-generated shell commands\n \n [possible values: read-only, workspace-write, danger-full-access]\n\n --approve-for-me\n Route approval requests through automatic review using the workspace-write sandbox\n\n --dangerously-bypass-approvals-and-sandbox\n Skip all confirmation prompts and execute commands without sandboxing. EXTREMELY\n DANGEROUS. Intended solely for running in environments that are externally sandboxed\n\n --dangerously-bypass-hook-trust\n Run enabled hooks without requiring persisted hook trust for this invocation. DANGEROUS.\n Intended only for automation that already vets hook sources\n\n -C, --cd <DIR>\n Tell the agent to use the specified directory as its working root\n\n --worktree\n Run the session in a new managed Git worktree\n\n --add-dir <DIR>\n Additional directories that should be writable alongside the primary workspace\n\n -a, --ask-for-approval <APPROVAL_POLICY>\n Configure when the model requires human approval before executing a command\n\n Possible values:\n - on-request: The model decides when to ask the user for approval\n - never: Never ask for user approval Execution failures are immediately returned to\n the model\n\n --search\n Enable live web search. When enabled, the native Responses `web_search` tool is available\n to the model (no per\u2011call approval)\n\n --no-alt-screen\n Disable alternate screen mode\n \n Runs the TUI in inline mode, preserving terminal scrollback history.\n\n --no-daemon\n Run without the shared background server, even if it is already running\n\n -h, --help\n Print help (see a summary with '-h')\n\n -V, --version\n Print version\n"
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "command": [
3
+ "timeout",
4
+ "20s",
5
+ "cursor-agent",
6
+ "--help"
7
+ ],
8
+ "exit_code": 0,
9
+ "combined_output": "Usage: agent [options] [command] [prompt...]\n\nStart the Cursor Agent\n\nArguments:\n prompt Initial prompt for the agent\n\nOptions:\n -v, --version Output the version number\n --api-key <key> API key for authentication (can also use\n CURSOR_API_KEY env var)\n -H, --header <header> Add custom header to agent requests (format:\n 'Name: Value', can be used multiple times)\n -e, --endpoint <url> Target API endpoint URL (can also use\n CURSOR_API_ENDPOINT env var) (default:\n \"https://api2.cursor.sh\", env:\n CURSOR_API_ENDPOINT)\n -p, --print Print responses to console (for scripts or\n non-interactive use). Has access to all tools,\n including write and shell. (default: false)\n --output-format <format> Output format (only works with --print): text |\n json | stream-json (default: \"text\")\n --stream-partial-output Stream partial output as individual text deltas\n (only works with --print and stream-json format)\n (default: false)\n --mode <mode> Start in the given execution mode. plan:\n read-only/planning (analyze, propose plans, no\n edits). ask: Q&A style for explanations and\n questions (read-only). (choices: \"plan\", \"ask\")\n --plan Start in plan mode (shorthand for --mode=plan).\n (default: false)\n --resume [chatId] Select a session to resume (default: false)\n --continue Continue previous session (default: false)\n --model <model> Model to use (e.g., gpt-5, sonnet-4-thinking).\n Parameterized models accept quoted bracket\n overrides, e.g.\n 'claude-opus-4-8[context=1m,effort=high,fast=false]'\n --list-models List available models and exit (default: false)\n -f, --force Force allow commands unless explicitly denied\n (default: false)\n --yolo Alias for --force (Run Everything) (default:\n false)\n --auto-review Use Auto-review (Smart Auto): a server classifier\n auto-runs safe tool calls and prompts for the\n rest (default: false)\n --sandbox <mode> Explicitly enable or disable sandbox mode\n (overrides config) (choices: \"enabled\",\n \"disabled\")\n --approve-mcps Automatically approve all MCP servers (default:\n false)\n --trust Trust the current workspace without prompting\n (default: false)\n --workspace <path-or-name> Workspace directory or saved workspace name to\n use (defaults to current working directory)\n --add-dir <path> Add an additional workspace root directory (can\n be specified multiple times)\n --plugin-dir <path> Load a local plugin directory (can be specified\n multiple times)\n -w, --worktree [name] Start in an isolated git worktree at\n ~/.cursor/worktrees/<reponame>/<name>. If\n omitted, a name is generated.\n --worktree-base <branch> Branch or ref to base the new worktree on\n (default: current HEAD)\n --skip-worktree-setup Skip running worktree setup scripts from\n .cursor/worktrees.json (default: false)\n -h, --help Display help for command\n\nCommands:\n persist Start or manage a session that survives terminal\n disconnects\n install-shell-integration Install shell integration to ~/.zshrc\n uninstall-shell-integration Remove shell integration from ~/.zshrc\n login Authenticate with Cursor. Set NO_OPEN_BROWSER to\n disable browser opening.\n logout Sign out and clear stored authentication\n mcp Manage MCP servers\n plugin Manage plugins and plugin marketplaces\n worker [options] Run a self-hosted Cloud Agent worker that\n connects to Cursor and executes agent tool calls\n on this machine. Without --pool it is a personal\n My Machines worker (no Enterprise plan needed);\n with --pool it joins a team Self-Hosted Pool\n (Enterprise plan + service account API key).\n status|whoami [options] View authentication status\n models List available models for this account\n team View or switch the active team for this account\n bedrock Configure AWS Bedrock usage for CLI\n about [options] Display version, system, and account information\n update Update Cursor Agent to the latest version\n create-chat Create a new empty chat and return its ID\n generate-rule|rule Generate a new Cursor rule with interactive\n prompts\n agent [prompt...] Start the Cursor Agent\n ls Resume a chat session\n resume Resume the latest chat session\n help [command] Display help for command\n"
10
+ }