---
name: unisale-asr
description: Send deployment, revision, or read-only status requests to unisale-claude through the VH146 Unisale ASR artifact, and poll durable answers and live agent status.
---

# Unisale ASR artifact · 1.0.2-wren

The artifact queues requests to the existing `unisale-claude` agent on TM146. It does not deploy by itself. Request only changes authorized by the user; use `question` for read-only inspection.

## Access

Base URL: `https://unisale-asr.artifact.vh.lessokaji.com/`

LAN viewer: `http://192.168.0.146:9697/artifact/unisale-asr/` (requires a signed-in VH browser session; direct LAN API access additionally needs VH authentication). Use the Cloud base URL for agents: only the artifact token is needed.

Read the **Unisale ASR artifact** section of the **keys** note at `https://oa.lessokaji.com/#notes` for the access token and HTTPS Cloud URL. Prefer that HTTPS URL from outside the LAN. Do not put tokens in URLs, prompts, source code or logs.

Use the domain above, not the `/a/<id>/` preview path: VH Cloud preview paths allow only GET/HEAD.

Send `X-Unisale-Token: <accessToken>` on every API call. This artifact-specific token is NOT the VH or TerminalMan admin token. Do not use Authorization here: VH strips that header while proxying artifacts. Skill and login page are public; requests, answers and terminal status require the token.

## Send

`POST <base>api/messages`, Content-Type `application/json`:

```json
{"requestId":"a-new-UUID","senderName":"your exact registered TM146 agent name","reason":"why this request is authorized","kind":"question","message":"Read-only: inspect the current Unisale ASR deployment and report version, live URL and any blockers. Do not change anything."}
```

`kind` is `question`, `revise`, or `deploy`. Include the target machine, required change, rollback/data constraints and acceptance criteria for deployment or revision. Delivery always uses queue, never interrupt.

Resolve your own senderName using TM146's Agent-composer skill if needed; never borrow another agent's name. An unregistered sender is rejected by TerminalMan. The artifact's browser defaults to its creating agent `maintainer-gpt`; AI callers must use their own identity.

Reuse the same `requestId` and identical body after a network timeout to avoid duplicate delivery. A different message needs a new UUID. The response is `{job:{id,status,delivery,error,...}}`. `queued` confirms delivery only, not task completion. `delivery_unknown` must be inspected in the terminal before a new send; do not automatically resend with another UUID. Failed/blocked delivery is retained rather than silently retried.

## Poll

- `GET <base>api/status` → live `agent.state`, reason, observation timestamp, auxiliary error and focus status.
- `GET <base>api/status?tail=1` → additionally the current terminal tail (diagnostic, not an answer).
- `GET <base>api/jobs` → last 100 requests, newest first.
- `GET <base>api/jobs/<id>?after=0` → `{job,events,cursor}`. Poll about every 4 seconds with the last cursor to receive only new events.

Request states: `sending`, `queued`, `delivery_failed`, `delivery_unknown`, `working`, `done`, `blocked`, `error`. `working/done/blocked/error` are explicitly reported by unisale-claude using a request-scoped reply token injected by the bridge. Replies survive page refresh and service restart in SQLite. Only `done` is completion, and its answer must contain evidence appropriate to the actual task. A completed/idle terminal alone is never request success. If idle with no answer, inspect its tail and ask a bounded follow-up rather than generating repeated sends. If the endpoint is unavailable, state is unknown.

For human use, open the base URL, paste the token, queue a request and leave its selected Answers & progress view open. The application runs on VH146 in TerminalMan session `unisale-asr-artifact-heron`.
