@masterteam/flowplus-workflow 0.0.8 → 0.0.10

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.
@@ -1,10 +1,11 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { InjectionToken, Provider, EventEmitter, OnDestroy } from '@angular/core';
2
+ import { InjectionToken, Provider, EventEmitter, OnDestroy, OnInit } from '@angular/core';
3
+ import * as rxjs from 'rxjs';
3
4
  import { Observable } from 'rxjs';
4
5
  import { MTIcon } from '@masterteam/icons';
5
6
  import * as _masterteam_flowplus_workflow from '@masterteam/flowplus-workflow';
6
7
  import { StateContext } from '@ngxs/store';
7
- import { LoadingStateShape, DynamicFormConfig } from '@masterteam/components';
8
+ import { LoadingStateShape, CrudStateBase, DynamicFormConfig } from '@masterteam/components';
8
9
  import { UrlTree, Routes } from '@angular/router';
9
10
  import { ModalRef } from '@masterteam/components/dialog';
10
11
  import { BreadcrumbItem } from '@masterteam/components/breadcrumb';
@@ -1229,9 +1230,101 @@ interface EngineEventDto {
1229
1230
  }>;
1230
1231
  }
1231
1232
 
1233
+ /**
1234
+ * AI node contracts (Builder + Execution Inspector).
1235
+ *
1236
+ * Source of truth: `Docs/AI_NODE_FRONTEND_IMPLEMENTATION_GUIDE.md`.
1237
+ *
1238
+ * CRITICAL PRODUCT RULES (enforced by the Builder UI):
1239
+ * - AI node configuration NEVER carries provider / model / credential /
1240
+ * base-url / tool / script fields. Those live only in Control Panel ->
1241
+ * Automation Engine -> Integrations. See {@link AI_FORBIDDEN_NODE_CONFIG_KEYS}.
1242
+ * - Builder AI nodes are catalog-driven from `helperMetadata.ai`. The FE must
1243
+ * not hardcode AI node schemas.
1244
+ * - The Execution Inspector may show safe {@link ExecutionNodeAiSummary}
1245
+ * metadata only — never raw prompt, raw response, or secrets.
1246
+ */
1247
+ type AiNodeKind = 'generic' | 'specialized';
1248
+ /**
1249
+ * Typed view of `NodeTypeCatalogItem.helperMetadata.ai`. All fields are
1250
+ * backend-driven; the Builder reads them to decide which config form to render.
1251
+ */
1252
+ interface AiNodeHelperMetadata {
1253
+ /** `generic` (prompt/instructions) or `specialized` (wrapper config). */
1254
+ nodeKind: AiNodeKind;
1255
+ /** Generic node preset, e.g. `generate | extract | classify | route | summarize`. */
1256
+ preset?: string | null;
1257
+ /** Specialized node type, e.g. `ai.ticketTriage`, `ai.textRiskClassifier`. */
1258
+ specializedNodeType?: string | null;
1259
+ /** Always true — AI nodes use the global Control Panel AI profile. */
1260
+ usesGlobalAiProfile?: boolean;
1261
+ supportsStructuredOutput?: boolean;
1262
+ /** Generic nodes: when true the FE must require prompt OR instructions. */
1263
+ requiresPromptOrInstructions?: boolean;
1264
+ hasSideEffects?: boolean;
1265
+ publishable?: boolean;
1266
+ /** When false, the node is catalog-visible but not runtime-executable. */
1267
+ runtimeImplemented?: boolean;
1268
+ [key: string]: unknown;
1269
+ }
1270
+ /**
1271
+ * Persisted wrapper config for a SPECIALIZED AI node. The root wrapper is
1272
+ * required for backend publish/runtime; `config` is descriptor-specific.
1273
+ */
1274
+ interface SpecializedAiNodeConfig {
1275
+ specializedNodeType: string;
1276
+ inputMapping: Record<string, unknown>;
1277
+ config: Record<string, unknown>;
1278
+ }
1279
+ /** Config shape for a GENERIC AI node (no provider/model/credential fields). */
1280
+ interface GenericAiNodeConfig {
1281
+ prompt?: string | null;
1282
+ instructions?: string | null;
1283
+ /** Optional structured-output JSON schema (when supportsStructuredOutput). */
1284
+ outputSchema?: unknown;
1285
+ [key: string]: unknown;
1286
+ }
1287
+ /**
1288
+ * Keys that must NEVER appear in AI node configuration. The Builder strips /
1289
+ * rejects these to keep provider/model/credential config out of nodes.
1290
+ */
1291
+ declare const AI_FORBIDDEN_NODE_CONFIG_KEYS: readonly string[];
1292
+ /**
1293
+ * Safe AI execution summary attached to a node run / node-data detail
1294
+ * (`node.ai`). Diagnostic metadata only — separate from business output.
1295
+ * NEVER includes raw prompt, raw response, API keys, or decrypted values.
1296
+ */
1297
+ interface ExecutionNodeAiSummary {
1298
+ isAiNode: boolean;
1299
+ nodeKind?: AiNodeKind | null;
1300
+ preset?: string | null;
1301
+ specializedNodeType?: string | null;
1302
+ profileKey?: string | null;
1303
+ providerKey?: string | null;
1304
+ model?: string | null;
1305
+ inputTokens?: number | null;
1306
+ outputTokens?: number | null;
1307
+ totalTokens?: number | null;
1308
+ estimatedCost?: number | null;
1309
+ durationMs?: number | null;
1310
+ promptHash?: string | null;
1311
+ responseHash?: string | null;
1312
+ rawPromptStored?: boolean | null;
1313
+ rawResponseStored?: boolean | null;
1314
+ outputValidation?: string | null;
1315
+ lastErrorCode?: string | null;
1316
+ lastErrorMessage?: string | null;
1317
+ }
1318
+ /**
1319
+ * Reads and narrows `helperMetadata.ai`. Accepts the raw `helperMetadata`
1320
+ * record (not the catalog item) to avoid a circular contract dependency.
1321
+ * Returns null when the node is not an AI node.
1322
+ */
1323
+ declare function readAiNodeHelperMetadata(helperMetadata: Record<string, unknown> | null | undefined): AiNodeHelperMetadata | null;
1324
+
1232
1325
  type AutomationStatus = 'Draft' | 'Active' | 'Inactive' | 'Published' | 'Archived' | string;
1233
1326
  type AutomationTriggerType = 'ManualTrigger' | 'WebhookTrigger' | 'FormSubmitTrigger' | 'ScheduleTrigger' | string;
1234
- type AutomationNodeType = 'SetFields' | 'If' | 'HTTP' | 'Wait' | 'HumanTask' | 'HumanApproval' | 'FlowPlusCommit' | 'ConnectorAction' | 'ConvertToFile' | 'LoopOverItems' | 'DataTransform' | 'WebhookResponse' | 'Stop' | 'CallAutomation' | 'Subworkflow' | 'ParallelStart' | 'ParallelJoin' | 'Switch' | string;
1327
+ type AutomationNodeType = 'SetFields' | 'If' | 'HTTP' | 'Wait' | 'HumanTask' | 'HumanApproval' | 'FlowPlusCommit' | 'ConnectorAction' | 'BusinessAction' | 'ConvertToFile' | 'LoopOverItems' | 'DataTransform' | 'WebhookResponse' | 'Stop' | 'CallAutomation' | 'Subworkflow' | 'ParallelStart' | 'ParallelJoin' | 'Switch' | string;
1235
1328
  type AutomationExecutionStatus = 'Queued' | 'Running' | 'Waiting' | 'Paused' | 'PausedOnFailure' | 'Succeeded' | 'Failed' | 'Canceled' | 'Cancelled' | 'TimedOut' | string;
