Implement TestClient inventory and appearance commands (#92)
Some checks failed
Native code generation / deterministic (push) Successful in 18m25s
Imaging and meshing gate / native (push) Failing after 4m23s
JPEG 2000 feature / linux (push) Successful in 2m49s
Native Rust workspace compile / compile (push) Failing after 12m37s
Skia feature / linux (push) Has been cancelled

This commit is contained in:
2026-08-11 11:14:50 +00:00
parent 9675440210
commit ea10b7672c
7 changed files with 3379 additions and 15 deletions

View File

@@ -13,7 +13,7 @@ here so a source entry is never mistaken for a completed port.
| `prim-inspector` | PrimInspector | Implemented with live and deterministic fake-grid discovery |
| `inventory-explorer` | InventoryExplorer | Implemented with live inventory and deterministic AIS fixtures |
| `irc-gateway` | IRCGateway | Implemented with live IRC/grid transports and deterministic offline scripts |
| `test-client` | TestClient | Native shell, registry, system, and communication groups implemented; remaining command groups tracked by #92#94 |
| `test-client` | TestClient | Native shell, registry, system, communication, inventory, appearance, and asset groups implemented; remaining command groups tracked by #93#94 |
| `vivox-test` | VivoxTest | Pending milestone 11 issue #95 |
| `webrtc-test` | WebRtcTest | Pending milestone 11 issue #96 |
@@ -165,12 +165,16 @@ broadcast command routing.
The implemented command groups are `@`, `debug`, `echomaster`, `help`, `im`,
`imgroup`, `load`, `login`, `logpacket`, `logout`, `md5`, `quit`, `say`,
`setmaster`, `setmasterkey`, `shout`, `showeffects`, `sleep`, `waitforlogin`, and
`whisper`. Chat and instant-message bodies are bounded to the grid protocol
limit. Group commands require both `--groupcommands` and current group
membership. Master chat can be echoed, master teleport lures are accepted, and
remote `login` and `md5` command text is redacted from transcripts. Packet logs
contain only timestamped packet type, simulator name, and byte count; they are
limited to 10,000 records and 16 MiB.
`whisper`. The inventory wave also implements `appearance`, `attachments`,
`avatarinfo`, `clone`, `wear`, `backuptext`, `balance`, `cd`, `createnotecard`,
`deletefolder`, `download`, `dumpoutfit`, `emptylostandfound`, `emptytrash`,
`giveall`, `give`, `i`, `ls`, `objectinventory`, `script`, `taskrunning`,
`uploadimage`, `uploadscript`, `viewnote`, and `xfer`. Chat and instant-message
bodies are bounded to the grid protocol limit. Group commands require both
`--groupcommands` and current group membership. Master chat can be echoed,
master teleport lures are accepted, and remote `login` and `md5` command text
is redacted from transcripts. Packet logs contain only timestamped packet type,
simulator name, and byte count; they are limited to 10,000 records and 16 MiB.
The native `load` command reads a portable command-alias manifest instead of a
CLR assembly. Each non-comment line is tab-separated
@@ -178,6 +182,16 @@ CLR assembly. Each non-comment line is tab-separated
arguments. Manifests are limited to 1 MiB and 128 commands, with an alias
expansion depth of eight.
Inventory and appearance mutations require both the global
`--allow-live-mutations` switch and a per-command `--confirm` argument. Uploads
and L$ transfers additionally require `--allow-spending`. Downloads and
backups reject parent traversal, individual assets are limited to 64 MiB,
backups are limited to 10,000 files and 512 MiB, and image uploads decode
portable TGA, JPEG, PNG, WebP, or JPEG2000 input before producing the grid's
JPEG2000 texture format. Live commands use the public inventory, appearance,
asset, agent, directory, and task-inventory managers; Xfer downloads wait for
their correlated UDP completion event.
Use `--fake-script FILE` for deterministic, credential-free terminal and grid
validation. Normal lines are dispatched exactly like interactive input. Fake
grid records begin with `!` and use tab-separated fields:
@@ -192,6 +206,16 @@ grid records begin with `!` and use tab-separated fields:
!packet<TAB>client-uuid<TAB>packet-type<TAB>simulator<TAB>bytes
!effect<TAB>client-uuid<TAB>summary
!disconnect<TAB>client-uuid<TAB>reason
!inventory-root<TAB>client-uuid<TAB>root-uuid<TAB>owner-uuid<TAB>name
!inventory-folder<TAB>client-uuid<TAB>folder-uuid<TAB>parent-uuid<TAB>folder-type<TAB>name
!inventory-item<TAB>client-uuid<TAB>item-uuid<TAB>parent-uuid<TAB>asset-uuid<TAB>asset-type<TAB>inventory-type<TAB>permissions-hex<TAB>name<TAB>description
!asset<TAB>client-uuid<TAB>asset-uuid<TAB>asset-type<TAB>hex-bytes
!balance<TAB>client-uuid<TAB>amount
!avatar<TAB>client-uuid<TAB>avatar-uuid<TAB>name<TAB>texture-label=texture-uuid,...
!appearance-cache<TAB>client-uuid<TAB>avatar-uuid
!attachment<TAB>client-uuid<TAB>point<TAB>local-id<TAB>primitive-uuid<TAB>offset
!task<TAB>client-uuid<TAB>object-uuid<TAB>local-id
!task-item<TAB>client-uuid<TAB>object-uuid<TAB>item-uuid<TAB>asset-type<TAB>true|false|none<TAB>name<TAB>description
!cancel
!shutdown
```
@@ -203,10 +227,16 @@ framework and compatibility checks with:
```sh
cargo test -p libremetaverse-programs --test test_client_cli --locked
cargo test -p libremetaverse-programs --test test_client_inventory_cli --locked
cargo test -p libremetaverse-programs test_client::tests --locked
cargo test --manifest-path tests/compat/Cargo.toml --test core_runtime_shims --locked
cargo test --manifest-path tests/compat/Cargo.toml --test social_message_semantics --locked
cargo test --manifest-path tests/compat/Cargo.toml --test network_semantics --locked
cargo test --manifest-path tests/compat/Cargo.toml --test appearance_semantics --locked
cargo test --manifest-path tests/compat/Cargo.toml --test appearance_visual --locked
cargo test --manifest-path tests/compat/Cargo.toml --test asset_capability --locked
cargo test --manifest-path tests/compat/Cargo.toml --test asset_document --locked
cargo test --manifest-path tests/compat/Cargo.toml --test inventory_ais --locked
cargo test --manifest-path tests/compat/Cargo.toml --test inventory_manager --locked
cargo test --manifest-path tests/compat/Cargo.toml --test inventory_store --locked
cargo test --manifest-path tests/compat/Cargo.toml --test task_inventory --locked
```
## PacketDump