wicked-crew-api-types 0.39.0 → 0.40.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.
Files changed (2) hide show
  1. package/index.d.ts +73 -7
  2. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -111,7 +111,15 @@ export type EntityMode = 'shared' | 'isolated';
111
111
  /** Human-confirm gate policy. serde: `None`→"none", `All`→"all", `Before(n)`→{ before: n }. */
112
112
  export type HumanConfirm = 'none' | 'all' | { before: number };
113
113
 
114
- /** Why a CLI was assigned to a unit (`RoutingInfo`, internally tagged on `method`). */
114
+ /**
115
+ * Why a CLI was assigned to a unit (`RoutingInfo`, internally tagged on `method`).
116
+ *
117
+ * `teamed` (wicked-core#590 S5) is what every seated unit of a new run carries: the engine no
118
+ * longer convenes a council to route, it picks the first eligible seat the unit's skills admit, in
119
+ * roster order (`winner`), and the evaluator ≠ creator fence then moves a review/test unit off a
120
+ * builder seat (`evaluator_distinct`, whose `was` is the teamed pick). `council` and `degraded` are
121
+ * no longer produced; they stay because a recorded run's units carry them.
122
+ */
115
123
  export type RoutingInfo =
116
124
  /**
117
125
  * `seated` is the seats CONVENED — the denominator `returned` must be read against.
@@ -135,7 +143,8 @@ export type RoutingInfo =
135
143
  }
136
144
  | { method: 'degraded'; reason: string }
137
145
  | { method: 'evaluator_distinct'; winner: string; was: string }
138
- | { method: 'tool' };
146
+ | { method: 'tool' }
147
+ | { method: 'teamed'; winner: string };
139
148
 
140
149
  /**
141
150
  * `GET /health` (api-types 0.37.0 — the shape was previously undeclared here; `status`,
@@ -1012,7 +1021,9 @@ export interface CoreEvent {
1012
1021
  library?: string;
1013
1022
  transform?: string;
1014
1023
  known?: boolean;
1015
- detail?: string;
1024
+ /** `adviceDelivered` (wicked-core#602, api-types 0.40.0) spells an absent detail `null`, never an
1025
+ * absent key — widened to admit that `null`; every other producer still sends a string. */
1026
+ detail?: string | null;
1016
1027
  [k: string]: unknown;
1017
1028
  }
1018
1029
 
@@ -1900,6 +1911,58 @@ export type WorkerToolCallDeniedEvent = {
1900
1911
  remedy: string;
1901
1912
  };
1902
1913
 
1914
+ /**
1915
+ * DES-TEAMING-001 §5.2 / §7 (wicked-core#602, S3; api-types 0.40.0) — what became of HIGH monitor
1916
+ * advice for one attempt of a unit. The one mid-turn carrier is the ACP adapter's
1917
+ * `_session/steering` request, always sent with `idleBehavior: "promptRequired"` so a steer that
1918
+ * lands after the turn settled never starts a detached turn.
1919
+ *
1920
+ * - `carrier: 'acp_steering'` + `outcome: 'injected'` — the steer reached the running turn.
1921
+ * - `outcome: 'turn_ended'` — the adapter answered `promptRequired` (the turn had settled; nothing
1922
+ * was started), or the turn ended with the steer unanswered. The advice goes to the gate.
1923
+ * - `outcome: 'refused'` — the adapter answered a JSON-RPC error (in `detail`); the turn continues.
1924
+ * - `outcome: 'not_delivered'` — the advice never rode a steer: `carrier: 'none'` when the unit's
1925
+ * carrier has no mid-turn channel (wrapped, PTY, an ACP adapter not advertising steering), or
1926
+ * `'acp_steering'` when the turn ended before the next tool-call boundary. `detail` says which.
1927
+ *
1928
+ * Every key is always present; `detail` is `null` when there is nothing to add. Spelled exactly as
1929
+ * wicked-core's `CoreEvent::to_json` emits it. `type` alias on purpose (relays through the
1930
+ * `CoreEvent`-typed seams unchanged).
1931
+ */
1932
+ export type AdviceDeliveredEvent = {
1933
+ type: 'adviceDelivered';
1934
+ session: string;
1935
+ ord: number;
1936
+ attempt: number;
1937
+ /** `f-` + 16 lowercase hex per finding; one steer may carry several. */
1938
+ findingIds: string[];
1939
+ carrier: 'acp_steering' | 'none' | (string & {});
1940
+ outcome: 'injected' | 'turn_ended' | 'refused' | 'not_delivered' | (string & {});
1941
+ detail: string | null;
1942
+ };
1943
+
1944
+ /**
1945
+ * DES-TEAMING-001 §5.3 / §7 (wicked-core#602, S3; api-types 0.40.0) — the worker's answer to one
1946
+ * DELIVERED finding, read from its final output line `ADVICE <id>: ACCEPT|DECLINE — <reason>` (the
1947
+ * last line per id wins). The worker may decline and must say why: `reason` (≤2 KB) is its
1948
+ * evidence, and may be `""` — a refusal with no evidence is recorded as exactly that. A delivered
1949
+ * finding with no line emits nothing here and is `unanswered` in the team ledger. The gate, not the
1950
+ * monitor, decides.
1951
+ */
1952
+ export type WorkerAdviceResponseEvent = {
1953
+ type: 'workerAdviceResponse';
1954
+ session: string;
1955
+ ord: number;
1956
+ attempt: number;
1957
+ findingId: string;
1958
+ disposition: 'accepted' | 'declined' | (string & {});
1959
+ reason: string;
1960
+ };
1961
+
1962
+ /** The S3 team-advice events as a discriminated union for consumers that narrow on `type`; they
1963
+ * also flow through the permissive {@link CoreEvent}. */
1964
+ export type TeamAdviceEvent = AdviceDeliveredEvent | WorkerAdviceResponseEvent;
1965
+
1903
1966
  export type GateEvidenceEvent =
