@qontinui/shared-types 2.3.0 → 2.4.0

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.
@@ -20,9 +20,9 @@ export interface GlossaryEntry<Id extends GlossaryTerm = GlossaryTerm> {
20
20
  }
21
21
 
22
22
  /** The glossary's `version` (glossary/terms.toml). */
23
- export const GLOSSARY_VERSION: number = 1;
23
+ export const GLOSSARY_VERSION: number = 2;
24
24
  /** SHA-256 of the canonical glossary content (the parsed terms as JSON; see glossary/versions.lock). */
25
- export const GLOSSARY_CONTENT_SHA256 = "6e753bcf582accfec2223bdde074407dadf79ea4b417c1e32c269033b3e4388c";
25
+ export const GLOSSARY_CONTENT_SHA256 = "9f0bb2a99e2b2cee5c4ec306724fc225ecfc8ad93fa29bd38411a343fc519981";
26
26
 
27
27
  /** Every term id, in glossary order. */
28
28
  export const GLOSSARY_TERMS: readonly GlossaryTerm[] = [
@@ -61,7 +61,7 @@ export const GLOSSARY: { readonly [Id in GlossaryTerm]: GlossaryEntry<Id> } = {
61
61
  id: "gate",
62
62
  term: "Gate",
63
63
  short: "A watched record of work that stopped because it is waiting on something observable; it resumes by itself when the condition clears.",
64
- long: "A **gate** turns \"I am blocked\" into something the product watches. It has a typed predicate (a pull request landed, CI went green, a deploy is healthy, a claim ended, an operator approved, a time elapsed, and more) that is re-checked on a schedule.\n\nVerdicts: **open**, **cleared**, **failed** (the event happened the wrong way), **misconfigured** (can never be evaluated) and **withdrawn**. When the evaluator cannot answer, the gate stays open with a reason rather than guessing.\n\nVerbs: *register* creates a gate, *attest* clears an approval gate, *withdraw* retires it with a reason. A gate can carry a **continuation** that runs when it clears.",
64
+ long: "A **gate** turns \"I am blocked\" into something the product watches. It has a typed predicate (a pull request landed, CI went green, a deploy is healthy, a claim ended, an operator approved, a time elapsed, and more) that is re-checked on a schedule.\n\nVerdicts: **open**, **cleared**, **failed** (the event happened the wrong way), **misconfigured** (can never be evaluated) and **withdrawn**. When the evaluator cannot answer, the gate stays open with a reason rather than guessing. If it stays unanswerable for a sustained stretch (at least five checks in a row over at least 90 minutes), the gate ends **failed** and must be registered again.\n\nVerbs: *register* creates a gate, *attest* clears an approval gate, *withdraw* retires it with a reason. A gate can carry a **continuation** that runs when it clears.",
65
65
  see_also: ["continuation", "attestation", "work_unit", "unknown"],
66
66
  since: 1,
67
67
  },
@@ -76,17 +76,17 @@ export const GLOSSARY: { readonly [Id in GlossaryTerm]: GlossaryEntry<Id> } = {
76
76
  "attestation": {
77
77
  id: "attestation",
78
78
  term: "Attestation",
79
- short: "A declaration by an agent or a person that a gate's condition is met, which clears an approval gate.",
80
- long: "An **attestation** clears a gate whose predicate is an approval rather than something the product can observe by itself.\n\nWho may attest is decided per gate class by its clearance authority: *operator only*, *an agent other than the author* (separation of duties), or *any agent* in the tenant. Gates addressed to agents can by default be attested by any agent; gates addressed to the operator need a human approval.\n\nForce-clearing a gate that can no longer clear on its own is a separate action, checked against the same authority.",
81
- see_also: ["gate", "operator", "tenant"],
79
+ short: "A recorded declaration by an agent or a person: that an approval gate's condition is met or can never be met, or that a work unit reached a judged status.",
80
+ long: "An **attestation** clears a gate whose predicate is an approval rather than something the product can observe by itself.\n\nWho may attest is decided per gate class by its clearance authority: *operator only*, *an agent other than the author* (separation of duties: another machine counts; on the same machine, only a different agent session counts, and when that cannot be shown the attester is treated as the author), or *any agent* in the tenant. Gates addressed to agents can by default be attested by any agent; gates addressed to the operator need a human approval.\n\nAn attestation can also say the condition can **never** be met; that ends the gate **failed**, with the reason recorded. Force-clearing a gate that can no longer clear on its own is a separate action, checked against the same authority.\n\nWork units are attested too: the judged statuses (*vetted*, *superseded*, *obsolete*) are normally accepted only from someone other than the unit's owner, or with a recorded declaration of how the attester is independent of the author.",
81
+ see_also: ["gate", "work_unit", "operator", "tenant"],
82
82
  since: 1,
83
83
  },
84
84
  "work_unit": {
85
85
  id: "work_unit",
86
86
  term: "Work unit",
87
87
  short: "The durable record of one piece of work: a slug with a status, an owner, the pull requests that implement it, and its dependencies.",
88
- long: "A **work unit** is how the product tracks a piece of work over its whole life, independent of any file. It carries a status, an owner, **citations** (the pull requests that implement it), dependency edges and free-form metadata.\n\nEvery status change is kept in its history, and gates can wait on a work unit reaching a status. The status is free text chosen by whoever writes it, so read it as that writer's label rather than a fixed state machine.\n\nWhen plans are enabled, each plan's status is mirrored into a work unit.",
89
- see_also: ["plan", "gate", "tier", "claim"],
88
+ long: "A **work unit** is how the product tracks a piece of work over its whole life, independent of any file. It carries a status, an owner, **citations** (the pull requests that implement it), dependency edges and free-form metadata.\n\nEvery status change is kept in its history, and gates can wait on a work unit reaching a status. Statuses come in three kinds:\n\n- **derived**: *ready* (vetted, with at least one gate and all of its remaining gates cleared) and *shipped* (at least one cited pull request landed and no citation is still open; taken back if that stops holding) are set only by the service when it derives them; they cannot be written directly.\n- **attested**: *vetted*, *superseded* and *obsolete* need an **attestation**, normally from someone other than the unit's owner.\n- **free**: `draft`, `in_progress`, `blocked` or any other word, stored exactly as written. Read an unrecognized word as its writer's label, not a state the product tracks.\n\nWhen plans are enabled, each plan's status is mirrored into a work unit.",
89
+ see_also: ["plan", "gate", "attestation", "tier", "claim"],
90
90
  since: 1,
91
91
  },
92
92
  "plan": {
@@ -108,9 +108,9 @@ export const GLOSSARY: { readonly [Id in GlossaryTerm]: GlossaryEntry<Id> } = {
108
108
  "tier": {
109
109
  id: "tier",
110
110
  term: "Tier",
111
- short: "A level in one of three ladders: coordination (claims, work units, plans), the autonomy dial, or a policy clause's permission level.",
112
- long: "**Tier** names a level in three separate ladders; read which one from context.\n\n1. **Coordination tiers** stack: *claims* (who is touching what, always on), then *work units* (the durable record of work), then *plan files* (optional; enabled by configuring a plans folder). A tenant with no plan files loses very little.\n2. **The autonomy dial** says how far agents may go on security-sensitive work: *proceed*, *draft required* (open a draft behind an approval gate) or *ask first*.\n3. **Clause tiers** mark what one policy clause permits: *proceed*, *proceed and log*, *proceed and notify*, *ask first* or *never*.",
113
- see_also: ["claim", "work_unit", "plan", "policy", "clause"],
111
+ short: "A level in one of several separate ladders: coordination, the autonomy dial, clause permission, agent write access, or runner account.",
112
+ long: "**Tier** names a level in several separate ladders; read which one from context.\n\n1. **Coordination tiers** stack: *claims* (who is touching what, always on), then *work units* (the durable record of work), then *plan files* (optional; enabled by configuring a plans folder). A tenant with no plan files loses very little.\n2. **The autonomy dial** says how far agents may go on security-sensitive work: *proceed*, *draft required* (open a draft behind an approval gate) or *ask first*.\n3. **Clause tiers** mark what one policy clause permits: *proceed*, *proceed and log*, *proceed and notify*, *ask first* or *never*.\n4. **Agent write tiers** say whether agents may edit a prompt document: *deny*, *allow* or *allow with notification*.\n5. **Runner account tiers**: *Tier 0* uses local AI only, *Tier 1* your own provider keys, *Tier 2* is signed in to a Qontinui account, which multi-machine coordination needs.",
113
+ see_also: ["claim", "work_unit", "plan", "policy", "clause", "runner"],
114
114
  since: 1,
115
115
  },
116
116
  "merge_train": {
@@ -220,8 +220,8 @@ export const GLOSSARY: { readonly [Id in GlossaryTerm]: GlossaryEntry<Id> } = {
220
220
  "tenant": {
221
221
  id: "tenant",
222
222
  term: "Tenant",
223
- short: "The isolation boundary that owns repositories, devices, gates, work units, policies and memory. Shown as a Project in the app.",
224
- long: "A **tenant** is the unit of ownership and isolation. Repositories, devices, gates, work units, findings, policies and intent documents all belong to exactly one tenant, and every read and write is scoped to the tenant resolved from the caller's identity.\n\nThe web app calls a tenant a **Project**, and users can create their own. The merge train lands changes automatically only where the tenant has automatic merging enabled, the repository has merging enabled, and the tenant has not paused merging; a tenant-wide pause overrides every repository.",
223
+ short: "The isolation boundary that owns gates, work units, policies and memory; devices and repositories can belong to several. Shown as a Project in the app.",
224
+ long: "A **tenant** is the unit of ownership and isolation. Gates, work units, findings, policies and intent documents each belong to exactly one tenant, and every read and write is scoped to the tenant resolved from the caller's identity.\n\nA device can be bound to more than one tenant, and a repository can be registered under more than one. Each credential names one tenant. Where a request leaves the choice open, the service either refuses it as ambiguous or, where that check is not switched on, falls back to the device's default tenant.\n\nThe web app calls a tenant a **Project**, and users can create their own. The merge train lands changes automatically only where the tenant has automatic merging enabled, the repository has merging enabled, and the tenant has not paused merging; a tenant-wide pause overrides every repository.",
225
225
  see_also: ["device", "operator", "policy", "intent_document"],
226
226
  since: 1,
227
227
  },
@@ -229,7 +229,7 @@ export const GLOSSARY: { readonly [Id in GlossaryTerm]: GlossaryEntry<Id> } = {
229
229
  id: "device",
230
230
  term: "Device",
231
231
  short: "A registered machine running the runner. Pairing links it to your account and issues the credential it uses.",
232
- long: "A **device** is a machine (or runner instance) the product knows by its device id. The id is an identifier, not a secret.\n\n**Pairing** links a device to a person who belongs to the tenant: a short-lived pairing token is completed by that person, and the device is issued its own credential. On authenticated requests the service works out the device's tenant from that credential rather than from anything the device asserts.\n\nWork is sent only to devices that are paired, heartbeating, capable of the work and not drained.",
232
+ long: "A **device** is a machine (or runner instance) the product knows by its device id. The id is an identifier, not a secret.\n\n**Pairing** links a device to a person who belongs to the tenant: a short-lived pairing token is completed by that person, and the device is issued its own credential. On authenticated requests the service works out the tenant from that credential rather than from anything the device asserts. A device may be paired into several tenants; each credential carries one of them.\n\nWork is sent only to devices that are paired, heartbeating, capable of the work and not drained.",
233
233
  see_also: ["tenant", "runner", "drain"],
234
234
  since: 1,
235
235
  },
@@ -252,8 +252,8 @@ export const GLOSSARY: { readonly [Id in GlossaryTerm]: GlossaryEntry<Id> } = {
252
252
  "worktree_allocation": {
253
253
  id: "worktree_allocation",
254
254
  term: "Worktree allocation",
255
- short: "Asking the service for an agent's own isolated working copy on a reserved branch, so parallel agents never share one.",
256
- long: "A **worktree allocation** gives an agent its own git worktree for each repository it needs, on a branch reserved for that agent, and records what the agent intends to do there so overlapping work is visible.\n\nIt can answer *wait* when the machine's isolation budget is used up; a refused allocation records nothing. Repositories a checkout builds against are allocated beside it automatically.\n\nEvery successful allocation creates a record, so never make one just to test whether the service is reachable.",
255
+ short: "Asking the service where an agent should work: usually its own isolated working copy on a reserved branch, so parallel agents do not collide.",
256
+ long: "A **worktree allocation** gives an agent its own git worktree for each repository it needs, on a branch reserved for that agent, and records what the agent intends to do there so overlapping work is visible.\n\nThe answer is one of three: a separate **worktree** (the usual case); a **shared branch**, meaning work on the reserved branch inside the main checkout, used only when the agent's tools support working safely in the shared checkout; or *wait* when the machine's isolation budget is used up. A refused allocation records nothing. Repositories a checkout builds against are allocated beside it automatically.\n\nEvery successful allocation creates a record, so never make one just to test whether the service is reachable.",
257
257
  see_also: ["claim", "agent_session", "device"],
258
258
  since: 1,
259
259
  },
package/src/index.ts CHANGED
@@ -26,6 +26,12 @@ export type { PendingQuestion } from "./generated/PendingQuestion";
26
26
  export type { HealthLite } from "./generated/HealthLite";
27
27
  export type { HealthLevel } from "./generated/HealthLevel";
28
28
 
29
+ // Image-slot specs — the declared contract of one image placement (plan
30
+ // 2026-10-13-image-generation-and-visual-judgment, Phase 14). Generated from
31
+ // `rust/src/image_slot.rs`. Its `ImageSlot*` sub-types are declared inside
32
+ // `ImageSlotSpec.d.ts`; reach one by indexed access (`ImageSlotSpec["aspect"]`).
33
+ export type { ImageSlotSpec } from "./generated/ImageSlotSpec";
34
+
29
35
  // State discovery types
30
36
  export * from "./discovery";
31
37