@kottera/tera-web 0.1.0-rc.8 → 0.1.0-rc.9
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.
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Schema: sdk/workorder/schema/events/v1/event-kind.workorder.json
|
|
7
7
|
*/
|
|
8
|
-
export type WorkOrderEventKind = "cohort.set" | "off_tera.wake" | "relation.set" | "relation.removed" | "off_tera.taken" | "off_tera.progress" | "off_tera.reposted" | "off_tera.late_report" | "off_tera.checks_started" | "created" | "transitioned" | "acknowledged" | "retention_expired" | "edited" | "seat.reclaimed" | "claim.overdue" | "claim.unreadable" | "subject_claim.overridden" | "seat.cooling" | "seat.credential_held" | "member_credential.requested" | "member_credential.settled" | "seat.acquired" | "seat.runner_released" | "seat.meters_voided" | "step.binding" | "session.terminated" | "postcondition.verdict" | "parked_run.unreadable" | "parked_run.reclaimed" | "dispatch.settled_unobserved" | "parked_run.parked" | "parked_run.resumed" | "resume.refused" | "dispatch.salvaged" | "workspace.retired" | "dispatch.routed" | "session.lost" | "activity_partition.pinned" | "session.continuity" | "session.context_compacted" | "upstream.answer_forwarded" | "invocation.checkpoint" | "invocation.guidance" | "invocation.guidance.ack" | "invocation.reply" | "invocation.checkpoint.unreadable" | "invocation.guidance.unreadable" | "config_pin.unreadable" | "config_pin.repinned" | "type.followed" | "observation.scrubbed" | "observation.secret-shape-redacted" | "observation.promoted" | "observation.refuted" | "observation.purged" | "conversation.input_barrier" | "walk_resume.fell_back" | "store.ahead_of_binary" | "artifact.published" | "history.dropped" | "history.archived" | "seat.work_order_released" | "step.settled_late" | "step.reattached" | "relay.unrebuilt" | "references.recorded" | "attended.wall_reported" | "attended.signal";
|
|
8
|
+
export type WorkOrderEventKind = "cohort.set" | "off_tera.wake" | "relation.set" | "relation.removed" | "off_tera.taken" | "off_tera.progress" | "off_tera.reposted" | "off_tera.late_report" | "off_tera.checks_started" | "created" | "transitioned" | "acknowledged" | "retention_expired" | "edited" | "seat.reclaimed" | "claim.overdue" | "claim.unreadable" | "subject_claim.overridden" | "seat.cooling" | "seat.credential_held" | "member_credential.requested" | "member_credential.settled" | "seat.acquired" | "seat.runner_released" | "seat.meters_voided" | "step.binding" | "session.terminated" | "postcondition.verdict" | "parked_run.unreadable" | "parked_run.reclaimed" | "dispatch.settled_unobserved" | "parked_run.parked" | "parked_run.resumed" | "resume.refused" | "dispatch.salvaged" | "workspace.retired" | "dispatch.routed" | "session.lost" | "activity_partition.pinned" | "session.continuity" | "session.context_compacted" | "upstream.answer_forwarded" | "invocation.checkpoint" | "invocation.guidance" | "invocation.guidance.ack" | "invocation.reply" | "invocation.checkpoint.unreadable" | "invocation.guidance.unreadable" | "config_pin.unreadable" | "config_pin.repinned" | "type.followed" | "observation.scrubbed" | "observation.secret-shape-redacted" | "observation.promoted" | "observation.refuted" | "observation.purged" | "conversation.input_barrier" | "walk_resume.fell_back" | "store.ahead_of_binary" | "artifact.published" | "history.dropped" | "history.archived" | "seat.work_order_released" | "step.settled_late" | "step.reattached" | "relay.unrebuilt" | "references.recorded" | "attended.wall_reported" | "attended.signal" | "attended.attached" | "attended.detached";
|
|
9
9
|
/**
|
|
10
10
|
* `workorder` event payload (event/workorder).
|
|
11
11
|
*
|
|
@@ -2804,7 +2804,7 @@ export type WorkOrderTakeResult = {
|
|
|
2804
2804
|
* Schema: sdk/workorder/schema/v1/transition.params.json
|
|
2805
2805
|
*/
|
|
2806
2806
|
export type WorkOrderTransitionParams = {
|
|
2807
|
-
/** The externally-driven input to fire. The review actions (approve / reject / rework) are accepted only from `paused:awaiting-review`; `answer` only from `paused:awaiting-input` or `paused:awaiting-interactive-turn`. `wake` is the NON-DESTRUCTIVE door into a parked run: it makes the run's wait condition true and lets the ordinary paused → active machinery run, without re-dispatching, resurrecting or re-pinning anything. It is accepted from every paused state EXCEPT `paused:awaiting-review`, whose doors are approve / reject / rework because that park exists so a verdict is RECORDED, and `paused:interrupted`, whose one way out is work_order.guide(id, verb = "deliver") because the run was interrupted to be given a new instruction. It does NOT make the thing the run was waiting for happen: from `paused:awaiting-input` the run is told plainly that no answer was given, and from `paused:awaiting-capacity` / `paused:awaiting-credential` it means "proceed without it", so work needing that resource may fail immediately — that is the operator's call. From `paused:awaiting-upstream` it is sharper still: the backoff has NOT elapsed by construction, so the upstream that refused is very likely still refusing and the run may take the identical refusal at once. From `paused:plugin-contract-moved` it resumes the run on its OLD pin, so its next call to the plugin whose contract moved parks it again: that park's door is `work_order.repin`, which re-pins the run onto the installed contract version and resumes it. Authorized against api/v1/workorders/wake, which the transition grant does NOT imply, and `reason` is REQUIRED on it. For a Work Order that is terminal or merely stuck rather than parked, the road is work_order.force_fail then work_order.retry. `conclude` (ADR-129 D10) is the OPERATOR'S ENDING for an interactive conversation, accepted from `paused:awaiting-interactive-turn` and from NOTHING ELSE: it settles the run at the success terminal (`complete`) whatever the conversation decided, carrying an OPTIONAL `note`. An interactive dispatch has no ending of its own — its one exit is the turn boundary — so this is how the run ends, and there is no resume after it. A run mid-turn is INTERRUPTED first (work_order.guide(id, verb = "interrupt")), which lands it back at its inbox; a conclude arriving at an `active` row is refused and says so. Its children keep running to their own ends. Its optional note goes on `note`, NOT on `reason` — a conclude carrying `reason` is REFUSED rather than silently dropping your words, because unlike `wake` nothing here reaches the run. Authorized against api/v1/workorders/conclude, which the transition grant does NOT imply. */
|
|
2807
|
+
/** The externally-driven input to fire. The review actions (approve / reject / rework) are accepted only from `paused:awaiting-review`; `answer` only from `paused:awaiting-input` or `paused:awaiting-interactive-turn`. `wake` is the NON-DESTRUCTIVE door into a parked run: it makes the run's wait condition true and lets the ordinary paused → active machinery run, without re-dispatching, resurrecting or re-pinning anything. It is accepted from every paused state EXCEPT `paused:awaiting-review`, whose doors are approve / reject / rework because that park exists so a verdict is RECORDED, and `paused:interrupted`, whose one way out is work_order.guide(id, verb = "deliver") because the run was interrupted to be given a new instruction. It does NOT make the thing the run was waiting for happen: from `paused:awaiting-input` the run is told plainly that no answer was given, and from `paused:awaiting-capacity` / `paused:awaiting-credential` it means "proceed without it", so work needing that resource may fail immediately — that is the operator's call. From `paused:awaiting-upstream` it is sharper still: the backoff has NOT elapsed by construction, so the upstream that refused is very likely still refusing and the run may take the identical refusal at once. From `paused:plugin-contract-moved` it resumes the run on its OLD pin, so its next call to the plugin whose contract moved parks it again: that park's door is `work_order.repin`, which re-pins the run onto the installed contract version and resumes it. Authorized against api/v1/workorders/wake, which the transition grant does NOT imply, and `reason` is REQUIRED on it. For a Work Order that is terminal or merely stuck rather than parked, the road is work_order.force_fail then work_order.retry. `conclude` (ADR-129 D10) is the OPERATOR'S ENDING for an interactive conversation, accepted from `paused:awaiting-interactive-turn` and, for an attended session (ADR-179 D9), from `active` and `paused:interrupted`, and from NOTHING ELSE: it settles the run at the success terminal (`complete`) whatever the conversation decided, carrying an OPTIONAL `note`. An interactive dispatch has no ending of its own — its one exit is the turn boundary — so this is how the run ends, and there is no resume after it. A run mid-turn is INTERRUPTED first (work_order.guide(id, verb = "interrupt")), which lands it back at its inbox; a conclude arriving at an `active` row is refused and says so. Its children keep running to their own ends. Its optional note goes on `note`, NOT on `reason` — a conclude carrying `reason` is REFUSED rather than silently dropping your words, because unlike `wake` nothing here reaches the run. Authorized against api/v1/workorders/conclude, which the transition grant does NOT imply. An attended session's attendee concludes it holding neither grant; a plugin acting for them, only when its on_behalf_of grant names conclude. */
|
|
2808
2808
|
action: "answer" | "approve" | "reject" | "rework" | "cancel" | "retry" | "wake" | "conclude";
|
|
2809
2809
|
/** Files to hand this Work Order, each named by the HANDLE its upload minted — `tera artifacts upload <file> --description "…"` mints one in a single command, or over the API `POST /api/v1/artifacts/uploads/authorize` starts an upload and completing it mints the handle. A DISPATCHED RUN uses neither door — a worker-class caller is refused both — and attaches only a handle it has ALREADY PUBLISHED into this same train, which costs nothing and is not a re-upload. ATTACHMENTS CARRY A HANDLE AND NEVER FILE CONTENT, at any size: there is no inline, base64 or small-file form of this field on any surface, so upload first and pass the reference. You do not describe the file here — its filename, declared content type, size, digest and the uploader's description come from the upload itself, so what a later reader sees is what was actually uploaded rather than what the create said about it. An attach CONSUMES the artifact into this one Work Order's train: it leaves your staged account, the same handle keeps working, and it cannot be attached to a second Work Order — upload the file again for that. A handle you have not attached within 24 hours of uploading it is collected; attaching to a `draft` stops that clock for as long as the draft lives, and discarding the draft hands the file back to you with a fresh 24 hours rather than deleting it. Every unattachable handle answers the same way — never uploaded, already attached, expired, or somebody else's are one refusal, because telling them apart would say whether another principal's handle exists; `tera artifacts list --staged` lists what is actually yours (`GET /api/v1/artifacts/staged` over the API). A run has no staging account to list, and the handle it should be passing is one of its own outputs in this train. Inputs get their own byte allowance (64 MiB per Work Order) and never spend the separate allowance a run uses to publish artifacts about its own work. */
|
|
2810
2810
|
attachments?: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kottera/tera-web",
|
|
3
|
-
"version": "0.1.0-rc.
|
|
3
|
+
"version": "0.1.0-rc.9",
|
|
4
4
|
"description": "The browser half of a UI over tera: a framework-free client for the /tera/v1/ routes a plugin's webui kit serves (ADR-162 D4).",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|