1904
1967
  | EvaluatorMutatedWorktreeEvent
1905
1968
  | RepoChecksEvaluatedEvent
@@ -2006,9 +2069,12 @@ export interface UnitDistributedEvent {
2006
2069
  ord: number;
2007
2070
  /** The roster key of the assigned seat. */
2008
2071
  cli: string;
2009
- /** How the seat was chosen: the council verdict, a degrade to the first candidate, an
2010
- * evaluator ≠ creator reassignment, or a deterministic tool execution. */
2011
- routingMethod: 'council' | 'degraded' | 'evaluator_distinct' | 'tool';
2072
+ /** How the seat was chosen: `'teamed'` — the deterministic pick, no council (wicked-core#590 S5;
2073
+ * every seated unit of a new run) — an evaluator ≠ creator reassignment, or a deterministic tool
2074
+ * execution. `'council'` / `'degraded'` are no longer emitted by a new run and stay for recorded
2075
+ * frames. On `'teamed'` the council-only fields (`agreementPct`, `returned`, `seated`, `dissent`)
2076
+ * are `null`. Consumers must render an unrecognised method as "routed", never as a council. */
2077
+ routingMethod: 'council' | 'degraded' | 'evaluator_distinct' | 'tool' | 'teamed';
2012
2078
  agreementPct: number | null;
2013
2079
  /** Ballots that came back. Read against `seated`. */
2014
2080
  returned: number | null;
@@ -2046,7 +2112,7 @@ export interface UnitDistributedEvent {
2046
2112
  */
2047
2113
  distinctnessFallback?: 'creator_seat' | 'same_cli_instance' | null;
2048
2114
  /** @deprecated api-types 0.36.0 — the engine emits `routingMethod`; removed in 0.37. */
2049
- routing_method?: 'council' | 'degraded' | 'evaluator_distinct' | 'tool';
2115
+ routing_method?: 'council' | 'degraded' | 'evaluator_distinct' | 'tool' | 'teamed';
2050
2116
  /** @deprecated api-types 0.36.0 — the engine emits `agreementPct`; removed in 0.37. */
2051
2117
  agreement_pct?: number | null;
2052
2118
  /** @deprecated api-types 0.36.0 — the engine emits `degradedReason`; removed in 0.37. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wicked-crew-api-types",
3
- "version": "0.39.0",
3
+ "version": "0.40.0",
4
4
  "description": "The wire contract of the wicked-crew daemon's /api/v1 REST surface and /ws CoreEvent frames \u2014 types only, zero runtime",
5
5
  "type": "module",
6
6
  "types": "./index.d.ts",