@pi-in-go/pigpen-ahp 0.1.0
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/CREDITS.md +27 -0
- package/LICENSE +23 -0
- package/README.md +148 -0
- package/extensions/ahp/access_options_test.go +116 -0
- package/extensions/ahp/extension.go +54 -0
- package/extensions/ahp/go.mod +12 -0
- package/extensions/ahp/go.sum +2 -0
- package/extensions/ahp/go.work +8 -0
- package/extensions/ahp/internal/channels/chat.go +110 -0
- package/extensions/ahp/internal/channels/root.go +32 -0
- package/extensions/ahp/internal/channels/session.go +128 -0
- package/extensions/ahp/internal/channels/session_test.go +108 -0
- package/extensions/ahp/internal/compose/compose.go +153 -0
- package/extensions/ahp/internal/compose/compose_test.go +120 -0
- package/extensions/ahp/internal/gaps/gaps_test.go +88 -0
- package/extensions/ahp/internal/host/handshake_test.go +206 -0
- package/extensions/ahp/internal/host/host.go +1305 -0
- package/extensions/ahp/internal/host/reconnect_test.go +197 -0
- package/extensions/ahp/internal/host/replaywindow_test.go +31 -0
- package/extensions/ahp/internal/host/schema_test.go +79 -0
- package/extensions/ahp/internal/host/store.go +291 -0
- package/extensions/ahp/internal/host/store_update_test.go +85 -0
- package/extensions/ahp/internal/host/subscriptions_test.go +160 -0
- package/extensions/ahp/internal/host/surface_test.go +95 -0
- package/extensions/ahp/internal/host/workarounds.go +458 -0
- package/extensions/ahp/internal/host/workarounds_test.go +96 -0
- package/extensions/ahp/internal/live/live.go +328 -0
- package/extensions/ahp/internal/live/live_test.go +91 -0
- package/extensions/ahp/internal/live/store.go +113 -0
- package/extensions/ahp/internal/mapper/activity.go +199 -0
- package/extensions/ahp/internal/mapper/activity_test.go +188 -0
- package/extensions/ahp/internal/mapper/bench_test.go +38 -0
- package/extensions/ahp/internal/mapper/event_mapper_test.go +380 -0
- package/extensions/ahp/internal/mapper/fixtures_test.go +387 -0
- package/extensions/ahp/internal/mapper/helpers_test.go +251 -0
- package/extensions/ahp/internal/mapper/js.go +131 -0
- package/extensions/ahp/internal/mapper/mapper.go +600 -0
- package/extensions/ahp/internal/mapper/message_input_test.go +196 -0
- package/extensions/ahp/internal/mapper/messageinput.go +272 -0
- package/extensions/ahp/internal/mapper/schema_helpers_test.go +5 -0
- package/extensions/ahp/internal/mapper/testdata/LICENSE-pi-ahp +21 -0
- package/extensions/ahp/internal/mapper/testdata/fixtures/abort.json +711 -0
- package/extensions/ahp/internal/mapper/testdata/fixtures/bash-long-output.json +1312 -0
- package/extensions/ahp/internal/mapper/testdata/fixtures/compaction.json +6285 -0
- package/extensions/ahp/internal/mapper/testdata/fixtures/parallel-tools.json +2622 -0
- package/extensions/ahp/internal/mapper/testdata/fixtures/plain-text.json +1856 -0
- package/extensions/ahp/internal/mapper/testdata/fixtures/single-tool.json +1128 -0
- package/extensions/ahp/internal/mapper/testdata/fixtures/steering.json +3926 -0
- package/extensions/ahp/internal/mapper/testdata/fixtures/tool-bash.json +2372 -0
- package/extensions/ahp/internal/mapper/testdata/fixtures/tool-edit.json +3983 -0
- package/extensions/ahp/internal/mapper/testdata/fixtures/tool-error.json +2850 -0
- package/extensions/ahp/internal/mapper/testdata/fixtures/tool-find.json +1162 -0
- package/extensions/ahp/internal/mapper/testdata/fixtures/tool-grep.json +2783 -0
- package/extensions/ahp/internal/mapper/testdata/fixtures/tool-loop.json +1693 -0
- package/extensions/ahp/internal/mapper/testdata/fixtures/tool-ls.json +2427 -0
- package/extensions/ahp/internal/mapper/testdata/fixtures/tool-write.json +1271 -0
- package/extensions/ahp/internal/mapper/title.go +34 -0
- package/extensions/ahp/internal/mapper/usermsg.go +87 -0
- package/extensions/ahp/internal/pi/activeturn_test.go +296 -0
- package/extensions/ahp/internal/pi/backend.go +64 -0
- package/extensions/ahp/internal/pi/catalogue.go +370 -0
- package/extensions/ahp/internal/pi/catalogue_test.go +271 -0
- package/extensions/ahp/internal/pi/chatdriver.go +533 -0
- package/extensions/ahp/internal/pi/chatdriver_test.go +416 -0
- package/extensions/ahp/internal/pi/clientactions.go +212 -0
- package/extensions/ahp/internal/pi/clientactions_test.go +273 -0
- package/extensions/ahp/internal/pi/completions.go +230 -0
- package/extensions/ahp/internal/pi/completions_test.go +272 -0
- package/extensions/ahp/internal/pi/config_test.go +269 -0
- package/extensions/ahp/internal/pi/deletesession.go +69 -0
- package/extensions/ahp/internal/pi/deletesession_test.go +153 -0
- package/extensions/ahp/internal/pi/disposal_test.go +362 -0
- package/extensions/ahp/internal/pi/fixture_test.go +308 -0
- package/extensions/ahp/internal/pi/foreign_test.go +122 -0
- package/extensions/ahp/internal/pi/harness_test.go +83 -0
- package/extensions/ahp/internal/pi/history.go +269 -0
- package/extensions/ahp/internal/pi/hydrated_test.go +171 -0
- package/extensions/ahp/internal/pi/hydratedlifecycle_test.go +196 -0
- package/extensions/ahp/internal/pi/hydration_test.go +209 -0
- package/extensions/ahp/internal/pi/hydrator.go +212 -0
- package/extensions/ahp/internal/pi/imageinput.go +224 -0
- package/extensions/ahp/internal/pi/imageinput_test.go +57 -0
- package/extensions/ahp/internal/pi/lifecycle_test.go +381 -0
- package/extensions/ahp/internal/pi/models.go +212 -0
- package/extensions/ahp/internal/pi/models_test.go +128 -0
- package/extensions/ahp/internal/pi/paging.go +95 -0
- package/extensions/ahp/internal/pi/pagingtruncate_test.go +323 -0
- package/extensions/ahp/internal/pi/projecttrust.go +222 -0
- package/extensions/ahp/internal/pi/registry.go +924 -0
- package/extensions/ahp/internal/pi/restart_test.go +185 -0
- package/extensions/ahp/internal/pi/services.go +70 -0
- package/extensions/ahp/internal/pi/sessionconfig.go +64 -0
- package/extensions/ahp/internal/pi/sessionfiles_test.go +74 -0
- package/extensions/ahp/internal/pi/sessionstore.go +83 -0
- package/extensions/ahp/internal/pi/summary_test.go +426 -0
- package/extensions/ahp/internal/pi/workarounds_wire_test.go +208 -0
- package/extensions/ahp/internal/pisession/fromentries_test.go +32 -0
- package/extensions/ahp/internal/pisession/json.go +31 -0
- package/extensions/ahp/internal/pisession/pisession.go +580 -0
- package/extensions/ahp/internal/settings/access.go +63 -0
- package/extensions/ahp/internal/settings/access_test.go +52 -0
- package/extensions/ahp/internal/settings/settings.go +117 -0
- package/extensions/ahp/internal/settings/settings_test.go +104 -0
- package/extensions/ahp/internal/svc/etag_other.go +15 -0
- package/extensions/ahp/internal/svc/etag_unix.go +34 -0
- package/extensions/ahp/internal/svc/glob.go +197 -0
- package/extensions/ahp/internal/svc/mime.go +37 -0
- package/extensions/ahp/internal/svc/paths.go +108 -0
- package/extensions/ahp/internal/svc/pty.go +64 -0
- package/extensions/ahp/internal/svc/pty_darwin.go +42 -0
- package/extensions/ahp/internal/svc/pty_linux.go +36 -0
- package/extensions/ahp/internal/svc/pty_other.go +9 -0
- package/extensions/ahp/internal/svc/pty_test.go +114 -0
- package/extensions/ahp/internal/svc/pty_unix.go +147 -0
- package/extensions/ahp/internal/svc/resource.go +495 -0
- package/extensions/ahp/internal/svc/resource_test.go +501 -0
- package/extensions/ahp/internal/svc/stat_bsd.go +9 -0
- package/extensions/ahp/internal/svc/stat_linux.go +9 -0
- package/extensions/ahp/internal/svc/terminal.go +454 -0
- package/extensions/ahp/internal/svc/terminal_test.go +512 -0
- package/extensions/ahp/internal/svc/watch.go +590 -0
- package/extensions/ahp/internal/svc/watch_test.go +627 -0
- package/extensions/ahp/internal/svc/watchevents_test.go +452 -0
- package/extensions/ahp/internal/svc/watchpolicy.go +81 -0
- package/extensions/ahp/internal/svc/watchpolicy_test.go +151 -0
- package/extensions/ahp/internal/svc/watchracy_test.go +61 -0
- package/extensions/ahp/internal/testkit/schema/LICENSE-agent-host-protocol +21 -0
- package/extensions/ahp/internal/testkit/schema/actions.schema.json +9208 -0
- package/extensions/ahp/internal/testkit/schema/commands.schema.json +10862 -0
- package/extensions/ahp/internal/testkit/schema/errors.schema.json +10928 -0
- package/extensions/ahp/internal/testkit/schema/notifications.schema.json +6667 -0
- package/extensions/ahp/internal/testkit/schema/state.schema.json +6392 -0
- package/extensions/ahp/internal/testkit/schema.go +360 -0
- package/extensions/ahp/internal/testkit/testkit.go +367 -0
- package/extensions/ahp/internal/twin/twin.go +27 -0
- package/extensions/ahp/internal/wire/dispatchable.go +106 -0
- package/extensions/ahp/internal/wire/dispatchable_list.go +15 -0
- package/extensions/ahp/internal/wire/helpers_test.go +5 -0
- package/extensions/ahp/internal/wire/wire.go +218 -0
- package/extensions/ahp/internal/wire/wire_test.go +123 -0
- package/extensions/ahp/internal/ws/helpers_test.go +7 -0
- package/extensions/ahp/internal/ws/vscode_test.go +198 -0
- package/extensions/ahp/internal/ws/ws.go +674 -0
- package/extensions/ahp/internal/ws/ws_test.go +324 -0
- package/extensions/ahp/realpig_test.go +589 -0
- package/extensions/ahp/runtime.go +311 -0
- package/extensions/ahp/runtime_test.go +110 -0
- package/extensions/ahp/testdata/upstream-tests.json +3833 -0
- package/extensions/ahp/third_party/agent-host-protocol-go/LICENSE +21 -0
- package/extensions/ahp/third_party/agent-host-protocol-go/NOTICE-PIGPEN.md +18 -0
- package/extensions/ahp/third_party/agent-host-protocol-go/ahp/client.go +1011 -0
- package/extensions/ahp/third_party/agent-host-protocol-go/ahp/error.go +111 -0
- package/extensions/ahp/third_party/agent-host-protocol-go/ahp/multi_host_state_mirror.go +239 -0
- package/extensions/ahp/third_party/agent-host-protocol-go/ahp/reducers.go +1939 -0
- package/extensions/ahp/third_party/agent-host-protocol-go/ahp/transport.go +176 -0
- package/extensions/ahp/third_party/agent-host-protocol-go/ahptypes/actions.generated.go +2447 -0
- package/extensions/ahp/third_party/agent-host-protocol-go/ahptypes/commands.generated.go +1546 -0
- package/extensions/ahp/third_party/agent-host-protocol-go/ahptypes/common.go +205 -0
- package/extensions/ahp/third_party/agent-host-protocol-go/ahptypes/errors.generated.go +65 -0
- package/extensions/ahp/third_party/agent-host-protocol-go/ahptypes/messages.generated.go +138 -0
- package/extensions/ahp/third_party/agent-host-protocol-go/ahptypes/notifications.generated.go +264 -0
- package/extensions/ahp/third_party/agent-host-protocol-go/ahptypes/state.generated.go +6171 -0
- package/extensions/ahp/third_party/agent-host-protocol-go/ahptypes/version.generated.go +31 -0
- package/extensions/ahp/third_party/agent-host-protocol-go/go.mod +3 -0
- package/extensions/ahp/twins_test.go +91 -0
- package/package.json +40 -0
- package/proof/PORT.md +121 -0
- package/proof/mutations.json +152 -0
- package/proof/oracle/LICENSE +21 -0
- package/proof/oracle/README.md +120 -0
- package/proof/oracle/UPSTREAM.md +7 -0
- package/proof/oracle/package.json +68 -0
- package/proof/oracle/src/bin/cli.ts +66 -0
- package/proof/oracle/src/bin/tunnel.ts +128 -0
- package/proof/oracle/src/channels/chat.ts +134 -0
- package/proof/oracle/src/channels/root.ts +39 -0
- package/proof/oracle/src/channels/session.ts +118 -0
- package/proof/oracle/src/channels/terminal.ts +11 -0
- package/proof/oracle/src/core/channels.ts +108 -0
- package/proof/oracle/src/core/client-workarounds.ts +358 -0
- package/proof/oracle/src/core/connection.ts +41 -0
- package/proof/oracle/src/core/host.ts +882 -0
- package/proof/oracle/src/core/sequencer.ts +75 -0
- package/proof/oracle/src/core/state-store.ts +162 -0
- package/proof/oracle/src/core/uri.ts +25 -0
- package/proof/oracle/src/host/direct-settings.ts +110 -0
- package/proof/oracle/src/host/pi-host.ts +220 -0
- package/proof/oracle/src/host/serve.ts +71 -0
- package/proof/oracle/src/host/terminal-service.ts +346 -0
- package/proof/oracle/src/pi/activity.ts +171 -0
- package/proof/oracle/src/pi/changeset-service.ts +646 -0
- package/proof/oracle/src/pi/changeset-uri.ts +64 -0
- package/proof/oracle/src/pi/chat-driver.ts +529 -0
- package/proof/oracle/src/pi/completions.ts +160 -0
- package/proof/oracle/src/pi/delete-session.ts +53 -0
- package/proof/oracle/src/pi/event-mapper.ts +648 -0
- package/proof/oracle/src/pi/git-changes.ts +605 -0
- package/proof/oracle/src/pi/history.ts +305 -0
- package/proof/oracle/src/pi/image-input.ts +56 -0
- package/proof/oracle/src/pi/image-mime.ts +8 -0
- package/proof/oracle/src/pi/in-process-backend.ts +155 -0
- package/proof/oracle/src/pi/message-input.ts +212 -0
- package/proof/oracle/src/pi/models.ts +124 -0
- package/proof/oracle/src/pi/project-trust.ts +66 -0
- package/proof/oracle/src/pi/provider.ts +2 -0
- package/proof/oracle/src/pi/resource-paths.ts +80 -0
- package/proof/oracle/src/pi/resource-service.ts +356 -0
- package/proof/oracle/src/pi/resource-watch-policy.ts +35 -0
- package/proof/oracle/src/pi/resource-watch.ts +357 -0
- package/proof/oracle/src/pi/session-catalogue.ts +318 -0
- package/proof/oracle/src/pi/session-config.ts +84 -0
- package/proof/oracle/src/pi/session-history.ts +75 -0
- package/proof/oracle/src/pi/session-hydrator.ts +219 -0
- package/proof/oracle/src/pi/session-registry.ts +815 -0
- package/proof/oracle/src/pi/session-storage.ts +29 -0
- package/proof/oracle/src/pi/session-title.ts +18 -0
- package/proof/oracle/src/pi/turn-paging.ts +94 -0
- package/proof/oracle/src/pi/user-message.ts +66 -0
- package/proof/oracle/src/protocol/errors.ts +44 -0
- package/proof/oracle/src/protocol/jsonrpc.ts +89 -0
- package/proof/oracle/src/protocol/version.ts +39 -0
- package/proof/oracle/src/transport/websocket.ts +136 -0
- package/proof/oracle/src/tunnel/devtunnel.ts +293 -0
- package/proof/oracle/src/tunnel/discovery.ts +37 -0
- package/proof/oracle/test/active-turn-reconnect.test.ts +274 -0
- package/proof/oracle/test/activity.test.ts +171 -0
- package/proof/oracle/test/changeset-lifecycle.test.serial.ts +303 -0
- package/proof/oracle/test/changeset-uri.test.ts +37 -0
- package/proof/oracle/test/changeset.test.serial.ts +487 -0
- package/proof/oracle/test/chat-driver.test.ts +691 -0
- package/proof/oracle/test/client-actions.test.ts +409 -0
- package/proof/oracle/test/client-workarounds.test.ts +320 -0
- package/proof/oracle/test/completions.test.ts +323 -0
- package/proof/oracle/test/delete-session.test.ts +142 -0
- package/proof/oracle/test/direct-settings.test.ts +81 -0
- package/proof/oracle/test/event-mapper.test.ts +619 -0
- package/proof/oracle/test/fetch-turns.test.ts +207 -0
- package/proof/oracle/test/fixtures/abort.json +711 -0
- package/proof/oracle/test/fixtures/bash-long-output.json +1312 -0
- package/proof/oracle/test/fixtures/compaction.json +6285 -0
- package/proof/oracle/test/fixtures/parallel-tools.json +2622 -0
- package/proof/oracle/test/fixtures/plain-text.json +1856 -0
- package/proof/oracle/test/fixtures/single-tool.json +1128 -0
- package/proof/oracle/test/fixtures/steering.json +3926 -0
- package/proof/oracle/test/fixtures/tool-bash.json +2372 -0
- package/proof/oracle/test/fixtures/tool-edit.json +3983 -0
- package/proof/oracle/test/fixtures/tool-error.json +2850 -0
- package/proof/oracle/test/fixtures/tool-find.json +1162 -0
- package/proof/oracle/test/fixtures/tool-grep.json +2783 -0
- package/proof/oracle/test/fixtures/tool-loop.json +1693 -0
- package/proof/oracle/test/fixtures/tool-ls.json +2427 -0
- package/proof/oracle/test/fixtures/tool-write.json +1271 -0
- package/proof/oracle/test/handshake.test.ts +275 -0
- package/proof/oracle/test/harness.ts +153 -0
- package/proof/oracle/test/hydrated-session-lifecycle.test.ts +211 -0
- package/proof/oracle/test/image-input.test.ts +28 -0
- package/proof/oracle/test/image-session.test.ts +69 -0
- package/proof/oracle/test/live-turn.test.ts +304 -0
- package/proof/oracle/test/mapper-fixtures.test.ts +293 -0
- package/proof/oracle/test/message-input.test.ts +181 -0
- package/proof/oracle/test/model-discovery.test.ts +170 -0
- package/proof/oracle/test/models.test.ts +109 -0
- package/proof/oracle/test/pi-host.test.ts +91 -0
- package/proof/oracle/test/pi-replay.test.ts +141 -0
- package/proof/oracle/test/project-trust.test.ts +125 -0
- package/proof/oracle/test/protocol-surface.test.ts +121 -0
- package/proof/oracle/test/pty.test.ts +100 -0
- package/proof/oracle/test/reconnect.test.ts +389 -0
- package/proof/oracle/test/resource-watch-policy.test.ts +78 -0
- package/proof/oracle/test/resource-watch.test.serial.ts +536 -0
- package/proof/oracle/test/resource.test.ts +499 -0
- package/proof/oracle/test/schema.test.ts +88 -0
- package/proof/oracle/test/session-catalogue.test.ts +314 -0
- package/proof/oracle/test/session-config.test.ts +224 -0
- package/proof/oracle/test/session-disposal.test.ts +364 -0
- package/proof/oracle/test/session-hydration.test.ts +194 -0
- package/proof/oracle/test/session-lifecycle.test.ts +416 -0
- package/proof/oracle/test/session-storage.test.serial.ts +32 -0
- package/proof/oracle/test/session-summary.test.ts +418 -0
- package/proof/oracle/test/subscriptions.test.ts +198 -0
- package/proof/oracle/test/support/assertions.ts +32 -0
- package/proof/oracle/test/support/async.ts +26 -0
- package/proof/oracle/test/support/hydrated-session.ts +205 -0
- package/proof/oracle/test/support/images.ts +8 -0
- package/proof/oracle/test/support/recorded-fixtures.ts +60 -0
- package/proof/oracle/test/support/recorded-scenarios.ts +145 -0
- package/proof/oracle/test/support/replay.ts +194 -0
- package/proof/oracle/test/support/schema.ts +221 -0
- package/proof/oracle/test/support/session-files.ts +12 -0
- package/proof/oracle/test/support/session-storage.ts +22 -0
- package/proof/oracle/test/support/upstream.ts +25 -0
- package/proof/oracle/test/support/watch-events.ts +108 -0
- package/proof/oracle/test/terminal-service.test.ts +495 -0
- package/proof/oracle/test/truncate.test.ts +230 -0
- package/proof/oracle/test/tunnel.test.ts +258 -0
- package/proof/oracle/test/upstream-workarounds.test.ts +37 -0
- package/proof/oracle/test/uri.test.ts +24 -0
- package/proof/oracle/test/watch-events.test.ts +118 -0
- package/proof/oracle/tsconfig.json +32 -0
- package/proof/proof-piglet/piglet.yaml +18 -0
- package/proof/tools/fakellm/go.mod +3 -0
- package/proof/tools/fakellm/main.go +109 -0
- package/proof/tools/gen-dispatchable.py +30 -0
- package/provenance.json +28 -0
|
@@ -0,0 +1,3833 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"file": "active-turn-reconnect",
|
|
4
|
+
"serial": false,
|
|
5
|
+
"suite": [
|
|
6
|
+
"active-turn reconnect"
|
|
7
|
+
],
|
|
8
|
+
"title": "replays offline output and accepts steering and cancellation after reconnect",
|
|
9
|
+
"ok": true
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"file": "active-turn-reconnect",
|
|
13
|
+
"serial": false,
|
|
14
|
+
"suite": [
|
|
15
|
+
"active-turn reconnect"
|
|
16
|
+
],
|
|
17
|
+
"title": "replays a turn that completed while its client was offline",
|
|
18
|
+
"ok": true
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"file": "active-turn-reconnect",
|
|
22
|
+
"serial": false,
|
|
23
|
+
"suite": [
|
|
24
|
+
"active-turn reconnect"
|
|
25
|
+
],
|
|
26
|
+
"title": "falls back to an active-turn snapshot and continues streaming",
|
|
27
|
+
"ok": true
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"file": "activity",
|
|
31
|
+
"serial": false,
|
|
32
|
+
"suite": [
|
|
33
|
+
"activity descriptions"
|
|
34
|
+
],
|
|
35
|
+
"title": "names the file a read touches",
|
|
36
|
+
"ok": true
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"file": "activity",
|
|
40
|
+
"serial": false,
|
|
41
|
+
"suite": [
|
|
42
|
+
"activity descriptions"
|
|
43
|
+
],
|
|
44
|
+
"title": "renders paths relative to the workspace",
|
|
45
|
+
"ok": true
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"file": "activity",
|
|
49
|
+
"serial": false,
|
|
50
|
+
"suite": [
|
|
51
|
+
"activity descriptions"
|
|
52
|
+
],
|
|
53
|
+
"title": "shows the command a bash call runs",
|
|
54
|
+
"ok": true
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"file": "activity",
|
|
58
|
+
"serial": false,
|
|
59
|
+
"suite": [
|
|
60
|
+
"activity descriptions"
|
|
61
|
+
],
|
|
62
|
+
"title": "shortens the middle, keeping both informative ends",
|
|
63
|
+
"ok": true
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"file": "activity",
|
|
67
|
+
"serial": false,
|
|
68
|
+
"suite": [
|
|
69
|
+
"activity descriptions"
|
|
70
|
+
],
|
|
71
|
+
"title": "falls back to the tool's own name",
|
|
72
|
+
"ok": true
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"file": "activity",
|
|
76
|
+
"serial": false,
|
|
77
|
+
"suite": [
|
|
78
|
+
"activity descriptions"
|
|
79
|
+
],
|
|
80
|
+
"title": "copes with missing arguments",
|
|
81
|
+
"ok": true
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"file": "activity",
|
|
85
|
+
"serial": false,
|
|
86
|
+
"suite": [
|
|
87
|
+
"activity over a turn"
|
|
88
|
+
],
|
|
89
|
+
"title": "tracks thinking, tools, and responding in order",
|
|
90
|
+
"ok": true
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"file": "activity",
|
|
94
|
+
"serial": false,
|
|
95
|
+
"suite": [
|
|
96
|
+
"activity over a turn"
|
|
97
|
+
],
|
|
98
|
+
"title": "clears the description when the turn ends",
|
|
99
|
+
"ok": true
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"file": "activity",
|
|
103
|
+
"serial": false,
|
|
104
|
+
"suite": [
|
|
105
|
+
"activity over a turn"
|
|
106
|
+
],
|
|
107
|
+
"title": "clears it on a cancelled turn too",
|
|
108
|
+
"ok": true
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"file": "activity",
|
|
112
|
+
"serial": false,
|
|
113
|
+
"suite": [
|
|
114
|
+
"activity over a turn"
|
|
115
|
+
],
|
|
116
|
+
"title": "does not re-send an unchanged description",
|
|
117
|
+
"ok": true
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"file": "activity",
|
|
121
|
+
"serial": false,
|
|
122
|
+
"suite": [
|
|
123
|
+
"activity over a turn"
|
|
124
|
+
],
|
|
125
|
+
"title": "emits schema-conforming actions",
|
|
126
|
+
"ok": true
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"file": "activity",
|
|
130
|
+
"serial": false,
|
|
131
|
+
"suite": [
|
|
132
|
+
"activity over a turn",
|
|
133
|
+
"toolInputFor"
|
|
134
|
+
],
|
|
135
|
+
"title": "shows the one argument a call is about",
|
|
136
|
+
"ok": true
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"file": "activity",
|
|
140
|
+
"serial": false,
|
|
141
|
+
"suite": [
|
|
142
|
+
"activity over a turn",
|
|
143
|
+
"toolInputFor"
|
|
144
|
+
],
|
|
145
|
+
"title": "keeps a search's scope, and drops the defaults models restate",
|
|
146
|
+
"ok": true
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"file": "activity",
|
|
150
|
+
"serial": false,
|
|
151
|
+
"suite": [
|
|
152
|
+
"activity over a turn",
|
|
153
|
+
"toolInputFor"
|
|
154
|
+
],
|
|
155
|
+
"title": "falls back to the arguments for a tool it does not know",
|
|
156
|
+
"ok": true
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"file": "changeset-lifecycle",
|
|
160
|
+
"serial": true,
|
|
161
|
+
"suite": [],
|
|
162
|
+
"title": "observes changes during the initial scan and rebuilds changed ignore rules",
|
|
163
|
+
"ok": true
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"file": "changeset-lifecycle",
|
|
167
|
+
"serial": true,
|
|
168
|
+
"suite": [],
|
|
169
|
+
"title": "refreshes file changes while a turn is still active",
|
|
170
|
+
"ok": true
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"file": "changeset-lifecycle",
|
|
174
|
+
"serial": true,
|
|
175
|
+
"suite": [],
|
|
176
|
+
"title": "does not recursively watch when ignored paths cannot be determined",
|
|
177
|
+
"ok": true
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"file": "changeset-lifecycle",
|
|
181
|
+
"serial": true,
|
|
182
|
+
"suite": [],
|
|
183
|
+
"title": "publishes an explicit error when Git cannot compute the changeset",
|
|
184
|
+
"ok": true
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"file": "changeset-lifecycle",
|
|
188
|
+
"serial": true,
|
|
189
|
+
"suite": [],
|
|
190
|
+
"title": "drains an in-flight scan before deleting its channel",
|
|
191
|
+
"ok": true
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"file": "changeset-uri",
|
|
195
|
+
"serial": false,
|
|
196
|
+
"suite": [
|
|
197
|
+
"pi changeset URIs"
|
|
198
|
+
],
|
|
199
|
+
"title": "builds stable static catalogue channels",
|
|
200
|
+
"ok": true
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"file": "changeset-uri",
|
|
204
|
+
"serial": false,
|
|
205
|
+
"suite": [
|
|
206
|
+
"pi changeset URIs"
|
|
207
|
+
],
|
|
208
|
+
"title": "rejects channels the host did not advertise",
|
|
209
|
+
"ok": true
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"file": "changeset",
|
|
213
|
+
"serial": true,
|
|
214
|
+
"suite": [
|
|
215
|
+
"Git changesets"
|
|
216
|
+
],
|
|
217
|
+
"title": "keeps the latest commit separate from uncommitted work and refreshes it",
|
|
218
|
+
"ok": true
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"file": "changeset",
|
|
222
|
+
"serial": true,
|
|
223
|
+
"suite": [
|
|
224
|
+
"Git changesets"
|
|
225
|
+
],
|
|
226
|
+
"title": "limits changes to the session working-directory subtree",
|
|
227
|
+
"ok": true
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"file": "changeset",
|
|
231
|
+
"serial": true,
|
|
232
|
+
"suite": [
|
|
233
|
+
"Git changesets"
|
|
234
|
+
],
|
|
235
|
+
"title": "ignores ambient Git repository overrides",
|
|
236
|
+
"ok": true
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"file": "changeset",
|
|
240
|
+
"serial": true,
|
|
241
|
+
"suite": [
|
|
242
|
+
"Git changesets"
|
|
243
|
+
],
|
|
244
|
+
"title": "omits changesets when Git is unavailable",
|
|
245
|
+
"ok": true
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"file": "changeset",
|
|
249
|
+
"serial": true,
|
|
250
|
+
"suite": [
|
|
251
|
+
"Git changesets"
|
|
252
|
+
],
|
|
253
|
+
"title": "omits changesets outside Git workspaces",
|
|
254
|
+
"ok": true
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"file": "changeset",
|
|
258
|
+
"serial": true,
|
|
259
|
+
"suite": [
|
|
260
|
+
"Git changesets"
|
|
261
|
+
],
|
|
262
|
+
"title": "omits Latest Commit before the repository has a commit",
|
|
263
|
+
"ok": true
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"file": "changeset",
|
|
267
|
+
"serial": true,
|
|
268
|
+
"suite": [],
|
|
269
|
+
"title": "resumes changeset updates when durable session deletion fails",
|
|
270
|
+
"ok": true
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"file": "changeset",
|
|
274
|
+
"serial": true,
|
|
275
|
+
"suite": [],
|
|
276
|
+
"title": "hydrates the parent session when its changeset is subscribed directly",
|
|
277
|
+
"ok": true
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"file": "chat-driver",
|
|
281
|
+
"serial": false,
|
|
282
|
+
"suite": [
|
|
283
|
+
"chat driver"
|
|
284
|
+
],
|
|
285
|
+
"title": "creates the session's default chat and points defaultChat at it",
|
|
286
|
+
"ok": true
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"file": "chat-driver",
|
|
290
|
+
"serial": false,
|
|
291
|
+
"suite": [
|
|
292
|
+
"chat driver"
|
|
293
|
+
],
|
|
294
|
+
"title": "runs a client turn through the backend and streams the reply back",
|
|
295
|
+
"ok": true
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
"file": "chat-driver",
|
|
299
|
+
"serial": false,
|
|
300
|
+
"suite": [
|
|
301
|
+
"chat driver"
|
|
302
|
+
],
|
|
303
|
+
"title": "adapts supported attachments into pi prompt text",
|
|
304
|
+
"ok": true
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
"file": "chat-driver",
|
|
308
|
+
"serial": false,
|
|
309
|
+
"suite": [
|
|
310
|
+
"chat driver"
|
|
311
|
+
],
|
|
312
|
+
"title": "keeps the session catalog's chat summary in step",
|
|
313
|
+
"ok": true
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
"file": "chat-driver",
|
|
317
|
+
"serial": false,
|
|
318
|
+
"suite": [
|
|
319
|
+
"chat driver"
|
|
320
|
+
],
|
|
321
|
+
"title": "forwards steering text and images to the active backend",
|
|
322
|
+
"ok": true
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"file": "chat-driver",
|
|
326
|
+
"serial": false,
|
|
327
|
+
"suite": [
|
|
328
|
+
"chat driver"
|
|
329
|
+
],
|
|
330
|
+
"title": "consumes a queued message as its own turn once the chat goes idle",
|
|
331
|
+
"ok": true
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"file": "chat-driver",
|
|
335
|
+
"serial": false,
|
|
336
|
+
"suite": [
|
|
337
|
+
"chat driver"
|
|
338
|
+
],
|
|
339
|
+
"title": "holds a queued message until the active turn settles",
|
|
340
|
+
"ok": true
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"file": "chat-driver",
|
|
344
|
+
"serial": false,
|
|
345
|
+
"suite": [
|
|
346
|
+
"chat driver"
|
|
347
|
+
],
|
|
348
|
+
"title": "does not start a prompt cancelled during model selection",
|
|
349
|
+
"ok": true
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
"file": "chat-driver",
|
|
353
|
+
"serial": false,
|
|
354
|
+
"suite": [
|
|
355
|
+
"chat driver"
|
|
356
|
+
],
|
|
357
|
+
"title": "does not run a prompt cancelled during backend preflight",
|
|
358
|
+
"ok": true
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
"file": "chat-driver",
|
|
362
|
+
"serial": false,
|
|
363
|
+
"suite": [
|
|
364
|
+
"chat driver"
|
|
365
|
+
],
|
|
366
|
+
"title": "anchors a cancelled turn before resuming queued work",
|
|
367
|
+
"ok": true
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"file": "chat-driver",
|
|
371
|
+
"serial": false,
|
|
372
|
+
"suite": [
|
|
373
|
+
"chat driver \u2014 backend failure"
|
|
374
|
+
],
|
|
375
|
+
"title": "marks the session failed when the backend cannot start",
|
|
376
|
+
"ok": true
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
"file": "chat-driver",
|
|
380
|
+
"serial": false,
|
|
381
|
+
"suite": [
|
|
382
|
+
"chat driver \u2014 backend failure"
|
|
383
|
+
],
|
|
384
|
+
"title": "closes the turn when prompt() rejects before any agent event",
|
|
385
|
+
"ok": true
|
|
386
|
+
},
|
|
387
|
+
{
|
|
388
|
+
"file": "chat-driver",
|
|
389
|
+
"serial": false,
|
|
390
|
+
"suite": [
|
|
391
|
+
"steering message lifetime"
|
|
392
|
+
],
|
|
393
|
+
"title": "clears the pending message once pi consumes it",
|
|
394
|
+
"ok": true
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
"file": "client-actions",
|
|
398
|
+
"serial": false,
|
|
399
|
+
"suite": [
|
|
400
|
+
"pi client-action policy"
|
|
401
|
+
],
|
|
402
|
+
"title": "accounts for every client action on channels this host serves",
|
|
403
|
+
"ok": true
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
"file": "client-actions",
|
|
407
|
+
"serial": false,
|
|
408
|
+
"suite": [
|
|
409
|
+
"pi client-action policy"
|
|
410
|
+
],
|
|
411
|
+
"title": "rejects actions addressed to the wrong channel kind",
|
|
412
|
+
"ok": true
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
"file": "client-actions",
|
|
416
|
+
"serial": false,
|
|
417
|
+
"suite": [
|
|
418
|
+
"pi client-action policy"
|
|
419
|
+
],
|
|
420
|
+
"title": "rejects capabilities pi does not implement",
|
|
421
|
+
"ok": true
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"file": "client-actions",
|
|
425
|
+
"serial": false,
|
|
426
|
+
"suite": [
|
|
427
|
+
"pi client-action policy"
|
|
428
|
+
],
|
|
429
|
+
"title": "rejects malformed supported actions without mutating state",
|
|
430
|
+
"ok": true
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
"file": "client-actions",
|
|
434
|
+
"serial": false,
|
|
435
|
+
"suite": [
|
|
436
|
+
"pi client-action policy"
|
|
437
|
+
],
|
|
438
|
+
"title": "validates turn and user-message invariants",
|
|
439
|
+
"ok": true
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
"file": "client-actions",
|
|
443
|
+
"serial": false,
|
|
444
|
+
"suite": [
|
|
445
|
+
"pi client-action policy"
|
|
446
|
+
],
|
|
447
|
+
"title": "keeps state-only draft and queued-message actions",
|
|
448
|
+
"ok": true
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"file": "client-workarounds",
|
|
452
|
+
"serial": false,
|
|
453
|
+
"suite": [
|
|
454
|
+
"client URI dialects over the wire"
|
|
455
|
+
],
|
|
456
|
+
"title": "answers VS Code at the URIs it computes for itself",
|
|
457
|
+
"ok": true
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
"file": "client-workarounds",
|
|
461
|
+
"serial": false,
|
|
462
|
+
"suite": [
|
|
463
|
+
"client URI dialects over the wire"
|
|
464
|
+
],
|
|
465
|
+
"title": "applies the VS Code dialect to initialize-time subscriptions",
|
|
466
|
+
"ok": true
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
"file": "client-workarounds",
|
|
470
|
+
"serial": false,
|
|
471
|
+
"suite": [
|
|
472
|
+
"client URI dialects over the wire"
|
|
473
|
+
],
|
|
474
|
+
"title": "applies the unnamed provider-alias client dialect to initialize-time subscriptions",
|
|
475
|
+
"ok": true
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
"file": "client-workarounds",
|
|
479
|
+
"serial": false,
|
|
480
|
+
"suite": [
|
|
481
|
+
"VS Code session disposal workaround"
|
|
482
|
+
],
|
|
483
|
+
"title": "protects a durable session that this connection did not create",
|
|
484
|
+
"ok": true
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
"file": "client-workarounds",
|
|
488
|
+
"serial": false,
|
|
489
|
+
"suite": [
|
|
490
|
+
"VS Code session disposal workaround"
|
|
491
|
+
],
|
|
492
|
+
"title": "still disposes an empty session created by this VS Code connection",
|
|
493
|
+
"ok": true
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
"file": "client-workarounds",
|
|
497
|
+
"serial": false,
|
|
498
|
+
"suite": [
|
|
499
|
+
"VS Code session disposal workaround"
|
|
500
|
+
],
|
|
501
|
+
"title": "restores an empty session after disposal fails so VS Code can retry",
|
|
502
|
+
"ok": true
|
|
503
|
+
},
|
|
504
|
+
{
|
|
505
|
+
"file": "client-workarounds",
|
|
506
|
+
"serial": false,
|
|
507
|
+
"suite": [
|
|
508
|
+
"VS Code session disposal workaround"
|
|
509
|
+
],
|
|
510
|
+
"title": "protects a session after its first turn starts",
|
|
511
|
+
"ok": true
|
|
512
|
+
},
|
|
513
|
+
{
|
|
514
|
+
"file": "client-workarounds",
|
|
515
|
+
"serial": false,
|
|
516
|
+
"suite": [
|
|
517
|
+
"session URI classification"
|
|
518
|
+
],
|
|
519
|
+
"title": "recognises only canonical or explicitly allowed session schemes",
|
|
520
|
+
"ok": true
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
"file": "client-workarounds",
|
|
524
|
+
"serial": false,
|
|
525
|
+
"suite": [
|
|
526
|
+
"session URI classification"
|
|
527
|
+
],
|
|
528
|
+
"title": "does not infer sessions from other channel schemes",
|
|
529
|
+
"ok": true
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
"file": "client-workarounds",
|
|
533
|
+
"serial": false,
|
|
534
|
+
"suite": [
|
|
535
|
+
"session URI classification"
|
|
536
|
+
],
|
|
537
|
+
"title": "retargets VS Code's chat-addressed rename to the owning session",
|
|
538
|
+
"ok": true
|
|
539
|
+
},
|
|
540
|
+
{
|
|
541
|
+
"file": "client-workarounds",
|
|
542
|
+
"serial": false,
|
|
543
|
+
"suite": [
|
|
544
|
+
"session URI classification"
|
|
545
|
+
],
|
|
546
|
+
"title": "rewrites URI-bearing action and catalogue fields for VS Code",
|
|
547
|
+
"ok": true
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
"file": "client-workarounds",
|
|
551
|
+
"serial": false,
|
|
552
|
+
"suite": [
|
|
553
|
+
"session URI classification"
|
|
554
|
+
],
|
|
555
|
+
"title": "leaves VS Code's client-chosen terminal URI outside session translation",
|
|
556
|
+
"ok": true
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
"file": "client-workarounds",
|
|
560
|
+
"serial": false,
|
|
561
|
+
"suite": [
|
|
562
|
+
"session URI classification"
|
|
563
|
+
],
|
|
564
|
+
"title": "does not hydrate or dispose a durable session through VS Code's terminal URI",
|
|
565
|
+
"ok": true
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
"file": "client-workarounds",
|
|
569
|
+
"serial": false,
|
|
570
|
+
"suite": [
|
|
571
|
+
"session URI classification"
|
|
572
|
+
],
|
|
573
|
+
"title": "accepts the provider scheme but rejects an undeclared session scheme",
|
|
574
|
+
"ok": true
|
|
575
|
+
},
|
|
576
|
+
{
|
|
577
|
+
"file": "completions",
|
|
578
|
+
"serial": false,
|
|
579
|
+
"suite": [
|
|
580
|
+
"mention parsing"
|
|
581
|
+
],
|
|
582
|
+
"title": "finds a mention the cursor sits in",
|
|
583
|
+
"ok": true
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
"file": "completions",
|
|
587
|
+
"serial": false,
|
|
588
|
+
"suite": [
|
|
589
|
+
"mention parsing"
|
|
590
|
+
],
|
|
591
|
+
"title": "finds a bare mention at the start of the text",
|
|
592
|
+
"ok": true
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
"file": "completions",
|
|
596
|
+
"serial": false,
|
|
597
|
+
"suite": [
|
|
598
|
+
"mention parsing"
|
|
599
|
+
],
|
|
600
|
+
"title": "ignores an `@` that is not preceded by whitespace",
|
|
601
|
+
"ok": true
|
|
602
|
+
},
|
|
603
|
+
{
|
|
604
|
+
"file": "completions",
|
|
605
|
+
"serial": false,
|
|
606
|
+
"suite": [
|
|
607
|
+
"mention parsing"
|
|
608
|
+
],
|
|
609
|
+
"title": "ignores a cursor that is past the end of the mention",
|
|
610
|
+
"ok": true
|
|
611
|
+
},
|
|
612
|
+
{
|
|
613
|
+
"file": "completions",
|
|
614
|
+
"serial": false,
|
|
615
|
+
"suite": [
|
|
616
|
+
"mention parsing"
|
|
617
|
+
],
|
|
618
|
+
"title": "returns the empty query for a lone trigger",
|
|
619
|
+
"ok": true
|
|
620
|
+
},
|
|
621
|
+
{
|
|
622
|
+
"file": "completions",
|
|
623
|
+
"serial": false,
|
|
624
|
+
"suite": [
|
|
625
|
+
"completions"
|
|
626
|
+
],
|
|
627
|
+
"title": "offers files matching the typed prefix",
|
|
628
|
+
"ok": true
|
|
629
|
+
},
|
|
630
|
+
{
|
|
631
|
+
"file": "completions",
|
|
632
|
+
"serial": false,
|
|
633
|
+
"suite": [
|
|
634
|
+
"completions"
|
|
635
|
+
],
|
|
636
|
+
"title": "attaches the resource each item refers to",
|
|
637
|
+
"ok": true
|
|
638
|
+
},
|
|
639
|
+
{
|
|
640
|
+
"file": "completions",
|
|
641
|
+
"serial": false,
|
|
642
|
+
"suite": [
|
|
643
|
+
"completions"
|
|
644
|
+
],
|
|
645
|
+
"title": "marks the range the client should replace",
|
|
646
|
+
"ok": true
|
|
647
|
+
},
|
|
648
|
+
{
|
|
649
|
+
"file": "completions",
|
|
650
|
+
"serial": false,
|
|
651
|
+
"suite": [
|
|
652
|
+
"completions"
|
|
653
|
+
],
|
|
654
|
+
"title": "returns nested files instead of directory navigation items",
|
|
655
|
+
"ok": true
|
|
656
|
+
},
|
|
657
|
+
{
|
|
658
|
+
"file": "completions",
|
|
659
|
+
"serial": false,
|
|
660
|
+
"suite": [
|
|
661
|
+
"completions"
|
|
662
|
+
],
|
|
663
|
+
"title": "matches a typed relative-path prefix",
|
|
664
|
+
"ok": true
|
|
665
|
+
},
|
|
666
|
+
{
|
|
667
|
+
"file": "completions",
|
|
668
|
+
"serial": false,
|
|
669
|
+
"suite": [
|
|
670
|
+
"completions"
|
|
671
|
+
],
|
|
672
|
+
"title": "matches a nested file by basename",
|
|
673
|
+
"ok": true
|
|
674
|
+
},
|
|
675
|
+
{
|
|
676
|
+
"file": "completions",
|
|
677
|
+
"serial": false,
|
|
678
|
+
"suite": [
|
|
679
|
+
"completions"
|
|
680
|
+
],
|
|
681
|
+
"title": "keeps the temporary directory skip list narrow",
|
|
682
|
+
"ok": true
|
|
683
|
+
},
|
|
684
|
+
{
|
|
685
|
+
"file": "completions",
|
|
686
|
+
"serial": false,
|
|
687
|
+
"suite": [
|
|
688
|
+
"completions"
|
|
689
|
+
],
|
|
690
|
+
"title": "does not interpret a query as path traversal",
|
|
691
|
+
"ok": true
|
|
692
|
+
},
|
|
693
|
+
{
|
|
694
|
+
"file": "completions",
|
|
695
|
+
"serial": false,
|
|
696
|
+
"suite": [
|
|
697
|
+
"completions"
|
|
698
|
+
],
|
|
699
|
+
"title": "returns nothing for a completion kind it does not implement",
|
|
700
|
+
"ok": true
|
|
701
|
+
},
|
|
702
|
+
{
|
|
703
|
+
"file": "completions",
|
|
704
|
+
"serial": false,
|
|
705
|
+
"suite": [
|
|
706
|
+
"completions"
|
|
707
|
+
],
|
|
708
|
+
"title": "returns nothing when the cursor is not in a mention",
|
|
709
|
+
"ok": true
|
|
710
|
+
},
|
|
711
|
+
{
|
|
712
|
+
"file": "completions",
|
|
713
|
+
"serial": false,
|
|
714
|
+
"suite": [
|
|
715
|
+
"completions"
|
|
716
|
+
],
|
|
717
|
+
"title": "returns nothing for a chat it has no directory for",
|
|
718
|
+
"ok": true
|
|
719
|
+
},
|
|
720
|
+
{
|
|
721
|
+
"file": "completions",
|
|
722
|
+
"serial": false,
|
|
723
|
+
"suite": [
|
|
724
|
+
"completions"
|
|
725
|
+
],
|
|
726
|
+
"title": "caps how many items it returns",
|
|
727
|
+
"ok": true
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
"file": "completions",
|
|
731
|
+
"serial": false,
|
|
732
|
+
"suite": [
|
|
733
|
+
"completions over the wire"
|
|
734
|
+
],
|
|
735
|
+
"title": "advertises only the trigger it can answer",
|
|
736
|
+
"ok": true
|
|
737
|
+
},
|
|
738
|
+
{
|
|
739
|
+
"file": "completions",
|
|
740
|
+
"serial": false,
|
|
741
|
+
"suite": [
|
|
742
|
+
"completions over the wire"
|
|
743
|
+
],
|
|
744
|
+
"title": "serves a schema-conforming result",
|
|
745
|
+
"ok": true
|
|
746
|
+
},
|
|
747
|
+
{
|
|
748
|
+
"file": "completions",
|
|
749
|
+
"serial": false,
|
|
750
|
+
"suite": [
|
|
751
|
+
"completions over the wire"
|
|
752
|
+
],
|
|
753
|
+
"title": "rejects non-chat completion targets",
|
|
754
|
+
"ok": true
|
|
755
|
+
},
|
|
756
|
+
{
|
|
757
|
+
"file": "completions",
|
|
758
|
+
"serial": false,
|
|
759
|
+
"suite": [
|
|
760
|
+
"completions over the wire"
|
|
761
|
+
],
|
|
762
|
+
"title": "maps provider-alias completion targets onto the default chat",
|
|
763
|
+
"ok": true
|
|
764
|
+
},
|
|
765
|
+
{
|
|
766
|
+
"file": "completions",
|
|
767
|
+
"serial": false,
|
|
768
|
+
"suite": [
|
|
769
|
+
"completions without a handler"
|
|
770
|
+
],
|
|
771
|
+
"title": "answers with an empty list rather than MethodNotFound",
|
|
772
|
+
"ok": true
|
|
773
|
+
},
|
|
774
|
+
{
|
|
775
|
+
"file": "delete-session",
|
|
776
|
+
"serial": false,
|
|
777
|
+
"suite": [
|
|
778
|
+
"session file deletion"
|
|
779
|
+
],
|
|
780
|
+
"title": "treats an already-missing file as success",
|
|
781
|
+
"ok": true
|
|
782
|
+
},
|
|
783
|
+
{
|
|
784
|
+
"file": "delete-session",
|
|
785
|
+
"serial": false,
|
|
786
|
+
"suite": [
|
|
787
|
+
"session file deletion"
|
|
788
|
+
],
|
|
789
|
+
"title": "prefers trash and guards a path that looks like an option",
|
|
790
|
+
"ok": true
|
|
791
|
+
},
|
|
792
|
+
{
|
|
793
|
+
"file": "delete-session",
|
|
794
|
+
"serial": false,
|
|
795
|
+
"suite": [
|
|
796
|
+
"session file deletion"
|
|
797
|
+
],
|
|
798
|
+
"title": "falls back to unlink when trash exits successfully but leaves the file",
|
|
799
|
+
"ok": true
|
|
800
|
+
},
|
|
801
|
+
{
|
|
802
|
+
"file": "delete-session",
|
|
803
|
+
"serial": false,
|
|
804
|
+
"suite": [
|
|
805
|
+
"session file deletion"
|
|
806
|
+
],
|
|
807
|
+
"title": "recognizes trash success even when the command exits nonzero",
|
|
808
|
+
"ok": true
|
|
809
|
+
},
|
|
810
|
+
{
|
|
811
|
+
"file": "delete-session",
|
|
812
|
+
"serial": false,
|
|
813
|
+
"suite": [
|
|
814
|
+
"session file deletion"
|
|
815
|
+
],
|
|
816
|
+
"title": "falls back to unlink when trash is unavailable or fails",
|
|
817
|
+
"ok": true
|
|
818
|
+
},
|
|
819
|
+
{
|
|
820
|
+
"file": "delete-session",
|
|
821
|
+
"serial": false,
|
|
822
|
+
"suite": [
|
|
823
|
+
"session file deletion"
|
|
824
|
+
],
|
|
825
|
+
"title": "returns an unlink error instead of claiming deletion",
|
|
826
|
+
"ok": true
|
|
827
|
+
},
|
|
828
|
+
{
|
|
829
|
+
"file": "direct-settings",
|
|
830
|
+
"serial": false,
|
|
831
|
+
"suite": [
|
|
832
|
+
"direct listener settings"
|
|
833
|
+
],
|
|
834
|
+
"title": "creates a private, reusable endpoint configuration on first use",
|
|
835
|
+
"ok": true
|
|
836
|
+
},
|
|
837
|
+
{
|
|
838
|
+
"file": "direct-settings",
|
|
839
|
+
"serial": false,
|
|
840
|
+
"suite": [
|
|
841
|
+
"direct listener settings"
|
|
842
|
+
],
|
|
843
|
+
"title": "takes an existing file literally and defaults only optional fields",
|
|
844
|
+
"ok": true
|
|
845
|
+
},
|
|
846
|
+
{
|
|
847
|
+
"file": "direct-settings",
|
|
848
|
+
"serial": false,
|
|
849
|
+
"suite": [
|
|
850
|
+
"direct listener settings"
|
|
851
|
+
],
|
|
852
|
+
"title": "rejects malformed or incomplete files instead of inventing replacements",
|
|
853
|
+
"ok": true
|
|
854
|
+
},
|
|
855
|
+
{
|
|
856
|
+
"file": "event-mapper",
|
|
857
|
+
"serial": false,
|
|
858
|
+
"suite": [
|
|
859
|
+
"event mapper \u2014 turn boundary"
|
|
860
|
+
],
|
|
861
|
+
"title": "spans several agent runs in a single turn",
|
|
862
|
+
"ok": true
|
|
863
|
+
},
|
|
864
|
+
{
|
|
865
|
+
"file": "event-mapper",
|
|
866
|
+
"serial": false,
|
|
867
|
+
"suite": [
|
|
868
|
+
"event mapper \u2014 turn boundary"
|
|
869
|
+
],
|
|
870
|
+
"title": "only closes the turn on agent_settled",
|
|
871
|
+
"ok": true
|
|
872
|
+
},
|
|
873
|
+
{
|
|
874
|
+
"file": "event-mapper",
|
|
875
|
+
"serial": false,
|
|
876
|
+
"suite": [
|
|
877
|
+
"event mapper \u2014 turn boundary"
|
|
878
|
+
],
|
|
879
|
+
"title": "reports an aborted run as cancelled, not complete",
|
|
880
|
+
"ok": true
|
|
881
|
+
},
|
|
882
|
+
{
|
|
883
|
+
"file": "event-mapper",
|
|
884
|
+
"serial": false,
|
|
885
|
+
"suite": [
|
|
886
|
+
"event mapper \u2014 turn boundary"
|
|
887
|
+
],
|
|
888
|
+
"title": "reports a failed run as an error and marks the chat",
|
|
889
|
+
"ok": true
|
|
890
|
+
},
|
|
891
|
+
{
|
|
892
|
+
"file": "event-mapper",
|
|
893
|
+
"serial": false,
|
|
894
|
+
"suite": [
|
|
895
|
+
"event mapper \u2014 turn boundary"
|
|
896
|
+
],
|
|
897
|
+
"title": "ignores events after the turn has closed",
|
|
898
|
+
"ok": true
|
|
899
|
+
},
|
|
900
|
+
{
|
|
901
|
+
"file": "event-mapper",
|
|
902
|
+
"serial": false,
|
|
903
|
+
"suite": [
|
|
904
|
+
"event mapper \u2014 turn boundary"
|
|
905
|
+
],
|
|
906
|
+
"title": "can be closed without agent_settled",
|
|
907
|
+
"ok": true
|
|
908
|
+
},
|
|
909
|
+
{
|
|
910
|
+
"file": "event-mapper",
|
|
911
|
+
"serial": false,
|
|
912
|
+
"suite": [
|
|
913
|
+
"event mapper \u2014 part identity"
|
|
914
|
+
],
|
|
915
|
+
"title": "keeps contentIndex collisions across messages apart",
|
|
916
|
+
"ok": true
|
|
917
|
+
},
|
|
918
|
+
{
|
|
919
|
+
"file": "event-mapper",
|
|
920
|
+
"serial": false,
|
|
921
|
+
"suite": [
|
|
922
|
+
"event mapper \u2014 part identity"
|
|
923
|
+
],
|
|
924
|
+
"title": "appends consecutive deltas into one part",
|
|
925
|
+
"ok": true
|
|
926
|
+
},
|
|
927
|
+
{
|
|
928
|
+
"file": "event-mapper",
|
|
929
|
+
"serial": false,
|
|
930
|
+
"suite": [
|
|
931
|
+
"event mapper \u2014 part identity"
|
|
932
|
+
],
|
|
933
|
+
"title": "routes thinking into a reasoning part, separate from markdown",
|
|
934
|
+
"ok": true
|
|
935
|
+
},
|
|
936
|
+
{
|
|
937
|
+
"file": "event-mapper",
|
|
938
|
+
"serial": false,
|
|
939
|
+
"suite": [
|
|
940
|
+
"event mapper \u2014 part identity"
|
|
941
|
+
],
|
|
942
|
+
"title": "creates parts in arrival order so interleaving survives",
|
|
943
|
+
"ok": true
|
|
944
|
+
},
|
|
945
|
+
{
|
|
946
|
+
"file": "event-mapper",
|
|
947
|
+
"serial": false,
|
|
948
|
+
"suite": [
|
|
949
|
+
"event mapper \u2014 part identity"
|
|
950
|
+
],
|
|
951
|
+
"title": "recovers a block a provider never streamed",
|
|
952
|
+
"ok": true
|
|
953
|
+
},
|
|
954
|
+
{
|
|
955
|
+
"file": "event-mapper",
|
|
956
|
+
"serial": false,
|
|
957
|
+
"suite": [
|
|
958
|
+
"event mapper \u2014 part identity"
|
|
959
|
+
],
|
|
960
|
+
"title": "does not duplicate a block that was streamed",
|
|
961
|
+
"ok": true
|
|
962
|
+
},
|
|
963
|
+
{
|
|
964
|
+
"file": "event-mapper",
|
|
965
|
+
"serial": false,
|
|
966
|
+
"suite": [
|
|
967
|
+
"event mapper \u2014 part identity"
|
|
968
|
+
],
|
|
969
|
+
"title": "emits no part for an empty delta",
|
|
970
|
+
"ok": true
|
|
971
|
+
},
|
|
972
|
+
{
|
|
973
|
+
"file": "event-mapper",
|
|
974
|
+
"serial": false,
|
|
975
|
+
"suite": [
|
|
976
|
+
"event mapper \u2014 tool calls"
|
|
977
|
+
],
|
|
978
|
+
"title": "drives a tool call from streaming to completed without confirmation",
|
|
979
|
+
"ok": true
|
|
980
|
+
},
|
|
981
|
+
{
|
|
982
|
+
"file": "event-mapper",
|
|
983
|
+
"serial": false,
|
|
984
|
+
"suite": [
|
|
985
|
+
"event mapper \u2014 tool calls"
|
|
986
|
+
],
|
|
987
|
+
"title": "publishes partial output while a tool is still running",
|
|
988
|
+
"ok": true
|
|
989
|
+
},
|
|
990
|
+
{
|
|
991
|
+
"file": "event-mapper",
|
|
992
|
+
"serial": false,
|
|
993
|
+
"suite": [
|
|
994
|
+
"event mapper \u2014 tool calls"
|
|
995
|
+
],
|
|
996
|
+
"title": "never enters pending-confirmation",
|
|
997
|
+
"ok": true
|
|
998
|
+
},
|
|
999
|
+
{
|
|
1000
|
+
"file": "event-mapper",
|
|
1001
|
+
"serial": false,
|
|
1002
|
+
"suite": [
|
|
1003
|
+
"event mapper \u2014 tool calls"
|
|
1004
|
+
],
|
|
1005
|
+
"title": "marks a failed tool call as unsuccessful",
|
|
1006
|
+
"ok": true
|
|
1007
|
+
},
|
|
1008
|
+
{
|
|
1009
|
+
"file": "event-mapper",
|
|
1010
|
+
"serial": false,
|
|
1011
|
+
"suite": [
|
|
1012
|
+
"event mapper \u2014 tool calls"
|
|
1013
|
+
],
|
|
1014
|
+
"title": "force-cancels a tool call still running when the turn ends",
|
|
1015
|
+
"ok": true
|
|
1016
|
+
},
|
|
1017
|
+
{
|
|
1018
|
+
"file": "event-mapper",
|
|
1019
|
+
"serial": false,
|
|
1020
|
+
"suite": [
|
|
1021
|
+
"event mapper \u2014 tool calls"
|
|
1022
|
+
],
|
|
1023
|
+
"title": "ignores tool events for a call it never saw",
|
|
1024
|
+
"ok": true
|
|
1025
|
+
},
|
|
1026
|
+
{
|
|
1027
|
+
"file": "event-mapper",
|
|
1028
|
+
"serial": false,
|
|
1029
|
+
"suite": [
|
|
1030
|
+
"event mapper \u2014 usage and schema"
|
|
1031
|
+
],
|
|
1032
|
+
"title": "carries token usage onto the turn",
|
|
1033
|
+
"ok": true
|
|
1034
|
+
},
|
|
1035
|
+
{
|
|
1036
|
+
"file": "event-mapper",
|
|
1037
|
+
"serial": false,
|
|
1038
|
+
"suite": [
|
|
1039
|
+
"event mapper \u2014 usage and schema"
|
|
1040
|
+
],
|
|
1041
|
+
"title": "keeps the usage fields the protocol has no slot for",
|
|
1042
|
+
"ok": true
|
|
1043
|
+
},
|
|
1044
|
+
{
|
|
1045
|
+
"file": "event-mapper",
|
|
1046
|
+
"serial": false,
|
|
1047
|
+
"suite": [
|
|
1048
|
+
"event mapper \u2014 usage and schema"
|
|
1049
|
+
],
|
|
1050
|
+
"title": "emits only schema-conforming actions",
|
|
1051
|
+
"ok": true
|
|
1052
|
+
},
|
|
1053
|
+
{
|
|
1054
|
+
"file": "event-mapper",
|
|
1055
|
+
"serial": false,
|
|
1056
|
+
"suite": [
|
|
1057
|
+
"event mapper \u2014 outcome from stopReason"
|
|
1058
|
+
],
|
|
1059
|
+
"title": "treats an aborted assistant message as a cancelled turn",
|
|
1060
|
+
"ok": true
|
|
1061
|
+
},
|
|
1062
|
+
{
|
|
1063
|
+
"file": "event-mapper",
|
|
1064
|
+
"serial": false,
|
|
1065
|
+
"suite": [
|
|
1066
|
+
"event mapper \u2014 outcome from stopReason"
|
|
1067
|
+
],
|
|
1068
|
+
"title": "treats a failed assistant message as an error turn",
|
|
1069
|
+
"ok": true
|
|
1070
|
+
},
|
|
1071
|
+
{
|
|
1072
|
+
"file": "event-mapper",
|
|
1073
|
+
"serial": false,
|
|
1074
|
+
"suite": [
|
|
1075
|
+
"event mapper \u2014 injected messages"
|
|
1076
|
+
],
|
|
1077
|
+
"title": "gives an injected user message its own turn",
|
|
1078
|
+
"ok": true
|
|
1079
|
+
},
|
|
1080
|
+
{
|
|
1081
|
+
"file": "event-mapper",
|
|
1082
|
+
"serial": false,
|
|
1083
|
+
"suite": [
|
|
1084
|
+
"event mapper \u2014 injected messages"
|
|
1085
|
+
],
|
|
1086
|
+
"title": "does not split on the run's own opening prompt",
|
|
1087
|
+
"ok": true
|
|
1088
|
+
},
|
|
1089
|
+
{
|
|
1090
|
+
"file": "event-mapper",
|
|
1091
|
+
"serial": false,
|
|
1092
|
+
"suite": [
|
|
1093
|
+
"event mapper \u2014 injected messages"
|
|
1094
|
+
],
|
|
1095
|
+
"title": "keeps part ids unique across a split",
|
|
1096
|
+
"ok": true
|
|
1097
|
+
},
|
|
1098
|
+
{
|
|
1099
|
+
"file": "fetch-turns",
|
|
1100
|
+
"serial": false,
|
|
1101
|
+
"suite": [
|
|
1102
|
+
"fetchTurns"
|
|
1103
|
+
],
|
|
1104
|
+
"title": "pages backward while preserving a complete oldest-first transcript",
|
|
1105
|
+
"ok": true
|
|
1106
|
+
},
|
|
1107
|
+
{
|
|
1108
|
+
"file": "fetch-turns",
|
|
1109
|
+
"serial": false,
|
|
1110
|
+
"suite": [
|
|
1111
|
+
"fetchTurns"
|
|
1112
|
+
],
|
|
1113
|
+
"title": "rejects a session channel for this chat-scoped command",
|
|
1114
|
+
"ok": true
|
|
1115
|
+
},
|
|
1116
|
+
{
|
|
1117
|
+
"file": "fetch-turns",
|
|
1118
|
+
"serial": false,
|
|
1119
|
+
"suite": [
|
|
1120
|
+
"fetchTurns"
|
|
1121
|
+
],
|
|
1122
|
+
"title": "rejects a cursor it did not issue",
|
|
1123
|
+
"ok": true
|
|
1124
|
+
},
|
|
1125
|
+
{
|
|
1126
|
+
"file": "fetch-turns",
|
|
1127
|
+
"serial": false,
|
|
1128
|
+
"suite": [
|
|
1129
|
+
"fetchTurns \u2014 nothing older"
|
|
1130
|
+
],
|
|
1131
|
+
"title": "offers no cursor for a session that was never compacted",
|
|
1132
|
+
"ok": true
|
|
1133
|
+
},
|
|
1134
|
+
{
|
|
1135
|
+
"file": "handshake",
|
|
1136
|
+
"serial": false,
|
|
1137
|
+
"suite": [
|
|
1138
|
+
"handshake"
|
|
1139
|
+
],
|
|
1140
|
+
"title": "negotiates the client's most-preferred supported version",
|
|
1141
|
+
"ok": true
|
|
1142
|
+
},
|
|
1143
|
+
{
|
|
1144
|
+
"file": "handshake",
|
|
1145
|
+
"serial": false,
|
|
1146
|
+
"suite": [
|
|
1147
|
+
"handshake"
|
|
1148
|
+
],
|
|
1149
|
+
"title": "does not advertise deferred host capabilities",
|
|
1150
|
+
"ok": true
|
|
1151
|
+
},
|
|
1152
|
+
{
|
|
1153
|
+
"file": "handshake",
|
|
1154
|
+
"serial": false,
|
|
1155
|
+
"suite": [
|
|
1156
|
+
"handshake"
|
|
1157
|
+
],
|
|
1158
|
+
"title": "ignores versions it does not know before the current one",
|
|
1159
|
+
"ok": true
|
|
1160
|
+
},
|
|
1161
|
+
{
|
|
1162
|
+
"file": "handshake",
|
|
1163
|
+
"serial": false,
|
|
1164
|
+
"suite": [
|
|
1165
|
+
"handshake"
|
|
1166
|
+
],
|
|
1167
|
+
"title": "rejects an older wire model with UnsupportedProtocolVersion",
|
|
1168
|
+
"ok": true
|
|
1169
|
+
},
|
|
1170
|
+
{
|
|
1171
|
+
"file": "handshake",
|
|
1172
|
+
"serial": false,
|
|
1173
|
+
"suite": [
|
|
1174
|
+
"handshake"
|
|
1175
|
+
],
|
|
1176
|
+
"title": "returns a snapshot for each initialSubscription in the same round-trip",
|
|
1177
|
+
"ok": true
|
|
1178
|
+
},
|
|
1179
|
+
{
|
|
1180
|
+
"file": "handshake",
|
|
1181
|
+
"serial": false,
|
|
1182
|
+
"suite": [
|
|
1183
|
+
"handshake"
|
|
1184
|
+
],
|
|
1185
|
+
"title": "skips unknown initialSubscriptions instead of failing the handshake",
|
|
1186
|
+
"ok": true
|
|
1187
|
+
},
|
|
1188
|
+
{
|
|
1189
|
+
"file": "handshake",
|
|
1190
|
+
"serial": false,
|
|
1191
|
+
"suite": [
|
|
1192
|
+
"handshake"
|
|
1193
|
+
],
|
|
1194
|
+
"title": "rejects an initialize without a clientId",
|
|
1195
|
+
"ok": true
|
|
1196
|
+
},
|
|
1197
|
+
{
|
|
1198
|
+
"file": "handshake",
|
|
1199
|
+
"serial": false,
|
|
1200
|
+
"suite": [
|
|
1201
|
+
"handshake"
|
|
1202
|
+
],
|
|
1203
|
+
"title": "rejects malformed initialize descriptors",
|
|
1204
|
+
"ok": true
|
|
1205
|
+
},
|
|
1206
|
+
{
|
|
1207
|
+
"file": "handshake",
|
|
1208
|
+
"serial": false,
|
|
1209
|
+
"suite": [
|
|
1210
|
+
"handshake"
|
|
1211
|
+
],
|
|
1212
|
+
"title": "answers ping before initialize",
|
|
1213
|
+
"ok": true
|
|
1214
|
+
},
|
|
1215
|
+
{
|
|
1216
|
+
"file": "handshake",
|
|
1217
|
+
"serial": false,
|
|
1218
|
+
"suite": [
|
|
1219
|
+
"handshake"
|
|
1220
|
+
],
|
|
1221
|
+
"title": "ignores notifications before initialize or reconnect",
|
|
1222
|
+
"ok": true
|
|
1223
|
+
},
|
|
1224
|
+
{
|
|
1225
|
+
"file": "handshake",
|
|
1226
|
+
"serial": false,
|
|
1227
|
+
"suite": [
|
|
1228
|
+
"handshake"
|
|
1229
|
+
],
|
|
1230
|
+
"title": "requires initialize or reconnect before other requests",
|
|
1231
|
+
"ok": true
|
|
1232
|
+
},
|
|
1233
|
+
{
|
|
1234
|
+
"file": "handshake",
|
|
1235
|
+
"serial": false,
|
|
1236
|
+
"suite": [
|
|
1237
|
+
"handshake"
|
|
1238
|
+
],
|
|
1239
|
+
"title": "rejects a second handshake without changing client compatibility mode",
|
|
1240
|
+
"ok": true
|
|
1241
|
+
},
|
|
1242
|
+
{
|
|
1243
|
+
"file": "handshake",
|
|
1244
|
+
"serial": false,
|
|
1245
|
+
"suite": [
|
|
1246
|
+
"handshake"
|
|
1247
|
+
],
|
|
1248
|
+
"title": "rejects malformed reconnect state without binding the connection",
|
|
1249
|
+
"ok": true
|
|
1250
|
+
},
|
|
1251
|
+
{
|
|
1252
|
+
"file": "handshake",
|
|
1253
|
+
"serial": false,
|
|
1254
|
+
"suite": [
|
|
1255
|
+
"handshake"
|
|
1256
|
+
],
|
|
1257
|
+
"title": "rejects malformed subscription lists without binding or poisoning the connection",
|
|
1258
|
+
"ok": true
|
|
1259
|
+
},
|
|
1260
|
+
{
|
|
1261
|
+
"file": "handshake",
|
|
1262
|
+
"serial": false,
|
|
1263
|
+
"suite": [
|
|
1264
|
+
"connection token"
|
|
1265
|
+
],
|
|
1266
|
+
"title": "accepts the token as `token`",
|
|
1267
|
+
"ok": true
|
|
1268
|
+
},
|
|
1269
|
+
{
|
|
1270
|
+
"file": "handshake",
|
|
1271
|
+
"serial": false,
|
|
1272
|
+
"suite": [
|
|
1273
|
+
"connection token"
|
|
1274
|
+
],
|
|
1275
|
+
"title": "accepts the token as `tkn`",
|
|
1276
|
+
"ok": true
|
|
1277
|
+
},
|
|
1278
|
+
{
|
|
1279
|
+
"file": "handshake",
|
|
1280
|
+
"serial": false,
|
|
1281
|
+
"suite": [
|
|
1282
|
+
"connection token"
|
|
1283
|
+
],
|
|
1284
|
+
"title": "rejects a wrong token",
|
|
1285
|
+
"ok": true
|
|
1286
|
+
},
|
|
1287
|
+
{
|
|
1288
|
+
"file": "handshake",
|
|
1289
|
+
"serial": false,
|
|
1290
|
+
"suite": [
|
|
1291
|
+
"connection token"
|
|
1292
|
+
],
|
|
1293
|
+
"title": "ignores a VS Code tkn when the listener requires no token",
|
|
1294
|
+
"ok": true
|
|
1295
|
+
},
|
|
1296
|
+
{
|
|
1297
|
+
"file": "hydrated-session-lifecycle",
|
|
1298
|
+
"serial": false,
|
|
1299
|
+
"suite": [
|
|
1300
|
+
"read state after hydration"
|
|
1301
|
+
],
|
|
1302
|
+
"title": "reports every catalogue entry as read",
|
|
1303
|
+
"ok": true
|
|
1304
|
+
},
|
|
1305
|
+
{
|
|
1306
|
+
"file": "hydrated-session-lifecycle",
|
|
1307
|
+
"serial": false,
|
|
1308
|
+
"suite": [
|
|
1309
|
+
"read state after hydration"
|
|
1310
|
+
],
|
|
1311
|
+
"title": "reports a hydrated session as read",
|
|
1312
|
+
"ok": true
|
|
1313
|
+
},
|
|
1314
|
+
{
|
|
1315
|
+
"file": "hydrated-session-lifecycle",
|
|
1316
|
+
"serial": false,
|
|
1317
|
+
"suite": [
|
|
1318
|
+
"read state after hydration"
|
|
1319
|
+
],
|
|
1320
|
+
"title": "keeps session-owned read state when a starting turn marks the chat unread",
|
|
1321
|
+
"ok": true
|
|
1322
|
+
},
|
|
1323
|
+
{
|
|
1324
|
+
"file": "hydrated-session-lifecycle",
|
|
1325
|
+
"serial": false,
|
|
1326
|
+
"suite": [
|
|
1327
|
+
"disposing a hydrated session"
|
|
1328
|
+
],
|
|
1329
|
+
"title": "removes it from the catalogue and deletes the file",
|
|
1330
|
+
"ok": true
|
|
1331
|
+
},
|
|
1332
|
+
{
|
|
1333
|
+
"file": "hydrated-session-lifecycle",
|
|
1334
|
+
"serial": false,
|
|
1335
|
+
"suite": [
|
|
1336
|
+
"disposing a hydrated session"
|
|
1337
|
+
],
|
|
1338
|
+
"title": "prevents an unloaded session from being recreated or hydrated during deletion",
|
|
1339
|
+
"ok": true
|
|
1340
|
+
},
|
|
1341
|
+
{
|
|
1342
|
+
"file": "hydrated-session-lifecycle",
|
|
1343
|
+
"serial": false,
|
|
1344
|
+
"suite": [
|
|
1345
|
+
"resuming a hydrated session"
|
|
1346
|
+
],
|
|
1347
|
+
"title": "starts an agent on the first turn and prompts it",
|
|
1348
|
+
"ok": true
|
|
1349
|
+
},
|
|
1350
|
+
{
|
|
1351
|
+
"file": "hydrated-session-lifecycle",
|
|
1352
|
+
"serial": false,
|
|
1353
|
+
"suite": [
|
|
1354
|
+
"resuming a hydrated session"
|
|
1355
|
+
],
|
|
1356
|
+
"title": "resumes onto the existing transcript rather than a fresh one",
|
|
1357
|
+
"ok": true
|
|
1358
|
+
},
|
|
1359
|
+
{
|
|
1360
|
+
"file": "hydrated-session-lifecycle",
|
|
1361
|
+
"serial": false,
|
|
1362
|
+
"suite": [
|
|
1363
|
+
"model selection on a hydrated session"
|
|
1364
|
+
],
|
|
1365
|
+
"title": "seeds the picker from the model the session was using",
|
|
1366
|
+
"ok": true
|
|
1367
|
+
},
|
|
1368
|
+
{
|
|
1369
|
+
"file": "hydrated-session-lifecycle",
|
|
1370
|
+
"serial": false,
|
|
1371
|
+
"suite": [
|
|
1372
|
+
"renaming a hydrated session"
|
|
1373
|
+
],
|
|
1374
|
+
"title": "persists the name into the session file",
|
|
1375
|
+
"ok": true
|
|
1376
|
+
},
|
|
1377
|
+
{
|
|
1378
|
+
"file": "image-input",
|
|
1379
|
+
"serial": false,
|
|
1380
|
+
"suite": [
|
|
1381
|
+
"pi image input"
|
|
1382
|
+
],
|
|
1383
|
+
"title": "converts an unsupported image type even when auto-resize is disabled",
|
|
1384
|
+
"ok": true
|
|
1385
|
+
},
|
|
1386
|
+
{
|
|
1387
|
+
"file": "image-input",
|
|
1388
|
+
"serial": false,
|
|
1389
|
+
"suite": [
|
|
1390
|
+
"pi image input"
|
|
1391
|
+
],
|
|
1392
|
+
"title": "fails when image bytes cannot be prepared",
|
|
1393
|
+
"ok": true
|
|
1394
|
+
},
|
|
1395
|
+
{
|
|
1396
|
+
"file": "image-session",
|
|
1397
|
+
"serial": false,
|
|
1398
|
+
"suite": [],
|
|
1399
|
+
"title": "passes and persists images while honouring preflight cancellation",
|
|
1400
|
+
"ok": true
|
|
1401
|
+
},
|
|
1402
|
+
{
|
|
1403
|
+
"file": "live-turn",
|
|
1404
|
+
"serial": false,
|
|
1405
|
+
"suite": [],
|
|
1406
|
+
"title": "live turn # SKIP needs a real model \u2014 set PI_AHP_LIVE_SETTINGS and PI_AHP_LIVE_AUTH",
|
|
1407
|
+
"ok": true
|
|
1408
|
+
},
|
|
1409
|
+
{
|
|
1410
|
+
"file": "mapper-fixtures",
|
|
1411
|
+
"serial": false,
|
|
1412
|
+
"suite": [
|
|
1413
|
+
"recorded stream replay \u2014 invariants"
|
|
1414
|
+
],
|
|
1415
|
+
"title": "plain-text \u2014 A reply with no tool calls \u2014 the simplest possible turn.",
|
|
1416
|
+
"ok": true
|
|
1417
|
+
},
|
|
1418
|
+
{
|
|
1419
|
+
"file": "mapper-fixtures",
|
|
1420
|
+
"serial": false,
|
|
1421
|
+
"suite": [
|
|
1422
|
+
"recorded stream replay \u2014 invariants"
|
|
1423
|
+
],
|
|
1424
|
+
"title": "single-tool \u2014 One tool call, then an answer derived from its result.",
|
|
1425
|
+
"ok": true
|
|
1426
|
+
},
|
|
1427
|
+
{
|
|
1428
|
+
"file": "mapper-fixtures",
|
|
1429
|
+
"serial": false,
|
|
1430
|
+
"suite": [
|
|
1431
|
+
"recorded stream replay \u2014 invariants"
|
|
1432
|
+
],
|
|
1433
|
+
"title": "parallel-tools \u2014 Several tool calls in one assistant message \u2014 exercises contentIndex fan-out.",
|
|
1434
|
+
"ok": true
|
|
1435
|
+
},
|
|
1436
|
+
{
|
|
1437
|
+
"file": "mapper-fixtures",
|
|
1438
|
+
"serial": false,
|
|
1439
|
+
"suite": [
|
|
1440
|
+
"recorded stream replay \u2014 invariants"
|
|
1441
|
+
],
|
|
1442
|
+
"title": "tool-loop \u2014 Two or more assistant messages in one turn \u2014 the case where contentIndex restarts and partIds must not collide.",
|
|
1443
|
+
"ok": true
|
|
1444
|
+
},
|
|
1445
|
+
{
|
|
1446
|
+
"file": "mapper-fixtures",
|
|
1447
|
+
"serial": false,
|
|
1448
|
+
"suite": [
|
|
1449
|
+
"recorded stream replay \u2014 invariants"
|
|
1450
|
+
],
|
|
1451
|
+
"title": "tool-error \u2014 A failing tool call the agent has to recover from.",
|
|
1452
|
+
"ok": true
|
|
1453
|
+
},
|
|
1454
|
+
{
|
|
1455
|
+
"file": "mapper-fixtures",
|
|
1456
|
+
"serial": false,
|
|
1457
|
+
"suite": [
|
|
1458
|
+
"recorded stream replay \u2014 invariants"
|
|
1459
|
+
],
|
|
1460
|
+
"title": "abort \u2014 A turn cancelled while it is running.",
|
|
1461
|
+
"ok": true
|
|
1462
|
+
},
|
|
1463
|
+
{
|
|
1464
|
+
"file": "mapper-fixtures",
|
|
1465
|
+
"serial": false,
|
|
1466
|
+
"suite": [
|
|
1467
|
+
"recorded stream replay \u2014 invariants"
|
|
1468
|
+
],
|
|
1469
|
+
"title": "steering \u2014 A steering message injected into a running turn.",
|
|
1470
|
+
"ok": true
|
|
1471
|
+
},
|
|
1472
|
+
{
|
|
1473
|
+
"file": "mapper-fixtures",
|
|
1474
|
+
"serial": false,
|
|
1475
|
+
"suite": [
|
|
1476
|
+
"recorded stream replay \u2014 invariants"
|
|
1477
|
+
],
|
|
1478
|
+
"title": "tool-edit \u2014 An `edit` call \u2014 the one tool whose result carries a diff and a patch.",
|
|
1479
|
+
"ok": true
|
|
1480
|
+
},
|
|
1481
|
+
{
|
|
1482
|
+
"file": "mapper-fixtures",
|
|
1483
|
+
"serial": false,
|
|
1484
|
+
"suite": [
|
|
1485
|
+
"recorded stream replay \u2014 invariants"
|
|
1486
|
+
],
|
|
1487
|
+
"title": "tool-write \u2014 A `write` call \u2014 a whole new file rather than an edit to one.",
|
|
1488
|
+
"ok": true
|
|
1489
|
+
},
|
|
1490
|
+
{
|
|
1491
|
+
"file": "mapper-fixtures",
|
|
1492
|
+
"serial": false,
|
|
1493
|
+
"suite": [
|
|
1494
|
+
"recorded stream replay \u2014 invariants"
|
|
1495
|
+
],
|
|
1496
|
+
"title": "tool-bash \u2014 A `bash` call \u2014 stdout, exit status, and pi's truncation metadata.",
|
|
1497
|
+
"ok": true
|
|
1498
|
+
},
|
|
1499
|
+
{
|
|
1500
|
+
"file": "mapper-fixtures",
|
|
1501
|
+
"serial": false,
|
|
1502
|
+
"suite": [
|
|
1503
|
+
"recorded stream replay \u2014 invariants"
|
|
1504
|
+
],
|
|
1505
|
+
"title": "tool-ls \u2014 An `ls` call \u2014 a directory listing, which reports its own entry limit.",
|
|
1506
|
+
"ok": true
|
|
1507
|
+
},
|
|
1508
|
+
{
|
|
1509
|
+
"file": "mapper-fixtures",
|
|
1510
|
+
"serial": false,
|
|
1511
|
+
"suite": [
|
|
1512
|
+
"recorded stream replay \u2014 invariants"
|
|
1513
|
+
],
|
|
1514
|
+
"title": "tool-grep \u2014 A `grep` call \u2014 match counts and line truncation live in its details.",
|
|
1515
|
+
"ok": true
|
|
1516
|
+
},
|
|
1517
|
+
{
|
|
1518
|
+
"file": "mapper-fixtures",
|
|
1519
|
+
"serial": false,
|
|
1520
|
+
"suite": [
|
|
1521
|
+
"recorded stream replay \u2014 invariants"
|
|
1522
|
+
],
|
|
1523
|
+
"title": "tool-find \u2014 A `find` call \u2014 path globbing, with its own result limit.",
|
|
1524
|
+
"ok": true
|
|
1525
|
+
},
|
|
1526
|
+
{
|
|
1527
|
+
"file": "mapper-fixtures",
|
|
1528
|
+
"serial": false,
|
|
1529
|
+
"suite": [
|
|
1530
|
+
"recorded stream replay \u2014 invariants"
|
|
1531
|
+
],
|
|
1532
|
+
"title": "compaction \u2014 A manual compaction \u2014 `buildContextEntries` starts from the newest one, so this is the boundary history rebuilding and turn paging are built around.",
|
|
1533
|
+
"ok": true
|
|
1534
|
+
},
|
|
1535
|
+
{
|
|
1536
|
+
"file": "mapper-fixtures",
|
|
1537
|
+
"serial": false,
|
|
1538
|
+
"suite": [
|
|
1539
|
+
"recorded stream replay \u2014 invariants"
|
|
1540
|
+
],
|
|
1541
|
+
"title": "bash-long-output \u2014 A bash call whose output is large enough for pi to stream updates and report truncation.",
|
|
1542
|
+
"ok": true
|
|
1543
|
+
},
|
|
1544
|
+
{
|
|
1545
|
+
"file": "mapper-fixtures",
|
|
1546
|
+
"serial": false,
|
|
1547
|
+
"suite": [
|
|
1548
|
+
"recorded stream replay \u2014 per scenario"
|
|
1549
|
+
],
|
|
1550
|
+
"title": "plain-text: answers with no tool calls",
|
|
1551
|
+
"ok": true
|
|
1552
|
+
},
|
|
1553
|
+
{
|
|
1554
|
+
"file": "mapper-fixtures",
|
|
1555
|
+
"serial": false,
|
|
1556
|
+
"suite": [
|
|
1557
|
+
"recorded stream replay \u2014 per scenario"
|
|
1558
|
+
],
|
|
1559
|
+
"title": "describes a tool call in terms a user can act on",
|
|
1560
|
+
"ok": true
|
|
1561
|
+
},
|
|
1562
|
+
{
|
|
1563
|
+
"file": "mapper-fixtures",
|
|
1564
|
+
"serial": false,
|
|
1565
|
+
"suite": [
|
|
1566
|
+
"recorded stream replay \u2014 per scenario"
|
|
1567
|
+
],
|
|
1568
|
+
"title": "shows a tool's subject rather than its arguments as JSON",
|
|
1569
|
+
"ok": true
|
|
1570
|
+
},
|
|
1571
|
+
{
|
|
1572
|
+
"file": "mapper-fixtures",
|
|
1573
|
+
"serial": false,
|
|
1574
|
+
"suite": [
|
|
1575
|
+
"recorded stream replay \u2014 per scenario"
|
|
1576
|
+
],
|
|
1577
|
+
"title": "tool-edit: hands the client the patch, not a count of edited blocks",
|
|
1578
|
+
"ok": true
|
|
1579
|
+
},
|
|
1580
|
+
{
|
|
1581
|
+
"file": "mapper-fixtures",
|
|
1582
|
+
"serial": false,
|
|
1583
|
+
"suite": [
|
|
1584
|
+
"recorded stream replay \u2014 per scenario"
|
|
1585
|
+
],
|
|
1586
|
+
"title": "single-tool: runs one tool and answers from its result",
|
|
1587
|
+
"ok": true
|
|
1588
|
+
},
|
|
1589
|
+
{
|
|
1590
|
+
"file": "mapper-fixtures",
|
|
1591
|
+
"serial": false,
|
|
1592
|
+
"suite": [
|
|
1593
|
+
"recorded stream replay \u2014 per scenario"
|
|
1594
|
+
],
|
|
1595
|
+
"title": "parallel-tools: keeps several tool calls in one message distinct",
|
|
1596
|
+
"ok": true
|
|
1597
|
+
},
|
|
1598
|
+
{
|
|
1599
|
+
"file": "mapper-fixtures",
|
|
1600
|
+
"serial": false,
|
|
1601
|
+
"suite": [
|
|
1602
|
+
"recorded stream replay \u2014 per scenario"
|
|
1603
|
+
],
|
|
1604
|
+
"title": "tool-loop: spans several assistant messages without part collisions",
|
|
1605
|
+
"ok": true
|
|
1606
|
+
},
|
|
1607
|
+
{
|
|
1608
|
+
"file": "mapper-fixtures",
|
|
1609
|
+
"serial": false,
|
|
1610
|
+
"suite": [
|
|
1611
|
+
"recorded stream replay \u2014 per scenario"
|
|
1612
|
+
],
|
|
1613
|
+
"title": "tool-error: surfaces a failed tool without failing the turn",
|
|
1614
|
+
"ok": true
|
|
1615
|
+
},
|
|
1616
|
+
{
|
|
1617
|
+
"file": "mapper-fixtures",
|
|
1618
|
+
"serial": false,
|
|
1619
|
+
"suite": [
|
|
1620
|
+
"recorded stream replay \u2014 per scenario"
|
|
1621
|
+
],
|
|
1622
|
+
"title": "abort: ends the turn as cancelled",
|
|
1623
|
+
"ok": true
|
|
1624
|
+
},
|
|
1625
|
+
{
|
|
1626
|
+
"file": "mapper-fixtures",
|
|
1627
|
+
"serial": false,
|
|
1628
|
+
"suite": [
|
|
1629
|
+
"recorded stream replay \u2014 per scenario"
|
|
1630
|
+
],
|
|
1631
|
+
"title": "steering: the injected message becomes its own turn",
|
|
1632
|
+
"ok": true
|
|
1633
|
+
},
|
|
1634
|
+
{
|
|
1635
|
+
"file": "message-input",
|
|
1636
|
+
"serial": false,
|
|
1637
|
+
"suite": [
|
|
1638
|
+
"pi message input"
|
|
1639
|
+
],
|
|
1640
|
+
"title": "appends a file resource as a path with its selection",
|
|
1641
|
+
"ok": true
|
|
1642
|
+
},
|
|
1643
|
+
{
|
|
1644
|
+
"file": "message-input",
|
|
1645
|
+
"serial": false,
|
|
1646
|
+
"suite": [
|
|
1647
|
+
"pi message input"
|
|
1648
|
+
],
|
|
1649
|
+
"title": "appends attachment representations in order",
|
|
1650
|
+
"ok": true
|
|
1651
|
+
},
|
|
1652
|
+
{
|
|
1653
|
+
"file": "message-input",
|
|
1654
|
+
"serial": false,
|
|
1655
|
+
"suite": [
|
|
1656
|
+
"pi message input"
|
|
1657
|
+
],
|
|
1658
|
+
"title": "preserves resource URIs whose schemes may carry their own routing",
|
|
1659
|
+
"ok": true
|
|
1660
|
+
},
|
|
1661
|
+
{
|
|
1662
|
+
"file": "message-input",
|
|
1663
|
+
"serial": false,
|
|
1664
|
+
"suite": [
|
|
1665
|
+
"pi message input"
|
|
1666
|
+
],
|
|
1667
|
+
"title": "preserves a VS Code-wrapped resource without guessing which host owns it",
|
|
1668
|
+
"ok": true
|
|
1669
|
+
},
|
|
1670
|
+
{
|
|
1671
|
+
"file": "message-input",
|
|
1672
|
+
"serial": false,
|
|
1673
|
+
"suite": [
|
|
1674
|
+
"pi message input"
|
|
1675
|
+
],
|
|
1676
|
+
"title": "requires client-created simple attachments to carry a model representation",
|
|
1677
|
+
"ok": true
|
|
1678
|
+
},
|
|
1679
|
+
{
|
|
1680
|
+
"file": "message-input",
|
|
1681
|
+
"serial": false,
|
|
1682
|
+
"suite": [
|
|
1683
|
+
"pi message input"
|
|
1684
|
+
],
|
|
1685
|
+
"title": "separates embedded images from the text prompt",
|
|
1686
|
+
"ok": true
|
|
1687
|
+
},
|
|
1688
|
+
{
|
|
1689
|
+
"file": "message-input",
|
|
1690
|
+
"serial": false,
|
|
1691
|
+
"suite": [
|
|
1692
|
+
"pi message input"
|
|
1693
|
+
],
|
|
1694
|
+
"title": "rejects an empty embedded image",
|
|
1695
|
+
"ok": true
|
|
1696
|
+
},
|
|
1697
|
+
{
|
|
1698
|
+
"file": "message-input",
|
|
1699
|
+
"serial": false,
|
|
1700
|
+
"suite": [
|
|
1701
|
+
"pi message input"
|
|
1702
|
+
],
|
|
1703
|
+
"title": "appends UTF-8 embedded text without interpreting its MIME type",
|
|
1704
|
+
"ok": true
|
|
1705
|
+
},
|
|
1706
|
+
{
|
|
1707
|
+
"file": "message-input",
|
|
1708
|
+
"serial": false,
|
|
1709
|
+
"suite": [
|
|
1710
|
+
"pi message input"
|
|
1711
|
+
],
|
|
1712
|
+
"title": "keeps embedded payload under its original 1-based selection marker",
|
|
1713
|
+
"ok": true
|
|
1714
|
+
},
|
|
1715
|
+
{
|
|
1716
|
+
"file": "message-input",
|
|
1717
|
+
"serial": false,
|
|
1718
|
+
"suite": [
|
|
1719
|
+
"pi message input"
|
|
1720
|
+
],
|
|
1721
|
+
"title": "rejects malformed or non-text embedded payloads",
|
|
1722
|
+
"ok": true
|
|
1723
|
+
},
|
|
1724
|
+
{
|
|
1725
|
+
"file": "message-input",
|
|
1726
|
+
"serial": false,
|
|
1727
|
+
"suite": [
|
|
1728
|
+
"pi message input"
|
|
1729
|
+
],
|
|
1730
|
+
"title": "rejects malformed message and selection shapes without throwing",
|
|
1731
|
+
"ok": true
|
|
1732
|
+
},
|
|
1733
|
+
{
|
|
1734
|
+
"file": "message-input",
|
|
1735
|
+
"serial": false,
|
|
1736
|
+
"suite": [
|
|
1737
|
+
"pi message input"
|
|
1738
|
+
],
|
|
1739
|
+
"title": "rejects annotations and chat attachments",
|
|
1740
|
+
"ok": true
|
|
1741
|
+
},
|
|
1742
|
+
{
|
|
1743
|
+
"file": "model-discovery",
|
|
1744
|
+
"serial": false,
|
|
1745
|
+
"suite": [],
|
|
1746
|
+
"title": "advertises extension models and uses pi's configured default",
|
|
1747
|
+
"ok": true
|
|
1748
|
+
},
|
|
1749
|
+
{
|
|
1750
|
+
"file": "model-discovery",
|
|
1751
|
+
"serial": false,
|
|
1752
|
+
"suite": [],
|
|
1753
|
+
"title": "resolves stale and provider-qualified model selections safely",
|
|
1754
|
+
"ok": true
|
|
1755
|
+
},
|
|
1756
|
+
{
|
|
1757
|
+
"file": "models",
|
|
1758
|
+
"serial": false,
|
|
1759
|
+
"suite": [
|
|
1760
|
+
"model mapping"
|
|
1761
|
+
],
|
|
1762
|
+
"title": "offers the standard thinking levels when no extended levels are declared",
|
|
1763
|
+
"ok": true
|
|
1764
|
+
},
|
|
1765
|
+
{
|
|
1766
|
+
"file": "models",
|
|
1767
|
+
"serial": false,
|
|
1768
|
+
"suite": [
|
|
1769
|
+
"model mapping"
|
|
1770
|
+
],
|
|
1771
|
+
"title": "offers only `off` for a model without reasoning",
|
|
1772
|
+
"ok": true
|
|
1773
|
+
},
|
|
1774
|
+
{
|
|
1775
|
+
"file": "models",
|
|
1776
|
+
"serial": false,
|
|
1777
|
+
"suite": [
|
|
1778
|
+
"model mapping"
|
|
1779
|
+
],
|
|
1780
|
+
"title": "drops unsupported levels and opts into extended levels exactly as pi does",
|
|
1781
|
+
"ok": true
|
|
1782
|
+
},
|
|
1783
|
+
{
|
|
1784
|
+
"file": "models",
|
|
1785
|
+
"serial": false,
|
|
1786
|
+
"suite": [
|
|
1787
|
+
"model mapping"
|
|
1788
|
+
],
|
|
1789
|
+
"title": "uses pi's provider-qualified model ids on the wire",
|
|
1790
|
+
"ok": true
|
|
1791
|
+
},
|
|
1792
|
+
{
|
|
1793
|
+
"file": "models",
|
|
1794
|
+
"serial": false,
|
|
1795
|
+
"suite": [
|
|
1796
|
+
"model mapping"
|
|
1797
|
+
],
|
|
1798
|
+
"title": "resolves qualified ids without confusing providers",
|
|
1799
|
+
"ok": true
|
|
1800
|
+
},
|
|
1801
|
+
{
|
|
1802
|
+
"file": "models",
|
|
1803
|
+
"serial": false,
|
|
1804
|
+
"suite": [
|
|
1805
|
+
"model mapping"
|
|
1806
|
+
],
|
|
1807
|
+
"title": "accepts an unambiguous legacy bare model id",
|
|
1808
|
+
"ok": true
|
|
1809
|
+
},
|
|
1810
|
+
{
|
|
1811
|
+
"file": "models",
|
|
1812
|
+
"serial": false,
|
|
1813
|
+
"suite": [
|
|
1814
|
+
"model mapping"
|
|
1815
|
+
],
|
|
1816
|
+
"title": "exposes thinking level as a model configSchema",
|
|
1817
|
+
"ok": true
|
|
1818
|
+
},
|
|
1819
|
+
{
|
|
1820
|
+
"file": "models",
|
|
1821
|
+
"serial": false,
|
|
1822
|
+
"suite": [
|
|
1823
|
+
"model mapping"
|
|
1824
|
+
],
|
|
1825
|
+
"title": "maps pi input modalities onto the vision capability",
|
|
1826
|
+
"ok": true
|
|
1827
|
+
},
|
|
1828
|
+
{
|
|
1829
|
+
"file": "models",
|
|
1830
|
+
"serial": false,
|
|
1831
|
+
"suite": [
|
|
1832
|
+
"model mapping"
|
|
1833
|
+
],
|
|
1834
|
+
"title": "omits the configSchema when there is nothing to choose",
|
|
1835
|
+
"ok": true
|
|
1836
|
+
},
|
|
1837
|
+
{
|
|
1838
|
+
"file": "models",
|
|
1839
|
+
"serial": false,
|
|
1840
|
+
"suite": [
|
|
1841
|
+
"model mapping"
|
|
1842
|
+
],
|
|
1843
|
+
"title": "produces a schema-conforming AgentInfo",
|
|
1844
|
+
"ok": true
|
|
1845
|
+
},
|
|
1846
|
+
{
|
|
1847
|
+
"file": "pi-host",
|
|
1848
|
+
"serial": false,
|
|
1849
|
+
"suite": [],
|
|
1850
|
+
"title": "wires product services through createPiHost",
|
|
1851
|
+
"ok": true
|
|
1852
|
+
},
|
|
1853
|
+
{
|
|
1854
|
+
"file": "pi-replay",
|
|
1855
|
+
"serial": false,
|
|
1856
|
+
"suite": [
|
|
1857
|
+
"recorded provider streams preserve AHP-visible behavior"
|
|
1858
|
+
],
|
|
1859
|
+
"title": "plain-text",
|
|
1860
|
+
"ok": true
|
|
1861
|
+
},
|
|
1862
|
+
{
|
|
1863
|
+
"file": "pi-replay",
|
|
1864
|
+
"serial": false,
|
|
1865
|
+
"suite": [
|
|
1866
|
+
"recorded provider streams preserve AHP-visible behavior"
|
|
1867
|
+
],
|
|
1868
|
+
"title": "single-tool",
|
|
1869
|
+
"ok": true
|
|
1870
|
+
},
|
|
1871
|
+
{
|
|
1872
|
+
"file": "pi-replay",
|
|
1873
|
+
"serial": false,
|
|
1874
|
+
"suite": [
|
|
1875
|
+
"recorded provider streams preserve AHP-visible behavior"
|
|
1876
|
+
],
|
|
1877
|
+
"title": "parallel-tools",
|
|
1878
|
+
"ok": true
|
|
1879
|
+
},
|
|
1880
|
+
{
|
|
1881
|
+
"file": "pi-replay",
|
|
1882
|
+
"serial": false,
|
|
1883
|
+
"suite": [
|
|
1884
|
+
"recorded provider streams preserve AHP-visible behavior"
|
|
1885
|
+
],
|
|
1886
|
+
"title": "tool-loop",
|
|
1887
|
+
"ok": true
|
|
1888
|
+
},
|
|
1889
|
+
{
|
|
1890
|
+
"file": "pi-replay",
|
|
1891
|
+
"serial": false,
|
|
1892
|
+
"suite": [
|
|
1893
|
+
"recorded provider streams preserve AHP-visible behavior"
|
|
1894
|
+
],
|
|
1895
|
+
"title": "tool-error",
|
|
1896
|
+
"ok": true
|
|
1897
|
+
},
|
|
1898
|
+
{
|
|
1899
|
+
"file": "pi-replay",
|
|
1900
|
+
"serial": false,
|
|
1901
|
+
"suite": [
|
|
1902
|
+
"recorded provider streams preserve AHP-visible behavior"
|
|
1903
|
+
],
|
|
1904
|
+
"title": "abort",
|
|
1905
|
+
"ok": true
|
|
1906
|
+
},
|
|
1907
|
+
{
|
|
1908
|
+
"file": "pi-replay",
|
|
1909
|
+
"serial": false,
|
|
1910
|
+
"suite": [
|
|
1911
|
+
"recorded provider streams preserve AHP-visible behavior"
|
|
1912
|
+
],
|
|
1913
|
+
"title": "steering",
|
|
1914
|
+
"ok": true
|
|
1915
|
+
},
|
|
1916
|
+
{
|
|
1917
|
+
"file": "pi-replay",
|
|
1918
|
+
"serial": false,
|
|
1919
|
+
"suite": [
|
|
1920
|
+
"recorded provider streams preserve AHP-visible behavior"
|
|
1921
|
+
],
|
|
1922
|
+
"title": "tool-edit",
|
|
1923
|
+
"ok": true
|
|
1924
|
+
},
|
|
1925
|
+
{
|
|
1926
|
+
"file": "pi-replay",
|
|
1927
|
+
"serial": false,
|
|
1928
|
+
"suite": [
|
|
1929
|
+
"recorded provider streams preserve AHP-visible behavior"
|
|
1930
|
+
],
|
|
1931
|
+
"title": "tool-write",
|
|
1932
|
+
"ok": true
|
|
1933
|
+
},
|
|
1934
|
+
{
|
|
1935
|
+
"file": "pi-replay",
|
|
1936
|
+
"serial": false,
|
|
1937
|
+
"suite": [
|
|
1938
|
+
"recorded provider streams preserve AHP-visible behavior"
|
|
1939
|
+
],
|
|
1940
|
+
"title": "tool-bash",
|
|
1941
|
+
"ok": true
|
|
1942
|
+
},
|
|
1943
|
+
{
|
|
1944
|
+
"file": "pi-replay",
|
|
1945
|
+
"serial": false,
|
|
1946
|
+
"suite": [
|
|
1947
|
+
"recorded provider streams preserve AHP-visible behavior"
|
|
1948
|
+
],
|
|
1949
|
+
"title": "tool-ls",
|
|
1950
|
+
"ok": true
|
|
1951
|
+
},
|
|
1952
|
+
{
|
|
1953
|
+
"file": "pi-replay",
|
|
1954
|
+
"serial": false,
|
|
1955
|
+
"suite": [
|
|
1956
|
+
"recorded provider streams preserve AHP-visible behavior"
|
|
1957
|
+
],
|
|
1958
|
+
"title": "tool-grep",
|
|
1959
|
+
"ok": true
|
|
1960
|
+
},
|
|
1961
|
+
{
|
|
1962
|
+
"file": "pi-replay",
|
|
1963
|
+
"serial": false,
|
|
1964
|
+
"suite": [
|
|
1965
|
+
"recorded provider streams preserve AHP-visible behavior"
|
|
1966
|
+
],
|
|
1967
|
+
"title": "tool-find",
|
|
1968
|
+
"ok": true
|
|
1969
|
+
},
|
|
1970
|
+
{
|
|
1971
|
+
"file": "pi-replay",
|
|
1972
|
+
"serial": false,
|
|
1973
|
+
"suite": [
|
|
1974
|
+
"recorded provider streams preserve AHP-visible behavior"
|
|
1975
|
+
],
|
|
1976
|
+
"title": "compaction",
|
|
1977
|
+
"ok": true
|
|
1978
|
+
},
|
|
1979
|
+
{
|
|
1980
|
+
"file": "pi-replay",
|
|
1981
|
+
"serial": false,
|
|
1982
|
+
"suite": [
|
|
1983
|
+
"recorded provider streams preserve AHP-visible behavior"
|
|
1984
|
+
],
|
|
1985
|
+
"title": "bash-long-output",
|
|
1986
|
+
"ok": true
|
|
1987
|
+
},
|
|
1988
|
+
{
|
|
1989
|
+
"file": "project-trust",
|
|
1990
|
+
"serial": false,
|
|
1991
|
+
"suite": [
|
|
1992
|
+
"project trust"
|
|
1993
|
+
],
|
|
1994
|
+
"title": "trusts by default, matching raw pi SDK construction",
|
|
1995
|
+
"ok": true
|
|
1996
|
+
},
|
|
1997
|
+
{
|
|
1998
|
+
"file": "project-trust",
|
|
1999
|
+
"serial": false,
|
|
2000
|
+
"suite": [
|
|
2001
|
+
"project trust"
|
|
2002
|
+
],
|
|
2003
|
+
"title": "trusts a directory with nothing to gate",
|
|
2004
|
+
"ok": true
|
|
2005
|
+
},
|
|
2006
|
+
{
|
|
2007
|
+
"file": "project-trust",
|
|
2008
|
+
"serial": false,
|
|
2009
|
+
"suite": [
|
|
2010
|
+
"project trust"
|
|
2011
|
+
],
|
|
2012
|
+
"title": "declines a project nobody has approved, under `inherit`",
|
|
2013
|
+
"ok": true
|
|
2014
|
+
},
|
|
2015
|
+
{
|
|
2016
|
+
"file": "project-trust",
|
|
2017
|
+
"serial": false,
|
|
2018
|
+
"suite": [
|
|
2019
|
+
"project trust"
|
|
2020
|
+
],
|
|
2021
|
+
"title": "inherits a decision the user made with pi's CLI",
|
|
2022
|
+
"ok": true
|
|
2023
|
+
},
|
|
2024
|
+
{
|
|
2025
|
+
"file": "project-trust",
|
|
2026
|
+
"serial": false,
|
|
2027
|
+
"suite": [
|
|
2028
|
+
"project trust"
|
|
2029
|
+
],
|
|
2030
|
+
"title": "honours an explicit distrust from pi's CLI",
|
|
2031
|
+
"ok": true
|
|
2032
|
+
},
|
|
2033
|
+
{
|
|
2034
|
+
"file": "project-trust",
|
|
2035
|
+
"serial": false,
|
|
2036
|
+
"suite": [
|
|
2037
|
+
"project trust"
|
|
2038
|
+
],
|
|
2039
|
+
"title": "the `never` policy overrides a stored trust decision",
|
|
2040
|
+
"ok": true
|
|
2041
|
+
},
|
|
2042
|
+
{
|
|
2043
|
+
"file": "project-trust",
|
|
2044
|
+
"serial": false,
|
|
2045
|
+
"suite": [
|
|
2046
|
+
"project trust"
|
|
2047
|
+
],
|
|
2048
|
+
"title": "applies the decision before pi loads project extensions",
|
|
2049
|
+
"ok": true
|
|
2050
|
+
},
|
|
2051
|
+
{
|
|
2052
|
+
"file": "protocol-surface",
|
|
2053
|
+
"serial": false,
|
|
2054
|
+
"suite": [
|
|
2055
|
+
"AHP command surface"
|
|
2056
|
+
],
|
|
2057
|
+
"title": "returns MethodNotFound for every deliberately unsupported command",
|
|
2058
|
+
"ok": true
|
|
2059
|
+
},
|
|
2060
|
+
{
|
|
2061
|
+
"file": "protocol-surface",
|
|
2062
|
+
"serial": false,
|
|
2063
|
+
"suite": [
|
|
2064
|
+
"AHP command surface"
|
|
2065
|
+
],
|
|
2066
|
+
"title": "requires the root routing channel on every connection-level command",
|
|
2067
|
+
"ok": true
|
|
2068
|
+
},
|
|
2069
|
+
{
|
|
2070
|
+
"file": "pty",
|
|
2071
|
+
"serial": false,
|
|
2072
|
+
"suite": [],
|
|
2073
|
+
"title": "round-trips input through a resized TTY",
|
|
2074
|
+
"ok": true
|
|
2075
|
+
},
|
|
2076
|
+
{
|
|
2077
|
+
"file": "pty",
|
|
2078
|
+
"serial": false,
|
|
2079
|
+
"suite": [],
|
|
2080
|
+
"title": "delivers Ctrl-C to the foreground job without killing the shell",
|
|
2081
|
+
"ok": true
|
|
2082
|
+
},
|
|
2083
|
+
{
|
|
2084
|
+
"file": "reconnect",
|
|
2085
|
+
"serial": false,
|
|
2086
|
+
"suite": [
|
|
2087
|
+
"reconnect"
|
|
2088
|
+
],
|
|
2089
|
+
"title": "keeps non-VS Code and explicitly misrouted reconnects strict",
|
|
2090
|
+
"ok": true
|
|
2091
|
+
},
|
|
2092
|
+
{
|
|
2093
|
+
"file": "reconnect",
|
|
2094
|
+
"serial": false,
|
|
2095
|
+
"suite": [
|
|
2096
|
+
"reconnect"
|
|
2097
|
+
],
|
|
2098
|
+
"title": "replays only the actions the client missed",
|
|
2099
|
+
"ok": true
|
|
2100
|
+
},
|
|
2101
|
+
{
|
|
2102
|
+
"file": "reconnect",
|
|
2103
|
+
"serial": false,
|
|
2104
|
+
"suite": [
|
|
2105
|
+
"reconnect"
|
|
2106
|
+
],
|
|
2107
|
+
"title": "falls back to snapshots when the gap predates the replay buffer",
|
|
2108
|
+
"ok": true
|
|
2109
|
+
},
|
|
2110
|
+
{
|
|
2111
|
+
"file": "reconnect",
|
|
2112
|
+
"serial": false,
|
|
2113
|
+
"suite": [
|
|
2114
|
+
"reconnect"
|
|
2115
|
+
],
|
|
2116
|
+
"title": "reports subscriptions it cannot resume as missing",
|
|
2117
|
+
"ok": true
|
|
2118
|
+
},
|
|
2119
|
+
{
|
|
2120
|
+
"file": "reconnect",
|
|
2121
|
+
"serial": false,
|
|
2122
|
+
"suite": [
|
|
2123
|
+
"reconnect"
|
|
2124
|
+
],
|
|
2125
|
+
"title": "returns an empty replay for a client that is already current",
|
|
2126
|
+
"ok": true
|
|
2127
|
+
},
|
|
2128
|
+
{
|
|
2129
|
+
"file": "reconnect",
|
|
2130
|
+
"serial": false,
|
|
2131
|
+
"suite": [
|
|
2132
|
+
"reconnect"
|
|
2133
|
+
],
|
|
2134
|
+
"title": "replaces a half-open connection that reuses a clientId",
|
|
2135
|
+
"ok": true
|
|
2136
|
+
},
|
|
2137
|
+
{
|
|
2138
|
+
"file": "reconnect",
|
|
2139
|
+
"serial": false,
|
|
2140
|
+
"suite": [
|
|
2141
|
+
"reconnect"
|
|
2142
|
+
],
|
|
2143
|
+
"title": "retains clientInfo when a replacement initialize omits it",
|
|
2144
|
+
"ok": true
|
|
2145
|
+
},
|
|
2146
|
+
{
|
|
2147
|
+
"file": "reconnect",
|
|
2148
|
+
"serial": false,
|
|
2149
|
+
"suite": [
|
|
2150
|
+
"reconnect"
|
|
2151
|
+
],
|
|
2152
|
+
"title": "infers the provider URI dialect without clientInfo",
|
|
2153
|
+
"ok": true
|
|
2154
|
+
},
|
|
2155
|
+
{
|
|
2156
|
+
"file": "reconnect",
|
|
2157
|
+
"serial": false,
|
|
2158
|
+
"suite": [
|
|
2159
|
+
"reconnect"
|
|
2160
|
+
],
|
|
2161
|
+
"title": "retains VS Code's URI dialect across connections",
|
|
2162
|
+
"ok": true
|
|
2163
|
+
},
|
|
2164
|
+
{
|
|
2165
|
+
"file": "reconnect",
|
|
2166
|
+
"serial": false,
|
|
2167
|
+
"suite": [
|
|
2168
|
+
"reconnect after host restart"
|
|
2169
|
+
],
|
|
2170
|
+
"title": "repairs VS Code's channel-less reconnect and restores a durable session",
|
|
2171
|
+
"ok": true
|
|
2172
|
+
},
|
|
2173
|
+
{
|
|
2174
|
+
"file": "resource-watch-policy",
|
|
2175
|
+
"serial": false,
|
|
2176
|
+
"suite": [
|
|
2177
|
+
"watch path scope and filters"
|
|
2178
|
+
],
|
|
2179
|
+
"title": "normalizes descendants and rejects siblings and prefix lookalikes",
|
|
2180
|
+
"ok": true
|
|
2181
|
+
},
|
|
2182
|
+
{
|
|
2183
|
+
"file": "resource-watch-policy",
|
|
2184
|
+
"serial": false,
|
|
2185
|
+
"suite": [
|
|
2186
|
+
"watch path scope and filters"
|
|
2187
|
+
],
|
|
2188
|
+
"title": "keeps the watched root visible regardless of filters",
|
|
2189
|
+
"ok": true
|
|
2190
|
+
},
|
|
2191
|
+
{
|
|
2192
|
+
"file": "resource-watch-policy",
|
|
2193
|
+
"serial": false,
|
|
2194
|
+
"suite": [
|
|
2195
|
+
"watch path scope and filters"
|
|
2196
|
+
],
|
|
2197
|
+
"title": "applies include alternatives and exclude precedence to every path",
|
|
2198
|
+
"ok": true
|
|
2199
|
+
},
|
|
2200
|
+
{
|
|
2201
|
+
"file": "resource-watch-policy",
|
|
2202
|
+
"serial": false,
|
|
2203
|
+
"suite": [
|
|
2204
|
+
"watch path scope and filters"
|
|
2205
|
+
],
|
|
2206
|
+
"title": "does not prune a directory just because its children alone match the include filter",
|
|
2207
|
+
"ok": true
|
|
2208
|
+
},
|
|
2209
|
+
{
|
|
2210
|
+
"file": "resource-watch-policy",
|
|
2211
|
+
"serial": false,
|
|
2212
|
+
"suite": [
|
|
2213
|
+
"watch batch transitions"
|
|
2214
|
+
],
|
|
2215
|
+
"title": "coalesces empty followed by each native event type",
|
|
2216
|
+
"ok": true
|
|
2217
|
+
},
|
|
2218
|
+
{
|
|
2219
|
+
"file": "resource-watch-policy",
|
|
2220
|
+
"serial": false,
|
|
2221
|
+
"suite": [
|
|
2222
|
+
"watch batch transitions"
|
|
2223
|
+
],
|
|
2224
|
+
"title": "coalesces added followed by each native event type",
|
|
2225
|
+
"ok": true
|
|
2226
|
+
},
|
|
2227
|
+
{
|
|
2228
|
+
"file": "resource-watch-policy",
|
|
2229
|
+
"serial": false,
|
|
2230
|
+
"suite": [
|
|
2231
|
+
"watch batch transitions"
|
|
2232
|
+
],
|
|
2233
|
+
"title": "coalesces updated followed by each native event type",
|
|
2234
|
+
"ok": true
|
|
2235
|
+
},
|
|
2236
|
+
{
|
|
2237
|
+
"file": "resource-watch-policy",
|
|
2238
|
+
"serial": false,
|
|
2239
|
+
"suite": [
|
|
2240
|
+
"watch batch transitions"
|
|
2241
|
+
],
|
|
2242
|
+
"title": "coalesces deleted followed by each native event type",
|
|
2243
|
+
"ok": true
|
|
2244
|
+
},
|
|
2245
|
+
{
|
|
2246
|
+
"file": "resource-watch-policy",
|
|
2247
|
+
"serial": false,
|
|
2248
|
+
"suite": [
|
|
2249
|
+
"watch batch transitions"
|
|
2250
|
+
],
|
|
2251
|
+
"title": "handles replacement and transient paths across longer sequences",
|
|
2252
|
+
"ok": true
|
|
2253
|
+
},
|
|
2254
|
+
{
|
|
2255
|
+
"file": "resource-watch",
|
|
2256
|
+
"serial": true,
|
|
2257
|
+
"suite": [
|
|
2258
|
+
"resource watch"
|
|
2259
|
+
],
|
|
2260
|
+
"title": "returns a watch channel whose state describes what is watched",
|
|
2261
|
+
"ok": true
|
|
2262
|
+
},
|
|
2263
|
+
{
|
|
2264
|
+
"file": "resource-watch",
|
|
2265
|
+
"serial": true,
|
|
2266
|
+
"suite": [
|
|
2267
|
+
"resource watch"
|
|
2268
|
+
],
|
|
2269
|
+
"title": "classifies newly created paths as added",
|
|
2270
|
+
"ok": true
|
|
2271
|
+
},
|
|
2272
|
+
{
|
|
2273
|
+
"file": "resource-watch",
|
|
2274
|
+
"serial": true,
|
|
2275
|
+
"suite": [
|
|
2276
|
+
"resource watch"
|
|
2277
|
+
],
|
|
2278
|
+
"title": "classifies changes to existing paths as updated",
|
|
2279
|
+
"ok": true
|
|
2280
|
+
},
|
|
2281
|
+
{
|
|
2282
|
+
"file": "resource-watch",
|
|
2283
|
+
"serial": true,
|
|
2284
|
+
"suite": [
|
|
2285
|
+
"resource watch"
|
|
2286
|
+
],
|
|
2287
|
+
"title": "watches a single file at its actual URI",
|
|
2288
|
+
"ok": true
|
|
2289
|
+
},
|
|
2290
|
+
{
|
|
2291
|
+
"file": "resource-watch",
|
|
2292
|
+
"serial": true,
|
|
2293
|
+
"suite": [
|
|
2294
|
+
"resource watch"
|
|
2295
|
+
],
|
|
2296
|
+
"title": "reports deletion and recreation of the watched file",
|
|
2297
|
+
"ok": true
|
|
2298
|
+
},
|
|
2299
|
+
{
|
|
2300
|
+
"file": "resource-watch",
|
|
2301
|
+
"serial": true,
|
|
2302
|
+
"suite": [
|
|
2303
|
+
"resource watch"
|
|
2304
|
+
],
|
|
2305
|
+
"title": "keeps a single-file watch attached across an atomic replacement",
|
|
2306
|
+
"ok": true
|
|
2307
|
+
},
|
|
2308
|
+
{
|
|
2309
|
+
"file": "resource-watch",
|
|
2310
|
+
"serial": true,
|
|
2311
|
+
"suite": [
|
|
2312
|
+
"resource watch"
|
|
2313
|
+
],
|
|
2314
|
+
"title": "keeps a directory watch attached across deletion and recreation",
|
|
2315
|
+
"ok": true
|
|
2316
|
+
},
|
|
2317
|
+
{
|
|
2318
|
+
"file": "resource-watch",
|
|
2319
|
+
"serial": true,
|
|
2320
|
+
"suite": [
|
|
2321
|
+
"resource watch"
|
|
2322
|
+
],
|
|
2323
|
+
"title": "reports both sides of a rename without assuming batch boundaries",
|
|
2324
|
+
"ok": true
|
|
2325
|
+
},
|
|
2326
|
+
{
|
|
2327
|
+
"file": "resource-watch",
|
|
2328
|
+
"serial": true,
|
|
2329
|
+
"suite": [
|
|
2330
|
+
"resource watch"
|
|
2331
|
+
],
|
|
2332
|
+
"title": "does not lose paths from a burst",
|
|
2333
|
+
"ok": true
|
|
2334
|
+
},
|
|
2335
|
+
{
|
|
2336
|
+
"file": "resource-watch",
|
|
2337
|
+
"serial": true,
|
|
2338
|
+
"suite": [
|
|
2339
|
+
"resource watch"
|
|
2340
|
+
],
|
|
2341
|
+
"title": "reports direct children with recursive=false",
|
|
2342
|
+
"ok": true
|
|
2343
|
+
},
|
|
2344
|
+
{
|
|
2345
|
+
"file": "resource-watch",
|
|
2346
|
+
"serial": true,
|
|
2347
|
+
"suite": [
|
|
2348
|
+
"resource watch"
|
|
2349
|
+
],
|
|
2350
|
+
"title": "reports grandchildren with recursive=true",
|
|
2351
|
+
"ok": true
|
|
2352
|
+
},
|
|
2353
|
+
{
|
|
2354
|
+
"file": "resource-watch",
|
|
2355
|
+
"serial": true,
|
|
2356
|
+
"suite": [
|
|
2357
|
+
"resource watch"
|
|
2358
|
+
],
|
|
2359
|
+
"title": "wires includes into native watch delivery",
|
|
2360
|
+
"ok": true
|
|
2361
|
+
},
|
|
2362
|
+
{
|
|
2363
|
+
"file": "resource-watch",
|
|
2364
|
+
"serial": true,
|
|
2365
|
+
"suite": [
|
|
2366
|
+
"resource watch"
|
|
2367
|
+
],
|
|
2368
|
+
"title": "wires excludes into native watch delivery",
|
|
2369
|
+
"ok": true
|
|
2370
|
+
},
|
|
2371
|
+
{
|
|
2372
|
+
"file": "resource-watch",
|
|
2373
|
+
"serial": true,
|
|
2374
|
+
"suite": [
|
|
2375
|
+
"resource watch"
|
|
2376
|
+
],
|
|
2377
|
+
"title": "rejects watching something that does not exist",
|
|
2378
|
+
"ok": true
|
|
2379
|
+
},
|
|
2380
|
+
{
|
|
2381
|
+
"file": "resource-watch",
|
|
2382
|
+
"serial": true,
|
|
2383
|
+
"suite": [
|
|
2384
|
+
"resource watch"
|
|
2385
|
+
],
|
|
2386
|
+
"title": "rejects a recursive watch on a file",
|
|
2387
|
+
"ok": true
|
|
2388
|
+
},
|
|
2389
|
+
{
|
|
2390
|
+
"file": "resource-watch",
|
|
2391
|
+
"serial": true,
|
|
2392
|
+
"suite": [
|
|
2393
|
+
"resource watch"
|
|
2394
|
+
],
|
|
2395
|
+
"title": "rejects malformed filter parameters",
|
|
2396
|
+
"ok": true
|
|
2397
|
+
},
|
|
2398
|
+
{
|
|
2399
|
+
"file": "resource-watch",
|
|
2400
|
+
"serial": true,
|
|
2401
|
+
"suite": [
|
|
2402
|
+
"resource watch \u2014 roots"
|
|
2403
|
+
],
|
|
2404
|
+
"title": "maps a permitted directory symlink back to the requested URI",
|
|
2405
|
+
"ok": true
|
|
2406
|
+
},
|
|
2407
|
+
{
|
|
2408
|
+
"file": "resource-watch",
|
|
2409
|
+
"serial": true,
|
|
2410
|
+
"suite": [
|
|
2411
|
+
"resource watch \u2014 roots"
|
|
2412
|
+
],
|
|
2413
|
+
"title": "uses the same root and symlink policy as resource operations",
|
|
2414
|
+
"ok": true
|
|
2415
|
+
},
|
|
2416
|
+
{
|
|
2417
|
+
"file": "resource-watch",
|
|
2418
|
+
"serial": true,
|
|
2419
|
+
"suite": [
|
|
2420
|
+
"resource watch \u2014 lifetime"
|
|
2421
|
+
],
|
|
2422
|
+
"title": "waits for the last subscriber before scheduling release",
|
|
2423
|
+
"ok": false
|
|
2424
|
+
},
|
|
2425
|
+
{
|
|
2426
|
+
"file": "resource-watch",
|
|
2427
|
+
"serial": true,
|
|
2428
|
+
"suite": [
|
|
2429
|
+
"resource watch \u2014 lifetime"
|
|
2430
|
+
],
|
|
2431
|
+
"title": "cancels grace on subscribe and grants a full window after the next unsubscribe",
|
|
2432
|
+
"ok": false
|
|
2433
|
+
},
|
|
2434
|
+
{
|
|
2435
|
+
"file": "resource-watch",
|
|
2436
|
+
"serial": true,
|
|
2437
|
+
"suite": [
|
|
2438
|
+
"resource watch \u2014 lifetime"
|
|
2439
|
+
],
|
|
2440
|
+
"title": "cancels grace on initialize and grants a full window after the next unsubscribe",
|
|
2441
|
+
"ok": false
|
|
2442
|
+
},
|
|
2443
|
+
{
|
|
2444
|
+
"file": "resource-watch",
|
|
2445
|
+
"serial": true,
|
|
2446
|
+
"suite": [
|
|
2447
|
+
"resource watch \u2014 lifetime"
|
|
2448
|
+
],
|
|
2449
|
+
"title": "cancels grace on reconnect and grants a full window after the next unsubscribe",
|
|
2450
|
+
"ok": false
|
|
2451
|
+
},
|
|
2452
|
+
{
|
|
2453
|
+
"file": "resource-watch",
|
|
2454
|
+
"serial": true,
|
|
2455
|
+
"suite": [
|
|
2456
|
+
"resource watch \u2014 lifetime"
|
|
2457
|
+
],
|
|
2458
|
+
"title": "releases a watch when the client disconnects without unsubscribing",
|
|
2459
|
+
"ok": false
|
|
2460
|
+
},
|
|
2461
|
+
{
|
|
2462
|
+
"file": "resource-watch",
|
|
2463
|
+
"serial": true,
|
|
2464
|
+
"suite": [
|
|
2465
|
+
"resource watch \u2014 lifetime"
|
|
2466
|
+
],
|
|
2467
|
+
"title": "releases a watch nobody ever subscribed to",
|
|
2468
|
+
"ok": false
|
|
2469
|
+
},
|
|
2470
|
+
{
|
|
2471
|
+
"file": "resource-watch",
|
|
2472
|
+
"serial": true,
|
|
2473
|
+
"suite": [
|
|
2474
|
+
"resource watch \u2014 lifetime"
|
|
2475
|
+
],
|
|
2476
|
+
"title": "disposes every watch and returns the same shutdown promise",
|
|
2477
|
+
"ok": false
|
|
2478
|
+
},
|
|
2479
|
+
{
|
|
2480
|
+
"file": "resource-watch",
|
|
2481
|
+
"serial": true,
|
|
2482
|
+
"suite": [
|
|
2483
|
+
"resource watch \u2014 lifetime"
|
|
2484
|
+
],
|
|
2485
|
+
"title": "waits for a blocked creation to settle before completing shutdown",
|
|
2486
|
+
"ok": false
|
|
2487
|
+
},
|
|
2488
|
+
{
|
|
2489
|
+
"file": "resource-watch",
|
|
2490
|
+
"serial": true,
|
|
2491
|
+
"suite": [
|
|
2492
|
+
"resource watch \u2014 lifetime"
|
|
2493
|
+
],
|
|
2494
|
+
"title": "closes a native watcher if shutdown wins at its ready boundary",
|
|
2495
|
+
"ok": false
|
|
2496
|
+
},
|
|
2497
|
+
{
|
|
2498
|
+
"file": "resource-watch",
|
|
2499
|
+
"serial": true,
|
|
2500
|
+
"suite": [
|
|
2501
|
+
"resource watch \u2014 lifetime"
|
|
2502
|
+
],
|
|
2503
|
+
"title": "drains in-flight creations and rejects new ones after shutdown",
|
|
2504
|
+
"ok": false
|
|
2505
|
+
},
|
|
2506
|
+
{
|
|
2507
|
+
"file": "resource",
|
|
2508
|
+
"serial": false,
|
|
2509
|
+
"suite": [
|
|
2510
|
+
"resource operations"
|
|
2511
|
+
],
|
|
2512
|
+
"title": "reads a text file as utf-8 with a content type",
|
|
2513
|
+
"ok": true
|
|
2514
|
+
},
|
|
2515
|
+
{
|
|
2516
|
+
"file": "resource",
|
|
2517
|
+
"serial": false,
|
|
2518
|
+
"suite": [
|
|
2519
|
+
"resource operations"
|
|
2520
|
+
],
|
|
2521
|
+
"title": "detects valid UTF-8 independently of the extension and reports known MIME types",
|
|
2522
|
+
"ok": true
|
|
2523
|
+
},
|
|
2524
|
+
{
|
|
2525
|
+
"file": "resource",
|
|
2526
|
+
"serial": false,
|
|
2527
|
+
"suite": [
|
|
2528
|
+
"resource operations"
|
|
2529
|
+
],
|
|
2530
|
+
"title": "falls back to base64 when content is not valid UTF-8",
|
|
2531
|
+
"ok": true
|
|
2532
|
+
},
|
|
2533
|
+
{
|
|
2534
|
+
"file": "resource",
|
|
2535
|
+
"serial": false,
|
|
2536
|
+
"suite": [
|
|
2537
|
+
"resource operations"
|
|
2538
|
+
],
|
|
2539
|
+
"title": "honours an explicitly requested encoding",
|
|
2540
|
+
"ok": true
|
|
2541
|
+
},
|
|
2542
|
+
{
|
|
2543
|
+
"file": "resource",
|
|
2544
|
+
"serial": false,
|
|
2545
|
+
"suite": [
|
|
2546
|
+
"resource operations"
|
|
2547
|
+
],
|
|
2548
|
+
"title": "lists a directory with directories first",
|
|
2549
|
+
"ok": true
|
|
2550
|
+
},
|
|
2551
|
+
{
|
|
2552
|
+
"file": "resource",
|
|
2553
|
+
"serial": false,
|
|
2554
|
+
"suite": [
|
|
2555
|
+
"resource operations"
|
|
2556
|
+
],
|
|
2557
|
+
"title": "resolves files and symlinks with canonical metadata",
|
|
2558
|
+
"ok": true
|
|
2559
|
+
},
|
|
2560
|
+
{
|
|
2561
|
+
"file": "resource",
|
|
2562
|
+
"serial": false,
|
|
2563
|
+
"suite": [
|
|
2564
|
+
"resource operations"
|
|
2565
|
+
],
|
|
2566
|
+
"title": "writes, then reads back what it wrote",
|
|
2567
|
+
"ok": true
|
|
2568
|
+
},
|
|
2569
|
+
{
|
|
2570
|
+
"file": "resource",
|
|
2571
|
+
"serial": false,
|
|
2572
|
+
"suite": [
|
|
2573
|
+
"resource operations"
|
|
2574
|
+
],
|
|
2575
|
+
"title": "reports a missing parent directory instead of creating it implicitly",
|
|
2576
|
+
"ok": true
|
|
2577
|
+
},
|
|
2578
|
+
{
|
|
2579
|
+
"file": "resource",
|
|
2580
|
+
"serial": false,
|
|
2581
|
+
"suite": [
|
|
2582
|
+
"resource operations"
|
|
2583
|
+
],
|
|
2584
|
+
"title": "appends without clobbering",
|
|
2585
|
+
"ok": true
|
|
2586
|
+
},
|
|
2587
|
+
{
|
|
2588
|
+
"file": "resource",
|
|
2589
|
+
"serial": false,
|
|
2590
|
+
"suite": [
|
|
2591
|
+
"resource operations"
|
|
2592
|
+
],
|
|
2593
|
+
"title": "refuses to overwrite when createOnly is set",
|
|
2594
|
+
"ok": true
|
|
2595
|
+
},
|
|
2596
|
+
{
|
|
2597
|
+
"file": "resource",
|
|
2598
|
+
"serial": false,
|
|
2599
|
+
"suite": [
|
|
2600
|
+
"resource operations"
|
|
2601
|
+
],
|
|
2602
|
+
"title": "applies byte positions for truncate, append, and insert",
|
|
2603
|
+
"ok": true
|
|
2604
|
+
},
|
|
2605
|
+
{
|
|
2606
|
+
"file": "resource",
|
|
2607
|
+
"serial": false,
|
|
2608
|
+
"suite": [
|
|
2609
|
+
"resource operations"
|
|
2610
|
+
],
|
|
2611
|
+
"title": "rejects invalid write modes and positions",
|
|
2612
|
+
"ok": true
|
|
2613
|
+
},
|
|
2614
|
+
{
|
|
2615
|
+
"file": "resource",
|
|
2616
|
+
"serial": false,
|
|
2617
|
+
"suite": [
|
|
2618
|
+
"resource operations"
|
|
2619
|
+
],
|
|
2620
|
+
"title": "enforces ifMatch and serializes competing conditional writes",
|
|
2621
|
+
"ok": true
|
|
2622
|
+
},
|
|
2623
|
+
{
|
|
2624
|
+
"file": "resource",
|
|
2625
|
+
"serial": false,
|
|
2626
|
+
"suite": [
|
|
2627
|
+
"resource operations"
|
|
2628
|
+
],
|
|
2629
|
+
"title": "makes directories with mkdir -p semantics",
|
|
2630
|
+
"ok": true
|
|
2631
|
+
},
|
|
2632
|
+
{
|
|
2633
|
+
"file": "resource",
|
|
2634
|
+
"serial": false,
|
|
2635
|
+
"suite": [
|
|
2636
|
+
"resource operations"
|
|
2637
|
+
],
|
|
2638
|
+
"title": "copies and moves files",
|
|
2639
|
+
"ok": true
|
|
2640
|
+
},
|
|
2641
|
+
{
|
|
2642
|
+
"file": "resource",
|
|
2643
|
+
"serial": false,
|
|
2644
|
+
"suite": [
|
|
2645
|
+
"resource operations"
|
|
2646
|
+
],
|
|
2647
|
+
"title": "fails a copy onto an existing destination when asked to",
|
|
2648
|
+
"ok": true
|
|
2649
|
+
},
|
|
2650
|
+
{
|
|
2651
|
+
"file": "resource",
|
|
2652
|
+
"serial": false,
|
|
2653
|
+
"suite": [
|
|
2654
|
+
"resource operations"
|
|
2655
|
+
],
|
|
2656
|
+
"title": "deletes files, and directories only when recursion is requested",
|
|
2657
|
+
"ok": true
|
|
2658
|
+
},
|
|
2659
|
+
{
|
|
2660
|
+
"file": "resource",
|
|
2661
|
+
"serial": false,
|
|
2662
|
+
"suite": [
|
|
2663
|
+
"resource operations"
|
|
2664
|
+
],
|
|
2665
|
+
"title": "reports a missing file as NotFound",
|
|
2666
|
+
"ok": true
|
|
2667
|
+
},
|
|
2668
|
+
{
|
|
2669
|
+
"file": "resource",
|
|
2670
|
+
"serial": false,
|
|
2671
|
+
"suite": [
|
|
2672
|
+
"resource operations"
|
|
2673
|
+
],
|
|
2674
|
+
"title": "rejects a non-file scheme",
|
|
2675
|
+
"ok": true
|
|
2676
|
+
},
|
|
2677
|
+
{
|
|
2678
|
+
"file": "resource",
|
|
2679
|
+
"serial": false,
|
|
2680
|
+
"suite": [
|
|
2681
|
+
"resource operations"
|
|
2682
|
+
],
|
|
2683
|
+
"title": "grants resourceRequest without tracking a ledger",
|
|
2684
|
+
"ok": true
|
|
2685
|
+
},
|
|
2686
|
+
{
|
|
2687
|
+
"file": "resource",
|
|
2688
|
+
"serial": false,
|
|
2689
|
+
"suite": [
|
|
2690
|
+
"resource roots"
|
|
2691
|
+
],
|
|
2692
|
+
"title": "allows paths inside a configured root after canonicalization",
|
|
2693
|
+
"ok": true
|
|
2694
|
+
},
|
|
2695
|
+
{
|
|
2696
|
+
"file": "resource",
|
|
2697
|
+
"serial": false,
|
|
2698
|
+
"suite": [
|
|
2699
|
+
"resource roots"
|
|
2700
|
+
],
|
|
2701
|
+
"title": "denies paths outside the configured roots, including prefix lookalikes",
|
|
2702
|
+
"ok": true
|
|
2703
|
+
},
|
|
2704
|
+
{
|
|
2705
|
+
"file": "resource",
|
|
2706
|
+
"serial": false,
|
|
2707
|
+
"suite": [
|
|
2708
|
+
"resource roots \u2014 symlink escape"
|
|
2709
|
+
],
|
|
2710
|
+
"title": "resolves symlinks before checking the allowlist",
|
|
2711
|
+
"ok": true
|
|
2712
|
+
},
|
|
2713
|
+
{
|
|
2714
|
+
"file": "schema",
|
|
2715
|
+
"serial": false,
|
|
2716
|
+
"suite": [
|
|
2717
|
+
"wire schema"
|
|
2718
|
+
],
|
|
2719
|
+
"title": "emits a conforming InitializeResult",
|
|
2720
|
+
"ok": true
|
|
2721
|
+
},
|
|
2722
|
+
{
|
|
2723
|
+
"file": "schema",
|
|
2724
|
+
"serial": false,
|
|
2725
|
+
"suite": [
|
|
2726
|
+
"wire schema"
|
|
2727
|
+
],
|
|
2728
|
+
"title": "emits a conforming RootState snapshot",
|
|
2729
|
+
"ok": true
|
|
2730
|
+
},
|
|
2731
|
+
{
|
|
2732
|
+
"file": "schema",
|
|
2733
|
+
"serial": false,
|
|
2734
|
+
"suite": [
|
|
2735
|
+
"wire schema"
|
|
2736
|
+
],
|
|
2737
|
+
"title": "emits conforming ActionEnvelopes",
|
|
2738
|
+
"ok": true
|
|
2739
|
+
},
|
|
2740
|
+
{
|
|
2741
|
+
"file": "schema",
|
|
2742
|
+
"serial": false,
|
|
2743
|
+
"suite": [
|
|
2744
|
+
"wire schema"
|
|
2745
|
+
],
|
|
2746
|
+
"title": "fails validation for a structurally wrong action",
|
|
2747
|
+
"ok": true
|
|
2748
|
+
},
|
|
2749
|
+
{
|
|
2750
|
+
"file": "session-catalogue",
|
|
2751
|
+
"serial": false,
|
|
2752
|
+
"suite": [
|
|
2753
|
+
"session catalogue"
|
|
2754
|
+
],
|
|
2755
|
+
"title": "returns most-recently-modified first, across working directories",
|
|
2756
|
+
"ok": true
|
|
2757
|
+
},
|
|
2758
|
+
{
|
|
2759
|
+
"file": "session-catalogue",
|
|
2760
|
+
"serial": false,
|
|
2761
|
+
"suite": [
|
|
2762
|
+
"session catalogue"
|
|
2763
|
+
],
|
|
2764
|
+
"title": "paginates with an opaque cursor and stops at the end",
|
|
2765
|
+
"ok": true
|
|
2766
|
+
},
|
|
2767
|
+
{
|
|
2768
|
+
"file": "session-catalogue",
|
|
2769
|
+
"serial": false,
|
|
2770
|
+
"suite": [
|
|
2771
|
+
"session catalogue"
|
|
2772
|
+
],
|
|
2773
|
+
"title": "rejects a malformed cursor with InvalidParams",
|
|
2774
|
+
"ok": true
|
|
2775
|
+
},
|
|
2776
|
+
{
|
|
2777
|
+
"file": "session-catalogue",
|
|
2778
|
+
"serial": false,
|
|
2779
|
+
"suite": [
|
|
2780
|
+
"session catalogue"
|
|
2781
|
+
],
|
|
2782
|
+
"title": "titles a session by its name, falling back to the first user message",
|
|
2783
|
+
"ok": true
|
|
2784
|
+
},
|
|
2785
|
+
{
|
|
2786
|
+
"file": "session-catalogue",
|
|
2787
|
+
"serial": false,
|
|
2788
|
+
"suite": [
|
|
2789
|
+
"session catalogue"
|
|
2790
|
+
],
|
|
2791
|
+
"title": "skips files that are not readable pi sessions",
|
|
2792
|
+
"ok": true
|
|
2793
|
+
},
|
|
2794
|
+
{
|
|
2795
|
+
"file": "session-catalogue",
|
|
2796
|
+
"serial": false,
|
|
2797
|
+
"suite": [
|
|
2798
|
+
"session catalogue"
|
|
2799
|
+
],
|
|
2800
|
+
"title": "returns an empty catalogue when nothing exists yet",
|
|
2801
|
+
"ok": true
|
|
2802
|
+
},
|
|
2803
|
+
{
|
|
2804
|
+
"file": "session-catalogue",
|
|
2805
|
+
"serial": false,
|
|
2806
|
+
"suite": [
|
|
2807
|
+
"session catalogue"
|
|
2808
|
+
],
|
|
2809
|
+
"title": "does not return a cached path after its session file is removed",
|
|
2810
|
+
"ok": true
|
|
2811
|
+
},
|
|
2812
|
+
{
|
|
2813
|
+
"file": "session-catalogue",
|
|
2814
|
+
"serial": false,
|
|
2815
|
+
"suite": [
|
|
2816
|
+
"live session catalogue overlays"
|
|
2817
|
+
],
|
|
2818
|
+
"title": "reads live status after disk discovery rather than freezing request-start state",
|
|
2819
|
+
"ok": true
|
|
2820
|
+
},
|
|
2821
|
+
{
|
|
2822
|
+
"file": "session-catalogue",
|
|
2823
|
+
"serial": false,
|
|
2824
|
+
"suite": [
|
|
2825
|
+
"live session catalogue overlays"
|
|
2826
|
+
],
|
|
2827
|
+
"title": "keeps a live entry stable as its file appears, without caching a nonexistent file",
|
|
2828
|
+
"ok": true
|
|
2829
|
+
},
|
|
2830
|
+
{
|
|
2831
|
+
"file": "session-catalogue",
|
|
2832
|
+
"serial": false,
|
|
2833
|
+
"suite": [
|
|
2834
|
+
"live session catalogue overlays"
|
|
2835
|
+
],
|
|
2836
|
+
"title": "orders and paginates live summaries without duplicating their files",
|
|
2837
|
+
"ok": true
|
|
2838
|
+
},
|
|
2839
|
+
{
|
|
2840
|
+
"file": "session-catalogue",
|
|
2841
|
+
"serial": false,
|
|
2842
|
+
"suite": [
|
|
2843
|
+
"listSessions over the wire"
|
|
2844
|
+
],
|
|
2845
|
+
"title": "serves a schema-conforming page",
|
|
2846
|
+
"ok": true
|
|
2847
|
+
},
|
|
2848
|
+
{
|
|
2849
|
+
"file": "session-config",
|
|
2850
|
+
"serial": false,
|
|
2851
|
+
"suite": [
|
|
2852
|
+
"resolveSessionConfig"
|
|
2853
|
+
],
|
|
2854
|
+
"title": "returns a schema-conforming result",
|
|
2855
|
+
"ok": true
|
|
2856
|
+
},
|
|
2857
|
+
{
|
|
2858
|
+
"file": "session-config",
|
|
2859
|
+
"serial": false,
|
|
2860
|
+
"suite": [
|
|
2861
|
+
"resolveSessionConfig"
|
|
2862
|
+
],
|
|
2863
|
+
"title": "reports what a directory with no project resources would do",
|
|
2864
|
+
"ok": true
|
|
2865
|
+
},
|
|
2866
|
+
{
|
|
2867
|
+
"file": "session-config",
|
|
2868
|
+
"serial": false,
|
|
2869
|
+
"suite": [
|
|
2870
|
+
"resolveSessionConfig"
|
|
2871
|
+
],
|
|
2872
|
+
"title": "re-resolves against whatever directory the client is asking about",
|
|
2873
|
+
"ok": true
|
|
2874
|
+
},
|
|
2875
|
+
{
|
|
2876
|
+
"file": "session-config",
|
|
2877
|
+
"serial": false,
|
|
2878
|
+
"suite": [
|
|
2879
|
+
"resolveSessionConfig"
|
|
2880
|
+
],
|
|
2881
|
+
"title": "offers no dynamic completions",
|
|
2882
|
+
"ok": true
|
|
2883
|
+
},
|
|
2884
|
+
{
|
|
2885
|
+
"file": "session-config",
|
|
2886
|
+
"serial": false,
|
|
2887
|
+
"suite": [
|
|
2888
|
+
"model selection"
|
|
2889
|
+
],
|
|
2890
|
+
"title": "has a model selected before the agent has even started",
|
|
2891
|
+
"ok": true
|
|
2892
|
+
},
|
|
2893
|
+
{
|
|
2894
|
+
"file": "session-config",
|
|
2895
|
+
"serial": false,
|
|
2896
|
+
"suite": [
|
|
2897
|
+
"model selection"
|
|
2898
|
+
],
|
|
2899
|
+
"title": "publishes the model and config actually in effect as the chat draft",
|
|
2900
|
+
"ok": true
|
|
2901
|
+
},
|
|
2902
|
+
{
|
|
2903
|
+
"file": "session-config",
|
|
2904
|
+
"serial": false,
|
|
2905
|
+
"suite": [
|
|
2906
|
+
"model selection"
|
|
2907
|
+
],
|
|
2908
|
+
"title": "applies the model a client picked, before the prompt runs",
|
|
2909
|
+
"ok": true
|
|
2910
|
+
},
|
|
2911
|
+
{
|
|
2912
|
+
"file": "session-config",
|
|
2913
|
+
"serial": false,
|
|
2914
|
+
"suite": [
|
|
2915
|
+
"model selection"
|
|
2916
|
+
],
|
|
2917
|
+
"title": "runs on the current model when the message carries no selection",
|
|
2918
|
+
"ok": true
|
|
2919
|
+
},
|
|
2920
|
+
{
|
|
2921
|
+
"file": "session-disposal",
|
|
2922
|
+
"serial": false,
|
|
2923
|
+
"suite": [
|
|
2924
|
+
"session disposal"
|
|
2925
|
+
],
|
|
2926
|
+
"title": "keeps the session usable when durable deletion fails",
|
|
2927
|
+
"ok": true
|
|
2928
|
+
},
|
|
2929
|
+
{
|
|
2930
|
+
"file": "session-disposal",
|
|
2931
|
+
"serial": false,
|
|
2932
|
+
"suite": [
|
|
2933
|
+
"session disposal"
|
|
2934
|
+
],
|
|
2935
|
+
"title": "coalesces concurrent requests and rejects new work until deletion settles",
|
|
2936
|
+
"ok": true
|
|
2937
|
+
},
|
|
2938
|
+
{
|
|
2939
|
+
"file": "session-disposal",
|
|
2940
|
+
"serial": false,
|
|
2941
|
+
"suite": [
|
|
2942
|
+
"session disposal"
|
|
2943
|
+
],
|
|
2944
|
+
"title": "quiesces an active backend and commits removal despite cleanup failure",
|
|
2945
|
+
"ok": true
|
|
2946
|
+
},
|
|
2947
|
+
{
|
|
2948
|
+
"file": "session-disposal",
|
|
2949
|
+
"serial": false,
|
|
2950
|
+
"suite": [
|
|
2951
|
+
"session disposal"
|
|
2952
|
+
],
|
|
2953
|
+
"title": "resumes queued work when backend quiescence fails",
|
|
2954
|
+
"ok": true
|
|
2955
|
+
},
|
|
2956
|
+
{
|
|
2957
|
+
"file": "session-disposal",
|
|
2958
|
+
"serial": false,
|
|
2959
|
+
"suite": [
|
|
2960
|
+
"session disposal"
|
|
2961
|
+
],
|
|
2962
|
+
"title": "drains an in-flight model selection before deleting",
|
|
2963
|
+
"ok": true
|
|
2964
|
+
},
|
|
2965
|
+
{
|
|
2966
|
+
"file": "session-disposal",
|
|
2967
|
+
"serial": false,
|
|
2968
|
+
"suite": [
|
|
2969
|
+
"session disposal"
|
|
2970
|
+
],
|
|
2971
|
+
"title": "disposes a backend that finishes starting after removal",
|
|
2972
|
+
"ok": true
|
|
2973
|
+
},
|
|
2974
|
+
{
|
|
2975
|
+
"file": "session-hydration",
|
|
2976
|
+
"serial": false,
|
|
2977
|
+
"suite": [
|
|
2978
|
+
"opening a session from the catalogue"
|
|
2979
|
+
],
|
|
2980
|
+
"title": "hydrates a catalogued session and counts it as active",
|
|
2981
|
+
"ok": true
|
|
2982
|
+
},
|
|
2983
|
+
{
|
|
2984
|
+
"file": "session-hydration",
|
|
2985
|
+
"serial": false,
|
|
2986
|
+
"suite": [
|
|
2987
|
+
"opening a session from the catalogue"
|
|
2988
|
+
],
|
|
2989
|
+
"title": "rebuilds the transcript onto the chat channel",
|
|
2990
|
+
"ok": true
|
|
2991
|
+
},
|
|
2992
|
+
{
|
|
2993
|
+
"file": "session-hydration",
|
|
2994
|
+
"serial": false,
|
|
2995
|
+
"suite": [
|
|
2996
|
+
"opening a session from the catalogue"
|
|
2997
|
+
],
|
|
2998
|
+
"title": "pairs each tool call with the result that followed it",
|
|
2999
|
+
"ok": true
|
|
3000
|
+
},
|
|
3001
|
+
{
|
|
3002
|
+
"file": "session-hydration",
|
|
3003
|
+
"serial": false,
|
|
3004
|
+
"suite": [
|
|
3005
|
+
"opening a session from the catalogue"
|
|
3006
|
+
],
|
|
3007
|
+
"title": "still answers NotFound for a session that really does not exist",
|
|
3008
|
+
"ok": true
|
|
3009
|
+
},
|
|
3010
|
+
{
|
|
3011
|
+
"file": "session-hydration",
|
|
3012
|
+
"serial": false,
|
|
3013
|
+
"suite": [
|
|
3014
|
+
"opening a session from the catalogue"
|
|
3015
|
+
],
|
|
3016
|
+
"title": "restores images stored in pi user messages",
|
|
3017
|
+
"ok": true
|
|
3018
|
+
},
|
|
3019
|
+
{
|
|
3020
|
+
"file": "session-hydration",
|
|
3021
|
+
"serial": false,
|
|
3022
|
+
"suite": [
|
|
3023
|
+
"opening a session from the catalogue"
|
|
3024
|
+
],
|
|
3025
|
+
"title": "hydrates from either half of the pair",
|
|
3026
|
+
"ok": true
|
|
3027
|
+
},
|
|
3028
|
+
{
|
|
3029
|
+
"file": "session-hydration",
|
|
3030
|
+
"serial": false,
|
|
3031
|
+
"suite": [
|
|
3032
|
+
"opening a session from the catalogue"
|
|
3033
|
+
],
|
|
3034
|
+
"title": "coalesces concurrent session and chat hydration",
|
|
3035
|
+
"ok": true
|
|
3036
|
+
},
|
|
3037
|
+
{
|
|
3038
|
+
"file": "session-hydration",
|
|
3039
|
+
"serial": false,
|
|
3040
|
+
"suite": [],
|
|
3041
|
+
"title": "preserves catalogue modifiedAt when a disk session becomes a live overlay",
|
|
3042
|
+
"ok": true
|
|
3043
|
+
},
|
|
3044
|
+
{
|
|
3045
|
+
"file": "session-lifecycle",
|
|
3046
|
+
"serial": false,
|
|
3047
|
+
"suite": [
|
|
3048
|
+
"session lifecycle"
|
|
3049
|
+
],
|
|
3050
|
+
"title": "creates a session at the client-chosen URI and reports it ready",
|
|
3051
|
+
"ok": true
|
|
3052
|
+
},
|
|
3053
|
+
{
|
|
3054
|
+
"file": "session-lifecycle",
|
|
3055
|
+
"serial": false,
|
|
3056
|
+
"suite": [
|
|
3057
|
+
"session lifecycle"
|
|
3058
|
+
],
|
|
3059
|
+
"title": "uses the first user message as an unnamed session's display title",
|
|
3060
|
+
"ok": true
|
|
3061
|
+
},
|
|
3062
|
+
{
|
|
3063
|
+
"file": "session-lifecycle",
|
|
3064
|
+
"serial": false,
|
|
3065
|
+
"suite": [
|
|
3066
|
+
"session lifecycle"
|
|
3067
|
+
],
|
|
3068
|
+
"title": "uses pi's session id as the URI's uuid",
|
|
3069
|
+
"ok": true
|
|
3070
|
+
},
|
|
3071
|
+
{
|
|
3072
|
+
"file": "session-lifecycle",
|
|
3073
|
+
"serial": false,
|
|
3074
|
+
"suite": [
|
|
3075
|
+
"session lifecycle"
|
|
3076
|
+
],
|
|
3077
|
+
"title": "announces the new session on the root channel",
|
|
3078
|
+
"ok": true
|
|
3079
|
+
},
|
|
3080
|
+
{
|
|
3081
|
+
"file": "session-lifecycle",
|
|
3082
|
+
"serial": false,
|
|
3083
|
+
"suite": [
|
|
3084
|
+
"session lifecycle"
|
|
3085
|
+
],
|
|
3086
|
+
"title": "rejects a duplicate session URI with SessionAlreadyExists",
|
|
3087
|
+
"ok": true
|
|
3088
|
+
},
|
|
3089
|
+
{
|
|
3090
|
+
"file": "session-lifecycle",
|
|
3091
|
+
"serial": false,
|
|
3092
|
+
"suite": [
|
|
3093
|
+
"session lifecycle"
|
|
3094
|
+
],
|
|
3095
|
+
"title": "rejects an unknown provider with ProviderNotFound",
|
|
3096
|
+
"ok": true
|
|
3097
|
+
},
|
|
3098
|
+
{
|
|
3099
|
+
"file": "session-lifecycle",
|
|
3100
|
+
"serial": false,
|
|
3101
|
+
"suite": [
|
|
3102
|
+
"session lifecycle"
|
|
3103
|
+
],
|
|
3104
|
+
"title": "honours a client-supplied working directory",
|
|
3105
|
+
"ok": true
|
|
3106
|
+
},
|
|
3107
|
+
{
|
|
3108
|
+
"file": "session-lifecycle",
|
|
3109
|
+
"serial": false,
|
|
3110
|
+
"suite": [
|
|
3111
|
+
"session lifecycle"
|
|
3112
|
+
],
|
|
3113
|
+
"title": "tracks the active session count in root state",
|
|
3114
|
+
"ok": true
|
|
3115
|
+
},
|
|
3116
|
+
{
|
|
3117
|
+
"file": "session-lifecycle",
|
|
3118
|
+
"serial": false,
|
|
3119
|
+
"suite": [
|
|
3120
|
+
"session lifecycle"
|
|
3121
|
+
],
|
|
3122
|
+
"title": "disposes a session, drops its channel, and announces the removal",
|
|
3123
|
+
"ok": true
|
|
3124
|
+
},
|
|
3125
|
+
{
|
|
3126
|
+
"file": "session-lifecycle",
|
|
3127
|
+
"serial": false,
|
|
3128
|
+
"suite": [
|
|
3129
|
+
"session lifecycle"
|
|
3130
|
+
],
|
|
3131
|
+
"title": "does not let session disposal target another channel kind",
|
|
3132
|
+
"ok": true
|
|
3133
|
+
},
|
|
3134
|
+
{
|
|
3135
|
+
"file": "session-lifecycle",
|
|
3136
|
+
"serial": false,
|
|
3137
|
+
"suite": [
|
|
3138
|
+
"session lifecycle"
|
|
3139
|
+
],
|
|
3140
|
+
"title": "rejects disposing a session that does not exist",
|
|
3141
|
+
"ok": true
|
|
3142
|
+
},
|
|
3143
|
+
{
|
|
3144
|
+
"file": "session-lifecycle",
|
|
3145
|
+
"serial": false,
|
|
3146
|
+
"suite": [
|
|
3147
|
+
"session lifecycle"
|
|
3148
|
+
],
|
|
3149
|
+
"title": "accepts session/titleChanged from a client",
|
|
3150
|
+
"ok": true
|
|
3151
|
+
},
|
|
3152
|
+
{
|
|
3153
|
+
"file": "session-lifecycle",
|
|
3154
|
+
"serial": false,
|
|
3155
|
+
"suite": [
|
|
3156
|
+
"session lifecycle"
|
|
3157
|
+
],
|
|
3158
|
+
"title": "applies VS Code's chat-addressed rename to the owning session",
|
|
3159
|
+
"ok": true
|
|
3160
|
+
},
|
|
3161
|
+
{
|
|
3162
|
+
"file": "session-lifecycle",
|
|
3163
|
+
"serial": false,
|
|
3164
|
+
"suite": [
|
|
3165
|
+
"session lifecycle"
|
|
3166
|
+
],
|
|
3167
|
+
"title": "declines VS Code's active client without blocking session creation",
|
|
3168
|
+
"ok": true
|
|
3169
|
+
},
|
|
3170
|
+
{
|
|
3171
|
+
"file": "session-lifecycle",
|
|
3172
|
+
"serial": false,
|
|
3173
|
+
"suite": [
|
|
3174
|
+
"renaming a session"
|
|
3175
|
+
],
|
|
3176
|
+
"title": "records the new name on the session",
|
|
3177
|
+
"ok": true
|
|
3178
|
+
},
|
|
3179
|
+
{
|
|
3180
|
+
"file": "session-lifecycle",
|
|
3181
|
+
"serial": false,
|
|
3182
|
+
"suite": [
|
|
3183
|
+
"renaming a session"
|
|
3184
|
+
],
|
|
3185
|
+
"title": "does not create a file for a session that never got a reply",
|
|
3186
|
+
"ok": true
|
|
3187
|
+
},
|
|
3188
|
+
{
|
|
3189
|
+
"file": "session-lifecycle",
|
|
3190
|
+
"serial": false,
|
|
3191
|
+
"suite": [
|
|
3192
|
+
"renaming a session"
|
|
3193
|
+
],
|
|
3194
|
+
"title": "mirrors the name onto the chat and the catalogue entry",
|
|
3195
|
+
"ok": true
|
|
3196
|
+
},
|
|
3197
|
+
{
|
|
3198
|
+
"file": "session-storage",
|
|
3199
|
+
"serial": true,
|
|
3200
|
+
"suite": [],
|
|
3201
|
+
"title": "keeps the default catalogue and Pi session writer on the same isolated profile",
|
|
3202
|
+
"ok": true
|
|
3203
|
+
},
|
|
3204
|
+
{
|
|
3205
|
+
"file": "session-summary",
|
|
3206
|
+
"serial": false,
|
|
3207
|
+
"suite": [
|
|
3208
|
+
"session chat aggregation"
|
|
3209
|
+
],
|
|
3210
|
+
"title": "passes through single-chat activity but preserves session-owned and unknown flags",
|
|
3211
|
+
"ok": true
|
|
3212
|
+
},
|
|
3213
|
+
{
|
|
3214
|
+
"file": "session-summary",
|
|
3215
|
+
"serial": false,
|
|
3216
|
+
"suite": [
|
|
3217
|
+
"session chat aggregation"
|
|
3218
|
+
],
|
|
3219
|
+
"title": "uses default chat activity but the latest timestamp, comparing instants rather than strings",
|
|
3220
|
+
"ok": true
|
|
3221
|
+
},
|
|
3222
|
+
{
|
|
3223
|
+
"file": "session-summary",
|
|
3224
|
+
"serial": false,
|
|
3225
|
+
"suite": [
|
|
3226
|
+
"session chat aggregation"
|
|
3227
|
+
],
|
|
3228
|
+
"title": "promotes Error and InputNeeded, preferring the most recent blocker of the winning kind",
|
|
3229
|
+
"ok": true
|
|
3230
|
+
},
|
|
3231
|
+
{
|
|
3232
|
+
"file": "session-summary",
|
|
3233
|
+
"serial": false,
|
|
3234
|
+
"suite": [
|
|
3235
|
+
"session chat aggregation"
|
|
3236
|
+
],
|
|
3237
|
+
"title": "handles an empty catalogue and chooses stable ties and valid timestamps",
|
|
3238
|
+
"ok": true
|
|
3239
|
+
},
|
|
3240
|
+
{
|
|
3241
|
+
"file": "session-summary",
|
|
3242
|
+
"serial": false,
|
|
3243
|
+
"suite": [
|
|
3244
|
+
"session summary over the wire"
|
|
3245
|
+
],
|
|
3246
|
+
"title": "projects an active turn closed by backend startup failure",
|
|
3247
|
+
"ok": true
|
|
3248
|
+
},
|
|
3249
|
+
{
|
|
3250
|
+
"file": "session-summary",
|
|
3251
|
+
"serial": false,
|
|
3252
|
+
"suite": [
|
|
3253
|
+
"session summary over the wire"
|
|
3254
|
+
],
|
|
3255
|
+
"title": "publishes exact start deltas and lists an unpersisted session for new clients",
|
|
3256
|
+
"ok": true
|
|
3257
|
+
},
|
|
3258
|
+
{
|
|
3259
|
+
"file": "session-summary",
|
|
3260
|
+
"serial": false,
|
|
3261
|
+
"suite": [
|
|
3262
|
+
"session summary over the wire"
|
|
3263
|
+
],
|
|
3264
|
+
"title": "clears activity through a full upsert and sends no redundant root updates or delta projections",
|
|
3265
|
+
"ok": true
|
|
3266
|
+
},
|
|
3267
|
+
{
|
|
3268
|
+
"file": "session-summary",
|
|
3269
|
+
"serial": false,
|
|
3270
|
+
"suite": [
|
|
3271
|
+
"session summary over the wire"
|
|
3272
|
+
],
|
|
3273
|
+
"title": "projects complete and ignores rejected/no-op actions",
|
|
3274
|
+
"ok": true
|
|
3275
|
+
},
|
|
3276
|
+
{
|
|
3277
|
+
"file": "session-summary",
|
|
3278
|
+
"serial": false,
|
|
3279
|
+
"suite": [
|
|
3280
|
+
"session summary over the wire"
|
|
3281
|
+
],
|
|
3282
|
+
"title": "projects cancel and ignores rejected/no-op actions",
|
|
3283
|
+
"ok": true
|
|
3284
|
+
},
|
|
3285
|
+
{
|
|
3286
|
+
"file": "session-summary",
|
|
3287
|
+
"serial": false,
|
|
3288
|
+
"suite": [
|
|
3289
|
+
"session summary over the wire"
|
|
3290
|
+
],
|
|
3291
|
+
"title": "projects error and ignores rejected/no-op actions",
|
|
3292
|
+
"ok": true
|
|
3293
|
+
},
|
|
3294
|
+
{
|
|
3295
|
+
"file": "session-summary",
|
|
3296
|
+
"serial": false,
|
|
3297
|
+
"suite": [
|
|
3298
|
+
"session summary over the wire"
|
|
3299
|
+
],
|
|
3300
|
+
"title": "projects truncate and ignores rejected/no-op actions",
|
|
3301
|
+
"ok": true
|
|
3302
|
+
},
|
|
3303
|
+
{
|
|
3304
|
+
"file": "session-summary",
|
|
3305
|
+
"serial": false,
|
|
3306
|
+
"suite": [
|
|
3307
|
+
"session summary over the wire"
|
|
3308
|
+
],
|
|
3309
|
+
"title": "replays running session projections to the same state as snapshot fallback",
|
|
3310
|
+
"ok": true
|
|
3311
|
+
},
|
|
3312
|
+
{
|
|
3313
|
+
"file": "session-summary",
|
|
3314
|
+
"serial": false,
|
|
3315
|
+
"suite": [
|
|
3316
|
+
"session summary over the wire"
|
|
3317
|
+
],
|
|
3318
|
+
"title": "replays completed session projections to the same state as snapshot fallback",
|
|
3319
|
+
"ok": true
|
|
3320
|
+
},
|
|
3321
|
+
{
|
|
3322
|
+
"file": "subscriptions",
|
|
3323
|
+
"serial": false,
|
|
3324
|
+
"suite": [
|
|
3325
|
+
"subscriptions"
|
|
3326
|
+
],
|
|
3327
|
+
"title": "returns the current state as a snapshot",
|
|
3328
|
+
"ok": true
|
|
3329
|
+
},
|
|
3330
|
+
{
|
|
3331
|
+
"file": "subscriptions",
|
|
3332
|
+
"serial": false,
|
|
3333
|
+
"suite": [
|
|
3334
|
+
"subscriptions"
|
|
3335
|
+
],
|
|
3336
|
+
"title": "rejects a channel scheme the host does not serve",
|
|
3337
|
+
"ok": true
|
|
3338
|
+
},
|
|
3339
|
+
{
|
|
3340
|
+
"file": "subscriptions",
|
|
3341
|
+
"serial": false,
|
|
3342
|
+
"suite": [
|
|
3343
|
+
"subscriptions"
|
|
3344
|
+
],
|
|
3345
|
+
"title": "rejects a well-formed URI for a channel that does not exist",
|
|
3346
|
+
"ok": true
|
|
3347
|
+
},
|
|
3348
|
+
{
|
|
3349
|
+
"file": "subscriptions",
|
|
3350
|
+
"serial": false,
|
|
3351
|
+
"suite": [
|
|
3352
|
+
"action dispatch"
|
|
3353
|
+
],
|
|
3354
|
+
"title": "echoes a client-dispatchable action with its origin",
|
|
3355
|
+
"ok": true
|
|
3356
|
+
},
|
|
3357
|
+
{
|
|
3358
|
+
"file": "subscriptions",
|
|
3359
|
+
"serial": false,
|
|
3360
|
+
"suite": [
|
|
3361
|
+
"action dispatch"
|
|
3362
|
+
],
|
|
3363
|
+
"title": "rejects an action that is not client-dispatchable",
|
|
3364
|
+
"ok": true
|
|
3365
|
+
},
|
|
3366
|
+
{
|
|
3367
|
+
"file": "subscriptions",
|
|
3368
|
+
"serial": false,
|
|
3369
|
+
"suite": [
|
|
3370
|
+
"action dispatch"
|
|
3371
|
+
],
|
|
3372
|
+
"title": "silently ignores an action for a channel that does not exist",
|
|
3373
|
+
"ok": true
|
|
3374
|
+
},
|
|
3375
|
+
{
|
|
3376
|
+
"file": "subscriptions",
|
|
3377
|
+
"serial": false,
|
|
3378
|
+
"suite": [
|
|
3379
|
+
"action dispatch"
|
|
3380
|
+
],
|
|
3381
|
+
"title": "broadcasts to every subscriber and allocates one seq per action",
|
|
3382
|
+
"ok": true
|
|
3383
|
+
},
|
|
3384
|
+
{
|
|
3385
|
+
"file": "subscriptions",
|
|
3386
|
+
"serial": false,
|
|
3387
|
+
"suite": [
|
|
3388
|
+
"action dispatch"
|
|
3389
|
+
],
|
|
3390
|
+
"title": "treats root/configChanged as a no-op until the host declares a config schema",
|
|
3391
|
+
"ok": true
|
|
3392
|
+
},
|
|
3393
|
+
{
|
|
3394
|
+
"file": "subscriptions",
|
|
3395
|
+
"serial": false,
|
|
3396
|
+
"suite": [
|
|
3397
|
+
"action dispatch"
|
|
3398
|
+
],
|
|
3399
|
+
"title": "stops delivering after unsubscribe",
|
|
3400
|
+
"ok": true
|
|
3401
|
+
},
|
|
3402
|
+
{
|
|
3403
|
+
"file": "terminal-service",
|
|
3404
|
+
"serial": false,
|
|
3405
|
+
"suite": [
|
|
3406
|
+
"terminal service"
|
|
3407
|
+
],
|
|
3408
|
+
"title": "creates a client-owned terminal and publishes its authoritative state",
|
|
3409
|
+
"ok": true
|
|
3410
|
+
},
|
|
3411
|
+
{
|
|
3412
|
+
"file": "terminal-service",
|
|
3413
|
+
"serial": false,
|
|
3414
|
+
"suite": [
|
|
3415
|
+
"terminal service"
|
|
3416
|
+
],
|
|
3417
|
+
"title": "forwards output, input, resize, title, and clear without interpreting VT data",
|
|
3418
|
+
"ok": true
|
|
3419
|
+
},
|
|
3420
|
+
{
|
|
3421
|
+
"file": "terminal-service",
|
|
3422
|
+
"serial": false,
|
|
3423
|
+
"suite": [
|
|
3424
|
+
"terminal service"
|
|
3425
|
+
],
|
|
3426
|
+
"title": "batches burst output and flushes pending data before exit",
|
|
3427
|
+
"ok": true
|
|
3428
|
+
},
|
|
3429
|
+
{
|
|
3430
|
+
"file": "terminal-service",
|
|
3431
|
+
"serial": false,
|
|
3432
|
+
"suite": [
|
|
3433
|
+
"terminal service"
|
|
3434
|
+
],
|
|
3435
|
+
"title": "restricts interaction and claim transfer without preventing cleanup",
|
|
3436
|
+
"ok": true
|
|
3437
|
+
},
|
|
3438
|
+
{
|
|
3439
|
+
"file": "terminal-service",
|
|
3440
|
+
"serial": false,
|
|
3441
|
+
"suite": [
|
|
3442
|
+
"terminal service"
|
|
3443
|
+
],
|
|
3444
|
+
"title": "spawns only once when duplicate creates race",
|
|
3445
|
+
"ok": true
|
|
3446
|
+
},
|
|
3447
|
+
{
|
|
3448
|
+
"file": "terminal-service",
|
|
3449
|
+
"serial": false,
|
|
3450
|
+
"suite": [
|
|
3451
|
+
"terminal service"
|
|
3452
|
+
],
|
|
3453
|
+
"title": "rejects unsupported claims and invalid creation parameters before spawning",
|
|
3454
|
+
"ok": true
|
|
3455
|
+
},
|
|
3456
|
+
{
|
|
3457
|
+
"file": "terminal-service",
|
|
3458
|
+
"serial": false,
|
|
3459
|
+
"suite": [
|
|
3460
|
+
"terminal service"
|
|
3461
|
+
],
|
|
3462
|
+
"title": "reserves the provider session scheme from terminal creation",
|
|
3463
|
+
"ok": true
|
|
3464
|
+
},
|
|
3465
|
+
{
|
|
3466
|
+
"file": "terminal-service",
|
|
3467
|
+
"serial": false,
|
|
3468
|
+
"suite": [
|
|
3469
|
+
"terminal service"
|
|
3470
|
+
],
|
|
3471
|
+
"title": "does not let terminal disposal target another channel kind",
|
|
3472
|
+
"ok": true
|
|
3473
|
+
},
|
|
3474
|
+
{
|
|
3475
|
+
"file": "terminal-service",
|
|
3476
|
+
"serial": false,
|
|
3477
|
+
"suite": [
|
|
3478
|
+
"terminal service"
|
|
3479
|
+
],
|
|
3480
|
+
"title": "records natural exit and disposes exited or running terminals",
|
|
3481
|
+
"ok": true
|
|
3482
|
+
},
|
|
3483
|
+
{
|
|
3484
|
+
"file": "terminal-service",
|
|
3485
|
+
"serial": false,
|
|
3486
|
+
"suite": [
|
|
3487
|
+
"terminal service"
|
|
3488
|
+
],
|
|
3489
|
+
"title": "keeps the PTY attached across a same-host reconnect",
|
|
3490
|
+
"ok": true
|
|
3491
|
+
},
|
|
3492
|
+
{
|
|
3493
|
+
"file": "terminal-service",
|
|
3494
|
+
"serial": false,
|
|
3495
|
+
"suite": [
|
|
3496
|
+
"terminal service"
|
|
3497
|
+
],
|
|
3498
|
+
"title": "falls back to a live terminal snapshot after replay eviction",
|
|
3499
|
+
"ok": true
|
|
3500
|
+
},
|
|
3501
|
+
{
|
|
3502
|
+
"file": "terminal-service",
|
|
3503
|
+
"serial": false,
|
|
3504
|
+
"suite": [
|
|
3505
|
+
"terminal service"
|
|
3506
|
+
],
|
|
3507
|
+
"title": "bounds snapshot scrollback while retaining the newest VT stream",
|
|
3508
|
+
"ok": true
|
|
3509
|
+
},
|
|
3510
|
+
{
|
|
3511
|
+
"file": "terminal-service",
|
|
3512
|
+
"serial": false,
|
|
3513
|
+
"suite": [
|
|
3514
|
+
"terminal service"
|
|
3515
|
+
],
|
|
3516
|
+
"title": "kills running PTYs during service shutdown",
|
|
3517
|
+
"ok": true
|
|
3518
|
+
},
|
|
3519
|
+
{
|
|
3520
|
+
"file": "terminal-service",
|
|
3521
|
+
"serial": false,
|
|
3522
|
+
"suite": [],
|
|
3523
|
+
"title": "returns MethodNotFound when terminal support is not wired",
|
|
3524
|
+
"ok": true
|
|
3525
|
+
},
|
|
3526
|
+
{
|
|
3527
|
+
"file": "truncate",
|
|
3528
|
+
"serial": false,
|
|
3529
|
+
"suite": [
|
|
3530
|
+
"truncation anchors"
|
|
3531
|
+
],
|
|
3532
|
+
"title": "anchors a turn on its last entry, not its first",
|
|
3533
|
+
"ok": true
|
|
3534
|
+
},
|
|
3535
|
+
{
|
|
3536
|
+
"file": "truncate",
|
|
3537
|
+
"serial": false,
|
|
3538
|
+
"suite": [
|
|
3539
|
+
"truncation anchors"
|
|
3540
|
+
],
|
|
3541
|
+
"title": "anchors 'clear everything' on the first user entry",
|
|
3542
|
+
"ok": true
|
|
3543
|
+
},
|
|
3544
|
+
{
|
|
3545
|
+
"file": "truncate",
|
|
3546
|
+
"serial": false,
|
|
3547
|
+
"suite": [
|
|
3548
|
+
"chat/truncated"
|
|
3549
|
+
],
|
|
3550
|
+
"title": "moves pi's leaf to the named turn, not just the client's view",
|
|
3551
|
+
"ok": true
|
|
3552
|
+
},
|
|
3553
|
+
{
|
|
3554
|
+
"file": "truncate",
|
|
3555
|
+
"serial": false,
|
|
3556
|
+
"suite": [
|
|
3557
|
+
"chat/truncated"
|
|
3558
|
+
],
|
|
3559
|
+
"title": "maps 'clear everything' onto the first entry",
|
|
3560
|
+
"ok": true
|
|
3561
|
+
},
|
|
3562
|
+
{
|
|
3563
|
+
"file": "truncate",
|
|
3564
|
+
"serial": false,
|
|
3565
|
+
"suite": [
|
|
3566
|
+
"chat/truncated"
|
|
3567
|
+
],
|
|
3568
|
+
"title": "refuses a turn it cannot anchor, instead of diverging",
|
|
3569
|
+
"ok": true
|
|
3570
|
+
},
|
|
3571
|
+
{
|
|
3572
|
+
"file": "tunnel",
|
|
3573
|
+
"serial": false,
|
|
3574
|
+
"suite": [
|
|
3575
|
+
"tunnel discovery contract"
|
|
3576
|
+
],
|
|
3577
|
+
"title": "uses the shared discovery labels and port",
|
|
3578
|
+
"ok": true
|
|
3579
|
+
},
|
|
3580
|
+
{
|
|
3581
|
+
"file": "tunnel",
|
|
3582
|
+
"serial": false,
|
|
3583
|
+
"suite": [
|
|
3584
|
+
"tunnel discovery contract"
|
|
3585
|
+
],
|
|
3586
|
+
"title": "keeps the identity label out of the display name",
|
|
3587
|
+
"ok": true
|
|
3588
|
+
},
|
|
3589
|
+
{
|
|
3590
|
+
"file": "tunnel",
|
|
3591
|
+
"serial": false,
|
|
3592
|
+
"suite": [
|
|
3593
|
+
"tunnel discovery contract"
|
|
3594
|
+
],
|
|
3595
|
+
"title": "folds a name the way VS Code does",
|
|
3596
|
+
"ok": true
|
|
3597
|
+
},
|
|
3598
|
+
{
|
|
3599
|
+
"file": "tunnel",
|
|
3600
|
+
"serial": false,
|
|
3601
|
+
"suite": [
|
|
3602
|
+
"devtunnel account and catalogue"
|
|
3603
|
+
],
|
|
3604
|
+
"title": "reports when the CLI is not installed",
|
|
3605
|
+
"ok": true
|
|
3606
|
+
},
|
|
3607
|
+
{
|
|
3608
|
+
"file": "tunnel",
|
|
3609
|
+
"serial": false,
|
|
3610
|
+
"suite": [
|
|
3611
|
+
"devtunnel account and catalogue"
|
|
3612
|
+
],
|
|
3613
|
+
"title": "requires a logged-in account",
|
|
3614
|
+
"ok": true
|
|
3615
|
+
},
|
|
3616
|
+
{
|
|
3617
|
+
"file": "tunnel",
|
|
3618
|
+
"serial": false,
|
|
3619
|
+
"suite": [
|
|
3620
|
+
"devtunnel account and catalogue"
|
|
3621
|
+
],
|
|
3622
|
+
"title": "reports account inspection failures",
|
|
3623
|
+
"ok": true
|
|
3624
|
+
},
|
|
3625
|
+
{
|
|
3626
|
+
"file": "tunnel",
|
|
3627
|
+
"serial": false,
|
|
3628
|
+
"suite": [
|
|
3629
|
+
"devtunnel account and catalogue"
|
|
3630
|
+
],
|
|
3631
|
+
"title": "finds this host's first labelled tunnel",
|
|
3632
|
+
"ok": true
|
|
3633
|
+
},
|
|
3634
|
+
{
|
|
3635
|
+
"file": "tunnel",
|
|
3636
|
+
"serial": false,
|
|
3637
|
+
"suite": [
|
|
3638
|
+
"devtunnel account and catalogue"
|
|
3639
|
+
],
|
|
3640
|
+
"title": "returns no tunnel for a successful empty listing",
|
|
3641
|
+
"ok": true
|
|
3642
|
+
},
|
|
3643
|
+
{
|
|
3644
|
+
"file": "tunnel",
|
|
3645
|
+
"serial": false,
|
|
3646
|
+
"suite": [
|
|
3647
|
+
"devtunnel account and catalogue"
|
|
3648
|
+
],
|
|
3649
|
+
"title": "reports tunnel listing failures and malformed responses",
|
|
3650
|
+
"ok": true
|
|
3651
|
+
},
|
|
3652
|
+
{
|
|
3653
|
+
"file": "tunnel",
|
|
3654
|
+
"serial": false,
|
|
3655
|
+
"suite": [
|
|
3656
|
+
"devtunnel account and catalogue"
|
|
3657
|
+
],
|
|
3658
|
+
"title": "creates a tunnel with identity, protocol, launcher, and display labels",
|
|
3659
|
+
"ok": true
|
|
3660
|
+
},
|
|
3661
|
+
{
|
|
3662
|
+
"file": "tunnel",
|
|
3663
|
+
"serial": false,
|
|
3664
|
+
"suite": [
|
|
3665
|
+
"devtunnel account and catalogue"
|
|
3666
|
+
],
|
|
3667
|
+
"title": "rejects failed or malformed tunnel creation",
|
|
3668
|
+
"ok": true
|
|
3669
|
+
},
|
|
3670
|
+
{
|
|
3671
|
+
"file": "tunnel",
|
|
3672
|
+
"serial": false,
|
|
3673
|
+
"suite": [
|
|
3674
|
+
"devtunnel account and catalogue"
|
|
3675
|
+
],
|
|
3676
|
+
"title": "renames a tunnel without disturbing reserved labels",
|
|
3677
|
+
"ok": true
|
|
3678
|
+
},
|
|
3679
|
+
{
|
|
3680
|
+
"file": "tunnel",
|
|
3681
|
+
"serial": false,
|
|
3682
|
+
"suite": [
|
|
3683
|
+
"devtunnel account and catalogue"
|
|
3684
|
+
],
|
|
3685
|
+
"title": "reports a failed rename",
|
|
3686
|
+
"ok": true
|
|
3687
|
+
},
|
|
3688
|
+
{
|
|
3689
|
+
"file": "tunnel",
|
|
3690
|
+
"serial": false,
|
|
3691
|
+
"suite": [
|
|
3692
|
+
"devtunnel port"
|
|
3693
|
+
],
|
|
3694
|
+
"title": "creates port 31546 when a successful listing is empty",
|
|
3695
|
+
"ok": true
|
|
3696
|
+
},
|
|
3697
|
+
{
|
|
3698
|
+
"file": "tunnel",
|
|
3699
|
+
"serial": false,
|
|
3700
|
+
"suite": [
|
|
3701
|
+
"devtunnel port"
|
|
3702
|
+
],
|
|
3703
|
+
"title": "keeps an existing HTTP port",
|
|
3704
|
+
"ok": true
|
|
3705
|
+
},
|
|
3706
|
+
{
|
|
3707
|
+
"file": "tunnel",
|
|
3708
|
+
"serial": false,
|
|
3709
|
+
"suite": [
|
|
3710
|
+
"devtunnel port"
|
|
3711
|
+
],
|
|
3712
|
+
"title": "replaces an old HTTPS port with an HTTP port",
|
|
3713
|
+
"ok": true
|
|
3714
|
+
},
|
|
3715
|
+
{
|
|
3716
|
+
"file": "tunnel",
|
|
3717
|
+
"serial": false,
|
|
3718
|
+
"suite": [
|
|
3719
|
+
"devtunnel port"
|
|
3720
|
+
],
|
|
3721
|
+
"title": "does not discard port-specific access control while migrating",
|
|
3722
|
+
"ok": true
|
|
3723
|
+
},
|
|
3724
|
+
{
|
|
3725
|
+
"file": "tunnel",
|
|
3726
|
+
"serial": false,
|
|
3727
|
+
"suite": [
|
|
3728
|
+
"devtunnel port"
|
|
3729
|
+
],
|
|
3730
|
+
"title": "uses current port details when the protocol changes during inspection",
|
|
3731
|
+
"ok": true
|
|
3732
|
+
},
|
|
3733
|
+
{
|
|
3734
|
+
"file": "tunnel",
|
|
3735
|
+
"serial": false,
|
|
3736
|
+
"suite": [
|
|
3737
|
+
"devtunnel port"
|
|
3738
|
+
],
|
|
3739
|
+
"title": "rejects malformed port inspection output",
|
|
3740
|
+
"ok": true
|
|
3741
|
+
},
|
|
3742
|
+
{
|
|
3743
|
+
"file": "tunnel",
|
|
3744
|
+
"serial": false,
|
|
3745
|
+
"suite": [
|
|
3746
|
+
"devtunnel port"
|
|
3747
|
+
],
|
|
3748
|
+
"title": "reports listing, inspection, deletion, and creation failures",
|
|
3749
|
+
"ok": true
|
|
3750
|
+
},
|
|
3751
|
+
{
|
|
3752
|
+
"file": "upstream-workarounds",
|
|
3753
|
+
"serial": false,
|
|
3754
|
+
"suite": [
|
|
3755
|
+
"upstream workarounds"
|
|
3756
|
+
],
|
|
3757
|
+
"title": "still needs the dangling-$ref strip",
|
|
3758
|
+
"ok": true
|
|
3759
|
+
},
|
|
3760
|
+
{
|
|
3761
|
+
"file": "upstream-workarounds",
|
|
3762
|
+
"serial": false,
|
|
3763
|
+
"suite": [
|
|
3764
|
+
"upstream workarounds"
|
|
3765
|
+
],
|
|
3766
|
+
"title": "still needs every KNOWN_BITSET_ENUMS entry",
|
|
3767
|
+
"ok": true
|
|
3768
|
+
},
|
|
3769
|
+
{
|
|
3770
|
+
"file": "uri",
|
|
3771
|
+
"serial": false,
|
|
3772
|
+
"suite": [
|
|
3773
|
+
"file URI conversion"
|
|
3774
|
+
],
|
|
3775
|
+
"title": "decodes percent-escapes",
|
|
3776
|
+
"ok": true
|
|
3777
|
+
},
|
|
3778
|
+
{
|
|
3779
|
+
"file": "uri",
|
|
3780
|
+
"serial": false,
|
|
3781
|
+
"suite": [
|
|
3782
|
+
"file URI conversion"
|
|
3783
|
+
],
|
|
3784
|
+
"title": "round-trips a path",
|
|
3785
|
+
"ok": true
|
|
3786
|
+
},
|
|
3787
|
+
{
|
|
3788
|
+
"file": "uri",
|
|
3789
|
+
"serial": false,
|
|
3790
|
+
"suite": [
|
|
3791
|
+
"file URI conversion"
|
|
3792
|
+
],
|
|
3793
|
+
"title": "passes a bare path through",
|
|
3794
|
+
"ok": true
|
|
3795
|
+
},
|
|
3796
|
+
{
|
|
3797
|
+
"file": "uri",
|
|
3798
|
+
"serial": false,
|
|
3799
|
+
"suite": [
|
|
3800
|
+
"file URI conversion"
|
|
3801
|
+
],
|
|
3802
|
+
"title": "refuses a URI naming a remote host",
|
|
3803
|
+
"ok": true
|
|
3804
|
+
},
|
|
3805
|
+
{
|
|
3806
|
+
"file": "watch-events",
|
|
3807
|
+
"serial": false,
|
|
3808
|
+
"suite": [],
|
|
3809
|
+
"title": "watch assertions share a reader and retain the entire batch, even after a match",
|
|
3810
|
+
"ok": true
|
|
3811
|
+
},
|
|
3812
|
+
{
|
|
3813
|
+
"file": "watch-events",
|
|
3814
|
+
"serial": false,
|
|
3815
|
+
"suite": [],
|
|
3816
|
+
"title": "a timed-out assertion neither steals the next batch nor accepts events before its checkpoint",
|
|
3817
|
+
"ok": true
|
|
3818
|
+
},
|
|
3819
|
+
{
|
|
3820
|
+
"file": "watch-events",
|
|
3821
|
+
"serial": false,
|
|
3822
|
+
"suite": [],
|
|
3823
|
+
"title": "reports a reader failure during cleanup even without a waiting assertion",
|
|
3824
|
+
"ok": true
|
|
3825
|
+
},
|
|
3826
|
+
{
|
|
3827
|
+
"file": "watch-events",
|
|
3828
|
+
"serial": false,
|
|
3829
|
+
"suite": [],
|
|
3830
|
+
"title": "closing the journal settles pending assertions and the sole subscription reader",
|
|
3831
|
+
"ok": true
|
|
3832
|
+
}
|
|
3833
|
+
]
|