@company-semantics/contracts 95.0.0 → 97.0.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.
@@ -1712,7 +1712,7 @@ export interface paths {
1712
1712
  };
1713
1713
  /**
1714
1714
  * Read one analysis workflow’s generic lifecycle envelope
1715
- * @description The domain-agnostic projection a client polls: identity, registered type, activity-free lifecycle state, start and completion times, the opaque domain progress and result payloads (null until the domain adapter supplies them), a closed failure class on a failed workflow, the frozen typed outcome of the current execution epoch once it settles (null until then), and the capabilities the surface may offer — canStop from the generic layer, canContinue as the domain declares it. Org-scoped: a workflow in another workspace answers 404.
1715
+ * @description The domain-agnostic projection a client polls: identity, registered type, activity-free lifecycle state, start and completion times, the opaque domain progress and result payloads (null until the domain adapter supplies them), a closed failure class on a failed workflow, the frozen typed outcome of the current execution epoch once it settles (null until then), the execution affordances offered now (the contracts offer table over state, the type’s execution support and the frozen outcome, filtered by the viewer’s policy), the workflow it was relaunched from, the current execution epoch’s start and completion times, and the legacy capabilities (canStop, canContinue) kept until their consumers move. Org-scoped: a workflow in another workspace answers 404.
1716
1716
  */
1717
1717
  get: operations["getAnalysisWorkflow"];
1718
1718
  put?: never;
@@ -1763,6 +1763,66 @@ export interface paths {
1763
1763
  patch?: never;
1764
1764
  trace?: never;
1765
1765
  };
