wicked-crew-api-types 0.106.0 → 0.108.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 +88 -16
  2. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -5158,11 +5158,12 @@ export interface SystemSettings {
5158
5158
  baseSkillPolicy?: 'warn' | 'require';
5159
5159
  /**
5160
5160
  * The DELIVER IDENTITY (crew#549; additive): the GitHub login the deliver phase must push as.
5161
- * The deliver script reads `gh api user` AND asks git which credential it would use for the
5162
- * remote's host, and REFUSES — before anything is staged, committed or pushed — when either
5163
- * disagrees with this login (or, with nothing configured, when those two disagree with each
5164
- * other). `''`/absent ⇒ the `GH_ACCOUNT` env var decides, and unset there means the phase
5165
- * pushes as whatever login gh holds, said aloud on the gate card.
5161
+ * (crew#940) On a github.com origin the deliver script reads THIS login's own token from gh's
5162
+ * keyring and uses it for its gh calls and its git fetch/push alone, whatever account gh has
5163
+ * active; a login gh holds no token for is "GitHub credentials not configured", refused before
5164
+ * anything is staged. An exported `GH_TOKEN` wins, and is refused when it authenticates as
5165
+ * another login. `''`/absent ⇒ the `GH_ACCOUNT` env var decides, and unset there means the phase
5166
+ * pushes as whatever login gh holds (git's credential cross-checked), said aloud on the gate card.
5166
5167
  *
5167
5168
  * A LOGIN ONLY — never a token. The credential itself stays in gh's keyring or in the daemon's
5168
5169
  * `GH_TOKEN`; `GET /settings` returns this login and no secret ever.
@@ -5395,6 +5396,9 @@ export interface RunInventoryResponse {
5395
5396
  export interface PresetStep {
5396
5397
  catalog: string;
5397
5398
  id: string;
5399
+ /** (crew#928, wicked-core#854) The step changes no file in the run's tree; see
5400
+ * {@link TeamPlanStep.writes_nothing}. */
5401
+ writes_nothing?: boolean;
5398
5402
  [k: string]: unknown;
5399
5403
  }
5400
5404
 
