windmill-client 1.811.1 → 1.813.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -937,6 +937,18 @@ export type AiAgent = {
937
937
  *
938
938
  */
939
939
  user_attachments?: InputTransform;
940
+ /**
941
+ * Array of strings naming which of the tools configured in `tools` the agent may call
942
+ * this run. Leaving it unset carries every one of them; an empty array carries none.
943
+ * A tool is named as the model is shown it. An entry the model is shown nothing of is
944
+ * named by what identifies it instead: an MCP server by its resource path, carrying
945
+ * every tool it exposes (which of them stays that entry's include_tools/exclude_tools),
946
+ * and a websearch entry by the reserved name '__wm_web_search', whatever summary it carries
947
+ * (no tool may take that name).
948
+ * Example: ['get_user', 'u/admin/github_mcp', '__wm_web_search']
949
+ *
950
+ */
951
+ enabled_tools?: InputTransform;
940
952
  /**
941
953
  * Integer. Maximum number of tokens the AI will generate in its response.
942
954
  * Range: 1 to 4,294,967,295. Typical values: 256-4096 for most use cases.
@@ -1011,7 +1023,7 @@ export type AiAgent = {
1011
1023
  * Path of a reusable `ai_agent` resource (hybrid linking). When set, the agent brain
1012
1024
  * config (provider/model/system prompt/etc.) and tool set are resolved at runtime from
1013
1025
  * that resource; the module's input_transforms then only carry the flow-local inputs
1014
- * (user_message/user_attachments).
1026
+ * (user_message/user_attachments/enabled_tools).
1015
1027
  *
1016
1028
  */
1017
1029
  agent?: string;
@@ -1895,6 +1907,97 @@ export type AIConfig = {
1895
1907
  * Hides the Windmill AI assistant (chat, sessions, code generation, completion, fixes) from the workspace UI. Read from the workspace's own settings even when the providers served fall back to the instance config. AI agent steps and the AI sandbox in flows are unaffected.
1896
1908
  */
1897
1909
  copilot_disabled?: boolean;
1910
+ /**
1911
+ * Stops browsers from backing their AI sessions up to the workspace's object storage. Read from the workspace's own settings like `copilot_disabled`.
1912
+ */
1913
+ sessions_storage_disabled?: boolean;
1914
+ /**
1915
+ * The server deletes the backup of a session no push has reached for this many days. Unset keeps backups until the user deletes the session. Read from the workspace's own settings like `copilot_disabled`.
1916
+ */
1917
+ sessions_retention_days?: number;
1918
+ };
1919
+ export type AISessionBackupListing = {
1920
+ id: string;
1921
+ updated_at: string;
1922
+ /**
1923
+ * the session's move count when this copy was pushed; of a session two workspaces list, the copy with the higher one is the later
1924
+ */
1925
+ epoch: number;
1926
+ };
1927
+ export type AISessionBackupImage = {
1928
+ chat_id: string;
1929
+ id: string;
1930
+ data_url: string;
1931
+ };
1932
+ export type AISessionBackupChat = {
1933
+ id: string;
1934
+ record: {
1935
+ [key: string]: unknown;
1936
+ };
1937
+ };
1938
+ export type AISessionBackup = {
1939
+ id: string;
1940
+ head: {
1941
+ [key: string]: unknown;
1942
+ };
1943
+ chats: Array<AISessionBackupChat>;
1944
+ images: Array<AISessionBackupImage>;
1945
+ artifacts?: {
1946
+ [key: string]: unknown;
1947
+ };
1948
+ next?: AISessionBackupCursor;
1949
+ /**
1950
+ * a fingerprint of the session's listing; pages of one session whose fingerprints differ do not belong together
1951
+ */
1952
+ listing: string;
1953
+ /**
1954
+ * the backup kept changing while this page was read, so it may mix two versions; the browser starts the session over
1955
+ */
1956
+ moved?: boolean;
1957
+ };
1958
+ /**
1959
+ * where a pull of a session that did not fit one answer whole picks up; the rest of the session follows a pull naming that session alone with this as `resume`
1960
+ */
1961
+ export type AISessionBackupCursor = {
1962
+ id: string;
1963
+ images: boolean;
1964
+ after: string;
1965
+ };
1966
+ export type AISessionBackupPush = {
1967
+ id: string;
1968
+ head?: {
1969
+ [key: string]: unknown;
1970
+ };
1971
+ chats?: Array<AISessionBackupChat>;
1972
+ images?: Array<AISessionBackupImage>;
1973
+ artifacts?: {
1974
+ [key: string]: unknown;
1975
+ };
1976
+ delete_chats?: Array<(string)>;
1977
+ delete_images?: Array<{
1978
+ chat_id: string;
1979
+ id: string;
1980
+ }>;
1981
+ /**
1982
+ * more parts of this session follow, in this push or a later one; the session is not listed on this one. Such a part names its push (`push`), or it is refused
1983
+ */
1984
+ partial?: boolean;
1985
+ /**
1986
+ * a part of a push of the session whole; the head is on the part that opens it, which replaces whatever the storage holds of the session, and every piece the browser has is on one of them. An incremental part instead rides on a session the storage lists and is refused with needs_whole when it lists none
1987
+ */
1988
+ whole?: boolean;
1989
+ /**
1990
+ * a push split over several parts names itself on each with a token the browser draws; the part that opens it unlists the session and the last part lists it again, and a later part is written only while that token is the one there (refused with needs_whole otherwise)
1991
+ */
1992
+ push?: string;
1993
+ /**
1994
+ * this part opens the push named by `push`
1995
+ */
1996
+ opens?: boolean;
1997
+ /**
1998
+ * the session's move count (its record's `moves`), kept with the marker that lists the session; an incremental part rides on the marker of the same count
1999
+ */
2000
+ epoch?: number;
1898
2001
  };
1899
2002
  /**
1900
2003
  * Read-only. Present when the workspace has no AI provider of its own and is running on Windmill's free tier. Ignored on write.
@@ -1946,6 +2049,15 @@ export type AITokenUsageBucket = {
1946
2049
  reported_cost_nano_usd?: number;
1947
2050
  requests: number;
1948
2051
  };
2052
+ export type SharedAiArtifactInfo = {
2053
+ id: string;
2054
+ name: string;
2055
+ kind: 'md' | 'html';
2056
+ version: number;
2057
+ created_by: string;
2058
+ shared_at: string;
2059
+ expires_at: string;
2060
+ };
1949
2061
  export type InstanceAIProviderSummary = {
1950
2062
  provider: AIProvider;
1951
2063
  models: Array<(string)>;
@@ -2792,6 +2904,30 @@ export type AuditLog = {
2792
2904
  };
2793
2905
  span?: string;
2794
2906
  };
2907
+ export type TrashItem = {
2908
+ id: number;
2909
+ workspace_id: string;
2910
+ /**
2911
+ * script, flow, app, schedule, variable, resource, or a trigger kind such as http_trigger
2912
+ */
2913
+ item_kind: string;
2914
+ item_path: string;
2915
+ deleted_by: string;
2916
+ deleted_at: string;
2917
+ /**
2918
+ * when the item is permanently deleted unless restored first
2919
+ */
2920
+ expires_at: string;
2921
+ };
2922
+ export type TrashItemWithData = TrashItem & {
2923
+ /**
2924
+ * the deleted rows as they were stored; the shape depends on the kind, and a secret variable's value stays encrypted
2925
+ *
2926
+ */
2927
+ item_data: {
2928
+ [key: string]: unknown;
2929
+ };
2930
+ };
2795
2931
  export type MainArgSignature = {
2796
2932
  type: 'Valid' | 'Invalid';
2797
2933
  error: string;
@@ -3008,6 +3144,10 @@ export type ResourceType = {
3008
3144
  edited_at?: string;
3009
3145
  format_extension?: string;
3010
3146
  is_fileset?: boolean;
3147
+ /**
3148
+ * The name the product goes by, e.g. "Google Sheets" for gsheets. Absent where nobody named the type.
3149
+ */
3150
+ display_name?: string;
3011
3151
  };
3012
3152
  export type EditResourceType = {
3013
3153
  schema?: unknown;
@@ -3017,6 +3157,10 @@ export type EditResourceType = {
3017
3157
  * File extension for a type whose value is one file rather than a set of fields. Omit to leave it unchanged; send null to clear it.
3018
3158
  */
3019
3159
  format_extension?: string | null;
3160
+ /**
3161
+ * The name the product goes by. Omit to leave it unchanged; send null to clear it.
3162
+ */
3163
+ display_name?: string | null;
3020
3164
  };
3021
3165
  export type TriggerHistoryEntry = {
3022
3166
  id: number;
@@ -3523,6 +3667,10 @@ export type HttpTrigger = TriggerExtraProperty & {
3523
3667
  * If true, passes the request body as a raw string instead of parsing as JSON
3524
3668
  */
3525
3669
  raw_string: boolean;
3670
+ /**
3671
+ * Origins allowed to call this route cross-origin, matched against the request's Origin header (ignoring case) and echoed back on a match. When set, the list governs both the preflight and the response, overriding any Access-Control-Allow-Origin the runnable returns via wm_headers. Use ['*'] to opt out of any restriction, including the http_route_default_allowed_origins instance setting. An empty list is not a configuration and resolves exactly as null does. When null, the instance setting applies, or Access-Control-Allow-Origin: * if it is unset. Ignored on a static website, which has no authentication of its own and so hands out public files: restricting which browsers may read them protects nothing while breaking cross-origin webfonts and fetches. A single-file static asset is not exempt, since it can carry an authentication_method.
3672
+ */
3673
+ allowed_origins?: Array<(string)> | null;
3526
3674
  /**
3527
3675
  * Path to a script to run when the triggered job fails. A bare path, without the script/ or flow/ prefix a schedule error handler takes; it cannot be a flow.
3528
3676
  */
@@ -3615,6 +3763,10 @@ export type NewHttpTrigger = {
3615
3763
  * If true, passes the request body as a raw string instead of parsing as JSON
3616
3764
  */
3617
3765
  raw_string?: boolean;
3766
+ /**
3767
+ * Origins allowed to call this route cross-origin, matched against the request's Origin header (ignoring case) and echoed back on a match. When set, the list governs both the preflight and the response, overriding any Access-Control-Allow-Origin the runnable returns via wm_headers. Use ['*'] to opt out of any restriction, including the http_route_default_allowed_origins instance setting. An empty list is not a configuration and resolves exactly as null does. When null, the instance setting applies, or Access-Control-Allow-Origin: * if it is unset. Ignored on a static website, which has no authentication of its own and so hands out public files: restricting which browsers may read them protects nothing while breaking cross-origin webfonts and fetches. A single-file static asset is not exempt, since it can carry an authentication_method.
3768
+ */
3769
+ allowed_origins?: Array<(string)> | null;
3618
3770
  /**
3619
3771
  * Path to a script to run when the triggered job fails. A bare path, without the script/ or flow/ prefix a schedule error handler takes; it cannot be a flow.
3620
3772
  */
@@ -3715,6 +3867,10 @@ export type EditHttpTrigger = {
3715
3867
  * If true, passes the request body as a raw string instead of parsing as JSON
3716
3868
  */
3717
3869
  raw_string?: boolean;
3870
+ /**
3871
+ * Origins allowed to call this route cross-origin, matched against the request's Origin header (ignoring case) and echoed back on a match. When set, the list governs both the preflight and the response, overriding any Access-Control-Allow-Origin the runnable returns via wm_headers. Use ['*'] to opt out of any restriction, including the http_route_default_allowed_origins instance setting. An empty list is not a configuration and resolves exactly as null does. When null, the instance setting applies, or Access-Control-Allow-Origin: * if it is unset. Ignored on a static website, which has no authentication of its own and so hands out public files: restricting which browsers may read them protects nothing while breaking cross-origin webfonts and fetches. A single-file static asset is not exempt, since it can carry an authentication_method.
3872
+ */
3873
+ allowed_origins?: Array<(string)> | null;
3718
3874
  /**
3719
3875
  * Path to a script to run when the triggered job fails. A bare path, without the script/ or flow/ prefix a schedule error handler takes; it cannot be a flow.
3720
3876
  */
@@ -5489,7 +5645,7 @@ export type WorkspaceInvite = {
5489
5645
  };
5490
5646
  export type GlobalUserInfo = {
5491
5647
  email: string;
5492
- login_type: 'password' | 'github' | 'service_account';
5648
+ login_type: 'password' | 'github' | 'service_account' | 'pending_oauth';
5493
5649
  super_admin: boolean;
5494
5650
  devops?: boolean;
5495
5651
  verified: boolean;
@@ -5647,7 +5803,7 @@ export type Policy = {
5647
5803
  */
5648
5804
  sandbox?: boolean;
5649
5805
  /**
5650
- * Raw apps: author-declared scopes for the frontend SDK token. Takes effect only when `sandbox` is also true — an unsandboxed bundle runs with the viewer's own session, so no token is advertised or minted for it and this list stays inert. On a sandboxed app a non-empty list lets viewers mint (after consenting) a short-lived token carrying their own identity restricted to these scopes, handed to the app bundle so `windmill-client` calls run as the viewer. Must be a subset of the server's curated allowlist (jobs:run, jobs:read, users:read, resources:read, variables:read).
5806
+ * Raw apps: author-declared scopes for the frontend SDK token. Takes effect only when `sandbox` is also true — an unsandboxed bundle runs with the viewer's own session, so no token is advertised or minted for it and this list stays inert. On a sandboxed app a non-empty list lets viewers mint (after consenting) a short-lived token carrying their own identity restricted to these scopes, handed to the app bundle so `windmill-client` calls run as the viewer. Must be a subset of the server's curated allowlist (jobs:run, jobs:read, users:read, resources:read, variables:read, flow_conversations:read, flow_conversations:write).
5651
5807
  *
5652
5808
  */
5653
5809
  frontend_sdk_scopes?: Array<(string)>;
@@ -6118,6 +6274,10 @@ export type AutoPullSettings = {
6118
6274
  [key: string]: (string);
6119
6275
  };
6120
6276
  last_pull_status?: AutoPullStatus;
6277
+ /**
6278
+ * Email of the admin automatic pulls apply changes as. Set by the server when the settings are saved.
6279
+ */
6280
+ enabled_by?: string;
6121
6281
  };
6122
6282
  export type MetricMetadata = {
6123
6283
  id: string;
@@ -7416,6 +7576,42 @@ export type ListAuditLogsData = {
7416
7576
  workspace: string;
7417
7577
  };
7418
7578
  export type ListAuditLogsResponse = Array<AuditLog>;
7579
+ export type ListTrashData = {
7580
+ /**
7581
+ * only return items of this kind: script, flow, app, schedule, variable, resource, or a trigger kind such as http_trigger
7582
+ *
7583
+ */
7584
+ itemKind?: string;
7585
+ /**
7586
+ * which page to return (starts at 0, default 0)
7587
+ */
7588
+ page?: number;
7589
+ /**
7590
+ * number of items to return for a given page (default 100, max 1000)
7591
+ */
7592
+ perPage?: number;
7593
+ workspace: string;
7594
+ };
7595
+ export type ListTrashResponse = Array<TrashItem>;
7596
+ export type GetTrashItemData = {
7597
+ id: number;
7598
+ workspace: string;
7599
+ };
7600
+ export type GetTrashItemResponse = TrashItemWithData;
7601
+ export type RestoreTrashItemData = {
7602
+ id: number;
7603
+ workspace: string;
7604
+ };
7605
+ export type RestoreTrashItemResponse = string;
7606
+ export type PermanentlyDeleteTrashItemData = {
7607
+ id: number;
7608
+ workspace: string;
7609
+ };
7610
+ export type PermanentlyDeleteTrashItemResponse = string;
7611
+ export type EmptyTrashData = {
7612
+ workspace: string;
7613
+ };
7614
+ export type EmptyTrashResponse = string;
7419
7615
  export type LoginData = {
7420
7616
  /**
7421
7617
  * credentials
@@ -7435,6 +7631,10 @@ export type RequestPasswordResetData = {
7435
7631
  };
7436
7632
  };
7437
7633
  export type RequestPasswordResetResponse = PasswordResetResponse;
7634
+ export type ConsumeLoginLinkData = {
7635
+ rd?: string;
7636
+ token: string;
7637
+ };
7438
7638
  export type ResetPasswordData = {
7439
7639
  /**
7440
7640
  * token and new password
@@ -7499,7 +7699,7 @@ export type CreateUserGloballyData = {
7499
7699
  */
7500
7700
  requestBody: {
7501
7701
  email: string;
7502
- password: string;
7702
+ password?: string;
7503
7703
  super_admin: boolean;
7504
7704
  name?: string;
7505
7705
  company?: string;
@@ -7507,6 +7707,10 @@ export type CreateUserGloballyData = {
7507
7707
  * Skip sending email notifications to the user
7508
7708
  */
7509
7709
  skip_email?: boolean;
7710
+ /**
7711
+ * password (default, requires `password`), pending_oauth (no credential until the first OAuth login proving the address adopts the account), or a configured OAuth login client key
7712
+ */
7713
+ login_type?: string;
7510
7714
  };
7511
7715
  };
7512
7716
  export type CreateUserGloballyResponse = string;
@@ -7754,6 +7958,67 @@ export type CreateTokenImpersonateData = {
7754
7958
  requestBody: NewTokenImpersonate;
7755
7959
  };
7756
7960
  export type CreateTokenImpersonateResponse = string;
7961
+ export type CreateLoginLinkData = {
7962
+ /**
7963
+ * target account and link options
7964
+ */
7965
+ requestBody: {
7966
+ email: string;
7967
+ /**
7968
+ * link lifetime in seconds, at most 900 (default 600)
7969
+ */
7970
+ expires_in_s?: number;
7971
+ /**
7972
+ * same-origin path the browser lands on after login (default /user/workspaces)
7973
+ */
7974
+ rd?: string;
7975
+ /**
7976
+ * mint only while the account still has this login type (for example pending_oauth), so a link stops working once the owner has set a password or signed in with a provider
7977
+ */
7978
+ require_login_type?: string;
7979
+ };
7980
+ };
7981
+ export type CreateLoginLinkResponse = {
7982
+ url: string;
7983
+ expires_at: string;
7984
+ };
7985
+ export type SetCloudTrialOfferData = {
7986
+ requestBody: {
7987
+ email: string;
7988
+ /**
7989
+ * mark the offer used (a trial or subscription now exists) instead of recording it
7990
+ */
7991
+ consumed?: boolean;
7992
+ };
7993
+ };
7994
+ export type SetCloudTrialOfferResponse = string;
7995
+ export type GetCloudTrialOfferResponse = {
7996
+ offered: boolean;
7997
+ };
7998
+ export type GoCloudTrialOfferResponse = {
7999
+ location: string;
8000
+ /**
8001
+ * present when the portal refused (e.g. the account already has a subscription); the offer is then spent
8002
+ */
8003
+ reason?: string;
8004
+ };
8005
+ export type SetOnboardingProfileData = {
8006
+ requestBody: {
8007
+ email: string;
8008
+ /**
8009
+ * free-form context from the invite, every key optional. The frontend reads `touch_point` (answers onboarding's source question), `company` and `workspace_name` (prefill the first workspace's name), `hub_projects` (slugs surfaced first on an empty workspace), `tools` (integrations, used to pick hub projects when none are named) and `starter_prompts` (`[{label, prompt}]`, replacing the home page's example prompts); unknown keys are kept and ignored
8010
+ */
8011
+ profile: {
8012
+ [key: string]: unknown;
8013
+ };
8014
+ };
8015
+ };
8016
+ export type SetOnboardingProfileResponse = string;
8017
+ export type GetOnboardingProfileResponse = {
8018
+ profile?: {
8019
+ [key: string]: unknown;
8020
+ } | null;
8021
+ };
7757
8022
  export type DeleteTokenData = {
7758
8023
  tokenPrefix: string;
7759
8024
  };
@@ -7937,6 +8202,14 @@ export type GetSessionWorkspaceStatusData = {
7937
8202
  export type GetSessionWorkspaceStatusResponse = {
7938
8203
  [key: string]: ('active' | 'archived' | 'deleted');
7939
8204
  };
8205
+ export type GetSessionWorkspaceRetentionData = {
8206
+ requestBody: {
8207
+ workspace_ids: Array<(string)>;
8208
+ };
8209
+ };
8210
+ export type GetSessionWorkspaceRetentionResponse = {
8211
+ [key: string]: (number);
8212
+ };
7940
8213
  export type GetWorkspaceAsSuperAdminData = {
7941
8214
  workspace: string;
7942
8215
  };
@@ -10381,6 +10654,10 @@ export type ListHubIntegrationsResponse = Array<{
10381
10654
  * how often the integration has been picked, absent on a hub that does not count picks
10382
10655
  */
10383
10656
  picks?: number;
10657
+ /**
10658
+ * the label the hub curates for the integration, null or absent where it names none
10659
+ */
10660
+ display_name?: string | null;
10384
10661
  }>;
10385
10662
  export type ListHubFlowsResponse = {
10386
10663
  flows?: Array<{
@@ -10530,6 +10807,11 @@ export type ListFlowPathsFromWorkspaceRunnableData = {
10530
10807
  workspace: string;
10531
10808
  };
10532
10809
  export type ListFlowPathsFromWorkspaceRunnableResponse = Array<(string)>;
10810
+ export type ListFlowPathsLinkingAgentData = {
10811
+ path: string;
10812
+ workspace: string;
10813
+ };
10814
+ export type ListFlowPathsLinkingAgentResponse = Array<(string)>;
10533
10815
  export type GetFlowVersionData = {
10534
10816
  version: number;
10535
10817
  workspace: string;
@@ -14796,6 +15078,110 @@ export type ListAiUsageResponse = {
14796
15078
  */
14797
15079
  truncated: boolean;
14798
15080
  };
15081
+ export type ListAiSessionBackupsData = {
15082
+ workspace: string;
15083
+ };
15084
+ export type ListAiSessionBackupsResponse = {
15085
+ enabled: boolean;
15086
+ /**
15087
+ * names the storage answered from; sync state recorded against another one is void
15088
+ */
15089
+ storage_id?: string;
15090
+ /**
15091
+ * bumped by every workspace key rotation; sync state recorded under another one is void
15092
+ */
15093
+ backup_generation?: number;
15094
+ /**
15095
+ * the storage answered from is the instance object store, standing in for a workspace without storage of its own; a removal owed to it is retired by any answer from the workspace's own storage
15096
+ */
15097
+ fallback?: boolean;
15098
+ /**
15099
+ * the newest 500 at most
15100
+ */
15101
+ sessions: Array<AISessionBackupListing>;
15102
+ /**
15103
+ * the user has more sessions than the answer names
15104
+ */
15105
+ truncated?: boolean;
15106
+ };
15107
+ export type PullAiSessionBackupsData = {
15108
+ requestBody: {
15109
+ ids: Array<(string)>;
15110
+ resume?: AISessionBackupCursor;
15111
+ };
15112
+ workspace: string;
15113
+ };
15114
+ export type PullAiSessionBackupsResponse = {
15115
+ enabled: boolean;
15116
+ storage_id?: string;
15117
+ backup_generation?: number;
15118
+ fallback?: boolean;
15119
+ sessions: Array<AISessionBackup>;
15120
+ deferred: Array<(string)>;
15121
+ };
15122
+ export type PushAiSessionBackupsData = {
15123
+ requestBody: {
15124
+ /**
15125
+ * the email the push was prepared for; refused with a 409 when it is not the caller's
15126
+ */
15127
+ owner: string;
15128
+ sessions?: Array<AISessionBackupPush>;
15129
+ removed?: Array<(string)>;
15130
+ };
15131
+ workspace: string;
15132
+ };
15133
+ export type PushAiSessionBackupsResponse = {
15134
+ enabled: boolean;
15135
+ storage_id?: string;
15136
+ backup_generation?: number;
15137
+ fallback?: boolean;
15138
+ results: Array<{
15139
+ id: string;
15140
+ error?: string;
15141
+ /**
15142
+ * nothing was written and the session must be pushed whole again; an incremental part found no listed session to ride on (the backup was removed, or a push split over parts is in progress or was abandoned), or a later part of a push split over parts found another push had superseded it
15143
+ */
15144
+ needs_whole?: boolean;
15145
+ }>;
15146
+ };
15147
+ export type ShareAiArtifactData = {
15148
+ requestBody: {
15149
+ /**
15150
+ * the artifact's id in the author's session
15151
+ */
15152
+ artifact_id: string;
15153
+ name: string;
15154
+ kind: 'md' | 'html';
15155
+ version: number;
15156
+ content: string;
15157
+ };
15158
+ workspace: string;
15159
+ };
15160
+ export type ShareAiArtifactResponse = SharedAiArtifactInfo;
15161
+ export type GetAiArtifactShareStatusData = {
15162
+ artifactId: string;
15163
+ workspace: string;
15164
+ };
15165
+ export type GetAiArtifactShareStatusResponse = {
15166
+ retention_secs: number;
15167
+ share?: SharedAiArtifactInfo;
15168
+ };
15169
+ export type GetSharedAiArtifactData = {
15170
+ id: string;
15171
+ workspace: string;
15172
+ };
15173
+ export type GetSharedAiArtifactResponse = SharedAiArtifactInfo & {
15174
+ content: string;
15175
+ /**
15176
+ * whether the caller authored the share or is a workspace admin
15177
+ */
15178
+ can_unshare: boolean;
15179
+ };
15180
+ export type UnshareAiArtifactData = {
15181
+ id: string;
15182
+ workspace: string;
15183
+ };
15184
+ export type UnshareAiArtifactResponse = string;
14799
15185
  export type ResumeSuspendedTriggerJobsData = {
14800
15186
  /**
14801
15187
  * Optional list of job IDs to reassign
@@ -18281,54 +18667,135 @@ export type $OpenApiTs = {
18281
18667
  };
18282
18668
  };
18283
18669
  };
18284
- '/auth/login': {
18285
- post: {
18670
+ '/w/{workspace}/trash/list': {
18671
+ get: {
18286
18672
  req: {
18287
18673
  /**
18288
- * credentials
18674
+ * only return items of this kind: script, flow, app, schedule, variable, resource, or a trigger kind such as http_trigger
18675
+ *
18289
18676
  */
18290
- requestBody: Login;
18291
- };
18292
- res: {
18677
+ itemKind?: string;
18293
18678
  /**
18294
- * Successfully authenticated. The session ID is returned in a cookie named `token` and as plaintext response. Preferred method of authorization is through the bearer token. The cookie is only for browser convenience.
18295
- *
18679
+ * which page to return (starts at 0, default 0)
18296
18680
  */
18297
- 200: string;
18681
+ page?: number;
18682
+ /**
18683
+ * number of items to return for a given page (default 100, max 1000)
18684
+ */
18685
+ perPage?: number;
18686
+ workspace: string;
18298
18687
  };
18299
- };
18300
- };
18301
- '/auth/logout': {
18302
- post: {
18303
18688
  res: {
18304
18689
  /**
18305
- * clear cookies and clear token (if applicable)
18690
+ * the trashed items, most recently deleted first
18306
18691
  */
18307
- 200: string;
18692
+ 200: Array<TrashItem>;
18308
18693
  };
18309
18694
  };
18310
18695
  };
18311
- '/auth/is_smtp_configured': {
18696
+ '/w/{workspace}/trash/get/{id}': {
18312
18697
  get: {
18698
+ req: {
18699
+ id: number;
18700
+ workspace: string;
18701
+ };
18313
18702
  res: {
18314
18703
  /**
18315
- * returns true if SMTP is configured
18704
+ * the trashed item
18316
18705
  */
18317
- 200: boolean;
18706
+ 200: TrashItemWithData;
18318
18707
  };
18319
18708
  };
18320
18709
  };
18321
- '/auth/is_password_login_disabled': {
18322
- get: {
18710
+ '/w/{workspace}/trash/restore/{id}': {
18711
+ post: {
18712
+ req: {
18713
+ id: number;
18714
+ workspace: string;
18715
+ };
18323
18716
  res: {
18324
18717
  /**
18325
- * returns true if password login is disabled
18718
+ * item restored
18326
18719
  */
18327
- 200: boolean;
18720
+ 200: string;
18328
18721
  };
18329
18722
  };
18330
18723
  };
18331
- '/auth/request_password_reset': {
18724
+ '/w/{workspace}/trash/delete/{id}': {
18725
+ delete: {
18726
+ req: {
18727
+ id: number;
18728
+ workspace: string;
18729
+ };
18730
+ res: {
18731
+ /**
18732
+ * item permanently deleted
18733
+ */
18734
+ 200: string;
18735
+ };
18736
+ };
18737
+ };
18738
+ '/w/{workspace}/trash/empty': {
18739
+ post: {
18740
+ req: {
18741
+ workspace: string;
18742
+ };
18743
+ res: {
18744
+ /**
18745
+ * trashbin emptied
18746
+ */
18747
+ 200: string;
18748
+ };
18749
+ };
18750
+ };
18751
+ '/auth/login': {
18752
+ post: {
18753
+ req: {
18754
+ /**
18755
+ * credentials
18756
+ */
18757
+ requestBody: Login;
18758
+ };
18759
+ res: {
18760
+ /**
18761
+ * Successfully authenticated. The session ID is returned in a cookie named `token` and as plaintext response. Preferred method of authorization is through the bearer token. The cookie is only for browser convenience.
18762
+ *
18763
+ */
18764
+ 200: string;
18765
+ };
18766
+ };
18767
+ };
18768
+ '/auth/logout': {
18769
+ post: {
18770
+ res: {
18771
+ /**
18772
+ * clear cookies and clear token (if applicable)
18773
+ */
18774
+ 200: string;
18775
+ };
18776
+ };
18777
+ };
18778
+ '/auth/is_smtp_configured': {
18779
+ get: {
18780
+ res: {
18781
+ /**
18782
+ * returns true if SMTP is configured
18783
+ */
18784
+ 200: boolean;
18785
+ };
18786
+ };
18787
+ };
18788
+ '/auth/is_password_login_disabled': {
18789
+ get: {
18790
+ res: {
18791
+ /**
18792
+ * returns true if password login is disabled
18793
+ */
18794
+ 200: boolean;
18795
+ };
18796
+ };
18797
+ };
18798
+ '/auth/request_password_reset': {
18332
18799
  post: {
18333
18800
  req: {
18334
18801
  /**
@@ -18350,6 +18817,20 @@ export type $OpenApiTs = {
18350
18817
  };
18351
18818
  };
18352
18819
  };
18820
+ '/auth/login_link/{token}': {
18821
+ get: {
18822
+ req: {
18823
+ rd?: string;
18824
+ token: string;
18825
+ };
18826
+ res: {
18827
+ /**
18828
+ * redirected to the post-login destination, or to /user/login_link_expired when the link is used, expired or unknown
18829
+ */
18830
+ 302: unknown;
18831
+ };
18832
+ };
18833
+ };
18353
18834
  '/auth/reset_password': {
18354
18835
  post: {
18355
18836
  req: {
@@ -18483,7 +18964,7 @@ export type $OpenApiTs = {
18483
18964
  */
18484
18965
  requestBody: {
18485
18966
  email: string;
18486
- password: string;
18967
+ password?: string;
18487
18968
  super_admin: boolean;
18488
18969
  name?: string;
18489
18970
  company?: string;
@@ -18491,6 +18972,10 @@ export type $OpenApiTs = {
18491
18972
  * Skip sending email notifications to the user
18492
18973
  */
18493
18974
  skip_email?: boolean;
18975
+ /**
18976
+ * password (default, requires `password`), pending_oauth (no credential until the first OAuth login proving the address adopts the account), or a configured OAuth login client key
18977
+ */
18978
+ login_type?: string;
18494
18979
  };
18495
18980
  };
18496
18981
  res: {
@@ -19103,6 +19588,129 @@ export type $OpenApiTs = {
19103
19588
  };
19104
19589
  };
19105
19590
  };
19591
+ '/users/login_links': {
19592
+ post: {
19593
+ req: {
19594
+ /**
19595
+ * target account and link options
19596
+ */
19597
+ requestBody: {
19598
+ email: string;
19599
+ /**
19600
+ * link lifetime in seconds, at most 900 (default 600)
19601
+ */
19602
+ expires_in_s?: number;
19603
+ /**
19604
+ * same-origin path the browser lands on after login (default /user/workspaces)
19605
+ */
19606
+ rd?: string;
19607
+ /**
19608
+ * mint only while the account still has this login type (for example pending_oauth), so a link stops working once the owner has set a password or signed in with a provider
19609
+ */
19610
+ require_login_type?: string;
19611
+ };
19612
+ };
19613
+ res: {
19614
+ /**
19615
+ * login link minted
19616
+ */
19617
+ 201: {
19618
+ url: string;
19619
+ expires_at: string;
19620
+ };
19621
+ /**
19622
+ * the account does not have the required login type
19623
+ */
19624
+ 409: unknown;
19625
+ };
19626
+ };
19627
+ };
19628
+ '/users/cloud_trial_offer': {
19629
+ post: {
19630
+ req: {
19631
+ requestBody: {
19632
+ email: string;
19633
+ /**
19634
+ * mark the offer used (a trial or subscription now exists) instead of recording it
19635
+ */
19636
+ consumed?: boolean;
19637
+ };
19638
+ };
19639
+ res: {
19640
+ /**
19641
+ * offer recorded or consumed
19642
+ */
19643
+ 200: string;
19644
+ };
19645
+ };
19646
+ get: {
19647
+ res: {
19648
+ /**
19649
+ * offer state
19650
+ */
19651
+ 200: {
19652
+ offered: boolean;
19653
+ };
19654
+ };
19655
+ };
19656
+ };
19657
+ '/users/cloud_trial_offer/go': {
19658
+ post: {
19659
+ res: {
19660
+ /**
19661
+ * where to go — the customer portal signed in with the trial being started, or the portal home with the reason the offer could not be used
19662
+ */
19663
+ 200: {
19664
+ location: string;
19665
+ /**
19666
+ * present when the portal refused (e.g. the account already has a subscription); the offer is then spent
19667
+ */
19668
+ reason?: string;
19669
+ };
19670
+ /**
19671
+ * called with a job token
19672
+ */
19673
+ 403: unknown;
19674
+ /**
19675
+ * no offer for this account
19676
+ */
19677
+ 404: unknown;
19678
+ };
19679
+ };
19680
+ };
19681
+ '/users/onboarding_profile': {
19682
+ post: {
19683
+ req: {
19684
+ requestBody: {
19685
+ email: string;
19686
+ /**
19687
+ * free-form context from the invite, every key optional. The frontend reads `touch_point` (answers onboarding's source question), `company` and `workspace_name` (prefill the first workspace's name), `hub_projects` (slugs surfaced first on an empty workspace), `tools` (integrations, used to pick hub projects when none are named) and `starter_prompts` (`[{label, prompt}]`, replacing the home page's example prompts); unknown keys are kept and ignored
19688
+ */
19689
+ profile: {
19690
+ [key: string]: unknown;
19691
+ };
19692
+ };
19693
+ };
19694
+ res: {
19695
+ /**
19696
+ * profile recorded
19697
+ */
19698
+ 200: string;
19699
+ };
19700
+ };
19701
+ get: {
19702
+ res: {
19703
+ /**
19704
+ * the profile, or null when none was recorded
19705
+ */
19706
+ 200: {
19707
+ profile?: {
19708
+ [key: string]: unknown;
19709
+ } | null;
19710
+ };
19711
+ };
19712
+ };
19713
+ };
19106
19714
  '/users/tokens/delete/{token_prefix}': {
19107
19715
  delete: {
19108
19716
  req: {
@@ -19485,6 +20093,23 @@ export type $OpenApiTs = {
19485
20093
  };
19486
20094
  };
19487
20095
  };
20096
+ '/workspaces/session_workspace_retention': {
20097
+ post: {
20098
+ req: {
20099
+ requestBody: {
20100
+ workspace_ids: Array<(string)>;
20101
+ };
20102
+ };
20103
+ res: {
20104
+ /**
20105
+ * map of workspace id to its `ai_config.sessions_retention_days`; a workspace without a retention, or one the caller cannot be authenticated into, is absent
20106
+ */
20107
+ 200: {
20108
+ [key: string]: (number);
20109
+ };
20110
+ };
20111
+ };
20112
+ };
19488
20113
  '/w/{workspace}/workspaces/get_as_superadmin': {
19489
20114
  get: {
19490
20115
  req: {
@@ -24135,6 +24760,10 @@ export type $OpenApiTs = {
24135
24760
  * how often the integration has been picked, absent on a hub that does not count picks
24136
24761
  */
24137
24762
  picks?: number;
24763
+ /**
24764
+ * the label the hub curates for the integration, null or absent where it names none
24765
+ */
24766
+ display_name?: string | null;
24138
24767
  }>;
24139
24768
  };
24140
24769
  };
@@ -24359,6 +24988,20 @@ export type $OpenApiTs = {
24359
24988
  };
24360
24989
  };
24361
24990
  };
24991
+ '/w/{workspace}/flows/list_paths_linking_agent/{path}': {
24992
+ get: {
24993
+ req: {
24994
+ path: string;
24995
+ workspace: string;
24996
+ };
24997
+ res: {
24998
+ /**
24999
+ * paths of the flows linking the `ai_agent` resource, as of their last deploy
25000
+ */
25001
+ 200: Array<(string)>;
25002
+ };
25003
+ };
25004
+ };
24362
25005
  '/w/{workspace}/flows/get/v/{version}': {
24363
25006
  get: {
24364
25007
  req: {
@@ -30734,6 +31377,173 @@ export type $OpenApiTs = {
30734
31377
  };
30735
31378
  };
30736
31379
  };
31380
+ '/w/{workspace}/ai/sessions/list': {
31381
+ get: {
31382
+ req: {
31383
+ workspace: string;
31384
+ };
31385
+ res: {
31386
+ /**
31387
+ * backups, newest first; `enabled` is false when the workspace has no storage for them
31388
+ */
31389
+ 200: {
31390
+ enabled: boolean;
31391
+ /**
31392
+ * names the storage answered from; sync state recorded against another one is void
31393
+ */
31394
+ storage_id?: string;
31395
+ /**
31396
+ * bumped by every workspace key rotation; sync state recorded under another one is void
31397
+ */
31398
+ backup_generation?: number;
31399
+ /**
31400
+ * the storage answered from is the instance object store, standing in for a workspace without storage of its own; a removal owed to it is retired by any answer from the workspace's own storage
31401
+ */
31402
+ fallback?: boolean;
31403
+ /**
31404
+ * the newest 500 at most
31405
+ */
31406
+ sessions: Array<AISessionBackupListing>;
31407
+ /**
31408
+ * the user has more sessions than the answer names
31409
+ */
31410
+ truncated?: boolean;
31411
+ };
31412
+ };
31413
+ };
31414
+ };
31415
+ '/w/{workspace}/ai/sessions/pull': {
31416
+ post: {
31417
+ req: {
31418
+ requestBody: {
31419
+ ids: Array<(string)>;
31420
+ resume?: AISessionBackupCursor;
31421
+ };
31422
+ workspace: string;
31423
+ };
31424
+ res: {
31425
+ /**
31426
+ * the backups found; `deferred` lists ids that did not fit the response budget
31427
+ */
31428
+ 200: {
31429
+ enabled: boolean;
31430
+ storage_id?: string;
31431
+ backup_generation?: number;
31432
+ fallback?: boolean;
31433
+ sessions: Array<AISessionBackup>;
31434
+ deferred: Array<(string)>;
31435
+ };
31436
+ };
31437
+ };
31438
+ };
31439
+ '/w/{workspace}/ai/sessions/push': {
31440
+ post: {
31441
+ req: {
31442
+ requestBody: {
31443
+ /**
31444
+ * the email the push was prepared for; refused with a 409 when it is not the caller's
31445
+ */
31446
+ owner: string;
31447
+ sessions?: Array<AISessionBackupPush>;
31448
+ removed?: Array<(string)>;
31449
+ };
31450
+ workspace: string;
31451
+ };
31452
+ res: {
31453
+ /**
31454
+ * one result per session written or removed, in request order
31455
+ */
31456
+ 200: {
31457
+ enabled: boolean;
31458
+ storage_id?: string;
31459
+ backup_generation?: number;
31460
+ fallback?: boolean;
31461
+ results: Array<{
31462
+ id: string;
31463
+ error?: string;
31464
+ /**
31465
+ * nothing was written and the session must be pushed whole again; an incremental part found no listed session to ride on (the backup was removed, or a push split over parts is in progress or was abandoned), or a later part of a push split over parts found another push had superseded it
31466
+ */
31467
+ needs_whole?: boolean;
31468
+ }>;
31469
+ };
31470
+ };
31471
+ };
31472
+ };
31473
+ '/w/{workspace}/ai/shared_artifacts/share': {
31474
+ post: {
31475
+ req: {
31476
+ requestBody: {
31477
+ /**
31478
+ * the artifact's id in the author's session
31479
+ */
31480
+ artifact_id: string;
31481
+ name: string;
31482
+ kind: 'md' | 'html';
31483
+ version: number;
31484
+ content: string;
31485
+ };
31486
+ workspace: string;
31487
+ };
31488
+ res: {
31489
+ /**
31490
+ * the shared copy
31491
+ */
31492
+ 200: SharedAiArtifactInfo;
31493
+ };
31494
+ };
31495
+ };
31496
+ '/w/{workspace}/ai/shared_artifacts/status': {
31497
+ get: {
31498
+ req: {
31499
+ artifactId: string;
31500
+ workspace: string;
31501
+ };
31502
+ res: {
31503
+ /**
31504
+ * the live share, if any, and how long shares last
31505
+ */
31506
+ 200: {
31507
+ retention_secs: number;
31508
+ share?: SharedAiArtifactInfo;
31509
+ };
31510
+ };
31511
+ };
31512
+ };
31513
+ '/w/{workspace}/ai/shared_artifacts/get/{id}': {
31514
+ get: {
31515
+ req: {
31516
+ id: string;
31517
+ workspace: string;
31518
+ };
31519
+ res: {
31520
+ /**
31521
+ * the shared artifact
31522
+ */
31523
+ 200: SharedAiArtifactInfo & {
31524
+ content: string;
31525
+ /**
31526
+ * whether the caller authored the share or is a workspace admin
31527
+ */
31528
+ can_unshare: boolean;
31529
+ };
31530
+ };
31531
+ };
31532
+ };
31533
+ '/w/{workspace}/ai/shared_artifacts/delete/{id}': {
31534
+ delete: {
31535
+ req: {
31536
+ id: string;
31537
+ workspace: string;
31538
+ };
31539
+ res: {
31540
+ /**
31541
+ * share deleted
31542
+ */
31543
+ 200: string;
31544
+ };
31545
+ };
31546
+ };
30737
31547
  '/w/{workspace}/trigger/{trigger_kind}/resume_suspended_trigger_jobs/{trigger_path}': {
30738
31548
  post: {
30739
31549
  req: {