1766
+ "/api/analysis-workflows/{id}/continue": {
1767
+ parameters: {
1768
+ query?: never;
1769
+ header?: never;
1770
+ path?: never;
1771
+ cookie?: never;
1772
+ };
1773
+ get?: never;
1774
+ put?: never;
1775
+ /**
1776
+ * Start another execution of a stopped analysis workflow
1777
+ * @description Reopens a STOPPED workflow in a new execution epoch and starts the execution its type serves for continue — only for a type whose execution support declares continue (otherwise 409 not_supported). Answers 202 when started; 409 not_stopped or execution_in_flight otherwise. Runtime posture: intent write, impersonation restricted (it spends model calls); the billing pre-flight runs before anything is created, and a refusal is the billing refusal envelope. An Idempotency-Key header replays the first answer for the same workflow and action. Org-scoped: a workflow in another workspace answers 404.
1778
+ */
1779
+ post: operations["continueAnalysisWorkflow"];
1780
+ delete?: never;
1781
+ options?: never;
1782
+ head?: never;
1783
+ patch?: never;
1784
+ trace?: never;
1785
+ };
1786
+ "/api/analysis-workflows/{id}/retry": {
1787
+ parameters: {
1788
+ query?: never;
1789
+ header?: never;
1790
+ path?: never;
1791
+ cookie?: never;
1792
+ };
1793
+ get?: never;
1794
+ put?: never;
1795
+ /**
1796
+ * Retry a failed analysis workflow in the same workflow
1797
+ * @description Reopens a FAILED workflow in a new execution epoch (never a new workflow id) and starts the execution its type serves for retry — only for a type whose execution support declares retry (otherwise 409 not_supported). Answers 202 when started; 409 not_failed or execution_in_flight otherwise. Runtime posture: intent write, impersonation restricted (it spends model calls); the billing pre-flight runs before anything is created, and a refusal is the billing refusal envelope. An Idempotency-Key header replays the first answer for the same workflow and action. Org-scoped: a workflow in another workspace answers 404.
1798
+ */
1799
+ post: operations["retryAnalysisWorkflow"];
1800
+ delete?: never;
1801
+ options?: never;
1802
+ head?: never;
1803
+ patch?: never;
1804
+ trace?: never;
1805
+ };
1806
+ "/api/analysis-workflows/{id}/run-again": {
1807
+ parameters: {
1808
+ query?: never;
1809
+ header?: never;
1810
+ path?: never;
1811
+ cookie?: never;
1812
+ };
1813
+ get?: never;
1814
+ put?: never;
1815
+ /**
1816
+ * Run a settled analysis workflow again as a new workflow
1817
+ * @description Launches a NEW workflow from the settled one’s parameters under the caller’s current authorization, recording relaunchedFrom, and anchors it in the launching conversation named by chatId so its settlement is delivered there. The old workflow is never written. Only for a type whose execution support declares runAgain (otherwise 409 not_supported); a workflow already open for the same launch answers 409 run_in_progress with its id — never joined, never duplicated. A conversation the caller may not write in answers 404 before anything is created. Runtime posture: intent write, impersonation restricted (it spends model calls); the billing pre-flight runs before anything is created, and a refusal is the billing refusal envelope. An Idempotency-Key header replays the first answer for the same workflow and action. Org-scoped: a workflow in another workspace answers 404.
1818
+ */
1819
+ post: operations["runAnalysisWorkflowAgain"];
1820
+ delete?: never;
1821
+ options?: never;
1822
+ head?: never;
1823
+ patch?: never;
1824
+ trace?: never;
1825
+ };
1766
1826
  "/api/affordances/state": {
1767
1827
  parameters: {
1768
1828
  query?: never;
@@ -4868,7 +4928,7 @@ export interface paths {
4868
4928
  };
4869
4929
  /**
4870
4930
  * Get the price list
4871
- * @description The seat price, the hosted surcharge and BYO fee, the active price-book version, and every priced model at its reference rates beside the hosted rates derived from them.
4931
+ * @description The seat price, the hosted surcharge and BYO fee, a price-book version (the active one, or the one named by ?version), and every priced model as its card: provenance, aliases, and each processing mode and prompt tier at its reference rates beside the hosted rates derived from them.
4872
4932
  */
4873
4933
  get: operations["getBillingPriceList"];
4874
4934
  put?: never;
@@ -4879,6 +4939,26 @@ export interface paths {
4879
4939
  patch?: never;
4880
4940
  trace?: never;
4881
4941
  };
4942
+ "/api/billing/price-book-versions": {
4943
+ parameters: {
4944
+ query?: never;
4945
+ header?: never;
4946
+ path?: never;
4947
+ cookie?: never;
4948
+ };
4949
+ /**
4950
+ * List price-book versions
4951
+ * @description Every published price-book version, newest first, with its provenance and the one calls are priced against now marked active.
4952
+ */
4953
+ get: operations["getBillingPriceBookVersions"];
4954
+ put?: never;
4955
+ post?: never;
4956
+ delete?: never;
4957
+ options?: never;
4958
+ head?: never;
4959
+ patch?: never;
4960
+ trace?: never;
4961
+ };
4882
4962
  "/api/source-sync/discovery/runs": {
4883
4963
  parameters: {
4884
4964
  query?: never;
@@ -7263,6 +7343,34 @@ export interface components {
7263
7343
  args: {
7264
7344
  executionId: string;
7265
7345
  };
7346
+ } | {
7347
+ /** @constant */
7348
+ id: "workflow.stop";
7349
+ args: {
7350
+ /** Format: uuid */
7351
+ workflowId: string;
7352
+ };
7353
+ } | {
7354
+ /** @constant */
7355
+ id: "workflow.continue";
7356
+ args: {
7357
+ /** Format: uuid */
7358
+ workflowId: string;
7359
+ };
7360
+ } | {
7361
+ /** @constant */
7362
+ id: "workflow.retry";
7363
+ args: {
7364
+ /** Format: uuid */
7365
+ workflowId: string;
7366
+ };
7367
+ } | {
7368
+ /** @constant */
7369
+ id: "workflow.runAgain";
7370
+ args: {
7371
+ /** Format: uuid */
7372
+ workflowId: string;
7373
+ };
7266
7374
  })[];
7267
7375
  } | {
7268
7376
  /** @constant */
@@ -7361,6 +7469,34 @@ export interface components {
7361
7469
  args: {
7362
7470
  executionId: string;
7363
7471
  };
7472
+ } | {
7473
+ /** @constant */
7474
+ id: "workflow.stop";
7475
+ args: {
7476
+ /** Format: uuid */
7477
+ workflowId: string;
7478
+ };
7479
+ } | {
7480
+ /** @constant */
7481
+ id: "workflow.continue";
7482
+ args: {
7483
+ /** Format: uuid */
7484
+ workflowId: string;
7485
+ };
7486
+ } | {
7487
+ /** @constant */
7488
+ id: "workflow.retry";
7489
+ args: {
7490
+ /** Format: uuid */
7491
+ workflowId: string;
7492
+ };
7493
+ } | {
7494
+ /** @constant */
7495
+ id: "workflow.runAgain";
7496
+ args: {
7497
+ /** Format: uuid */
7498
+ workflowId: string;
7499
+ };
7364
7500
  })[];
7365
7501
  } | {
7366
7502
  /** @constant */
@@ -7461,6 +7597,34 @@ export interface components {
7461
7597
  args: {
7462
7598
  executionId: string;
7463
7599
  };
7600
+ } | {
7601
+ /** @constant */
7602
+ id: "workflow.stop";
7603
+ args: {
7604
+ /** Format: uuid */
7605
+ workflowId: string;
7606
+ };
7607
+ } | {
7608
+ /** @constant */
7609
+ id: "workflow.continue";
7610
+ args: {
7611
+ /** Format: uuid */
7612
+ workflowId: string;
7613
+ };
7614
+ } | {
7615
+ /** @constant */
7616
+ id: "workflow.retry";
7617
+ args: {
7618
+ /** Format: uuid */
7619
+ workflowId: string;
7620
+ };
7621
+ } | {
7622
+ /** @constant */
7623
+ id: "workflow.runAgain";
7624
+ args: {
7625
+ /** Format: uuid */
7626
+ workflowId: string;
7627
+ };
7464
7628
  })[];
7465
7629
  } | {
7466
7630
  /** @constant */
@@ -7561,6 +7725,34 @@ export interface components {
7561
7725
  args: {
7562
7726
  executionId: string;
7563
7727
  };
7728
+ } | {
7729
+ /** @constant */
7730
+ id: "workflow.stop";
7731
+ args: {
7732
+ /** Format: uuid */
7733
+ workflowId: string;
7734
+ };
7735
+ } | {
7736
+ /** @constant */
7737
+ id: "workflow.continue";
7738
+ args: {
7739
+ /** Format: uuid */
7740
+ workflowId: string;
7741
+ };
7742
+ } | {
7743
+ /** @constant */
7744
+ id: "workflow.retry";
7745
+ args: {
7746
+ /** Format: uuid */
7747
+ workflowId: string;
7748
+ };
7749
+ } | {
7750
+ /** @constant */
7751
+ id: "workflow.runAgain";
7752
+ args: {
7753
+ /** Format: uuid */
7754
+ workflowId: string;
7755
+ };
7564
7756
  })[];