1236
1329
  interface AutomationSummary {
1237
1330
  automationId: number | string;
@@ -1390,6 +1483,7 @@ interface AutomationBuilderCatalog {
1390
1483
  nodeTypes: NodeTypeCatalogItem[];
1391
1484
  triggerTypes: TriggerTypeCatalogItem[];
1392
1485
  connectorCatalog?: ConnectorCatalog | null;
1486
+ businessActionCatalog?: BusinessActionCatalog | null;
1393
1487
  convertToFileCatalog?: ConvertToFileCatalog | null;
1394
1488
  dataTransformCatalog?: DataTransformCatalog | null;
1395
1489
  expressionNamespaces?: ExpressionNamespaceDescriptor[];
@@ -1441,6 +1535,203 @@ interface ConnectorActionCatalogItem {
1441
1535
  helperMetadata?: Record<string, unknown> | null;
1442
1536
  [key: string]: unknown;
1443
1537
  }
1538
+ interface BusinessActionCatalog {
1539
+ apps?: BusinessActionApp[];
1540
+ actions?: BusinessActionDefinition[];
1541
+ }
1542
+ interface BusinessActionAppsResult {
1543
+ apps?: BusinessActionApp[];
1544
+ }
1545
+ interface BusinessActionListResult {
1546
+ actions?: BusinessActionDefinition[];
1547
+ }
1548
+ interface BusinessActionApp {
1549
+ appKey: string;
1550
+ displayName?: string | null;
1551
+ serviceName?: string | null;
1552
+ available?: boolean;
1553
+ unavailableReason?: string | null;
1554
+ [key: string]: unknown;
1555
+ }
1556
+ interface BusinessActionField {
1557
+ key: string;
1558
+ label?: string | null;
1559
+ displayName?: string | null;
1560
+ description?: string | null;
1561
+ type?: string | null;
1562
+ dataType?: string | null;
1563
+ required?: boolean;
1564
+ defaultValueJson?: string | null;
1565
+ defaultValue?: unknown;
1566
+ controlType?: string | null;
1567
+ optionsProviderKey?: string | null;
1568
+ visibilityRule?: string | null;
1569
+ validationRule?: string | null;
1570
+ helpText?: string | null;
1571
+ exampleJson?: string | null;
1572
+ options?: BusinessActionOption[];
1573
+ [key: string]: unknown;
1574
+ }
1575
+ interface BusinessActionOptionProvider {
1576
+ key: string;
1577
+ fieldKey?: string | null;
1578
+ displayName?: string | null;
1579
+ requiresContext?: boolean;
1580
+ [key: string]: unknown;
1581
+ }
1582
+ interface BusinessActionDefinition {
1583
+ appKey: string;
1584
+ appDisplayName?: string | null;
1585
+ actionKey: string;
1586
+ displayName?: string | null;
1587
+ description?: string | null;
1588
+ category?: string | null;
1589
+ icon?: string | null;
1590
+ tags?: string[];
1591
+ configFields?: BusinessActionField[];
1592
+ inputFields?: BusinessActionField[];
1593
+ outputFields?: BusinessActionField[];
1594
+ optionProviders?: BusinessActionOptionProvider[];
1595
+ schemaHash?: string | null;
1596
+ sideEffectLevel?: string | null;
1597
+ dangerLevel?: string | null;
1598
+ supportsValidation?: boolean;
1599
+ supportsTest?: boolean;
1600
+ supportsDryRun?: boolean;
1601
+ supportsIdempotency?: boolean;
1602
+ timeoutDefaultSeconds?: number | null;
1603
+ retryDefaultMaxAttempts?: number | null;
1604
+ permissionHints?: string[];
1605
+ helpText?: string | null;
1606
+ sampleInputJson?: string | null;
1607
+ sampleOutputJson?: string | null;
1608
+ [key: string]: unknown;
1609
+ }
1610
+ interface BusinessActionNodeConfig {
1611
+ appKey?: string | null;
1612
+ actionKey?: string | null;
1613
+ schemaHash?: string | null;
1614
+ config?: Record<string, unknown>;
1615
+ inputMapping?: Record<string, unknown>;
1616
+ timeoutSeconds?: number | null;
1617
+ failureBehavior?: string | null;
1618
+ retryPolicy?: Record<string, unknown> | null;
1619
+ idempotencyKeyExpression?: string | null;
1620
+ actorMode?: string | null;
1621
+ allowSchemaDrift?: boolean;
1622
+ businessActionDefinition?: BusinessActionDefinition | null;
1623
+ [key: string]: unknown;
1624
+ }
1625
+ interface BusinessActionDiscoveryContext {
1626
+ tenantId?: string | null;
1627
+ tenant_id?: string | null;
1628
+ metadata?: Record<string, string>;
1629
+ }
1630
+ interface BusinessActionAutomationContext {
1631
+ tenantId?: string | null;
1632
+ tenant_id?: string | null;
1633
+ automationId?: number | string | null;
1634
+ automation_id?: number | string | null;
1635
+ automationRevisionId?: number | string | null;
1636
+ automation_revision_id?: number | string | null;
1637
+ executionId?: number | string | null;
1638
+ execution_id?: number | string | null;
1639
+ nodeRunId?: number | string | null;
1640
+ node_run_id?: number | string | null;
1641
+ nodeAttemptId?: number | string | null;
1642
+ node_attempt_id?: number | string | null;
1643
+ nodeKey?: string | null;
1644
+ node_key?: string | null;
1645
+ correlationId?: string | null;
1646
+ correlation_id?: string | null;
1647
+ }
1648
+ interface BusinessActionOptionsRequest {
1649
+ appKey?: string;
1650
+ app_key?: string;
1651
+ actionKey?: string;
1652
+ action_key?: string;
1653
+ fieldKey?: string;
1654
+ field_key?: string;
1655
+ configJson?: string;
1656
+ config_json?: string;
1657
+ inputJson?: string;
1658
+ input_json?: string;
1659
+ discoveryContext?: BusinessActionDiscoveryContext;
1660
+ discovery_context?: BusinessActionDiscoveryContext;
1661
+ automationContext?: BusinessActionAutomationContext;
1662
+ automation_context?: BusinessActionAutomationContext;
1663
+ }
1664
+ interface BusinessActionOption {
1665
+ value: string;
1666
+ label?: string | null;
1667
+ disabled?: boolean;
1668
+ metadata?: Record<string, string>;
1669
+ [key: string]: unknown;
1670
+ }
1671
+ interface BusinessActionOptionsResponse {
1672
+ success?: boolean;
1673
+ options?: BusinessActionOption[];
1674
+ error?: BusinessActionError | null;
1675
+ }
1676
+ interface BusinessActionValidateRequest {
1677
+ appKey?: string;
1678
+ app_key?: string;
1679
+ actionKey?: string;
1680
+ action_key?: string;
1681
+ configJson?: string;
1682
+ config_json?: string;
1683
+ inputJson?: string;
1684
+ input_json?: string;
1685
+ discoveryContext?: BusinessActionDiscoveryContext;
1686
+ discovery_context?: BusinessActionDiscoveryContext;
1687
+ automationContext?: BusinessActionAutomationContext;
1688
+ automation_context?: BusinessActionAutomationContext;
1689
+ }
1690
+ interface BusinessActionValidationIssue {
1691
+ code?: string | null;
1692
+ message?: string | null;
1693
+ target?: string | null;
1694
+ }
1695
+ interface BusinessActionValidateResponse {
1696
+ valid?: boolean;
1697
+ issues?: BusinessActionValidationIssue[];
1698
+ }
1699
+ interface BusinessActionActorContext {
1700
+ mode?: string | null;
1701
+ mode_key?: string | null;
1702
+ effectiveActorId?: string | null;
1703
+ effective_actor_id?: string | null;
1704
+ attributedActorId?: string | null;
1705
+ attributed_actor_id?: string | null;
1706
+ }
1707
+ interface BusinessActionTestRequest {
1708
+ appKey?: string;
1709
+ app_key?: string;
1710
+ actionKey?: string;
1711
+ action_key?: string;
1712
+ configJson?: string;
1713
+ config_json?: string;
1714
+ inputJson?: string;
1715
+ input_json?: string;
1716
+ dryRun?: boolean;
1717
+ dry_run?: boolean;
1718
+ actor?: BusinessActionActorContext;
1719
+ automationContext?: BusinessActionAutomationContext;
1720
+ automation_context?: BusinessActionAutomationContext;
1721
+ }
1722
+ interface BusinessActionError {
1723
+ code?: string | null;
1724
+ message?: string | null;
1725
+ retryable?: boolean;
1726
+ detailJson?: string | null;
1727
+ detail_json?: string | null;
1728
+ }
1729
+ interface BusinessActionTestResponse {
1730
+ success?: boolean;
1731
+ outputJson?: string | null;
1732
+ output_json?: string | null;
1733
+ error?: BusinessActionError | null;
1734
+ }
1444
1735
  interface ConvertToFileCatalog {
1445
1736
  actions?: ConvertToFileActionCatalogItem[];
1446
1737
  }
@@ -1482,6 +1773,256 @@ interface DataTransformActionCatalogItem {
1482
1773
  helperMetadata?: Record<string, unknown> | null;
1483
1774
  [key: string]: unknown;
1484
1775
  }
1776
+ /**
1777
+ * Backend-authored UI hints that drive the generic node Configure renderer
1778
+ * (`fp-config-form`). Additive and optional: when absent, the renderer infers
1779
+ * fields from `configSchema`. The backend owns labels, help, ordering,
1780
+ * sectioning, conditional visibility, and which widget renders each field.
1781
+ */
1782
+ type ConfigFieldWidget = 'text' | 'textarea' | 'number' | 'toggle' | 'date' | 'select' | 'multiselect' | 'radio-cards' | 'expression' | 'key-value-map' | 'code-json' | 'chips' | 'list' | 'group' | 'assignment-picker' | 'decision-list' | 'case-list' | 'branch-list' | 'response-options' | 'module-mapping' | 'business-action' | 'convert-to-file' | 'schedule' | 'array-source' | 'credential' | 'webhook-setup' | 'read-only-schema' | `capability:${string}` | (string & {});
1783
+ interface ConfigUiVisibilityRule {
1784
+ field: string;
1785
+ equals?: string | number | boolean | null;
1786
+ notEquals?: string | number | boolean | null;
1787
+ in?: Array<string | number | boolean>;
1788
+ truthy?: boolean;
1789
+ }
1790
+ /**
1791
+ * Declarative dynamic option source for a `select`/`multiselect`/`radio-cards`
1792
+ * field. The renderer issues a gateway request (the host interceptor prepends
1793
+ * the gateway base/auth/tenant) and maps the response items to `{ value, label }`.
1794
+ * Reloads automatically when any `dependsOn` field in the same scope changes.
1795
+ */
1796
+ interface ConfigUiOptionsSource {
1797
+ /** Bare relative gateway path, e.g. `control-panel/automation-engine/builder/credentials`. */
1798
+ endpoint: string;
1799
+ method?: 'GET' | 'POST' | null;
1800
+ /** Sibling field keys whose change triggers an options reload. */
1801
+ dependsOn?: string[] | null;
1802
+ /**
1803
+ * Query params (GET) or request body (POST). String values may interpolate
1804
+ * `{fieldKey}` (sibling config value), `{automationId}` and `{nodeKey}`.
1805
+ */
1806
+ params?: Record<string, string | number | boolean | null> | null;
1807
+ /** Dotted path to the items array in the response (e.g. `items`, `apps`). */
1808
+ itemsPath?: string | null;
1809
+ /** Item property used for the option value (default tries value/key/id). */
1810
+ valueKey?: string | null;
1811
+ /** Item property used for the option label (default tries label/displayName/name). */
1812
+ labelKey?: string | null;
1813
+ }
1814
+ /** Per-row schema for a repeatable `list` field. Each row renders recursively. */
1815
+ interface ConfigUiListItemSchema {
1816
+ /** Ordered child field keys rendered in each row. */
1817
+ order?: string[] | null;
1818
+ /** Child field hints (same shape as top-level fields). */
1819
+ fields: Record<string, ConfigUiFieldHint>;
1820
+ addLabel?: TranslatableText | string | null;
1821
+ removeLabel?: TranslatableText | string | null;
1822
+ itemNoun?: TranslatableText | string | null;
1823
+ /** Default object for a newly added row. */
1824
+ itemDefault?: Record<string, unknown> | null;
1825
+ /** Allow drag-to-reorder rows. */
1826
+ reorderable?: boolean | null;
1827
+ /** Minimum number of rows (remove is blocked below this). */
1828
+ minItems?: number | null;
1829
+ }
1830
+ /** Nested object schema for a `group` field. Writes to `config[groupKey]`. */
1831
+ interface ConfigUiGroupSchema {
1832
+ /** Config key the group object is written to (defaults to the field key). */
1833
+ groupKey?: string | null;
1834
+ /** Ordered child field keys. */
1835
+ order?: string[] | null;
1836
+ /** Child field hints. */
1837
+ fields: Record<string, ConfigUiFieldHint>;
1838
+ }
1839
+ /** Derive a field value from another field in the same scope. */
1840
+ interface ConfigUiComputedRule {
1841
+ /** Source sibling field key. */
1842
+ from: string;
1843
+ /** Optional value→value mapping; without it the source value is mirrored. */
1844
+ map?: Record<string, string> | null;
1845
+ }
1846
+ /**
1847
+ * When a select option is chosen, write a companion config key from the chosen
1848
+ * option's backing data (the raw `optionsSource` item). Models legacy widgets
1849
+ * that persist a derived key alongside the id — e.g. CallAutomation writes
1850
+ * `targetAutomationKey` next to `targetAutomationId`.
1851
+ */
1852
+ interface ConfigUiCompanionWrite {
1853
+ /** Config key to write. */
1854
+ target: string;
1855
+ /** Option-data keys to read, first non-empty wins. */
1856
+ sources?: string[] | null;
1857
+ /** When no source resolves, fall back to the selected option value. */
1858
+ fallbackToValue?: boolean | null;
1859
+ }
1860
+ interface ConfigUiFieldHint {
1861
+ label?: TranslatableText | string | null;
1862
+ help?: TranslatableText | string | null;
1863
+ placeholder?: TranslatableText | string | null;
1864
+ widget?: ConfigFieldWidget | null;
1865
+ order?: number | null;
1866
+ required?: boolean | null;
1867
+ hidden?: boolean | null;
1868
+ /** Value shown when the config has no value yet (display-only; not persisted). */
1869
+ default?: unknown;
1870
+ options?: Array<{
1871
+ value: string;
1872
+ label: TranslatableText | string;
1873
+ /** Backing data for companion writes (e.g. a derived sibling value). */
1874
+ data?: Record<string, unknown>;
1875
+ }> | null;
1876
+ /** Static endpoint key (legacy) or a declarative dynamic option source. */
1877
+ optionsSource?: string | ConfigUiOptionsSource | null;
1878
+ enumLabels?: Record<string, TranslatableText | string> | null;
1879
+ visibleWhen?: ConfigUiVisibilityRule | ConfigUiVisibilityRule[] | null;
1880
+ /** Toggles `required` based on sibling values (same rule grammar as visibleWhen). */
1881
+ requiredWhen?: ConfigUiVisibilityRule | ConfigUiVisibilityRule[] | null;
1882
+ /** Toggles `disabled` based on sibling values. */
1883
+ disabledWhen?: ConfigUiVisibilityRule | ConfigUiVisibilityRule[] | null;
1884
+ /** When this field changes, reset/delete these sibling field keys. */
1885
+ clears?: string[] | null;
1886
+ /**
1887
+ * Gate for `clears`: only clear the listed siblings when this rule matches the
1888
+ * post-change values (e.g. HTTP clears the body only when `method` is `GET`).
1889
+ * When omitted, `clears` always fires.
1890
+ */
1891
+ clearWhen?: ConfigUiVisibilityRule | ConfigUiVisibilityRule[] | null;
1892
+ /**
1893
+ * Multiple independent conditional clear sets — each fires when its own
1894
+ * `clearWhen` matches the post-change values. Models mode-exclusive nodes that
1895
+ * clear several different key groups depending on the chosen mode (e.g. Wait
1896
+ * clears duration / until / manual key groups based on `mode`).
1897
+ */
1898
+ clearGroups?: Array<{
1899
+ clearWhen?: ConfigUiVisibilityRule | ConfigUiVisibilityRule[] | null;
1900
+ clears: string[];
1901
+ }> | null;
1902
+ /** Select-only: companion keys written from the chosen option's data. */
1903
+ companions?: ConfigUiCompanionWrite[] | null;
1904
+ /** Derive this field's value from a sibling field. */
1905
+ computed?: ConfigUiComputedRule | null;
1906
+ /**
1907
+ * When inside a `group`, persist this field's `default` automatically once any
1908
+ * other (non-seed) field in the same group has a value — and re-seed it if it
1909
+ * is cleared while siblings remain. Models the legacy "operator defaults to
1910
+ * equals when a side is filled" behavior so the persisted object is identical.
1911
+ */
1912
+ seedDefault?: boolean | null;
1913
+ /**
1914
+ * Apply value coercion on write (numeric→number, "true"/"false"→boolean,
1915
+ * JSON-looking→parsed) to match the legacy composite widgets byte-for-byte.
1916
+ */
1917
+ coerce?: boolean | null;
1918
+ /** Wrap the input with the data-pill expression affordance. */
1919
+ expression?: boolean | null;
1920
+ /** Repeatable-row schema when `widget` is `list`. */
1921
+ itemSchema?: ConfigUiListItemSchema | null;
1922
+ /** Nested-object schema when `widget` is `group`. */
1923
+ group?: ConfigUiGroupSchema | null;
1924
+ widgetOptions?: Record<string, unknown> | null;
1925
+ validation?: {
1926
+ min?: number | null;
1927
+ max?: number | null;
1928
+ minLength?: number | null;
1929
+ maxLength?: number | null;
1930
+ pattern?: string | null;
1931
+ messages?: Record<string, string> | null;
1932
+ } | null;
1933
+ }
1934
+ interface ConfigUiSection {
1935
+ key: string;
1936
+ title?: TranslatableText | string | null;
1937
+ description?: TranslatableText | string | null;
1938
+ order?: number | null;
1939
+ collapsible?: boolean | null;
1940
+ collapsed?: boolean | null;
1941
+ visibleWhen?: ConfigUiVisibilityRule | ConfigUiVisibilityRule[] | null;
1942
+ fields: string[];
1943
+ }
1944
+ interface ConfigUiAction {
1945
+ key: string;
1946
+ label: TranslatableText | string;
1947
+ help?: TranslatableText | string | null;
1948
+ /** FE capability handler key (e.g. `capability:test-run`); rare escape hatch. */
1949
+ capability?: string | null;
1950
+ style?: 'primary' | 'secondary' | 'outlined' | null;
1951
+ /** Declarative form — call a gateway endpoint and render the result. */
1952
+ endpoint?: string | null;
1953
+ method?: 'GET' | 'POST' | null;
1954
+ /** Config field keys whose values are sent in the request body. */
1955
+ sends?: string[] | null;
1956
+ /** Static params/body merged into the request. */
1957
+ params?: Record<string, unknown> | null;
1958
+ /** How the action result is surfaced. */
1959
+ rendersResult?: 'issues' | 'json' | 'preview' | 'toast' | null;
1960
+ /** Optional section key to anchor the action under a specific section. */
1961
+ section?: string | null;
1962
+ }
1963
+ interface NodeConfigUiSchema {
1964
+ version?: number;
1965
+ sections?: ConfigUiSection[];
1966
+ fields?: Record<string, ConfigUiFieldHint>;
1967
+ actions?: ConfigUiAction[];
1968
+ }
1969
+ /** A single editable field in the inline form designer. */
1970
+ interface InlineFormFieldDraft {
1971
+ key: string;
1972
+ label: string;
1973
+ /** Form control component (text/number/select/date/textarea/toggle/…). */
1974
+ component: string;
1975
+ required?: boolean;
1976
+ options?: Array<{
1977
+ value: string;
1978
+ label: string;
1979
+ }>;
1980
+ }
1981
+ interface InlineFormCreateRequest {
1982
+ triggerKey?: string | null;
1983
+ nodeKey?: string | null;
1984
+ key: string;
1985
+ displayName: string;
1986
+ moduleDefinitionId?: number | null;
1987
+ purpose?: string | null;
1988
+ schemaSnapshotJson: string;
1989
+ layoutSnapshotJson: string;
1990
+ fieldBindingSnapshotJson: string;
1991
+ validationRulesSnapshotJson?: string;
1992
+ visibilityRulesSnapshotJson?: string;
1993
+ }
1994
+ interface InlineFormDraftUpdateRequest {
1995
+ /** Optimistic-concurrency guard — the hash last returned for this draft. */
1996
+ expectedRevisionHash: string;
1997
+ schemaSnapshotJson: string;
1998
+ layoutSnapshotJson: string;
1999
+ fieldBindingSnapshotJson: string;
2000
+ validationRulesSnapshotJson?: string;
2001
+ visibilityRulesSnapshotJson?: string;
2002
+ }
2003
+ interface InlineFormDraftResult {
2004
+ formDefinitionId: number | string;
2005
+ draftRevisionId: number | string;
2006
+ revisionHash?: string | null;
2007
+ formSource?: string | null;
2008
+ moduleDefinitionId?: number | null;
2009
+ createdFromTriggerKey?: string | null;
2010
+ [key: string]: unknown;
2011
+ }
2012
+ interface InlineFormDraftValidationIssue {
2013
+ code?: string | null;
2014
+ severity?: string | null;
2015
+ message?: string | null;
2016
+ targetKind?: string | null;
2017
+ formDefinitionId?: number | null;
2018
+ formRevisionId?: number | null;
2019
+ formFieldPath?: string | null;
2020
+ }
2021
+ interface InlineFormDraftValidationResult {
2022
+ isValid?: boolean;
2023
+ revisionHash?: string | null;
2024
+ issues?: InlineFormDraftValidationIssue[];
2025
+ }
1485
2026
  interface NodeTypeCatalogItem {
1486
2027
  type?: AutomationNodeType;
1487
2028
  nodeType?: AutomationNodeType;
@@ -1494,6 +2035,7 @@ interface NodeTypeCatalogItem {
1494
2035
  colorToken?: string | null;
1495
2036
  routeOutputKeys?: string[];
1496
2037
  configSchema?: unknown;
2038
+ configUiSchema?: NodeConfigUiSchema | null;
1497
2039
  inputSchema?: unknown;
1498
2040
  outputSchema?: unknown;
1499
2041
  credentialRequirements?: unknown[];
@@ -1506,7 +2048,13 @@ interface NodeTypeCatalogItem {
1506
2048
  defaultRetryPolicy?: Record<string, unknown> | null;
1507
2049
  defaultTimeoutPolicy?: Record<string, unknown> | null;
1508
2050
  defaults?: Record<string, unknown> | null;
1509
- helperMetadata?: Record<string, unknown> | null;
2051
+ /**
2052
+ * Generic catalog metadata. For AI nodes the `ai` slice is typed — read it
2053
+ * via {@link readAiNodeHelperMetadata} to drive AI node config rendering.
2054
+ */
2055
+ helperMetadata?: (Record<string, unknown> & {
2056
+ ai?: AiNodeHelperMetadata;
2057
+ }) | null;
1510
2058
  validationRequirements?: Record<string, unknown> | string[] | null;
1511
2059
  canCreate?: boolean;
1512
2060
  isAvailable?: boolean;
@@ -1541,6 +2089,7 @@ interface TriggerTypeCatalogItem {
1541
2089
  icon?: string | null;
1542
2090
  iconKey?: string | null;
1543
2091
  configSchema?: unknown;
2092
+ configUiSchema?: NodeConfigUiSchema | null;
1544
2093
  authPolicySchema?: unknown;
1545
2094
  payloadSchema?: unknown;
1546
2095
  supportsTest?: boolean;
@@ -1714,12 +2263,206 @@ interface FlowPlusCommitMappingValidationRequest {
1714
2263
  nodeKey?: string | null;
1715
2264
  [key: string]: unknown;
1716
2265
  }
2266
+ type ModuleDefinitionStatus = 'Draft' | 'Active' | 'Archived' | string;
2267
+ type ModuleFieldDataType = 'Text' | 'LongText' | 'Integer' | 'Decimal' | 'Boolean' | 'Date' | 'DateTime' | 'Lookup' | 'Json' | number | string;
2268
+ type ModuleFieldStorageType = 'String' | 'Int64' | 'Decimal' | 'Boolean' | 'DateTime' | 'Json' | number | string;
2269
+ interface CanonicalModuleDefinitionListParams extends Record<string, string | number | boolean | null | undefined> {
2270
+ status?: ModuleDefinitionStatus | null;
2271
+ search?: string | null;
2272
+ }
2273
+ interface CanonicalModuleDefinitionSummary {
2274
+ moduleDefinitionId: number;
2275
+ tenantId?: string | null;
2276
+ key: string;
2277
+ displayName: string;
2278
+ description?: string | null;
2279
+ projectId?: string | null;
2280
+ ownerId?: string | null;
2281
+ status?: ModuleDefinitionStatus | null;
2282
+ defaultFormDefinitionId?: number | null;
2283
+ fieldCount?: number | null;
2284
+ createdAtUtc?: string | null;
2285
+ updatedAtUtc?: string | null;
2286
+ createdBy?: string | null;
2287
+ updatedBy?: string | null;
2288
+ }
2289
+ interface CanonicalModuleDefinitionDetail extends CanonicalModuleDefinitionSummary {
2290
+ capabilitiesJson?: string | null;
2291
+ recordIdentityPolicyJson?: string | null;
2292
+ concurrencyPolicyJson?: string | null;
2293
+ fields?: CanonicalModuleField[];
2294
+ }
2295
+ interface CreateCanonicalModuleDefinitionRequest {
2296
+ key: string;
2297
+ displayName: string;
2298
+ description?: string | null;
2299
+ status?: ModuleDefinitionStatus | null;
2300
+ }
2301
+ interface CanonicalModuleSchema {
2302
+ moduleDefinitionId: number;
2303
+ tenantId?: string | null;
2304
+ key: string;
2305
+ displayName: string;
2306
+ description?: string | null;
2307
+ status?: ModuleDefinitionStatus | null;
2308
+ fields?: CanonicalModuleField[];
2309
+ }
2310
+ interface CanonicalModuleField {
2311
+ fieldId: number;
2312
+ moduleDefinitionId: number;
2313
+ tenantId?: string | null;
2314
+ key: string;
2315
+ displayName: string;
2316
+ description?: string | null;
2317
+ dataType: ModuleFieldDataType;
2318
+ storageType: ModuleFieldStorageType;
2319
+ isRequired?: boolean;
2320
+ isEditable?: boolean;
2321
+ isComputed?: boolean;
2322
+ isSystem?: boolean;
2323
+ isSearchable?: boolean;
2324
+ defaultValueJson?: string | null;
2325
+ validationRulesJson?: string | null;
2326
+ optionsSourceJson?: string | null;
2327
+ displayHintsJson?: string | null;
2328
+ order?: number | null;
2329
+ createdAtUtc?: string | null;
2330
+ updatedAtUtc?: string | null;
2331
+ }
2332
+ interface CreateCanonicalModuleFieldRequest {
2333
+ key: string;
2334
+ displayName: string;
2335
+ description?: string | null;
2336
+ dataType?: ModuleFieldDataType;
2337
+ storageType?: ModuleFieldStorageType;
2338
+ isRequired?: boolean;
2339
+ isEditable?: boolean;
2340
+ isComputed?: boolean;
2341
+ isSystem?: boolean;
2342
+ isSearchable?: boolean;
2343
+ defaultValueJson?: string | null;
2344
+ validationRulesJson?: string | null;
2345
+ optionsSourceJson?: string | null;
2346
+ displayHintsJson?: string | null;
2347
+ order?: number | null;
2348
+ }
2349
+ type UpdateCanonicalModuleFieldRequest = CreateCanonicalModuleFieldRequest;
2350
+ interface ReorderCanonicalModuleFieldRequestItem {
2351
+ fieldId: number;
2352
+ order: number;
2353
+ }
2354
+ interface ReorderCanonicalModuleFieldsRequest {
2355
+ fields: ReorderCanonicalModuleFieldRequestItem[];
2356
+ }
2357
+ type FormDefinitionStatus = 'Draft' | 'Active' | 'Archived' | string;
2358
+ type FormPurpose = 'Create' | 'Edit' | 'Review' | 'TaskInput' | 'ApprovalReview' | 'EditAndDecide' | 'Custom' | number | string;
2359
+ type FormRevisionStatus = 'Draft' | 'Published' | 'Archived' | string;
2360
+ interface CanonicalFormListParams extends Record<string, string | number | boolean | null | undefined> {
2361
+ moduleDefinitionId?: number | string | null;
2362
+ purpose?: FormPurpose | null;
2363
+ status?: FormDefinitionStatus | null;
2364
+ search?: string | null;
2365
+ }
2366
+ interface CanonicalFormDefinitionSummary {
2367
+ formDefinitionId: number;
2368
+ tenantId?: string | null;
2369
+ moduleDefinitionId?: number | null;
2370
+ key: string;
2371
+ displayName: string;
2372
+ description?: string | null;
2373
+ purpose?: FormPurpose | null;
2374
+ status?: FormDefinitionStatus | null;
2375
+ currentDraftRevisionId?: number | null;
2376
+ latestPublishedRevisionId?: number | null;
2377
+ createdAtUtc?: string | null;
2378
+ updatedAtUtc?: string | null;
2379
+ createdBy?: string | null;
2380
+ updatedBy?: string | null;
2381
+ }
2382
+ interface CanonicalFormDefinitionDetail {
2383
+ form?: CanonicalFormDefinitionSummary | null;
2384
+ revisions?: CanonicalFormRevisionSummary[];
2385
+ }
2386
+ interface CreateCanonicalFormDefinitionRequest {
2387
+ moduleDefinitionId?: number | null;
2388
+ key: string;
2389
+ displayName: string;
2390
+ description?: string | null;
2391
+ purpose?: FormPurpose;
2392
+ }
2393
+ interface UpdateCanonicalFormDefinitionRequest {
2394
+ moduleDefinitionId?: number | null;
2395
+ displayName: string;
2396
+ description?: string | null;
2397
+ purpose?: FormPurpose;
2398
+ status?: FormDefinitionStatus | null;
2399
+ }
2400
+ interface CreateCanonicalFormRevisionRequest {
2401
+ copyFromRevisionId?: number | null;
2402
+ schemaSnapshotJson?: string;
2403
+ layoutSnapshotJson?: string;
2404
+ fieldBindingSnapshotJson?: string;
2405
+ validationRulesSnapshotJson?: string;
2406
+ visibilityRulesSnapshotJson?: string;
2407
+ }
2408
+ interface UpdateCanonicalFormRevisionRequest {
2409
+ schemaSnapshotJson: string;
2410
+ layoutSnapshotJson: string;
2411
+ fieldBindingSnapshotJson: string;
2412
+ validationRulesSnapshotJson?: string;
2413
+ visibilityRulesSnapshotJson?: string;
2414
+ }
2415
+ interface CanonicalFormRevisionSummary {
2416
+ formRevisionId: number;
2417
+ formDefinitionId: number;
2418
+ tenantId?: string | null;
2419
+ revisionNumber: number;
2420
+ status?: FormRevisionStatus | null;
2421
+ hash?: string | null;
2422
+ publishedAtUtc?: string | null;
2423
+ publishedBy?: string | null;
2424
+ createdAtUtc?: string | null;
2425
+ updatedAtUtc?: string | null;
2426
+ isCurrentDraft?: boolean;
2427
+ isLatestPublished?: boolean;
2428
+ }
2429
+ interface CanonicalFormRevisionDetail {
2430
+ revision?: CanonicalFormRevisionSummary | null;
2431
+ schemaSnapshotJson?: string | null;
2432
+ layoutSnapshotJson?: string | null;
2433
+ fieldBindingSnapshotJson?: string | null;
2434
+ validationRulesSnapshotJson?: string | null;
2435
+ visibilityRulesSnapshotJson?: string | null;
2436
+ }
2437
+ interface CanonicalFormRevisionValidationResult {
2438
+ isValid?: boolean;
2439
+ hash?: string | null;
2440
+ issues?: Array<{
2441
+ code?: string | null;
2442
+ message?: string | null;
2443
+ fieldPath?: string | null;
2444
+ }>;
2445
+ }
2446
+ interface CanonicalFormRevisionPublishResult {
2447
+ formDefinitionId: number;
2448
+ formRevisionId: number;
2449
+ revisionNumber: number;
2450
+ hash?: string | null;
2451
+ publishedAtUtc?: string | null;
2452
+ publishedBy?: string | null;
2453
+ latestPublishedRevisionId?: number | null;
2454
+ }
1717
2455
  interface FormSelectorItem {
1718
2456
  formId: string;
2457
+ formDefinitionId?: number | string | null;
1719
2458
  displayName?: string | null;
1720
2459
  moduleId?: number | string | null;
2460
+ moduleDefinitionId?: number | string | null;
1721
2461
  moduleType?: string | null;
1722
2462
  latestVersionId?: string | null;
2463
+ currentDraftVersionId?: string | null;
2464
+ purpose?: FormPurpose | string | null;
2465
+ status?: FormDefinitionStatus | string | null;
1723
2466
  [key: string]: unknown;
1724
2467
  }
1725
2468
  interface FormSelectorContractResult {
@@ -1731,6 +2474,14 @@ interface FormSelectorContractResult {
1731
2474
  }
1732
2475
  interface FormVersionSummary {
1733
2476
  formVersionId: string;
2477
+ formDefinitionId?: number | string | null;
2478
+ formRevisionId?: number | string | null;
2479
+ revisionNumber?: number | null;
2480
+ status?: FormRevisionStatus | string | null;
2481
+ hash?: string | null;
2482
+ updatedAtUtc?: string | null;
2483
+ publishedAtUtc?: string | null;
2484
+ publishedBy?: string | null;
1734
2485
  isLatest?: boolean;
1735
2486
  isImmutable?: boolean;
1736
2487
  requiresSnapshotOnPublish?: boolean;
@@ -1971,6 +2722,8 @@ interface AutomationNodeRun {
1971
2722
  maxAttempts?: number | null;
1972
2723
  errorJson?: string | null;
1973
2724
  attempts?: AutomationNodeAttempt[];
2725
+ /** Safe AI execution summary (`node.ai`) — diagnostic metadata only. */
2726
+ ai?: ExecutionNodeAiSummary | null;
1974
2727
  }
1975
2728
  interface AutomationNodeAttempt {
1976
2729
  attemptId?: number | string;
@@ -2030,6 +2783,8 @@ interface AutomationExecutionNodeDataDetail {
2030
2783
  truncated?: boolean;
2031
2784
  replayAvailable?: boolean;
2032
2785
  replayAvailabilityReason?: string | null;
2786
+ /** Safe AI execution summary (`node.ai`) — diagnostic metadata only. */
2787
+ ai?: ExecutionNodeAiSummary | null;
2033
2788
  }
2034
2789
  interface ExecutionRetryRequest {
2035
2790
  nodeRunId?: number | string | null;
@@ -2043,91 +2798,666 @@ interface ExecutionCancelResult {
2043
2798
  executionId: number | string;
2044
2799
  status: AutomationExecutionStatus;
2045
2800
  }
2046
- interface AutomationRuntimeWaitResumeTokenResult {
2047
- resumeToken: string;
2801
+ interface AutomationRuntimeWaitResumeTokenResult {
2802
+ resumeToken: string;
2803
+ expiresAtUtc?: string | null;
2804
+ }
2805
+ interface WaitResumeRequest {
2806
+ payload?: unknown;
2807
+ }
2808
+ interface WaitResumeResult {
2809
+ executionId: number | string;
2810
+ status: AutomationExecutionStatus;
2811
+ }
2812
+ interface HumanApprovalDecisionRequest {
2813
+ decision: string;
2814
+ comments?: string | null;
2815
+ metadata?: Record<string, unknown> | null;
2816
+ }
2817
+ interface HumanApprovalDecisionResult {
2818
+ executionId: number | string;
2819
+ decision: string;
2820
+ status: AutomationExecutionStatus;
2821
+ }
2822
+ interface HumanTaskAssignment {
2823
+ userId?: string | null;
2824
+ roleId?: string | null;
2825
+ groupId?: string | null;
2826
+ displayName?: string | null;
2827
+ [key: string]: unknown;
2828
+ }
2829
+ interface HumanTaskPayloadResult {
2830
+ accepted?: boolean;
2831
+ executionId?: number | string | null;
2832
+ nodeRunId?: number | string | null;
2833
+ resumeToken?: string | null;
2834
+ nodeKey?: string | null;
2835
+ title?: string | null;
2836
+ description?: string | null;
2837
+ formSource?: 'ExplicitFormBinding' | 'ReuseTriggerForm' | string | null;
2838
+ formId?: string | null;
2839
+ formVersionId?: string | null;
2840
+ canSaveDraft?: boolean | null;
2841
+ contextOutputPath?: string | null;
2842
+ priority?: string | null;
2843
+ dueDateUtc?: string | null;
2844
+ assignment?: HumanTaskAssignment | null;
2845
+ prefill?: unknown;
2846
+ draft?: unknown;
2847
+ payload?: unknown;
2848
+ errorCode?: string | null;
2849
+ message?: string | null;
2850
+ }
2851
+ interface HumanTaskDraftRequest {
2852
+ values?: Record<string, unknown> | null;
2853
+ metadata?: Record<string, unknown> | null;
2854
+ }
2855
+ interface HumanTaskSubmitRequest {
2856
+ values?: Record<string, unknown> | null;
2857
+ metadata?: Record<string, unknown> | null;
2858
+ }
2859
+ interface HumanTaskCancelRequest {
2860
+ reason?: string | null;
2861
+ metadata?: Record<string, unknown> | null;
2862
+ }
2863
+ interface HumanTaskActionResult {
2864
+ accepted?: boolean;
2865
+ executionId?: number | string | null;
2866
+ nodeRunId?: number | string | null;
2867
+ status?: AutomationExecutionStatus | string | null;
2868
+ queuedNode?: QueuedNodeSummary | null;
2869
+ errorCode?: string | null;
2870
+ message?: string | null;
2871
+ action?: string | null;
2872
+ }
2873
+ interface AutomationEngineHealthSnapshot {
2874
+ enabled: boolean;
2875
+ queuedCount: number;
2876
+ runningCount: number;
2877
+ waitingCount: number;
2878
+ failedCount: number;
2879
+ scheduleDueCount?: number;
2880
+ flags?: Record<string, boolean>;
2881
+ }
2882
+ interface AutomationRetentionPruneResult {
2883
+ candidateCount: number;
2884
+ oldestCandidateUtc?: string | null;
2885
+ dryRun: boolean;
2886
+ }
2887
+
2888
+ /**
2889
+ * Shared paging + query contracts for the Automation Client and Control Panel
2890
+ * Operations APIs.
2891
+ *
2892
+ * Source of truth: `Docs/Automation-Client-And-Operations-Frontend-Guide.md`.
2893
+ *
2894
+ * NOTE: the backend paged envelope uses `totalCount` (not `total`), so this is
2895
+ * intentionally distinct from the legacy {@link PagedResult}.
2896
+ */
2897
+ /** Paged `data` payload: `{ page, pageSize, totalCount, items }`. */
2898
+ interface AutomationPagedResult<T> {
2899
+ page: number;
2900
+ pageSize: number;
2901
+ totalCount: number;
2902
+ items: T[];
2903
+ }
2904
+ /** Common client list query (`ClientAutomationQuery`). Prefer `X-Tenant-Id`. */
2905
+ interface ClientAutomationQuery {
2906
+ tenantId?: string | null;
2907
+ search?: string | null;
2908
+ status?: string | null;
2909
+ automationId?: number | string | null;
2910
+ fromUtc?: string | null;
2911
+ toUtc?: string | null;
2912
+ page?: number | null;
2913
+ pageSize?: number | null;
2914
+ }
2915
+ /** Common admin operations list query (`AdminOperationsQuery`). */
2916
+ interface AdminOperationsQuery extends ClientAutomationQuery {
2917
+ /** Filter by actor/user id where supported. */
2918
+ actorId?: string | null;
2919
+ }
2920
+ /**
2921
+ * Some engine run/action endpoints return a bare error payload instead of the
2922
+ * `AppResponseViewModel` envelope. FE must handle both shapes.
2923
+ */
2924
+ interface EngineCommandError {
2925
+ errorCode: string;
2926
+ message?: string | null;
2927
+ }
2928
+ /** Headers required on command (start/action) submissions. */
2929
+ interface AutomationCommandHeaders {
2930
+ 'X-Correlation-Id': string;
2931
+ 'Idempotency-Key': string;
2932
+ 'X-Tenant-Id'?: string;
2933
+ }
2934
+
2935
+ /**
2936
+ * Control Panel -> Automation Engine -> Integrations contracts.
2937
+ *
2938
+ * Source of truth: `Docs/AUTOMATION_INTEGRATIONS_CONTROL_PANEL_CONTRACT.md`
2939
+ * and `Docs/AI_NODE_FRONTEND_IMPLEMENTATION_GUIDE.md`.
2940
+ *
2941
+ * SECURITY RULES (enforced by the UI):
2942
+ * - Secrets are WRITE-ONLY. Never prefill `apiKey/secret/token/...` after save.
2943
+ * - GET/list responses return `maskedFields` + `secretsReturned = false`.
2944
+ * Never display decrypted credential values.
2945
+ * - Raw prompt/response storage is unsupported — keep those toggles off/disabled.
2946
+ */
2947
+
2948
+ type IntegrationSectionKey = 'ai-providers' | 'connected-accounts' | 'local-on-prem' | 'security-policies';
2949
+ interface IntegrationSection {
2950
+ key: IntegrationSectionKey | string;
2951
+ title?: TranslatableText | string | null;
2952
+ description?: TranslatableText | string | null;
2953
+ order?: number | null;
2954
+ [key: string]: unknown;
2955
+ }
2956
+ /** Single bootstrap response for the Integrations page. */
2957
+ interface IntegrationsOverview {
2958
+ pageKey?: string | null;
2959
+ title?: TranslatableText | string | null;
2960
+ description?: TranslatableText | string | null;
2961
+ sections: IntegrationSection[];
2962
+ catalog: IntegrationProviderCatalogItem[];
2963
+ connections: IntegrationConnectionsResponse;
2964
+ aiProfile: AiProfile;
2965
+ endpointHints?: Record<string, string> | null;
2966
+ }
2967
+ type IntegrationProviderCategory = 'ai' | 'communication' | 'local' | 'generic' | string;
2968
+ type IntegrationAuthType = 'none' | 'api-key' | 'token' | 'oauth2' | 'smtp' | 'endpoint-credential' | string;
2969
+ /** Safe provider catalog metadata only — never implies a secret. */
2970
+ interface IntegrationProviderCatalogItem {
2971
+ providerKey: string;
2972
+ displayName?: TranslatableText | string | null;
2973
+ category?: IntegrationProviderCategory | null;
2974
+ authType?: IntegrationAuthType | null;
2975
+ status?: string | null;
2976
+ statusMessage?: string | null;
2977
+ isEnabled?: boolean;
2978
+ isRuntimeExecutable?: boolean;
2979
+ requiresConnection?: boolean;
2980
+ supportsTest?: boolean;
2981
+ supportsOAuth?: boolean;
2982
+ supportsManualCredential?: boolean;
2983
+ supportsStructuredOutput?: boolean;
2984
+ supportsTokenUsage?: boolean;
2985
+ supportsCostEstimate?: boolean;
2986
+ isFake?: boolean;
2987
+ supportedModels?: string[] | null;
2988
+ credentialTypeKey?: string | null;
2989
+ connectionCreateRoute?: string | null;
2990
+ connectionUpdateRoute?: string | null;
2991
+ testRoute?: string | null;
2992
+ metadata?: Record<string, unknown> | null;
2993
+ }
2994
+ interface IntegrationConnectionSummary {
2995
+ connectionRef: string;
2996
+ displayName?: string | null;
2997
+ providerKey: string;
2998
+ providerDisplayName?: TranslatableText | string | null;
2999
+ category?: IntegrationProviderCategory | null;
3000
+ authType?: IntegrationAuthType | null;
3001
+ status?: string | null;
3002
+ source?: string | null;
3003
+ /** Masked, display-only credential fragments. NEVER decrypted values. */
3004
+ maskedFields?: Record<string, string> | null;
3005
+ createdAt?: string | null;
3006
+ updatedAt?: string | null;
3007
+ revokedAt?: string | null;
3008
+ expiresAt?: string | null;
3009
+ lastValidatedAt?: string | null;
3010
+ testRoute?: string | null;
3011
+ revokeRoute?: string | null;
3012
+ metadata?: Record<string, unknown> | null;
3013
+ }
3014
+ interface IntegrationConnectionsResponse {
3015
+ connections: IntegrationConnectionSummary[];
3016
+ /** Always false — list/GET calls never return decrypted secrets. */
3017
+ secretsReturned: boolean;
3018
+ }
3019
+ interface AiProviderMetadata {
3020
+ providerKey: string;
3021
+ displayName?: TranslatableText | string | null;
3022
+ requiresProviderConnectionRef?: boolean;
3023
+ supportedModels?: string[] | null;
3024
+ supportsStructuredOutput?: boolean;
3025
+ supportsTokenUsage?: boolean;
3026
+ supportsCostEstimate?: boolean;
3027
+ isFake?: boolean;
3028
+ isEnabled?: boolean;
3029
+ /** When false, render disabled/unavailable and show statusMessage. */
3030
+ isRuntimeExecutable?: boolean;
3031
+ status?: string | null;
3032
+ statusMessage?: string | null;
3033
+ }
3034
+ type AiProfileValidationStatus = 'Valid' | 'Invalid' | 'Unconfigured' | string;
3035
+ interface AiProfile {
3036
+ enabled: boolean;
3037
+ profileKey?: string | null;
3038
+ displayName?: string | null;
3039
+ providerKey?: string | null;
3040
+ providerConnectionRef?: string | null;
3041
+ providerConnectionRequired?: boolean;
3042
+ defaultModel?: string | null;
3043
+ defaultTemperature?: number | null;
3044
+ defaultMaxTokens?: number | null;
3045
+ defaultTimeoutSeconds?: number | null;
3046
+ maxTokensPerInvocation?: number | null;
3047
+ maxCostPerInvocation?: number | null;
3048
+ /** Unsupported — backend rejects `true`. Keep the toggle disabled/off. */
3049
+ rawPromptStorageEnabled?: boolean;
3050
+ /** Unsupported — backend rejects `true`. Keep the toggle disabled/off. */
3051
+ rawResponseStorageEnabled?: boolean;
3052
+ redactionMode?: string | null;
3053
+ status?: string | null;
3054
+ isConfigured?: boolean;
3055
+ validationStatus?: AiProfileValidationStatus | null;
3056
+ validationMessages?: string[] | null;
3057
+ availableProviders: AiProviderMetadata[];
3058
+ }
3059
+ /** PUT body for the AI profile. Provider/model/policy only — no secrets. */
3060
+ interface AiProfileUpdateRequest {
3061
+ enabled: boolean;
3062
+ providerKey?: string | null;
3063
+ providerConnectionRef?: string | null;
3064
+ defaultModel?: string | null;
3065
+ defaultTemperature?: number | null;
3066
+ defaultMaxTokens?: number | null;
3067
+ defaultTimeoutSeconds?: number | null;
3068
+ maxTokensPerInvocation?: number | null;
3069
+ maxCostPerInvocation?: number | null;
3070
+ redactionMode?: string | null;
3071
+ /** Always omit or `false` — backend rejects `true`. */
3072
+ rawPromptStorageEnabled?: false;
3073
+ rawResponseStorageEnabled?: false;
3074
+ }
3075
+ /** POST/PUT openai. `apiKey` is write-only; never returned, never prefilled. */
3076
+ interface OpenAiConnectionRequest {
3077
+ displayName: string;
3078
+ apiKey: string;
3079
+ }
3080
+ type LocalProviderRequestMode = 'responses' | 'chat-completions';
3081
+ /** POST/PUT local-openai-compatible. `baseUrl` lives here, never in node config. */
3082
+ interface LocalOpenAiCompatibleConnectionRequest {
3083
+ displayName: string;
3084
+ baseUrl: string;
3085
+ /** Optional bearer key — write-only, never returned. */
3086
+ apiKey?: string | null;
3087
+ authScheme?: 'Bearer' | string;
3088
+ requestMode?: LocalProviderRequestMode;
3089
+ modelListPath?: string | null;
3090
+ }
3091
+ /** POST manual — only when the catalog says manual credentials are supported. */
3092
+ interface ManualConnectionRequest {
3093
+ providerKey: string;
3094
+ displayName: string;
3095
+ /** Provider-specific write-only secret/credential fields. */
3096
+ fields: Record<string, unknown>;
3097
+ }
3098
+ interface ConnectionTestRequest {
3099
+ connectionRef: string;
3100
+ }
3101
+ type AiProviderErrorCode = 'provider_not_enabled' | 'provider_connection_ref_required' | 'provider_credentials_missing' | 'provider_auth_failed' | 'provider_rate_limited' | 'provider_timeout' | 'provider_unavailable' | 'provider_bad_request' | 'local_provider_endpoint_not_found' | 'local_provider_redirect_not_allowed' | 'local_provider_unsupported_feature' | 'provider_response_too_large' | 'ai_model_not_supported' | string;
3102
+ interface AiTokenUsage {
3103
+ inputTokens?: number | null;
3104
+ outputTokens?: number | null;
3105
+ totalTokens?: number | null;
3106
+ }
3107
+ /** Result of a connection / AI profile test. Never includes raw prompt/response. */
3108
+ interface ConnectionTestResult {
3109
+ success: boolean;
3110
+ providerKey?: string | null;
3111
+ model?: string | null;
3112
+ durationMs?: number | null;
3113
+ tokenUsage?: AiTokenUsage | null;
3114
+ errorCode?: AiProviderErrorCode | null;
3115
+ message?: string | null;
3116
+ }
3117
+
3118
+ /**
3119
+ * Control Panel -> Operations contracts (`/api/control-panel/operations/*`).
3120
+ *
3121
+ * Source of truth: `Docs/Automation-Client-And-Operations-Frontend-Guide.md` §5.
3122
+ * All routes require authenticated CONTROL_PANEL permission. Read/monitor only.
3123
+ */
3124
+ interface OperationsStatusCount {
3125
+ status: string;
3126
+ count: number;
3127
+ }
3128
+ interface OperationsRecentFailure {
3129
+ instanceRef: string;
3130
+ executionId?: number | string | null;
3131
+ automationName?: string | null;
3132
+ status?: string | null;
3133
+ failedAtUtc?: string | null;
3134
+ errorSummaryPreview?: string | null;
3135
+ }
3136
+ interface OperationsOpenWorkItem {
3137
+ workItemRef: string;
3138
+ instanceRef?: string | null;
3139
+ title?: string | null;
3140
+ status?: string | null;
3141
+ dueAtUtc?: string | null;
3142
+ createdAtUtc?: string | null;
3143
+ }
3144
+ interface OperationsOverview {
3145
+ generatedAtUtc: string;
3146
+ runningExecutions: number;
3147
+ waitingExecutions: number;
3148
+ failedExecutionsLast24Hours: number;
3149
+ openHumanInteractions: number;
3150
+ overdueHumanInteractions: number;
3151
+ activeBackgroundWorkItems: number;
3152
+ failedBackgroundWorkItems: number;
3153
+ executionStatusCounts: OperationsStatusCount[];
3154
+ humanInteractionStatusCounts: OperationsStatusCount[];
3155
+ runtimeWaitStatusCounts: OperationsStatusCount[];
3156
+ backgroundWorkStateCounts: OperationsStatusCount[];
3157
+ recentFailures: OperationsRecentFailure[];
3158
+ oldestOpenWorkItems: OperationsOpenWorkItem[];
3159
+ }
3160
+ interface OperationsHealth {
3161
+ generatedAtUtc: string;
3162
+ queuedExecutions: number;
3163
+ runningExecutions: number;
3164
+ waitingExecutions: number;
3165
+ failedExecutionsLast24Hours: number;
3166
+ openHumanInteractions: number;
3167
+ expiredRuntimeWaits: number;
3168
+ staleRunningNodeRuns: number;
3169
+ failedBackgroundWorkItems: number;
3170
+ staleBackgroundWorkItems: number;
3171
+ }
3172
+ interface OperationsWorkItem {
3173
+ workItemRef: string;
3174
+ instanceRef: string;
3175
+ tenantId?: string | null;
3176
+ interactionId: number | string;
3177
+ executionId?: number | string | null;
3178
+ nodeRunId?: number | string | null;
3179
+ nodeKey?: string | null;
3180
+ interactionMode?: string | null;
3181
+ status: string;
3182
+ title?: string | null;
3183
+ priority?: string | null;
3184
+ dueAtUtc?: string | null;
3185
+ createdAtUtc?: string | null;
3186
+ updatedAtUtc?: string | null;
3187
+ completedAtUtc?: string | null;
3188
+ completedBy?: string | null;
3189
+ formDefinitionId?: number | string | null;
3190
+ formRevisionId?: number | string | null;
3191
+ workCenterItemId?: string | null;
3192
+ assignmentPreview?: string | null;
3193
+ }
3194
+ interface OperationsInstanceSummary {
3195
+ instanceRef: string;
3196
+ tenantId?: string | null;
3197
+ executionId: number | string;
3198
+ automationId?: number | string | null;
3199
+ automationName?: string | null;
3200
+ automationStatus?: string | null;
3201
+ automationRevisionId?: number | string | null;
3202
+ triggerKey?: string | null;
3203
+ triggerType?: string | null;
3204
+ status: string;
3205
+ createdAtUtc?: string | null;
3206
+ startedAtUtc?: string | null;
3207
+ completedAtUtc?: string | null;
3208
+ failedAtUtc?: string | null;
3209
+ createdBy?: string | null;
3210
+ correlationId?: string | null;
3211
+ nodeRunCount?: number | null;
3212
+ openHumanInteractionCount?: number | null;
3213
+ waitingRuntimeWaitCount?: number | null;
3214
+ errorSummaryPreview?: string | null;
3215
+ }
3216
+ interface OperationsNodeRun {
3217
+ nodeRunId: number | string;
3218
+ nodeKey: string;
3219
+ nodeType: string;
3220
+ status: string;
3221
+ queuedAtUtc?: string | null;
3222
+ startedAtUtc?: string | null;
3223
+ completedAtUtc?: string | null;
3224
+ waitStartedAtUtc?: string | null;
3225
+ waitUntilUtc?: string | null;
3226
+ attemptCount?: number | null;
3227
+ maxAttempts?: number | null;
3228
+ workerId?: string | null;
3229
+ errorPreview?: string | null;
3230
+ }
3231
+ interface OperationsRuntimeWait {
3232
+ runtimeWaitId: number | string;
3233
+ executionId?: number | string | null;
3234
+ nodeRunId?: number | string | null;
3235
+ tenantId?: string | null;
3236
+ waitType: string;
3237
+ waitReason?: string | null;
3238
+ status: string;
3239
+ waitStartedAtUtc?: string | null;
3240
+ waitUntilUtc?: string | null;
2048
3241
  expiresAtUtc?: string | null;
3242
+ resumedAtUtc?: string | null;
3243
+ cancelledAtUtc?: string | null;
3244
+ expiredAtUtc?: string | null;
3245
+ resumedBy?: string | null;
3246
+ }
3247
+ interface OperationsInstanceDetail {
3248
+ instance: OperationsInstanceSummary;
3249
+ nodeRuns: OperationsNodeRun[];
3250
+ humanInteractions: OperationsWorkItem[];
3251
+ runtimeWaits: OperationsRuntimeWait[];
3252
+ }
3253
+ interface OperationsTimelineEvent {
3254
+ eventId: number | string;
3255
+ executionId?: number | string | null;
3256
+ nodeRunId?: number | string | null;
3257
+ eventType: string;
3258
+ occurredAtUtc: string;
3259
+ actorId?: string | null;
3260
+ workerId?: string | null;
3261
+ severity?: 'Info' | 'Warning' | 'Error' | string;
3262
+ correlationId?: string | null;
3263
+ dataPreview?: string | null;
2049
3264
  }
2050
- interface WaitResumeRequest {
2051
- payload?: unknown;
2052
- }
2053
- interface WaitResumeResult {
2054
- executionId: number | string;
2055
- status: AutomationExecutionStatus;
3265
+ interface OperationsAutomationSummary {
3266
+ automationId: number | string;
3267
+ tenantId?: string | null;
3268
+ name?: string | null;
3269
+ description?: string | null;
3270
+ status?: string | null;
3271
+ ownerId?: string | null;
3272
+ projectId?: string | null;
3273
+ updatedAtUtc?: string | null;
3274
+ triggerCount?: number | null;
3275
+ manualTriggerCount?: number | null;
3276
+ formBindingCount?: number | null;
3277
+ activeExecutionCount?: number | null;
3278
+ failedExecutionCountLast24Hours?: number | null;
2056
3279
  }
2057
- interface HumanApprovalDecisionRequest {
2058
- decision: string;
2059
- comments?: string | null;
2060
- metadata?: Record<string, unknown> | null;
3280
+ interface OperationsBottleneck {
3281
+ kind: string;
3282
+ key: string;
3283
+ label?: string | null;
3284
+ pendingCount: number;
3285
+ overdueCount: number;
3286
+ oldestCreatedAtUtc?: string | null;
3287
+ }
3288
+ interface OperationsAuditEvent {
3289
+ id: number | string;
3290
+ sourceEventId?: string | null;
3291
+ sourceEventName?: string | null;
3292
+ sourceAggregateType?: string | null;
3293
+ sourceAggregateId?: string | null;
3294
+ sourceAction?: string | null;
3295
+ correlationId?: string | null;
3296
+ actorUserId?: string | null;
3297
+ occurredAtUtc: string;
3298
+ category?: string | null;
3299
+ operation?: string | null;
3300
+ importance?: string | null;
3301
+ surface?: string | null;
3302
+ primarySubjectType?: string | null;
3303
+ primarySubjectId?: string | null;
3304
+ actorDisplayName?: string | null;
3305
+ primarySubjectDisplayName?: string | null;
2061
3306
  }
2062
- interface HumanApprovalDecisionResult {
2063
- executionId: number | string;
2064
- decision: string;
2065
- status: AutomationExecutionStatus;
3307
+
3308
+ /**
3309
+ * Client automation contracts (`/api/client/automation/*`).
3310
+ *
3311
+ * Source of truth: `Docs/Automation-Client-And-Operations-Frontend-Guide.md` §4.
3312
+ * User-scoped. The backend resolves the current user from auth context.
3313
+ *
3314
+ * RULES:
3315
+ * - Render action buttons strictly from `allowedActions` — never status-hardcoded.
3316
+ * - Run manual triggers by `triggerId` (NOT `triggerKey`).
3317
+ * - Submit start forms with the SAME `formRevisionId` the user opened.
3318
+ * - Command submissions need `X-Correlation-Id` + `Idempotency-Key`.
3319
+ */
3320
+ interface ClientManualTrigger {
3321
+ startRef: string;
3322
+ tenantId?: string | null;
3323
+ automationId: number | string;
3324
+ automationName?: string | null;
3325
+ automationStatus?: string | null;
3326
+ activeAutomationRevisionId?: number | string | null;
3327
+ /** Use this to RUN the trigger (not triggerKey). */
3328
+ triggerId: number | string;
3329
+ triggerKey?: string | null;
3330
+ triggerName?: string | null;
3331
+ triggerType?: string | null;
3332
+ isEnabled?: boolean;
3333
+ updatedAtUtc?: string | null;
2066
3334
  }
2067
- interface HumanTaskAssignment {
2068
- userId?: string | null;
2069
- roleId?: string | null;
2070
- groupId?: string | null;
3335
+ interface ClientStartForm {
3336
+ startRef: string;
3337
+ tenantId?: string | null;
3338
+ formDefinitionId: number | string;
3339
+ formRevisionId: number | string;
3340
+ formKey?: string | null;
2071
3341
  displayName?: string | null;
2072
- [key: string]: unknown;
3342
+ description?: string | null;
3343
+ purpose?: string | null;
3344
+ revisionNumber?: number | null;
3345
+ publishedAtUtc?: string | null;
3346
+ automationId?: number | string | null;
3347
+ automationName?: string | null;
3348
+ triggerKey?: string | null;
3349
+ /** Snapshot JSON strings used to render the form client-side. */
3350
+ schemaSnapshotJson?: string | null;
3351
+ layoutSnapshotJson?: string | null;
3352
+ fieldBindingSnapshotJson?: string | null;
3353
+ validationRulesSnapshotJson?: string | null;
3354
+ visibilityRulesSnapshotJson?: string | null;
3355
+ }
3356
+ interface ClientStartCatalog {
3357
+ manualTriggers: ClientManualTrigger[];
3358
+ forms: ClientStartForm[];
3359
+ }
3360
+ interface RunManualTriggerRequest {
3361
+ tenantId?: string | null;
3362
+ payload?: Record<string, unknown> | null;
2073
3363
  }
2074
- interface HumanTaskPayloadResult {
2075
- accepted?: boolean;
3364
+ interface SubmitStartFormRequest {
3365
+ tenantId?: string | null;
3366
+ formRevisionId: number | string;
3367
+ moduleDefinitionId?: number | string | null;
3368
+ triggerKey?: string | null;
3369
+ submissionId?: string | null;
3370
+ values: Record<string, unknown>;
3371
+ metadata?: Record<string, unknown> | null;
3372
+ }
3373
+ type InteractionAction = 'submit' | 'approve' | 'reject' | 'return' | 'cancel' | 'delegate';
3374
+ type InteractionAllowedAction = 'Submit' | 'Approve' | 'Reject' | 'Return' | 'Cancel' | 'Delegate' | string;
3375
+ interface ClientInteraction {
3376
+ interactionRef: string;
3377
+ instanceRef?: string | null;
3378
+ tenantId?: string | null;
3379
+ interactionId: number | string;
2076
3380
  executionId?: number | string | null;
2077
3381
  nodeRunId?: number | string | null;
2078
- resumeToken?: string | null;
2079
3382
  nodeKey?: string | null;
3383
+ interactionMode?: string | null;
3384
+ status: string;
2080
3385
  title?: string | null;
2081
3386
  description?: string | null;
2082
- formSource?: 'ExplicitFormBinding' | 'ReuseTriggerForm' | string | null;
2083
- formId?: string | null;
2084
- formVersionId?: string | null;
2085
- canSaveDraft?: boolean | null;
2086
- contextOutputPath?: string | null;
2087
3387
  priority?: string | null;
2088
- dueDateUtc?: string | null;
2089
- assignment?: HumanTaskAssignment | null;
2090
- prefill?: unknown;
2091
- draft?: unknown;
3388
+ dueAtUtc?: string | null;
3389
+ createdAtUtc?: string | null;
3390
+ updatedAtUtc?: string | null;
3391
+ completedAtUtc?: string | null;
3392
+ completedBy?: string | null;
3393
+ formDefinitionId?: number | string | null;
3394
+ formRevisionId?: number | string | null;
3395
+ moduleRecordDraftId?: number | string | null;
3396
+ runtimeWaitId?: number | string | null;
3397
+ workCenterItemId?: string | null;
3398
+ /** The ONLY source of truth for which action buttons to render. */
3399
+ allowedActions?: InteractionAllowedAction[] | null;
3400
+ assignment?: Record<string, unknown> | null;
3401
+ }
3402
+ interface ClientRequestLifecycleStep {
3403
+ nodeRunId: number | string;
3404
+ nodeKey: string;
3405
+ nodeType?: string | null;
3406
+ status: string;
3407
+ queuedAtUtc?: string | null;
3408
+ startedAtUtc?: string | null;
3409
+ completedAtUtc?: string | null;
3410
+ waitStartedAtUtc?: string | null;
3411
+ waitUntilUtc?: string | null;
3412
+ attemptCount?: number | null;
3413
+ }
3414
+ interface ClientRequestLifecycleEvent {
3415
+ eventId: number | string;
3416
+ eventType: string;
3417
+ occurredAtUtc: string;
3418
+ nodeRunId?: number | string | null;
3419
+ actorId?: string | null;
3420
+ severity?: 'Info' | 'Warning' | 'Error' | string;
3421
+ }
3422
+ interface ClientRequestLifecycle {
3423
+ request: ClientRequestSummary | Record<string, unknown>;
3424
+ steps: ClientRequestLifecycleStep[];
3425
+ events: ClientRequestLifecycleEvent[];
3426
+ }
3427
+ interface ClientInteractionDetail {
3428
+ interaction: ClientInteraction;
2092
3429
  payload?: unknown;
2093
- errorCode?: string | null;
2094
- message?: string | null;
3430
+ lifecycle?: ClientRequestLifecycle | null;
2095
3431
  }
2096
- interface HumanTaskDraftRequest {
2097
- values?: Record<string, unknown> | null;
3432
+ interface SaveInteractionDraftRequest {
3433
+ tenantId?: string | null;
3434
+ values: Record<string, unknown>;
2098
3435
  metadata?: Record<string, unknown> | null;
2099
3436
  }
2100
- interface HumanTaskSubmitRequest {
3437
+ interface InteractionActionRequest {
3438
+ tenantId?: string | null;
2101
3439
  values?: Record<string, unknown> | null;
3440
+ comments?: string | null;
3441
+ /** Required when action is `delegate`. */
3442
+ delegateTo?: string | null;
2102
3443
  metadata?: Record<string, unknown> | null;
2103
3444
  }
2104
- interface HumanTaskCancelRequest {
2105
- reason?: string | null;
2106
- metadata?: Record<string, unknown> | null;
2107
- }
2108
- interface HumanTaskActionResult {
2109
- accepted?: boolean;
2110
- executionId?: number | string | null;
2111
- nodeRunId?: number | string | null;
2112
- status?: AutomationExecutionStatus | string | null;
2113
- queuedNode?: QueuedNodeSummary | null;
2114
- errorCode?: string | null;
2115
- message?: string | null;
2116
- action?: string | null;
2117
- }
2118
- interface AutomationEngineHealthSnapshot {
2119
- enabled: boolean;
2120
- queuedCount: number;
2121
- runningCount: number;
2122
- waitingCount: number;
2123
- failedCount: number;
2124
- scheduleDueCount?: number;
2125
- flags?: Record<string, boolean>;
2126
- }
2127
- interface AutomationRetentionPruneResult {
2128
- candidateCount: number;
2129
- oldestCandidateUtc?: string | null;
2130
- dryRun: boolean;
3445
+ interface ClientRequestSummary {
3446
+ instanceRef: string;
3447
+ tenantId?: string | null;
3448
+ executionId: number | string;
3449
+ automationId?: number | string | null;
3450
+ automationName?: string | null;
3451
+ triggerKey?: string | null;
3452
+ triggerType?: string | null;
3453
+ status: string;
3454
+ createdAtUtc?: string | null;
3455
+ startedAtUtc?: string | null;
3456
+ completedAtUtc?: string | null;
3457
+ failedAtUtc?: string | null;
3458
+ createdBy?: string | null;
3459
+ correlationId?: string | null;
3460
+ openInteractionCount?: number | null;
2131
3461
  }
2132
3462
 
2133
3463
  /**
@@ -2222,8 +3552,19 @@ declare class EndpointBuilder {
2222
3552
  automationRoute(automationId: number | string, routeId?: number | string | null): string;
2223
3553
  automationFormBinding(automationId: number | string, formBindingId?: number | string | null): string;
2224
3554
  automationBuilderCatalog(): string;
3555
+ automationInlineForms(automationId: number | string): string;
3556
+ automationInlineFormDraft(automationId: number | string, formDefinitionId: number | string, revisionId: number | string): string;
3557
+ automationInlineFormDraftValidate(automationId: number | string, formDefinitionId: number | string, revisionId: number | string): string;
3558
+ automationContextSchema(automationId: number | string): string;
2225
3559
  automationNodeTypes(): string;
2226
3560
  automationBuilderConnectors(): string;
3561
+ automationBusinessActionsRoot(): string;
3562
+ automationBusinessActionApps(): string;
3563
+ automationBusinessActions(appKey?: string | null): string;
3564
+ automationBusinessAction(appKey: string, actionKey: string): string;
3565
+ automationBusinessActionOptions(appKey: string, actionKey: string, fieldKey: string): string;
3566
+ automationBusinessActionValidate(appKey: string, actionKey: string): string;
3567
+ automationBusinessActionTest(appKey: string, actionKey: string): string;
2227
3568
  automationTriggerTypes(): string;
2228
3569
  automationSubworkflowAutomations(): string;
2229
3570
  automationExpressionNamespaces(): string;
@@ -2239,6 +3580,20 @@ declare class EndpointBuilder {
2239
3580
  automationFlowplusModuleSchema(moduleKey: string): string;
2240
3581
  automationFlowplusOperations(): string;
2241
3582
  automationFlowplusCommitMappingValidate(): string;
3583
+ canonicalModuleDefinitions(): string;
3584
+ canonicalModuleDefinition(moduleDefinitionId: number | string): string;
3585
+ canonicalModuleSchema(moduleDefinitionId: number | string): string;
3586
+ canonicalModuleFields(moduleDefinitionId: number | string): string;
3587
+ canonicalModuleField(moduleDefinitionId: number | string, fieldId: number | string): string;
3588
+ canonicalModuleFieldReorder(moduleDefinitionId: number | string): string;
3589
+ canonicalForms(): string;
3590
+ canonicalForm(formDefinitionId: number | string): string;
3591
+ canonicalFormArchive(formDefinitionId: number | string): string;
3592
+ canonicalFormRevisions(formDefinitionId: number | string): string;
3593
+ canonicalFormRevision(formDefinitionId: number | string, revisionId: number | string): string;
3594
+ canonicalFormLatestPublishedRevision(formDefinitionId: number | string): string;
3595
+ canonicalFormRevisionValidate(formDefinitionId: number | string, revisionId: number | string): string;
3596
+ canonicalFormRevisionPublish(formDefinitionId: number | string, revisionId: number | string): string;
2242
3597
  automationForms(): string;
2243
3598
  automationFormVersions(formId: number | string): string;
2244
3599
  automationLatestFormVersion(formId: number | string): string;
@@ -2301,6 +3656,44 @@ declare class EndpointBuilder {
2301
3656
  processEngineEvents(requestId: number | string): string;
2302
3657
  processEngineReplay(requestId: number | string): string;
2303
3658
  processStepContextSnapshot(requestId: number | string, stepId: number | string): string;
3659
+ integrationsRoot(): string;
3660
+ /** GET — single page bootstrap (overview). */
3661
+ integrations(): string;
3662
+ integrationsCatalog(): string;
3663
+ integrationsConnections(): string;
3664
+ integrationsConnection(connectionRef: string): string;
3665
+ integrationsConnectionManual(): string;
3666
+ integrationsConnectionOpenai(connectionRef?: string | null): string;
3667
+ integrationsConnectionLocalOpenai(connectionRef?: string | null): string;
3668
+ integrationsConnectionTest(): string;
3669
+ integrationsAiProfile(): string;
3670
+ integrationsAiProfileTest(): string;
3671
+ integrationsOAuthStart(): string;
3672
+ integrationsOAuthCallback(): string;
3673
+ operationsRoot(): string;
3674
+ operationsOverview(): string;
3675
+ operationsHealth(): string;
3676
+ operationsWorkItems(): string;
3677
+ operationsInstances(): string;
3678
+ operationsInstance(instanceRef: string): string;
3679
+ operationsInstanceTimeline(instanceRef: string): string;
3680
+ operationsAutomations(): string;
3681
+ operationsBottlenecks(): string;
3682
+ operationsAuditEvents(): string;
3683
+ clientAutomationRoot(): string;
3684
+ clientStartCatalog(): string;
3685
+ clientManualTriggers(): string;
3686
+ /** POST — run a manual trigger by concrete `triggerId` (NOT triggerKey). */
3687
+ clientManualTriggerRun(triggerId: number | string): string;
3688
+ clientForms(): string;
3689
+ clientFormSubmit(formDefinitionId: number | string): string;
3690
+ clientInteractionsCurrent(): string;
3691
+ clientInteractionsHistory(): string;
3692
+ clientInteraction(interactionId: number | string): string;
3693
+ clientInteractionDraft(interactionId: number | string): string;
3694
+ clientInteractionAction(interactionId: number | string, action: string): string;
3695
+ clientRequests(): string;
3696
+ clientRequestLifecycle(instanceRef: string): string;
2304
3697
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EndpointBuilder, never>;
2305
3698
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<EndpointBuilder>;
2306
3699
  }
@@ -2504,6 +3897,14 @@ declare class AutomationDesignApiService {
2504
3897
  deleteRoute(automationId: number | string, routeId: number | string): Observable<unknown>;
2505
3898
  upsertFormBinding(automationId: number | string, request: FormBindingDefinitionRequest, formBindingId?: number | string | null): Observable<unknown>;
2506
3899
  deleteFormBinding(automationId: number | string, formBindingId: number | string): Observable<unknown>;
3900
+ /** Creates a design-time inline draft form bound to a node/trigger. */
3901
+ createInlineForm(automationId: number | string, request: InlineFormCreateRequest): Observable<InlineFormDraftResult>;
3902
+ /** Updates an inline draft (optimistic concurrency via `expectedRevisionHash`). */
3903
+ updateInlineFormDraft(automationId: number | string, formDefinitionId: number | string, revisionId: number | string, request: InlineFormDraftUpdateRequest): Observable<InlineFormDraftResult>;
3904
+ /** Validates an inline draft; issues carry `formFieldPath` for inline highlighting. */
3905
+ validateInlineFormDraft(automationId: number | string, formDefinitionId: number | string, revisionId: number | string): Observable<InlineFormDraftValidationResult>;
3906
+ /** Refreshes the automation context schema (data-picker source) after form edits. */
3907
+ refreshContextSchema(automationId: number | string): Observable<unknown>;
2507
3908
  validate(automationId: number | string): Observable<AutomationValidationReport>;
2508
3909
  publish(automationId: number | string, request?: PublishAutomationRequest): Observable<PublishAutomationResult>;
2509
3910
  activate(automationId: number | string, request: ActivateAutomationRequest): Observable<ActivationResult>;
@@ -2527,6 +3928,13 @@ declare class AutomationBuilderCatalogApiService {
2527
3928
  invalidateCatalog(): void;
2528
3929
  nodeTypes(): Observable<NodeTypeCatalogItem[]>;
2529
3930
  connectors(): Observable<ConnectorCatalog>;
3931
+ businessActionApps(params?: Record<string, string | number | boolean | null | undefined>): Observable<BusinessActionApp[]>;
3932
+ businessActions(params?: Record<string, string | number | boolean | null | undefined>): Observable<BusinessActionDefinition[]>;
3933
+ businessActionsForApp(appKey: string, params?: Record<string, string | number | boolean | null | undefined>): Observable<BusinessActionDefinition[]>;
3934
+ businessActionDefinition(appKey: string, actionKey: string, params?: Record<string, string | number | boolean | null | undefined>): Observable<BusinessActionDefinition>;
3935
+ businessActionOptions(appKey: string, actionKey: string, fieldKey: string, request: BusinessActionOptionsRequest): Observable<BusinessActionOptionsResponse>;
3936
+ validateBusinessAction(appKey: string, actionKey: string, request: BusinessActionValidateRequest): Observable<BusinessActionValidateResponse>;
3937
+ testBusinessAction(appKey: string, actionKey: string, request: BusinessActionTestRequest): Observable<BusinessActionTestResponse>;
2530
3938
  triggerTypes(): Observable<TriggerTypeCatalogItem[]>;
2531
3939
  subworkflowAutomations(params?: Record<string, string | number | boolean | null | undefined>): Observable<AutomationSelectorResult>;
2532
3940
  expressionNamespaces(): Observable<ExpressionNamespaceDescriptor[]>;
@@ -2542,6 +3950,24 @@ declare class AutomationBuilderCatalogApiService {
2542
3950
  flowplusModuleSchema(moduleKey: string): Observable<FlowPlusModuleSchemaResult>;
2543
3951
  flowplusOperations(): Observable<string[]>;
2544
3952
  validateFlowplusCommitMapping(request: FlowPlusCommitMappingValidationRequest): Observable<ExpressionValidationResult>;
3953
+ canonicalModuleDefinitions(params?: CanonicalModuleDefinitionListParams): Observable<CanonicalModuleDefinitionSummary[]>;
3954
+ createCanonicalModuleDefinition(request: CreateCanonicalModuleDefinitionRequest): Observable<CanonicalModuleDefinitionDetail>;
3955
+ canonicalModuleDefinition(moduleDefinitionId: number | string): Observable<CanonicalModuleDefinitionDetail>;
3956
+ canonicalModuleSchema(moduleDefinitionId: number | string): Observable<CanonicalModuleSchema>;
3957
+ canonicalModuleFields(moduleDefinitionId: number | string): Observable<CanonicalModuleField[]>;
3958
+ createCanonicalModuleField(moduleDefinitionId: number | string, request: CreateCanonicalModuleFieldRequest): Observable<CanonicalModuleField>;
3959
+ updateCanonicalModuleField(moduleDefinitionId: number | string, fieldId: number | string, request: UpdateCanonicalModuleFieldRequest): Observable<CanonicalModuleField>;
3960
+ reorderCanonicalModuleFields(moduleDefinitionId: number | string, request: ReorderCanonicalModuleFieldsRequest): Observable<CanonicalModuleField[]>;
3961
+ canonicalForms(params?: CanonicalFormListParams): Observable<CanonicalFormDefinitionSummary[]>;
3962
+ canonicalForm(formDefinitionId: number | string): Observable<CanonicalFormDefinitionDetail>;
3963
+ createCanonicalForm(request: CreateCanonicalFormDefinitionRequest): Observable<CanonicalFormDefinitionSummary>;
3964
+ updateCanonicalForm(formDefinitionId: number | string, request: UpdateCanonicalFormDefinitionRequest): Observable<CanonicalFormDefinitionSummary>;
3965
+ canonicalFormRevisions(formDefinitionId: number | string): Observable<CanonicalFormRevisionSummary[]>;
3966
+ canonicalFormRevision(formDefinitionId: number | string, revisionId: number | string): Observable<CanonicalFormRevisionDetail>;
3967
+ createCanonicalFormRevision(formDefinitionId: number | string, request: CreateCanonicalFormRevisionRequest): Observable<CanonicalFormRevisionDetail>;
3968
+ updateCanonicalFormRevision(formDefinitionId: number | string, revisionId: number | string, request: UpdateCanonicalFormRevisionRequest): Observable<CanonicalFormRevisionDetail>;
3969
+ validateCanonicalFormRevision(formDefinitionId: number | string, revisionId: number | string): Observable<CanonicalFormRevisionValidationResult>;
3970
+ publishCanonicalFormRevision(formDefinitionId: number | string, revisionId: number | string): Observable<CanonicalFormRevisionPublishResult>;
2545
3971
  forms(): Observable<FormSelectorContractResult>;
2546
3972
  formVersions(formId: number | string): Observable<FormVersionListResult>;
2547
3973
  latestFormVersion(formId: number | string): Observable<FormVersionSummary>;
@@ -4102,6 +5528,435 @@ declare function resolveWorkflowTriggerKey(trigger: Partial<WorkflowTriggerDto>
4102
5528
  */
4103
5529
  declare const APP_STATES: (typeof FlowplusWorkflowState)[];
4104
5530
 
5531
+ declare class LoadIntegrationsOverview {
5532
+ static readonly type = "[Integrations] Load Overview";
5533
+ }
5534
+ declare class LoadIntegrationsCatalog {
5535
+ static readonly type = "[Integrations] Load Catalog";
5536
+ }
5537
+ declare class LoadIntegrationsConnections {
5538
+ static readonly type = "[Integrations] Load Connections";
5539
+ }
5540
+ declare class LoadAiProfile {
5541
+ static readonly type = "[Integrations] Load AI Profile";
5542
+ }
5543
+ declare class SaveAiProfile {
5544
+ payload: AiProfileUpdateRequest;
5545
+ static readonly type = "[Integrations] Save AI Profile";
5546
+ constructor(payload: AiProfileUpdateRequest);
5547
+ }
5548
+ declare class TestAiProfile {
5549
+ static readonly type = "[Integrations] Test AI Profile";
5550
+ }
5551
+ declare class CreateOpenAiConnection {
5552
+ payload: OpenAiConnectionRequest;
5553
+ static readonly type = "[Integrations] Create OpenAI Connection";
5554
+ constructor(payload: OpenAiConnectionRequest);
5555
+ }
5556
+ declare class UpdateOpenAiConnection {
5557
+ connectionRef: string;
5558
+ payload: OpenAiConnectionRequest;
5559
+ static readonly type = "[Integrations] Update OpenAI Connection";
5560
+ constructor(connectionRef: string, payload: OpenAiConnectionRequest);
5561
+ }
5562
+ declare class CreateLocalOpenAiConnection {
5563
+ payload: LocalOpenAiCompatibleConnectionRequest;
5564
+ static readonly type = "[Integrations] Create Local OpenAI Connection";
5565
+ constructor(payload: LocalOpenAiCompatibleConnectionRequest);
5566
+ }
5567
+ declare class UpdateLocalOpenAiConnection {
5568
+ connectionRef: string;
5569
+ payload: LocalOpenAiCompatibleConnectionRequest;
5570
+ static readonly type = "[Integrations] Update Local OpenAI Connection";
5571
+ constructor(connectionRef: string, payload: LocalOpenAiCompatibleConnectionRequest);
5572
+ }
5573
+ declare class CreateManualConnection {
5574
+ payload: ManualConnectionRequest;
5575
+ static readonly type = "[Integrations] Create Manual Connection";
5576
+ constructor(payload: ManualConnectionRequest);
5577
+ }
5578
+ declare class TestConnection {
5579
+ payload: ConnectionTestRequest;
5580
+ static readonly type = "[Integrations] Test Connection";
5581
+ constructor(payload: ConnectionTestRequest);
5582
+ }
5583
+ declare class RevokeConnection {
5584
+ connectionRef: string;
5585
+ static readonly type = "[Integrations] Revoke Connection";
5586
+ constructor(connectionRef: string);
5587
+ }
5588
+
5589
+ declare class IntegrationsFacade {
5590
+ private readonly store;
5591
+ readonly overview: _angular_core.Signal<_masterteam_flowplus_workflow.IntegrationsOverview | null>;
5592
+ readonly catalog: _angular_core.Signal<_masterteam_flowplus_workflow.IntegrationProviderCatalogItem[]>;
5593
+ readonly connections: _angular_core.Signal<_masterteam_flowplus_workflow.IntegrationConnectionSummary[]>;
5594
+ readonly aiProfile: _angular_core.Signal<_masterteam_flowplus_workflow.AiProfile | null>;
5595
+ readonly profileTestResult: _angular_core.Signal<_masterteam_flowplus_workflow.ConnectionTestResult | null>;
5596
+ readonly connectionTestResult: _angular_core.Signal<_masterteam_flowplus_workflow.ConnectionTestResult | null>;
5597
+ private readonly loadingActive;
5598
+ private readonly errors;
5599
+ readonly sections: _angular_core.Signal<_masterteam_flowplus_workflow.IntegrationSection[]>;
5600
+ readonly availableProviders: _angular_core.Signal<_masterteam_flowplus_workflow.AiProviderMetadata[]>;
5601
+ readonly secretsReturned: _angular_core.Signal<boolean>;
5602
+ readonly isLoadingOverview: _angular_core.Signal<boolean>;
5603
+ readonly isLoadingConnections: _angular_core.Signal<boolean>;
5604
+ readonly isLoadingAiProfile: _angular_core.Signal<boolean>;
5605
+ readonly isSavingAiProfile: _angular_core.Signal<boolean>;
5606
+ readonly isTestingAiProfile: _angular_core.Signal<boolean>;
5607
+ readonly isSavingConnection: _angular_core.Signal<boolean>;
5608
+ readonly isTestingConnection: _angular_core.Signal<boolean>;
5609
+ readonly isRevokingConnection: _angular_core.Signal<boolean>;
5610
+ readonly overviewError: _angular_core.Signal<string | null>;
5611
+ readonly aiProfileError: _angular_core.Signal<string | null>;
5612
+ readonly connectionError: _angular_core.Signal<string | null>;
5613
+ loadOverview(): rxjs.Observable<void>;
5614
+ loadCatalog(): rxjs.Observable<void>;
5615
+ loadConnections(): rxjs.Observable<void>;
5616
+ loadAiProfile(): rxjs.Observable<void>;
5617
+ saveAiProfile(payload: AiProfileUpdateRequest): rxjs.Observable<void>;
5618
+ testAiProfile(): rxjs.Observable<void>;
5619
+ createOpenAiConnection(payload: OpenAiConnectionRequest): rxjs.Observable<void>;
5620
+ updateOpenAiConnection(connectionRef: string, payload: OpenAiConnectionRequest): rxjs.Observable<void>;
5621
+ createLocalOpenAiConnection(payload: LocalOpenAiCompatibleConnectionRequest): rxjs.Observable<void>;
5622
+ updateLocalOpenAiConnection(connectionRef: string, payload: LocalOpenAiCompatibleConnectionRequest): rxjs.Observable<void>;
5623
+ createManualConnection(payload: ManualConnectionRequest): rxjs.Observable<void>;
5624
+ testConnection(payload: ConnectionTestRequest): rxjs.Observable<void>;
5625
+ revokeConnection(connectionRef: string): rxjs.Observable<void>;
5626
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<IntegrationsFacade, never>;
5627
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<IntegrationsFacade>;
5628
+ }
5629
+
5630
+ /** Loading/error tracking keys. Values match the state action-method names. */
5631
+ declare enum IntegrationsActionKey {
5632
+ LoadOverview = "loadOverview",
5633
+ LoadCatalog = "loadCatalog",
5634
+ LoadConnections = "loadConnections",
5635
+ LoadAiProfile = "loadAiProfile",
5636
+ SaveAiProfile = "saveAiProfile",
5637
+ TestAiProfile = "testAiProfile",
5638
+ CreateOpenAi = "createOpenAi",
5639
+ UpdateOpenAi = "updateOpenAi",
5640
+ CreateLocalOpenAi = "createLocalOpenAi",
5641
+ UpdateLocalOpenAi = "updateLocalOpenAi",
5642
+ CreateManual = "createManual",
5643
+ TestConnection = "testConnection",
5644
+ RevokeConnection = "revokeConnection"
5645
+ }
5646
+ interface IntegrationsStateModel extends LoadingStateShape<IntegrationsActionKey> {
5647
+ overview: IntegrationsOverview | null;
5648
+ catalog: IntegrationProviderCatalogItem[];
5649
+ connections: IntegrationConnectionSummary[];
5650
+ /** Always false — secrets are never returned by list/GET calls. */
5651
+ secretsReturned: boolean;
5652
+ aiProfile: AiProfile | null;
5653
+ /** Result of the last AI profile test. */
5654
+ profileTestResult: ConnectionTestResult | null;
5655
+ /** Result of the last provider-connection test. */
5656
+ connectionTestResult: ConnectionTestResult | null;
5657
+ }
5658
+ declare const INTEGRATIONS_DEFAULT_STATE: IntegrationsStateModel;
5659
+
5660
+ declare class IntegrationsState extends CrudStateBase<IntegrationConnectionSummary, IntegrationsStateModel, IntegrationsActionKey> {
5661
+ private readonly api;
5662
+ static getOverview(state: IntegrationsStateModel): IntegrationsOverview | null;
5663
+ static getCatalog(state: IntegrationsStateModel): IntegrationProviderCatalogItem[];
5664
+ static getConnections(state: IntegrationsStateModel): IntegrationConnectionSummary[];
5665
+ static getAiProfile(state: IntegrationsStateModel): AiProfile | null;
5666
+ static getProfileTestResult(state: IntegrationsStateModel): ConnectionTestResult | null;
5667
+ static getConnectionTestResult(state: IntegrationsStateModel): ConnectionTestResult | null;
5668
+ static getLoadingActive(state: IntegrationsStateModel): IntegrationsActionKey[];
5669
+ static getErrors(state: IntegrationsStateModel): Partial<Record<IntegrationsActionKey, string>>;
5670
+ loadOverview(ctx: StateContext<IntegrationsStateModel>): rxjs.Observable<IntegrationsOverview>;
5671
+ loadCatalog(ctx: StateContext<IntegrationsStateModel>): rxjs.Observable<IntegrationProviderCatalogItem[]>;
5672
+ loadConnections(ctx: StateContext<IntegrationsStateModel>): rxjs.Observable<_masterteam_flowplus_workflow.IntegrationConnectionsResponse>;
5673
+ loadAiProfile(ctx: StateContext<IntegrationsStateModel>): rxjs.Observable<AiProfile>;
5674
+ saveAiProfile(ctx: StateContext<IntegrationsStateModel>, { payload }: SaveAiProfile): rxjs.Observable<AiProfile>;
5675
+ testAiProfile(ctx: StateContext<IntegrationsStateModel>): rxjs.Observable<ConnectionTestResult>;
5676
+ createOpenAi(ctx: StateContext<IntegrationsStateModel>, { payload }: CreateOpenAiConnection): rxjs.Observable<IntegrationConnectionSummary>;
5677
+ updateOpenAi(ctx: StateContext<IntegrationsStateModel>, { connectionRef, payload }: UpdateOpenAiConnection): rxjs.Observable<IntegrationConnectionSummary>;
5678
+ createLocalOpenAi(ctx: StateContext<IntegrationsStateModel>, { payload }: CreateLocalOpenAiConnection): rxjs.Observable<IntegrationConnectionSummary>;
5679
+ updateLocalOpenAi(ctx: StateContext<IntegrationsStateModel>, { connectionRef, payload }: UpdateLocalOpenAiConnection): rxjs.Observable<IntegrationConnectionSummary>;
5680
+ createManual(ctx: StateContext<IntegrationsStateModel>, { payload }: CreateManualConnection): rxjs.Observable<IntegrationConnectionSummary>;
5681
+ testConnection(ctx: StateContext<IntegrationsStateModel>, { payload }: TestConnection): rxjs.Observable<ConnectionTestResult>;
5682
+ revokeConnection(ctx: StateContext<IntegrationsStateModel>, { connectionRef }: RevokeConnection): rxjs.Observable<void>;
5683
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<IntegrationsState, never>;
5684
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<IntegrationsState>;
5685
+ }
5686
+
5687
+ declare class LoadOperationsOverview {
5688
+ static readonly type = "[Operations] Load Overview";
5689
+ }
5690
+ declare class LoadOperationsHealth {
5691
+ static readonly type = "[Operations] Load Health";
5692
+ }
5693
+ declare class LoadOperationsBottlenecks {
5694
+ static readonly type = "[Operations] Load Bottlenecks";
5695
+ }
5696
+ declare class LoadOperationsWorkItems {
5697
+ query?: AdminOperationsQuery | undefined;
5698
+ static readonly type = "[Operations] Load Work Items";
5699
+ constructor(query?: AdminOperationsQuery | undefined);
5700
+ }
5701
+ declare class LoadOperationsInstances {
5702
+ query?: AdminOperationsQuery | undefined;
5703
+ static readonly type = "[Operations] Load Instances";
5704
+ constructor(query?: AdminOperationsQuery | undefined);
5705
+ }
5706
+ declare class LoadOperationsInstance {
5707
+ instanceRef: string;
5708
+ static readonly type = "[Operations] Load Instance";
5709
+ constructor(instanceRef: string);
5710
+ }
5711
+ declare class LoadOperationsInstanceTimeline {
5712
+ instanceRef: string;
5713
+ take: number;
5714
+ static readonly type = "[Operations] Load Instance Timeline";
5715
+ constructor(instanceRef: string, take?: number);
5716
+ }
5717
+ declare class LoadOperationsAutomations {
5718
+ query?: AdminOperationsQuery | undefined;
5719
+ static readonly type = "[Operations] Load Automations";
5720
+ constructor(query?: AdminOperationsQuery | undefined);
5721
+ }
5722
+ declare class LoadOperationsAuditEvents {
5723
+ query?: AdminOperationsQuery | undefined;
5724
+ static readonly type = "[Operations] Load Audit Events";
5725
+ constructor(query?: AdminOperationsQuery | undefined);
5726
+ }
5727
+
5728
+ declare class OperationsFacade {
5729
+ private readonly store;
5730
+ readonly overview: _angular_core.Signal<_masterteam_flowplus_workflow.OperationsOverview | null>;
5731
+ readonly health: _angular_core.Signal<_masterteam_flowplus_workflow.OperationsHealth | null>;
5732
+ readonly workItems: _angular_core.Signal<_masterteam_flowplus_workflow.AutomationPagedResult<_masterteam_flowplus_workflow.OperationsWorkItem> | null>;
5733
+ readonly instances: _angular_core.Signal<_masterteam_flowplus_workflow.AutomationPagedResult<_masterteam_flowplus_workflow.OperationsInstanceSummary> | null>;
5734
+ readonly instanceDetail: _angular_core.Signal<_masterteam_flowplus_workflow.OperationsInstanceDetail | null>;
5735
+ readonly timeline: _angular_core.Signal<_masterteam_flowplus_workflow.OperationsTimelineEvent[]>;
5736
+ readonly automations: _angular_core.Signal<_masterteam_flowplus_workflow.AutomationPagedResult<_masterteam_flowplus_workflow.OperationsAutomationSummary> | null>;
5737
+ readonly bottlenecks: _angular_core.Signal<_masterteam_flowplus_workflow.OperationsBottleneck[]>;
5738
+ readonly auditEvents: _angular_core.Signal<_masterteam_flowplus_workflow.AutomationPagedResult<_masterteam_flowplus_workflow.OperationsAuditEvent> | null>;
5739
+ private readonly loadingActive;
5740
+ private readonly errors;
5741
+ readonly workItemRows: _angular_core.Signal<_masterteam_flowplus_workflow.OperationsWorkItem[]>;
5742
+ readonly instanceRows: _angular_core.Signal<_masterteam_flowplus_workflow.OperationsInstanceSummary[]>;
5743
+ readonly automationRows: _angular_core.Signal<_masterteam_flowplus_workflow.OperationsAutomationSummary[]>;
5744
+ readonly auditRows: _angular_core.Signal<_masterteam_flowplus_workflow.OperationsAuditEvent[]>;
5745
+ readonly isLoadingOverview: _angular_core.Signal<boolean>;
5746
+ readonly isLoadingWorkItems: _angular_core.Signal<boolean>;
5747
+ readonly isLoadingInstances: _angular_core.Signal<boolean>;
5748
+ readonly isLoadingInstance: _angular_core.Signal<boolean>;
5749
+ readonly isLoadingAutomations: _angular_core.Signal<boolean>;
5750
+ readonly isLoadingAuditEvents: _angular_core.Signal<boolean>;
5751
+ readonly overviewError: _angular_core.Signal<string | null>;
5752
+ loadOverview(): rxjs.Observable<void>;
5753
+ loadHealth(): rxjs.Observable<void>;
5754
+ loadBottlenecks(): rxjs.Observable<void>;
5755
+ loadWorkItems(query?: AdminOperationsQuery): rxjs.Observable<void>;
5756
+ loadInstances(query?: AdminOperationsQuery): rxjs.Observable<void>;
5757
+ loadInstance(instanceRef: string): rxjs.Observable<void>;
5758
+ loadTimeline(instanceRef: string, take?: number): rxjs.Observable<void>;
5759
+ loadAutomations(query?: AdminOperationsQuery): rxjs.Observable<void>;
5760
+ loadAuditEvents(query?: AdminOperationsQuery): rxjs.Observable<void>;
5761
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OperationsFacade, never>;
5762
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<OperationsFacade>;
5763
+ }
5764
+
5765
+ declare enum OperationsActionKey {
5766
+ LoadOverview = "loadOverview",
5767
+ LoadHealth = "loadHealth",
5768
+ LoadWorkItems = "loadWorkItems",
5769
+ LoadInstances = "loadInstances",
5770
+ LoadInstance = "loadInstance",
5771
+ LoadTimeline = "loadTimeline",
5772
+ LoadAutomations = "loadAutomations",
5773
+ LoadBottlenecks = "loadBottlenecks",
5774
+ LoadAuditEvents = "loadAuditEvents"
5775
+ }
5776
+ interface OperationsStateModel extends LoadingStateShape<OperationsActionKey> {
5777
+ overview: OperationsOverview | null;
5778
+ health: OperationsHealth | null;
5779
+ workItems: AutomationPagedResult<OperationsWorkItem> | null;
5780
+ instances: AutomationPagedResult<OperationsInstanceSummary> | null;
5781
+ instanceDetail: OperationsInstanceDetail | null;
5782
+ timeline: OperationsTimelineEvent[];
5783
+ automations: AutomationPagedResult<OperationsAutomationSummary> | null;
5784
+ bottlenecks: OperationsBottleneck[];
5785
+ auditEvents: AutomationPagedResult<OperationsAuditEvent> | null;
5786
+ }
5787
+ declare const OPERATIONS_DEFAULT_STATE: OperationsStateModel;
5788
+
5789
+ declare class OperationsState {
5790
+ private readonly api;
5791
+ static getOverview(state: OperationsStateModel): OperationsOverview | null;
5792
+ static getHealth(state: OperationsStateModel): OperationsHealth | null;
5793
+ static getWorkItems(state: OperationsStateModel): AutomationPagedResult<OperationsWorkItem> | null;
5794
+ static getInstances(state: OperationsStateModel): AutomationPagedResult<OperationsInstanceSummary> | null;
5795
+ static getInstanceDetail(state: OperationsStateModel): OperationsInstanceDetail | null;
5796
+ static getTimeline(state: OperationsStateModel): OperationsTimelineEvent[];
5797
+ static getAutomations(state: OperationsStateModel): AutomationPagedResult<OperationsAutomationSummary> | null;
5798
+ static getBottlenecks(state: OperationsStateModel): OperationsBottleneck[];
5799
+ static getAuditEvents(state: OperationsStateModel): AutomationPagedResult<OperationsAuditEvent> | null;
5800
+ static getLoadingActive(state: OperationsStateModel): OperationsActionKey[];
5801
+ static getErrors(state: OperationsStateModel): Partial<Record<OperationsActionKey, string>>;
5802
+ loadOverview(ctx: StateContext<OperationsStateModel>): rxjs.Observable<OperationsOverview>;
5803
+ loadHealth(ctx: StateContext<OperationsStateModel>): rxjs.Observable<OperationsHealth>;
5804
+ loadBottlenecks(ctx: StateContext<OperationsStateModel>): rxjs.Observable<OperationsBottleneck[]>;
5805
+ loadWorkItems(ctx: StateContext<OperationsStateModel>, { query }: LoadOperationsWorkItems): rxjs.Observable<AutomationPagedResult<OperationsWorkItem>>;
5806
+ loadInstances(ctx: StateContext<OperationsStateModel>, { query }: LoadOperationsInstances): rxjs.Observable<AutomationPagedResult<OperationsInstanceSummary>>;
5807
+ loadInstance(ctx: StateContext<OperationsStateModel>, { instanceRef }: LoadOperationsInstance): rxjs.Observable<OperationsInstanceDetail>;
5808
+ loadTimeline(ctx: StateContext<OperationsStateModel>, { instanceRef, take }: LoadOperationsInstanceTimeline): rxjs.Observable<OperationsTimelineEvent[]>;
5809
+ loadAutomations(ctx: StateContext<OperationsStateModel>, { query }: LoadOperationsAutomations): rxjs.Observable<AutomationPagedResult<OperationsAutomationSummary>>;
5810
+ loadAuditEvents(ctx: StateContext<OperationsStateModel>, { query }: LoadOperationsAuditEvents): rxjs.Observable<AutomationPagedResult<OperationsAuditEvent>>;
5811
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OperationsState, never>;
5812
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<OperationsState>;
5813
+ }
5814
+
5815
+ declare class LoadStartCatalog {
5816
+ query?: ClientAutomationQuery | undefined;
5817
+ static readonly type = "[ClientAutomation] Load Start Catalog";
5818
+ constructor(query?: ClientAutomationQuery | undefined);
5819
+ }
5820
+ declare class RunManualTrigger {
5821
+ triggerId: number | string;
5822
+ payload: RunManualTriggerRequest;
5823
+ static readonly type = "[ClientAutomation] Run Manual Trigger";
5824
+ constructor(triggerId: number | string, payload: RunManualTriggerRequest);
5825
+ }
5826
+ declare class SubmitStartForm {
5827
+ formDefinitionId: number | string;
5828
+ payload: SubmitStartFormRequest;
5829
+ static readonly type = "[ClientAutomation] Submit Start Form";
5830
+ constructor(formDefinitionId: number | string, payload: SubmitStartFormRequest);
5831
+ }
5832
+ declare class LoadCurrentInteractions {
5833
+ query?: ClientAutomationQuery | undefined;
5834
+ static readonly type = "[ClientAutomation] Load Current Interactions";
5835
+ constructor(query?: ClientAutomationQuery | undefined);
5836
+ }
5837
+ declare class LoadInteractionHistory {
5838
+ query?: ClientAutomationQuery | undefined;
5839
+ static readonly type = "[ClientAutomation] Load Interaction History";
5840
+ constructor(query?: ClientAutomationQuery | undefined);
5841
+ }
5842
+ declare class LoadInteractionDetail {
5843
+ interactionId: number | string;
5844
+ static readonly type = "[ClientAutomation] Load Interaction Detail";
5845
+ constructor(interactionId: number | string);
5846
+ }
5847
+ declare class SaveInteractionDraft {
5848
+ interactionId: number | string;
5849
+ payload: SaveInteractionDraftRequest;
5850
+ static readonly type = "[ClientAutomation] Save Interaction Draft";
5851
+ constructor(interactionId: number | string, payload: SaveInteractionDraftRequest);
5852
+ }
5853
+ declare class ExecuteInteractionAction {
5854
+ interactionId: number | string;
5855
+ action: InteractionAction;
5856
+ payload: InteractionActionRequest;
5857
+ static readonly type = "[ClientAutomation] Execute Interaction Action";
5858
+ constructor(interactionId: number | string, action: InteractionAction, payload: InteractionActionRequest);
5859
+ }
5860
+ declare class LoadMyRequests {
5861
+ query?: ClientAutomationQuery | undefined;
5862
+ static readonly type = "[ClientAutomation] Load My Requests";
5863
+ constructor(query?: ClientAutomationQuery | undefined);
5864
+ }
5865
+ declare class LoadRequestLifecycle {
5866
+ instanceRef: string;
5867
+ take: number;
5868
+ static readonly type = "[ClientAutomation] Load Request Lifecycle";
5869
+ constructor(instanceRef: string, take?: number);
5870
+ }
5871
+
5872
+ declare class ClientAutomationFacade {
5873
+ private readonly store;
5874
+ readonly startCatalog: _angular_core.Signal<_masterteam_flowplus_workflow.ClientStartCatalog | null>;
5875
+ readonly current: _angular_core.Signal<_masterteam_flowplus_workflow.AutomationPagedResult<_masterteam_flowplus_workflow.ClientInteraction> | null>;
5876
+ readonly history: _angular_core.Signal<_masterteam_flowplus_workflow.AutomationPagedResult<_masterteam_flowplus_workflow.ClientInteraction> | null>;
5877
+ readonly interactionDetail: _angular_core.Signal<_masterteam_flowplus_workflow.ClientInteractionDetail | null>;
5878
+ readonly requests: _angular_core.Signal<_masterteam_flowplus_workflow.AutomationPagedResult<_masterteam_flowplus_workflow.ClientRequestSummary> | null>;
5879
+ readonly lifecycle: _angular_core.Signal<_masterteam_flowplus_workflow.ClientRequestLifecycle | null>;
5880
+ readonly lastRunResult: _angular_core.Signal<_masterteam_flowplus_workflow.AutomationRunResult | null>;
5881
+ private readonly loadingActive;
5882
+ private readonly errors;
5883
+ readonly manualTriggers: _angular_core.Signal<_masterteam_flowplus_workflow.ClientManualTrigger[]>;
5884
+ readonly forms: _angular_core.Signal<_masterteam_flowplus_workflow.ClientStartForm[]>;
5885
+ readonly currentRows: _angular_core.Signal<_masterteam_flowplus_workflow.ClientInteraction[]>;
5886
+ readonly historyRows: _angular_core.Signal<_masterteam_flowplus_workflow.ClientInteraction[]>;
5887
+ readonly requestRows: _angular_core.Signal<_masterteam_flowplus_workflow.ClientRequestSummary[]>;
5888
+ readonly currentCount: _angular_core.Signal<number>;
5889
+ readonly isLoadingCatalog: _angular_core.Signal<boolean>;
5890
+ readonly isRunningTrigger: _angular_core.Signal<boolean>;
5891
+ readonly isSubmittingForm: _angular_core.Signal<boolean>;
5892
+ readonly isLoadingCurrent: _angular_core.Signal<boolean>;
5893
+ readonly isLoadingHistory: _angular_core.Signal<boolean>;
5894
+ readonly isLoadingDetail: _angular_core.Signal<boolean>;
5895
+ readonly isExecutingAction: _angular_core.Signal<boolean>;
5896
+ readonly isLoadingRequests: _angular_core.Signal<boolean>;
5897
+ readonly actionError: _angular_core.Signal<string | null>;
5898
+ loadStartCatalog(query?: ClientAutomationQuery): rxjs.Observable<void>;
5899
+ runManualTrigger(triggerId: number | string, payload: RunManualTriggerRequest): rxjs.Observable<void>;
5900
+ submitForm(formDefinitionId: number | string, payload: SubmitStartFormRequest): rxjs.Observable<void>;
5901
+ loadCurrent(query?: ClientAutomationQuery): rxjs.Observable<void>;
5902
+ loadHistory(query?: ClientAutomationQuery): rxjs.Observable<void>;
5903
+ loadInteraction(interactionId: number | string): rxjs.Observable<void>;
5904
+ saveDraft(interactionId: number | string, payload: SaveInteractionDraftRequest): rxjs.Observable<void>;
5905
+ executeAction(interactionId: number | string, action: InteractionAction, payload: InteractionActionRequest): rxjs.Observable<void>;
5906
+ loadRequests(query?: ClientAutomationQuery): rxjs.Observable<void>;
5907
+ loadLifecycle(instanceRef: string, take?: number): rxjs.Observable<void>;
5908
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ClientAutomationFacade, never>;
5909
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ClientAutomationFacade>;
5910
+ }
5911
+
5912
+ declare enum ClientAutomationActionKey {
5913
+ LoadStartCatalog = "loadStartCatalog",
5914
+ RunManualTrigger = "runManualTrigger",
5915
+ SubmitForm = "submitForm",
5916
+ LoadCurrent = "loadCurrent",
5917
+ LoadHistory = "loadHistory",
5918
+ LoadInteraction = "loadInteraction",
5919
+ SaveDraft = "saveDraft",
5920
+ ExecuteAction = "executeAction",
5921
+ LoadRequests = "loadRequests",
5922
+ LoadLifecycle = "loadLifecycle"
5923
+ }
5924
+ interface ClientAutomationStateModel extends LoadingStateShape<ClientAutomationActionKey> {
5925
+ startCatalog: ClientStartCatalog | null;
5926
+ current: AutomationPagedResult<ClientInteraction> | null;
5927
+ history: AutomationPagedResult<ClientInteraction> | null;
5928
+ interactionDetail: ClientInteractionDetail | null;
5929
+ requests: AutomationPagedResult<ClientRequestSummary> | null;
5930
+ lifecycle: ClientRequestLifecycle | null;
5931
+ lastRunResult: AutomationRunResult | null;
5932
+ }
5933
+ declare const CLIENT_AUTOMATION_DEFAULT_STATE: ClientAutomationStateModel;
5934
+
5935
+ declare class ClientAutomationState {
5936
+ private readonly api;
5937
+ static getStartCatalog(state: ClientAutomationStateModel): ClientStartCatalog | null;
5938
+ static getCurrent(state: ClientAutomationStateModel): AutomationPagedResult<ClientInteraction> | null;
5939
+ static getHistory(state: ClientAutomationStateModel): AutomationPagedResult<ClientInteraction> | null;
5940
+ static getInteractionDetail(state: ClientAutomationStateModel): ClientInteractionDetail | null;
5941
+ static getRequests(state: ClientAutomationStateModel): AutomationPagedResult<ClientRequestSummary> | null;
5942
+ static getLifecycle(state: ClientAutomationStateModel): ClientRequestLifecycle | null;
5943
+ static getLastRunResult(state: ClientAutomationStateModel): AutomationRunResult | null;
5944
+ static getLoadingActive(state: ClientAutomationStateModel): ClientAutomationActionKey[];
5945
+ static getErrors(state: ClientAutomationStateModel): Partial<Record<ClientAutomationActionKey, string>>;
5946
+ loadStartCatalog(ctx: StateContext<ClientAutomationStateModel>, { query }: LoadStartCatalog): rxjs.Observable<ClientStartCatalog>;
5947
+ runManualTrigger(ctx: StateContext<ClientAutomationStateModel>, { triggerId, payload }: RunManualTrigger): rxjs.Observable<AutomationRunResult>;
5948
+ submitForm(ctx: StateContext<ClientAutomationStateModel>, { formDefinitionId, payload }: SubmitStartForm): rxjs.Observable<AutomationRunResult>;
5949
+ loadCurrent(ctx: StateContext<ClientAutomationStateModel>, { query }: LoadCurrentInteractions): rxjs.Observable<AutomationPagedResult<ClientInteraction>>;
5950
+ loadHistory(ctx: StateContext<ClientAutomationStateModel>, { query }: LoadInteractionHistory): rxjs.Observable<AutomationPagedResult<ClientInteraction>>;
5951
+ loadInteraction(ctx: StateContext<ClientAutomationStateModel>, { interactionId }: LoadInteractionDetail): rxjs.Observable<ClientInteractionDetail>;
5952
+ saveDraft(ctx: StateContext<ClientAutomationStateModel>, { interactionId, payload }: SaveInteractionDraft): rxjs.Observable<unknown>;
5953
+ executeAction(ctx: StateContext<ClientAutomationStateModel>, { interactionId, action, payload }: ExecuteInteractionAction): rxjs.Observable<AutomationRunResult>;
5954
+ loadRequests(ctx: StateContext<ClientAutomationStateModel>, { query }: LoadMyRequests): rxjs.Observable<AutomationPagedResult<ClientRequestSummary>>;
5955
+ loadLifecycle(ctx: StateContext<ClientAutomationStateModel>, { instanceRef, take }: LoadRequestLifecycle): rxjs.Observable<ClientRequestLifecycle>;
5956
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ClientAutomationState, never>;
5957
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ClientAutomationState>;
5958
+ }
5959
+
4105
5960
  /**
4106
5961
  * Host-configurable navigation target. May be:
4107
5962
  * - a string path (`'/admin/workflows'`)
@@ -4385,7 +6240,7 @@ declare class ProcessCreateDialogComponent {
4385
6240
  }
4386
6241
 
4387
6242
  type PaletteGroupKey = 'logicFlow' | 'dataFiles' | 'peopleReview' | 'appsApis' | 'flowplus';
4388
- type PaletteSectionKey = 'branching' | 'looping' | 'parallel' | 'timing' | 'dataShape' | 'fileConvert' | 'tasksApprovals' | 'sendWait' | 'apiWebhook' | 'flowplusNative' | 'automationCalls' | 'other';
6243
+ type PaletteSectionKey = 'branching' | 'looping' | 'parallel' | 'timing' | 'dataShape' | 'fileConvert' | 'tasksApprovals' | 'sendWait' | 'businessActions' | 'apiWebhook' | 'flowplusNative' | 'automationCalls' | 'other';
4389
6244
  interface AutomationNodeVisual {
4390
6245
  key: string;
4391
6246
  label: string;
@@ -5016,6 +6871,7 @@ declare class WorkflowBuilderPageComponent implements OnDestroy {
5016
6871
  private readonly layoutEngine;
5017
6872
  private readonly shortcuts;
5018
6873
  private readonly confirmation;
6874
+ private readonly toast;
5019
6875
  private readonly transloco;
5020
6876
  private readonly route;
5021
6877
  private readonly destroyRef;
@@ -5203,6 +7059,8 @@ declare class WorkflowBuilderPageComponent implements OnDestroy {
5203
7059
  }): void;
5204
7060
  private setTriggerStart;
5205
7061
  onValidate(): void;
7062
+ /** Surfaces the validation outcome as a PrimeNG toast (issues tab is removed). */
7063
+ private notifyValidation;
5206
7064
  onOpenTestRun(): void;
5207
7065
  onOpenSettings(): void;
5208
7066
  onTogglePalette(): void;
@@ -5238,6 +7096,7 @@ declare class WorkflowBuilderPageComponent implements OnDestroy {
5238
7096
  onPublish(): void;
5239
7097
  onUnpublish(): void;
5240
7098
  private confirmPublish;
7099
+ private notifyPublish;
5241
7100
  autoLayout(): void;
5242
7101
  private canvasNoteAutoLayoutMembers;
5243
7102
  private canvasNoteAutoLayoutPositions;
@@ -5376,6 +7235,7 @@ declare class AutomationExecutionsPageComponent {
5376
7235
  maxAttempts?: number | null;
5377
7236
  errorJson?: string | null;
5378
7237
  attempts?: _masterteam_flowplus_workflow.AutomationNodeAttempt[];
7238
+ ai?: _masterteam_flowplus_workflow.ExecutionNodeAiSummary | null;
5379
7239
  }[]>;
5380
7240
  readonly canRetry: _angular_core.Signal<boolean>;
5381
7241
  readonly canCancel: _angular_core.Signal<boolean>;
@@ -5454,6 +7314,234 @@ declare class WorkflowRunDebuggerPageComponent {
5454
7314
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<WorkflowRunDebuggerPageComponent, "fp-workflow-run-debugger-page", never, {}, {}, never, never, true, never>;
5455
7315
  }
5456
7316
 
7317
+ /** Which credential form to render. */
7318
+ type ConnectionFormKind = 'openai' | 'local' | 'manual';
7319
+ interface ConnectionFormData {
7320
+ kind: ConnectionFormKind;
7321
+ /** Present in edit mode. Secrets are NEVER prefilled. */
7322
+ connection?: IntegrationConnectionSummary | null;
7323
+ }
7324
+ interface ConnectionFormValue {
7325
+ displayName: string;
7326
+ apiKey: string;
7327
+ baseUrl: string;
7328
+ requestMode: LocalProviderRequestMode;
7329
+ modelListPath: string;
7330
+ providerKey: string;
7331
+ secret: string;
7332
+ }
7333
+ /**
7334
+ * Create/edit a provider connection. Secrets are WRITE-ONLY: the API key /
7335
+ * secret fields start empty in edit mode and are never populated from the
7336
+ * server. Closes with `true` on success so the host refreshes the list.
7337
+ */
7338
+ declare class IntegrationConnectionFormComponent {
7339
+ readonly modalService: ModalService;
7340
+ private readonly ref;
7341
+ private readonly transloco;
7342
+ readonly facade: IntegrationsFacade;
7343
+ readonly data: _angular_core.InputSignal<ConnectionFormData | null>;
7344
+ readonly kind: _angular_core.Signal<ConnectionFormKind>;
7345
+ readonly isEdit: _angular_core.Signal<boolean>;
7346
+ readonly form: FormControl<ConnectionFormValue>;
7347
+ readonly formConfig: _angular_core.Signal<DynamicFormConfig>;
7348
+ constructor();
7349
+ onSave(): void;
7350
+ onCancel(): void;
7351
+ private fieldsFor;
7352
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<IntegrationConnectionFormComponent, never>;
7353
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<IntegrationConnectionFormComponent, "fp-integration-connection-form", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
7354
+ }
7355
+
7356
+ interface ConnectionRowVm extends IntegrationConnectionSummary {
7357
+ maskedSummary: string;
7358
+ }
7359
+ interface AiProfileFormValue {
7360
+ enabled: boolean;
7361
+ providerKey: string | null;
7362
+ providerConnectionRef: string | null;
7363
+ defaultModel: string | null;
7364
+ defaultTemperature: number | null;
7365
+ defaultMaxTokens: number | null;
7366
+ defaultTimeoutSeconds: number | null;
7367
+ }
7368
+ /**
7369
+ * Control Panel -> Automation Engine -> Integrations.
7370
+ *
7371
+ * Single bootstrap (`GET /integrations`) hydrates four sections. AI provider /
7372
+ * model / credential configuration lives ONLY here — never in AI node config.
7373
+ * Secrets are write-only; lists show masked fields only.
7374
+ */
7375
+ declare class IntegrationsPageComponent implements OnInit {
7376
+ readonly facade: IntegrationsFacade;
7377
+ private readonly modal;
7378
+ private readonly transloco;
7379
+ readonly activeSection: _angular_core.WritableSignal<IntegrationSectionKey>;
7380
+ readonly sectionTabs: {
7381
+ key: IntegrationSectionKey;
7382
+ label: string;
7383
+ }[];
7384
+ readonly aiForm: FormControl<AiProfileFormValue>;
7385
+ private readonly aiValue;
7386
+ readonly selectedProvider: _angular_core.Signal<AiProviderMetadata | undefined>;
7387
+ readonly providerConnectionRequired: _angular_core.Signal<boolean>;
7388
+ readonly aiFormConfig: _angular_core.Signal<DynamicFormConfig>;
7389
+ readonly rows: _angular_core.Signal<ConnectionRowVm[]>;
7390
+ readonly aiRows: _angular_core.Signal<ConnectionRowVm[]>;
7391
+ readonly accountRows: _angular_core.Signal<ConnectionRowVm[]>;
7392
+ readonly localRows: _angular_core.Signal<ConnectionRowVm[]>;
7393
+ readonly columns: ColumnDef[];
7394
+ readonly rowActions: TableAction[];
7395
+ constructor();
7396
+ ngOnInit(): void;
7397
+ setSection(key: IntegrationSectionKey): void;
7398
+ saveAiProfile(): void;
7399
+ testAiProfile(): void;
7400
+ addConnection(kind: ConnectionFormKind): void;
7401
+ editConnection(connection: IntegrationConnectionSummary): void;
7402
+ private openForm;
7403
+ private kindForConnection;
7404
+ private maskedSummary;
7405
+ private label;
7406
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<IntegrationsPageComponent, never>;
7407
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<IntegrationsPageComponent, "fp-integrations-page", never, {}, {}, never, never, true, never>;
7408
+ }
7409
+
7410
+ type OperationsTab = 'overview' | 'instances' | 'work-items' | 'automations' | 'audit';
7411
+ interface KpiTile {
7412
+ label: string;
7413
+ value: number;
7414
+ tab?: OperationsTab;
7415
+ tone?: 'default' | 'warn' | 'danger';
7416
+ }
7417
+ /**
7418
+ * Control Panel -> Operations. Read/monitor dashboard for the automation
7419
+ * system: overview KPIs, instances (+ detail), work items, automations, audit.
7420
+ */
7421
+ declare class OperationsPageComponent implements OnInit {
7422
+ readonly facade: OperationsFacade;
7423
+ readonly activeTab: _angular_core.WritableSignal<OperationsTab>;
7424
+ readonly selectedInstanceRef: _angular_core.WritableSignal<string | null>;
7425
+ readonly tabs: {
7426
+ key: OperationsTab;
7427
+ label: string;
7428
+ }[];
7429
+ readonly kpis: _angular_core.Signal<KpiTile[]>;
7430
+ readonly instanceColumns: ColumnDef[];
7431
+ readonly workItemColumns: ColumnDef[];
7432
+ readonly automationColumns: ColumnDef[];
7433
+ readonly auditColumns: ColumnDef[];
7434
+ readonly instanceRowActions: TableAction[];
7435
+ ngOnInit(): void;
7436
+ setTab(tab: OperationsTab): void;
7437
+ onKpiClick(tile: KpiTile): void;
7438
+ openInstance(instanceRef: string): void;
7439
+ closeInstance(): void;
7440
+ refresh(): void;
7441
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OperationsPageComponent, never>;
7442
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OperationsPageComponent, "fp-operations-page", never, {}, {}, never, never, true, never>;
7443
+ }
7444
+
7445
+ type ClientTab = 'start' | 'tasks' | 'history' | 'requests';
7446
+ /**
7447
+ * Client automation hub: start requests, act on tasks/approvals, review
7448
+ * history, and track my requests. Mounted by the client app via route.
7449
+ */
7450
+ declare class ClientAutomationPageComponent implements OnInit {
7451
+ readonly facade: ClientAutomationFacade;
7452
+ private readonly modal;
7453
+ readonly activeTab: _angular_core.WritableSignal<ClientTab>;
7454
+ readonly selectedRequestRef: _angular_core.WritableSignal<string | null>;
7455
+ readonly tabs: _angular_core.Signal<({
7456
+ key: ClientTab;
7457
+ label: string;
7458
+ badge?: undefined;
7459
+ } | {
7460
+ key: ClientTab;
7461
+ label: string;
7462
+ badge: number;
7463
+ })[]>;
7464
+ readonly interactionColumns: ColumnDef[];
7465
+ readonly requestColumns: ColumnDef[];
7466
+ readonly currentRowActions: TableAction[];
7467
+ readonly requestRowActions: TableAction[];
7468
+ ngOnInit(): void;
7469
+ setTab(tab: ClientTab): void;
7470
+ runTrigger(trigger: ClientManualTrigger): void;
7471
+ openForm(form: ClientStartForm): void;
7472
+ openInteraction(interaction: ClientInteraction): void;
7473
+ openRequest(request: ClientRequestSummary): void;
7474
+ closeRequest(): void;
7475
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ClientAutomationPageComponent, never>;
7476
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ClientAutomationPageComponent, "fp-client-automation-page", never, {}, {}, never, never, true, never>;
7477
+ }
7478
+
7479
+ interface ClientStartFormDialogData {
7480
+ form: ClientStartForm;
7481
+ }
7482
+ /**
7483
+ * Renders a start form from its `schemaSnapshotJson` (JSON-schema `properties`)
7484
+ * via the shared DynamicForm, and submits with the SAME `formRevisionId` the
7485
+ * user opened. Minimal generic mapping — string/number/boolean.
7486
+ */
7487
+ declare class ClientStartFormDialogComponent implements OnInit {
7488
+ readonly modalService: ModalService;
7489
+ private readonly ref;
7490
+ readonly facade: ClientAutomationFacade;
7491
+ readonly data: _angular_core.InputSignal<ClientStartFormDialogData | null>;
7492
+ readonly form: FormControl<Record<string, unknown>>;
7493
+ readonly formConfig: _angular_core.WritableSignal<DynamicFormConfig>;
7494
+ readonly error: _angular_core.WritableSignal<string | null>;
7495
+ readonly startForm: _angular_core.Signal<ClientStartForm | null>;
7496
+ ngOnInit(): void;
7497
+ onSubmit(): void;
7498
+ onCancel(): void;
7499
+ private buildConfig;
7500
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ClientStartFormDialogComponent, never>;
7501
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ClientStartFormDialogComponent, "fp-client-start-form-dialog", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
7502
+ }
7503
+
7504
+ interface ClientInteractionDialogData {
7505
+ interactionId: number | string;
7506
+ }
7507
+ interface ActionButton {
7508
+ action: InteractionAction;
7509
+ label: string;
7510
+ severity: 'primary' | 'success' | 'danger' | 'secondary';
7511
+ requiresComment?: boolean;
7512
+ requiresDelegate?: boolean;
7513
+ }
7514
+ interface ActionFormValue {
7515
+ comments: string;
7516
+ delegateTo: string;
7517
+ }
7518
+ /**
7519
+ * Task / approval detail. Action buttons are derived STRICTLY from the
7520
+ * interaction's `allowedActions` — never from status. Comments / delegate use
7521
+ * the shared reactive DynamicForm. Closes with `true` on success.
7522
+ */
7523
+ declare class ClientInteractionDialogComponent implements OnInit {
7524
+ readonly modalService: ModalService;
7525
+ private readonly ref;
7526
+ private readonly transloco;
7527
+ readonly facade: ClientAutomationFacade;
7528
+ readonly data: _angular_core.InputSignal<ClientInteractionDialogData | null>;
7529
+ readonly form: FormControl<ActionFormValue>;
7530
+ private readonly formValue;
7531
+ readonly actionButtons: _angular_core.Signal<ActionButton[]>;
7532
+ readonly hasComment: _angular_core.Signal<boolean>;
7533
+ readonly hasDelegate: _angular_core.Signal<boolean>;
7534
+ readonly formConfig: _angular_core.Signal<DynamicFormConfig>;
7535
+ readonly hasFormFields: _angular_core.Signal<boolean>;
7536
+ readonly payloadJson: _angular_core.Signal<string | null>;
7537
+ ngOnInit(): void;
7538
+ canRun(b: ActionButton): boolean;
7539
+ run(b: ActionButton): void;
7540
+ onClose(): void;
7541
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ClientInteractionDialogComponent, never>;
7542
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ClientInteractionDialogComponent, "fp-client-interaction-dialog", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
7543
+ }
7544
+
5457
7545
  /**
5458
7546
  * @deprecated
5459
7547
  *
@@ -5587,7 +7675,7 @@ interface InspectorTab {
5587
7675
  declare class InspectorShellComponent {
5588
7676
  readonly store: FlowplusWorkflowFacade;
5589
7677
  private readonly transloco;
5590
- readonly mode: _angular_core.InputSignal<"modal" | "drawer">;
7678
+ readonly mode: _angular_core.InputSignal<"drawer" | "modal">;
5591
7679
  stepChange: EventEmitter<{
5592
7680
  step: WorkflowStepDto;
5593
7681
  patch: Partial<WorkflowStepDto>;
@@ -5605,7 +7693,8 @@ declare class InspectorShellComponent {
5605
7693
  readonly selectedConnection: _angular_core.Signal<WorkflowConnectionDto | null>;
5606
7694
  readonly selectedStepIssues: _angular_core.Signal<WorkflowValidationIssueDto[]>;
5607
7695
  readonly selectedStepIssueTone: _angular_core.Signal<"error" | "warning" | "info">;
5608
- readonly selectedStepUsesSmartEditor: _angular_core.Signal<boolean>;
7696
+ /** True when the selected step's Configure tab is rendered by `fp-config-form`. */
7697
+ readonly selectedStepUsesConfigEngine: _angular_core.Signal<boolean>;
5609
7698
  readonly activeTab: _angular_core.Signal<string>;
5610
7699
  readonly containerClass: _angular_core.Signal<"flex flex-1 flex-col min-h-0 overflow-hidden border-s border-(--p-content-border-color) bg-(--p-content-background)" | "flex flex-1 flex-col min-h-0 overflow-hidden bg-transparent">;
5611
7700
  readonly contentClass: _angular_core.Signal<"flex-1 overflow-y-auto px-5 pt-4 pb-8" | "flex-1 overflow-y-auto px-6 py-5">;
@@ -6705,5 +8794,5 @@ declare class DagreFlowLayoutEngine implements FlowLayoutEngine {
6705
8794
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<DagreFlowLayoutEngine>;
6706
8795
  }
6707
8796
 
6708
- export { APP_STATES, AddCanvasNote, ApplyAutomationExecutionDetail, ApplyBuilderCommand, ApplyBuilderSnapshot, AutomationBuilderCatalogApiService, AutomationDesignApiService, AutomationExecutionApiService, AutomationExecutionsPageComponent, BottomPanelComponent, BuilderTopbarComponent, CancelAutomationExecution, ClearAutomationRuntimeState, ClearCommandHistory, ClearConflict, ClearPendingOperation, ClearSelection, ClearWorkflowBuilder, CommitStepUpdates, CommitWorkflowMetadata, ConnectionCreated, ConnectionCreationFailed, ContextPickerComponent, ContextPillButtonComponent, ContextPillComponent, CreateConnection, CreateStep, CreateTrigger, CreateWorkflow, DagreFlowLayoutEngine, DeleteCanvasNote, DeleteConnection, DeleteStep, DeleteTrigger, DeleteWorkflow, DuplicateCanvasNote, DuplicateWorkflow, EndpointBuilder, FLOWPLUS_FORM_DESIGNER_ADAPTER, FLOWPLUS_RETURN_LOOP_CONNECTION_TYPE, FLOWPLUS_WORKFLOW_CONFIG, FLOWPLUS_WORKFLOW_DEFAULT_RUNTIME, FLOWPLUS_WORKFLOW_DEFAULT_STATE, FLOWPLUS_WORKFLOW_NAVIGATION, FLOWPLUS_WORKFLOW_ROUTES, FLOW_NODE_BASE_HEIGHT, FLOW_NODE_CARD_WIDTH, FLOW_NODE_MULTI_OUTPUT_GAP, FLOW_NODE_OUTPUT_SIZE, FlowCanvasComponent, FlowNodeComponent, FlowplusWorkflowActionKey, FlowplusWorkflowFacade, FlowplusWorkflowNavigationService, FlowplusWorkflowOverlayService, FlowplusWorkflowState, InspectorShellComponent, KeyboardShortcutsService, LOCAL_FALLBACK_CATALOG, LoadAutomationExecution, LoadContextCatalog, LoadContextCatalogForStep, LoadLatestAutomationExecution, LoadLayout, LoadTriggers, LoadWorkflowBuilder, LoadWorkflowCatalog, LoadWorkflowList, MarkLayoutDirty, MoveStep, NODE_COLOR_TOKEN, NODE_DEFAULT_ICON, NODE_MT_ICON, NoopFlowplusFormDesignerAdapter, PaletteComponent, PaletteDragSourceDirective, PollAutomationExecution, ProblemsPanelComponent, ProcessCreateDialogComponent, PublishWorkflow, RedoBuilderCommand, ReloadWorkflowBuilder, RunAutomationTrigger, RunWorkflowTest, SaveLayout, SelectCanvasNote, SelectConnection, SelectRuntimeNodeRun, SelectStep, SelectTrigger, SetActiveInspectorTab, SetBottomPanelHeight, SetBottomPanelOpen, SetBottomPanelTab, SetCanvasViewport, SetContextCatalog, SetCreateDialogOpen, SetInspectorOpen, SetLayout, SetLayoutAutosavePaused, SetMinimap, SetPaletteOpen, SetPaletteSearch, SetPendingOperation, SetReadonly, SetSelectedRuntimeTrigger, SetSelection, SetSelectionFromCanvas, SetStudioFilter, SetValidation, SetWorkflowCatalog, SetWorkflowDefinition, StepCreated, StepCreationFailed, TRIGGER_MT_ICON, TestRunPanelComponent, UnconfiguredFormDesignerAdapter, UndoBuilderCommand, UnpublishWorkflow, UpdateCanvasNote, UpdateConnection, UpdateStep, UpdateTrigger, UpdateWorkflowMetadata, UpdateWorkflowResources, UpdateWorkflowVariables, ValidateWorkflow, WorkflowBuilderPageComponent, WorkflowCatalogApiService, WorkflowContextApiService, WorkflowDebugApiService, WorkflowDefinitionApiService, WorkflowFormApiService, WorkflowRunDebuggerPageComponent, WorkflowRuntimeApiService, WorkflowStudioPageComponent, WorkflowValidationApiService, allValidationIssues, applyBuilderSnapshot, avatarSeverityForStep, avatarSeverityForTrigger, canShowConnectionQuickAdd, canonicalTriggerTypeForStarterKind, coerceTranslatable, colorVarFor, computeBranchLanes, computeSaveStatus, connectionCanvasId, connectionClosesDirectedCycle, derivePortsForStep, extractMessage, flowNodeCardHeightForOutputs, flowNodeLayoutHeightForOutputs, flowNodeOutputCenterY, flowNodeOutputStackHeight, flowPortKeyExists, fromWorkflowConnectionDomain, fromWorkflowStepDomain, hasOtherPending, iconFor, indexValidationByConnectionId, indexValidationByStepId, indexValidationByTriggerId, inputPortId, isEntityDirty, isReturnConnectionForCanvas, mapHttpError, mtIconForStep, mtIconForTrigger, newClientMutationId, nextOperationId, nodeCanvasId, outputPortId, parseConnectionId, parseNodeId, parsePortId, parseTriggerOutputPortId, parseTriggerStartConnectionId, patchLayoutPosition, patchTriggerLayoutPosition, provideFlowplusFormDesignerAdapter, provideFlowplusWorkflow, provideFlowplusWorkflowNavigation, provideFlowplusWorkflowNavigationDefaults, readRecord, removeStepWithEdges, resolveConnectionEndpointStep, resolveTranslatable, resolveTriggerStartNodeKey, resolveTriggerStartStep, resolveTriggerStartStepId, resolveWorkflowTriggerKey, routeConnectionForCanvas, savingOrSaved, shouldPublishCurrentDefinitionBeforeRun, summarizeTriggerCycleValidation, tempNodeCanvasId, toWorkflowConnectionDomain, toWorkflowDefinitionDomain, toWorkflowStepDomain, toWorkflowTriggerDomain, triggerCanvasId, triggerOutputPortId, triggerStartConnectionCanvasId, triggerStarterKindFor, unwrap, unwrapApiData, upsertConnection, upsertStep };
6709
- export type { ActivateAutomationRequest, ActivationResult, ApiEnvelope, AssignmentSelectorContractResult, AssignmentValidationRequest, AutomationBuilderCatalog, AutomationEngineHealthSnapshot, AutomationExecutionDetail, AutomationExecutionEvent, AutomationExecutionListResult, AutomationExecutionNodeDataDetail, AutomationExecutionStatus, AutomationExecutionSummary, AutomationExportDefinition, AutomationFormBindingDefinition, AutomationFrontendDetail, AutomationFrontendListResult, AutomationImportRequest, AutomationImportResult, AutomationLastExecutionSummary, AutomationMetadataRequest, AutomationNodeAttempt, AutomationNodeDefinition, AutomationNodeRun, AutomationNodeTestRunExternalCallAudit, AutomationNodeTestRunLogEntry, AutomationNodeTestRunRequest, AutomationNodeTestRunResult, AutomationNodeTestRunStatus, AutomationNodeTestRunValidationIssue, AutomationNodeType, AutomationRetentionPruneResult, AutomationRevisionDiffResult, AutomationRevisionSummary, AutomationRouteDefinition, AutomationRunResult, AutomationRuntimeWait, AutomationRuntimeWaitResumeTokenResult, AutomationSelectorItem, AutomationSelectorResult, AutomationStatus, AutomationSummary, AutomationTriggerDefinition, AutomationTriggerType, AutomationValidationIssue, AutomationValidationReport, AutomationValidationSummary, AvatarSeverityVars, BatchBuilderPatchRequest, ConnectorActionCatalogItem, ConnectorCatalog, ConnectorProviderCatalogItem, ConvertToFileActionCatalogItem, ConvertToFileCatalog, CreateWorkflowConnectionRequest, CreateWorkflowDefinitionRequest, CreateWorkflowPluginStepRequest, CreateWorkflowStepRequest, CredentialFieldDescriptor, CredentialMutationResult, CredentialOAuthStartRequest, CredentialOAuthStartResult, CredentialProviderCatalogItem, CredentialReference, CredentialReferenceListResult, CredentialTestRequest, CredentialTestResult, CredentialTypeCatalogItem, CredentialTypeCatalogResult, DataTransformActionCatalogItem, DataTransformCatalog, EngineEventDto, ExecutionCancelResult, ExecutionRetryRequest, ExecutionRetryResult, ExpressionNamespaceDescriptor, ExpressionPreviewRequest, ExpressionPreviewResult, ExpressionValidationRequest, ExpressionValidationResult, FlowBranchLaneVm, FlowCanvasConnectionPosition, FlowCanvasConnectionRouting, FlowCanvasConnectionRoutingContext, FlowCanvasConnectionSide, FlowCanvasConnectionType, FlowCanvasConnectionWaypoint, FlowCanvasEdgeVm, FlowCanvasNodeVm, FlowLayoutEngine, FlowNodePortVm, FlowPlusCommitMappingValidationRequest, FlowPlusModuleCatalogItem, FlowPlusModuleCatalogResult, FlowPlusModuleField, FlowPlusModuleSchemaResult, FlowPortDirection, FlowPortSide, FlowplusApiError, FlowplusBuilderCommand, FlowplusBuilderSlice, FlowplusConflictState, FlowplusDirtyFlags, FlowplusExecutionRuntimeSlice, FlowplusFormDesignerAdapter, FlowplusPendingOperation, FlowplusPublishStatus, FlowplusRuntimeNodeState, FlowplusRuntimeNodeVisualState, FlowplusRuntimeReplayMode, FlowplusRuntimeRouteState, FlowplusRuntimeRouteVisualState, FlowplusRuntimeTriggerState, FlowplusRuntimeTriggerVisualState, FlowplusSaveStatus, FlowplusSelection, FlowplusStudioSlice, FlowplusTriggerExecutionRequest, FlowplusUiState, FlowplusWorkflowConfig, FlowplusWorkflowNavigationConfig, FlowplusWorkflowStateModel, FormBindingDefinitionRequest, FormSchemaResult, FormSelectorContractResult, FormSelectorItem, FormVersionListResult, FormVersionSummary, FormulaBuilderValue, HumanApprovalDecisionRequest, HumanApprovalDecisionResult, HumanTaskActionResult, HumanTaskAssignment, HumanTaskCancelRequest, HumanTaskDraftRequest, HumanTaskPayloadResult, HumanTaskSubmitRequest, JsonSchemaLite, ManualCredentialCreateRequest, NavigationTarget, NodeDefinitionRequest, NodeTypeCatalogItem, OpenStepFormDesignerInput, OpenStepFormPreviewInput, PagedResult, ProcessContextEntryDto, ProcessContextLineageNodeDto, ProcessContextSnapshotDto, ProcessContextTimelineEventDto, ProcessFormLoadRequest, ProcessFormLoadResponseDto, ProcessStartRequest, ProcessStartResultDto, ProcessSubmitOperationKey, ProcessSubmitRequest, ProcessSubmitResponseDto, ProcessSubmitStatus, PublishAutomationRequest, PublishAutomationResult, QueuedNodeSummary, RouteDefinitionRequest, ScheduleOptionsResult, SchedulePreviewRequest, SchedulePreviewResult, ScheduleValidationRequest, StepFormDesignerResult, StepFormPreviewResult, TaskActionRequest, TaskActionResultDto, TranslatableText, TriggerCycleValidationSummary, TriggerDefinitionRequest, TriggerNodeVm, TriggerStarterKind, TriggerTypeCatalogItem, UpdateWorkflowConnectionRequest, UpdateWorkflowDefinitionRequest, UpdateWorkflowStepRequest, WaitResumeRequest, WaitResumeResult, WebhookSetupResult, WorkflowAppActionDescriptorDto, WorkflowAppActionMappingDto, WorkflowAppActionOptionDto, WorkflowAppActionStepConfigDto, WorkflowAppDescriptorDto, WorkflowAutomatedOutputMappingDto, WorkflowAutomatedStepConfigDto, WorkflowBuilderCapabilitiesDto, WorkflowBuilderDto, WorkflowBuilderPermissionsDto, WorkflowCatalogDefaultsDto, WorkflowCatalogDto, WorkflowCatalogOptionDto, WorkflowConnectionDomain, WorkflowConnectionDto, WorkflowConnectionLayoutDto, WorkflowContextCatalogDto, WorkflowContextCatalogSourceDto, WorkflowContextPathValidationRequest, WorkflowContextPathValidationResultDto, WorkflowContextSourceType, WorkflowContextValueType, WorkflowDefinitionDomain, WorkflowDefinitionDto, WorkflowDefinitionListQuery, WorkflowDefinitionListResult, WorkflowDefinitionSummaryDto, WorkflowFormBindingContractDto, WorkflowFormBindingMode, WorkflowJoinParallelStepConfigDto, WorkflowLayoutDto, WorkflowNodeLayoutDto, WorkflowPluginDescriptorDto, WorkflowPluginStepConfigDto, WorkflowResourceBindingDto, WorkflowRuntimeRoutingPolicyDto, WorkflowSelectedActionDto, WorkflowStartParallelStepConfigDto, WorkflowStatus, WorkflowStepActionCatalogItemDto, WorkflowStepActionDto, WorkflowStepCategory, WorkflowStepDefaultsItemDto, WorkflowStepDomain, WorkflowStepDto, WorkflowStepFormBindingDto, WorkflowStepFormContractDto, WorkflowStepFormUpdateRequest, WorkflowStepPropertyDto, WorkflowStepType, WorkflowStepTypeCapabilityItemDto, WorkflowStepTypeCatalogItemDto, WorkflowSubprocessContextMappingDto, WorkflowSubprocessPropertyMappingDto, WorkflowSubprocessStepConfigDto, WorkflowTestRunConnectionDecisionDto, WorkflowTestRunContextChangeDto, WorkflowTestRunContextValueDto, WorkflowTestRunMode, WorkflowTestRunRequest, WorkflowTestRunResultDto, WorkflowTestRunStatus, WorkflowTestStepResultDto, WorkflowTestStepStatus, WorkflowTriggerDomain, WorkflowTriggerDto, WorkflowTriggerType, WorkflowValidationEntityType, WorkflowValidationGroupKey, WorkflowValidationGroupedIssuesDto, WorkflowValidationIssueDto, WorkflowValidationIssueSeverity, WorkflowValidationResultDto, WorkflowValidationSeverity, WorkflowValidationStateDto, WorkflowVariableCollectionDto, WorkflowVariableDto, WorkflowVariableRequest, WorkflowViewportDto };
8797
+ export { AI_FORBIDDEN_NODE_CONFIG_KEYS, APP_STATES, AddCanvasNote, ApplyAutomationExecutionDetail, ApplyBuilderCommand, ApplyBuilderSnapshot, AutomationBuilderCatalogApiService, AutomationDesignApiService, AutomationExecutionApiService, AutomationExecutionsPageComponent, BottomPanelComponent, BuilderTopbarComponent, CLIENT_AUTOMATION_DEFAULT_STATE, CancelAutomationExecution, ClearAutomationRuntimeState, ClearCommandHistory, ClearConflict, ClearPendingOperation, ClearSelection, ClearWorkflowBuilder, ClientAutomationActionKey, ClientAutomationFacade, ClientAutomationPageComponent, ClientAutomationState, ClientInteractionDialogComponent, ClientStartFormDialogComponent, CommitStepUpdates, CommitWorkflowMetadata, ConnectionCreated, ConnectionCreationFailed, ContextPickerComponent, ContextPillButtonComponent, ContextPillComponent, CreateConnection, CreateLocalOpenAiConnection, CreateManualConnection, CreateOpenAiConnection, CreateStep, CreateTrigger, CreateWorkflow, DagreFlowLayoutEngine, DeleteCanvasNote, DeleteConnection, DeleteStep, DeleteTrigger, DeleteWorkflow, DuplicateCanvasNote, DuplicateWorkflow, EndpointBuilder, ExecuteInteractionAction, FLOWPLUS_FORM_DESIGNER_ADAPTER, FLOWPLUS_RETURN_LOOP_CONNECTION_TYPE, FLOWPLUS_WORKFLOW_CONFIG, FLOWPLUS_WORKFLOW_DEFAULT_RUNTIME, FLOWPLUS_WORKFLOW_DEFAULT_STATE, FLOWPLUS_WORKFLOW_NAVIGATION, FLOWPLUS_WORKFLOW_ROUTES, FLOW_NODE_BASE_HEIGHT, FLOW_NODE_CARD_WIDTH, FLOW_NODE_MULTI_OUTPUT_GAP, FLOW_NODE_OUTPUT_SIZE, FlowCanvasComponent, FlowNodeComponent, FlowplusWorkflowActionKey, FlowplusWorkflowFacade, FlowplusWorkflowNavigationService, FlowplusWorkflowOverlayService, FlowplusWorkflowState, INTEGRATIONS_DEFAULT_STATE, InspectorShellComponent, IntegrationConnectionFormComponent, IntegrationsActionKey, IntegrationsFacade, IntegrationsPageComponent, IntegrationsState, KeyboardShortcutsService, LOCAL_FALLBACK_CATALOG, LoadAiProfile, LoadAutomationExecution, LoadContextCatalog, LoadContextCatalogForStep, LoadCurrentInteractions, LoadIntegrationsCatalog, LoadIntegrationsConnections, LoadIntegrationsOverview, LoadInteractionDetail, LoadInteractionHistory, LoadLatestAutomationExecution, LoadLayout, LoadMyRequests, LoadOperationsAuditEvents, LoadOperationsAutomations, LoadOperationsBottlenecks, LoadOperationsHealth, LoadOperationsInstance, LoadOperationsInstanceTimeline, LoadOperationsInstances, LoadOperationsOverview, LoadOperationsWorkItems, LoadRequestLifecycle, LoadStartCatalog, LoadTriggers, LoadWorkflowBuilder, LoadWorkflowCatalog, LoadWorkflowList, MarkLayoutDirty, MoveStep, NODE_COLOR_TOKEN, NODE_DEFAULT_ICON, NODE_MT_ICON, NoopFlowplusFormDesignerAdapter, OPERATIONS_DEFAULT_STATE, OperationsActionKey, OperationsFacade, OperationsPageComponent, OperationsState, PaletteComponent, PaletteDragSourceDirective, PollAutomationExecution, ProblemsPanelComponent, ProcessCreateDialogComponent, PublishWorkflow, RedoBuilderCommand, ReloadWorkflowBuilder, RevokeConnection, RunAutomationTrigger, RunManualTrigger, RunWorkflowTest, SaveAiProfile, SaveInteractionDraft, SaveLayout, SelectCanvasNote, SelectConnection, SelectRuntimeNodeRun, SelectStep, SelectTrigger, SetActiveInspectorTab, SetBottomPanelHeight, SetBottomPanelOpen, SetBottomPanelTab, SetCanvasViewport, SetContextCatalog, SetCreateDialogOpen, SetInspectorOpen, SetLayout, SetLayoutAutosavePaused, SetMinimap, SetPaletteOpen, SetPaletteSearch, SetPendingOperation, SetReadonly, SetSelectedRuntimeTrigger, SetSelection, SetSelectionFromCanvas, SetStudioFilter, SetValidation, SetWorkflowCatalog, SetWorkflowDefinition, StepCreated, StepCreationFailed, SubmitStartForm, TRIGGER_MT_ICON, TestAiProfile, TestConnection, TestRunPanelComponent, UnconfiguredFormDesignerAdapter, UndoBuilderCommand, UnpublishWorkflow, UpdateCanvasNote, UpdateConnection, UpdateLocalOpenAiConnection, UpdateOpenAiConnection, UpdateStep, UpdateTrigger, UpdateWorkflowMetadata, UpdateWorkflowResources, UpdateWorkflowVariables, ValidateWorkflow, WorkflowBuilderPageComponent, WorkflowCatalogApiService, WorkflowContextApiService, WorkflowDebugApiService, WorkflowDefinitionApiService, WorkflowFormApiService, WorkflowRunDebuggerPageComponent, WorkflowRuntimeApiService, WorkflowStudioPageComponent, WorkflowValidationApiService, allValidationIssues, applyBuilderSnapshot, avatarSeverityForStep, avatarSeverityForTrigger, canShowConnectionQuickAdd, canonicalTriggerTypeForStarterKind, coerceTranslatable, colorVarFor, computeBranchLanes, computeSaveStatus, connectionCanvasId, connectionClosesDirectedCycle, derivePortsForStep, extractMessage, flowNodeCardHeightForOutputs, flowNodeLayoutHeightForOutputs, flowNodeOutputCenterY, flowNodeOutputStackHeight, flowPortKeyExists, fromWorkflowConnectionDomain, fromWorkflowStepDomain, hasOtherPending, iconFor, indexValidationByConnectionId, indexValidationByStepId, indexValidationByTriggerId, inputPortId, isEntityDirty, isReturnConnectionForCanvas, mapHttpError, mtIconForStep, mtIconForTrigger, newClientMutationId, nextOperationId, nodeCanvasId, outputPortId, parseConnectionId, parseNodeId, parsePortId, parseTriggerOutputPortId, parseTriggerStartConnectionId, patchLayoutPosition, patchTriggerLayoutPosition, provideFlowplusFormDesignerAdapter, provideFlowplusWorkflow, provideFlowplusWorkflowNavigation, provideFlowplusWorkflowNavigationDefaults, readAiNodeHelperMetadata, readRecord, removeStepWithEdges, resolveConnectionEndpointStep, resolveTranslatable, resolveTriggerStartNodeKey, resolveTriggerStartStep, resolveTriggerStartStepId, resolveWorkflowTriggerKey, routeConnectionForCanvas, savingOrSaved, shouldPublishCurrentDefinitionBeforeRun, summarizeTriggerCycleValidation, tempNodeCanvasId, toWorkflowConnectionDomain, toWorkflowDefinitionDomain, toWorkflowStepDomain, toWorkflowTriggerDomain, triggerCanvasId, triggerOutputPortId, triggerStartConnectionCanvasId, triggerStarterKindFor, unwrap, unwrapApiData, upsertConnection, upsertStep };
8798
+ export type { ActivateAutomationRequest, ActivationResult, AdminOperationsQuery, AiNodeHelperMetadata, AiNodeKind, AiProfile, AiProfileUpdateRequest, AiProfileValidationStatus, AiProviderErrorCode, AiProviderMetadata, AiTokenUsage, ApiEnvelope, AssignmentSelectorContractResult, AssignmentValidationRequest, AutomationBuilderCatalog, AutomationCommandHeaders, AutomationEngineHealthSnapshot, AutomationExecutionDetail, AutomationExecutionEvent, AutomationExecutionListResult, AutomationExecutionNodeDataDetail, AutomationExecutionStatus, AutomationExecutionSummary, AutomationExportDefinition, AutomationFormBindingDefinition, AutomationFrontendDetail, AutomationFrontendListResult, AutomationImportRequest, AutomationImportResult, AutomationLastExecutionSummary, AutomationMetadataRequest, AutomationNodeAttempt, AutomationNodeDefinition, AutomationNodeRun, AutomationNodeTestRunExternalCallAudit, AutomationNodeTestRunLogEntry, AutomationNodeTestRunRequest, AutomationNodeTestRunResult, AutomationNodeTestRunStatus, AutomationNodeTestRunValidationIssue, AutomationNodeType, AutomationPagedResult, AutomationRetentionPruneResult, AutomationRevisionDiffResult, AutomationRevisionSummary, AutomationRouteDefinition, AutomationRunResult, AutomationRuntimeWait, AutomationRuntimeWaitResumeTokenResult, AutomationSelectorItem, AutomationSelectorResult, AutomationStatus, AutomationSummary, AutomationTriggerDefinition, AutomationTriggerType, AutomationValidationIssue, AutomationValidationReport, AutomationValidationSummary, AvatarSeverityVars, BatchBuilderPatchRequest, BusinessActionActorContext, BusinessActionApp, BusinessActionAppsResult, BusinessActionAutomationContext, BusinessActionCatalog, BusinessActionDefinition, BusinessActionDiscoveryContext, BusinessActionError, BusinessActionField, BusinessActionListResult, BusinessActionNodeConfig, BusinessActionOption, BusinessActionOptionProvider, BusinessActionOptionsRequest, BusinessActionOptionsResponse, BusinessActionTestRequest, BusinessActionTestResponse, BusinessActionValidateRequest, BusinessActionValidateResponse, BusinessActionValidationIssue, CanonicalFormDefinitionDetail, CanonicalFormDefinitionSummary, CanonicalFormListParams, CanonicalFormRevisionDetail, CanonicalFormRevisionPublishResult, CanonicalFormRevisionSummary, CanonicalFormRevisionValidationResult, CanonicalModuleDefinitionDetail, CanonicalModuleDefinitionListParams, CanonicalModuleDefinitionSummary, CanonicalModuleField, CanonicalModuleSchema, ClientAutomationQuery, ClientAutomationStateModel, ClientInteraction, ClientInteractionDetail, ClientManualTrigger, ClientRequestLifecycle, ClientRequestLifecycleEvent, ClientRequestLifecycleStep, ClientRequestSummary, ClientStartCatalog, ClientStartForm, ConfigFieldWidget, ConfigUiAction, ConfigUiCompanionWrite, ConfigUiComputedRule, ConfigUiFieldHint, ConfigUiGroupSchema, ConfigUiListItemSchema, ConfigUiOptionsSource, ConfigUiSection, ConfigUiVisibilityRule, ConnectionTestRequest, ConnectionTestResult, ConnectorActionCatalogItem, ConnectorCatalog, ConnectorProviderCatalogItem, ConvertToFileActionCatalogItem, ConvertToFileCatalog, CreateCanonicalFormDefinitionRequest, CreateCanonicalFormRevisionRequest, CreateCanonicalModuleDefinitionRequest, CreateCanonicalModuleFieldRequest, CreateWorkflowConnectionRequest, CreateWorkflowDefinitionRequest, CreateWorkflowPluginStepRequest, CreateWorkflowStepRequest, CredentialFieldDescriptor, CredentialMutationResult, CredentialOAuthStartRequest, CredentialOAuthStartResult, CredentialProviderCatalogItem, CredentialReference, CredentialReferenceListResult, CredentialTestRequest, CredentialTestResult, CredentialTypeCatalogItem, CredentialTypeCatalogResult, DataTransformActionCatalogItem, DataTransformCatalog, EngineCommandError, EngineEventDto, ExecutionCancelResult, ExecutionNodeAiSummary, ExecutionRetryRequest, ExecutionRetryResult, ExpressionNamespaceDescriptor, ExpressionPreviewRequest, ExpressionPreviewResult, ExpressionValidationRequest, ExpressionValidationResult, FlowBranchLaneVm, FlowCanvasConnectionPosition, FlowCanvasConnectionRouting, FlowCanvasConnectionRoutingContext, FlowCanvasConnectionSide, FlowCanvasConnectionType, FlowCanvasConnectionWaypoint, FlowCanvasEdgeVm, FlowCanvasNodeVm, FlowLayoutEngine, FlowNodePortVm, FlowPlusCommitMappingValidationRequest, FlowPlusModuleCatalogItem, FlowPlusModuleCatalogResult, FlowPlusModuleField, FlowPlusModuleSchemaResult, FlowPortDirection, FlowPortSide, FlowplusApiError, FlowplusBuilderCommand, FlowplusBuilderSlice, FlowplusConflictState, FlowplusDirtyFlags, FlowplusExecutionRuntimeSlice, FlowplusFormDesignerAdapter, FlowplusPendingOperation, FlowplusPublishStatus, FlowplusRuntimeNodeState, FlowplusRuntimeNodeVisualState, FlowplusRuntimeReplayMode, FlowplusRuntimeRouteState, FlowplusRuntimeRouteVisualState, FlowplusRuntimeTriggerState, FlowplusRuntimeTriggerVisualState, FlowplusSaveStatus, FlowplusSelection, FlowplusStudioSlice, FlowplusTriggerExecutionRequest, FlowplusUiState, FlowplusWorkflowConfig, FlowplusWorkflowNavigationConfig, FlowplusWorkflowStateModel, FormBindingDefinitionRequest, FormDefinitionStatus, FormPurpose, FormRevisionStatus, FormSchemaResult, FormSelectorContractResult, FormSelectorItem, FormVersionListResult, FormVersionSummary, FormulaBuilderValue, GenericAiNodeConfig, HumanApprovalDecisionRequest, HumanApprovalDecisionResult, HumanTaskActionResult, HumanTaskAssignment, HumanTaskCancelRequest, HumanTaskDraftRequest, HumanTaskPayloadResult, HumanTaskSubmitRequest, InlineFormCreateRequest, InlineFormDraftResult, InlineFormDraftUpdateRequest, InlineFormDraftValidationIssue, InlineFormDraftValidationResult, InlineFormFieldDraft, IntegrationAuthType, IntegrationConnectionSummary, IntegrationConnectionsResponse, IntegrationProviderCatalogItem, IntegrationProviderCategory, IntegrationSection, IntegrationSectionKey, IntegrationsOverview, IntegrationsStateModel, InteractionAction, InteractionActionRequest, InteractionAllowedAction, JsonSchemaLite, LocalOpenAiCompatibleConnectionRequest, LocalProviderRequestMode, ManualConnectionRequest, ManualCredentialCreateRequest, ModuleDefinitionStatus, ModuleFieldDataType, ModuleFieldStorageType, NavigationTarget, NodeConfigUiSchema, NodeDefinitionRequest, NodeTypeCatalogItem, OpenAiConnectionRequest, OpenStepFormDesignerInput, OpenStepFormPreviewInput, OperationsAuditEvent, OperationsAutomationSummary, OperationsBottleneck, OperationsHealth, OperationsInstanceDetail, OperationsInstanceSummary, OperationsNodeRun, OperationsOpenWorkItem, OperationsOverview, OperationsRecentFailure, OperationsRuntimeWait, OperationsStateModel, OperationsStatusCount, OperationsTimelineEvent, OperationsWorkItem, PagedResult, ProcessContextEntryDto, ProcessContextLineageNodeDto, ProcessContextSnapshotDto, ProcessContextTimelineEventDto, ProcessFormLoadRequest, ProcessFormLoadResponseDto, ProcessStartRequest, ProcessStartResultDto, ProcessSubmitOperationKey, ProcessSubmitRequest, ProcessSubmitResponseDto, ProcessSubmitStatus, PublishAutomationRequest, PublishAutomationResult, QueuedNodeSummary, ReorderCanonicalModuleFieldRequestItem, ReorderCanonicalModuleFieldsRequest, RouteDefinitionRequest, RunManualTriggerRequest, SaveInteractionDraftRequest, ScheduleOptionsResult, SchedulePreviewRequest, SchedulePreviewResult, ScheduleValidationRequest, SpecializedAiNodeConfig, StepFormDesignerResult, StepFormPreviewResult, SubmitStartFormRequest, TaskActionRequest, TaskActionResultDto, TranslatableText, TriggerCycleValidationSummary, TriggerDefinitionRequest, TriggerNodeVm, TriggerStarterKind, TriggerTypeCatalogItem, UpdateCanonicalFormDefinitionRequest, UpdateCanonicalFormRevisionRequest, UpdateCanonicalModuleFieldRequest, UpdateWorkflowConnectionRequest, UpdateWorkflowDefinitionRequest, UpdateWorkflowStepRequest, WaitResumeRequest, WaitResumeResult, WebhookSetupResult, WorkflowAppActionDescriptorDto, WorkflowAppActionMappingDto, WorkflowAppActionOptionDto, WorkflowAppActionStepConfigDto, WorkflowAppDescriptorDto, WorkflowAutomatedOutputMappingDto, WorkflowAutomatedStepConfigDto, WorkflowBuilderCapabilitiesDto, WorkflowBuilderDto, WorkflowBuilderPermissionsDto, WorkflowCatalogDefaultsDto, WorkflowCatalogDto, WorkflowCatalogOptionDto, WorkflowConnectionDomain, WorkflowConnectionDto, WorkflowConnectionLayoutDto, WorkflowContextCatalogDto, WorkflowContextCatalogSourceDto, WorkflowContextPathValidationRequest, WorkflowContextPathValidationResultDto, WorkflowContextSourceType, WorkflowContextValueType, WorkflowDefinitionDomain, WorkflowDefinitionDto, WorkflowDefinitionListQuery, WorkflowDefinitionListResult, WorkflowDefinitionSummaryDto, WorkflowFormBindingContractDto, WorkflowFormBindingMode, WorkflowJoinParallelStepConfigDto, WorkflowLayoutDto, WorkflowNodeLayoutDto, WorkflowPluginDescriptorDto, WorkflowPluginStepConfigDto, WorkflowResourceBindingDto, WorkflowRuntimeRoutingPolicyDto, WorkflowSelectedActionDto, WorkflowStartParallelStepConfigDto, WorkflowStatus, WorkflowStepActionCatalogItemDto, WorkflowStepActionDto, WorkflowStepCategory, WorkflowStepDefaultsItemDto, WorkflowStepDomain, WorkflowStepDto, WorkflowStepFormBindingDto, WorkflowStepFormContractDto, WorkflowStepFormUpdateRequest, WorkflowStepPropertyDto, WorkflowStepType, WorkflowStepTypeCapabilityItemDto, WorkflowStepTypeCatalogItemDto, WorkflowSubprocessContextMappingDto, WorkflowSubprocessPropertyMappingDto, WorkflowSubprocessStepConfigDto, WorkflowTestRunConnectionDecisionDto, WorkflowTestRunContextChangeDto, WorkflowTestRunContextValueDto, WorkflowTestRunMode, WorkflowTestRunRequest, WorkflowTestRunResultDto, WorkflowTestRunStatus, WorkflowTestStepResultDto, WorkflowTestStepStatus, WorkflowTriggerDomain, WorkflowTriggerDto, WorkflowTriggerType, WorkflowValidationEntityType, WorkflowValidationGroupKey, WorkflowValidationGroupedIssuesDto, WorkflowValidationIssueDto, WorkflowValidationIssueSeverity, WorkflowValidationResultDto, WorkflowValidationSeverity, WorkflowValidationStateDto, WorkflowVariableCollectionDto, WorkflowVariableDto, WorkflowVariableRequest, WorkflowViewportDto };