@walkeros/cli 4.6.0-next-1788817472881 → 4.6.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.
package/dist/index.d.ts CHANGED
@@ -336,7 +336,7 @@ type Platform = 'web' | 'server';
336
336
  *
337
337
  * Priority: `WALKEROS_TOKEN`, then a legacy static token, then the OAuth
338
338
  * session. Returns null when nothing can be resolved, which callers render as
339
- * "run `walkeros login`".
339
+ * "run `walkeros auth login`".
340
340
  *
341
341
  * Throws when a refresh was needed but could not be carried out, which is a
342
342
  * different problem from having no session and must not be reported as one.
@@ -352,7 +352,7 @@ declare function resolveAccessToken(opts?: {
352
352
  declare function getAuthHeaders(): Promise<Record<string, string>>;
353
353
  /**
354
354
  * Where a credential would come from, without resolving or refreshing it.
355
- * For commands that want to send someone to `walkeros login` before spending
355
+ * For commands that want to send someone to `walkeros auth login` before spending
356
356
  * a network round trip.
357
357
  */
358
358
  declare function credentialSource(): 'env' | 'config' | null;
@@ -366,6 +366,11 @@ declare function mergeAuthHeaders(token: string | null | undefined, headers?: He
366
366
  /**
367
367
  * Authenticated fetch — resolves base URL + adds auth token.
368
368
  * Use for all API calls that require WALKEROS_TOKEN.
369
+ *
370
+ * The transport is checked only once a credential is actually going out.
371
+ * `resolveAppUrl` keeps answering with whatever is configured, which is what
372
+ * the paths that merely REPORT the target (diagnostics, health, telemetry)
373
+ * need from it.
369
374
  */
370
375
  declare function apiFetch(path: string, init?: RequestInit): Promise<Response>;
371
376
  /**
@@ -819,6 +824,11 @@ interface LogoutCommandOptions extends GlobalOptions {
819
824
  json?: boolean;
820
825
  }
821
826
  declare function logoutCommand(options: LogoutCommandOptions): Promise<void>;
827
+ interface LogoutResult {
828
+ deleted: boolean;
829
+ /** A different session reached the config while the revocation was in flight. */
830
+ superseded: boolean;
831
+ }
822
832
  /**
823
833
  * Revoke the stored refresh token, then drop the local config.
824
834
  *
@@ -826,9 +836,7 @@ declare function logoutCommand(options: LogoutCommandOptions): Promise<void>;
826
836
  * alive on the server that nothing can ever reach to retire. It is best
827
837
  * effort: a logout on a plane still has to clear the machine.
828
838
  */
829
- declare function logout(): Promise<{
830
- deleted: boolean;
831
- }>;
839
+ declare function logout(): Promise<LogoutResult>;
832
840
 
833
841
  declare function whoami(): Promise<{
834
842
  userId: string;
@@ -1353,158 +1361,6 @@ interface paths {
1353
1361
  patch?: never;
1354
1362
  trace?: never;
1355
1363
  };
1356
- '/api/auth/device/code': {
1357
- parameters: {
1358
- query?: never;
1359
- header?: never;
1360
- path?: never;
1361
- cookie?: never;
1362
- };
1363
- get?: never;
1364
- put?: never;
1365
- /**
1366
- * Request device code
1367
- * @description Generate a device code and user code for the device authorization flow.
1368
- */
1369
- post: {
1370
- parameters: {
1371
- query?: never;
1372
- header?: never;
1373
- path?: never;
1374
- cookie?: never;
1375
- };
1376
- requestBody?: never;
1377
- responses: {
1378
- /** @description Device code generated */
1379
- 200: {
1380
- headers: {
1381
- [name: string]: unknown;
1382
- };
1383
- content: {
1384
- 'application/json': components['schemas']['DeviceCodeResponse'];
1385
- };
1386
- };
1387
- };
1388
- };
1389
- delete?: never;
1390
- options?: never;
1391
- head?: never;
1392
- patch?: never;
1393
- trace?: never;
1394
- };
1395
- '/api/auth/device/approve': {
1396
- parameters: {
1397
- query?: never;
1398
- header?: never;
1399
- path?: never;
1400
- cookie?: never;
1401
- };
1402
- get?: never;
1403
- put?: never;
1404
- /**
1405
- * Approve device code
1406
- * @description Approve a device authorization request using the user code. Requires authentication.
1407
- */
1408
- post: {
1409
- parameters: {
1410
- query?: never;
1411
- header?: never;
1412
- path?: never;
1413
- cookie?: never;
1414
- };
1415
- requestBody?: {
1416
- content: {
1417
- 'application/json': components['schemas']['ApproveDeviceRequest'];
1418
- };
1419
- };
1420
- responses: {
1421
- /** @description Device approved */
1422
- 200: {
1423
- headers: {
1424
- [name: string]: unknown;
1425
- };
1426
- content: {
1427
- 'application/json': components['schemas']['ApproveDeviceResponse'];
1428
- };
1429
- };
1430
- /** @description Unauthorized */
1431
- 401: {
1432
- headers: {
1433
- [name: string]: unknown;
1434
- };
1435
- content: {
1436
- 'application/json': components['schemas']['ErrorResponse'];
1437
- };
1438
- };
1439
- /** @description Not found */
1440
- 404: {
1441
- headers: {
1442
- [name: string]: unknown;
1443
- };
1444
- content: {
1445
- 'application/json': components['schemas']['ErrorResponse'];
1446
- };
1447
- };
1448
- };
1449
- };
1450
- delete?: never;
1451
- options?: never;
1452
- head?: never;
1453
- patch?: never;
1454
- trace?: never;
1455
- };
1456
- '/api/auth/device/token': {
1457
- parameters: {
1458
- query?: never;
1459
- header?: never;
1460
- path?: never;
1461
- cookie?: never;
1462
- };
1463
- get?: never;
1464
- put?: never;
1465
- /**
1466
- * Poll device token
1467
- * @description Poll for authorization status using the device code. Returns a token when approved.
1468
- */
1469
- post: {
1470
- parameters: {
1471
- query?: never;
1472
- header?: never;
1473
- path?: never;
1474
- cookie?: never;
1475
- };
1476
- requestBody?: {
1477
- content: {
1478
- 'application/json': components['schemas']['DeviceTokenRequest'];
1479
- };
1480
- };
1481
- responses: {
1482
- /** @description Authorization approved */
1483
- 200: {
1484
- headers: {
1485
- [name: string]: unknown;
1486
- };
1487
- content: {
1488
- 'application/json': components['schemas']['DeviceTokenResponse'];
1489
- };
1490
- };
1491
- /** @description Pending, slow down, or expired */
1492
- 400: {
1493
- headers: {
1494
- [name: string]: unknown;
1495
- };
1496
- content: {
1497
- 'application/json': components['schemas']['ErrorResponse'];
1498
- };
1499
- };
1500
- };
1501
- };
1502
- delete?: never;
1503
- options?: never;
1504
- head?: never;
1505
- patch?: never;
1506
- trace?: never;
1507
- };
1508
1364
  '/api/projects': {
1509
1365
  parameters: {
1510
1366
  query?: never;
@@ -4950,8 +4806,8 @@ interface paths {
4950
4806
  cookie?: never;
4951
4807
  };
4952
4808
  /**
4953
- * List my tokens
4954
- * @description List all API tokens for the authenticated user. Returns summaries (no raw token values).
4809
+ * List my automation tokens
4810
+ * @description The caller's live automation tokens, with the scope and audience each carries. No raw token value is ever returned; `tokenPrefix` is the only fragment of one that survives issuance. A connected app's access token lives in the same store and is deliberately absent: it is taken back by disconnecting the app.
4955
4811
  */
4956
4812
  get: {
4957
4813
  parameters: {
@@ -4962,13 +4818,13 @@ interface paths {
4962
4818
  };
4963
4819
  requestBody?: never;
4964
4820
  responses: {
4965
- /** @description List of tokens */
4821
+ /** @description List of automation tokens */
4966
4822
  200: {
4967
4823
  headers: {
4968
4824
  [name: string]: unknown;
4969
4825
  };
4970
4826
  content: {
4971
- 'application/json': components['schemas']['ListApiTokensResponse'];
4827
+ 'application/json': components['schemas']['ListAutomationTokensResponse'];
4972
4828
  };
4973
4829
  };
4974
4830
  /** @description Unauthorized */
@@ -4984,8 +4840,8 @@ interface paths {
4984
4840
  };
4985
4841
  put?: never;
4986
4842
  /**
4987
- * Create token
4988
- * @description Create a new API token. The raw token is returned once and cannot be retrieved again.
4843
+ * Create automation token
4844
+ * @description Mint an automation token for the authenticated user. The audience is `api` and `mcp`, so one token works against REST and against `/api/mcp`, and the chosen scope decides how far it gets at either: `read` is refused every non-safe REST method with 403 `INSUFFICIENT_SCOPE`. The raw token is returned once and cannot be retrieved again, so the answer carries `Cache-Control: no-store`.
4989
4845
  */
4990
4846
  post: {
4991
4847
  parameters: {
@@ -4996,7 +4852,7 @@ interface paths {
4996
4852
  };
4997
4853
  requestBody?: {
4998
4854
  content: {
4999
- 'application/json': components['schemas']['CreateApiTokenRequest'];
4855
+ 'application/json': components['schemas']['CreateAutomationTokenRequest'];
5000
4856
  };
5001
4857
  };
5002
4858
  responses: {
@@ -5006,7 +4862,7 @@ interface paths {
5006
4862
  [name: string]: unknown;
5007
4863
  };
5008
4864
  content: {
5009
- 'application/json': components['schemas']['CreateApiTokenResponse'];
4865
+ 'application/json': components['schemas']['CreateAutomationTokenResponse'];
5010
4866
  };
5011
4867
  };
5012
4868
  /** @description Validation error */
@@ -5044,6 +4900,52 @@ interface paths {
5044
4900
  patch?: never;
5045
4901
  trace?: never;
5046
4902
  };
4903
+ '/api/tokens/revoke-all': {
4904
+ parameters: {
4905
+ query?: never;
4906
+ header?: never;
4907
+ path?: never;
4908
+ cookie?: never;
4909
+ };
4910
+ get?: never;
4911
+ put?: never;
4912
+ /**
4913
+ * Revoke all access
4914
+ * @description Revoke every grant this person holds, the tokens hanging from them, and every automation token they hold. Runner tokens survive: those are the credentials deployed flow containers run with, so revoking them would stop every container the person is running. Session only: a bearer credential is refused with 401 `SESSION_REQUIRED`, so a machine token cannot disconnect everything its owner has connected.
4915
+ */
4916
+ post: {
4917
+ parameters: {
4918
+ query?: never;
4919
+ header?: never;
4920
+ path?: never;
4921
+ cookie?: never;
4922
+ };
4923
+ requestBody?: never;
4924
+ responses: {
4925
+ /** @description Access revoked */
4926
+ 204: {
4927
+ headers: {
4928
+ [name: string]: unknown;
4929
+ };
4930
+ content?: never;
4931
+ };
4932
+ /** @description Unauthorized */
4933
+ 401: {
4934
+ headers: {
4935
+ [name: string]: unknown;
4936
+ };
4937
+ content: {
4938
+ 'application/json': components['schemas']['ErrorResponse'];
4939
+ };
4940
+ };
4941
+ };
4942
+ };
4943
+ delete?: never;
4944
+ options?: never;
4945
+ head?: never;
4946
+ patch?: never;
4947
+ trace?: never;
4948
+ };
5047
4949
  '/api/tokens/{tokenId}': {
5048
4950
  parameters: {
5049
4951
  query?: never;
@@ -5055,8 +4957,8 @@ interface paths {
5055
4957
  put?: never;
5056
4958
  post?: never;
5057
4959
  /**
5058
- * Revoke token
5059
- * @description Revoke an API token (soft delete via revokedAt timestamp).
4960
+ * Revoke automation token
4961
+ * @description Revoke one of the caller's tokens. Idempotent and scoped to the caller: an unknown id, another person's token and an already revoked one all answer 204, since a distinguishable answer would tell the caller which ids exist.
5060
4962
  */
5061
4963
  delete: {
5062
4964
  parameters: {
@@ -8680,12 +8582,13 @@ interface paths {
8680
8582
  };
8681
8583
  /**
8682
8584
  * List the frames of a page, or of the whole project
8683
- * @description A frame is a named rectangle with marks inside it, the spatial unit of a measurement plan. Naming a `pageKey` returns that page’s frames at any depth, marks and all, newest updated first: the walk starts at the page’s top-level frames and descends containment, so a child is reachable through its parent rather than by carrying a page of its own. Naming no page returns every live frame of the project WITHOUT its marks, which is what makes that read cheap enough to answer "what does this project have": the marks are the bulk of a frame and a listing never renders them. That lean read asks nothing about containment, so a frame whose parent cannot be resolved still appears. Requires member role.
8585
+ * @description A frame is a named rectangle with marks inside it, the spatial unit of a measurement plan. Naming a `pageKey` returns that page’s frames at any depth, marks and all, newest updated first: the walk starts at the page’s top-level frames and descends containment, so a child is reachable through its parent rather than by carrying a page of its own. Naming no page returns every live frame of the project WITHOUT its marks, which is what makes that read cheap enough to answer "what does this project have": the marks are the bulk of a frame and a listing never renders them. That lean read asks nothing about containment, so a frame whose parent cannot be resolved still appears. `include=marks` asks that project-wide read for the marks anyway, for a surface that spans pages and cannot fetch a page at a time; it is a second, heavier read of the same rows, taken after the lean list has already painted, and omitting it returns exactly the lean rows. It says nothing to the page read, which carries marks either way. Requires member role.
8684
8586
  */
8685
8587
  get: {
8686
8588
  parameters: {
8687
8589
  query?: {
8688
8590
  pageKey?: string;
8591
+ include?: 'marks';
8689
8592
  };
8690
8593
  header?: never;
8691
8594
  path: {
@@ -9211,7 +9114,7 @@ interface paths {
9211
9114
  patch?: never;
9212
9115
  trace?: never;
9213
9116
  };
9214
- '/api/projects/{projectId}/flows/{flowId}/releases/step-history': {
9117
+ '/api/projects/{projectId}/canvases': {
9215
9118
  parameters: {
9216
9119
  query?: never;
9217
9120
  header?: never;
@@ -9219,41 +9122,27 @@ interface paths {
9219
9122
  cookie?: never;
9220
9123
  };
9221
9124
  /**
9222
- * List the releases that touched one step
9223
- * @description The releases of this flow that added, changed, or removed one step, newest first, each carrying the rationale stored for it. `step` is a `type.name` key over source, transformer, destination, store, and contract. `flow` narrows the scan to one named flow inside the config and is ignored for a contract key. `limit` bounds the releases scanned, not the entries returned. When nothing matched, `knownSteps` lists the addressable keys of the newest scanned release. Requires member role.
9125
+ * List the canvases of the project
9126
+ * @description A canvas is a named, freely arranged board over a project’s frames, the surface on which a plan is laid out across pages rather than within one. This returns every live canvas by name WITHOUT its document: the document is the bulk of a canvas and a listing renders none of it, so opening a board is the single-canvas read. Requires member role.
9224
9127
  */
9225
9128
  get: {
9226
9129
  parameters: {
9227
- query: {
9228
- step: string;
9229
- flow?: string;
9230
- limit?: number | null;
9231
- };
9130
+ query?: never;
9232
9131
  header?: never;
9233
9132
  path: {
9234
9133
  projectId: string;
9235
- flowId: string;
9236
9134
  };
9237
9135
  cookie?: never;
9238
9136
  };
9239
9137
  requestBody?: never;
9240
9138
  responses: {
9241
- /** @description The releases that touched the step */
9139
+ /** @description The project’s canvases, without their documents */
9242
9140
  200: {
9243
9141
  headers: {
9244
9142
  [name: string]: unknown;
9245
9143
  };
9246
9144
  content: {
9247
- 'application/json': components['schemas']['StepHistoryResponse'];
9248
- };
9249
- };
9250
- /** @description Invalid step key or query */
9251
- 400: {
9252
- headers: {
9253
- [name: string]: unknown;
9254
- };
9255
- content: {
9256
- 'application/json': components['schemas']['ErrorResponse'];
9145
+ 'application/json': components['schemas']['CanvasListResponse'];
9257
9146
  };
9258
9147
  };
9259
9148
  /** @description Unauthorized */
@@ -9295,25 +9184,9 @@ interface paths {
9295
9184
  };
9296
9185
  };
9297
9186
  put?: never;
9298
- post?: never;
9299
- delete?: never;
9300
- options?: never;
9301
- head?: never;
9302
- patch?: never;
9303
- trace?: never;
9304
- };
9305
- '/api/projects/{projectId}/flows/{flowId}/releases/summarize': {
9306
- parameters: {
9307
- query?: never;
9308
- header?: never;
9309
- path?: never;
9310
- cookie?: never;
9311
- };
9312
- get?: never;
9313
- put?: never;
9314
9187
  /**
9315
- * Summarize or check a release
9316
- * @description Describe what one release of this flow changed against an earlier release, or check a written note against that same change. In `draft` mode the generated text is stored as the release's generated summary; in `check` mode nothing is stored and the response says whether the note matches. The diff is always recomputed from the two stored snapshots, with secret literals masked, and is never taken from the request. Both versions must be numbered releases of this flow, and `prevVersionId` must be the earlier of the two. Requires member role and the `hub` feature.
9188
+ * Create one canvas
9189
+ * @description Create one empty canvas at version 1. The id is the client’s, so a board drawn before the first save keeps its identity when it arrives. A canvas comes into existence here and nowhere else: a document write to an id the project does not hold is a 404 rather than a create, which is what keeps a stray write from minting a board. A name another live canvas already holds is 409 `CANVAS_NAME_EXISTS`; the partial unique index is over live rows, so a name a deleted canvas still carries is free. An id that is not a canvas id is refused by the body schema as 400 `VALIDATION_ERROR`. An id that is not available, because a canvas, in this project or another, already holds it, is 400 `INVALID_CANVAS`, whose message says nothing about the project that holds it. Requires member role.
9317
9190
  */
9318
9191
  post: {
9319
9192
  parameters: {
@@ -9321,34 +9194,29 @@ interface paths {
9321
9194
  header?: never;
9322
9195
  path: {
9323
9196
  projectId: string;
9324
- flowId: string;
9325
9197
  };
9326
9198
  cookie?: never;
9327
9199
  };
9328
9200
  requestBody?: {
9329
9201
  content: {
9330
9202
  'application/json': {
9331
- /** @example ver_a1b2c3d4 */
9332
- versionId: string;
9333
- /** @example ver_a1b2c3d4 */
9334
- prevVersionId: string;
9335
- /** @enum {string} */
9336
- mode: 'draft' | 'check';
9337
- currentText?: string;
9203
+ /** @example cnv_V1StGXR8Z5jdHi6BmyT7K */
9204
+ id: string;
9205
+ name: string;
9338
9206
  };
9339
9207
  };
9340
9208
  };
9341
9209
  responses: {
9342
- /** @description The generated summary or the check verdict */
9343
- 200: {
9210
+ /** @description The created canvas, with its empty document */
9211
+ 201: {
9344
9212
  headers: {
9345
9213
  [name: string]: unknown;
9346
9214
  };
9347
9215
  content: {
9348
- 'application/json': components['schemas']['SummarizeReleaseResponse'];
9216
+ 'application/json': components['schemas']['Canvas'];
9349
9217
  };
9350
9218
  };
9351
- /** @description Invalid body, a target is not a release, the pair is out of order, or no LLM provider is configured */
9219
+ /** @description Invalid body, or an id that is not available */
9352
9220
  400: {
9353
9221
  headers: {
9354
9222
  [name: string]: unknown;
@@ -9384,8 +9252,8 @@ interface paths {
9384
9252
  'application/json': components['schemas']['ErrorResponse'];
9385
9253
  };
9386
9254
  };
9387
- /** @description Rate limited */
9388
- 429: {
9255
+ /** @description A name another live canvas already holds */
9256
+ 409: {
9389
9257
  headers: {
9390
9258
  [name: string]: unknown;
9391
9259
  };
@@ -9393,8 +9261,8 @@ interface paths {
9393
9261
  'application/json': components['schemas']['ErrorResponse'];
9394
9262
  };
9395
9263
  };
9396
- /** @description The model call failed or returned no usable text */
9397
- 502: {
9264
+ /** @description Rate limited */
9265
+ 429: {
9398
9266
  headers: {
9399
9267
  [name: string]: unknown;
9400
9268
  };
@@ -9410,7 +9278,7 @@ interface paths {
9410
9278
  patch?: never;
9411
9279
  trace?: never;
9412
9280
  };
9413
- '/api/projects/{projectId}/deployments/{deploymentId}/versions/current/content': {
9281
+ '/api/projects/{projectId}/canvases/{canvasId}': {
9414
9282
  parameters: {
9415
9283
  query?: never;
9416
9284
  header?: never;
@@ -9418,8 +9286,8 @@ interface paths {
9418
9286
  cookie?: never;
9419
9287
  };
9420
9288
  /**
9421
- * Get current deployed content
9422
- * @description Get the active deployed per-setting content for a deployment, used to diff changes since deploy. Content is masked and display-only; every field is null when there is no deployed baseline. Requires member role.
9289
+ * Read one canvas
9290
+ * @description One canvas with its whole document: the nodes with their positions, the edges, and the node keys the board suppresses. A canvas of another project reads back as nothing and answers 404, never 403, so this route cannot become an oracle for what exists elsewhere. A deleted canvas is gone to every read. Requires member role.
9423
9291
  */
9424
9292
  get: {
9425
9293
  parameters: {
@@ -9427,23 +9295,24 @@ interface paths {
9427
9295
  header?: never;
9428
9296
  path: {
9429
9297
  projectId: string;
9430
- deploymentId: string;
9298
+ /** @description Canvas ID (cnv_...) */
9299
+ canvasId: string;
9431
9300
  };
9432
9301
  cookie?: never;
9433
9302
  };
9434
9303
  requestBody?: never;
9435
9304
  responses: {
9436
- /** @description Deployed content (or a null baseline) */
9305
+ /** @description The canvas */
9437
9306
  200: {
9438
9307
  headers: {
9439
9308
  [name: string]: unknown;
9440
9309
  };
9441
9310
  content: {
9442
- 'application/json': components['schemas']['DeployedContentResponse'];
9311
+ 'application/json': components['schemas']['Canvas'];
9443
9312
  };
9444
9313
  };
9445
- /** @description Unauthorized */
9446
- 401: {
9314
+ /** @description The path segment does not address a canvas */
9315
+ 400: {
9447
9316
  headers: {
9448
9317
  [name: string]: unknown;
9449
9318
  };
@@ -9451,8 +9320,383 @@ interface paths {
9451
9320
  'application/json': components['schemas']['ErrorResponse'];
9452
9321
  };
9453
9322
  };
9454
- /** @description Forbidden */
9455
- 403: {
9323
+ /** @description Unauthorized */
9324
+ 401: {
9325
+ headers: {
9326
+ [name: string]: unknown;
9327
+ };
9328
+ content: {
9329
+ 'application/json': components['schemas']['ErrorResponse'];
9330
+ };
9331
+ };
9332
+ /** @description Forbidden */
9333
+ 403: {
9334
+ headers: {
9335
+ [name: string]: unknown;
9336
+ };
9337
+ content: {
9338
+ 'application/json': components['schemas']['ErrorResponse'];
9339
+ };
9340
+ };
9341
+ /** @description Not found */
9342
+ 404: {
9343
+ headers: {
9344
+ [name: string]: unknown;
9345
+ };
9346
+ content: {
9347
+ 'application/json': components['schemas']['ErrorResponse'];
9348
+ };
9349
+ };
9350
+ /** @description Rate limited */
9351
+ 429: {
9352
+ headers: {
9353
+ [name: string]: unknown;
9354
+ };
9355
+ content: {
9356
+ 'application/json': components['schemas']['ErrorResponse'];
9357
+ };
9358
+ };
9359
+ };
9360
+ };
9361
+ /**
9362
+ * Replace the document of one canvas
9363
+ * @description The whole board every time: a canvas is read and written as a unit, so there is no partial write to reconcile. `clientWriteId` is minted at compose time and is what makes a replayed drain exact: a write whose id already produced the stored version landed once and is answered with that version, writing nothing, so an offline queue drains repeatedly without turning one edit into two versions. A write against a version someone else has moved past answers 409 `CANVAS_VERSION_CONFLICT` carrying the head, which is what lets a client raise keep-mine against load-theirs on the board that conflicted instead of dropping what a person drew. A canvas this project does not hold, or one that was removed, is 404 `CANVAS_NOT_FOUND`: this door replaces a document and never creates one. Requires member role.
9364
+ */
9365
+ put: {
9366
+ parameters: {
9367
+ query?: never;
9368
+ header?: never;
9369
+ path: {
9370
+ projectId: string;
9371
+ /** @description Canvas ID (cnv_...) */
9372
+ canvasId: string;
9373
+ };
9374
+ cookie?: never;
9375
+ };
9376
+ requestBody?: {
9377
+ content: {
9378
+ 'application/json': {
9379
+ document: components['schemas']['CanvasDocument'];
9380
+ baseVersion: number;
9381
+ clientWriteId: string;
9382
+ };
9383
+ };
9384
+ };
9385
+ responses: {
9386
+ /** @description The stored version */
9387
+ 200: {
9388
+ headers: {
9389
+ [name: string]: unknown;
9390
+ };
9391
+ content: {
9392
+ 'application/json': components['schemas']['PutCanvasResponse'];
9393
+ };
9394
+ };
9395
+ /** @description Invalid body, or a path segment that addresses no canvas */
9396
+ 400: {
9397
+ headers: {
9398
+ [name: string]: unknown;
9399
+ };
9400
+ content: {
9401
+ 'application/json': components['schemas']['ErrorResponse'];
9402
+ };
9403
+ };
9404
+ /** @description Unauthorized */
9405
+ 401: {
9406
+ headers: {
9407
+ [name: string]: unknown;
9408
+ };
9409
+ content: {
9410
+ 'application/json': components['schemas']['ErrorResponse'];
9411
+ };
9412
+ };
9413
+ /** @description Forbidden */
9414
+ 403: {
9415
+ headers: {
9416
+ [name: string]: unknown;
9417
+ };
9418
+ content: {
9419
+ 'application/json': components['schemas']['ErrorResponse'];
9420
+ };
9421
+ };
9422
+ /** @description This project does not hold the named canvas */
9423
+ 404: {
9424
+ headers: {
9425
+ [name: string]: unknown;
9426
+ };
9427
+ content: {
9428
+ 'application/json': components['schemas']['ErrorResponse'];
9429
+ };
9430
+ };
9431
+ /** @description A stale base version, carrying the head */
9432
+ 409: {
9433
+ headers: {
9434
+ [name: string]: unknown;
9435
+ };
9436
+ content: {
9437
+ 'application/json': components['schemas']['CanvasConflictResponse'];
9438
+ };
9439
+ };
9440
+ /** @description Rate limited */
9441
+ 429: {
9442
+ headers: {
9443
+ [name: string]: unknown;
9444
+ };
9445
+ content: {
9446
+ 'application/json': components['schemas']['ErrorResponse'];
9447
+ };
9448
+ };
9449
+ };
9450
+ };
9451
+ post?: never;
9452
+ delete?: never;
9453
+ options?: never;
9454
+ head?: never;
9455
+ patch?: never;
9456
+ trace?: never;
9457
+ };
9458
+ '/api/projects/{projectId}/flows/{flowId}/releases/step-history': {
9459
+ parameters: {
9460
+ query?: never;
9461
+ header?: never;
9462
+ path?: never;
9463
+ cookie?: never;
9464
+ };
9465
+ /**
9466
+ * List the releases that touched one step
9467
+ * @description The releases of this flow that added, changed, or removed one step, newest first, each carrying the rationale stored for it. `step` is a `type.name` key over source, transformer, destination, store, and contract. `flow` narrows the scan to one named flow inside the config and is ignored for a contract key. `limit` bounds the releases scanned, not the entries returned. When nothing matched, `knownSteps` lists the addressable keys of the newest scanned release. Requires member role.
9468
+ */
9469
+ get: {
9470
+ parameters: {
9471
+ query: {
9472
+ step: string;
9473
+ flow?: string;
9474
+ limit?: number | null;
9475
+ };
9476
+ header?: never;
9477
+ path: {
9478
+ projectId: string;
9479
+ flowId: string;
9480
+ };
9481
+ cookie?: never;
9482
+ };
9483
+ requestBody?: never;
9484
+ responses: {
9485
+ /** @description The releases that touched the step */
9486
+ 200: {
9487
+ headers: {
9488
+ [name: string]: unknown;
9489
+ };
9490
+ content: {
9491
+ 'application/json': components['schemas']['StepHistoryResponse'];
9492
+ };
9493
+ };
9494
+ /** @description Invalid step key or query */
9495
+ 400: {
9496
+ headers: {
9497
+ [name: string]: unknown;
9498
+ };
9499
+ content: {
9500
+ 'application/json': components['schemas']['ErrorResponse'];
9501
+ };
9502
+ };
9503
+ /** @description Unauthorized */
9504
+ 401: {
9505
+ headers: {
9506
+ [name: string]: unknown;
9507
+ };
9508
+ content: {
9509
+ 'application/json': components['schemas']['ErrorResponse'];
9510
+ };
9511
+ };
9512
+ /** @description Forbidden */
9513
+ 403: {
9514
+ headers: {
9515
+ [name: string]: unknown;
9516
+ };
9517
+ content: {
9518
+ 'application/json': components['schemas']['ErrorResponse'];
9519
+ };
9520
+ };
9521
+ /** @description Not found */
9522
+ 404: {
9523
+ headers: {
9524
+ [name: string]: unknown;
9525
+ };
9526
+ content: {
9527
+ 'application/json': components['schemas']['ErrorResponse'];
9528
+ };
9529
+ };
9530
+ /** @description Rate limited */
9531
+ 429: {
9532
+ headers: {
9533
+ [name: string]: unknown;
9534
+ };
9535
+ content: {
9536
+ 'application/json': components['schemas']['ErrorResponse'];
9537
+ };
9538
+ };
9539
+ };
9540
+ };
9541
+ put?: never;
9542
+ post?: never;
9543
+ delete?: never;
9544
+ options?: never;
9545
+ head?: never;
9546
+ patch?: never;
9547
+ trace?: never;
9548
+ };
9549
+ '/api/projects/{projectId}/flows/{flowId}/releases/summarize': {
9550
+ parameters: {
9551
+ query?: never;
9552
+ header?: never;
9553
+ path?: never;
9554
+ cookie?: never;
9555
+ };
9556
+ get?: never;
9557
+ put?: never;
9558
+ /**
9559
+ * Summarize or check a release
9560
+ * @description Describe what one release of this flow changed against an earlier release, or check a written note against that same change. In `draft` mode the generated text is stored as the release's generated summary; in `check` mode nothing is stored and the response says whether the note matches. The diff is always recomputed from the two stored snapshots, with secret literals masked, and is never taken from the request. Both versions must be numbered releases of this flow, and `prevVersionId` must be the earlier of the two. Requires member role and the `hub` feature.
9561
+ */
9562
+ post: {
9563
+ parameters: {
9564
+ query?: never;
9565
+ header?: never;
9566
+ path: {
9567
+ projectId: string;
9568
+ flowId: string;
9569
+ };
9570
+ cookie?: never;
9571
+ };
9572
+ requestBody?: {
9573
+ content: {
9574
+ 'application/json': {
9575
+ /** @example ver_a1b2c3d4 */
9576
+ versionId: string;
9577
+ /** @example ver_a1b2c3d4 */
9578
+ prevVersionId: string;
9579
+ /** @enum {string} */
9580
+ mode: 'draft' | 'check';
9581
+ currentText?: string;
9582
+ };
9583
+ };
9584
+ };
9585
+ responses: {
9586
+ /** @description The generated summary or the check verdict */
9587
+ 200: {
9588
+ headers: {
9589
+ [name: string]: unknown;
9590
+ };
9591
+ content: {
9592
+ 'application/json': components['schemas']['SummarizeReleaseResponse'];
9593
+ };
9594
+ };
9595
+ /** @description Invalid body, a target is not a release, the pair is out of order, or no LLM provider is configured */
9596
+ 400: {
9597
+ headers: {
9598
+ [name: string]: unknown;
9599
+ };
9600
+ content: {
9601
+ 'application/json': components['schemas']['ErrorResponse'];
9602
+ };
9603
+ };
9604
+ /** @description Unauthorized */
9605
+ 401: {
9606
+ headers: {
9607
+ [name: string]: unknown;
9608
+ };
9609
+ content: {
9610
+ 'application/json': components['schemas']['ErrorResponse'];
9611
+ };
9612
+ };
9613
+ /** @description Forbidden */
9614
+ 403: {
9615
+ headers: {
9616
+ [name: string]: unknown;
9617
+ };
9618
+ content: {
9619
+ 'application/json': components['schemas']['ErrorResponse'];
9620
+ };
9621
+ };
9622
+ /** @description Not found */
9623
+ 404: {
9624
+ headers: {
9625
+ [name: string]: unknown;
9626
+ };
9627
+ content: {
9628
+ 'application/json': components['schemas']['ErrorResponse'];
9629
+ };
9630
+ };
9631
+ /** @description Rate limited */
9632
+ 429: {
9633
+ headers: {
9634
+ [name: string]: unknown;
9635
+ };
9636
+ content: {
9637
+ 'application/json': components['schemas']['ErrorResponse'];
9638
+ };
9639
+ };
9640
+ /** @description The model call failed or returned no usable text */
9641
+ 502: {
9642
+ headers: {
9643
+ [name: string]: unknown;
9644
+ };
9645
+ content: {
9646
+ 'application/json': components['schemas']['ErrorResponse'];
9647
+ };
9648
+ };
9649
+ };
9650
+ };
9651
+ delete?: never;
9652
+ options?: never;
9653
+ head?: never;
9654
+ patch?: never;
9655
+ trace?: never;
9656
+ };
9657
+ '/api/projects/{projectId}/deployments/{deploymentId}/versions/current/content': {
9658
+ parameters: {
9659
+ query?: never;
9660
+ header?: never;
9661
+ path?: never;
9662
+ cookie?: never;
9663
+ };
9664
+ /**
9665
+ * Get current deployed content
9666
+ * @description Get the active deployed per-setting content for a deployment, used to diff changes since deploy. Content is masked and display-only; every field is null when there is no deployed baseline. Requires member role.
9667
+ */
9668
+ get: {
9669
+ parameters: {
9670
+ query?: never;
9671
+ header?: never;
9672
+ path: {
9673
+ projectId: string;
9674
+ deploymentId: string;
9675
+ };
9676
+ cookie?: never;
9677
+ };
9678
+ requestBody?: never;
9679
+ responses: {
9680
+ /** @description Deployed content (or a null baseline) */
9681
+ 200: {
9682
+ headers: {
9683
+ [name: string]: unknown;
9684
+ };
9685
+ content: {
9686
+ 'application/json': components['schemas']['DeployedContentResponse'];
9687
+ };
9688
+ };
9689
+ /** @description Unauthorized */
9690
+ 401: {
9691
+ headers: {
9692
+ [name: string]: unknown;
9693
+ };
9694
+ content: {
9695
+ 'application/json': components['schemas']['ErrorResponse'];
9696
+ };
9697
+ };
9698
+ /** @description Forbidden */
9699
+ 403: {
9456
9700
  headers: {
9457
9701
  [name: string]: unknown;
9458
9702
  };
@@ -10259,76 +10503,7 @@ interface paths {
10259
10503
  };
10260
10504
  };
10261
10505
  /** @description Unauthorized */
10262
- 401: {
10263
- headers: {
10264
- [name: string]: unknown;
10265
- };
10266
- content: {
10267
- 'application/json': components['schemas']['ErrorResponse'];
10268
- };
10269
- };
10270
- /** @description Forbidden */
10271
- 403: {
10272
- headers: {
10273
- [name: string]: unknown;
10274
- };
10275
- content: {
10276
- 'application/json': components['schemas']['ErrorResponse'];
10277
- };
10278
- };
10279
- };
10280
- };
10281
- put?: never;
10282
- post?: never;
10283
- delete?: never;
10284
- options?: never;
10285
- head?: never;
10286
- patch?: never;
10287
- trace?: never;
10288
- };
10289
- '/api/projects/{projectId}/chat/sessions/{sessionId}': {
10290
- parameters: {
10291
- query?: never;
10292
- header?: never;
10293
- path?: never;
10294
- cookie?: never;
10295
- };
10296
- /**
10297
- * Get chat session
10298
- * @description Return a chat session and its full message history when the caller owns it. Foreign or unknown sessions return 404 (never 403) so existence is not leaked. Requires member role and the chat feature.
10299
- */
10300
- get: {
10301
- parameters: {
10302
- query?: never;
10303
- header?: never;
10304
- path: {
10305
- projectId: string;
10306
- sessionId: string;
10307
- };
10308
- cookie?: never;
10309
- };
10310
- requestBody?: never;
10311
- responses: {
10312
- /** @description Chat session with messages */
10313
- 200: {
10314
- headers: {
10315
- [name: string]: unknown;
10316
- };
10317
- content: {
10318
- 'application/json': components['schemas']['ChatSessionDetailResponse'];
10319
- };
10320
- };
10321
- /** @description Unauthorized */
10322
- 401: {
10323
- headers: {
10324
- [name: string]: unknown;
10325
- };
10326
- content: {
10327
- 'application/json': components['schemas']['ErrorResponse'];
10328
- };
10329
- };
10330
- /** @description Forbidden */
10331
- 403: {
10506
+ 401: {
10332
10507
  headers: {
10333
10508
  [name: string]: unknown;
10334
10509
  };
@@ -10336,8 +10511,8 @@ interface paths {
10336
10511
  'application/json': components['schemas']['ErrorResponse'];
10337
10512
  };
10338
10513
  };
10339
- /** @description Not found */
10340
- 404: {
10514
+ /** @description Forbidden */
10515
+ 403: {
10341
10516
  headers: {
10342
10517
  [name: string]: unknown;
10343
10518
  };
@@ -10355,50 +10530,36 @@ interface paths {
10355
10530
  patch?: never;
10356
10531
  trace?: never;
10357
10532
  };
10358
- '/api/projects/{projectId}/chat/elicit': {
10533
+ '/api/projects/{projectId}/chat/sessions/{sessionId}': {
10359
10534
  parameters: {
10360
10535
  query?: never;
10361
10536
  header?: never;
10362
10537
  path?: never;
10363
10538
  cookie?: never;
10364
10539
  };
10365
- get?: never;
10366
- put?: never;
10367
10540
  /**
10368
- * Answer elicitation prompt
10369
- * @description Answer a pending MCP elicitation prompt (accept, decline, or cancel), unblocking the waiting tool invocation. Requires member role and the chat feature.
10541
+ * Get chat session
10542
+ * @description Return a chat session and its full message history when the caller owns it. Foreign or unknown sessions return 404 (never 403) so existence is not leaked. Requires member role and the chat feature.
10370
10543
  */
10371
- post: {
10544
+ get: {
10372
10545
  parameters: {
10373
10546
  query?: never;
10374
10547
  header?: never;
10375
10548
  path: {
10376
10549
  projectId: string;
10550
+ sessionId: string;
10377
10551
  };
10378
10552
  cookie?: never;
10379
10553
  };
10380
- requestBody?: {
10381
- content: {
10382
- 'application/json': components['schemas']['ElicitRequest'];
10383
- };
10384
- };
10554
+ requestBody?: never;
10385
10555
  responses: {
10386
- /** @description Elicitation resolved */
10556
+ /** @description Chat session with messages */
10387
10557
  200: {
10388
10558
  headers: {
10389
10559
  [name: string]: unknown;
10390
10560
  };
10391
10561
  content: {
10392
- 'application/json': components['schemas']['ElicitResponse'];
10393
- };
10394
- };
10395
- /** @description Validation error */
10396
- 400: {
10397
- headers: {
10398
- [name: string]: unknown;
10399
- };
10400
- content: {
10401
- 'application/json': components['schemas']['ErrorResponse'];
10562
+ 'application/json': components['schemas']['ChatSessionDetailResponse'];
10402
10563
  };
10403
10564
  };
10404
10565
  /** @description Unauthorized */
@@ -10430,77 +10591,49 @@ interface paths {
10430
10591
  };
10431
10592
  };
10432
10593
  };
10594
+ put?: never;
10595
+ post?: never;
10433
10596
  delete?: never;
10434
10597
  options?: never;
10435
10598
  head?: never;
10436
10599
  patch?: never;
10437
10600
  trace?: never;
10438
10601
  };
10439
- '/api/mcp/tokens': {
10602
+ '/api/projects/{projectId}/chat/elicit': {
10440
10603
  parameters: {
10441
10604
  query?: never;
10442
10605
  header?: never;
10443
10606
  path?: never;
10444
10607
  cookie?: never;
10445
10608
  };
10446
- /**
10447
- * List MCP tokens
10448
- * @description List the authenticated user's personal MCP tokens. No secret material is returned.
10449
- */
10450
- get: {
10451
- parameters: {
10452
- query?: never;
10453
- header?: never;
10454
- path?: never;
10455
- cookie?: never;
10456
- };
10457
- requestBody?: never;
10458
- responses: {
10459
- /** @description MCP token list */
10460
- 200: {
10461
- headers: {
10462
- [name: string]: unknown;
10463
- };
10464
- content: {
10465
- 'application/json': components['schemas']['ListMcpTokensResponse'];
10466
- };
10467
- };
10468
- /** @description Unauthorized */
10469
- 401: {
10470
- headers: {
10471
- [name: string]: unknown;
10472
- };
10473
- content: {
10474
- 'application/json': components['schemas']['ErrorResponse'];
10475
- };
10476
- };
10477
- };
10478
- };
10609
+ get?: never;
10479
10610
  put?: never;
10480
10611
  /**
10481
- * Issue MCP token
10482
- * @description Issue a personal MCP token. The raw token is returned exactly once and is never retrievable afterwards.
10612
+ * Answer elicitation prompt
10613
+ * @description Answer a pending MCP elicitation prompt (accept, decline, or cancel), unblocking the waiting tool invocation. Requires member role and the chat feature.
10483
10614
  */
10484
10615
  post: {
10485
10616
  parameters: {
10486
10617
  query?: never;
10487
10618
  header?: never;
10488
- path?: never;
10619
+ path: {
10620
+ projectId: string;
10621
+ };
10489
10622
  cookie?: never;
10490
10623
  };
10491
10624
  requestBody?: {
10492
10625
  content: {
10493
- 'application/json': components['schemas']['CreateMcpTokenRequest'];
10626
+ 'application/json': components['schemas']['ElicitRequest'];
10494
10627
  };
10495
10628
  };
10496
10629
  responses: {
10497
- /** @description MCP token issued */
10498
- 201: {
10630
+ /** @description Elicitation resolved */
10631
+ 200: {
10499
10632
  headers: {
10500
10633
  [name: string]: unknown;
10501
10634
  };
10502
10635
  content: {
10503
- 'application/json': components['schemas']['CreateMcpTokenResponse'];
10636
+ 'application/json': components['schemas']['ElicitResponse'];
10504
10637
  };
10505
10638
  };
10506
10639
  /** @description Validation error */
@@ -10521,48 +10654,17 @@ interface paths {
10521
10654
  'application/json': components['schemas']['ErrorResponse'];
10522
10655
  };
10523
10656
  };
10524
- };
10525
- };
10526
- delete?: never;
10527
- options?: never;
10528
- head?: never;
10529
- patch?: never;
10530
- trace?: never;
10531
- };
10532
- '/api/mcp/tokens/{tokenId}': {
10533
- parameters: {
10534
- query?: never;
10535
- header?: never;
10536
- path?: never;
10537
- cookie?: never;
10538
- };
10539
- get?: never;
10540
- put?: never;
10541
- post?: never;
10542
- /**
10543
- * Revoke MCP token
10544
- * @description Revoke a personal MCP token by id.
10545
- */
10546
- delete: {
10547
- parameters: {
10548
- query?: never;
10549
- header?: never;
10550
- path: {
10551
- tokenId: string;
10552
- };
10553
- cookie?: never;
10554
- };
10555
- requestBody?: never;
10556
- responses: {
10557
- /** @description MCP token revoked */
10558
- 204: {
10657
+ /** @description Forbidden */
10658
+ 403: {
10559
10659
  headers: {
10560
10660
  [name: string]: unknown;
10561
10661
  };
10562
- content?: never;
10662
+ content: {
10663
+ 'application/json': components['schemas']['ErrorResponse'];
10664
+ };
10563
10665
  };
10564
- /** @description Unauthorized */
10565
- 401: {
10666
+ /** @description Not found */
10667
+ 404: {
10566
10668
  headers: {
10567
10669
  [name: string]: unknown;
10568
10670
  };
@@ -10572,6 +10674,7 @@ interface paths {
10572
10674
  };
10573
10675
  };
10574
10676
  };
10677
+ delete?: never;
10575
10678
  options?: never;
10576
10679
  head?: never;
10577
10680
  patch?: never;
@@ -11834,14 +11937,19 @@ interface components {
11834
11937
  role: string;
11835
11938
  joinedAt: string;
11836
11939
  }[];
11837
- apiTokens: {
11940
+ tokens: {
11838
11941
  id: string;
11839
11942
  name: string;
11943
+ /** @example automation */
11944
+ kind: string;
11945
+ /** @example read write */
11946
+ scope: string;
11947
+ /** @example api mcp */
11948
+ audience: string;
11840
11949
  projectId: string | null;
11841
- origin: string;
11842
11950
  createdAt: string;
11843
11951
  lastUsedAt: string | null;
11844
- expiresAt: string | null;
11952
+ expiresAt: string;
11845
11953
  revokedAt: string | null;
11846
11954
  }[];
11847
11955
  sessions: {
@@ -11850,14 +11958,6 @@ interface components {
11850
11958
  expiresAt: string;
11851
11959
  lastTouchedAt: string;
11852
11960
  }[];
11853
- mcpTokens: {
11854
- id: string;
11855
- name: string;
11856
- createdAt: string;
11857
- lastUsedAt: string | null;
11858
- expiresAt: string;
11859
- revokedAt: string | null;
11860
- }[];
11861
11961
  mcpSessions: {
11862
11962
  id: string;
11863
11963
  projectId: string | null;
@@ -11891,19 +11991,27 @@ interface components {
11891
11991
  cancelledAt: string | null;
11892
11992
  }[];
11893
11993
  };
11894
- ApiTokenSummary: {
11994
+ AutomationTokenSummary: {
11895
11995
  /** @example tok_a1b2c3d4 */
11896
11996
  id: string;
11897
11997
  /** @example CI Pipeline */
11898
11998
  name: string;
11899
- /** @example sk-walkeros-abcd */
11900
- prefix: string;
11901
- /** @example manual */
11902
- origin: string;
11903
- /** @example null */
11904
- projectId: string | null;
11905
- /** @example null */
11906
- scopes: string[] | null;
11999
+ /** @example wos_pat_a1b2 */
12000
+ tokenPrefix: string;
12001
+ /**
12002
+ * @example [
12003
+ * "read",
12004
+ * "write"
12005
+ * ]
12006
+ */
12007
+ scope: string[];
12008
+ /**
12009
+ * @example [
12010
+ * "api",
12011
+ * "mcp"
12012
+ * ]
12013
+ */
12014
+ audience: string[];
11907
12015
  /**
11908
12016
  * Format: date-time
11909
12017
  * @example 2026-01-26T14:30:00.000Z
@@ -11918,7 +12026,7 @@ interface components {
11918
12026
  * Format: date-time
11919
12027
  * @example 2026-01-26T14:30:00.000Z
11920
12028
  */
11921
- expiresAt: string | null;
12029
+ expiresAt: string;
11922
12030
  /**
11923
12031
  * Format: date-time
11924
12032
  * @example 2026-01-26T14:30:00.000Z
@@ -12944,6 +13052,89 @@ interface components {
12944
13052
  };
12945
13053
  head: components['schemas']['Frame'];
12946
13054
  };
13055
+ CanvasDocument: {
13056
+ /** @enum {number} */
13057
+ v: 1;
13058
+ nodes: components['schemas']['CanvasNodeEntry'][];
13059
+ edges: components['schemas']['CanvasEdgeEntry'][];
13060
+ hidden: string[];
13061
+ };
13062
+ CanvasNodeEntry: {
13063
+ kind: string;
13064
+ ref: string;
13065
+ position: components['schemas']['CanvasPoint'];
13066
+ parent?: string;
13067
+ size?: {
13068
+ width: number;
13069
+ height: number;
13070
+ };
13071
+ label?: string;
13072
+ };
13073
+ CanvasPoint: {
13074
+ x: number;
13075
+ y: number;
13076
+ };
13077
+ CanvasEdgeEntry: {
13078
+ id: string;
13079
+ /** @enum {string} */
13080
+ kind: 'navigation';
13081
+ from: string;
13082
+ to: string;
13083
+ label?: string;
13084
+ };
13085
+ Canvas: {
13086
+ /** @example cnv_V1StGXR8Z5jdHi6BmyT7K */
13087
+ id: string;
13088
+ projectId: string;
13089
+ name: string;
13090
+ document: components['schemas']['CanvasDocument'];
13091
+ version: number;
13092
+ /**
13093
+ * Format: date-time
13094
+ * @example 2026-01-26T14:30:00.000Z
13095
+ */
13096
+ createdAt: string;
13097
+ /**
13098
+ * Format: date-time
13099
+ * @example 2026-01-26T14:30:00.000Z
13100
+ */
13101
+ updatedAt: string;
13102
+ createdBy: string;
13103
+ updatedBy: string;
13104
+ };
13105
+ CanvasLean: {
13106
+ /** @example cnv_V1StGXR8Z5jdHi6BmyT7K */
13107
+ id: string;
13108
+ projectId: string;
13109
+ name: string;
13110
+ version: number;
13111
+ /**
13112
+ * Format: date-time
13113
+ * @example 2026-01-26T14:30:00.000Z
13114
+ */
13115
+ createdAt: string;
13116
+ /**
13117
+ * Format: date-time
13118
+ * @example 2026-01-26T14:30:00.000Z
13119
+ */
13120
+ updatedAt: string;
13121
+ createdBy: string;
13122
+ updatedBy: string;
13123
+ };
13124
+ CanvasListResponse: {
13125
+ canvases: components['schemas']['CanvasLean'][];
13126
+ };
13127
+ PutCanvasResponse: {
13128
+ version: number;
13129
+ };
13130
+ CanvasConflictResponse: {
13131
+ error: {
13132
+ /** @enum {string} */
13133
+ code: 'CANVAS_VERSION_CONFLICT';
13134
+ message: string;
13135
+ };
13136
+ head: components['schemas']['Canvas'];
13137
+ };
12947
13138
  SummarizeReleaseResponse: {
12948
13139
  /** @enum {string} */
12949
13140
  mode: 'draft' | 'check';
@@ -13773,33 +13964,6 @@ interface components {
13773
13964
  /** @enum {boolean} */
13774
13965
  ok: true;
13775
13966
  };
13776
- CreateMcpTokenRequest: {
13777
- name: string;
13778
- ttlSeconds?: number;
13779
- };
13780
- CreateMcpTokenResponse: {
13781
- id: string;
13782
- name: string;
13783
- token: string;
13784
- /** Format: date-time */
13785
- createdAt: string;
13786
- /** Format: date-time */
13787
- expiresAt: string;
13788
- };
13789
- ListMcpTokensResponse: {
13790
- tokens: components['schemas']['McpTokenSummary'][];
13791
- };
13792
- McpTokenSummary: {
13793
- id: string;
13794
- name: string;
13795
- audience: string;
13796
- /** Format: date-time */
13797
- createdAt: string;
13798
- /** Format: date-time */
13799
- lastUsedAt: string | null;
13800
- /** Format: date-time */
13801
- expiresAt: string;
13802
- };
13803
13967
  PackageCatalogResponse: {
13804
13968
  catalog: components['schemas']['PackageCatalogEntry'][];
13805
13969
  count: number;
@@ -13904,27 +14068,6 @@ interface components {
13904
14068
  isCurrent: boolean;
13905
14069
  }[];
13906
14070
  };
13907
- DeviceCodeResponse: {
13908
- deviceCode: string;
13909
- userCode: string;
13910
- expiresIn: number;
13911
- interval: number;
13912
- };
13913
- ApproveDeviceResponse: {
13914
- success: boolean;
13915
- };
13916
- ApproveDeviceRequest: {
13917
- userCode: string;
13918
- };
13919
- DeviceTokenResponse: {
13920
- token: string;
13921
- email: string;
13922
- userId: string;
13923
- };
13924
- DeviceTokenRequest: {
13925
- deviceCode: string;
13926
- hostname?: string;
13927
- };
13928
14071
  ListProjectsResponse: {
13929
14072
  projects: components['schemas']['Project'][];
13930
14073
  total: number;
@@ -14077,18 +14220,32 @@ interface components {
14077
14220
  /** @enum {string} */
14078
14221
  createdBy: 'user' | 'auto_save' | 'restore' | 'deploy' | 'preview';
14079
14222
  };
14080
- ListApiTokensResponse: {
14081
- tokens: components['schemas']['ApiTokenSummary'][];
14223
+ ListAutomationTokensResponse: {
14224
+ tokens: components['schemas']['AutomationTokenSummary'][];
14082
14225
  };
14083
- CreateApiTokenResponse: {
14226
+ CreateAutomationTokenResponse: {
14084
14227
  /** @example tok_a1b2c3d4 */
14085
14228
  id: string;
14086
14229
  /** @example CI Pipeline */
14087
14230
  name: string;
14088
- /** @example sk-walkeros-abcd1234... */
14231
+ /** @example wos_pat_a1b2c3d4... */
14089
14232
  token: string;
14090
- /** @example sk-walkeros-abcd */
14091
- prefix: string;
14233
+ /** @example wos_pat_a1b2 */
14234
+ tokenPrefix: string;
14235
+ /**
14236
+ * @example [
14237
+ * "read",
14238
+ * "write"
14239
+ * ]
14240
+ */
14241
+ scope: string[];
14242
+ /**
14243
+ * @example [
14244
+ * "api",
14245
+ * "mcp"
14246
+ * ]
14247
+ */
14248
+ audience: string[];
14092
14249
  /**
14093
14250
  * Format: date-time
14094
14251
  * @example 2026-01-26T14:30:00.000Z
@@ -14098,15 +14255,18 @@ interface components {
14098
14255
  * Format: date-time
14099
14256
  * @example 2026-01-26T14:30:00.000Z
14100
14257
  */
14101
- expiresAt: string | null;
14102
- /** @example null */
14103
- projectId: string | null;
14258
+ expiresAt: string;
14104
14259
  };
14105
- CreateApiTokenRequest: {
14260
+ CreateAutomationTokenRequest: {
14106
14261
  /** @example CI Pipeline */
14107
14262
  name: string;
14263
+ /**
14264
+ * @example read write
14265
+ * @enum {string}
14266
+ */
14267
+ scope: 'read' | 'read write';
14108
14268
  /** @example 90 */
14109
- expiresInDays?: number | null;
14269
+ expiresInDays: 30 | 90 | 180 | 365;
14110
14270
  };
14111
14271
  BundleResponse: {
14112
14272
  bundleId: string;
@@ -15006,8 +15166,16 @@ interface HealthResult {
15006
15166
  * rejects without a credential) and defensively parses the JSON body. Resolves `{ reachable: false }`
15007
15167
  * only on a real network/timeout failure; a non-2xx status still counts as
15008
15168
  * reachable.
15169
+ *
15170
+ * `baseUrl` names the app to probe, without a trailing slash. Omitted, it
15171
+ * falls back to `resolveAppUrl()`, the local machine's chain
15172
+ * (`WALKEROS_APP_URL`, then the CLI config file, then the built-in default),
15173
+ * which is what every `walkeros` binary invocation wants. A caller that is
15174
+ * NOT the local CLI has to pass its own: an in-process host has no CLI config
15175
+ * to read, so the fallback would silently probe a different backend than the
15176
+ * one that caller talks to.
15009
15177
  */
15010
- declare function fetchHealth(): Promise<HealthResult>;
15178
+ declare function fetchHealth(baseUrl?: string): Promise<HealthResult>;
15011
15179
  type ContractVerdict = 'in-sync' | 'client-older' | 'client-newer' | 'unknown';
15012
15180
  interface ContractComparison {
15013
15181
  verdict: ContractVerdict;
@@ -15018,9 +15186,15 @@ interface ContractComparison {
15018
15186
  interface CompareContractInput {
15019
15187
  bakedVersion?: string;
15020
15188
  bakedHash?: string;
15189
+ /**
15190
+ * The app to probe, without a trailing slash. Omitted, the probe resolves
15191
+ * the local machine's app URL; see {@link fetchHealth}.
15192
+ */
15193
+ baseUrl?: string;
15021
15194
  }
15022
15195
  /**
15023
15196
  * Compare the client's baked contract against the live app's `/api/health`.
15197
+ * The app is `input.baseUrl` when given, otherwise the locally resolved one.
15024
15198
  *
15025
15199
  * - unreachable / missing `contractVersion`+`contractHash` → `unknown`
15026
15200
  * - baked hash == live hash → `in-sync`
@@ -15260,7 +15434,13 @@ interface SetReleaseRationaleOptions {
15260
15434
  projectId?: string;
15261
15435
  flowId: string;
15262
15436
  versionId: string;
15263
- text: string;
15437
+ /**
15438
+ * The rationale to store. `null` CLEARS the one already there: `humanText`
15439
+ * is the only field a client may write, and null is how the route says
15440
+ * "remove it". Without it there would be no way back from a rationale
15441
+ * written by mistake.
15442
+ */
15443
+ text: string | null;
15264
15444
  }
15265
15445
  declare function setReleaseRationale(options: SetReleaseRationaleOptions): Promise<VersionAnnotation>;
15266
15446
  type ThreadAnchorType = 'step' | 'entity_action' | 'release' | 'contract' | 'tag';
@@ -15353,7 +15533,7 @@ interface WalkerOSConfig {
15353
15533
  /**
15354
15534
  * Static bearer written by the pre-OAuth CLI. Honored until it expires, and
15355
15535
  * the first use in a process prints a one-line notice naming
15356
- * `walkeros login`, which replaces it with a refreshable session.
15536
+ * `walkeros auth login`, which replaces it with a refreshable session.
15357
15537
  */
15358
15538
  token?: string;
15359
15539
  /** Short-lived bearer from the device authorization grant. */
@@ -15399,7 +15579,7 @@ declare function writeConfig(config: WalkerOSConfig): void;
15399
15579
  * Remove every credential field, keeping the rest of the config.
15400
15580
  *
15401
15581
  * Used when the stored session is known to be dead, so the next command can
15402
- * say "run `walkeros login`" instead of failing against the API.
15582
+ * say "run `walkeros auth login`" instead of failing against the API.
15403
15583
  */
15404
15584
  declare function clearAuthFields(): void;
15405
15585
  /**