@@ -7197,7 +7201,8 @@ export interface DiagnosticsSkillsFinding {
7197
7201
  * an `error` under `'require'` (the engine refuses every launch at intake); cleared by a publish
7198
7202
  * that hands it. Also carried as `DiagnosticsSkills.baseSkill.finding`; `skills.phase-skill`
7199
7203
  * (`warning`, crew#661) = a subsystem's phases declare a skill the published snapshot did not hold
7200
- * when it armed, so they run without it — one per `DiagnosticsSkills.phaseSkillGaps` entry;
7204
+ * when it armed, so they run without it — one per `DiagnosticsSkills.phaseSkillGaps` entry (none
7205
+ * since crew#935);
7201
7206
  * `skills.garden` (`error`, api-types 0.78.0, crew#753) = the installed wicked-garden is older
7202
7207
  * than the daemon requires (`GardenRequiredBody.required`), so it is not used: found at seed,
7203
7208
  * the runtime is `config-error` and the engine is handed a refusal path. Rides
@@ -7274,7 +7279,9 @@ export interface DiagnosticsSkills {
7274
7279
  /** Subsystems whose phases run WITHOUT a skill their workflow declares (crew#661; additive) — one
7275
7280
  * entry per subsystem, judged when that seam ARMED (the decision holds until the daemon restarts).
7276
7281
  * Each entry also rides `findings` as a `skills.phase-skill` warning. `[]` when every armed seam
7277
- * holds its skill; ABSENT on a daemon before this field (read it as unknown, not as `[]`). */
7282
+ * holds its skill; ABSENT on a daemon before this field (read it as unknown, not as `[]`). Always
7283
+ * `[]` from a daemon carrying crew#935: the interactive seams launch wicked-core's presets, which
7284
+ * always run their skill (a snapshot without it fails the run), so no seam arms without it. */
7278
7285
  phaseSkillGaps?: DiagnosticsPhaseSkillGap[];
7279
7286
  }
7280
7287
 
@@ -8132,8 +8139,36 @@ export interface TeamPlanStep {
8132
8139
  * phase's pool; a raise is refused (`wicked.team.plan.refused`, reason `pool_raised`). Omitted
8133
8140
  * when unset. */
8134
8141
  pool?: number;
8142
+ /** (crew#928, wicked-core#854) The step changes no file in the run's tree (capture-learnings'
8143
+ * `capture`, steering-author's `propose`). A plan whose every creator step sets it, and that has
8144
+ * no `run` step, may be scoped `SCOPE {"touch":[]}`, which scores 0. Set on a code phase it is
8145
+ * refused (`writes_nothing_on_code`). Omitted when unset. */
8146
+ writes_nothing?: boolean;
8135
8147
  }
8136
8148
 
8149
+ /**
8150
+ * The stable token of a plan-rule refusal (wicked-core `PlanRefusal::reason`). A refusal formatted
8151
+ * by the engine's `PlanRefusal` reads `<token>: <detail>`; a skin matches the token, never the
8152
+ * prose. NOT every `plan.refused` reason is one: some are plain text (an auto-mode floor override,
8153
+ * a held edit the run ended before applying), and a launch / preview / `propose_plan` error message
8154
+ * CONTAINS the refusal text behind a context prefix (`the plan is refused: <token>: …`), so search
8155
+ * for the token rather than splitting on the first `:`. Open-ended: the engine may add tokens.
8156
+ *
8157
+ * - `pool_raised` (crew#894, wicked-core#810): a step raised its phase's pool.
8158
+ * - `writes_nothing_on_code` (crew#928, wicked-core#854): `writes_nothing: true` on a step whose
8159
+ * phase executes code.
8160
+ * - `security_review_on_non_code_plan` (crew#928, wicked-core#846/#854): a `security_review` in a
8161
+ * plan where no step does code work; its diff evidence floor could never pass. The detail names
8162
+ * the step and either the held testing rule that added it (`rule TST-1002 requires it`) or `the
8163
+ * plan authored it`. Raised mid-run (a rule fired by the diff re-score) it FAILS the run, and
8164
+ * the run's error text carries the rule.
8165
+ */
8166
+ export type PlanRefusalToken =
8167
+ | 'pool_raised'
8168
+ | 'writes_nothing_on_code'
8169
+ | 'security_review_on_non_code_plan'
8170
+ | (string & {});
8171
+
8137
8172
  export interface TeamPlanOverride {
8138
8173
  remove: string[];
8139
8174
  reason: string;
@@ -8216,8 +8251,11 @@ export type TeamPlanAcceptedPayload = TeamEnvelope & {
8216
8251
  export type TeamPlanRefusedPayload = TeamEnvelope & {
8217
8252
  proposal_id: string;
8218
8253
  base_rev: number | null;
8219
- /** The engine's refusal reason, verbatim — e.g. `pool_raised` (crew#894, wicked-core#810: a plan
8220
- * step raised a phase's `pool`; a step may only lower it). */
8254
+ /** The engine's refusal reason, verbatim. A plan-rule refusal reads `<token>: <detail>` with a
8255
+ * {@link PlanRefusalToken} — e.g. `pool_raised` (crew#894, wicked-core#810: a plan step raised a
8256
+ * phase's `pool`; a step may only lower it), `security_review_on_non_code_plan` or
8257
+ * `writes_nothing_on_code` (crew#928); other reasons are plain text. A launch / preview /
8258
+ * `propose_plan` error message contains the same text behind a context prefix. */
8221
8259
  reason: string;
8222
8260
  };
8223
8261
 
@@ -10050,7 +10088,8 @@ export type EditorPermission =
10050
10088
  * fetched at `entry_url` (`GET /editors/:id/:version/entry`, the §8.2 headers, re-hashed per serve).
10051
10089
  * First-party editors ship inside studio's bundle (`<studio dist>/editors/<id>/editor.json` +
10052
10090
  * `index.html`, ids `wicked-*`) and are discovered at boot; third-party editors arrive as garden
10053
- * packs and cannot be installed before the install-time conformance run (EP-C8).
10091
+ * packs (`source: 'pack'`), installed by the operator once garden's `pack check` and the
10092
+ * install-time conformance run have both passed.
10054
10093
  */
10055
10094
  export interface EditorView {
10056
10095
  id: string;
@@ -10069,20 +10108,52 @@ export interface EditorView {
10069
10108
  bytes: number;
10070
10109
  first_party: boolean;
10071
10110
  enabled: boolean;
10072
- source: 'studio-bundle';
10111
+ /** `studio-bundle`: first-party, shipped with studio. `pack`: a third-party pack the operator installed. */
10112
+ source: 'studio-bundle' | 'pack';
10073
10113
  entry_url: string;
10074
10114
  }
10075
10115
 
10076
10116
  /** `GET /editors` (operator+). */
10077
10117
  export interface ListEditorsResponse {
10078
10118
  editors: EditorView[];
10079
- /** Why `POST /editors` answers 501 today: third-party installs wait on EP-C8. */
10080
- installs: 'refused_until_conformance';
10119
+ /** `conformance_required`: `POST /editors` installs a pack only after garden's `pack check` and the
10120
+ * install-time conformance run pass (`refused_until_conformance` before the install surface: every install was refused). */
10121
+ installs: 'conformance_required' | 'refused_until_conformance';
10081
10122
  }
10082
10123
 
10083
10124
  /** `POST /editors` body (human-only): a pack directory holding `wicked-pack.json`. */
10084
10125
  export interface InstallEditorBody {
10085
10126
  packRoot: string;
10127
+ /** Install it on (the default; an update keeps the editor's current switch) or off. */
10128
+ enabled?: boolean;
10129
+ }
10130
+
10131
+ /** `POST /editors` → 200: the pack's editors are installed (or updated in place) and listed. */
10132
+ export interface InstallEditorResponse {
10133
+ installed: true;
10134
+ /** The pack was installed before; its editors were replaced (a new hash asks for its grants again). */
10135
+ updated: boolean;
10136
+ editors: EditorView[];
10137
+ check: PackCheckResult;
10138
+ conformance: EditorConformanceSummary;
10139
+ }
10140
+
10141
+ /** What the install-time conformance run found (garden `scripts/editor/conformance.py`). */
10142
+ export interface EditorConformanceSummary {
10143
+ ok: boolean;
10144
+ at: string;
10145
+ /** Per editor: the version and entry sha256 the run tested (an install requires both to be the installed ones). */
10146
+ editors: Array<{ id: string; version: string; sha256: string; ok: boolean; cases: Record<string, { ok: boolean }>; gaps: string[] }>;
10147
+ /** Set when the run could not happen (no headless browser, no garden with the runner). */
10148
+ error?: string;
10149
+ }
10150
+
10151
+ /** `POST /editors` → 422 when the conformance run failed or could not run (fail closed). */
10152
+ export interface InstallEditorNotConformant {
10153
+ code: 'editor_not_conformant' | 'conformance_unavailable';
10154
+ error: string;
10155
+ check: PackCheckResult;
10156
+ conformance: EditorConformanceSummary;
10086
10157
  }
10087
10158
 
10088
10159
  /** One finding of garden's `pack check --json`. */
@@ -10101,11 +10172,12 @@ export interface PackCheckResult {
10101
10172
  }
10102
10173
 
10103
10174
  /**
10104
- * `POST /editors` → 501: the pack passed garden's gate, and this is what the install WOULD ask the
10105
- * operator to approve (§3.2 "Add these") once third-party installs open (EP-C8). Nothing was written.
10175
+ * `POST /editors` → 501: the pack passed garden's gate but also ships skills or blocks, whose own
10176
+ * approval (§3.2 "Add these") is not built yet; this is what it would ask the operator to approve.
10177
+ * Nothing was written. (`third_party_editors_not_available` before the install surface: every pack was refused.)
10106
10178
  */
10107
10179
  export interface InstallEditorRefusal {
10108
- code: 'third_party_editors_not_available';
10180
+ code: 'pack_ships_skills_or_blocks' | 'third_party_editors_not_available';
10109
10181
  error: string;
10110
10182
  check: PackCheckResult;
10111
10183
  pack: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wicked-crew-api-types",
3
- "version": "0.106.0",
3
+ "version": "0.108.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",