@walkeros/cli 4.5.0 → 4.5.1-next-1788726985928

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
@@ -3693,7 +3693,7 @@ interface paths {
3693
3693
  put?: never;
3694
3694
  /**
3695
3695
  * Deploy settings
3696
- * @description Start a deployment for a specific settings entry. Detects platform from the settings.
3696
+ * @description Start a deployment for a specific settings entry. Detects platform from the settings. The body is optional and carries only `humanText`, the reason for the change, which becomes the description of the release this deploy produces; it is ignored when the release already has one.
3697
3697
  */
3698
3698
  post: {
3699
3699
  parameters: {
@@ -3706,7 +3706,11 @@ interface paths {
3706
3706
  };
3707
3707
  cookie?: never;
3708
3708
  };
3709
- requestBody?: never;
3709
+ requestBody?: {
3710
+ content: {
3711
+ 'application/json': components['schemas']['DeploySettingsRequest'];
3712
+ };
3713
+ };
3710
3714
  responses: {
3711
3715
  /** @description Deployment started */
3712
3716
  201: {
@@ -7506,6 +7510,95 @@ interface paths {
7506
7510
  patch?: never;
7507
7511
  trace?: never;
7508
7512
  };
7513
+ '/api/projects/{projectId}/flows/{flowId}/releases/{versionId}/content': {
7514
+ parameters: {
7515
+ query?: never;
7516
+ header?: never;
7517
+ path?: never;
7518
+ cookie?: never;
7519
+ };
7520
+ /**
7521
+ * Read a release snapshot
7522
+ * @description The flow config one release of this flow froze, addressed by its spine version id. This is the only route that serves a release snapshot: the positional `/versions/{versionNumber}` route numbers the autosave revisions, a disjoint set of rows, so a release number handed to it addresses an unrelated revision or nothing. Inline secret literals are masked. An unknown id, a sibling flow's version, and an autosave revision all answer 404 alike. Requires member role and the `hub` feature.
7523
+ */
7524
+ get: {
7525
+ parameters: {
7526
+ query?: never;
7527
+ header?: never;
7528
+ path: {
7529
+ projectId: string;
7530
+ flowId: string;
7531
+ /** @description Spine version ID of the release (ver_...) */
7532
+ versionId: string;
7533
+ };
7534
+ cookie?: never;
7535
+ };
7536
+ requestBody?: never;
7537
+ responses: {
7538
+ /** @description The release snapshot */
7539
+ 200: {
7540
+ headers: {
7541
+ [name: string]: unknown;
7542
+ };
7543
+ content: {
7544
+ 'application/json': components['schemas']['ReleaseContentResponse'];
7545
+ };
7546
+ };
7547
+ /** @description Invalid version id */
7548
+ 400: {
7549
+ headers: {
7550
+ [name: string]: unknown;
7551
+ };
7552
+ content: {
7553
+ 'application/json': components['schemas']['ErrorResponse'];
7554
+ };
7555
+ };
7556
+ /** @description Unauthorized */
7557
+ 401: {
7558
+ headers: {
7559
+ [name: string]: unknown;
7560
+ };
7561
+ content: {
7562
+ 'application/json': components['schemas']['ErrorResponse'];
7563
+ };
7564
+ };
7565
+ /** @description Forbidden */
7566
+ 403: {
7567
+ headers: {
7568
+ [name: string]: unknown;
7569
+ };
7570
+ content: {
7571
+ 'application/json': components['schemas']['ErrorResponse'];
7572
+ };
7573
+ };
7574
+ /** @description Not found */
7575
+ 404: {
7576
+ headers: {
7577
+ [name: string]: unknown;
7578
+ };
7579
+ content: {
7580
+ 'application/json': components['schemas']['ErrorResponse'];
7581
+ };
7582
+ };
7583
+ /** @description Rate limited */
7584
+ 429: {
7585
+ headers: {
7586
+ [name: string]: unknown;
7587
+ };
7588
+ content: {
7589
+ 'application/json': components['schemas']['ErrorResponse'];
7590
+ };
7591
+ };
7592
+ };
7593
+ };
7594
+ put?: never;
7595
+ post?: never;
7596
+ delete?: never;
7597
+ options?: never;
7598
+ head?: never;
7599
+ patch?: never;
7600
+ trace?: never;
7601
+ };
7509
7602
  '/api/projects/{projectId}/flows/{flowId}/releases/annotations': {
7510
7603
  parameters: {
7511
7604
  query?: never;
@@ -8057,7 +8150,7 @@ interface paths {
8057
8150
  };
8058
8151
  trace?: never;
8059
8152
  };
8060
- '/api/projects/{projectId}/flows/{flowId}/releases/step-history': {
8153
+ '/api/projects/{projectId}/knowledge': {
8061
8154
  parameters: {
8062
8155
  query?: never;
8063
8156
  header?: never;
@@ -8065,35 +8158,36 @@ interface paths {
8065
8158
  cookie?: never;
8066
8159
  };
8067
8160
  /**
8068
- * List the releases that touched one step
8069
- * @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.
8161
+ * List knowledge captured in this project
8162
+ * @description What people wrote on the frames of a page, most recently active first. Two kinds come back together and `kind` separates them: a `thread` carries its text in messages, a `description` carries one body and cannot be replied to. `pageKey` narrows to a whole page, resolved server-side to every frame that page holds at any depth; `frameId` narrows to one frame; `markId` narrows to one mark within it and is refused without `frameId`, since a mark id alone addresses nothing. `includeMessages=true` attaches message bodies and holds the page to a much smaller ceiling, so `hasMoreEntries` is what separates a complete answer from a truncated one. `validity` says when an entry was true and `freshness` compares that against the flow’s newest release; neither is a verdict. Requires member role.
8070
8163
  */
8071
8164
  get: {
8072
8165
  parameters: {
8073
- query: {
8074
- step: string;
8075
- flow?: string;
8076
- limit?: number | null;
8166
+ query?: {
8167
+ pageKey?: string;
8168
+ frameId?: string;
8169
+ markId?: string;
8170
+ includeMessages?: 'true' | 'false';
8171
+ limit?: number;
8077
8172
  };
8078
8173
  header?: never;
8079
8174
  path: {
8080
8175
  projectId: string;
8081
- flowId: string;
8082
8176
  };
8083
8177
  cookie?: never;
8084
8178
  };
8085
8179
  requestBody?: never;
8086
8180
  responses: {
8087
- /** @description The releases that touched the step */
8181
+ /** @description Knowledge in this project */
8088
8182
  200: {
8089
8183
  headers: {
8090
8184
  [name: string]: unknown;
8091
8185
  };
8092
8186
  content: {
8093
- 'application/json': components['schemas']['StepHistoryResponse'];
8187
+ 'application/json': components['schemas']['ListKnowledgeResponse'];
8094
8188
  };
8095
8189
  };
8096
- /** @description Invalid step key or query */
8190
+ /** @description Invalid query, or a mark filter with no frame */
8097
8191
  400: {
8098
8192
  headers: {
8099
8193
  [name: string]: unknown;
@@ -8141,25 +8235,9 @@ interface paths {
8141
8235
  };
8142
8236
  };
8143
8237
  put?: never;
8144
- post?: never;
8145
- delete?: never;
8146
- options?: never;
8147
- head?: never;
8148
- patch?: never;
8149
- trace?: never;
8150
- };
8151
- '/api/projects/{projectId}/flows/{flowId}/releases/summarize': {
8152
- parameters: {
8153
- query?: never;
8154
- header?: never;
8155
- path?: never;
8156
- cookie?: never;
8157
- };
8158
- get?: never;
8159
- put?: never;
8160
8238
  /**
8161
- * Summarize or check a release
8162
- * @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.
8239
+ * Open a thread on a mark or a frame
8240
+ * @description Open a thread on one mark of one frame, or on the frame itself with `anchorType` `page` and no `markId`, with its first message. A thread never exists empty, so `text` is required and may not be blank. `clientThreadId` and `clientMessageId` are minted by the client at compose time and are what make a replay idempotent: repeating a known `clientThreadId` hands back the existing thread and writes nothing, so an offline queue can drain repeatedly without duplicating what a person wrote once. `flowId` binds the capture to a flow or is explicitly null; a flow this project cannot see answers 404, never 403. A frame this project does not hold answers 404 with `FRAME_NOT_FOUND`, which a draining client waits on and retries, because the frame’s own write may not have landed yet. The server decides the composed anchor key, the born release, the author and the source: a client cannot assert any of them. Requires member role.
8163
8241
  */
8164
8242
  post: {
8165
8243
  parameters: {
@@ -8167,34 +8245,43 @@ interface paths {
8167
8245
  header?: never;
8168
8246
  path: {
8169
8247
  projectId: string;
8170
- flowId: string;
8171
8248
  };
8172
8249
  cookie?: never;
8173
8250
  };
8174
8251
  requestBody?: {
8175
8252
  content: {
8176
8253
  'application/json': {
8177
- /** @example ver_a1b2c3d4 */
8178
- versionId: string;
8179
- /** @example ver_a1b2c3d4 */
8180
- prevVersionId: string;
8181
- /** @enum {string} */
8182
- mode: 'draft' | 'check';
8183
- currentText?: string;
8254
+ /**
8255
+ * @example tag
8256
+ * @enum {string}
8257
+ */
8258
+ anchorType: 'tag' | 'page';
8259
+ /** @example frm_V1StGXR8Z5jdHi6BmyT7K */
8260
+ frameId: string;
8261
+ markId?: string;
8262
+ anchorLabel?: string;
8263
+ flowId: string | null;
8264
+ subjectKey?: string;
8265
+ spatial?: components['schemas']['KnowledgeSpatial'];
8266
+ /** @example ct_7f3a91 */
8267
+ clientThreadId: string;
8268
+ text: string;
8269
+ /** @example ct_7f3a91 */
8270
+ clientMessageId: string;
8184
8271
  };
8185
8272
  };
8186
8273
  };
8187
8274
  responses: {
8188
- /** @description The generated summary or the check verdict */
8189
- 200: {
8275
+ /** @description The thread, with its first message */
8276
+ 201: {
8190
8277
  headers: {
8191
8278
  [name: string]: unknown;
8192
8279
  };
8193
8280
  content: {
8194
- 'application/json': components['schemas']['SummarizeReleaseResponse'];
8281
+ 'application/json': components['schemas']['KnowledgeThreadResponse'];
8195
8282
  };
8196
8283
  };
8197
- /** @description Invalid body, a target is not a release, the pair is out of order, or no LLM provider is configured */
8284
+ /** @description Invalid body */
8198
8285
  400: {
8199
8286
  headers: {
8200
8287
  [name: string]: unknown;
@@ -8221,7 +8308,7 @@ interface paths {
8221
8308
  'application/json': components['schemas']['ErrorResponse'];
8222
8309
  };
8223
8310
  };
8224
- /** @description Not found */
8311
+ /** @description The named flow or frame is not in this project */
8225
8312
  404: {
8226
8313
  headers: {
8227
8314
  [name: string]: unknown;
@@ -8239,15 +8326,6 @@ interface paths {
8239
8326
  'application/json': components['schemas']['ErrorResponse'];
8240
8327
  };
8241
8328
  };
8242
- /** @description The model call failed or returned no usable text */
8243
- 502: {
8244
- headers: {
8245
- [name: string]: unknown;
8246
- };
8247
- content: {
8248
- 'application/json': components['schemas']['ErrorResponse'];
8249
- };
8250
- };
8251
8329
  };
8252
8330
  };
8253
8331
  delete?: never;
@@ -8256,36 +8334,56 @@ interface paths {
8256
8334
  patch?: never;
8257
8335
  trace?: never;
8258
8336
  };
8259
- '/api/projects/{projectId}/deployments/{deploymentId}/versions/current/content': {
8337
+ '/api/projects/{projectId}/knowledge/{threadId}/messages': {
8260
8338
  parameters: {
8261
8339
  query?: never;
8262
8340
  header?: never;
8263
8341
  path?: never;
8264
8342
  cookie?: never;
8265
8343
  };
8344
+ get?: never;
8345
+ put?: never;
8266
8346
  /**
8267
- * Get current deployed content
8268
- * @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.
8347
+ * Reply to a knowledge thread
8348
+ * @description Append a message to a thread and get the whole thread back, so a surface renders the new exchange without a second read. `text` may not be blank: a message cannot be cleared, so empty is invalid rather than a way to erase one. Repeating a `clientMessageId` already on the thread appends nothing and leaves `updatedAt` alone, so a retrying drain never keeps bumping a thread to the top of every list. A description has no conversation and cannot be replied to; addressing one answers 404. Requires member role.
8269
8349
  */
8270
- get: {
8350
+ post: {
8271
8351
  parameters: {
8272
8352
  query?: never;
8273
8353
  header?: never;
8274
8354
  path: {
8275
8355
  projectId: string;
8276
- deploymentId: string;
8356
+ /** @description Thread ID (thr_...) */
8357
+ threadId: string;
8277
8358
  };
8278
8359
  cookie?: never;
8279
8360
  };
8280
- requestBody?: never;
8361
+ requestBody?: {
8362
+ content: {
8363
+ 'application/json': {
8364
+ text: string;
8365
+ /** @example ct_7f3a91 */
8366
+ clientMessageId: string;
8367
+ };
8368
+ };
8369
+ };
8281
8370
  responses: {
8282
- /** @description Deployed content (or a null baseline) */
8283
- 200: {
8371
+ /** @description The thread, with the new message */
8372
+ 201: {
8284
8373
  headers: {
8285
8374
  [name: string]: unknown;
8286
8375
  };
8287
8376
  content: {
8288
- 'application/json': components['schemas']['DeployedContentResponse'];
8377
+ 'application/json': components['schemas']['KnowledgeThreadResponse'];
8378
+ };
8379
+ };
8380
+ /** @description Invalid body */
8381
+ 400: {
8382
+ headers: {
8383
+ [name: string]: unknown;
8384
+ };
8385
+ content: {
8386
+ 'application/json': components['schemas']['ErrorResponse'];
8289
8387
  };
8290
8388
  };
8291
8389
  /** @description Unauthorized */
@@ -8326,51 +8424,69 @@ interface paths {
8326
8424
  };
8327
8425
  };
8328
8426
  };
8329
- put?: never;
8330
- post?: never;
8331
8427
  delete?: never;
8332
8428
  options?: never;
8333
8429
  head?: never;
8334
8430
  patch?: never;
8335
8431
  trace?: never;
8336
8432
  };
8337
- '/api/projects/{projectId}/deployments/{deploymentId}/heartbeats': {
8433
+ '/api/projects/{projectId}/knowledge/description': {
8338
8434
  parameters: {
8339
8435
  query?: never;
8340
8436
  header?: never;
8341
8437
  path?: never;
8342
8438
  cookie?: never;
8343
8439
  };
8440
+ get?: never;
8344
8441
  /**
8345
- * List deployment heartbeats
8346
- * @description List heartbeat records for a deployment with optional from/to time-range filtering and pagination. Requires member role.
8442
+ * Write the description of a mark or a frame
8443
+ * @description Write the one description of one anchor, a mark or the frame itself, replacing whatever it said before. There is no id to mint: the anchor is the key, so a replayed write lands on the same row by construction, which is why this is a PUT. An empty `body` is refused rather than stored, so a drain that arrives with nothing to say can never erase what a person wrote. The response is 200 whether the description was opened or replaced. Requires member role.
8347
8444
  */
8348
- get: {
8445
+ put: {
8349
8446
  parameters: {
8350
- query?: {
8351
- /** @description ISO start of the time range. */
8352
- from?: string;
8353
- /** @description ISO end of the time range. */
8354
- to?: string;
8355
- limit?: number;
8356
- offset?: number | null;
8357
- };
8447
+ query?: never;
8358
8448
  header?: never;
8359
8449
  path: {
8360
8450
  projectId: string;
8361
- deploymentId: string;
8362
8451
  };
8363
8452
  cookie?: never;
8364
8453
  };
8365
- requestBody?: never;
8454
+ requestBody?: {
8455
+ content: {
8456
+ 'application/json': {
8457
+ /**
8458
+ * @example tag
8459
+ * @enum {string}
8460
+ */
8461
+ anchorType: 'tag' | 'page';
8462
+ /** @example frm_V1StGXR8Z5jdHi6BmyT7K */
8463
+ frameId: string;
8464
+ markId?: string;
8465
+ anchorLabel?: string;
8466
+ flowId: string | null;
8467
+ subjectKey?: string;
8468
+ spatial?: components['schemas']['KnowledgeSpatial'];
8469
+ body: string;
8470
+ };
8471
+ };
8472
+ };
8366
8473
  responses: {
8367
- /** @description Heartbeat history */
8474
+ /** @description The stored description */
8368
8475
  200: {
8369
8476
  headers: {
8370
8477
  [name: string]: unknown;
8371
8478
  };
8372
8479
  content: {
8373
- 'application/json': components['schemas']['ListHeartbeatsResponse'];
8480
+ 'application/json': components['schemas']['KnowledgeDescriptionResponse'];
8481
+ };
8482
+ };
8483
+ /** @description Invalid body */
8484
+ 400: {
8485
+ headers: {
8486
+ [name: string]: unknown;
8487
+ };
8488
+ content: {
8489
+ 'application/json': components['schemas']['ErrorResponse'];
8374
8490
  };
8375
8491
  };
8376
8492
  /** @description Unauthorized */
@@ -8391,7 +8507,7 @@ interface paths {
8391
8507
  'application/json': components['schemas']['ErrorResponse'];
8392
8508
  };
8393
8509
  };
8394
- /** @description Not found */
8510
+ /** @description The named flow or frame is not in this project */
8395
8511
  404: {
8396
8512
  headers: {
8397
8513
  [name: string]: unknown;
@@ -8400,9 +8516,17 @@ interface paths {
8400
8516
  'application/json': components['schemas']['ErrorResponse'];
8401
8517
  };
8402
8518
  };
8519
+ /** @description Rate limited */
8520
+ 429: {
8521
+ headers: {
8522
+ [name: string]: unknown;
8523
+ };
8524
+ content: {
8525
+ 'application/json': components['schemas']['ErrorResponse'];
8526
+ };
8527
+ };
8403
8528
  };
8404
8529
  };
8405
- put?: never;
8406
8530
  post?: never;
8407
8531
  delete?: never;
8408
8532
  options?: never;
@@ -8410,38 +8534,48 @@ interface paths {
8410
8534
  patch?: never;
8411
8535
  trace?: never;
8412
8536
  };
8413
- '/api/projects/{projectId}/deployments/{deploymentId}/rotate-ingest-token': {
8537
+ '/api/projects/{projectId}/frames': {
8414
8538
  parameters: {
8415
8539
  query?: never;
8416
8540
  header?: never;
8417
8541
  path?: never;
8418
8542
  cookie?: never;
8419
8543
  };
8420
- get?: never;
8421
- put?: never;
8422
8544
  /**
8423
- * Rotate ingest token
8424
- * @description Rotate the ingest token for a deployment. Owner-only. No grace window: the previous token is immediately invalidated and the new token is returned once.
8545
+ * List the frames of a page, or of the whole project
8546
+ * @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.
8425
8547
  */
8426
- post: {
8548
+ get: {
8427
8549
  parameters: {
8428
- query?: never;
8550
+ query?: {
8551
+ pageKey?: string;
8552
+ };
8429
8553
  header?: never;
8430
8554
  path: {
8431
8555
  projectId: string;
8432
- deploymentId: string;
8433
8556
  };
8434
8557
  cookie?: never;
8435
8558
  };
8436
8559
  requestBody?: never;
8437
8560
  responses: {
8438
- /** @description New ingest token */
8561
+ /** @description The page’s frames with their marks, or the project’s frames without them */
8439
8562
  200: {
8440
8563
  headers: {
8441
8564
  [name: string]: unknown;
8442
8565
  };
8443
8566
  content: {
8444
- 'application/json': components['schemas']['RotateIngestTokenResponse'];
8567
+ 'application/json':
8568
+ | components['schemas']['FrameListResponse']
8569
+ | components['schemas']['FrameLeanListResponse'];
8570
+ };
8571
+ };
8572
+ /** @description Validation error */
8573
+ 400: {
8574
+ headers: {
8575
+ [name: string]: unknown;
8576
+ };
8577
+ content: {
8578
+ 'application/json': components['schemas']['ErrorResponse'];
8445
8579
  };
8446
8580
  };
8447
8581
  /** @description Unauthorized */
@@ -8471,9 +8605,892 @@ interface paths {
8471
8605
  'application/json': components['schemas']['ErrorResponse'];
8472
8606
  };
8473
8607
  };
8474
- };
8475
- };
8476
- delete?: never;
8608
+ /** @description Rate limited */
8609
+ 429: {
8610
+ headers: {
8611
+ [name: string]: unknown;
8612
+ };
8613
+ content: {
8614
+ 'application/json': components['schemas']['ErrorResponse'];
8615
+ };
8616
+ };
8617
+ };
8618
+ };
8619
+ put?: never;
8620
+ post?: never;
8621
+ delete?: never;
8622
+ options?: never;
8623
+ head?: never;
8624
+ patch?: never;
8625
+ trace?: never;
8626
+ };
8627
+ '/api/projects/{projectId}/frames/{frameId}': {
8628
+ parameters: {
8629
+ query?: never;
8630
+ header?: never;
8631
+ path?: never;
8632
+ cookie?: never;
8633
+ };
8634
+ /**
8635
+ * Read one frame
8636
+ * @description One frame with its marks. A frame 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 frame is gone to every read. Requires member role.
8637
+ */
8638
+ get: {
8639
+ parameters: {
8640
+ query?: never;
8641
+ header?: never;
8642
+ path: {
8643
+ projectId: string;
8644
+ /** @description Frame ID (frm_...) */
8645
+ frameId: string;
8646
+ };
8647
+ cookie?: never;
8648
+ };
8649
+ requestBody?: never;
8650
+ responses: {
8651
+ /** @description The frame */
8652
+ 200: {
8653
+ headers: {
8654
+ [name: string]: unknown;
8655
+ };
8656
+ content: {
8657
+ 'application/json': components['schemas']['Frame'];
8658
+ };
8659
+ };
8660
+ /** @description The path segment does not address a frame */
8661
+ 400: {
8662
+ headers: {
8663
+ [name: string]: unknown;
8664
+ };
8665
+ content: {
8666
+ 'application/json': components['schemas']['ErrorResponse'];
8667
+ };
8668
+ };
8669
+ /** @description Unauthorized */
8670
+ 401: {
8671
+ headers: {
8672
+ [name: string]: unknown;
8673
+ };
8674
+ content: {
8675
+ 'application/json': components['schemas']['ErrorResponse'];
8676
+ };
8677
+ };
8678
+ /** @description Forbidden */
8679
+ 403: {
8680
+ headers: {
8681
+ [name: string]: unknown;
8682
+ };
8683
+ content: {
8684
+ 'application/json': components['schemas']['ErrorResponse'];
8685
+ };
8686
+ };
8687
+ /** @description Not found */
8688
+ 404: {
8689
+ headers: {
8690
+ [name: string]: unknown;
8691
+ };
8692
+ content: {
8693
+ 'application/json': components['schemas']['ErrorResponse'];
8694
+ };
8695
+ };
8696
+ /** @description Rate limited */
8697
+ 429: {
8698
+ headers: {
8699
+ [name: string]: unknown;
8700
+ };
8701
+ content: {
8702
+ 'application/json': components['schemas']['ErrorResponse'];
8703
+ };
8704
+ };
8705
+ };
8706
+ };
8707
+ /**
8708
+ * Create or replace one frame
8709
+ * @description The path is the identity, so the body carries no id: a create is a write to an absent row at `baseVersion` 0 and everything else is a replace. `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 `FRAME_VERSION_CONFLICT` carrying the head, which is what lets a client raise keep-mine against load-theirs on the one frame that conflicted instead of dropping what a person drew. A name another live frame already holds is a distinct 409 `FRAME_NAME_EXISTS`. A relation naming a frame this project does not hold, or one that would place a frame inside itself, is 400 `INVALID_FRAME`. The screenshot is never touched here: a frame write carries no capture. Requires member role.
8710
+ */
8711
+ put: {
8712
+ parameters: {
8713
+ query?: never;
8714
+ header?: never;
8715
+ path: {
8716
+ projectId: string;
8717
+ /** @description Frame ID (frm_...) */
8718
+ frameId: string;
8719
+ };
8720
+ cookie?: never;
8721
+ };
8722
+ requestBody?: {
8723
+ content: {
8724
+ 'application/json': {
8725
+ frame: components['schemas']['FrameInput'];
8726
+ baseVersion: number;
8727
+ clientWriteId: string;
8728
+ };
8729
+ };
8730
+ };
8731
+ responses: {
8732
+ /** @description The stored version */
8733
+ 200: {
8734
+ headers: {
8735
+ [name: string]: unknown;
8736
+ };
8737
+ content: {
8738
+ 'application/json': components['schemas']['PutFrameResponse'];
8739
+ };
8740
+ };
8741
+ /** @description Invalid body, a bad relation, or a path segment that addresses no frame */
8742
+ 400: {
8743
+ headers: {
8744
+ [name: string]: unknown;
8745
+ };
8746
+ content: {
8747
+ 'application/json': components['schemas']['ErrorResponse'];
8748
+ };
8749
+ };
8750
+ /** @description Unauthorized */
8751
+ 401: {
8752
+ headers: {
8753
+ [name: string]: unknown;
8754
+ };
8755
+ content: {
8756
+ 'application/json': components['schemas']['ErrorResponse'];
8757
+ };
8758
+ };
8759
+ /** @description Forbidden */
8760
+ 403: {
8761
+ headers: {
8762
+ [name: string]: unknown;
8763
+ };
8764
+ content: {
8765
+ 'application/json': components['schemas']['ErrorResponse'];
8766
+ };
8767
+ };
8768
+ /** @description Not found */
8769
+ 404: {
8770
+ headers: {
8771
+ [name: string]: unknown;
8772
+ };
8773
+ content: {
8774
+ 'application/json': components['schemas']['ErrorResponse'];
8775
+ };
8776
+ };
8777
+ /** @description A stale base version, carrying the head, or a name another live frame already holds. Only the version conflict carries `head`: a name clash needs no frame to resolve, since the client already knows the name it sent. */
8778
+ 409: {
8779
+ headers: {
8780
+ [name: string]: unknown;
8781
+ };
8782
+ content: {
8783
+ 'application/json':
8784
+ | components['schemas']['FrameConflictResponse']
8785
+ | components['schemas']['ErrorResponse'];
8786
+ };
8787
+ };
8788
+ /** @description Rate limited */
8789
+ 429: {
8790
+ headers: {
8791
+ [name: string]: unknown;
8792
+ };
8793
+ content: {
8794
+ 'application/json': components['schemas']['ErrorResponse'];
8795
+ };
8796
+ };
8797
+ };
8798
+ };
8799
+ post?: never;
8800
+ /**
8801
+ * Delete one frame
8802
+ * @description Soft-delete the frame and, transitively, every variation of what this delete removes. Children are not variations and survive: each live frame under a removed one is re-parented to its nearest live ancestor in the same transaction, and one left with no live ancestor becomes top-level and inherits the page it hung under, so nothing is left unreachable. Those re-parents are server writes that bump their own versions, so a client still holding a pre-delete version meets a conflict carrying the new parent. A frame this project does not hold answers 404: a delete that removed nothing is not a delete that succeeded. Requires member role.
8803
+ */
8804
+ delete: {
8805
+ parameters: {
8806
+ query?: never;
8807
+ header?: never;
8808
+ path: {
8809
+ projectId: string;
8810
+ /** @description Frame ID (frm_...) */
8811
+ frameId: string;
8812
+ };
8813
+ cookie?: never;
8814
+ };
8815
+ requestBody?: never;
8816
+ responses: {
8817
+ /** @description The frame is deleted */
8818
+ 204: {
8819
+ headers: {
8820
+ [name: string]: unknown;
8821
+ };
8822
+ content?: never;
8823
+ };
8824
+ /** @description The path segment does not address a frame */
8825
+ 400: {
8826
+ headers: {
8827
+ [name: string]: unknown;
8828
+ };
8829
+ content: {
8830
+ 'application/json': components['schemas']['ErrorResponse'];
8831
+ };
8832
+ };
8833
+ /** @description Unauthorized */
8834
+ 401: {
8835
+ headers: {
8836
+ [name: string]: unknown;
8837
+ };
8838
+ content: {
8839
+ 'application/json': components['schemas']['ErrorResponse'];
8840
+ };
8841
+ };
8842
+ /** @description Forbidden */
8843
+ 403: {
8844
+ headers: {
8845
+ [name: string]: unknown;
8846
+ };
8847
+ content: {
8848
+ 'application/json': components['schemas']['ErrorResponse'];
8849
+ };
8850
+ };
8851
+ /** @description Not found */
8852
+ 404: {
8853
+ headers: {
8854
+ [name: string]: unknown;
8855
+ };
8856
+ content: {
8857
+ 'application/json': components['schemas']['ErrorResponse'];
8858
+ };
8859
+ };
8860
+ /** @description Rate limited */
8861
+ 429: {
8862
+ headers: {
8863
+ [name: string]: unknown;
8864
+ };
8865
+ content: {
8866
+ 'application/json': components['schemas']['ErrorResponse'];
8867
+ };
8868
+ };
8869
+ };
8870
+ };
8871
+ options?: never;
8872
+ head?: never;
8873
+ patch?: never;
8874
+ trace?: never;
8875
+ };
8876
+ '/api/projects/{projectId}/frames/{frameId}/screenshot': {
8877
+ parameters: {
8878
+ query?: never;
8879
+ header?: never;
8880
+ path?: never;
8881
+ cookie?: never;
8882
+ };
8883
+ get?: never;
8884
+ put?: never;
8885
+ /**
8886
+ * Store the capture of one frame
8887
+ * @description Store one screenshot and set it on its frame. The image arrives as base64 rather than multipart, because the extension relay carries string bodies only. The server decides everything about the bytes: it decodes them, counts the DECODED length against a 4 MB cap, reads the type from the file’s own magic bytes, and hashes them, so nothing the client claims about size or type is consulted. Captures are deduplicated by content within a project: identical pixels resolve to one asset and one upload, and `reused` says whether that happened, which is the common answer rather than the rare one because re-capturing an unchanged frame produces identical bytes. A body past the cap is 413 `PAYLOAD_TOO_LARGE` and one that is not a PNG is 415 `UNSUPPORTED_MEDIA_TYPE`. The capture bumps no frame version: it is not an edit, so an upload never conflicts with the frame write the client queued beside it. Requires member role.
8888
+ */
8889
+ post: {
8890
+ parameters: {
8891
+ query?: never;
8892
+ header?: never;
8893
+ path: {
8894
+ projectId: string;
8895
+ /** @description Frame ID (frm_...) */
8896
+ frameId: string;
8897
+ };
8898
+ cookie?: never;
8899
+ };
8900
+ requestBody?: {
8901
+ content: {
8902
+ 'application/json': {
8903
+ imageBase64: string;
8904
+ meta: components['schemas']['FrameScreenshotMeta'];
8905
+ };
8906
+ };
8907
+ };
8908
+ responses: {
8909
+ /** @description The asset the bytes resolved to, and whether it already existed */
8910
+ 200: {
8911
+ headers: {
8912
+ [name: string]: unknown;
8913
+ };
8914
+ content: {
8915
+ 'application/json': components['schemas']['ScreenshotUploadResponse'];
8916
+ };
8917
+ };
8918
+ /** @description Invalid body, or a path segment that addresses no frame */
8919
+ 400: {
8920
+ headers: {
8921
+ [name: string]: unknown;
8922
+ };
8923
+ content: {
8924
+ 'application/json': components['schemas']['ErrorResponse'];
8925
+ };
8926
+ };
8927
+ /** @description Unauthorized */
8928
+ 401: {
8929
+ headers: {
8930
+ [name: string]: unknown;
8931
+ };
8932
+ content: {
8933
+ 'application/json': components['schemas']['ErrorResponse'];
8934
+ };
8935
+ };
8936
+ /** @description Forbidden */
8937
+ 403: {
8938
+ headers: {
8939
+ [name: string]: unknown;
8940
+ };
8941
+ content: {
8942
+ 'application/json': components['schemas']['ErrorResponse'];
8943
+ };
8944
+ };
8945
+ /** @description This project does not hold the named frame */
8946
+ 404: {
8947
+ headers: {
8948
+ [name: string]: unknown;
8949
+ };
8950
+ content: {
8951
+ 'application/json': components['schemas']['ErrorResponse'];
8952
+ };
8953
+ };
8954
+ /** @description The decoded image is past the 4 MB cap */
8955
+ 413: {
8956
+ headers: {
8957
+ [name: string]: unknown;
8958
+ };
8959
+ content: {
8960
+ 'application/json': components['schemas']['ErrorResponse'];
8961
+ };
8962
+ };
8963
+ /** @description The bytes are not a PNG */
8964
+ 415: {
8965
+ headers: {
8966
+ [name: string]: unknown;
8967
+ };
8968
+ content: {
8969
+ 'application/json': components['schemas']['ErrorResponse'];
8970
+ };
8971
+ };
8972
+ /** @description Rate limited */
8973
+ 429: {
8974
+ headers: {
8975
+ [name: string]: unknown;
8976
+ };
8977
+ content: {
8978
+ 'application/json': components['schemas']['ErrorResponse'];
8979
+ };
8980
+ };
8981
+ };
8982
+ };
8983
+ delete?: never;
8984
+ options?: never;
8985
+ head?: never;
8986
+ patch?: never;
8987
+ trace?: never;
8988
+ };
8989
+ '/api/projects/{projectId}/assets/{assetId}': {
8990
+ parameters: {
8991
+ query?: never;
8992
+ header?: never;
8993
+ path?: never;
8994
+ cookie?: never;
8995
+ };
8996
+ /**
8997
+ * Read one stored capture
8998
+ * @description The bytes of one frame screenshot, for the app canvas. The extension keeps its own capture locally and never reads assets back. Same-origin and session-authenticated: the response carries `Cross-Origin-Resource-Policy: same-origin`, so no other site can embed a tenant capture off the reader’s session. The bytes are immutable by construction, since the object key is their own content hash, which is why they are cacheable for a year, and `private` keeps a shared cache from serving one tenant’s capture to the next request for the same URL. An asset another project holds answers 404, never 403. Requires member role.
8999
+ */
9000
+ get: {
9001
+ parameters: {
9002
+ query?: never;
9003
+ header?: never;
9004
+ path: {
9005
+ projectId: string;
9006
+ /** @description Asset ID (fas_...) */
9007
+ assetId: string;
9008
+ };
9009
+ cookie?: never;
9010
+ };
9011
+ requestBody?: never;
9012
+ responses: {
9013
+ /** @description The image bytes */
9014
+ 200: {
9015
+ headers: {
9016
+ [name: string]: unknown;
9017
+ };
9018
+ content: {
9019
+ 'image/png': string;
9020
+ };
9021
+ };
9022
+ /** @description The path segment does not address an asset */
9023
+ 400: {
9024
+ headers: {
9025
+ [name: string]: unknown;
9026
+ };
9027
+ content: {
9028
+ 'application/json': components['schemas']['ErrorResponse'];
9029
+ };
9030
+ };
9031
+ /** @description Unauthorized */
9032
+ 401: {
9033
+ headers: {
9034
+ [name: string]: unknown;
9035
+ };
9036
+ content: {
9037
+ 'application/json': components['schemas']['ErrorResponse'];
9038
+ };
9039
+ };
9040
+ /** @description Forbidden */
9041
+ 403: {
9042
+ headers: {
9043
+ [name: string]: unknown;
9044
+ };
9045
+ content: {
9046
+ 'application/json': components['schemas']['ErrorResponse'];
9047
+ };
9048
+ };
9049
+ /** @description Not found */
9050
+ 404: {
9051
+ headers: {
9052
+ [name: string]: unknown;
9053
+ };
9054
+ content: {
9055
+ 'application/json': components['schemas']['ErrorResponse'];
9056
+ };
9057
+ };
9058
+ /** @description Rate limited */
9059
+ 429: {
9060
+ headers: {
9061
+ [name: string]: unknown;
9062
+ };
9063
+ content: {
9064
+ 'application/json': components['schemas']['ErrorResponse'];
9065
+ };
9066
+ };
9067
+ };
9068
+ };
9069
+ put?: never;
9070
+ post?: never;
9071
+ delete?: never;
9072
+ options?: never;
9073
+ head?: never;
9074
+ patch?: never;
9075
+ trace?: never;
9076
+ };
9077
+ '/api/projects/{projectId}/flows/{flowId}/releases/step-history': {
9078
+ parameters: {
9079
+ query?: never;
9080
+ header?: never;
9081
+ path?: never;
9082
+ cookie?: never;
9083
+ };
9084
+ /**
9085
+ * List the releases that touched one step
9086
+ * @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.
9087
+ */
9088
+ get: {
9089
+ parameters: {
9090
+ query: {
9091
+ step: string;
9092
+ flow?: string;
9093
+ limit?: number | null;
9094
+ };
9095
+ header?: never;
9096
+ path: {
9097
+ projectId: string;
9098
+ flowId: string;
9099
+ };
9100
+ cookie?: never;
9101
+ };
9102
+ requestBody?: never;
9103
+ responses: {
9104
+ /** @description The releases that touched the step */
9105
+ 200: {
9106
+ headers: {
9107
+ [name: string]: unknown;
9108
+ };
9109
+ content: {
9110
+ 'application/json': components['schemas']['StepHistoryResponse'];
9111
+ };
9112
+ };
9113
+ /** @description Invalid step key or query */
9114
+ 400: {
9115
+ headers: {
9116
+ [name: string]: unknown;
9117
+ };
9118
+ content: {
9119
+ 'application/json': components['schemas']['ErrorResponse'];
9120
+ };
9121
+ };
9122
+ /** @description Unauthorized */
9123
+ 401: {
9124
+ headers: {
9125
+ [name: string]: unknown;
9126
+ };
9127
+ content: {
9128
+ 'application/json': components['schemas']['ErrorResponse'];
9129
+ };
9130
+ };
9131
+ /** @description Forbidden */
9132
+ 403: {
9133
+ headers: {
9134
+ [name: string]: unknown;
9135
+ };
9136
+ content: {
9137
+ 'application/json': components['schemas']['ErrorResponse'];
9138
+ };
9139
+ };
9140
+ /** @description Not found */
9141
+ 404: {
9142
+ headers: {
9143
+ [name: string]: unknown;
9144
+ };
9145
+ content: {
9146
+ 'application/json': components['schemas']['ErrorResponse'];
9147
+ };
9148
+ };
9149
+ /** @description Rate limited */
9150
+ 429: {
9151
+ headers: {
9152
+ [name: string]: unknown;
9153
+ };
9154
+ content: {
9155
+ 'application/json': components['schemas']['ErrorResponse'];
9156
+ };
9157
+ };
9158
+ };
9159
+ };
9160
+ put?: never;
9161
+ post?: never;
9162
+ delete?: never;
9163
+ options?: never;
9164
+ head?: never;
9165
+ patch?: never;
9166
+ trace?: never;
9167
+ };
9168
+ '/api/projects/{projectId}/flows/{flowId}/releases/summarize': {
9169
+ parameters: {
9170
+ query?: never;
9171
+ header?: never;
9172
+ path?: never;
9173
+ cookie?: never;
9174
+ };
9175
+ get?: never;
9176
+ put?: never;
9177
+ /**
9178
+ * Summarize or check a release
9179
+ * @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.
9180
+ */
9181
+ post: {
9182
+ parameters: {
9183
+ query?: never;
9184
+ header?: never;
9185
+ path: {
9186
+ projectId: string;
9187
+ flowId: string;
9188
+ };
9189
+ cookie?: never;
9190
+ };
9191
+ requestBody?: {
9192
+ content: {
9193
+ 'application/json': {
9194
+ /** @example ver_a1b2c3d4 */
9195
+ versionId: string;
9196
+ /** @example ver_a1b2c3d4 */
9197
+ prevVersionId: string;
9198
+ /** @enum {string} */
9199
+ mode: 'draft' | 'check';
9200
+ currentText?: string;
9201
+ };
9202
+ };
9203
+ };
9204
+ responses: {
9205
+ /** @description The generated summary or the check verdict */
9206
+ 200: {
9207
+ headers: {
9208
+ [name: string]: unknown;
9209
+ };
9210
+ content: {
9211
+ 'application/json': components['schemas']['SummarizeReleaseResponse'];
9212
+ };
9213
+ };
9214
+ /** @description Invalid body, a target is not a release, the pair is out of order, or no LLM provider is configured */
9215
+ 400: {
9216
+ headers: {
9217
+ [name: string]: unknown;
9218
+ };
9219
+ content: {
9220
+ 'application/json': components['schemas']['ErrorResponse'];
9221
+ };
9222
+ };
9223
+ /** @description Unauthorized */
9224
+ 401: {
9225
+ headers: {
9226
+ [name: string]: unknown;
9227
+ };
9228
+ content: {
9229
+ 'application/json': components['schemas']['ErrorResponse'];
9230
+ };
9231
+ };
9232
+ /** @description Forbidden */
9233
+ 403: {
9234
+ headers: {
9235
+ [name: string]: unknown;
9236
+ };
9237
+ content: {
9238
+ 'application/json': components['schemas']['ErrorResponse'];
9239
+ };
9240
+ };
9241
+ /** @description Not found */
9242
+ 404: {
9243
+ headers: {
9244
+ [name: string]: unknown;
9245
+ };
9246
+ content: {
9247
+ 'application/json': components['schemas']['ErrorResponse'];
9248
+ };
9249
+ };
9250
+ /** @description Rate limited */
9251
+ 429: {
9252
+ headers: {
9253
+ [name: string]: unknown;
9254
+ };
9255
+ content: {
9256
+ 'application/json': components['schemas']['ErrorResponse'];
9257
+ };
9258
+ };
9259
+ /** @description The model call failed or returned no usable text */
9260
+ 502: {
9261
+ headers: {
9262
+ [name: string]: unknown;
9263
+ };
9264
+ content: {
9265
+ 'application/json': components['schemas']['ErrorResponse'];
9266
+ };
9267
+ };
9268
+ };
9269
+ };
9270
+ delete?: never;
9271
+ options?: never;
9272
+ head?: never;
9273
+ patch?: never;
9274
+ trace?: never;
9275
+ };
9276
+ '/api/projects/{projectId}/deployments/{deploymentId}/versions/current/content': {
9277
+ parameters: {
9278
+ query?: never;
9279
+ header?: never;
9280
+ path?: never;
9281
+ cookie?: never;
9282
+ };
9283
+ /**
9284
+ * Get current deployed content
9285
+ * @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.
9286
+ */
9287
+ get: {
9288
+ parameters: {
9289
+ query?: never;
9290
+ header?: never;
9291
+ path: {
9292
+ projectId: string;
9293
+ deploymentId: string;
9294
+ };
9295
+ cookie?: never;
9296
+ };
9297
+ requestBody?: never;
9298
+ responses: {
9299
+ /** @description Deployed content (or a null baseline) */
9300
+ 200: {
9301
+ headers: {
9302
+ [name: string]: unknown;
9303
+ };
9304
+ content: {
9305
+ 'application/json': components['schemas']['DeployedContentResponse'];
9306
+ };
9307
+ };
9308
+ /** @description Unauthorized */
9309
+ 401: {
9310
+ headers: {
9311
+ [name: string]: unknown;
9312
+ };
9313
+ content: {
9314
+ 'application/json': components['schemas']['ErrorResponse'];
9315
+ };
9316
+ };
9317
+ /** @description Forbidden */
9318
+ 403: {
9319
+ headers: {
9320
+ [name: string]: unknown;
9321
+ };
9322
+ content: {
9323
+ 'application/json': components['schemas']['ErrorResponse'];
9324
+ };
9325
+ };
9326
+ /** @description Not found */
9327
+ 404: {
9328
+ headers: {
9329
+ [name: string]: unknown;
9330
+ };
9331
+ content: {
9332
+ 'application/json': components['schemas']['ErrorResponse'];
9333
+ };
9334
+ };
9335
+ /** @description Rate limited */
9336
+ 429: {
9337
+ headers: {
9338
+ [name: string]: unknown;
9339
+ };
9340
+ content: {
9341
+ 'application/json': components['schemas']['ErrorResponse'];
9342
+ };
9343
+ };
9344
+ };
9345
+ };
9346
+ put?: never;
9347
+ post?: never;
9348
+ delete?: never;
9349
+ options?: never;
9350
+ head?: never;
9351
+ patch?: never;
9352
+ trace?: never;
9353
+ };
9354
+ '/api/projects/{projectId}/deployments/{deploymentId}/heartbeats': {
9355
+ parameters: {
9356
+ query?: never;
9357
+ header?: never;
9358
+ path?: never;
9359
+ cookie?: never;
9360
+ };
9361
+ /**
9362
+ * List deployment heartbeats
9363
+ * @description List heartbeat records for a deployment with optional from/to time-range filtering and pagination. Requires member role.
9364
+ */
9365
+ get: {
9366
+ parameters: {
9367
+ query?: {
9368
+ /** @description ISO start of the time range. */
9369
+ from?: string;
9370
+ /** @description ISO end of the time range. */
9371
+ to?: string;
9372
+ limit?: number;
9373
+ offset?: number | null;
9374
+ };
9375
+ header?: never;
9376
+ path: {
9377
+ projectId: string;
9378
+ deploymentId: string;
9379
+ };
9380
+ cookie?: never;
9381
+ };
9382
+ requestBody?: never;
9383
+ responses: {
9384
+ /** @description Heartbeat history */
9385
+ 200: {
9386
+ headers: {
9387
+ [name: string]: unknown;
9388
+ };
9389
+ content: {
9390
+ 'application/json': components['schemas']['ListHeartbeatsResponse'];
9391
+ };
9392
+ };
9393
+ /** @description Unauthorized */
9394
+ 401: {
9395
+ headers: {
9396
+ [name: string]: unknown;
9397
+ };
9398
+ content: {
9399
+ 'application/json': components['schemas']['ErrorResponse'];
9400
+ };
9401
+ };
9402
+ /** @description Forbidden */
9403
+ 403: {
9404
+ headers: {
9405
+ [name: string]: unknown;
9406
+ };
9407
+ content: {
9408
+ 'application/json': components['schemas']['ErrorResponse'];
9409
+ };
9410
+ };
9411
+ /** @description Not found */
9412
+ 404: {
9413
+ headers: {
9414
+ [name: string]: unknown;
9415
+ };
9416
+ content: {
9417
+ 'application/json': components['schemas']['ErrorResponse'];
9418
+ };
9419
+ };
9420
+ };
9421
+ };
9422
+ put?: never;
9423
+ post?: never;
9424
+ delete?: never;
9425
+ options?: never;
9426
+ head?: never;
9427
+ patch?: never;
9428
+ trace?: never;
9429
+ };
9430
+ '/api/projects/{projectId}/deployments/{deploymentId}/rotate-ingest-token': {
9431
+ parameters: {
9432
+ query?: never;
9433
+ header?: never;
9434
+ path?: never;
9435
+ cookie?: never;
9436
+ };
9437
+ get?: never;
9438
+ put?: never;
9439
+ /**
9440
+ * Rotate ingest token
9441
+ * @description Rotate the ingest token for a deployment. Owner-only. No grace window: the previous token is immediately invalidated and the new token is returned once.
9442
+ */
9443
+ post: {
9444
+ parameters: {
9445
+ query?: never;
9446
+ header?: never;
9447
+ path: {
9448
+ projectId: string;
9449
+ deploymentId: string;
9450
+ };
9451
+ cookie?: never;
9452
+ };
9453
+ requestBody?: never;
9454
+ responses: {
9455
+ /** @description New ingest token */
9456
+ 200: {
9457
+ headers: {
9458
+ [name: string]: unknown;
9459
+ };
9460
+ content: {
9461
+ 'application/json': components['schemas']['RotateIngestTokenResponse'];
9462
+ };
9463
+ };
9464
+ /** @description Unauthorized */
9465
+ 401: {
9466
+ headers: {
9467
+ [name: string]: unknown;
9468
+ };
9469
+ content: {
9470
+ 'application/json': components['schemas']['ErrorResponse'];
9471
+ };
9472
+ };
9473
+ /** @description Forbidden */
9474
+ 403: {
9475
+ headers: {
9476
+ [name: string]: unknown;
9477
+ };
9478
+ content: {
9479
+ 'application/json': components['schemas']['ErrorResponse'];
9480
+ };
9481
+ };
9482
+ /** @description Not found */
9483
+ 404: {
9484
+ headers: {
9485
+ [name: string]: unknown;
9486
+ };
9487
+ content: {
9488
+ 'application/json': components['schemas']['ErrorResponse'];
9489
+ };
9490
+ };
9491
+ };
9492
+ };
9493
+ delete?: never;
8477
9494
  options?: never;
8478
9495
  head?: never;
8479
9496
  patch?: never;
@@ -10127,6 +11144,10 @@ interface components {
10127
11144
  */
10128
11145
  updatedAt: string;
10129
11146
  };
11147
+ DeploySettingsRequest: {
11148
+ flow?: string;
11149
+ humanText?: string;
11150
+ };
10130
11151
  DeploySettingsResponse: {
10131
11152
  deploymentId: string;
10132
11153
  /** @example cfg_a1b2c3d4 */
@@ -10568,6 +11589,21 @@ interface components {
10568
11589
  /** Format: date-time */
10569
11590
  createdAt: string;
10570
11591
  createdBy: string | null;
11592
+ createdByLabel: string | null;
11593
+ };
11594
+ ReleaseContentResponse: {
11595
+ /** @example ver_a1b2c3d4 */
11596
+ versionId: string;
11597
+ /** @example 22 */
11598
+ versionNumber: number;
11599
+ content: components['schemas']['FlowConfig'];
11600
+ /**
11601
+ * Format: date-time
11602
+ * @example 2026-01-26T14:30:00.000Z
11603
+ */
11604
+ createdAt: string;
11605
+ /** @enum {string} */
11606
+ createdBy: 'user' | 'auto_save' | 'restore' | 'deploy' | 'preview';
10571
11607
  };
10572
11608
  ListVersionAnnotationsResponse: {
10573
11609
  annotations: components['schemas']['VersionAnnotation'][];
@@ -10608,11 +11644,60 @@ interface components {
10608
11644
  */
10609
11645
  updatedAt: string;
10610
11646
  };
10611
- ListHubThreadsResponse: {
10612
- threads: components['schemas']['HubThread'][];
10613
- hasMoreThreads: boolean;
11647
+ ListHubThreadsResponse: {
11648
+ threads: components['schemas']['HubThread'][];
11649
+ hasMoreThreads: boolean;
11650
+ };
11651
+ HubThread: {
11652
+ /** @example thr_a1b2c3d4 */
11653
+ id: string;
11654
+ /**
11655
+ * @example release
11656
+ * @enum {string}
11657
+ */
11658
+ anchorType: 'step' | 'entity_action' | 'release' | 'contract' | 'tag';
11659
+ anchorKey: string;
11660
+ anchorLabel: string;
11661
+ /**
11662
+ * @example open
11663
+ * @enum {string}
11664
+ */
11665
+ status: 'open' | 'resolved';
11666
+ resolvedByVersionId: string | null;
11667
+ resolvedByVersionNumber: number | null;
11668
+ /**
11669
+ * Format: date-time
11670
+ * @example 2026-01-26T14:30:00.000Z
11671
+ */
11672
+ resolvedAt: string | null;
11673
+ resolvedBy: string | null;
11674
+ createdBy: string;
11675
+ /**
11676
+ * Format: date-time
11677
+ * @example 2026-01-26T14:30:00.000Z
11678
+ */
11679
+ createdAt: string;
11680
+ /**
11681
+ * Format: date-time
11682
+ * @example 2026-01-26T14:30:00.000Z
11683
+ */
11684
+ updatedAt: string;
11685
+ messageCount: number;
11686
+ messages?: components['schemas']['HubMessage'][];
11687
+ hasMoreMessages?: boolean;
11688
+ };
11689
+ HubMessage: {
11690
+ id: string;
11691
+ /** @example user_a1b2c3d4 */
11692
+ author: string;
11693
+ text: string;
11694
+ /**
11695
+ * Format: date-time
11696
+ * @example 2026-01-26T14:30:00.000Z
11697
+ */
11698
+ createdAt: string;
10614
11699
  };
10615
- HubThread: {
11700
+ HubThreadResponse: {
10616
11701
  /** @example thr_a1b2c3d4 */
10617
11702
  id: string;
10618
11703
  /**
@@ -10650,41 +11735,331 @@ interface components {
10650
11735
  messages?: components['schemas']['HubMessage'][];
10651
11736
  hasMoreMessages?: boolean;
10652
11737
  };
10653
- HubMessage: {
11738
+ ListKnowledgeResponse: {
11739
+ entries: components['schemas']['KnowledgeEntry'][];
11740
+ hasMoreEntries: boolean;
11741
+ };
11742
+ KnowledgeEntry:
11743
+ | components['schemas']['KnowledgeThread']
11744
+ | components['schemas']['KnowledgeDescription'];
11745
+ KnowledgeThread: {
11746
+ id: string;
11747
+ anchorKey: string;
11748
+ anchorLabel: string;
11749
+ frameId: string | null;
11750
+ frameName: string | null;
11751
+ flowId: string | null;
11752
+ subjectKey: string | null;
11753
+ spatial: components['schemas']['KnowledgeSpatial'];
11754
+ validity: components['schemas']['KnowledgeValidity'];
11755
+ /** @enum {string} */
11756
+ freshness: 'current' | 'subject_changed' | 'unknown';
11757
+ author: components['schemas']['KnowledgeAuthor'];
11758
+ /** @enum {string} */
11759
+ source: 'tag_mode' | 'hub' | 'mcp';
11760
+ /**
11761
+ * Format: date-time
11762
+ * @example 2026-01-26T14:30:00.000Z
11763
+ */
11764
+ updatedAt: string;
11765
+ /**
11766
+ * @description discriminator enum property added by openapi-typescript
11767
+ * @enum {string}
11768
+ */
11769
+ kind: 'thread';
11770
+ /**
11771
+ * @example tag
11772
+ * @enum {string}
11773
+ */
11774
+ anchorType:
11775
+ | 'step'
11776
+ | 'entity_action'
11777
+ | 'release'
11778
+ | 'contract'
11779
+ | 'tag'
11780
+ | 'page';
11781
+ /**
11782
+ * @example open
11783
+ * @enum {string}
11784
+ */
11785
+ status: 'open' | 'resolved';
11786
+ /**
11787
+ * Format: date-time
11788
+ * @example 2026-01-26T14:30:00.000Z
11789
+ */
11790
+ createdAt: string;
11791
+ messageCount: number;
11792
+ messages?: components['schemas']['KnowledgeMessage'][];
11793
+ hasMoreMessages?: boolean;
11794
+ };
11795
+ KnowledgeSpatial: {
11796
+ at: {
11797
+ x: number;
11798
+ y: number;
11799
+ };
11800
+ element?: {
11801
+ [key: string]: unknown;
11802
+ };
11803
+ } | null;
11804
+ KnowledgeValidity:
11805
+ | {
11806
+ /** @enum {string} */
11807
+ tier: 'release';
11808
+ versionId: string;
11809
+ versionNumber: number;
11810
+ promoted: boolean;
11811
+ }
11812
+ | {
11813
+ /** @enum {string} */
11814
+ tier: 'draft';
11815
+ versionId?: string;
11816
+ }
11817
+ | {
11818
+ /** @enum {string} */
11819
+ tier: 'none';
11820
+ };
11821
+ KnowledgeAuthor: {
11822
+ /** @enum {string} */
11823
+ kind: 'user' | 'preview' | 'agent';
11824
+ id: string | null;
11825
+ label: string;
11826
+ };
11827
+ KnowledgeMessage: {
10654
11828
  id: string;
10655
11829
  /** @example user_a1b2c3d4 */
10656
11830
  author: string;
11831
+ /** @example ayla@elbwalker.com */
11832
+ authorLabel: string;
10657
11833
  text: string;
10658
11834
  /**
10659
11835
  * Format: date-time
10660
11836
  * @example 2026-01-26T14:30:00.000Z
10661
11837
  */
10662
11838
  createdAt: string;
11839
+ clientMessageId: string | null;
10663
11840
  };
10664
- HubThreadResponse: {
10665
- /** @example thr_a1b2c3d4 */
11841
+ KnowledgeDescription: {
10666
11842
  id: string;
11843
+ anchorKey: string;
11844
+ anchorLabel: string;
11845
+ frameId: string | null;
11846
+ frameName: string | null;
11847
+ flowId: string | null;
11848
+ subjectKey: string | null;
11849
+ spatial: components['schemas']['KnowledgeSpatial'];
11850
+ validity: components['schemas']['KnowledgeValidity'];
11851
+ /** @enum {string} */
11852
+ freshness: 'current' | 'subject_changed' | 'unknown';
11853
+ author: components['schemas']['KnowledgeAuthor'];
11854
+ /** @enum {string} */
11855
+ source: 'tag_mode' | 'hub' | 'mcp';
10667
11856
  /**
10668
- * @example release
11857
+ * Format: date-time
11858
+ * @example 2026-01-26T14:30:00.000Z
11859
+ */
11860
+ updatedAt: string;
11861
+ /**
11862
+ * @description discriminator enum property added by openapi-typescript
10669
11863
  * @enum {string}
10670
11864
  */
10671
- anchorType: 'step' | 'entity_action' | 'release' | 'contract' | 'tag';
11865
+ kind: 'description';
11866
+ /**
11867
+ * @example tag
11868
+ * @enum {string}
11869
+ */
11870
+ anchorType: 'tag' | 'page';
11871
+ body: string;
11872
+ };
11873
+ KnowledgeThreadResponse: {
11874
+ id: string;
10672
11875
  anchorKey: string;
10673
11876
  anchorLabel: string;
11877
+ frameId: string | null;
11878
+ frameName: string | null;
11879
+ flowId: string | null;
11880
+ subjectKey: string | null;
11881
+ spatial: components['schemas']['KnowledgeSpatial'];
11882
+ validity: components['schemas']['KnowledgeValidity'];
11883
+ /** @enum {string} */
11884
+ freshness: 'current' | 'subject_changed' | 'unknown';
11885
+ author: components['schemas']['KnowledgeAuthor'];
11886
+ /** @enum {string} */
11887
+ source: 'tag_mode' | 'hub' | 'mcp';
11888
+ /**
11889
+ * Format: date-time
11890
+ * @example 2026-01-26T14:30:00.000Z
11891
+ */
11892
+ updatedAt: string;
11893
+ /** @enum {string} */
11894
+ kind: 'thread';
11895
+ /**
11896
+ * @example tag
11897
+ * @enum {string}
11898
+ */
11899
+ anchorType:
11900
+ | 'step'
11901
+ | 'entity_action'
11902
+ | 'release'
11903
+ | 'contract'
11904
+ | 'tag'
11905
+ | 'page';
10674
11906
  /**
10675
11907
  * @example open
10676
11908
  * @enum {string}
10677
11909
  */
10678
11910
  status: 'open' | 'resolved';
10679
- resolvedByVersionId: string | null;
10680
- resolvedByVersionNumber: number | null;
10681
11911
  /**
10682
11912
  * Format: date-time
10683
11913
  * @example 2026-01-26T14:30:00.000Z
10684
11914
  */
10685
- resolvedAt: string | null;
10686
- resolvedBy: string | null;
11915
+ createdAt: string;
11916
+ messageCount: number;
11917
+ messages?: components['schemas']['KnowledgeMessage'][];
11918
+ hasMoreMessages?: boolean;
11919
+ };
11920
+ KnowledgeDescriptionResponse: {
11921
+ id: string;
11922
+ anchorKey: string;
11923
+ anchorLabel: string;
11924
+ frameId: string | null;
11925
+ frameName: string | null;
11926
+ flowId: string | null;
11927
+ subjectKey: string | null;
11928
+ spatial: components['schemas']['KnowledgeSpatial'];
11929
+ validity: components['schemas']['KnowledgeValidity'];
11930
+ /** @enum {string} */
11931
+ freshness: 'current' | 'subject_changed' | 'unknown';
11932
+ author: components['schemas']['KnowledgeAuthor'];
11933
+ /** @enum {string} */
11934
+ source: 'tag_mode' | 'hub' | 'mcp';
11935
+ /**
11936
+ * Format: date-time
11937
+ * @example 2026-01-26T14:30:00.000Z
11938
+ */
11939
+ updatedAt: string;
11940
+ /** @enum {string} */
11941
+ kind: 'description';
11942
+ /**
11943
+ * @example tag
11944
+ * @enum {string}
11945
+ */
11946
+ anchorType: 'tag' | 'page';
11947
+ body: string;
11948
+ };
11949
+ FrameInput: {
11950
+ name: string;
11951
+ /** @example frm_V1StGXR8Z5jdHi6BmyT7K */
11952
+ parentId: string | null;
11953
+ placements: components['schemas']['FramePlacement'][];
11954
+ size: components['schemas']['PlanSize'];
11955
+ marks: {
11956
+ [key: string]: unknown;
11957
+ };
11958
+ /** @example frm_V1StGXR8Z5jdHi6BmyT7K */
11959
+ extends: string | null;
11960
+ source: components['schemas']['FrameSource'];
11961
+ /** @enum {string} */
11962
+ origin: 'drawn' | 'imported' | 'observed';
11963
+ flowId: string | null;
11964
+ };
11965
+ FramePlacement: {
11966
+ id: string;
11967
+ rect: components['schemas']['PlanRect'];
11968
+ selector?: string;
11969
+ anchor?: {
11970
+ [key: string]: unknown;
11971
+ };
11972
+ };
11973
+ PlanRect: {
11974
+ x: number;
11975
+ y: number;
11976
+ w: number;
11977
+ h: number;
11978
+ };
11979
+ PlanSize: {
11980
+ width: number;
11981
+ height: number;
11982
+ };
11983
+ FrameSource:
11984
+ | {
11985
+ /** @enum {string} */
11986
+ kind: 'page';
11987
+ key: string;
11988
+ url: string;
11989
+ }
11990
+ | {
11991
+ /** @enum {string} */
11992
+ kind: 'figma';
11993
+ fileKey: string;
11994
+ nodeId: string;
11995
+ }
11996
+ | {
11997
+ /** @enum {string} */
11998
+ kind: 'image';
11999
+ }
12000
+ | null;
12001
+ Frame: {
12002
+ /** @example frm_V1StGXR8Z5jdHi6BmyT7K */
12003
+ id: string;
12004
+ projectId: string;
12005
+ name: string;
12006
+ parentId: string | null;
12007
+ placements: components['schemas']['FramePlacement'][];
12008
+ size: components['schemas']['PlanSize'];
12009
+ marks: {
12010
+ [key: string]: unknown;
12011
+ };
12012
+ extends: string | null;
12013
+ source: components['schemas']['FrameSource'];
12014
+ /** @enum {string} */
12015
+ origin: 'drawn' | 'imported' | 'observed';
12016
+ flowId: string | null;
12017
+ screenshot: components['schemas']['FrameScreenshot'];
12018
+ version: number;
12019
+ /**
12020
+ * Format: date-time
12021
+ * @example 2026-01-26T14:30:00.000Z
12022
+ */
12023
+ createdAt: string;
12024
+ /**
12025
+ * Format: date-time
12026
+ * @example 2026-01-26T14:30:00.000Z
12027
+ */
12028
+ updatedAt: string;
10687
12029
  createdBy: string;
12030
+ updatedBy: string;
12031
+ /**
12032
+ * Format: date-time
12033
+ * @example 2026-01-26T14:30:00.000Z
12034
+ */
12035
+ deletedAt: string | null;
12036
+ };
12037
+ FrameScreenshot: {
12038
+ assetId: string;
12039
+ /**
12040
+ * Format: date-time
12041
+ * @example 2026-01-26T14:30:00.000Z
12042
+ */
12043
+ capturedAt: string;
12044
+ size: components['schemas']['PlanSize'];
12045
+ dpr: number;
12046
+ capturedRect: components['schemas']['PlanRect'];
12047
+ } | null;
12048
+ FrameLean: {
12049
+ /** @example frm_V1StGXR8Z5jdHi6BmyT7K */
12050
+ id: string;
12051
+ projectId: string;
12052
+ name: string;
12053
+ parentId: string | null;
12054
+ placements: components['schemas']['FramePlacement'][];
12055
+ size: components['schemas']['PlanSize'];
12056
+ extends: string | null;
12057
+ source: components['schemas']['FrameSource'];
12058
+ /** @enum {string} */
12059
+ origin: 'drawn' | 'imported' | 'observed';
12060
+ flowId: string | null;
12061
+ screenshot: components['schemas']['FrameScreenshot'];
12062
+ version: number;
10688
12063
  /**
10689
12064
  * Format: date-time
10690
12065
  * @example 2026-01-26T14:30:00.000Z
@@ -10695,9 +12070,30 @@ interface components {
10695
12070
  * @example 2026-01-26T14:30:00.000Z
10696
12071
  */
10697
12072
  updatedAt: string;
10698
- messageCount: number;
10699
- messages?: components['schemas']['HubMessage'][];
10700
- hasMoreMessages?: boolean;
12073
+ createdBy: string;
12074
+ updatedBy: string;
12075
+ /**
12076
+ * Format: date-time
12077
+ * @example 2026-01-26T14:30:00.000Z
12078
+ */
12079
+ deletedAt: string | null;
12080
+ };
12081
+ FrameListResponse: {
12082
+ frames: components['schemas']['Frame'][];
12083
+ };
12084
+ FrameLeanListResponse: {
12085
+ frames: components['schemas']['FrameLean'][];
12086
+ };
12087
+ PutFrameResponse: {
12088
+ version: number;
12089
+ };
12090
+ FrameConflictResponse: {
12091
+ error: {
12092
+ /** @enum {string} */
12093
+ code: 'FRAME_VERSION_CONFLICT';
12094
+ message: string;
12095
+ };
12096
+ head: components['schemas']['Frame'];
10701
12097
  };
10702
12098
  SummarizeReleaseResponse: {
10703
12099
  /** @enum {string} */
@@ -11936,6 +13332,21 @@ interface components {
11936
13332
  DeclineInvitationResponse: {
11937
13333
  message: string;
11938
13334
  };
13335
+ ScreenshotUploadResponse: {
13336
+ /** @example fas_V1StGXR8Z5jdHi6BmyT7K */
13337
+ assetId: string;
13338
+ reused: boolean;
13339
+ };
13340
+ FrameScreenshotMeta: {
13341
+ /**
13342
+ * Format: date-time
13343
+ * @example 2026-01-26T14:30:00.000Z
13344
+ */
13345
+ capturedAt: string;
13346
+ size: components['schemas']['PlanSize'];
13347
+ dpr: number;
13348
+ capturedRect: components['schemas']['PlanRect'];
13349
+ };
11939
13350
  HeartbeatRequest: {
11940
13351
  /** @example a1b2c3d4e5f6 */
11941
13352
  instanceId: string;
@@ -12731,6 +14142,143 @@ interface EndObserveSessionOptions {
12731
14142
  */
12732
14143
  declare function endObserveSession(options: EndObserveSessionOptions): Promise<void>;
12733
14144
 
14145
+ type VersionAnnotation = components['schemas']['VersionAnnotation'];
14146
+ type FlowRelease = components['schemas']['FlowRelease'];
14147
+ type StepHistoryResponse = components['schemas']['StepHistoryResponse'];
14148
+ type ListHubThreadsResponse = components['schemas']['ListHubThreadsResponse'];
14149
+ type HubThreadResponse = components['schemas']['HubThreadResponse'];
14150
+ type ListKnowledgeResponse = components['schemas']['ListKnowledgeResponse'];
14151
+ /** The rationale summary a release index row carries when asked for one. */
14152
+ interface ReleaseRationaleSummary {
14153
+ hasHumanText: boolean;
14154
+ hasGeneratedSummary: boolean;
14155
+ /** First non-empty line of the human text, cut at 120 characters. */
14156
+ firstLine: string | null;
14157
+ }
14158
+ interface ReleaseIndexResponse {
14159
+ releases: Array<FlowRelease & {
14160
+ rationale?: ReleaseRationaleSummary | null;
14161
+ }>;
14162
+ total: number;
14163
+ limit: number;
14164
+ offset: number;
14165
+ }
14166
+ interface ReleaseDiffResponse {
14167
+ prevVersionId: string;
14168
+ prevVersionNumber: number;
14169
+ /** Rendered from masked content. Empty when nothing visible changed. */
14170
+ text: string;
14171
+ /** Compared over unmasked content hashes, so this is the real answer. */
14172
+ contentIdentical: boolean;
14173
+ }
14174
+ interface ReleaseDetailResponse {
14175
+ versionId: string;
14176
+ versionNumber: number;
14177
+ contentHash: string | null;
14178
+ createdAt: string;
14179
+ createdBy: string;
14180
+ rationale: VersionAnnotation | null;
14181
+ /** Null for the flow's oldest release. */
14182
+ diff: ReleaseDiffResponse | null;
14183
+ }
14184
+ interface ListReleasesOptions {
14185
+ projectId?: string;
14186
+ flowId: string;
14187
+ limit?: number;
14188
+ offset?: number;
14189
+ }
14190
+ /** The release index WITH its rationale summary. Requires the hub feature. */
14191
+ declare function listReleases(options: ListReleasesOptions): Promise<ReleaseIndexResponse>;
14192
+ /** How a release is addressed: by spine id, or by spine number. */
14193
+ type ReleaseRef = {
14194
+ versionId: string;
14195
+ } | {
14196
+ versionNumber: number;
14197
+ };
14198
+ interface GetReleaseOptions {
14199
+ projectId?: string;
14200
+ flowId: string;
14201
+ ref: ReleaseRef;
14202
+ }
14203
+ /**
14204
+ * One release in full: rationale plus the diff the SERVER computed against the
14205
+ * spine predecessor. The path segment is the id or the number; the app decides
14206
+ * which it was.
14207
+ */
14208
+ declare function getRelease(options: GetReleaseOptions): Promise<ReleaseDetailResponse>;
14209
+ interface ListStepHistoryOptions {
14210
+ projectId?: string;
14211
+ flowId: string;
14212
+ step: string;
14213
+ flow?: string;
14214
+ limit?: number;
14215
+ }
14216
+ declare function listStepHistory(options: ListStepHistoryOptions): Promise<StepHistoryResponse>;
14217
+ interface SetReleaseRationaleOptions {
14218
+ projectId?: string;
14219
+ flowId: string;
14220
+ versionId: string;
14221
+ text: string;
14222
+ }
14223
+ declare function setReleaseRationale(options: SetReleaseRationaleOptions): Promise<VersionAnnotation>;
14224
+ type ThreadAnchorType = 'step' | 'entity_action' | 'release' | 'contract' | 'tag';
14225
+ type ThreadStatus = 'open' | 'resolved';
14226
+ interface ListThreadsOptions {
14227
+ projectId?: string;
14228
+ flowId: string;
14229
+ anchorType?: ThreadAnchorType;
14230
+ anchorKey?: string;
14231
+ status?: ThreadStatus;
14232
+ includeMessages: boolean;
14233
+ limit?: number;
14234
+ }
14235
+ declare function listThreads(options: ListThreadsOptions): Promise<ListHubThreadsResponse>;
14236
+ interface CreateThreadOptions {
14237
+ projectId?: string;
14238
+ flowId: string;
14239
+ anchorType: ThreadAnchorType;
14240
+ anchorKey: string;
14241
+ anchorLabel?: string;
14242
+ text: string;
14243
+ }
14244
+ declare function createThread(options: CreateThreadOptions): Promise<HubThreadResponse>;
14245
+ interface AddThreadMessageOptions {
14246
+ projectId?: string;
14247
+ flowId: string;
14248
+ threadId: string;
14249
+ text: string;
14250
+ }
14251
+ declare function addThreadMessage(options: AddThreadMessageOptions): Promise<HubThreadResponse>;
14252
+ interface ListKnowledgeOptions {
14253
+ projectId?: string;
14254
+ pageKey?: string;
14255
+ frameId?: string;
14256
+ markId?: string;
14257
+ includeMessages: boolean;
14258
+ limit?: number;
14259
+ }
14260
+ declare function listKnowledge(options: ListKnowledgeOptions): Promise<ListKnowledgeResponse>;
14261
+
14262
+ type FrameResponse = components['schemas']['Frame'];
14263
+ type FrameListResponse = components['schemas']['FrameListResponse'];
14264
+ type FrameLeanListResponse = components['schemas']['FrameLeanListResponse'];
14265
+ interface ListFramesOptions {
14266
+ projectId?: string;
14267
+ }
14268
+ /** Every live frame of the project, without marks. Requires the frames feature. */
14269
+ declare function listFrames(options?: ListFramesOptions): Promise<FrameLeanListResponse>;
14270
+ interface ListPageFramesOptions {
14271
+ projectId?: string;
14272
+ pageKey: string;
14273
+ }
14274
+ /** The frames of one page at any depth, with their marks. */
14275
+ declare function listPageFrames(options: ListPageFramesOptions): Promise<FrameListResponse>;
14276
+ interface GetFrameOptions {
14277
+ projectId?: string;
14278
+ frameId: string;
14279
+ }
14280
+ declare function getFrame(options: GetFrameOptions): Promise<FrameResponse>;
14281
+
12734
14282
  interface ListSecretsOptions {
12735
14283
  projectId?: string;
12736
14284
  flowId: string;
@@ -13076,4 +14624,4 @@ declare module '@walkeros/core' {
13076
14624
  }
13077
14625
  }
13078
14626
 
13079
- export { ApiError, type ApiErrorDetail, type BuildOptions, type BundleStats, type CLIBuildOptions, type ClientContext, type ClientType, type CompareContractInput, type ContractComparison, type ContractVerdict, type CreatePreviewOptions, type CreateSecretOptions, type DeletePreviewOptions, type DeleteSecretOptions, type DeployOptions, DeploymentAmbiguityError, type DeploymentSummaryForFlow, type DeviceCodeOptions, type DeviceCodeResult, type EndObserveSessionOptions, type ExampleLookupResult, type FeedbackOptions, type GetObserveSessionOptions, type GetPreviewOptions, type GlobalOptions, type HealthResult, type ListDeploymentsOptions, type ListFlowsOptions, type ListJourneysOptions, type ListPreviewsOptions, type ListProjectsOptions, type ListSecretsOptions, type MinifyOptions, type PollOptions, type PollResult, type PrepareInput, type PreparedFlow, type ProjectFlows, type PushResult, type RegrantPreviewOptions, type RunCommandOptions, type RunOptions, type RunResult, type SSEEvent, type SSEParseResult, type SimulateCollectorOptions, type SimulateDataOptions, type SimulateDestinationOptions, type SimulateSourceOptions, type SimulateTransformerOptions, type StartObserveSessionOptions, type UpdateSecretOptions, VERSION, type ValidateResult, type ValidationError, type ValidationType, type ValidationWarning, type WalkerOSConfig, type WrapSkeletonOptions, annotateErrorWithDrift, apiFetch, bakedContractHash, bakedContractVersion, buildDataPayload, bundle, bundleCommand, canonicalContractHash, classifyStepProperties, clientContextHeaders, compareContract, compareOutput, containsCodeMarkers, createApiClient, createDeployCommand, createDeployment, createDeploymentCommand, createFlow, createFlowCommand, createPreview, createProject, createProjectCommand, createSecret, deleteConfig, deleteDeployment, deleteDeploymentByFlowId, deleteDeploymentCommand, deleteFlow, deleteFlowCommand, deletePreview, deleteProject, deleteProjectCommand, deleteSecret, deploy, deployCommand, deployFetch, duplicateFlow, duplicateFlowCommand, endObserveSession, feedback, feedbackCommand, fetchHealth, findExample, getAuthHeaders, getClientContext, getDefaultProject, getDeployment, getDeploymentBySlug, getDeploymentBySlugCommand, getDeploymentCommand, getFeedbackPreference, getFlow, getFlowCommand, getObserveSession, getPreview, getProject, getProjectCommand, getToken, listAllFlows, listDeployments, listDeploymentsCommand, listFlows, listFlowsCommand, listJourneys, listPreviews, listProjects, listProjectsCommand, listSecrets, loadConfig, loadJsonConfig, loginCommand, logoutCommand, mergeAuthHeaders, parseSSEEvents, pollForToken, publicFetch, push, pushCommand, readConfig, regrantPreview, requestDeviceCode, requireProjectId, resetClientContext, resolveAppUrl, resolveToken, run, runCommand, setClientContext, setDefaultProject, setFeedbackPreference, simulateCollector, simulateDestination, simulateSource, simulateTransformer, startObserveSession, index as telemetry, telemetryDisableCommand, telemetryEnableCommand, telemetryStatusCommand, throwApiError, updateFlow, updateFlowCommand, updateProject, updateProjectCommand, updateSecret, validate, validateCommand, validateFlowStructure, whoami, whoamiCommand, wrapSkeleton, writeConfig };
14627
+ export { type AddThreadMessageOptions, ApiError, type ApiErrorDetail, type BuildOptions, type BundleStats, type CLIBuildOptions, type ClientContext, type ClientType, type CompareContractInput, type ContractComparison, type ContractVerdict, type CreatePreviewOptions, type CreateSecretOptions, type CreateThreadOptions, type DeletePreviewOptions, type DeleteSecretOptions, type DeployOptions, DeploymentAmbiguityError, type DeploymentSummaryForFlow, type DeviceCodeOptions, type DeviceCodeResult, type EndObserveSessionOptions, type ExampleLookupResult, type FeedbackOptions, type GetFrameOptions, type GetObserveSessionOptions, type GetPreviewOptions, type GetReleaseOptions, type GlobalOptions, type HealthResult, type ListDeploymentsOptions, type ListFlowsOptions, type ListFramesOptions, type ListJourneysOptions, type ListKnowledgeOptions, type ListPageFramesOptions, type ListPreviewsOptions, type ListProjectsOptions, type ListReleasesOptions, type ListSecretsOptions, type ListStepHistoryOptions, type ListThreadsOptions, type MinifyOptions, type PollOptions, type PollResult, type PrepareInput, type PreparedFlow, type ProjectFlows, type PushResult, type RegrantPreviewOptions, type ReleaseDetailResponse, type ReleaseDiffResponse, type ReleaseIndexResponse, type ReleaseRationaleSummary, type ReleaseRef, type RunCommandOptions, type RunOptions, type RunResult, type SSEEvent, type SSEParseResult, type SetReleaseRationaleOptions, type SimulateCollectorOptions, type SimulateDataOptions, type SimulateDestinationOptions, type SimulateSourceOptions, type SimulateTransformerOptions, type StartObserveSessionOptions, type ThreadAnchorType, type ThreadStatus, type UpdateSecretOptions, VERSION, type ValidateResult, type ValidationError, type ValidationType, type ValidationWarning, type WalkerOSConfig, type WrapSkeletonOptions, addThreadMessage, annotateErrorWithDrift, apiFetch, bakedContractHash, bakedContractVersion, buildDataPayload, bundle, bundleCommand, canonicalContractHash, classifyStepProperties, clientContextHeaders, compareContract, compareOutput, containsCodeMarkers, createApiClient, createDeployCommand, createDeployment, createDeploymentCommand, createFlow, createFlowCommand, createPreview, createProject, createProjectCommand, createSecret, createThread, deleteConfig, deleteDeployment, deleteDeploymentByFlowId, deleteDeploymentCommand, deleteFlow, deleteFlowCommand, deletePreview, deleteProject, deleteProjectCommand, deleteSecret, deploy, deployCommand, deployFetch, duplicateFlow, duplicateFlowCommand, endObserveSession, feedback, feedbackCommand, fetchHealth, findExample, getAuthHeaders, getClientContext, getDefaultProject, getDeployment, getDeploymentBySlug, getDeploymentBySlugCommand, getDeploymentCommand, getFeedbackPreference, getFlow, getFlowCommand, getFrame, getObserveSession, getPreview, getProject, getProjectCommand, getRelease, getToken, listAllFlows, listDeployments, listDeploymentsCommand, listFlows, listFlowsCommand, listFrames, listJourneys, listKnowledge, listPageFrames, listPreviews, listProjects, listProjectsCommand, listReleases, listSecrets, listStepHistory, listThreads, loadConfig, loadJsonConfig, loginCommand, logoutCommand, mergeAuthHeaders, parseSSEEvents, pollForToken, publicFetch, push, pushCommand, readConfig, regrantPreview, requestDeviceCode, requireProjectId, resetClientContext, resolveAppUrl, resolveToken, run, runCommand, setClientContext, setDefaultProject, setFeedbackPreference, setReleaseRationale, simulateCollector, simulateDestination, simulateSource, simulateTransformer, startObserveSession, index as telemetry, telemetryDisableCommand, telemetryEnableCommand, telemetryStatusCommand, throwApiError, updateFlow, updateFlowCommand, updateProject, updateProjectCommand, updateSecret, validate, validateCommand, validateFlowStructure, whoami, whoamiCommand, wrapSkeleton, writeConfig };