@kottera/tera-web 0.1.0-rc.7 → 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.
@@ -67,6 +67,14 @@ export type SharesList = {
67
67
  grantee: string;
68
68
  /** The id of the person who made the share. */
69
69
  sharer: string;
70
+ /** The grantee person's display name. Presentation only: grantee stays the identity. Absent when tera has no name to show: a pending invitation has none, the directory has no person for the id, or the read failed. Render the name, else the address, else Someone; never the principal id. */
71
+ grantee_name?: string;
72
+ /** The grantee person's address, or a pending share's invitation address. Presentation only: grantee stays the identity. Absent when tera has no address to show: the directory has no person for the id, or the read failed. */
73
+ grantee_address?: string;
74
+ /** The sharer's display name. Presentation only: sharer stays the identity. Absent when tera has no name to show: the directory has no person for the id, or the read failed. Render the name, else the address, else Someone; never the principal id. */
75
+ sharer_name?: string;
76
+ /** The sharer's address. Presentation only: sharer stays the identity. Absent when tera has no address to show: the directory has no person for the id, or the read failed. */
77
+ sharer_address?: string;
70
78
  /** The plugin principal that made the share for its sharer; absent when the sharer made it directly. */
71
79
  created_via?: string;
72
80
  /** When the share was made. */
@@ -168,6 +176,14 @@ export type SharesShare = {
168
176
  grantee: string;
169
177
  /** The id of the person who made the share. */
170
178
  sharer: string;
179
+ /** The grantee person's display name. Presentation only: grantee stays the identity. Absent when tera has no name to show: a pending invitation has none, the directory has no person for the id, or the read failed. Render the name, else the address, else Someone; never the principal id. */
180
+ grantee_name?: string;
181
+ /** The grantee person's address, or a pending share's invitation address. Presentation only: grantee stays the identity. Absent when tera has no address to show: the directory has no person for the id, or the read failed. */
182
+ grantee_address?: string;
183
+ /** The sharer's display name. Presentation only: sharer stays the identity. Absent when tera has no name to show: the directory has no person for the id, or the read failed. Render the name, else the address, else Someone; never the principal id. */
184
+ sharer_name?: string;
185
+ /** The sharer's address. Presentation only: sharer stays the identity. Absent when tera has no address to show: the directory has no person for the id, or the read failed. */
186
+ sharer_address?: string;
171
187
  /** The plugin principal that made the share for its sharer; absent when the sharer made it directly. */
172
188
  created_via?: string;
173
189
  /** When the share was made. */
@@ -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
  *
@@ -1255,6 +1255,7 @@ export type WorkOrderGetResult = {
1255
1255
  };
1256
1256
  take?: {
1257
1257
  principal: string;
1258
+ display_name?: string;
1258
1259
  taken_at: string;
1259
1260
  last_progress_at?: string;
1260
1261
  describe?: string;
@@ -1437,6 +1438,7 @@ export type WorkOrderGetResult = {
1437
1438
  cause?: string;
1438
1439
  } | null;
1439
1440
  created_by?: string;
1441
+ created_by_display_name?: string;
1440
1442
  created_via?: string;
1441
1443
  released_via?: string;
1442
1444
  lent_by?: string;
@@ -1863,6 +1865,7 @@ export type WorkOrderListResult = {
1863
1865
  archived: boolean;
1864
1866
  take?: {
1865
1867
  principal: string;
1868
+ display_name?: string;
1866
1869
  taken_at: string;
1867
1870
  last_progress_at?: string;
1868
1871
  describe?: string;
@@ -1923,6 +1926,7 @@ export type WorkOrderListOffTeraResult = {
1923
1926
  age_seconds: number;
1924
1927
  take?: {
1925
1928
  principal: string;
1929
+ display_name?: string;
1926
1930
  taken_at: string;
1927
1931
  last_progress_at?: string;
1928
1932
  describe?: string;
@@ -1951,6 +1955,7 @@ export type WorkOrderListOffTeraResult = {
1951
1955
  age_seconds: number;
1952
1956
  take?: {
1953
1957
  principal: string;
1958
+ display_name?: string;
1954
1959
  taken_at: string;
1955
1960
  last_progress_at?: string;
1956
1961
  describe?: string;
@@ -1979,6 +1984,7 @@ export type WorkOrderListOffTeraResult = {
1979
1984
  age_seconds: number;
1980
1985
  take?: {
1981
1986
  principal: string;
1987
+ display_name?: string;
1982
1988
  taken_at: string;
1983
1989
  last_progress_at?: string;
1984
1990
  describe?: string;
@@ -2085,6 +2091,7 @@ export type WorkOrderProgressResult = {
2085
2091
  state: string;
2086
2092
  take: {
2087
2093
  principal: string;
2094
+ display_name?: string;
2088
2095
  taken_at: string;
2089
2096
  last_progress_at?: string;
2090
2097
  describe?: string;
@@ -2749,6 +2756,7 @@ export type WorkOrderTakeResult = {
2749
2756
  state: string;
2750
2757
  take: {
2751
2758
  principal: string;
2759
+ display_name?: string;
2752
2760
  taken_at: string;
2753
2761
  last_progress_at?: string;
2754
2762
  describe?: string;
@@ -2796,7 +2804,7 @@ export type WorkOrderTakeResult = {
2796
2804
  * Schema: sdk/workorder/schema/v1/transition.params.json
2797
2805
  */
2798
2806
  export type WorkOrderTransitionParams = {
2799
- /** 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. */
2800
2808
  action: "answer" | "approve" | "reject" | "rework" | "cancel" | "retry" | "wake" | "conclude";
2801
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. */
2802
2810
  attachments?: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kottera/tera-web",
3
- "version": "0.1.0-rc.7",
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": {