7565
7757
  }) | null;
7566
7758
  error?: string;
@@ -7568,6 +7760,38 @@ export interface components {
7568
7760
  canStop: boolean;
7569
7761
  canContinue: boolean;
7570
7762
  };
7763
+ executionAffordances: ({
7764
+ /** @constant */
7765
+ id: "workflow.stop";
7766
+ args: {
7767
+ /** Format: uuid */
7768
+ workflowId: string;
7769
+ };
7770
+ } | {
7771
+ /** @constant */
7772
+ id: "workflow.continue";
7773
+ args: {
7774
+ /** Format: uuid */
7775
+ workflowId: string;
7776
+ };
7777
+ } | {
7778
+ /** @constant */
7779
+ id: "workflow.retry";
7780
+ args: {
7781
+ /** Format: uuid */
7782
+ workflowId: string;
7783
+ };
7784
+ } | {
7785
+ /** @constant */
7786
+ id: "workflow.runAgain";
7787
+ args: {
7788
+ /** Format: uuid */
7789
+ workflowId: string;
7790
+ };
7791
+ })[];
7792
+ relaunchedFrom: string | null;
7793
+ epochStartedAt: string | null;
7794
+ epochCompletedAt: string | null;
7571
7795
  };
7572
7796
  StopAnalysisWorkflowResponse: {
7573
7797
  /** @constant */
@@ -7586,10 +7810,44 @@ export interface components {
7586
7810
  /** @enum {string} */
7587
7811
  result: "delivered" | "deferred" | "busy" | "skipped" | "not_settled";
7588
7812
  };
7813
+ WorkflowExecutionStartedResponse: {
7814
+ /** @constant */
7815
+ started: true;
7816
+ /** Format: uuid */
7817
+ workflowId: string;
7818
+ executionEpoch: number;
7819
+ /** @constant */
7820
+ state: "pending";
7821
+ };
7822
+ WorkflowExecutionRefusal: {
7823
+ /** @constant */
7824
+ refused: true;
7825
+ /** @enum {string} */
7826
+ reason: "not_stopped" | "not_failed" | "execution_in_flight" | "not_supported" | "run_in_progress";
7827
+ /** @enum {string} */
7828
+ state: "pending" | "running" | "draining" | "stopped" | "complete" | "failed";
7829
+ /** Format: uuid */
7830
+ workflowId: string;
7831
+ openWorkflowId?: string | null;
7832
+ };
7833
+ WorkflowRunAgainResponse: {
7834
+ /** @constant */
7835
+ launched: true;
7836
+ /** Format: uuid */
7837
+ workflowId: string;
7838
+ /** Format: uuid */
7839
+ relaunchedFrom: string;
7840
+ /** @constant */
7841
+ state: "pending";
7842
+ };
7843
+ RunAnalysisWorkflowAgainRequest: {
7844
+ /** Format: uuid */
7845
+ chatId: string;
7846
+ };
7589
7847
  AffordanceStateResponse: {
7590
7848
  entries: {
7591
7849
  /** @enum {string} */
7592
- id: "sourceSync.findFiles" | "integrations.connectGoogleDrive" | "sourceSync.enable" | "billing.open" | "orgStructure.reanalyze" | "hris.resyncDirectory" | "review.open" | "integrations.open" | "hris.connect" | "account.editProfile" | "workspace.openOrgSettings" | "sourceSync.addFile" | "sourceSync.openUpdate" | "orgStructure.openReview" | "chat.open" | "companyMd.openDoc" | "companyMd.openHistory" | "team.open" | "execution.open";
7850
+ id: "sourceSync.findFiles" | "integrations.connectGoogleDrive" | "sourceSync.enable" | "billing.open" | "orgStructure.reanalyze" | "hris.resyncDirectory" | "review.open" | "integrations.open" | "hris.connect" | "account.editProfile" | "workspace.openOrgSettings" | "sourceSync.addFile" | "sourceSync.openUpdate" | "orgStructure.openReview" | "chat.open" | "companyMd.openDoc" | "companyMd.openHistory" | "team.open" | "execution.open" | "workflow.stop" | "workflow.continue" | "workflow.retry" | "workflow.runAgain";
7593
7851
  /** @enum {string} */
7594
7852
  policy: "allowed" | "blocked";
7595
7853
  availability: {
@@ -8763,6 +9021,34 @@ export interface components {
8763
9021
  args: {
8764
9022
  executionId: string;
8765
9023
  };
9024
+ } | {
9025
+ /** @constant */
9026
+ id: "workflow.stop";
9027
+ args: {
9028
+ /** Format: uuid */
9029
+ workflowId: string;
9030
+ };
9031
+ } | {
9032
+ /** @constant */
9033
+ id: "workflow.continue";
9034
+ args: {
9035
+ /** Format: uuid */
9036
+ workflowId: string;
9037
+ };
9038
+ } | {
9039
+ /** @constant */
9040
+ id: "workflow.retry";
9041
+ args: {
9042
+ /** Format: uuid */
9043
+ workflowId: string;
9044
+ };
9045
+ } | {
9046
+ /** @constant */
9047
+ id: "workflow.runAgain";
9048
+ args: {
9049
+ /** Format: uuid */
9050
+ workflowId: string;
9051
+ };
8766
9052
  } | {
8767
9053
  /** @constant */
8768
9054
  id: "review.open";
@@ -8869,6 +9155,34 @@ export interface components {
8869
9155
  args: {
8870
9156
  executionId: string;
8871
9157
  };
9158
+ } | {
9159
+ /** @constant */
9160
+ id: "workflow.stop";
9161
+ args: {
9162
+ /** Format: uuid */
9163
+ workflowId: string;
9164
+ };
9165
+ } | {
9166
+ /** @constant */
9167
+ id: "workflow.continue";
9168
+ args: {
9169
+ /** Format: uuid */
9170
+ workflowId: string;
9171
+ };
9172
+ } | {
9173
+ /** @constant */
9174
+ id: "workflow.retry";
9175
+ args: {
9176
+ /** Format: uuid */
9177
+ workflowId: string;
9178
+ };
9179
+ } | {
9180
+ /** @constant */
9181
+ id: "workflow.runAgain";
9182
+ args: {
9183
+ /** Format: uuid */
9184
+ workflowId: string;
9185
+ };
8872
9186
  } | {
8873
9187
  /** @constant */
8874
9188
  id: "review.open";
@@ -10163,6 +10477,16 @@ export interface components {
10163
10477
  }[];
10164
10478
  }[];
10165
10479
  };
10480
+ PriceBookVersionList: {
10481
+ versions: {
10482
+ versionLabel: string;
10483
+ /** Format: date-time */
10484
+ effectiveAt: string;
10485
+ source: string;
10486
+ notes: string | null;
10487
+ active: boolean;
10488
+ }[];
10489
+ };
10166
10490
  SourceSyncDiscoveryRunResponse: {
10167
10491
  /** Format: uuid */
10168
10492
  runId: string;
@@ -14118,6 +14442,145 @@ export interface operations {
14118
14442
  };
14119
14443
  };
14120
14444
  };
14445
+ continueAnalysisWorkflow: {
14446
+ parameters: {
14447
+ query?: never;
14448
+ header?: never;
14449
+ path: {
14450
+ id: string;
14451
+ };
14452
+ cookie?: never;
14453
+ };
14454
+ requestBody?: never;
14455
+ responses: {
14456
+ /** @description Another execution of the same workflow is under way */
14457
+ 202: {
14458
+ headers: {
14459
+ [name: string]: unknown;
14460
+ };
14461
+ content: {
14462
+ "application/json": components["schemas"]["WorkflowExecutionStartedResponse"];
14463
+ };
14464
+ };
14465
+ /** @description The workflow id is not a uuid */
14466
+ 400: {
14467
+ headers: {
14468
+ [name: string]: unknown;
14469
+ };
14470
+ content?: never;
14471
+ };
14472
+ /** @description No such workflow in this workspace */
14473
+ 404: {
14474
+ headers: {
14475
+ [name: string]: unknown;
14476
+ };
14477
+ content?: never;
14478
+ };
14479
+ /** @description Nothing was started: the reason and the workflow’s authoritative current state */
14480
+ 409: {
14481
+ headers: {
14482
+ [name: string]: unknown;
14483
+ };
14484
+ content: {
14485
+ "application/json": components["schemas"]["WorkflowExecutionRefusal"];
14486
+ };
14487
+ };
14488
+ };
14489
+ };
14490
+ retryAnalysisWorkflow: {
14491
+ parameters: {
14492
+ query?: never;
14493
+ header?: never;
14494
+ path: {
14495
+ id: string;
14496
+ };
14497
+ cookie?: never;
14498
+ };
14499
+ requestBody?: never;
14500
+ responses: {
14501
+ /** @description Another execution of the same workflow is under way */
14502
+ 202: {
14503
+ headers: {
14504
+ [name: string]: unknown;
14505
+ };
14506
+ content: {
14507
+ "application/json": components["schemas"]["WorkflowExecutionStartedResponse"];
14508
+ };
14509
+ };
14510
+ /** @description The workflow id is not a uuid */
14511
+ 400: {
14512
+ headers: {
14513
+ [name: string]: unknown;
14514
+ };
14515
+ content?: never;
14516
+ };
14517
+ /** @description No such workflow in this workspace */
14518
+ 404: {
14519
+ headers: {
14520
+ [name: string]: unknown;
14521
+ };
14522
+ content?: never;
14523
+ };
14524
+ /** @description Nothing was started: the reason and the workflow’s authoritative current state */
14525
+ 409: {
14526
+ headers: {
14527
+ [name: string]: unknown;
14528
+ };
14529
+ content: {
14530
+ "application/json": components["schemas"]["WorkflowExecutionRefusal"];
14531
+ };
14532
+ };
14533
+ };
14534
+ };
14535
+ runAnalysisWorkflowAgain: {
14536
+ parameters: {
14537
+ query?: never;
14538
+ header?: never;
14539
+ path: {
14540
+ id: string;
14541
+ };
14542
+ cookie?: never;
14543
+ };
14544
+ requestBody: {
14545
+ content: {
14546
+ "application/json": components["schemas"]["RunAnalysisWorkflowAgainRequest"];
14547
+ };
14548
+ };
14549
+ responses: {
14550
+ /** @description A new workflow was launched and anchored in the conversation */
14551
+ 202: {
14552
+ headers: {
14553
+ [name: string]: unknown;
14554
+ };
14555
+ content: {
14556
+ "application/json": components["schemas"]["WorkflowRunAgainResponse"];
14557
+ };
14558
+ };
14559
+ /** @description The workflow id or the chat id is not a uuid */
14560
+ 400: {
14561
+ headers: {
14562
+ [name: string]: unknown;
14563
+ };
14564
+ content?: never;
14565
+ };
14566
+ /** @description No such workflow, or no such conversation the caller may write in */
14567
+ 404: {
14568
+ headers: {
14569
+ [name: string]: unknown;
14570
+ };
14571
+ content?: never;
14572
+ };
14573
+ /** @description Nothing was started: the reason and the workflow’s authoritative current state */
14574
+ 409: {
14575
+ headers: {
14576
+ [name: string]: unknown;
14577
+ };
14578
+ content: {
14579
+ "application/json": components["schemas"]["WorkflowExecutionRefusal"];
14580
+ };
14581
+ };
14582
+ };
14583
+ };
14121
14584
  getAffordanceState: {
14122
14585
  parameters: {
14123
14586
  query: {
@@ -20395,7 +20858,9 @@ export interface operations {
20395
20858
  };
20396
20859
  getBillingPriceList: {
20397
20860
  parameters: {
20398
- query?: never;
20861
+ query?: {
20862
+ version?: string;
20863
+ };
20399
20864
  header?: never;
20400
20865
  path?: never;
20401
20866
  cookie?: never;
@@ -20411,6 +20876,13 @@ export interface operations {
20411
20876
  "application/json": components["schemas"]["PriceList"];
20412
20877
  };
20413
20878
  };
20879
+ /** @description No price-book version carries that label */
20880
+ 404: {
20881
+ headers: {
20882
+ [name: string]: unknown;
20883
+ };
20884
+ content?: never;
20885
+ };
20414
20886
  /** @description No price book is loaded */
20415
20887
  503: {
20416
20888
  headers: {
@@ -20420,6 +20892,26 @@ export interface operations {
20420
20892
  };
20421
20893
  };
20422
20894
  };
20895
+ getBillingPriceBookVersions: {
20896
+ parameters: {
20897
+ query?: never;
20898
+ header?: never;
20899
+ path?: never;
20900
+ cookie?: never;
20901
+ };
20902
+ requestBody?: never;
20903
+ responses: {
20904
+ /** @description The price book version history */
20905
+ 200: {
20906
+ headers: {
20907
+ [name: string]: unknown;
20908
+ };
20909
+ content: {
20910
+ "application/json": components["schemas"]["PriceBookVersionList"];
20911
+ };
20912
+ };
20913
+ };
20914
+ };
20423
20915
  startSourceDiscoveryRun: {
20424
20916
  parameters: {
20425
20917
  query?: never;
@@ -11,9 +11,13 @@ export const openApiRoutes = {
11
11
  '/api/account/sessions/{sessionId}': ['DELETE'],
12
12
  '/api/affordances/state': ['GET'],
13
13
  '/api/analysis-workflows/{id}': ['GET'],
14
+ '/api/analysis-workflows/{id}/continue': ['POST'],
15
+ '/api/analysis-workflows/{id}/retry': ['POST'],
16
+ '/api/analysis-workflows/{id}/run-again': ['POST'],
14
17
  '/api/analysis-workflows/{id}/settlement': ['POST'],
15
18
  '/api/analysis-workflows/{id}/stop': ['POST'],
16
19
  '/api/auth/consent/grant': ['POST'],
20
+ '/api/billing/price-book-versions': ['GET'],
17
21
  '/api/billing/price-list': ['GET'],
18
22
  '/api/capabilities': ['GET'],
19
23
  '/api/chat/interactive-tasks/submit': ['POST'],
@@ -215,9 +215,41 @@ export type {
215
215
  // chat part and by the generic projection read. Namespaced `<domain>/<flow>`
216
216
  // so domains cannot collide, and a CLOSED const array so the discriminator is
217
217
  // validated and handled exhaustively. See src/workflows/README.md.
218
- export { ANALYSIS_WORKFLOW_TYPES, isWorkflowType } from "../workflows/index";
218
+ export {
219
+ ANALYSIS_WORKFLOW_STATES,
220
+ ANALYSIS_WORKFLOW_TYPES,
221
+ isWorkflowType,
222
+ } from "../workflows/index";
223
+
224
+ export type { AnalysisWorkflowState, WorkflowType } from "../workflows/index";
225
+
226
+ // Workflow execution actions (ADR-CONTRACTS-227): `executionAffordancesFor` is
227
+ // the one total offer table from a workflow's state, its type's support and
228
+ // its frozen outcome to the workflow.* affordances. See
229
+ // src/workflows/execution-affordances.ts.
230
+ export {
231
+ DOMAIN_RELAUNCH_AFFORDANCE_IDS,
232
+ WORKFLOW_EXECUTION_ACTIONS,
233
+ executionAffordancesFor,
234
+ } from "../workflows/index";
235
+
236
+ export type {
237
+ ExecutionAffordancesInput,
238
+ WorkflowExecutionAction,
239
+ WorkflowExecutionAffordance,
240
+ WorkflowExecutionSupport,
241
+ } from "../workflows/index";
242
+
243
+ // Workflow execution projection fields (ADR-CONTRACTS-227): the offered
244
+ // workflow.* affordances, relaunch lineage and per-epoch timing the backend
245
+ // composes into its (backend-local) workflow projection. See
246
+ // src/workflows/projection-fields.ts.
247
+ export {
248
+ WorkflowExecutionAffordanceSchema,
249
+ WorkflowExecutionProjectionFieldsSchema,
250
+ } from "../workflows/index";
219
251
 
220
- export type { WorkflowType } from "../workflows/index";
252
+ export type { WorkflowExecutionProjectionFields } from "../workflows/index";
221
253
 
222
254
  // The typed outcome of a workflow's terminal transition (control ADR-CTRL-540):
223
255
  // per-type closed reasons, typed facts and an explicit disposition, classified
@@ -317,6 +349,7 @@ export {
317
349
  ReviewOpenArgsSchema,
318
350
  SourceSyncOpenUpdateArgsSchema,
319
351
  TeamOpenArgsSchema,
352
+ WorkflowExecutionArgsSchema,
320
353
  sameAffordances,
321
354
  } from "../affordances/index";
322
355