Skip to content

amiagent 0.3.0 — no more hung-command wedge

Choose a tag to compare

@thomas-luebker thomas-luebker released this 01 Aug 21:33
· 20 commits to master since this release

Fixes the one failure a remote user could not recover from.

Up to 0.2.0 a command ran inline on the agent's accept loop, so any program
waiting for input nobody would give it parked the whole agent — recoverable
only by pressing Ctrl-C at the physical machine. Not a good property for
something you run remotely.

Commands now run in a child process while the agent waits with a deadline. Past
it, the agent reports that the command is still running, returns to accepting
connections, and leaves it going. Screen capture, file transfer, directory
listing and input all keep working meanwhile; only a second command is refused,
and the refusal names the one blocking it.

New BREAK sends Ctrl-C to the stuck command remotely. System() runs
commands in a CLI process the agent never gets a pointer to, so the agent
snapshots CLI numbers before starting a job and signals whatever appeared since.
Best effort — a program that ignores Ctrl-C still needs attention at the machine.

Verified on an A4000/060 under AmigaOS 3.2.3: Wait 300 hit its deadline in
5.6s, the agent answered ping, system info and directory listings instantly
while it hung, a second command was correctly refused, and BREAK killed it
in 1.2s with no leftover process.

Upgrading

The wire format changedEXEC gained a deadline field, so the client and
agent must both be 0.3.0. python3 server/amimcp.py --probe prints the agent's
version.

File For
amiagent 68000 baseline — runs on every Amiga
amiagent.020 68020+
amiagent TOKEN=pickasecret

Set a TOKEN. The agent runs arbitrary commands for anyone who can reach its
port, and the protocol is unencrypted. Keep it on a LAN you trust.