windmill-cli 1.747.0 → 1.749.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/main.js +1473 -65
- package/package.json +12 -10
package/esm/main.js
CHANGED
|
@@ -16784,7 +16784,7 @@ var init_OpenAPI = __esm(() => {
|
|
|
16784
16784
|
PASSWORD: undefined,
|
|
16785
16785
|
TOKEN: getEnv3("WM_TOKEN"),
|
|
16786
16786
|
USERNAME: undefined,
|
|
16787
|
-
VERSION: "1.
|
|
16787
|
+
VERSION: "1.749.0",
|
|
16788
16788
|
WITH_CREDENTIALS: true,
|
|
16789
16789
|
interceptors: {
|
|
16790
16790
|
request: new Interceptors,
|
|
@@ -17649,6 +17649,7 @@ __export(exports_services_gen, {
|
|
|
17649
17649
|
editAutoInvite: () => editAutoInvite,
|
|
17650
17650
|
duckdbConnectionSettingsV2: () => duckdbConnectionSettingsV2,
|
|
17651
17651
|
duckdbConnectionSettings: () => duckdbConnectionSettings,
|
|
17652
|
+
dropForkedDucklakeNamespaces: () => dropForkedDucklakeNamespaces,
|
|
17652
17653
|
dropForkedDatatableDatabases: () => dropForkedDatatableDatabases,
|
|
17653
17654
|
dropCustomInstanceDb: () => dropCustomInstanceDb,
|
|
17654
17655
|
downloadOpenapiSpec: () => downloadOpenapiSpec,
|
|
@@ -17773,6 +17774,7 @@ __export(exports_services_gen, {
|
|
|
17773
17774
|
commitKafkaOffsets: () => commitKafkaOffsets,
|
|
17774
17775
|
closeDeploymentRequestMerged: () => closeDeploymentRequestMerged,
|
|
17775
17776
|
clearIndex: () => clearIndex,
|
|
17777
|
+
checkSchemaContracts: () => checkSchemaContracts,
|
|
17776
17778
|
checkS3FolderExists: () => checkS3FolderExists,
|
|
17777
17779
|
checkInstanceSharingAvailable: () => checkInstanceSharingAvailable,
|
|
17778
17780
|
checkIfNativeTriggersServiceExists: () => checkIfNativeTriggersServiceExists,
|
|
@@ -19271,6 +19273,14 @@ var backendVersion = () => {
|
|
|
19271
19273
|
body: data3.requestBody,
|
|
19272
19274
|
mediaType: "application/json"
|
|
19273
19275
|
});
|
|
19276
|
+
}, dropForkedDucklakeNamespaces = (data3) => {
|
|
19277
|
+
return request(OpenAPI, {
|
|
19278
|
+
method: "POST",
|
|
19279
|
+
url: "/w/{workspace}/workspaces/drop_forked_ducklake_namespaces",
|
|
19280
|
+
path: {
|
|
19281
|
+
workspace: data3.workspace
|
|
19282
|
+
}
|
|
19283
|
+
});
|
|
19274
19284
|
}, importPgDatabase = (data3) => {
|
|
19275
19285
|
return request(OpenAPI, {
|
|
19276
19286
|
method: "POST",
|
|
@@ -20802,6 +20812,16 @@ var backendVersion = () => {
|
|
|
20802
20812
|
body: data3.requestBody,
|
|
20803
20813
|
mediaType: "application/json"
|
|
20804
20814
|
});
|
|
20815
|
+
}, checkSchemaContracts = (data3) => {
|
|
20816
|
+
return request(OpenAPI, {
|
|
20817
|
+
method: "POST",
|
|
20818
|
+
url: "/w/{workspace}/scripts/check_schema_contracts",
|
|
20819
|
+
path: {
|
|
20820
|
+
workspace: data3.workspace
|
|
20821
|
+
},
|
|
20822
|
+
body: data3.requestBody,
|
|
20823
|
+
mediaType: "application/json"
|
|
20824
|
+
});
|
|
20805
20825
|
}, storeRawScriptTemp = (data3) => {
|
|
20806
20826
|
return request(OpenAPI, {
|
|
20807
20827
|
method: "POST",
|
|
@@ -25531,6 +25551,765 @@ var init_services_gen = __esm(() => {
|
|
|
25531
25551
|
init_request();
|
|
25532
25552
|
});
|
|
25533
25553
|
// gen/index.ts
|
|
25554
|
+
var exports_gen = {};
|
|
25555
|
+
__export(exports_gen, {
|
|
25556
|
+
workspaceMuteCriticalAlertsUi: () => workspaceMuteCriticalAlertsUi,
|
|
25557
|
+
workspaceGetCriticalAlerts: () => workspaceGetCriticalAlerts,
|
|
25558
|
+
workspaceAcknowledgeCriticalAlert: () => workspaceAcknowledgeCriticalAlert,
|
|
25559
|
+
workspaceAcknowledgeAllCriticalAlerts: () => workspaceAcknowledgeAllCriticalAlerts,
|
|
25560
|
+
whois: () => whois,
|
|
25561
|
+
whoami: () => whoami,
|
|
25562
|
+
usernameToEmail: () => usernameToEmail,
|
|
25563
|
+
uploadS3FileFromApp: () => uploadS3FileFromApp,
|
|
25564
|
+
uploadAiSkills: () => uploadAiSkills,
|
|
25565
|
+
updateWebsocketTrigger: () => updateWebsocketTrigger,
|
|
25566
|
+
updateVariable: () => updateVariable,
|
|
25567
|
+
updateUser: () => updateUser,
|
|
25568
|
+
updateTutorialProgress: () => updateTutorialProgress,
|
|
25569
|
+
updateTokenScopes: () => updateTokenScopes,
|
|
25570
|
+
updateTokenLabel: () => updateTokenLabel,
|
|
25571
|
+
updateSqsTrigger: () => updateSqsTrigger,
|
|
25572
|
+
updateSharedUi: () => updateSharedUi,
|
|
25573
|
+
updateScriptHistory: () => updateScriptHistory,
|
|
25574
|
+
updateSchedule: () => updateSchedule,
|
|
25575
|
+
updateResourceValue: () => updateResourceValue,
|
|
25576
|
+
updateResourceType: () => updateResourceType,
|
|
25577
|
+
updateResource: () => updateResource,
|
|
25578
|
+
updateProtectionRule: () => updateProtectionRule,
|
|
25579
|
+
updatePostgresTrigger: () => updatePostgresTrigger,
|
|
25580
|
+
updatePostgresPublication: () => updatePostgresPublication,
|
|
25581
|
+
updateOperatorSettings: () => updateOperatorSettings,
|
|
25582
|
+
updateNatsTrigger: () => updateNatsTrigger,
|
|
25583
|
+
updateNativeTrigger: () => updateNativeTrigger,
|
|
25584
|
+
updateMqttTrigger: () => updateMqttTrigger,
|
|
25585
|
+
updateKafkaTrigger: () => updateKafkaTrigger,
|
|
25586
|
+
updateInstanceGroup: () => updateInstanceGroup,
|
|
25587
|
+
updateInput: () => updateInput,
|
|
25588
|
+
updateHttpTrigger: () => updateHttpTrigger,
|
|
25589
|
+
updateGroup: () => updateGroup,
|
|
25590
|
+
updateGcpTrigger: () => updateGcpTrigger,
|
|
25591
|
+
updateFolder: () => updateFolder,
|
|
25592
|
+
updateFlowHistory: () => updateFlowHistory,
|
|
25593
|
+
updateFlow: () => updateFlow,
|
|
25594
|
+
updateEmailTrigger: () => updateEmailTrigger,
|
|
25595
|
+
updateDraft: () => updateDraft,
|
|
25596
|
+
updateConfig: () => updateConfig,
|
|
25597
|
+
updateAzureTrigger: () => updateAzureTrigger,
|
|
25598
|
+
updateAppRaw: () => updateAppRaw,
|
|
25599
|
+
updateAppHistory: () => updateAppHistory,
|
|
25600
|
+
updateApp: () => updateApp,
|
|
25601
|
+
unstar: () => unstar,
|
|
25602
|
+
unassignGhesInstallation: () => unassignGhesInstallation,
|
|
25603
|
+
unarchiveWorkspace: () => unarchiveWorkspace,
|
|
25604
|
+
toggleWorkspaceErrorHandlerForScript: () => toggleWorkspaceErrorHandlerForScript,
|
|
25605
|
+
toggleWorkspaceErrorHandlerForFlow: () => toggleWorkspaceErrorHandlerForFlow,
|
|
25606
|
+
testWebsocketConnection: () => testWebsocketConnection,
|
|
25607
|
+
testSqsConnection: () => testSqsConnection,
|
|
25608
|
+
testSmtp: () => testSmtp,
|
|
25609
|
+
testSecretBackend: () => testSecretBackend,
|
|
25610
|
+
testPostgresConnection: () => testPostgresConnection,
|
|
25611
|
+
testObjectStorageConfig: () => testObjectStorageConfig,
|
|
25612
|
+
testNatsConnection: () => testNatsConnection,
|
|
25613
|
+
testMqttConnection: () => testMqttConnection,
|
|
25614
|
+
testMetadata: () => testMetadata,
|
|
25615
|
+
testLicenseKey: () => testLicenseKey,
|
|
25616
|
+
testKafkaConnection: () => testKafkaConnection,
|
|
25617
|
+
testGcpConnection: () => testGcpConnection,
|
|
25618
|
+
testCriticalChannels: () => testCriticalChannels,
|
|
25619
|
+
testAzureKvBackend: () => testAzureKvBackend,
|
|
25620
|
+
testAzureConnection: () => testAzureConnection,
|
|
25621
|
+
testAwsSmBackend: () => testAwsSmBackend,
|
|
25622
|
+
syncNativeTriggers: () => syncNativeTriggers,
|
|
25623
|
+
submitOnboardingData: () => submitOnboardingData,
|
|
25624
|
+
storeRawScriptTemp: () => storeRawScriptTemp,
|
|
25625
|
+
startMcpOauthPopup: () => startMcpOauthPopup,
|
|
25626
|
+
star: () => star,
|
|
25627
|
+
signS3Objects: () => signS3Objects,
|
|
25628
|
+
setupCustomInstanceDb: () => setupCustomInstanceDb,
|
|
25629
|
+
setWsSpecific: () => setWsSpecific,
|
|
25630
|
+
setWorkspaceSlackOauthConfig: () => setWorkspaceSlackOauthConfig,
|
|
25631
|
+
setWorkspaceEncryptionKey: () => setWorkspaceEncryptionKey,
|
|
25632
|
+
setWebsocketTriggerMode: () => setWebsocketTriggerMode,
|
|
25633
|
+
setThresholdAlert: () => setThresholdAlert,
|
|
25634
|
+
setSqsTriggerMode: () => setSqsTriggerMode,
|
|
25635
|
+
setScheduleEnabled: () => setScheduleEnabled,
|
|
25636
|
+
setPublicAppRateLimit: () => setPublicAppRateLimit,
|
|
25637
|
+
setPostgresTriggerMode: () => setPostgresTriggerMode,
|
|
25638
|
+
setPasswordForUser: () => setPasswordForUser,
|
|
25639
|
+
setPassword: () => setPassword,
|
|
25640
|
+
setNatsTriggerMode: () => setNatsTriggerMode,
|
|
25641
|
+
setMqttTriggerMode: () => setMqttTriggerMode,
|
|
25642
|
+
setLoginTypeForUser: () => setLoginTypeForUser,
|
|
25643
|
+
setKafkaTriggerMode: () => setKafkaTriggerMode,
|
|
25644
|
+
setJobProgress: () => setJobProgress,
|
|
25645
|
+
setInstanceConfig: () => setInstanceConfig,
|
|
25646
|
+
setHttpTriggerMode: () => setHttpTriggerMode,
|
|
25647
|
+
setGlobal: () => setGlobal,
|
|
25648
|
+
setGcpTriggerMode: () => setGcpTriggerMode,
|
|
25649
|
+
setFlowUserState: () => setFlowUserState,
|
|
25650
|
+
setEnvironmentVariable: () => setEnvironmentVariable,
|
|
25651
|
+
setEmailTriggerMode: () => setEmailTriggerMode,
|
|
25652
|
+
setDefaultErrorOrRecoveryHandler: () => setDefaultErrorOrRecoveryHandler,
|
|
25653
|
+
setCaptureConfig: () => setCaptureConfig,
|
|
25654
|
+
setAzureTriggerMode: () => setAzureTriggerMode,
|
|
25655
|
+
sendStats: () => sendStats,
|
|
25656
|
+
sendMessageToConversation: () => sendMessageToConversation,
|
|
25657
|
+
searchLogsIndex: () => searchLogsIndex,
|
|
25658
|
+
searchJobsIndex: () => searchJobsIndex,
|
|
25659
|
+
searchDocs: () => searchDocs,
|
|
25660
|
+
s3ResourceInfo: () => s3ResourceInfo,
|
|
25661
|
+
runWaitResultScriptByPathGet: () => runWaitResultScriptByPathGet,
|
|
25662
|
+
runWaitResultScriptByPath: () => runWaitResultScriptByPath,
|
|
25663
|
+
runWaitResultFlowByVersionGet: () => runWaitResultFlowByVersionGet,
|
|
25664
|
+
runWaitResultFlowByVersion: () => runWaitResultFlowByVersion,
|
|
25665
|
+
runWaitResultFlowByPath: () => runWaitResultFlowByPath,
|
|
25666
|
+
runTeamsMessageTestJob: () => runTeamsMessageTestJob,
|
|
25667
|
+
runSlackMessageTestJob: () => runSlackMessageTestJob,
|
|
25668
|
+
runScriptPreviewInline: () => runScriptPreviewInline,
|
|
25669
|
+
runScriptPreviewAndWaitResult: () => runScriptPreviewAndWaitResult,
|
|
25670
|
+
runScriptPreview: () => runScriptPreview,
|
|
25671
|
+
runScriptByPathInline: () => runScriptByPathInline,
|
|
25672
|
+
runScriptByPath: () => runScriptByPath,
|
|
25673
|
+
runScriptByHashInline: () => runScriptByHashInline,
|
|
25674
|
+
runScriptByHash: () => runScriptByHash,
|
|
25675
|
+
runRawScriptDependenciesAsync: () => runRawScriptDependenciesAsync,
|
|
25676
|
+
runRawScriptDependencies: () => runRawScriptDependencies,
|
|
25677
|
+
runLogCleanup: () => runLogCleanup,
|
|
25678
|
+
runFlowPreviewAndWaitResult: () => runFlowPreviewAndWaitResult,
|
|
25679
|
+
runFlowPreview: () => runFlowPreview,
|
|
25680
|
+
runFlowDependenciesAsync: () => runFlowDependenciesAsync,
|
|
25681
|
+
runFlowByVersion: () => runFlowByVersion,
|
|
25682
|
+
runFlowByPath: () => runFlowByPath,
|
|
25683
|
+
runDynamicSelect: () => runDynamicSelect,
|
|
25684
|
+
runCodeWorkflowTask: () => runCodeWorkflowTask,
|
|
25685
|
+
runAuditLogsS3Backfill: () => runAuditLogsS3Backfill,
|
|
25686
|
+
runAndStreamScriptByPathGet: () => runAndStreamScriptByPathGet,
|
|
25687
|
+
runAndStreamScriptByPath: () => runAndStreamScriptByPath,
|
|
25688
|
+
runAndStreamScriptByHashGet: () => runAndStreamScriptByHashGet,
|
|
25689
|
+
runAndStreamScriptByHash: () => runAndStreamScriptByHash,
|
|
25690
|
+
runAndStreamFlowByVersionGet: () => runAndStreamFlowByVersionGet,
|
|
25691
|
+
runAndStreamFlowByVersion: () => runAndStreamFlowByVersion,
|
|
25692
|
+
runAndStreamFlowByPathGet: () => runAndStreamFlowByPathGet,
|
|
25693
|
+
runAndStreamFlowByPath: () => runAndStreamFlowByPath,
|
|
25694
|
+
resumeSuspendedTriggerJobs: () => resumeSuspendedTriggerJobs,
|
|
25695
|
+
resumeSuspendedJobPost: () => resumeSuspendedJobPost,
|
|
25696
|
+
resumeSuspendedJobGet: () => resumeSuspendedJobGet,
|
|
25697
|
+
resumeSuspendedFlowAsOwner: () => resumeSuspendedFlowAsOwner,
|
|
25698
|
+
resumeSuspended: () => resumeSuspended,
|
|
25699
|
+
resultById: () => resultById,
|
|
25700
|
+
restartWorkerGroup: () => restartWorkerGroup,
|
|
25701
|
+
restartFlowAtStep: () => restartFlowAtStep,
|
|
25702
|
+
resolveNpmPackageVersion: () => resolveNpmPackageVersion,
|
|
25703
|
+
resetPassword: () => resetPassword,
|
|
25704
|
+
resetKafkaOffsets: () => resetKafkaOffsets,
|
|
25705
|
+
resetDiffTally: () => resetDiffTally,
|
|
25706
|
+
requestPasswordReset: () => requestPasswordReset,
|
|
25707
|
+
renewLicenseKey: () => renewLicenseKey,
|
|
25708
|
+
removeUserToGroup: () => removeUserToGroup,
|
|
25709
|
+
removeUserFromInstanceGroup: () => removeUserFromInstanceGroup,
|
|
25710
|
+
removeOwnerToFolder: () => removeOwnerToFolder,
|
|
25711
|
+
removeGranularAcls: () => removeGranularAcls,
|
|
25712
|
+
removeBlacklistAgentToken: () => removeBlacklistAgentToken,
|
|
25713
|
+
refreshUserToken: () => refreshUserToken,
|
|
25714
|
+
refreshToken: () => refreshToken,
|
|
25715
|
+
refreshCustomInstanceUserPwd: () => refreshCustomInstanceUserPwd,
|
|
25716
|
+
rebuildDependencyMap: () => rebuildDependencyMap,
|
|
25717
|
+
readDocsPage: () => readDocsPage,
|
|
25718
|
+
rawScriptByPathTokened: () => rawScriptByPathTokened,
|
|
25719
|
+
rawScriptByPath: () => rawScriptByPath,
|
|
25720
|
+
rawScriptByHash: () => rawScriptByHash,
|
|
25721
|
+
queryResourceTypes: () => queryResourceTypes,
|
|
25722
|
+
queryHubScripts: () => queryHubScripts,
|
|
25723
|
+
pruneVersions: () => pruneVersions,
|
|
25724
|
+
previewSchedule: () => previewSchedule,
|
|
25725
|
+
polarsConnectionSettingsV2: () => polarsConnectionSettingsV2,
|
|
25726
|
+
polarsConnectionSettings: () => polarsConnectionSettings,
|
|
25727
|
+
pingCaptureConfig: () => pingCaptureConfig,
|
|
25728
|
+
pickHubScriptByPath: () => pickHubScriptByPath,
|
|
25729
|
+
overwriteInstanceGroups: () => overwriteInstanceGroups,
|
|
25730
|
+
offboardWorkspaceUser: () => offboardWorkspaceUser,
|
|
25731
|
+
offboardPreview: () => offboardPreview,
|
|
25732
|
+
offboardGlobalUser: () => offboardGlobalUser,
|
|
25733
|
+
nativeTriggerWebhook: () => nativeTriggerWebhook,
|
|
25734
|
+
nativeTriggerServiceCallback: () => nativeTriggerServiceCallback,
|
|
25735
|
+
nativeKubernetesAutoscalingHealthcheck: () => nativeKubernetesAutoscalingHealthcheck,
|
|
25736
|
+
moveS3File: () => moveS3File,
|
|
25737
|
+
moveCapturesAndConfigs: () => moveCapturesAndConfigs,
|
|
25738
|
+
migrateSecretsToVault: () => migrateSecretsToVault,
|
|
25739
|
+
migrateSecretsToDatabase: () => migrateSecretsToDatabase,
|
|
25740
|
+
migrateSecretsToAzureKv: () => migrateSecretsToAzureKv,
|
|
25741
|
+
migrateSecretsToAwsSm: () => migrateSecretsToAwsSm,
|
|
25742
|
+
migrateSecretsFromAzureKv: () => migrateSecretsFromAzureKv,
|
|
25743
|
+
migrateSecretsFromAwsSm: () => migrateSecretsFromAwsSm,
|
|
25744
|
+
migrateLegacyDraft: () => migrateLegacyDraft,
|
|
25745
|
+
mcpOauthCallback: () => mcpOauthCallback,
|
|
25746
|
+
logout: () => logout,
|
|
25747
|
+
loginWithOauth: () => loginWithOauth,
|
|
25748
|
+
login: () => login,
|
|
25749
|
+
logAiChat: () => logAiChat,
|
|
25750
|
+
loadTableRowCount: () => loadTableRowCount,
|
|
25751
|
+
loadParquetPreview: () => loadParquetPreview,
|
|
25752
|
+
loadGitRepoFilePreview: () => loadGitRepoFilePreview,
|
|
25753
|
+
loadGitRepoFileMetadata: () => loadGitRepoFileMetadata,
|
|
25754
|
+
loadFilePreview: () => loadFilePreview,
|
|
25755
|
+
loadFileMetadata: () => loadFileMetadata,
|
|
25756
|
+
loadCsvPreview: () => loadCsvPreview,
|
|
25757
|
+
listWsSpecificVersions: () => listWsSpecificVersions,
|
|
25758
|
+
listWsSpecific: () => listWsSpecific,
|
|
25759
|
+
listWorkspacesAsSuperAdmin: () => listWorkspacesAsSuperAdmin,
|
|
25760
|
+
listWorkspaces: () => listWorkspaces,
|
|
25761
|
+
listWorkspaceMacros: () => listWorkspaceMacros,
|
|
25762
|
+
listWorkspaceInvites: () => listWorkspaceInvites,
|
|
25763
|
+
listWorkspaceDependencies: () => listWorkspaceDependencies,
|
|
25764
|
+
listWorkers: () => listWorkers,
|
|
25765
|
+
listWorkerGroups: () => listWorkerGroups,
|
|
25766
|
+
listWebsocketTriggers: () => listWebsocketTriggers,
|
|
25767
|
+
listVolumes: () => listVolumes,
|
|
25768
|
+
listVariable: () => listVariable,
|
|
25769
|
+
listUsersUsage: () => listUsersUsage,
|
|
25770
|
+
listUsersAsSuperAdmin: () => listUsersAsSuperAdmin,
|
|
25771
|
+
listUsers: () => listUsers,
|
|
25772
|
+
listUsernames: () => listUsernames,
|
|
25773
|
+
listUserWorkspaces: () => listUserWorkspaces,
|
|
25774
|
+
listTokensOfScript: () => listTokensOfScript,
|
|
25775
|
+
listTokensOfFlow: () => listTokensOfFlow,
|
|
25776
|
+
listTokens: () => listTokens,
|
|
25777
|
+
listStoredFiles: () => listStoredFiles,
|
|
25778
|
+
listSqsTriggers: () => listSqsTriggers,
|
|
25779
|
+
listSharedUi: () => listSharedUi,
|
|
25780
|
+
listSelectedJobGroups: () => listSelectedJobGroups,
|
|
25781
|
+
listSearchScript: () => listSearchScript,
|
|
25782
|
+
listSearchResource: () => listSearchResource,
|
|
25783
|
+
listSearchFlow: () => listSearchFlow,
|
|
25784
|
+
listSearchApp: () => listSearchApp,
|
|
25785
|
+
listScripts: () => listScripts,
|
|
25786
|
+
listScriptPathsFromWorkspaceRunnable: () => listScriptPathsFromWorkspaceRunnable,
|
|
25787
|
+
listScriptPaths: () => listScriptPaths,
|
|
25788
|
+
listSchedulesWithJobs: () => listSchedulesWithJobs,
|
|
25789
|
+
listSchedules: () => listSchedules,
|
|
25790
|
+
listResourceTypeNames: () => listResourceTypeNames,
|
|
25791
|
+
listResourceType: () => listResourceType,
|
|
25792
|
+
listResourceNames: () => listResourceNames,
|
|
25793
|
+
listResource: () => listResource,
|
|
25794
|
+
listRawApps: () => listRawApps,
|
|
25795
|
+
listQueue: () => listQueue,
|
|
25796
|
+
listProtectionRules: () => listProtectionRules,
|
|
25797
|
+
listPostgresTriggers: () => listPostgresTriggers,
|
|
25798
|
+
listPostgresReplicationSlot: () => listPostgresReplicationSlot,
|
|
25799
|
+
listPostgresPublication: () => listPostgresPublication,
|
|
25800
|
+
listPipelineFolders: () => listPipelineFolders,
|
|
25801
|
+
listPendingInvites: () => listPendingInvites,
|
|
25802
|
+
listPathAutocompletePaths: () => listPathAutocompletePaths,
|
|
25803
|
+
listOauthLogins: () => listOauthLogins,
|
|
25804
|
+
listOauthConnects: () => listOauthConnects,
|
|
25805
|
+
listNextCloudEvents: () => listNextCloudEvents,
|
|
25806
|
+
listNatsTriggers: () => listNatsTriggers,
|
|
25807
|
+
listNativeTriggers: () => listNativeTriggers,
|
|
25808
|
+
listNativeTriggerServices: () => listNativeTriggerServices,
|
|
25809
|
+
listMqttTriggers: () => listMqttTriggers,
|
|
25810
|
+
listMcpTools: () => listMcpTools,
|
|
25811
|
+
listLogFiles: () => listLogFiles,
|
|
25812
|
+
listKafkaTriggers: () => listKafkaTriggers,
|
|
25813
|
+
listJobs: () => listJobs,
|
|
25814
|
+
listInstanceGroupsWithWorkspaces: () => listInstanceGroupsWithWorkspaces,
|
|
25815
|
+
listInstanceGroups: () => listInstanceGroups,
|
|
25816
|
+
listInputs: () => listInputs,
|
|
25817
|
+
listHubIntegrations: () => listHubIntegrations,
|
|
25818
|
+
listHubFlows: () => listHubFlows,
|
|
25819
|
+
listHubApps: () => listHubApps,
|
|
25820
|
+
listHttpTriggers: () => listHttpTriggers,
|
|
25821
|
+
listGroups: () => listGroups,
|
|
25822
|
+
listGroupNames: () => listGroupNames,
|
|
25823
|
+
listGoogleTopics: () => listGoogleTopics,
|
|
25824
|
+
listGoogleSharedDrives: () => listGoogleSharedDrives,
|
|
25825
|
+
listGoogleDriveFiles: () => listGoogleDriveFiles,
|
|
25826
|
+
listGoogleCalendars: () => listGoogleCalendars,
|
|
25827
|
+
listGlobalSettings: () => listGlobalSettings,
|
|
25828
|
+
listGithubRepos: () => listGithubRepos,
|
|
25829
|
+
listGitRepoFiles: () => listGitRepoFiles,
|
|
25830
|
+
listGcpTriggers: () => listGcpTriggers,
|
|
25831
|
+
listFolders: () => listFolders,
|
|
25832
|
+
listFolderNames: () => listFolderNames,
|
|
25833
|
+
listFlows: () => listFlows,
|
|
25834
|
+
listFlowPathsFromWorkspaceRunnable: () => listFlowPathsFromWorkspaceRunnable,
|
|
25835
|
+
listFlowPaths: () => listFlowPaths,
|
|
25836
|
+
listFlowConversations: () => listFlowConversations,
|
|
25837
|
+
listFilteredQueueUuids: () => listFilteredQueueUuids,
|
|
25838
|
+
listFilteredJobsUuids: () => listFilteredJobsUuids,
|
|
25839
|
+
listFavoriteAssets: () => listFavoriteAssets,
|
|
25840
|
+
listExtendedJobs: () => listExtendedJobs,
|
|
25841
|
+
listExtJwtTokens: () => listExtJwtTokens,
|
|
25842
|
+
listEmailTriggers: () => listEmailTriggers,
|
|
25843
|
+
listDucklakes: () => listDucklakes,
|
|
25844
|
+
listDrafts: () => listDrafts,
|
|
25845
|
+
listDispatchEvents: () => listDispatchEvents,
|
|
25846
|
+
listDeploymentRequestEligibleDeployers: () => listDeploymentRequestEligibleDeployers,
|
|
25847
|
+
listDedicatedWithDeps: () => listDedicatedWithDeps,
|
|
25848
|
+
listDataTables: () => listDataTables,
|
|
25849
|
+
listDataTableTables: () => listDataTableTables,
|
|
25850
|
+
listDataTableSchemas: () => listDataTableSchemas,
|
|
25851
|
+
listCustomInstanceDbs: () => listCustomInstanceDbs,
|
|
25852
|
+
listConversationMessages: () => listConversationMessages,
|
|
25853
|
+
listContextualVariables: () => listContextualVariables,
|
|
25854
|
+
listConfigs: () => listConfigs,
|
|
25855
|
+
listConcurrencyGroups: () => listConcurrencyGroups,
|
|
25856
|
+
listCompletedJobs: () => listCompletedJobs,
|
|
25857
|
+
listCaptures: () => listCaptures,
|
|
25858
|
+
listBlacklistedAgentTokens: () => listBlacklistedAgentTokens,
|
|
25859
|
+
listAzureTriggers: () => listAzureTriggers,
|
|
25860
|
+
listAzureNamespaces: () => listAzureNamespaces,
|
|
25861
|
+
listAzureNamespaceTopics: () => listAzureNamespaceTopics,
|
|
25862
|
+
listAzureNamespaceSubscriptions: () => listAzureNamespaceSubscriptions,
|
|
25863
|
+
listAzureBasicTopics: () => listAzureBasicTopics,
|
|
25864
|
+
listAvailableTeamsIds: () => listAvailableTeamsIds,
|
|
25865
|
+
listAvailableTeamsChannels: () => listAvailableTeamsChannels,
|
|
25866
|
+
listAvailableScopes: () => listAvailableScopes,
|
|
25867
|
+
listAvailablePythonVersions: () => listAvailablePythonVersions,
|
|
25868
|
+
listAutoscalingEvents: () => listAutoscalingEvents,
|
|
25869
|
+
listAuditLogs: () => listAuditLogs,
|
|
25870
|
+
listAssetsByUsage: () => listAssetsByUsage,
|
|
25871
|
+
listAssets: () => listAssets,
|
|
25872
|
+
listAssetSchemas: () => listAssetSchemas,
|
|
25873
|
+
listAssetPartitionsInRange: () => listAssetPartitionsInRange,
|
|
25874
|
+
listAssetPartitions: () => listAssetPartitions,
|
|
25875
|
+
listAssetDispatchEdges: () => listAssetDispatchEdges,
|
|
25876
|
+
listApps: () => listApps,
|
|
25877
|
+
listAppPathsFromWorkspaceRunnable: () => listAppPathsFromWorkspaceRunnable,
|
|
25878
|
+
listAllWorkspaceDependencies: () => listAllWorkspaceDependencies,
|
|
25879
|
+
listAllTgoogleTopicSubscriptions: () => listAllTgoogleTopicSubscriptions,
|
|
25880
|
+
listAllDedicatedWithDeps: () => listAllDedicatedWithDeps,
|
|
25881
|
+
listAiSkills: () => listAiSkills,
|
|
25882
|
+
leaveWorkspace: () => leaveWorkspace,
|
|
25883
|
+
leaveInstance: () => leaveInstance,
|
|
25884
|
+
isValidPostgresConfiguration: () => isValidPostgresConfiguration,
|
|
25885
|
+
isSmtpConfigured: () => isSmtpConfigured,
|
|
25886
|
+
isPasswordLoginDisabled: () => isPasswordLoginDisabled,
|
|
25887
|
+
isOwnerOfPath: () => isOwnerOfPath,
|
|
25888
|
+
isDomainAllowed: () => isDomainAllowed,
|
|
25889
|
+
isDefaultTagsPerWorkspace: () => isDefaultTagsPerWorkspace,
|
|
25890
|
+
inviteUser: () => inviteUser,
|
|
25891
|
+
installFromWorkspace: () => installFromWorkspace,
|
|
25892
|
+
importQueuedJobs: () => importQueuedJobs,
|
|
25893
|
+
importPgDatabase: () => importPgDatabase,
|
|
25894
|
+
importInstallation: () => importInstallation,
|
|
25895
|
+
importCompletedJobs: () => importCompletedJobs,
|
|
25896
|
+
impersonateServiceAccount: () => impersonateServiceAccount,
|
|
25897
|
+
globalWhoami: () => globalWhoami,
|
|
25898
|
+
globalUsersOverwrite: () => globalUsersOverwrite,
|
|
25899
|
+
globalUsersExport: () => globalUsersExport,
|
|
25900
|
+
globalUsernameInfo: () => globalUsernameInfo,
|
|
25901
|
+
globalUserUpdate: () => globalUserUpdate,
|
|
25902
|
+
globalUserRename: () => globalUserRename,
|
|
25903
|
+
globalUserDelete: () => globalUserDelete,
|
|
25904
|
+
globalOffboardPreview: () => globalOffboardPreview,
|
|
25905
|
+
gitRepoViewerFileUpload: () => gitRepoViewerFileUpload,
|
|
25906
|
+
ghesInstallationCallback: () => ghesInstallationCallback,
|
|
25907
|
+
getWorkspaceUsage: () => getWorkspaceUsage,
|
|
25908
|
+
getWorkspaceSlackOauthConfig: () => getWorkspaceSlackOauthConfig,
|
|
25909
|
+
getWorkspaceName: () => getWorkspaceName,
|
|
25910
|
+
getWorkspaceFairnessEvents: () => getWorkspaceFairnessEvents,
|
|
25911
|
+
getWorkspaceEncryptionKey: () => getWorkspaceEncryptionKey,
|
|
25912
|
+
getWorkspaceDefaultApp: () => getWorkspaceDefaultApp,
|
|
25913
|
+
getWorkspaceAsSuperAdmin: () => getWorkspaceAsSuperAdmin,
|
|
25914
|
+
getWebsocketTrigger: () => getWebsocketTrigger,
|
|
25915
|
+
getVolumeStorage: () => getVolumeStorage,
|
|
25916
|
+
getVariableValue: () => getVariableValue,
|
|
25917
|
+
getVariable: () => getVariable,
|
|
25918
|
+
getUser: () => getUser,
|
|
25919
|
+
getUsedTriggers: () => getUsedTriggers,
|
|
25920
|
+
getUsage: () => getUsage,
|
|
25921
|
+
getTutorialProgress: () => getTutorialProgress,
|
|
25922
|
+
getTriggersCountOfScript: () => getTriggersCountOfScript,
|
|
25923
|
+
getTriggersCountOfFlow: () => getTriggersCountOfFlow,
|
|
25924
|
+
getTopHubScripts: () => getTopHubScripts,
|
|
25925
|
+
getThresholdAlert: () => getThresholdAlert,
|
|
25926
|
+
getTemplateScript: () => getTemplateScript,
|
|
25927
|
+
getTeamsApprovalPayload: () => getTeamsApprovalPayload,
|
|
25928
|
+
getSuspendedJobFlow: () => getSuspendedJobFlow,
|
|
25929
|
+
getStorageUsage: () => getStorageUsage,
|
|
25930
|
+
getStats: () => getStats,
|
|
25931
|
+
getStartedAtByIds: () => getStartedAtByIds,
|
|
25932
|
+
getSqsTrigger: () => getSqsTrigger,
|
|
25933
|
+
getSlackApprovalPayload: () => getSlackApprovalPayload,
|
|
25934
|
+
getSharedUiVersion: () => getSharedUiVersion,
|
|
25935
|
+
getSharedUi: () => getSharedUi,
|
|
25936
|
+
getSettings: () => getSettings,
|
|
25937
|
+
getSessionWorkspaceStatus: () => getSessionWorkspaceStatus,
|
|
25938
|
+
getSecondaryStorageNames: () => getSecondaryStorageNames,
|
|
25939
|
+
getScriptLatestVersion: () => getScriptLatestVersion,
|
|
25940
|
+
getScriptHistoryByPath: () => getScriptHistoryByPath,
|
|
25941
|
+
getScriptDeploymentStatus: () => getScriptDeploymentStatus,
|
|
25942
|
+
getScriptByPath: () => getScriptByPath,
|
|
25943
|
+
getScriptByHash: () => getScriptByHash,
|
|
25944
|
+
getScheduledFor: () => getScheduledFor,
|
|
25945
|
+
getSchedule: () => getSchedule,
|
|
25946
|
+
getRunnable: () => getRunnable,
|
|
25947
|
+
getRuffConfig: () => getRuffConfig,
|
|
25948
|
+
getRootJobId: () => getRootJobId,
|
|
25949
|
+
getResumeUrls: () => getResumeUrls,
|
|
25950
|
+
getResourceValueInterpolated: () => getResourceValueInterpolated,
|
|
25951
|
+
getResourceValue: () => getResourceValue,
|
|
25952
|
+
getResourceType: () => getResourceType,
|
|
25953
|
+
getResource: () => getResource,
|
|
25954
|
+
getRawAppData: () => getRawAppData,
|
|
25955
|
+
getQueuePosition: () => getQueuePosition,
|
|
25956
|
+
getQueueMetrics: () => getQueueMetrics,
|
|
25957
|
+
getQueueCount: () => getQueueCount,
|
|
25958
|
+
getPublicSettings: () => getPublicSettings,
|
|
25959
|
+
getPublicSecretOfLatestVersionOfApp: () => getPublicSecretOfLatestVersionOfApp,
|
|
25960
|
+
getPublicSecretOfApp: () => getPublicSecretOfApp,
|
|
25961
|
+
getPublicResource: () => getPublicResource,
|
|
25962
|
+
getPublicAppBySecret: () => getPublicAppBySecret,
|
|
25963
|
+
getPublicAppByCustomPath: () => getPublicAppByCustomPath,
|
|
25964
|
+
getPremiumInfo: () => getPremiumInfo,
|
|
25965
|
+
getPostgresVersion: () => getPostgresVersion,
|
|
25966
|
+
getPostgresTrigger: () => getPostgresTrigger,
|
|
25967
|
+
getPostgresPublication: () => getPostgresPublication,
|
|
25968
|
+
getOwnDraft: () => getOwnDraft,
|
|
25969
|
+
getOpenDeploymentRequest: () => getOpenDeploymentRequest,
|
|
25970
|
+
getOpenApiYaml: () => getOpenApiYaml,
|
|
25971
|
+
getOidcToken: () => getOidcToken,
|
|
25972
|
+
getOfflineLicenseStatus: () => getOfflineLicenseStatus,
|
|
25973
|
+
getObjectStorageUsage: () => getObjectStorageUsage,
|
|
25974
|
+
getOauthConnect: () => getOauthConnect,
|
|
25975
|
+
getNpmPackageMetadata: () => getNpmPackageMetadata,
|
|
25976
|
+
getNpmPackageFiletree: () => getNpmPackageFiletree,
|
|
25977
|
+
getNpmPackageFile: () => getNpmPackageFile,
|
|
25978
|
+
getNatsTrigger: () => getNatsTrigger,
|
|
25979
|
+
getNativeTrigger: () => getNativeTrigger,
|
|
25980
|
+
getMqttTrigger: () => getMqttTrigger,
|
|
25981
|
+
getMinVersion: () => getMinVersion,
|
|
25982
|
+
getMinKeepAliveVersion: () => getMinKeepAliveVersion,
|
|
25983
|
+
getMcpTools: () => getMcpTools,
|
|
25984
|
+
getLogFileFromStore: () => getLogFileFromStore,
|
|
25985
|
+
getLogFile: () => getLogFile,
|
|
25986
|
+
getLogCleanupStatus: () => getLogCleanupStatus,
|
|
25987
|
+
getLocal: () => getLocal,
|
|
25988
|
+
getLicenseId: () => getLicenseId,
|
|
25989
|
+
getLatestWorkspaceDependencies: () => getLatestWorkspaceDependencies,
|
|
25990
|
+
getLatestKeyRenewalAttempt: () => getLatestKeyRenewalAttempt,
|
|
25991
|
+
getKafkaTrigger: () => getKafkaTrigger,
|
|
25992
|
+
getJwks: () => getJwks,
|
|
25993
|
+
getJobViewToken: () => getJobViewToken,
|
|
25994
|
+
getJobUpdatesSse: () => getJobUpdatesSse,
|
|
25995
|
+
getJobUpdates: () => getJobUpdates,
|
|
25996
|
+
getJobProgress: () => getJobProgress,
|
|
25997
|
+
getJobOtelTraces: () => getJobOtelTraces,
|
|
25998
|
+
getJobMetrics: () => getJobMetrics,
|
|
25999
|
+
getJobLogs: () => getJobLogs,
|
|
26000
|
+
getJobArgs: () => getJobArgs,
|
|
26001
|
+
getJob: () => getJob,
|
|
26002
|
+
getIsPremium: () => getIsPremium,
|
|
26003
|
+
getInstanceHash: () => getInstanceHash,
|
|
26004
|
+
getInstanceGroup: () => getInstanceGroup,
|
|
26005
|
+
getInstanceConfig: () => getInstanceConfig,
|
|
26006
|
+
getInputHistory: () => getInputHistory,
|
|
26007
|
+
getIndexerStatus: () => getIndexerStatus,
|
|
26008
|
+
getIndexStorageSizes: () => getIndexStorageSizes,
|
|
26009
|
+
getIndexDiskStorageSizes: () => getIndexDiskStorageSizes,
|
|
26010
|
+
getImports: () => getImports,
|
|
26011
|
+
getHubScriptContentByPath: () => getHubScriptContentByPath,
|
|
26012
|
+
getHubScriptByPath: () => getHubScriptByPath,
|
|
26013
|
+
getHubRawAppById: () => getHubRawAppById,
|
|
26014
|
+
getHubFlowById: () => getHubFlowById,
|
|
26015
|
+
getHubAppById: () => getHubAppById,
|
|
26016
|
+
getHttpTrigger: () => getHttpTrigger,
|
|
26017
|
+
getHealthStatus: () => getHealthStatus,
|
|
26018
|
+
getHealthDetailed: () => getHealthDetailed,
|
|
26019
|
+
getGroupPermissionHistory: () => getGroupPermissionHistory,
|
|
26020
|
+
getGroup: () => getGroup,
|
|
26021
|
+
getGranularAcls: () => getGranularAcls,
|
|
26022
|
+
getGlobalConnectedRepositories: () => getGlobalConnectedRepositories,
|
|
26023
|
+
getGlobal: () => getGlobal,
|
|
26024
|
+
getGithubAppToken: () => getGithubAppToken,
|
|
26025
|
+
getGitSyncEnabled: () => getGitSyncEnabled,
|
|
26026
|
+
getGitCommitHash: () => getGitCommitHash,
|
|
26027
|
+
getGhesConfig: () => getGhesConfig,
|
|
26028
|
+
getGcpTrigger: () => getGcpTrigger,
|
|
26029
|
+
getFolderUsage: () => getFolderUsage,
|
|
26030
|
+
getFolderPermissionHistory: () => getFolderPermissionHistory,
|
|
26031
|
+
getFolder: () => getFolder,
|
|
26032
|
+
getFlowVersion: () => getFlowVersion,
|
|
26033
|
+
getFlowUserState: () => getFlowUserState,
|
|
26034
|
+
getFlowLatestVersion: () => getFlowLatestVersion,
|
|
26035
|
+
getFlowHistory: () => getFlowHistory,
|
|
26036
|
+
getFlowDeploymentStatus: () => getFlowDeploymentStatus,
|
|
26037
|
+
getFlowDebugInfo: () => getFlowDebugInfo,
|
|
26038
|
+
getFlowByPath: () => getFlowByPath,
|
|
26039
|
+
getFlowAllLogsStructured: () => getFlowAllLogsStructured,
|
|
26040
|
+
getFlowAllLogs: () => getFlowAllLogs,
|
|
26041
|
+
getEmailTrigger: () => getEmailTrigger,
|
|
26042
|
+
getDraftForUser: () => getDraftForUser,
|
|
26043
|
+
getDevWorkspace: () => getDevWorkspace,
|
|
26044
|
+
getDeployTo: () => getDeployTo,
|
|
26045
|
+
getDependentsAmounts: () => getDependentsAmounts,
|
|
26046
|
+
getDependents: () => getDependents,
|
|
26047
|
+
getDependencyMap: () => getDependencyMap,
|
|
26048
|
+
getDefaultScripts: () => getDefaultScripts,
|
|
26049
|
+
getDbClock: () => getDbClock,
|
|
26050
|
+
getDatatableFullSchema: () => getDatatableFullSchema,
|
|
26051
|
+
getDataTableTableSchema: () => getDataTableTableSchema,
|
|
26052
|
+
getCustomTagsForWorkspace: () => getCustomTagsForWorkspace,
|
|
26053
|
+
getCustomTags: () => getCustomTags,
|
|
26054
|
+
getCurrentEmail: () => getCurrentEmail,
|
|
26055
|
+
getCriticalAlerts: () => getCriticalAlerts,
|
|
26056
|
+
getCountsOfRunningJobsPerTag: () => getCountsOfRunningJobsPerTag,
|
|
26057
|
+
getCountsOfJobsWaitingPerTag: () => getCountsOfJobsWaitingPerTag,
|
|
26058
|
+
getCopilotSettingsState: () => getCopilotSettingsState,
|
|
26059
|
+
getCopilotInfo: () => getCopilotInfo,
|
|
26060
|
+
getConfig: () => getConfig,
|
|
26061
|
+
getConcurrencyKey: () => getConcurrencyKey,
|
|
26062
|
+
getCompletedJobTiming: () => getCompletedJobTiming,
|
|
26063
|
+
getCompletedJobResultMaybe: () => getCompletedJobResultMaybe,
|
|
26064
|
+
getCompletedJobResult: () => getCompletedJobResult,
|
|
26065
|
+
getCompletedJobLogsTail: () => getCompletedJobLogsTail,
|
|
26066
|
+
getCompletedJob: () => getCompletedJob,
|
|
26067
|
+
getCompletedCount: () => getCompletedCount,
|
|
26068
|
+
getCloudQuotas: () => getCloudQuotas,
|
|
26069
|
+
getCiTestResultsBatch: () => getCiTestResultsBatch,
|
|
26070
|
+
getCiTestResults: () => getCiTestResults,
|
|
26071
|
+
getCaptureConfigs: () => getCaptureConfigs,
|
|
26072
|
+
getCapture: () => getCapture,
|
|
26073
|
+
getAzureTrigger: () => getAzureTrigger,
|
|
26074
|
+
getAuditLogsS3Status: () => getAuditLogsS3Status,
|
|
26075
|
+
getAuditLogsS3BackfillStatus: () => getAuditLogsS3BackfillStatus,
|
|
26076
|
+
getAuditLog: () => getAuditLog,
|
|
26077
|
+
getAssetsGraph: () => getAssetsGraph,
|
|
26078
|
+
getArgsFromHistoryOrSavedInput: () => getArgsFromHistoryOrSavedInput,
|
|
26079
|
+
getApprovalInfo: () => getApprovalInfo,
|
|
26080
|
+
getAppLiteByPath: () => getAppLiteByPath,
|
|
26081
|
+
getAppLatestVersion: () => getAppLatestVersion,
|
|
26082
|
+
getAppHistoryByPath: () => getAppHistoryByPath,
|
|
26083
|
+
getAppEmbedTokenBySecret: () => getAppEmbedTokenBySecret,
|
|
26084
|
+
getAppEmbedTokenByPath: () => getAppEmbedTokenByPath,
|
|
26085
|
+
getAppEmbedTokenByCustomPath: () => getAppEmbedTokenByCustomPath,
|
|
26086
|
+
getAppByVersion: () => getAppByVersion,
|
|
26087
|
+
getAppByPath: () => getAppByPath,
|
|
26088
|
+
getAiSkill: () => getAiSkill,
|
|
26089
|
+
generateOpenapiSpec: () => generateOpenapiSpec,
|
|
26090
|
+
generateNativeTriggerServiceConnectUrl: () => generateNativeTriggerServiceConnectUrl,
|
|
26091
|
+
generateInstanceConnectUrl: () => generateInstanceConnectUrl,
|
|
26092
|
+
geDefaultTags: () => geDefaultTags,
|
|
26093
|
+
forceCancelQueuedJob: () => forceCancelQueuedJob,
|
|
26094
|
+
fileUpload: () => fileUpload,
|
|
26095
|
+
fileResourceTypeToFileExtMap: () => fileResourceTypeToFileExtMap,
|
|
26096
|
+
fileDownloadParquetAsCsv: () => fileDownloadParquetAsCsv,
|
|
26097
|
+
fileDownload: () => fileDownload,
|
|
26098
|
+
exportQueuedJobs: () => exportQueuedJobs,
|
|
26099
|
+
exportPgSchema: () => exportPgSchema,
|
|
26100
|
+
exportInstanceGroups: () => exportInstanceGroups,
|
|
26101
|
+
exportInstallation: () => exportInstallation,
|
|
26102
|
+
exportCompletedJobs: () => exportCompletedJobs,
|
|
26103
|
+
exitImpersonation: () => exitImpersonation,
|
|
26104
|
+
existsWorkspace: () => existsWorkspace,
|
|
26105
|
+
existsWorkersWithTags: () => existsWorkersWithTags,
|
|
26106
|
+
existsWebsocketTrigger: () => existsWebsocketTrigger,
|
|
26107
|
+
existsVariable: () => existsVariable,
|
|
26108
|
+
existsUsername: () => existsUsername,
|
|
26109
|
+
existsSqsTrigger: () => existsSqsTrigger,
|
|
26110
|
+
existsScriptByPath: () => existsScriptByPath,
|
|
26111
|
+
existsSchedule: () => existsSchedule,
|
|
26112
|
+
existsRoute: () => existsRoute,
|
|
26113
|
+
existsResourceType: () => existsResourceType,
|
|
26114
|
+
existsResource: () => existsResource,
|
|
26115
|
+
existsPostgresTrigger: () => existsPostgresTrigger,
|
|
26116
|
+
existsNatsTrigger: () => existsNatsTrigger,
|
|
26117
|
+
existsNativeTrigger: () => existsNativeTrigger,
|
|
26118
|
+
existsMqttTrigger: () => existsMqttTrigger,
|
|
26119
|
+
existsKafkaTrigger: () => existsKafkaTrigger,
|
|
26120
|
+
existsHttpTrigger: () => existsHttpTrigger,
|
|
26121
|
+
existsGcpTrigger: () => existsGcpTrigger,
|
|
26122
|
+
existsFolder: () => existsFolder,
|
|
26123
|
+
existsFlowByPath: () => existsFlowByPath,
|
|
26124
|
+
existsEmailTrigger: () => existsEmailTrigger,
|
|
26125
|
+
existsEmailLocalPart: () => existsEmailLocalPart,
|
|
26126
|
+
existsEmail: () => existsEmail,
|
|
26127
|
+
existsAzureTrigger: () => existsAzureTrigger,
|
|
26128
|
+
existsApp: () => existsApp,
|
|
26129
|
+
executeComponent: () => executeComponent,
|
|
26130
|
+
encryptValue: () => encryptValue,
|
|
26131
|
+
editWorkspaceGitSyncConfig: () => editWorkspaceGitSyncConfig,
|
|
26132
|
+
editWorkspaceDeployUiSettings: () => editWorkspaceDeployUiSettings,
|
|
26133
|
+
editWorkspaceDefaultApp: () => editWorkspaceDefaultApp,
|
|
26134
|
+
editWebhook: () => editWebhook,
|
|
26135
|
+
editTeamsCommand: () => editTeamsCommand,
|
|
26136
|
+
editSuccessHandler: () => editSuccessHandler,
|
|
26137
|
+
editSlackCommand: () => editSlackCommand,
|
|
26138
|
+
editLargeFileStorageConfig: () => editLargeFileStorageConfig,
|
|
26139
|
+
editInstanceGroups: () => editInstanceGroups,
|
|
26140
|
+
editGitSyncRepository: () => editGitSyncRepository,
|
|
26141
|
+
editErrorHandler: () => editErrorHandler,
|
|
26142
|
+
editDucklakeConfig: () => editDucklakeConfig,
|
|
26143
|
+
editDeployTo: () => editDeployTo,
|
|
26144
|
+
editDefaultScripts: () => editDefaultScripts,
|
|
26145
|
+
editDataTableConfig: () => editDataTableConfig,
|
|
26146
|
+
editCopilotConfig: () => editCopilotConfig,
|
|
26147
|
+
editAutoInvite: () => editAutoInvite,
|
|
26148
|
+
duckdbConnectionSettingsV2: () => duckdbConnectionSettingsV2,
|
|
26149
|
+
duckdbConnectionSettings: () => duckdbConnectionSettings,
|
|
26150
|
+
dropForkedDucklakeNamespaces: () => dropForkedDucklakeNamespaces,
|
|
26151
|
+
dropForkedDatatableDatabases: () => dropForkedDatatableDatabases,
|
|
26152
|
+
dropCustomInstanceDb: () => dropCustomInstanceDb,
|
|
26153
|
+
downloadOpenapiSpec: () => downloadOpenapiSpec,
|
|
26154
|
+
discoverMcpOauth: () => discoverMcpOauth,
|
|
26155
|
+
discoverGhesInstallations: () => discoverGhesInstallations,
|
|
26156
|
+
disconnectTeams: () => disconnectTeams,
|
|
26157
|
+
disconnectSlack: () => disconnectSlack,
|
|
26158
|
+
disconnectAccount: () => disconnectAccount,
|
|
26159
|
+
diffRawScriptsWithDeployed: () => diffRawScriptsWithDeployed,
|
|
26160
|
+
detachDevWorkspace: () => detachDevWorkspace,
|
|
26161
|
+
deleteWorkspaceSlackOauthConfig: () => deleteWorkspaceSlackOauthConfig,
|
|
26162
|
+
deleteWorkspaceDependencies: () => deleteWorkspaceDependencies,
|
|
26163
|
+
deleteWorkspace: () => deleteWorkspace,
|
|
26164
|
+
deleteWebsocketTrigger: () => deleteWebsocketTrigger,
|
|
26165
|
+
deleteVolume: () => deleteVolume,
|
|
26166
|
+
deleteVariablesBulk: () => deleteVariablesBulk,
|
|
26167
|
+
deleteVariable: () => deleteVariable,
|
|
26168
|
+
deleteUser: () => deleteUser,
|
|
26169
|
+
deleteToken: () => deleteToken,
|
|
26170
|
+
deleteSqsTrigger: () => deleteSqsTrigger,
|
|
26171
|
+
deleteScriptsBulk: () => deleteScriptsBulk,
|
|
26172
|
+
deleteScriptByPath: () => deleteScriptByPath,
|
|
26173
|
+
deleteScriptByHash: () => deleteScriptByHash,
|
|
26174
|
+
deleteSchedule: () => deleteSchedule,
|
|
26175
|
+
deleteS3FileFromApp: () => deleteS3FileFromApp,
|
|
26176
|
+
deleteS3File: () => deleteS3File,
|
|
26177
|
+
deleteResourcesBulk: () => deleteResourcesBulk,
|
|
26178
|
+
deleteResourceType: () => deleteResourceType,
|
|
26179
|
+
deleteResource: () => deleteResource,
|
|
26180
|
+
deleteProtectionRule: () => deleteProtectionRule,
|
|
26181
|
+
deletePostgresTrigger: () => deletePostgresTrigger,
|
|
26182
|
+
deletePostgresReplicationSlot: () => deletePostgresReplicationSlot,
|
|
26183
|
+
deletePostgresPublication: () => deletePostgresPublication,
|
|
26184
|
+
deleteNatsTrigger: () => deleteNatsTrigger,
|
|
26185
|
+
deleteNativeTriggerService: () => deleteNativeTriggerService,
|
|
26186
|
+
deleteNativeTrigger: () => deleteNativeTrigger,
|
|
26187
|
+
deleteMqttTrigger: () => deleteMqttTrigger,
|
|
26188
|
+
deleteKafkaTrigger: () => deleteKafkaTrigger,
|
|
26189
|
+
deleteJobs: () => deleteJobs,
|
|
26190
|
+
deleteInvite: () => deleteInvite,
|
|
26191
|
+
deleteInstanceGroup: () => deleteInstanceGroup,
|
|
26192
|
+
deleteInput: () => deleteInput,
|
|
26193
|
+
deleteHttpTrigger: () => deleteHttpTrigger,
|
|
26194
|
+
deleteGroup: () => deleteGroup,
|
|
26195
|
+
deleteGitSyncRepository: () => deleteGitSyncRepository,
|
|
26196
|
+
deleteGcpTrigger: () => deleteGcpTrigger,
|
|
26197
|
+
deleteGcpSubscription: () => deleteGcpSubscription,
|
|
26198
|
+
deleteFromWorkspace: () => deleteFromWorkspace,
|
|
26199
|
+
deleteFolder: () => deleteFolder,
|
|
26200
|
+
deleteFlowConversation: () => deleteFlowConversation,
|
|
26201
|
+
deleteFlowByPath: () => deleteFlowByPath,
|
|
26202
|
+
deleteEmailTrigger: () => deleteEmailTrigger,
|
|
26203
|
+
deleteConfig: () => deleteConfig,
|
|
26204
|
+
deleteConcurrencyGroup: () => deleteConcurrencyGroup,
|
|
26205
|
+
deleteCompletedJob: () => deleteCompletedJob,
|
|
26206
|
+
deleteCapture: () => deleteCapture,
|
|
26207
|
+
deleteAzureTrigger: () => deleteAzureTrigger,
|
|
26208
|
+
deleteAzureSubscription: () => deleteAzureSubscription,
|
|
26209
|
+
deleteApp: () => deleteApp,
|
|
26210
|
+
deleteAiSkill: () => deleteAiSkill,
|
|
26211
|
+
declineInvite: () => declineInvite,
|
|
26212
|
+
datasetStorageTestConnection: () => datasetStorageTestConnection,
|
|
26213
|
+
customPathExists: () => customPathExists,
|
|
26214
|
+
createWorkspaceForkGitBranch: () => createWorkspaceForkGitBranch,
|
|
26215
|
+
createWorkspaceFork: () => createWorkspaceFork,
|
|
26216
|
+
createWorkspaceDependencies: () => createWorkspaceDependencies,
|
|
26217
|
+
createWorkspace: () => createWorkspace,
|
|
26218
|
+
createWebsocketTrigger: () => createWebsocketTrigger,
|
|
26219
|
+
createVolume: () => createVolume,
|
|
26220
|
+
createVariable: () => createVariable,
|
|
26221
|
+
createUserGlobally: () => createUserGlobally,
|
|
26222
|
+
createTokenImpersonate: () => createTokenImpersonate,
|
|
26223
|
+
createToken: () => createToken,
|
|
26224
|
+
createTemplateScript: () => createTemplateScript,
|
|
26225
|
+
createSqsTrigger: () => createSqsTrigger,
|
|
26226
|
+
createServiceAccount: () => createServiceAccount,
|
|
26227
|
+
createScript: () => createScript,
|
|
26228
|
+
createSchedule: () => createSchedule,
|
|
26229
|
+
createResourceType: () => createResourceType,
|
|
26230
|
+
createResource: () => createResource,
|
|
26231
|
+
createProtectionRule: () => createProtectionRule,
|
|
26232
|
+
createPostgresTrigger: () => createPostgresTrigger,
|
|
26233
|
+
createPostgresReplicationSlot: () => createPostgresReplicationSlot,
|
|
26234
|
+
createPostgresPublication: () => createPostgresPublication,
|
|
26235
|
+
createPgDatabase: () => createPgDatabase,
|
|
26236
|
+
createNatsTrigger: () => createNatsTrigger,
|
|
26237
|
+
createNativeTriggerService: () => createNativeTriggerService,
|
|
26238
|
+
createNativeTrigger: () => createNativeTrigger,
|
|
26239
|
+
createMqttTrigger: () => createMqttTrigger,
|
|
26240
|
+
createKafkaTrigger: () => createKafkaTrigger,
|
|
26241
|
+
createJobSignature: () => createJobSignature,
|
|
26242
|
+
createInstanceGroup: () => createInstanceGroup,
|
|
26243
|
+
createInput: () => createInput,
|
|
26244
|
+
createHttpTriggers: () => createHttpTriggers,
|
|
26245
|
+
createHttpTrigger: () => createHttpTrigger,
|
|
26246
|
+
createGroup: () => createGroup,
|
|
26247
|
+
createGcpTrigger: () => createGcpTrigger,
|
|
26248
|
+
createFolder: () => createFolder,
|
|
26249
|
+
createFlow: () => createFlow,
|
|
26250
|
+
createEmailTrigger: () => createEmailTrigger,
|
|
26251
|
+
createDeploymentRequestComment: () => createDeploymentRequestComment,
|
|
26252
|
+
createDeploymentRequest: () => createDeploymentRequest,
|
|
26253
|
+
createCustomerPortalSession: () => createCustomerPortalSession,
|
|
26254
|
+
createAzureTrigger: () => createAzureTrigger,
|
|
26255
|
+
createAppRaw: () => createAppRaw,
|
|
26256
|
+
createApp: () => createApp,
|
|
26257
|
+
createAgentToken: () => createAgentToken,
|
|
26258
|
+
createAccount: () => createAccount,
|
|
26259
|
+
countSearchLogsIndex: () => countSearchLogsIndex,
|
|
26260
|
+
countJobsByTag: () => countJobsByTag,
|
|
26261
|
+
countCompletedJobs: () => countCompletedJobs,
|
|
26262
|
+
convertUserToGroup: () => convertUserToGroup,
|
|
26263
|
+
connectTeams: () => connectTeams,
|
|
26264
|
+
connectSlackInstance: () => connectSlackInstance,
|
|
26265
|
+
connectSlackCallbackInstance: () => connectSlackCallbackInstance,
|
|
26266
|
+
connectSlackCallback: () => connectSlackCallback,
|
|
26267
|
+
connectSlack: () => connectSlack,
|
|
26268
|
+
connectClientCredentials: () => connectClientCredentials,
|
|
26269
|
+
connectCallback: () => connectCallback,
|
|
26270
|
+
computeObjectStorageUsage: () => computeObjectStorageUsage,
|
|
26271
|
+
compareWorkspaces: () => compareWorkspaces,
|
|
26272
|
+
commitKafkaOffsets: () => commitKafkaOffsets,
|
|
26273
|
+
closeDeploymentRequestMerged: () => closeDeploymentRequestMerged,
|
|
26274
|
+
clearIndex: () => clearIndex,
|
|
26275
|
+
checkSchemaContracts: () => checkSchemaContracts,
|
|
26276
|
+
checkS3FolderExists: () => checkS3FolderExists,
|
|
26277
|
+
checkInstanceSharingAvailable: () => checkInstanceSharingAvailable,
|
|
26278
|
+
checkIfNativeTriggersServiceExists: () => checkIfNativeTriggersServiceExists,
|
|
26279
|
+
changeWorkspaceName: () => changeWorkspaceName,
|
|
26280
|
+
changeWorkspaceId: () => changeWorkspaceId,
|
|
26281
|
+
changeWorkspaceColor: () => changeWorkspaceColor,
|
|
26282
|
+
cancelSuspendedTriggerJobs: () => cancelSuspendedTriggerJobs,
|
|
26283
|
+
cancelSuspendedJobPost: () => cancelSuspendedJobPost,
|
|
26284
|
+
cancelSuspendedJobGet: () => cancelSuspendedJobGet,
|
|
26285
|
+
cancelSelection: () => cancelSelection,
|
|
26286
|
+
cancelQueuedJob: () => cancelQueuedJob,
|
|
26287
|
+
cancelPersistentQueuedJobs: () => cancelPersistentQueuedJobs,
|
|
26288
|
+
cancelDeploymentRequest: () => cancelDeploymentRequest,
|
|
26289
|
+
blacklistAgentToken: () => blacklistAgentToken,
|
|
26290
|
+
batchReRunJobs: () => batchReRunJobs,
|
|
26291
|
+
backendVersion: () => backendVersion,
|
|
26292
|
+
backendUptodate: () => backendUptodate,
|
|
26293
|
+
attachDevWorkspace: () => attachDevWorkspace,
|
|
26294
|
+
assignGhesInstallation: () => assignGhesInstallation,
|
|
26295
|
+
archiveWorkspaceDependencies: () => archiveWorkspaceDependencies,
|
|
26296
|
+
archiveWorkspace: () => archiveWorkspace,
|
|
26297
|
+
archiveScriptByPath: () => archiveScriptByPath,
|
|
26298
|
+
archiveScriptByHash: () => archiveScriptByHash,
|
|
26299
|
+
archiveFlowByPath: () => archiveFlowByPath,
|
|
26300
|
+
addUserToInstanceGroup: () => addUserToInstanceGroup,
|
|
26301
|
+
addUserToGroup: () => addUserToGroup,
|
|
26302
|
+
addUser: () => addUser,
|
|
26303
|
+
addOwnerToFolder: () => addOwnerToFolder,
|
|
26304
|
+
addGranularAcls: () => addGranularAcls,
|
|
26305
|
+
acknowledgeCriticalAlert: () => acknowledgeCriticalAlert,
|
|
26306
|
+
acknowledgeAllCriticalAlerts: () => acknowledgeAllCriticalAlerts,
|
|
26307
|
+
acceptInvite: () => acceptInvite,
|
|
26308
|
+
OpenAPI: () => OpenAPI,
|
|
26309
|
+
CancelablePromise: () => CancelablePromise,
|
|
26310
|
+
CancelError: () => CancelError,
|
|
26311
|
+
ApiError: () => ApiError
|
|
26312
|
+
});
|
|
25534
26313
|
var init_gen = __esm(() => {
|
|
25535
26314
|
init_ApiError();
|
|
25536
26315
|
init_CancelablePromise();
|
|
@@ -25643,7 +26422,7 @@ var init_auth = __esm(async () => {
|
|
|
25643
26422
|
});
|
|
25644
26423
|
|
|
25645
26424
|
// src/core/constants.ts
|
|
25646
|
-
var WM_FORK_PREFIX = "wm-fork", VERSION = "1.
|
|
26425
|
+
var WM_FORK_PREFIX = "wm-fork", VERSION = "1.749.0";
|
|
25647
26426
|
|
|
25648
26427
|
// src/utils/git.ts
|
|
25649
26428
|
var exports_git = {};
|
|
@@ -28587,6 +29366,12 @@ async function bind(opts, doBind) {
|
|
|
28587
29366
|
delete entry.gitBranch;
|
|
28588
29367
|
}
|
|
28589
29368
|
config.workspaces[wsName] = entry;
|
|
29369
|
+
for (const [name, e] of Object.entries(config.workspaces)) {
|
|
29370
|
+
if (name !== wsName && !!e && typeof e === "object" && Object.keys(e).length === 0) {
|
|
29371
|
+
delete config.workspaces[name];
|
|
29372
|
+
info(colors.gray(`Removed empty placeholder workspace entry '${name}'`));
|
|
29373
|
+
}
|
|
29374
|
+
}
|
|
28590
29375
|
info(colors.green(`✓ Bound workspace '${wsName}'` + (gitBranch ? ` (gitBranch: ${gitBranch})` : "") + ` → ${selectedProfile.workspaceId} on ${selectedProfile.remote}`));
|
|
28591
29376
|
} else {
|
|
28592
29377
|
let wsName;
|
|
@@ -68534,6 +69319,33 @@ function prettyChanges(changes, specificItems, branchOverride, folderDefaultAnno
|
|
|
68534
69319
|
function removeSuffix(str, suffix) {
|
|
68535
69320
|
return str.slice(0, str.length - suffix.length);
|
|
68536
69321
|
}
|
|
69322
|
+
async function checkServerLockJobs(workspaceId, sinceIso, changedPaths) {
|
|
69323
|
+
const belongsToPush = (scriptPath) => !!scriptPath && changedPaths.some((p) => p === scriptPath || p.startsWith(scriptPath + "."));
|
|
69324
|
+
const listJobs2 = async (path12) => {
|
|
69325
|
+
const { OpenAPI: OpenAPI2 } = await Promise.resolve().then(() => (init_gen(), exports_gen));
|
|
69326
|
+
const resp = await fetch(`${OpenAPI2.BASE}${path12}`, {
|
|
69327
|
+
headers: { ...getHeaders2(), Authorization: `Bearer ${OpenAPI2.TOKEN}` }
|
|
69328
|
+
});
|
|
69329
|
+
if (!resp.ok)
|
|
69330
|
+
throw new Error(`GET ${path12} -> ${resp.status}`);
|
|
69331
|
+
return await resp.json();
|
|
69332
|
+
};
|
|
69333
|
+
try {
|
|
69334
|
+
const since = encodeURIComponent(sinceIso);
|
|
69335
|
+
const [queued, completed] = await Promise.all([
|
|
69336
|
+
listJobs2(`/w/${workspaceId}/jobs/queue/list?job_kinds=dependencies&created_after=${since}`),
|
|
69337
|
+
listJobs2(`/w/${workspaceId}/jobs/completed/list?job_kinds=dependencies&created_after=${since}&success=false`)
|
|
69338
|
+
]);
|
|
69339
|
+
const pending = queued.filter((j) => belongsToPush(j.script_path)).length;
|
|
69340
|
+
const failed = completed.filter((j) => belongsToPush(j.script_path)).map((j) => ({
|
|
69341
|
+
path: j.script_path,
|
|
69342
|
+
error: j.result?.error?.message
|
|
69343
|
+
}));
|
|
69344
|
+
return { pending, failed };
|
|
69345
|
+
} catch {
|
|
69346
|
+
return { pending: 0, failed: [] };
|
|
69347
|
+
}
|
|
69348
|
+
}
|
|
68537
69349
|
async function push4(opts) {
|
|
68538
69350
|
if (opts.jsonOutput)
|
|
68539
69351
|
setSilent(true);
|
|
@@ -68904,6 +69716,7 @@ Run 'wmill folder add-missing' to create them locally, then push again.`;
|
|
|
68904
69716
|
return;
|
|
68905
69717
|
}
|
|
68906
69718
|
const start = performance.now();
|
|
69719
|
+
const pushStartedAt = new Date().toISOString();
|
|
68907
69720
|
info(colors.gray(`Applying changes to files ...`));
|
|
68908
69721
|
let stateful = opts.stateful;
|
|
68909
69722
|
if (stateful) {
|
|
@@ -69381,9 +70194,21 @@ Run 'wmill folder add-missing' to create them locally, then push again.`;
|
|
|
69381
70194
|
} catch (e) {
|
|
69382
70195
|
warn(`Failed to push shared UI folder: ${e}`);
|
|
69383
70196
|
}
|
|
70197
|
+
const lockJobs = await checkServerLockJobs(workspace.workspaceId, pushStartedAt, changes.map((c) => c.path.replaceAll(SEP9, "/")));
|
|
70198
|
+
if (!opts.jsonOutput) {
|
|
70199
|
+
for (const f of lockJobs.failed) {
|
|
70200
|
+
warn(`⚠ server-side lock generation FAILED for ${f.path} — the deployed script is broken until it locks.` + (f.error ? `
|
|
70201
|
+
${f.error.split(`
|
|
70202
|
+
`)[0]}` : ""));
|
|
70203
|
+
}
|
|
70204
|
+
if (lockJobs.pending > 0) {
|
|
70205
|
+
info(colors.gray(`${lockJobs.pending} server-side lock job(s) still running — locks (and inferred assets) land when they finish; check the Runs page if a script stays broken.`));
|
|
70206
|
+
}
|
|
70207
|
+
}
|
|
69384
70208
|
if (opts.jsonOutput) {
|
|
69385
70209
|
const result = {
|
|
69386
70210
|
success: true,
|
|
70211
|
+
lock_jobs: lockJobs,
|
|
69387
70212
|
message: `All ${changes.length} changes pushed to the remote workspace ${workspace.workspaceId} named ${workspace.name}`,
|
|
69388
70213
|
changes: changes.map((change) => ({
|
|
69389
70214
|
type: change.name,
|
|
@@ -80020,13 +80845,6 @@ async requestInteractiveSlackApproval({ slackResourcePath, channelId, message, a
|
|
|
80020
80845
|
*/
|
|
80021
80846
|
async requestInteractiveTeamsApproval({ teamName, channelName, message, approver, defaultArgsJson, dynamicEnumsJson, }: TeamsApprovalOptions): Promise<void>
|
|
80022
80847
|
|
|
80023
|
-
/**
|
|
80024
|
-
* Parse an S3 object from URI string or record format
|
|
80025
|
-
* @param s3Object - S3 object as URI string (s3://storage/key) or record
|
|
80026
|
-
* @returns S3 object record with storage and s3 key
|
|
80027
|
-
*/
|
|
80028
|
-
parseS3Object(s3Object: S3Object): S3ObjectRecord
|
|
80029
|
-
|
|
80030
80848
|
setWorkflowCtx(ctx: WorkflowCtx | null): void
|
|
80031
80849
|
|
|
80032
80850
|
async sleep(seconds: number): Promise<void>
|
|
@@ -80096,6 +80914,17 @@ async parallel<T, R>(items: T[], fn: (item: T) => PromiseLike<R> | R, options?:
|
|
|
80096
80914
|
*/
|
|
80097
80915
|
async commitKafkaOffsets(triggerPath: string, topic: string, partition: number, offset: number,): Promise<void>
|
|
80098
80916
|
|
|
80917
|
+
/**
|
|
80918
|
+
* Parse an S3 object from URI string or record format
|
|
80919
|
+
* @param s3Object - S3 object as URI string (\`s3://storage/key\`, \`s3:///key\`
|
|
80920
|
+
* for the default storage) or record. Any other string throws rather than
|
|
80921
|
+
* falling back to an auto-generated key: an auto key is requested by
|
|
80922
|
+
* omitting the object, and a fallback would silently misplace the upload
|
|
80923
|
+
* on any typo.
|
|
80924
|
+
* @returns S3 object record with storage and s3 key
|
|
80925
|
+
*/
|
|
80926
|
+
parseS3Object(s3Object: S3Object): S3ObjectRecord
|
|
80927
|
+
|
|
80099
80928
|
/**
|
|
80100
80929
|
* Create a SQL template function for PostgreSQL/datatable queries
|
|
80101
80930
|
* @param name - Database/datatable name (default: "main")
|
|
@@ -80780,13 +81609,6 @@ async requestInteractiveSlackApproval({ slackResourcePath, channelId, message, a
|
|
|
80780
81609
|
*/
|
|
80781
81610
|
async requestInteractiveTeamsApproval({ teamName, channelName, message, approver, defaultArgsJson, dynamicEnumsJson, }: TeamsApprovalOptions): Promise<void>
|
|
80782
81611
|
|
|
80783
|
-
/**
|
|
80784
|
-
* Parse an S3 object from URI string or record format
|
|
80785
|
-
* @param s3Object - S3 object as URI string (s3://storage/key) or record
|
|
80786
|
-
* @returns S3 object record with storage and s3 key
|
|
80787
|
-
*/
|
|
80788
|
-
parseS3Object(s3Object: S3Object): S3ObjectRecord
|
|
80789
|
-
|
|
80790
81612
|
setWorkflowCtx(ctx: WorkflowCtx | null): void
|
|
80791
81613
|
|
|
80792
81614
|
async sleep(seconds: number): Promise<void>
|
|
@@ -80856,6 +81678,17 @@ async parallel<T, R>(items: T[], fn: (item: T) => PromiseLike<R> | R, options?:
|
|
|
80856
81678
|
*/
|
|
80857
81679
|
async commitKafkaOffsets(triggerPath: string, topic: string, partition: number, offset: number,): Promise<void>
|
|
80858
81680
|
|
|
81681
|
+
/**
|
|
81682
|
+
* Parse an S3 object from URI string or record format
|
|
81683
|
+
* @param s3Object - S3 object as URI string (\`s3://storage/key\`, \`s3:///key\`
|
|
81684
|
+
* for the default storage) or record. Any other string throws rather than
|
|
81685
|
+
* falling back to an auto-generated key: an auto key is requested by
|
|
81686
|
+
* omitting the object, and a fallback would silently misplace the upload
|
|
81687
|
+
* on any typo.
|
|
81688
|
+
* @returns S3 object record with storage and s3 key
|
|
81689
|
+
*/
|
|
81690
|
+
parseS3Object(s3Object: S3Object): S3ObjectRecord
|
|
81691
|
+
|
|
80859
81692
|
/**
|
|
80860
81693
|
* Create a SQL template function for PostgreSQL/datatable queries
|
|
80861
81694
|
* @param name - Database/datatable name (default: "main")
|
|
@@ -81632,13 +82465,6 @@ async requestInteractiveSlackApproval({ slackResourcePath, channelId, message, a
|
|
|
81632
82465
|
*/
|
|
81633
82466
|
async requestInteractiveTeamsApproval({ teamName, channelName, message, approver, defaultArgsJson, dynamicEnumsJson, }: TeamsApprovalOptions): Promise<void>
|
|
81634
82467
|
|
|
81635
|
-
/**
|
|
81636
|
-
* Parse an S3 object from URI string or record format
|
|
81637
|
-
* @param s3Object - S3 object as URI string (s3://storage/key) or record
|
|
81638
|
-
* @returns S3 object record with storage and s3 key
|
|
81639
|
-
*/
|
|
81640
|
-
parseS3Object(s3Object: S3Object): S3ObjectRecord
|
|
81641
|
-
|
|
81642
82468
|
setWorkflowCtx(ctx: WorkflowCtx | null): void
|
|
81643
82469
|
|
|
81644
82470
|
async sleep(seconds: number): Promise<void>
|
|
@@ -81708,6 +82534,17 @@ async parallel<T, R>(items: T[], fn: (item: T) => PromiseLike<R> | R, options?:
|
|
|
81708
82534
|
*/
|
|
81709
82535
|
async commitKafkaOffsets(triggerPath: string, topic: string, partition: number, offset: number,): Promise<void>
|
|
81710
82536
|
|
|
82537
|
+
/**
|
|
82538
|
+
* Parse an S3 object from URI string or record format
|
|
82539
|
+
* @param s3Object - S3 object as URI string (\`s3://storage/key\`, \`s3:///key\`
|
|
82540
|
+
* for the default storage) or record. Any other string throws rather than
|
|
82541
|
+
* falling back to an auto-generated key: an auto key is requested by
|
|
82542
|
+
* omitting the object, and a fallback would silently misplace the upload
|
|
82543
|
+
* on any typo.
|
|
82544
|
+
* @returns S3 object record with storage and s3 key
|
|
82545
|
+
*/
|
|
82546
|
+
parseS3Object(s3Object: S3Object): S3ObjectRecord
|
|
82547
|
+
|
|
81711
82548
|
/**
|
|
81712
82549
|
* Create a SQL template function for PostgreSQL/datatable queries
|
|
81713
82550
|
* @param name - Database/datatable name (default: "main")
|
|
@@ -83387,7 +84224,11 @@ def get_state_path() -> str
|
|
|
83387
84224
|
# Parse resource syntax from string.
|
|
83388
84225
|
def parse_resource_syntax(s: str) -> Optional[str]
|
|
83389
84226
|
|
|
83390
|
-
# Parse S3 object from
|
|
84227
|
+
# Parse S3 object from a \`s3://<storage>/<key>\` URI string (\`s3:///<key>\`
|
|
84228
|
+
# for the default storage) or S3Object format. Any other string raises
|
|
84229
|
+
# rather than falling back to an auto-generated key: an auto key is
|
|
84230
|
+
# requested by omitting the object, and a fallback would silently misplace
|
|
84231
|
+
# the upload on any typo.
|
|
83391
84232
|
def parse_s3_object(s3_object: S3Object | str) -> S3Object
|
|
83392
84233
|
|
|
83393
84234
|
# Parse variable syntax from string.
|
|
@@ -84311,7 +85152,7 @@ Reference a specific resource using \`$res:\` prefix:
|
|
|
84311
85152
|
|
|
84312
85153
|
## OpenFlow Schema
|
|
84313
85154
|
|
|
84314
|
-
{"OpenFlow":{"type":"object","description":"Top-level flow definition containing metadata, configuration, and the flow structure","properties":{"summary":{"type":"string","description":"Short description of what this flow does"},"description":{"type":"string","description":"Detailed documentation for this flow"},"value":{"$ref":"#/components/schemas/FlowValue"},"schema":{"type":"object","description":"JSON Schema for flow inputs. Use this to define input parameters, their types, defaults, and validation. For resource inputs, set type to 'object' and format to 'resource-<type>' (e.g., 'resource-stripe')"},"on_behalf_of_email":{"type":"string","description":"The flow will be run with the permissions of the user with this email."}},"required":["summary","value"]},"FlowValue":{"type":"object","description":"The flow structure containing modules and optional preprocessor/failure handlers","properties":{"modules":{"type":"array","description":"Array of steps that execute in sequence. Each step can be a script, subflow, loop, or branch","items":{"$ref":"#/components/schemas/FlowModule"}},"failure_module":{"description":"Special module that executes when the flow fails. Receives error object with message, name, stack, and step_id. Must have id 'failure'. Only supports script/rawscript types","$ref":"#/components/schemas/FlowModule"},"preprocessor_module":{"description":"Special module that runs before the first step on external triggers. Must have id 'preprocessor'. Only supports script/rawscript types. Cannot reference other step results","$ref":"#/components/schemas/FlowModule"},"same_worker":{"type":"boolean","description":"If true, all steps run on the same worker for better performance"},"preserve_step_tags":{"type":"boolean","description":"If true and the flow runs on a custom worker tag, steps that declare their own non-empty tag run on it instead of inheriting the flow tag. Steps without their own tag still inherit the flow tag."},"concurrent_limit":{"type":"number","description":"Maximum number of concurrent executions of this flow"},"concurrency_key":{"type":"string","description":"Expression to group concurrent executions (e.g., by user ID)"},"concurrency_time_window_s":{"type":"number","description":"Time window in seconds for concurrent_limit"},"debounce_delay_s":{"type":"integer","description":"Delay in seconds to debounce flow executions"},"debounce_key":{"type":"string","description":"Expression to group debounced executions"},"debounce_args_to_accumulate":{"type":"array","description":"Arguments to accumulate across debounced executions","items":{"type":"string"}},"max_total_debouncing_time":{"type":"integer","description":"Maximum total time in seconds that a job can be debounced"},"max_total_debounces_amount":{"type":"integer","description":"Maximum number of times a job can be debounced"},"skip_expr":{"type":"string","description":"JavaScript expression to conditionally skip the entire flow"},"cache_ttl":{"type":"number","description":"Cache duration in seconds for flow results"},"cache_ignore_s3_path":{"type":"boolean"},"delete_after_secs":{"type":"integer","description":"If set, delete the flow job's args, result and logs after this many seconds following job completion"},"flow_env":{"type":"object","description":"Environment variables available to all steps. Values can be strings, JSON values, or special references: '$var:path' (workspace variable) or '$res:path' (resource).","additionalProperties":{}},"priority":{"type":"number","description":"Execution priority (higher numbers run first)"},"early_return":{"type":"string","description":"JavaScript expression to return early from the flow"},"chat_input_enabled":{"type":"boolean","description":"Whether this flow accepts chat-style input"},"notes":{"type":"array","description":"Sticky notes attached to the flow","items":{"$ref":"#/components/schemas/FlowNote"}},"groups":{"type":"array","description":"Semantic groups of modules for organizational purposes","items":{"$ref":"#/components/schemas/FlowGroup"}}},"required":["modules"]},"Retry":{"type":"object","description":"Retry configuration for failed module executions","properties":{"constant":{"type":"object","description":"Retry with constant delay between attempts","properties":{"attempts":{"type":"integer","description":"Number of retry attempts"},"seconds":{"type":"integer","description":"Seconds to wait between retries"}}},"exponential":{"type":"object","description":"Retry with exponential backoff (delay doubles each time)","properties":{"attempts":{"type":"integer","description":"Number of retry attempts"},"multiplier":{"type":"integer","description":"Multiplier for exponential backoff"},"seconds":{"type":"integer","minimum":1,"description":"Initial delay in seconds"},"random_factor":{"type":"integer","minimum":0,"maximum":100,"description":"Random jitter percentage (0-100) to avoid thundering herd"}}},"retry_if":{"$ref":"#/components/schemas/RetryIf"}}},"FlowNote":{"type":"object","description":"A sticky note attached to a flow for documentation and annotation","properties":{"id":{"type":"string","description":"Unique identifier for the note"},"text":{"type":"string","description":"Content of the note"},"position":{"type":"object","description":"Position of the note in the flow editor","properties":{"x":{"type":"number","description":"X coordinate"},"y":{"type":"number","description":"Y coordinate"}},"required":["x","y"]},"size":{"type":"object","description":"Size of the note in the flow editor","properties":{"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"}},"required":["width","height"]},"color":{"type":"string","description":"Color of the note (e.g., \\"yellow\\", \\"#ffff00\\")"},"type":{"type":"string","enum":["free","group"],"description":"Type of note - 'free' for standalone notes, 'group' for notes that group other nodes"},"locked":{"type":"boolean","default":false,"description":"Whether the note is locked and cannot be edited or moved"},"contained_node_ids":{"type":"array","items":{"type":"string"},"description":"For group notes, the IDs of nodes contained within this group"}},"required":["id","text","color","type"]},"FlowGroup":{"type":"object","description":"A semantic group of flow modules for organizational purposes. Does not affect execution \\u2014 modules remain in their original position in the flow. Groups provide naming and collapsibility in the editor. Members are computed dynamically from all nodes on paths between start_id and end_id.","properties":{"summary":{"type":"string","description":"Display name for this group"},"note":{"type":"string","description":"Markdown note shown below the group header"},"autocollapse":{"type":"boolean","default":false,"description":"If true, this group is collapsed by default in the flow editor. UI hint only."},"start_id":{"type":"string","description":"ID of the first flow module in this group (topological entry point)"},"end_id":{"type":"string","description":"ID of the last flow module in this group (topological exit point)"},"color":{"type":"string","description":"Color for the group in the flow editor"}},"required":["start_id","end_id"]},"RetryIf":{"type":"object","description":"Conditional retry based on error or result","properties":{"expr":{"type":"string","description":"JavaScript expression that returns true to retry. Has access to 'result' and 'error' variables"}},"required":["expr"]},"StopAfterIf":{"type":"object","description":"Early termination condition for a module","properties":{"skip_if_stopped":{"type":"boolean","description":"If true, following steps are skipped when this condition triggers"},"expr":{"type":"string","description":"JavaScript expression evaluated after the module runs. Can use 'result' (step's result) or 'flow_input'. Return true to stop"},"error_message":{"type":"string","nullable":true,"description":"Custom error message when stopping with an error. Mutually exclusive with skip_if_stopped. If set to a non-empty string, the flow stops with this error. If empty string, a default error message is used. If null or omitted, no error is raised."},"error_include_result":{"type":"boolean","description":"When stopping with an error (error_message set), embed the stopping step's own result inside the raised error object (as error.result) instead of discarding it. The top-level result stays { error }. Defaults to false."}},"required":["expr"]},"FlowModule":{"type":"object","description":"A single step in a flow. Can be a script, subflow, loop, or branch","properties":{"id":{"type":"string","description":"Unique identifier for this step. Used to reference results via 'results.step_id'. Must be a valid identifier (alphanumeric, underscore, hyphen)"},"value":{"$ref":"#/components/schemas/FlowModuleValue"},"stop_after_if":{"description":"Early termination condition evaluated after this step completes","$ref":"#/components/schemas/StopAfterIf"},"stop_after_all_iters_if":{"description":"For loops only - early termination condition evaluated after all iterations complete","$ref":"#/components/schemas/StopAfterIf"},"skip_if":{"type":"object","description":"Conditionally skip this step based on previous results or flow inputs","properties":{"expr":{"type":"string","description":"JavaScript expression that returns true to skip. Can use 'flow_input' or 'results.<step_id>'"}},"required":["expr"]},"sleep":{"description":"Delay before executing this step (in seconds or as expression)","$ref":"#/components/schemas/InputTransform"},"cache_ttl":{"type":"number","description":"Cache duration in seconds for this step's results"},"cache_ignore_s3_path":{"type":"boolean"},"timeout":{"description":"Maximum execution time in seconds (static value or expression)","$ref":"#/components/schemas/InputTransform"},"delete_after_secs":{"type":"integer","description":"If set, delete the step's args, result and logs after this many seconds following job completion"},"summary":{"type":"string","description":"Short description of what this step does"},"mock":{"type":"object","description":"Mock configuration for testing without executing the actual step","properties":{"enabled":{"type":"boolean","description":"If true, return mock value instead of executing"},"return_value":{"description":"Value to return when mocked"}}},"suspend":{"type":"object","description":"Configuration for approval/resume steps that wait for user input","properties":{"required_events":{"type":"integer","description":"Number of approvals required before continuing"},"timeout":{"type":"integer","description":"Timeout in seconds before auto-continuing or canceling"},"resume_form":{"type":"object","description":"Form schema for collecting input when resuming","properties":{"schema":{"type":"object","description":"JSON Schema for the resume form"}}},"user_auth_required":{"type":"boolean","description":"If true, only authenticated users can approve"},"user_groups_required":{"description":"Expression or list of groups that can approve","$ref":"#/components/schemas/InputTransform"},"self_approval_disabled":{"type":"boolean","description":"If true, the user who started the flow cannot approve"},"hide_cancel":{"type":"boolean","description":"If true, hide the cancel button on the approval form"},"continue_on_disapprove_timeout":{"type":"boolean","description":"If true, continue flow on timeout instead of canceling"}}},"priority":{"type":"number","description":"Execution priority for this step (higher numbers run first)"},"continue_on_error":{"type":"boolean","description":"If true, flow continues even if this step fails"},"retry":{"description":"Retry configuration if this step fails","$ref":"#/components/schemas/Retry"},"debouncing":{"description":"Debounce configuration for this step (EE only)","type":"object","properties":{"debounce_delay_s":{"type":"integer","description":"Delay in seconds to debounce this step's executions across flow runs"},"debounce_key":{"type":"string","description":"Expression to group debounced executions. Supports $workspace and $args[name]. Default: $workspace/flow/<flow_path>-<step_id>"},"debounce_args_to_accumulate":{"type":"array","description":"Array-type arguments to accumulate across debounced executions","items":{"type":"string"}},"max_total_debouncing_time":{"type":"integer","description":"Maximum total time in seconds before forced execution"},"max_total_debounces_amount":{"type":"integer","description":"Maximum number of debounces before forced execution"}}}},"required":["value","id"]},"InputTransform":{"description":"Maps input parameters for a step. Can be a static value or a JavaScript expression that references previous results or flow inputs","oneOf":[{"$ref":"#/components/schemas/StaticTransform"},{"$ref":"#/components/schemas/JavascriptTransform"},{"$ref":"#/components/schemas/AiTransform"}],"discriminator":{"propertyName":"type","mapping":{"static":"#/components/schemas/StaticTransform","javascript":"#/components/schemas/JavascriptTransform","ai":"#/components/schemas/AiTransform"}}},"StaticTransform":{"type":"object","description":"Static value passed directly to the step. Use for hardcoded values or resource references like '$res:path/to/resource'","properties":{"value":{"description":"The static value. For resources, use format '$res:path/to/resource'"},"type":{"type":"string","enum":["static"]}},"required":["type"]},"JavascriptTransform":{"type":"object","description":"JavaScript expression evaluated at runtime. Can reference previous step results via 'results.step_id' or flow inputs via 'flow_input.property'. Inside loops, use 'flow_input.iter.value' for the current iteration value","properties":{"expr":{"type":"string","description":"JavaScript expression returning the value. Available variables - results (object with all previous step results), flow_input (flow inputs), flow_input.iter (in loops)"},"type":{"type":"string","enum":["javascript"]}},"required":["expr","type"]},"AiTransform":{"type":"object","description":"Value resolved by the AI runtime for this input. The AI engine decides how to satisfy the parameter.","properties":{"type":{"type":"string","enum":["ai"]}},"required":["type"]},"AIProviderKind":{"type":"string","description":"Supported AI provider types","enum":["openai","azure_openai","azure_foundry","anthropic","mistral","deepseek","googleai","groq","openrouter","togetherai","customai","aws_bedrock"]},"ProviderConfig":{"type":"object","description":"Complete AI provider configuration with resource reference and model selection","properties":{"kind":{"$ref":"#/components/schemas/AIProviderKind"},"resource":{"type":"string","description":"Resource reference in format '$res:{resource_path}' pointing to provider credentials"},"model":{"type":"string","description":"Model identifier (e.g., 'gpt-4', 'claude-3-opus-20240229', 'gemini-pro')"}},"required":["kind","resource","model"]},"StaticProviderTransform":{"type":"object","description":"Static provider configuration passed directly to the AI agent","properties":{"value":{"$ref":"#/components/schemas/ProviderConfig"},"type":{"type":"string","enum":["static"]}},"required":["type","value"]},"ProviderTransform":{"description":"Provider configuration - can be static (ProviderConfig), JavaScript expression, or AI-determined","oneOf":[{"$ref":"#/components/schemas/StaticProviderTransform"},{"$ref":"#/components/schemas/JavascriptTransform"},{"$ref":"#/components/schemas/AiTransform"}],"discriminator":{"propertyName":"type","mapping":{"static":"#/components/schemas/StaticProviderTransform","javascript":"#/components/schemas/JavascriptTransform","ai":"#/components/schemas/AiTransform"}}},"MemoryOff":{"type":"object","description":"No conversation memory/context","properties":{"kind":{"type":"string","enum":["off"]}},"required":["kind"]},"MemoryAuto":{"type":"object","description":"Automatic context management","properties":{"kind":{"type":"string","enum":["auto"]},"context_length":{"type":"integer","description":"Maximum number of messages to retain in context"},"memory_id":{"type":"string","description":"Identifier for persistent memory across agent invocations"}},"required":["kind"]},"MemoryMessage":{"type":"object","description":"A single message in conversation history","properties":{"role":{"type":"string","enum":["user","assistant","system"]},"content":{"type":"string"}},"required":["role","content"]},"MemoryManual":{"type":"object","description":"Explicit message history","properties":{"kind":{"type":"string","enum":["manual"]},"messages":{"type":"array","items":{"$ref":"#/components/schemas/MemoryMessage"}}},"required":["kind","messages"]},"MemoryConfig":{"description":"Conversation memory configuration","oneOf":[{"$ref":"#/components/schemas/MemoryOff"},{"$ref":"#/components/schemas/MemoryAuto"},{"$ref":"#/components/schemas/MemoryManual"}],"discriminator":{"propertyName":"kind","mapping":{"off":"#/components/schemas/MemoryOff","auto":"#/components/schemas/MemoryAuto","manual":"#/components/schemas/MemoryManual"}}},"StaticMemoryTransform":{"type":"object","description":"Static memory configuration passed directly to the AI agent","properties":{"value":{"$ref":"#/components/schemas/MemoryConfig"},"type":{"type":"string","enum":["static"]}},"required":["type","value"]},"MemoryTransform":{"description":"Memory configuration - can be static (MemoryConfig), JavaScript expression, or AI-determined","oneOf":[{"$ref":"#/components/schemas/StaticMemoryTransform"},{"$ref":"#/components/schemas/JavascriptTransform"},{"$ref":"#/components/schemas/AiTransform"}],"discriminator":{"propertyName":"type","mapping":{"static":"#/components/schemas/StaticMemoryTransform","javascript":"#/components/schemas/JavascriptTransform","ai":"#/components/schemas/AiTransform"}}},"FlowModuleValue":{"description":"The actual implementation of a flow step. Can be a script (inline or referenced), subflow, loop, branch, or special module type","oneOf":[{"$ref":"#/components/schemas/RawScript"},{"$ref":"#/components/schemas/PathScript"},{"$ref":"#/components/schemas/PathFlow"},{"$ref":"#/components/schemas/ForloopFlow"},{"$ref":"#/components/schemas/WhileloopFlow"},{"$ref":"#/components/schemas/BranchOne"},{"$ref":"#/components/schemas/BranchAll"},{"$ref":"#/components/schemas/Identity"},{"$ref":"#/components/schemas/AiAgent"}],"discriminator":{"propertyName":"type","mapping":{"rawscript":"#/components/schemas/RawScript","script":"#/components/schemas/PathScript","flow":"#/components/schemas/PathFlow","forloopflow":"#/components/schemas/ForloopFlow","whileloopflow":"#/components/schemas/WhileloopFlow","branchone":"#/components/schemas/BranchOne","branchall":"#/components/schemas/BranchAll","identity":"#/components/schemas/Identity","aiagent":"#/components/schemas/AiAgent"}}},"RawScript":{"type":"object","description":"Inline script with code defined directly in the flow. Use 'bun' as default language if unspecified. The script receives arguments from input_transforms","properties":{"input_transforms":{"type":"object","description":"Map of parameter names to their values (static or JavaScript expressions). These become the script's input arguments","additionalProperties":{"$ref":"#/components/schemas/InputTransform"}},"content":{"type":"string","description":"The script source code. Should export a 'main' function"},"language":{"type":"string","description":"Programming language for this script","enum":["deno","bun","python3","go","bash","powershell","postgresql","mysql","bigquery","snowflake","mssql","oracledb","graphql","nativets","php","rust","ansible","csharp","nu","java","ruby","rlang","duckdb"]},"path":{"type":"string","description":"Optional path for saving this script"},"lock":{"type":"string","description":"Lock file content for dependencies"},"type":{"type":"string","enum":["rawscript"]},"tag":{"type":"string","description":"Worker group tag for execution routing"},"concurrent_limit":{"type":"number","description":"Maximum concurrent executions of this script"},"concurrency_time_window_s":{"type":"number","description":"Time window for concurrent_limit"},"custom_concurrency_key":{"type":"string","description":"Custom key for grouping concurrent executions"},"is_trigger":{"type":"boolean","description":"If true, this script is a trigger that can start the flow"},"assets":{"type":"array","description":"External resources this script accesses (S3 objects, resources, etc.)","items":{"type":"object","required":["path","kind"],"properties":{"path":{"type":"string","description":"Path to the asset"},"kind":{"type":"string","description":"Type of asset","enum":["s3object","resource","ducklake","datatable","volume"]},"access_type":{"type":"string","nullable":true,"description":"Access level for this asset","enum":["r","w","rw"]},"alt_access_type":{"type":"string","nullable":true,"description":"Alternative access level","enum":["r","w","rw"]}}}}},"required":["type","content","language","input_transforms"]},"PathScript":{"type":"object","description":"Reference to an existing script by path. Use this when calling a previously saved script instead of writing inline code","properties":{"input_transforms":{"type":"object","description":"Map of parameter names to their values (static or JavaScript expressions). These become the script's input arguments","additionalProperties":{"$ref":"#/components/schemas/InputTransform"}},"path":{"type":"string","description":"Path to the script in the workspace (e.g., 'f/scripts/send_email')"},"hash":{"type":"string","description":"Optional specific version hash of the script to use"},"type":{"type":"string","enum":["script"]},"tag_override":{"type":"string","description":"Override the script's default worker group tag"},"is_trigger":{"type":"boolean","description":"If true, this script is a trigger that can start the flow"}},"required":["type","path","input_transforms"]},"PathFlow":{"type":"object","description":"Reference to an existing flow by path. Use this to call another flow as a subflow","properties":{"input_transforms":{"type":"object","description":"Map of parameter names to their values (static or JavaScript expressions). These become the subflow's input arguments","additionalProperties":{"$ref":"#/components/schemas/InputTransform"}},"path":{"type":"string","description":"Path to the flow in the workspace (e.g., 'f/flows/process_user')"},"type":{"type":"string","enum":["flow"]}},"required":["type","path","input_transforms"]},"ForloopFlow":{"type":"object","description":"Executes nested modules in a loop over an iterator. Inside the loop, use 'flow_input.iter.value' to access the current iteration value, and 'flow_input.iter.index' for the index. Supports parallel execution for better performance on I/O-bound operations","properties":{"modules":{"type":"array","description":"Steps to execute for each iteration. These can reference the iteration value via 'flow_input.iter.value'","items":{"$ref":"#/components/schemas/FlowModule"}},"iterator":{"description":"JavaScript expression that returns an array to iterate over. Can reference 'results.step_id' or 'flow_input'","$ref":"#/components/schemas/InputTransform"},"skip_failures":{"type":"boolean","description":"If true, iteration failures don't stop the loop. Failed iterations return null"},"type":{"type":"string","enum":["forloopflow"]},"parallel":{"type":"boolean","description":"If true, iterations run concurrently (faster for I/O-bound operations). Use with parallelism to control concurrency"},"parallelism":{"description":"Maximum number of concurrent iterations when parallel=true. Limits resource usage. Can be static number or expression","$ref":"#/components/schemas/InputTransform"},"squash":{"type":"boolean"}},"required":["modules","iterator","skip_failures","type"]},"WhileloopFlow":{"type":"object","description":"Executes nested modules repeatedly while a condition is true. The loop checks the condition after each iteration. Use stop_after_if on modules to control loop termination","properties":{"modules":{"type":"array","description":"Steps to execute in each iteration. Use stop_after_if to control when the loop ends","items":{"$ref":"#/components/schemas/FlowModule"}},"skip_failures":{"type":"boolean","description":"If true, iteration failures don't stop the loop. Failed iterations return null"},"type":{"type":"string","enum":["whileloopflow"]},"parallel":{"type":"boolean","description":"If true, iterations run concurrently (use with caution in while loops)"},"parallelism":{"description":"Maximum number of concurrent iterations when parallel=true","$ref":"#/components/schemas/InputTransform"},"squash":{"type":"boolean"}},"required":["modules","skip_failures","type"]},"BranchOne":{"type":"object","description":"Conditional branching where only the first matching branch executes. Branches are evaluated in order, and the first one with a true expression runs. If no branches match, the default branch executes","properties":{"branches":{"type":"array","description":"Array of branches to evaluate in order. The first branch with expr evaluating to true executes","items":{"type":"object","properties":{"summary":{"type":"string","description":"Short description of this branch condition"},"expr":{"type":"string","description":"JavaScript expression that returns boolean. Can use 'results.step_id' or 'flow_input'. First true expr wins"},"modules":{"type":"array","description":"Steps to execute if this branch's expr is true","items":{"$ref":"#/components/schemas/FlowModule"}}},"required":["modules","expr"]}},"default":{"type":"array","description":"Steps to execute if no branch expressions match","items":{"$ref":"#/components/schemas/FlowModule"}},"type":{"type":"string","enum":["branchone"]}},"required":["branches","default","type"]},"BranchAll":{"type":"object","description":"Parallel branching where all branches execute simultaneously. Unlike BranchOne, all branches run regardless of conditions. Useful for executing independent tasks concurrently","properties":{"branches":{"type":"array","description":"Array of branches that all execute (either in parallel or sequentially)","items":{"type":"object","properties":{"summary":{"type":"string","description":"Short description of this branch's purpose"},"skip_failure":{"type":"boolean","description":"If true, failure in this branch doesn't fail the entire flow"},"modules":{"type":"array","description":"Steps to execute in this branch","items":{"$ref":"#/components/schemas/FlowModule"}}},"required":["modules"]}},"type":{"type":"string","enum":["branchall"]},"parallel":{"type":"boolean","description":"If true, all branches execute concurrently. If false, they execute sequentially"}},"required":["branches","type"]},"AgentTool":{"type":"object","description":"A tool available to an AI agent. Can be a flow module or an external MCP (Model Context Protocol) tool","properties":{"id":{"type":"string","description":"Unique identifier for this tool. Cannot contain spaces - use underscores instead (e.g., 'get_user_data' not 'get user data')"},"summary":{"type":"string","description":"Short description of what this tool does (shown to the AI)"},"value":{"$ref":"#/components/schemas/ToolValue"}},"required":["id","value"]},"ToolValue":{"description":"The implementation of a tool. Can be a flow module (script/flow) or an MCP tool reference","oneOf":[{"$ref":"#/components/schemas/FlowModuleTool"},{"$ref":"#/components/schemas/McpToolValue"},{"$ref":"#/components/schemas/WebsearchToolValue"}],"discriminator":{"propertyName":"tool_type","mapping":{"flowmodule":"#/components/schemas/FlowModuleTool","mcp":"#/components/schemas/McpToolValue","websearch":"#/components/schemas/WebsearchToolValue"}}},"FlowModuleTool":{"description":"A tool implemented as a flow module (script, flow, etc.). The AI can call this like any other flow module","allOf":[{"type":"object","properties":{"tool_type":{"type":"string","enum":["flowmodule"]}},"required":["tool_type"]},{"$ref":"#/components/schemas/FlowModuleValue"}]},"WebsearchToolValue":{"type":"object","description":"A tool implemented as a websearch tool. The AI can call this like any other websearch tool","properties":{"tool_type":{"type":"string","enum":["websearch"]}},"required":["tool_type"]},"McpToolValue":{"type":"object","description":"Reference to an external MCP (Model Context Protocol) tool. The AI can call tools from MCP servers","properties":{"tool_type":{"type":"string","enum":["mcp"]},"resource_path":{"type":"string","description":"Path to the MCP resource/server configuration"},"include_tools":{"type":"array","description":"Whitelist of specific tools to include from this MCP server","items":{"type":"string"}},"exclude_tools":{"type":"array","description":"Blacklist of tools to exclude from this MCP server","items":{"type":"string"}}},"required":["tool_type","resource_path"]},"AiAgent":{"type":"object","description":"AI agent step that can use tools to accomplish tasks. The agent receives inputs and can call any of its configured tools to complete the task","properties":{"input_transforms":{"type":"object","description":"Input parameters for the AI agent mapped to their values","properties":{"provider":{"$ref":"#/components/schemas/ProviderTransform"},"output_type":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"Output format type.\\nValid values: 'text' (default) - plain text response, 'image' - image generation\\n"},"user_message":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"The user's prompt/message to the AI agent. Supports variable interpolation with flow.input syntax."},"system_prompt":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"System instructions that guide the AI's behavior, persona, and response style. Optional."},"streaming":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"Boolean. If true, stream the AI response incrementally.\\nStreaming events include: token_delta, tool_call, tool_call_arguments, tool_execution, tool_result\\n"},"memory":{"$ref":"#/components/schemas/MemoryTransform"},"output_schema":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"JSON Schema object defining structured output format. Used when you need the AI to return data in a specific shape.\\nSupports standard JSON Schema properties: type, properties, required, items, enum, pattern, minLength, maxLength, minimum, maximum, etc.\\nExample: { type: 'object', properties: { name: { type: 'string' }, age: { type: 'integer' } }, required: ['name'] }\\n"},"user_attachments":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"Array of file references (images or PDFs) for the AI agent.\\nFormat: Array<{ bucket: string, key: string }> - S3 object references\\nExample: [{ bucket: 'my-bucket', key: 'documents/report.pdf' }]\\n"},"max_completion_tokens":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"Integer. Maximum number of tokens the AI will generate in its response.\\nRange: 1 to 4,294,967,295. Typical values: 256-4096 for most use cases.\\n"},"temperature":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"Float. Controls randomness/creativity of responses.\\nRange: 0.0 to 2.0 (provider-dependent)\\n- 0.0 = deterministic, focused responses\\n- 0.7 = balanced (common default)\\n- 1.0+ = more creative/random\\n"},"max_iterations":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"Number. Limits how many times the agent can loop through reasoning and tool use.\\nRange: 1-1000.\\n"}},"required":["provider","user_message","output_type"]},"tools":{"type":"array","description":"Array of tools the agent can use. The agent decides which tools to call based on the task","items":{"$ref":"#/components/schemas/AgentTool"}},"type":{"type":"string","enum":["aiagent"]},"tag":{"type":"string","description":"Worker group tag for execution routing. If not set, the AI agent step runs on the flow's tag (default \`flow\`)"},"omit_output_from_conversation":{"type":"boolean","default":false,"description":"If true, this AI agent step does not persist its assistant or tool messages to the flow conversation when chat mode is enabled."},"parallel":{"type":"boolean","description":"If true, the agent can execute multiple tool calls in parallel"}},"required":["tools","type","input_transforms"]},"Identity":{"type":"object","description":"Pass-through module that returns its input unchanged. Useful for flow structure or as a placeholder","properties":{"type":{"type":"string","enum":["identity"]},"flow":{"type":"boolean","description":"If true, marks this as a flow identity (special handling)"}},"required":["type"]},"FlowStatus":{"type":"object","properties":{"step":{"type":"integer"},"modules":{"type":"array","items":{"$ref":"#/components/schemas/FlowStatusModule"}},"user_states":{"additionalProperties":true},"preprocessor_module":{"allOf":[{"$ref":"#/components/schemas/FlowStatusModule"}]},"failure_module":{"allOf":[{"$ref":"#/components/schemas/FlowStatusModule"},{"type":"object","properties":{"parent_module":{"type":"string"}}}]},"retry":{"type":"object","properties":{"fail_count":{"type":"integer"},"failed_jobs":{"type":"array","items":{"type":"string","format":"uuid"}}}}},"required":["step","modules","failure_module"]},"FlowStatusModule":{"type":"object","properties":{"type":{"type":"string","enum":["WaitingForPriorSteps","WaitingForEvents","WaitingForExecutor","InProgress","Success","Failure"]},"id":{"type":"string"},"job":{"type":"string","format":"uuid"},"count":{"type":"integer"},"progress":{"type":"integer"},"iterator":{"type":"object","properties":{"index":{"type":"integer"},"itered":{"type":"array","items":{}},"itered_len":{"type":"integer"},"args":{}}},"flow_jobs":{"type":"array","items":{"type":"string"}},"flow_jobs_success":{"type":"array","items":{"type":"boolean"}},"flow_jobs_duration":{"type":"object","properties":{"started_at":{"type":"array","items":{"type":"string"}},"duration_ms":{"type":"array","items":{"type":"integer"}}}},"branch_chosen":{"type":"object","properties":{"type":{"type":"string","enum":["branch","default"]},"branch":{"type":"integer"}},"required":["type"]},"branchall":{"type":"object","properties":{"branch":{"type":"integer"},"len":{"type":"integer"}},"required":["branch","len"]},"approvers":{"type":"array","items":{"type":"object","properties":{"resume_id":{"type":"integer"},"approver":{"type":"string"}},"required":["resume_id","approver"]}},"failed_retries":{"type":"array","items":{"type":"string","format":"uuid"}},"skipped":{"type":"boolean"},"agent_actions":{"type":"array","items":{"type":"object","oneOf":[{"type":"object","properties":{"job_id":{"type":"string","format":"uuid"},"function_name":{"type":"string"},"type":{"type":"string","enum":["tool_call"]},"module_id":{"type":"string"}},"required":["job_id","function_name","type","module_id"]},{"type":"object","properties":{"call_id":{"type":"string","format":"uuid"},"function_name":{"type":"string"},"resource_path":{"type":"string"},"type":{"type":"string","enum":["mcp_tool_call"]},"arguments":{"type":"object"}},"required":["call_id","function_name","resource_path","type"]},{"type":"object","properties":{"type":{"type":"string","enum":["web_search"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["message"]}},"required":["content","type"]}]}},"agent_actions_success":{"type":"array","items":{"type":"boolean"}}},"required":["type"]}}`,
|
|
85155
|
+
{"OpenFlow":{"type":"object","description":"Top-level flow definition containing metadata, configuration, and the flow structure","properties":{"summary":{"type":"string","description":"Short description of what this flow does"},"description":{"type":"string","description":"Detailed documentation for this flow"},"value":{"$ref":"#/components/schemas/FlowValue"},"schema":{"type":"object","description":"JSON Schema for flow inputs. Use this to define input parameters, their types, defaults, and validation. For resource inputs, set type to 'object' and format to 'resource-<type>' (e.g., 'resource-stripe')"},"on_behalf_of_email":{"type":"string","description":"The flow will be run with the permissions of the user with this email."}},"required":["summary","value"]},"FlowValue":{"type":"object","description":"The flow structure containing modules and optional preprocessor/failure handlers","properties":{"modules":{"type":"array","description":"Array of steps that execute in sequence. Each step can be a script, subflow, loop, or branch","items":{"$ref":"#/components/schemas/FlowModule"}},"failure_module":{"description":"Special module that executes when the flow fails. Receives error object with message, name, stack, and step_id. Must have id 'failure'. Only supports script/rawscript types","$ref":"#/components/schemas/FlowModule"},"preprocessor_module":{"description":"Special module that runs before the first step on external triggers. Must have id 'preprocessor'. Only supports script/rawscript types. Cannot reference other step results","$ref":"#/components/schemas/FlowModule"},"same_worker":{"type":"boolean","description":"If true, all steps run on the same worker for better performance"},"preserve_step_tags":{"type":"boolean","description":"If true and the flow runs on a custom worker tag, steps that declare their own non-empty tag run on it instead of inheriting the flow tag. Steps without their own tag still inherit the flow tag."},"concurrent_limit":{"type":"number","description":"Maximum number of concurrent executions of this flow"},"concurrency_key":{"type":"string","description":"Expression to group concurrent executions (e.g., by user ID)"},"concurrency_time_window_s":{"type":"number","description":"Time window in seconds for concurrent_limit"},"debounce_delay_s":{"type":"integer","description":"Delay in seconds to debounce flow executions"},"debounce_key":{"type":"string","description":"Expression to group debounced executions"},"debounce_args_to_accumulate":{"type":"array","description":"Arguments to accumulate across debounced executions","items":{"type":"string"}},"max_total_debouncing_time":{"type":"integer","description":"Maximum total time in seconds that a job can be debounced"},"max_total_debounces_amount":{"type":"integer","description":"Maximum number of times a job can be debounced"},"skip_expr":{"type":"string","description":"JavaScript expression to conditionally skip the entire flow"},"cache_ttl":{"type":"number","description":"Cache duration in seconds for flow results"},"cache_ignore_s3_path":{"type":"boolean"},"delete_after_secs":{"type":"integer","description":"If set, delete the flow job's args, result and logs after this many seconds following job completion"},"flow_env":{"type":"object","description":"Environment variables available to all steps. Values can be strings, JSON values, or special references: '$var:path' (workspace variable) or '$res:path' (resource).","additionalProperties":{}},"priority":{"type":"number","description":"Execution priority (higher numbers run first)"},"early_return":{"type":"string","description":"JavaScript expression to return early from the flow"},"chat_input_enabled":{"type":"boolean","description":"Whether this flow accepts chat-style input"},"notes":{"type":"array","description":"Sticky notes attached to the flow","items":{"$ref":"#/components/schemas/FlowNote"}},"groups":{"type":"array","description":"Semantic groups of modules for organizational purposes","items":{"$ref":"#/components/schemas/FlowGroup"}}},"required":["modules"]},"Retry":{"type":"object","description":"Retry configuration for failed module executions","properties":{"constant":{"type":"object","description":"Retry with constant delay between attempts","properties":{"attempts":{"type":"integer","description":"Number of retry attempts"},"seconds":{"type":"integer","description":"Seconds to wait between retries"}}},"exponential":{"type":"object","description":"Retry with exponential backoff (delay doubles each time)","properties":{"attempts":{"type":"integer","description":"Number of retry attempts"},"multiplier":{"type":"integer","description":"Multiplier for exponential backoff"},"seconds":{"type":"integer","minimum":1,"description":"Initial delay in seconds"},"random_factor":{"type":"integer","minimum":0,"maximum":100,"description":"Random jitter percentage (0-100) to avoid thundering herd"}}},"retry_if":{"$ref":"#/components/schemas/RetryIf"}}},"FlowNote":{"type":"object","description":"A sticky note attached to a flow for documentation and annotation","properties":{"id":{"type":"string","description":"Unique identifier for the note"},"text":{"type":"string","description":"Content of the note"},"position":{"type":"object","description":"Position of the note in the flow editor","properties":{"x":{"type":"number","description":"X coordinate"},"y":{"type":"number","description":"Y coordinate"}},"required":["x","y"]},"size":{"type":"object","description":"Size of the note in the flow editor","properties":{"width":{"type":"number","description":"Width in pixels"},"height":{"type":"number","description":"Height in pixels"}},"required":["width","height"]},"color":{"type":"string","description":"Color of the note (e.g., \\"yellow\\", \\"#ffff00\\")"},"type":{"type":"string","enum":["free","group"],"description":"Type of note - 'free' for standalone notes, 'group' for notes that group other nodes"},"locked":{"type":"boolean","default":false,"description":"Whether the note is locked and cannot be edited or moved"},"contained_node_ids":{"type":"array","items":{"type":"string"},"description":"For group notes, the IDs of nodes contained within this group"}},"required":["id","text","color","type"]},"FlowGroup":{"type":"object","description":"A semantic group of flow modules for organizational purposes. Does not affect execution \\u2014 modules remain in their original position in the flow. Groups provide naming and collapsibility in the editor. Members are computed dynamically from all nodes on paths between start_id and end_id.","properties":{"summary":{"type":"string","description":"Display name for this group"},"note":{"type":"string","description":"Markdown note shown below the group header"},"autocollapse":{"type":"boolean","default":false,"description":"If true, this group is collapsed by default in the flow editor. UI hint only."},"start_id":{"type":"string","description":"ID of the first flow module in this group (topological entry point)"},"end_id":{"type":"string","description":"ID of the last flow module in this group (topological exit point)"},"color":{"type":"string","description":"Color for the group in the flow editor"}},"required":["start_id","end_id"]},"RetryIf":{"type":"object","description":"Conditional retry based on error or result","properties":{"expr":{"type":"string","description":"JavaScript expression that returns true to retry. Has access to 'result' and 'error' variables"}},"required":["expr"]},"StopAfterIf":{"type":"object","description":"Early termination condition for a module","properties":{"skip_if_stopped":{"type":"boolean","description":"If true, following steps are skipped when this condition triggers"},"expr":{"type":"string","description":"JavaScript expression evaluated after the module runs. Can use 'result' (step's result) or 'flow_input'. Return true to stop"},"error_message":{"type":"string","nullable":true,"description":"Custom error message when stopping with an error. Mutually exclusive with skip_if_stopped. If set to a non-empty string, the flow stops with this error. If empty string, a default error message is used. If null or omitted, no error is raised."},"error_include_result":{"type":"boolean","description":"When stopping with an error (error_message set), embed the stopping step's own result inside the raised error object (as error.result) instead of discarding it. The top-level result stays { error }. Defaults to false."}},"required":["expr"]},"FlowModule":{"type":"object","description":"A single step in a flow. Can be a script, subflow, loop, or branch","properties":{"id":{"type":"string","description":"Unique identifier for this step. Used to reference results via 'results.step_id'. Must be a valid identifier (alphanumeric, underscore, hyphen)"},"value":{"$ref":"#/components/schemas/FlowModuleValue"},"stop_after_if":{"description":"Early termination condition evaluated after this step completes","$ref":"#/components/schemas/StopAfterIf"},"stop_after_all_iters_if":{"description":"For loops only - early termination condition evaluated after all iterations complete","$ref":"#/components/schemas/StopAfterIf"},"skip_if":{"type":"object","description":"Conditionally skip this step based on previous results or flow inputs","properties":{"expr":{"type":"string","description":"JavaScript expression that returns true to skip. Can use 'flow_input' or 'results.<step_id>'"}},"required":["expr"]},"sleep":{"description":"Delay before executing this step (in seconds or as expression)","$ref":"#/components/schemas/InputTransform"},"cache_ttl":{"type":"number","description":"Cache duration in seconds for this step's results"},"cache_ignore_s3_path":{"type":"boolean"},"timeout":{"description":"Maximum execution time in seconds (static value or expression)","$ref":"#/components/schemas/InputTransform"},"delete_after_secs":{"type":"integer","description":"If set, delete the step's args, result and logs after this many seconds following job completion"},"summary":{"type":"string","description":"Short description of what this step does"},"mock":{"type":"object","description":"Mock configuration for testing without executing the actual step","properties":{"enabled":{"type":"boolean","description":"If true, return mock value instead of executing"},"return_value":{"description":"Value to return when mocked"}}},"suspend":{"type":"object","description":"Configuration for approval/resume steps that wait for user input","properties":{"required_events":{"type":"integer","description":"Number of approvals required before continuing"},"timeout":{"type":"integer","description":"Timeout in seconds before auto-continuing or canceling"},"resume_form":{"type":"object","description":"Form schema for collecting input when resuming","properties":{"schema":{"type":"object","description":"JSON Schema for the resume form"}}},"user_auth_required":{"type":"boolean","description":"If true, only authenticated users can approve"},"user_groups_required":{"description":"Expression or list of groups that can approve","$ref":"#/components/schemas/InputTransform"},"self_approval_disabled":{"type":"boolean","description":"If true, the user who started the flow cannot approve"},"hide_cancel":{"type":"boolean","description":"If true, hide the cancel button on the approval form"},"continue_on_disapprove_timeout":{"type":"boolean","description":"If true, continue flow on timeout instead of canceling"}}},"priority":{"type":"number","description":"Execution priority for this step (higher numbers run first)"},"continue_on_error":{"type":"boolean","description":"If true, flow continues even if this step fails"},"retry":{"description":"Retry configuration if this step fails","$ref":"#/components/schemas/Retry"},"debouncing":{"description":"Debounce configuration for this step (EE only)","type":"object","properties":{"debounce_delay_s":{"type":"integer","description":"Delay in seconds to debounce this step's executions across flow runs"},"debounce_key":{"type":"string","description":"Expression to group debounced executions. Supports $workspace and $args[name]. Default: $workspace/flow/<flow_path>-<step_id>"},"debounce_args_to_accumulate":{"type":"array","description":"Array-type arguments to accumulate across debounced executions","items":{"type":"string"}},"max_total_debouncing_time":{"type":"integer","description":"Maximum total time in seconds before forced execution"},"max_total_debounces_amount":{"type":"integer","description":"Maximum number of debounces before forced execution"}}}},"required":["value","id"]},"InputTransform":{"description":"Maps input parameters for a step. Can be a static value or a JavaScript expression that references previous results or flow inputs","oneOf":[{"$ref":"#/components/schemas/StaticTransform"},{"$ref":"#/components/schemas/JavascriptTransform"},{"$ref":"#/components/schemas/AiTransform"}],"discriminator":{"propertyName":"type","mapping":{"static":"#/components/schemas/StaticTransform","javascript":"#/components/schemas/JavascriptTransform","ai":"#/components/schemas/AiTransform"}}},"StaticTransform":{"type":"object","description":"Static value passed directly to the step. Use for hardcoded values or resource references like '$res:path/to/resource'","properties":{"value":{"description":"The static value. For resources, use format '$res:path/to/resource'"},"type":{"type":"string","enum":["static"]}},"required":["type"]},"JavascriptTransform":{"type":"object","description":"JavaScript expression evaluated at runtime. Can reference previous step results via 'results.step_id' or flow inputs via 'flow_input.property'. Inside loops, use 'flow_input.iter.value' for the current iteration value","properties":{"expr":{"type":"string","description":"JavaScript expression returning the value. Available variables - results (object with all previous step results), flow_input (flow inputs), flow_input.iter (in loops)"},"type":{"type":"string","enum":["javascript"]}},"required":["expr","type"]},"AiTransform":{"type":"object","description":"Value resolved by the AI runtime for this input. The AI engine decides how to satisfy the parameter.","properties":{"type":{"type":"string","enum":["ai"]}},"required":["type"]},"AIProviderKind":{"type":"string","description":"Supported AI provider types","enum":["openai","azure_openai","azure_foundry","anthropic","mistral","deepseek","googleai","groq","openrouter","togetherai","customai","aws_bedrock"]},"ProviderConfig":{"type":"object","description":"Complete AI provider configuration with resource reference and model selection","properties":{"kind":{"$ref":"#/components/schemas/AIProviderKind"},"resource":{"type":"string","description":"Resource reference in format '$res:{resource_path}' pointing to provider credentials"},"model":{"type":"string","description":"Model identifier (e.g., 'gpt-4', 'claude-3-opus-20240229', 'gemini-pro')"},"reasoning_effort":{"type":"string","description":"Provider-native reasoning effort token (e.g. 'low', 'high', 'none') for models that support extended thinking. Optional; unset leaves the provider default."}},"required":["kind","resource","model"]},"StaticProviderTransform":{"type":"object","description":"Static provider configuration passed directly to the AI agent","properties":{"value":{"$ref":"#/components/schemas/ProviderConfig"},"type":{"type":"string","enum":["static"]}},"required":["type","value"]},"ProviderTransform":{"description":"Provider configuration - can be static (ProviderConfig), JavaScript expression, or AI-determined","oneOf":[{"$ref":"#/components/schemas/StaticProviderTransform"},{"$ref":"#/components/schemas/JavascriptTransform"},{"$ref":"#/components/schemas/AiTransform"}],"discriminator":{"propertyName":"type","mapping":{"static":"#/components/schemas/StaticProviderTransform","javascript":"#/components/schemas/JavascriptTransform","ai":"#/components/schemas/AiTransform"}}},"MemoryOff":{"type":"object","description":"No conversation memory/context","properties":{"kind":{"type":"string","enum":["off"]}},"required":["kind"]},"MemoryAuto":{"type":"object","description":"Automatic context management","properties":{"kind":{"type":"string","enum":["auto"]},"context_length":{"type":"integer","description":"Maximum number of messages to retain in context"},"memory_id":{"type":"string","description":"Identifier for persistent memory across agent invocations"}},"required":["kind"]},"MemoryMessage":{"type":"object","description":"A single message in conversation history","properties":{"role":{"type":"string","enum":["user","assistant","system"]},"content":{"type":"string"}},"required":["role","content"]},"MemoryManual":{"type":"object","description":"Explicit message history","properties":{"kind":{"type":"string","enum":["manual"]},"messages":{"type":"array","items":{"$ref":"#/components/schemas/MemoryMessage"}}},"required":["kind","messages"]},"MemoryConfig":{"description":"Conversation memory configuration","oneOf":[{"$ref":"#/components/schemas/MemoryOff"},{"$ref":"#/components/schemas/MemoryAuto"},{"$ref":"#/components/schemas/MemoryManual"}],"discriminator":{"propertyName":"kind","mapping":{"off":"#/components/schemas/MemoryOff","auto":"#/components/schemas/MemoryAuto","manual":"#/components/schemas/MemoryManual"}}},"StaticMemoryTransform":{"type":"object","description":"Static memory configuration passed directly to the AI agent","properties":{"value":{"$ref":"#/components/schemas/MemoryConfig"},"type":{"type":"string","enum":["static"]}},"required":["type","value"]},"MemoryTransform":{"description":"Memory configuration - can be static (MemoryConfig), JavaScript expression, or AI-determined","oneOf":[{"$ref":"#/components/schemas/StaticMemoryTransform"},{"$ref":"#/components/schemas/JavascriptTransform"},{"$ref":"#/components/schemas/AiTransform"}],"discriminator":{"propertyName":"type","mapping":{"static":"#/components/schemas/StaticMemoryTransform","javascript":"#/components/schemas/JavascriptTransform","ai":"#/components/schemas/AiTransform"}}},"FlowModuleValue":{"description":"The actual implementation of a flow step. Can be a script (inline or referenced), subflow, loop, branch, or special module type","oneOf":[{"$ref":"#/components/schemas/RawScript"},{"$ref":"#/components/schemas/PathScript"},{"$ref":"#/components/schemas/PathFlow"},{"$ref":"#/components/schemas/ForloopFlow"},{"$ref":"#/components/schemas/WhileloopFlow"},{"$ref":"#/components/schemas/BranchOne"},{"$ref":"#/components/schemas/BranchAll"},{"$ref":"#/components/schemas/Identity"},{"$ref":"#/components/schemas/AiAgent"}],"discriminator":{"propertyName":"type","mapping":{"rawscript":"#/components/schemas/RawScript","script":"#/components/schemas/PathScript","flow":"#/components/schemas/PathFlow","forloopflow":"#/components/schemas/ForloopFlow","whileloopflow":"#/components/schemas/WhileloopFlow","branchone":"#/components/schemas/BranchOne","branchall":"#/components/schemas/BranchAll","identity":"#/components/schemas/Identity","aiagent":"#/components/schemas/AiAgent"}}},"RawScript":{"type":"object","description":"Inline script with code defined directly in the flow. Use 'bun' as default language if unspecified. The script receives arguments from input_transforms","properties":{"input_transforms":{"type":"object","description":"Map of parameter names to their values (static or JavaScript expressions). These become the script's input arguments","additionalProperties":{"$ref":"#/components/schemas/InputTransform"}},"content":{"type":"string","description":"The script source code. Should export a 'main' function"},"language":{"type":"string","description":"Programming language for this script","enum":["deno","bun","python3","go","bash","powershell","postgresql","mysql","bigquery","snowflake","mssql","oracledb","graphql","nativets","php","rust","ansible","csharp","nu","java","ruby","rlang","duckdb"]},"path":{"type":"string","description":"Optional path for saving this script"},"lock":{"type":"string","description":"Lock file content for dependencies"},"type":{"type":"string","enum":["rawscript"]},"tag":{"type":"string","description":"Worker group tag for execution routing"},"concurrent_limit":{"type":"number","description":"Maximum concurrent executions of this script"},"concurrency_time_window_s":{"type":"number","description":"Time window for concurrent_limit"},"custom_concurrency_key":{"type":"string","description":"Custom key for grouping concurrent executions"},"is_trigger":{"type":"boolean","description":"If true, this script is a trigger that can start the flow"},"assets":{"type":"array","description":"External resources this script accesses (S3 objects, resources, etc.)","items":{"type":"object","required":["path","kind"],"properties":{"path":{"type":"string","description":"Path to the asset"},"kind":{"type":"string","description":"Type of asset","enum":["s3object","resource","ducklake","datatable","volume"]},"access_type":{"type":"string","nullable":true,"description":"Access level for this asset","enum":["r","w","rw"]},"alt_access_type":{"type":"string","nullable":true,"description":"Alternative access level","enum":["r","w","rw"]}}}}},"required":["type","content","language","input_transforms"]},"PathScript":{"type":"object","description":"Reference to an existing script by path. Use this when calling a previously saved script instead of writing inline code","properties":{"input_transforms":{"type":"object","description":"Map of parameter names to their values (static or JavaScript expressions). These become the script's input arguments","additionalProperties":{"$ref":"#/components/schemas/InputTransform"}},"path":{"type":"string","description":"Path to the script in the workspace (e.g., 'f/scripts/send_email')"},"hash":{"type":"string","description":"Optional specific version hash of the script to use"},"type":{"type":"string","enum":["script"]},"tag_override":{"type":"string","description":"Override the script's default worker group tag"},"is_trigger":{"type":"boolean","description":"If true, this script is a trigger that can start the flow"}},"required":["type","path","input_transforms"]},"PathFlow":{"type":"object","description":"Reference to an existing flow by path. Use this to call another flow as a subflow","properties":{"input_transforms":{"type":"object","description":"Map of parameter names to their values (static or JavaScript expressions). These become the subflow's input arguments","additionalProperties":{"$ref":"#/components/schemas/InputTransform"}},"path":{"type":"string","description":"Path to the flow in the workspace (e.g., 'f/flows/process_user')"},"type":{"type":"string","enum":["flow"]}},"required":["type","path","input_transforms"]},"ForloopFlow":{"type":"object","description":"Executes nested modules in a loop over an iterator. Inside the loop, use 'flow_input.iter.value' to access the current iteration value, and 'flow_input.iter.index' for the index. Supports parallel execution for better performance on I/O-bound operations","properties":{"modules":{"type":"array","description":"Steps to execute for each iteration. These can reference the iteration value via 'flow_input.iter.value'","items":{"$ref":"#/components/schemas/FlowModule"}},"iterator":{"description":"JavaScript expression that returns an array to iterate over. Can reference 'results.step_id' or 'flow_input'","$ref":"#/components/schemas/InputTransform"},"skip_failures":{"type":"boolean","description":"If true, iteration failures don't stop the loop. Failed iterations return null"},"type":{"type":"string","enum":["forloopflow"]},"parallel":{"type":"boolean","description":"If true, iterations run concurrently (faster for I/O-bound operations). Use with parallelism to control concurrency"},"parallelism":{"description":"Maximum number of concurrent iterations when parallel=true. Limits resource usage. Can be static number or expression","$ref":"#/components/schemas/InputTransform"},"squash":{"type":"boolean"}},"required":["modules","iterator","skip_failures","type"]},"WhileloopFlow":{"type":"object","description":"Executes nested modules repeatedly while a condition is true. The loop checks the condition after each iteration. Use stop_after_if on modules to control loop termination","properties":{"modules":{"type":"array","description":"Steps to execute in each iteration. Use stop_after_if to control when the loop ends","items":{"$ref":"#/components/schemas/FlowModule"}},"skip_failures":{"type":"boolean","description":"If true, iteration failures don't stop the loop. Failed iterations return null"},"type":{"type":"string","enum":["whileloopflow"]},"parallel":{"type":"boolean","description":"If true, iterations run concurrently (use with caution in while loops)"},"parallelism":{"description":"Maximum number of concurrent iterations when parallel=true","$ref":"#/components/schemas/InputTransform"},"squash":{"type":"boolean"}},"required":["modules","skip_failures","type"]},"BranchOne":{"type":"object","description":"Conditional branching where only the first matching branch executes. Branches are evaluated in order, and the first one with a true expression runs. If no branches match, the default branch executes","properties":{"branches":{"type":"array","description":"Array of branches to evaluate in order. The first branch with expr evaluating to true executes","items":{"type":"object","properties":{"summary":{"type":"string","description":"Short description of this branch condition"},"expr":{"type":"string","description":"JavaScript expression that returns boolean. Can use 'results.step_id' or 'flow_input'. First true expr wins"},"modules":{"type":"array","description":"Steps to execute if this branch's expr is true","items":{"$ref":"#/components/schemas/FlowModule"}}},"required":["modules","expr"]}},"default":{"type":"array","description":"Steps to execute if no branch expressions match","items":{"$ref":"#/components/schemas/FlowModule"}},"type":{"type":"string","enum":["branchone"]}},"required":["branches","default","type"]},"BranchAll":{"type":"object","description":"Parallel branching where all branches execute simultaneously. Unlike BranchOne, all branches run regardless of conditions. Useful for executing independent tasks concurrently","properties":{"branches":{"type":"array","description":"Array of branches that all execute (either in parallel or sequentially)","items":{"type":"object","properties":{"summary":{"type":"string","description":"Short description of this branch's purpose"},"skip_failure":{"type":"boolean","description":"If true, failure in this branch doesn't fail the entire flow"},"modules":{"type":"array","description":"Steps to execute in this branch","items":{"$ref":"#/components/schemas/FlowModule"}}},"required":["modules"]}},"type":{"type":"string","enum":["branchall"]},"parallel":{"type":"boolean","description":"If true, all branches execute concurrently. If false, they execute sequentially"}},"required":["branches","type"]},"AgentTool":{"type":"object","description":"A tool available to an AI agent. Can be a flow module or an external MCP (Model Context Protocol) tool","properties":{"id":{"type":"string","description":"Unique identifier for this tool. Cannot contain spaces - use underscores instead (e.g., 'get_user_data' not 'get user data')"},"summary":{"type":"string","description":"Short description of what this tool does (shown to the AI)"},"value":{"$ref":"#/components/schemas/ToolValue"}},"required":["id","value"]},"ToolValue":{"description":"The implementation of a tool. Can be a flow module (script/flow) or an MCP tool reference","oneOf":[{"$ref":"#/components/schemas/FlowModuleTool"},{"$ref":"#/components/schemas/McpToolValue"},{"$ref":"#/components/schemas/WebsearchToolValue"}],"discriminator":{"propertyName":"tool_type","mapping":{"flowmodule":"#/components/schemas/FlowModuleTool","mcp":"#/components/schemas/McpToolValue","websearch":"#/components/schemas/WebsearchToolValue"}}},"FlowModuleTool":{"description":"A tool implemented as a flow module (script, flow, etc.). The AI can call this like any other flow module","allOf":[{"type":"object","properties":{"tool_type":{"type":"string","enum":["flowmodule"]}},"required":["tool_type"]},{"$ref":"#/components/schemas/FlowModuleValue"}]},"WebsearchToolValue":{"type":"object","description":"A tool implemented as a websearch tool. The AI can call this like any other websearch tool","properties":{"tool_type":{"type":"string","enum":["websearch"]}},"required":["tool_type"]},"McpToolValue":{"type":"object","description":"Reference to an external MCP (Model Context Protocol) tool. The AI can call tools from MCP servers","properties":{"tool_type":{"type":"string","enum":["mcp"]},"resource_path":{"type":"string","description":"Path to the MCP resource/server configuration"},"include_tools":{"type":"array","description":"Whitelist of specific tools to include from this MCP server","items":{"type":"string"}},"exclude_tools":{"type":"array","description":"Blacklist of tools to exclude from this MCP server","items":{"type":"string"}}},"required":["tool_type","resource_path"]},"AiAgent":{"type":"object","description":"AI agent step that can use tools to accomplish tasks. The agent receives inputs and can call any of its configured tools to complete the task","properties":{"input_transforms":{"type":"object","description":"Input parameters for the AI agent mapped to their values","properties":{"provider":{"$ref":"#/components/schemas/ProviderTransform"},"output_type":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"Output format type.\\nValid values: 'text' (default) - plain text response, 'image' - image generation\\n"},"user_message":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"The user's prompt/message to the AI agent. Supports variable interpolation with flow.input syntax."},"system_prompt":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"System instructions that guide the AI's behavior, persona, and response style. Optional."},"streaming":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"Boolean. If true, stream the AI response incrementally.\\nStreaming events include: token_delta, reasoning_token_delta, tool_call, tool_call_arguments, tool_execution, tool_result\\n"},"memory":{"$ref":"#/components/schemas/MemoryTransform"},"output_schema":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"JSON Schema object defining structured output format. Used when you need the AI to return data in a specific shape.\\nSupports standard JSON Schema properties: type, properties, required, items, enum, pattern, minLength, maxLength, minimum, maximum, etc.\\nExample: { type: 'object', properties: { name: { type: 'string' }, age: { type: 'integer' } }, required: ['name'] }\\n"},"user_attachments":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"Array of file references (images or PDFs) for the AI agent.\\nFormat: Array<{ bucket: string, key: string }> - S3 object references\\nExample: [{ bucket: 'my-bucket', key: 'documents/report.pdf' }]\\n"},"max_completion_tokens":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"Integer. Maximum number of tokens the AI will generate in its response.\\nRange: 1 to 4,294,967,295. Typical values: 256-4096 for most use cases.\\n"},"temperature":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"Float. Controls randomness/creativity of responses.\\nRange: 0.0 to 2.0 (provider-dependent)\\n- 0.0 = deterministic, focused responses\\n- 0.7 = balanced (common default)\\n- 1.0+ = more creative/random\\n"},"max_iterations":{"allOf":[{"$ref":"#/components/schemas/InputTransform"}],"description":"Number. Limits how many times the agent can loop through reasoning and tool use.\\nRange: 1-1000.\\n"}},"required":["provider","user_message","output_type"]},"tools":{"type":"array","description":"Array of tools the agent can use. The agent decides which tools to call based on the task","items":{"$ref":"#/components/schemas/AgentTool"}},"type":{"type":"string","enum":["aiagent"]},"tag":{"type":"string","description":"Worker group tag for execution routing. If not set, the AI agent step runs on the flow's tag (default \`flow\`)"},"omit_output_from_conversation":{"type":"boolean","default":false,"description":"If true, this AI agent step does not persist its assistant or tool messages to the flow conversation when chat mode is enabled."},"parallel":{"type":"boolean","description":"If true, the agent can execute multiple tool calls in parallel"}},"required":["tools","type","input_transforms"]},"Identity":{"type":"object","description":"Pass-through module that returns its input unchanged. Useful for flow structure or as a placeholder","properties":{"type":{"type":"string","enum":["identity"]},"flow":{"type":"boolean","description":"If true, marks this as a flow identity (special handling)"}},"required":["type"]},"FlowStatus":{"type":"object","properties":{"step":{"type":"integer"},"modules":{"type":"array","items":{"$ref":"#/components/schemas/FlowStatusModule"}},"user_states":{"additionalProperties":true},"preprocessor_module":{"allOf":[{"$ref":"#/components/schemas/FlowStatusModule"}]},"failure_module":{"allOf":[{"$ref":"#/components/schemas/FlowStatusModule"},{"type":"object","properties":{"parent_module":{"type":"string"}}}]},"retry":{"type":"object","properties":{"fail_count":{"type":"integer"},"failed_jobs":{"type":"array","items":{"type":"string","format":"uuid"}}}}},"required":["step","modules","failure_module"]},"FlowStatusModule":{"type":"object","properties":{"type":{"type":"string","enum":["WaitingForPriorSteps","WaitingForEvents","WaitingForExecutor","InProgress","Success","Failure"]},"id":{"type":"string"},"job":{"type":"string","format":"uuid"},"count":{"type":"integer"},"progress":{"type":"integer"},"iterator":{"type":"object","properties":{"index":{"type":"integer"},"itered":{"type":"array","items":{}},"itered_len":{"type":"integer"},"args":{}}},"flow_jobs":{"type":"array","items":{"type":"string"}},"flow_jobs_success":{"type":"array","items":{"type":"boolean"}},"flow_jobs_duration":{"type":"object","properties":{"started_at":{"type":"array","items":{"type":"string"}},"duration_ms":{"type":"array","items":{"type":"integer"}}}},"branch_chosen":{"type":"object","properties":{"type":{"type":"string","enum":["branch","default"]},"branch":{"type":"integer"}},"required":["type"]},"branchall":{"type":"object","properties":{"branch":{"type":"integer"},"len":{"type":"integer"}},"required":["branch","len"]},"approvers":{"type":"array","items":{"type":"object","properties":{"resume_id":{"type":"integer"},"approver":{"type":"string"}},"required":["resume_id","approver"]}},"failed_retries":{"type":"array","items":{"type":"string","format":"uuid"}},"skipped":{"type":"boolean"},"agent_actions":{"type":"array","items":{"type":"object","oneOf":[{"type":"object","properties":{"job_id":{"type":"string","format":"uuid"},"function_name":{"type":"string"},"type":{"type":"string","enum":["tool_call"]},"module_id":{"type":"string"}},"required":["job_id","function_name","type","module_id"]},{"type":"object","properties":{"call_id":{"type":"string","format":"uuid"},"function_name":{"type":"string"},"resource_path":{"type":"string"},"type":{"type":"string","enum":["mcp_tool_call"]},"arguments":{"type":"object"}},"required":["call_id","function_name","resource_path","type"]},{"type":"object","properties":{"type":{"type":"string","enum":["web_search"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["message"]}},"required":["content","type"]}]}},"agent_actions_success":{"type":"array","items":{"type":"boolean"}}},"required":["type"]}}`,
|
|
84315
85156
|
"raw-app": `---
|
|
84316
85157
|
name: raw-app
|
|
84317
85158
|
description: MUST use when creating raw apps.
|
|
@@ -85938,8 +86779,8 @@ inspect asset-driven pipelines (scripts marked \`// pipeline\`, wired by \`// on
|
|
|
85938
86779
|
- \`pipeline show <folder:string>\` - render a pipeline folder's DAG (sources, lineage, subscriptions) in the terminal
|
|
85939
86780
|
- \`--json\` - Output the raw asset graph as JSON
|
|
85940
86781
|
- \`--local\` - Build the graph from local working-tree files (// pipeline scripts) instead of the deployed workspace — no deploy needed.
|
|
85941
|
-
- \`pipeline run <folder:string>\` - run a
|
|
85942
|
-
- \`--from <script:string>\` - Start script (short name or path). Defaults to the folder's sole schedule/manual root.
|
|
86782
|
+
- \`pipeline run <folder:string>\` - run a cascade: from --from (a root OR any mid-DAG model), fan downstream up to the --to end node(s)
|
|
86783
|
+
- \`--from <script:string>\` - Start script (short name or path). May be any node, including a mid-DAG model — that node plus its transitive downstream runs, upstream is NOT re-run (dbt \`--select model+\`). Defaults to the folder's sole schedule/manual root.
|
|
85943
86784
|
- \`--to <node:string>\` - End node(s) to stop at — script names/paths or asset URIs (e.g. datatable://main/staged). Repeatable or comma-separated. Omit to run the full downstream.
|
|
85944
86785
|
- \`--dry-run\` - Print the topological run plan without executing.
|
|
85945
86786
|
- \`--json\` - Output the plan as JSON (for piping to jq).
|
|
@@ -90808,6 +91649,48 @@ class NpmProvider extends Provider {
|
|
|
90808
91649
|
async hasRequiredPermissions() {
|
|
90809
91650
|
return true;
|
|
90810
91651
|
}
|
|
91652
|
+
async upgrade({
|
|
91653
|
+
name,
|
|
91654
|
+
to,
|
|
91655
|
+
main: main2,
|
|
91656
|
+
verbose
|
|
91657
|
+
}) {
|
|
91658
|
+
const specifier = this.getSpecifier(name, to, main2).replace(/^npm:/, "");
|
|
91659
|
+
const args = ["install", "--global", "--force", specifier];
|
|
91660
|
+
this.logger?.log(`$ npm ${args.join(" ")}`);
|
|
91661
|
+
const { spawn: spawn2 } = await import("node:child_process");
|
|
91662
|
+
const HINT = "If this is a permissions error, retry with sudo, or reinstall with: npm uninstall -g windmill-cli && npm install -g windmill-cli";
|
|
91663
|
+
const proc = spawn2("npm", args, {
|
|
91664
|
+
stdio: [null, "pipe", "pipe"],
|
|
91665
|
+
shell: true
|
|
91666
|
+
});
|
|
91667
|
+
const output = [];
|
|
91668
|
+
proc.stdout?.on("data", (d) => {
|
|
91669
|
+
output.push(String(d));
|
|
91670
|
+
if (verbose)
|
|
91671
|
+
process.stdout.write(d);
|
|
91672
|
+
});
|
|
91673
|
+
proc.stderr?.on("data", (d) => {
|
|
91674
|
+
output.push(String(d));
|
|
91675
|
+
if (verbose)
|
|
91676
|
+
process.stderr.write(d);
|
|
91677
|
+
});
|
|
91678
|
+
const exitCode = await new Promise((resolve9, reject) => {
|
|
91679
|
+
proc.on("error", reject);
|
|
91680
|
+
proc.on("close", resolve9);
|
|
91681
|
+
}).catch((e) => {
|
|
91682
|
+
throw new Error(`failed to run npm: ${e instanceof Error ? e.message : e}
|
|
91683
|
+
|
|
91684
|
+
${HINT}`);
|
|
91685
|
+
});
|
|
91686
|
+
if (exitCode !== 0) {
|
|
91687
|
+
const detail = output.join("").trim();
|
|
91688
|
+
throw new Error(`npm exited with ${exitCode === null ? "a signal" : `code ${exitCode}`}${detail ? `:
|
|
91689
|
+
${detail}` : ""}
|
|
91690
|
+
|
|
91691
|
+
${HINT}`);
|
|
91692
|
+
}
|
|
91693
|
+
}
|
|
90811
91694
|
}
|
|
90812
91695
|
|
|
90813
91696
|
// src/main.ts
|
|
@@ -91271,9 +92154,9 @@ Each entry is bundled and uploaded so scripts can import shared code.`,
|
|
|
91271
92154
|
section: "Workspace bindings",
|
|
91272
92155
|
sectionNote: `Map workspace names to Windmill instances and override settings per workspace.
|
|
91273
92156
|
The key is a human-friendly workspace name. gitBranch and workspaceId default to the key name.`,
|
|
91274
|
-
templateValue:
|
|
91275
|
-
{{BRANCH}}: {}`,
|
|
92157
|
+
templateValue: " {}",
|
|
91276
92158
|
example: [
|
|
92159
|
+
" # {{BRANCH}}:",
|
|
91277
92160
|
"{{BASEURL_LINE}}",
|
|
91278
92161
|
"{{WORKSPACE_ID_LINE}}",
|
|
91279
92162
|
" # gitBranch: main # git branch (defaults to workspace name)",
|
|
@@ -91998,7 +92881,36 @@ async function initAction(opts) {
|
|
|
91998
92881
|
warn(`Could not pull resource types and generate TypeScript namespace: ${error2 instanceof Error ? error2.message : error2}`);
|
|
91999
92882
|
}
|
|
92000
92883
|
} else {
|
|
92001
|
-
|
|
92884
|
+
const { readConfigFile: readConfigFile2, getWorkspaceNames: getWorkspaceNames2, getEffectiveWorkspaceId: getEffectiveWorkspaceId2 } = await init_conf().then(() => exports_conf);
|
|
92885
|
+
const config = await readConfigFile2({ warnIfMissing: false });
|
|
92886
|
+
const resolvable = getWorkspaceNames2(config.workspaces).filter((n) => !!config.workspaces?.[n]?.baseUrl);
|
|
92887
|
+
let boundProfileForGen;
|
|
92888
|
+
if (resolvable.length === 1) {
|
|
92889
|
+
const name = resolvable[0];
|
|
92890
|
+
const entry = config.workspaces[name];
|
|
92891
|
+
let normalizedBaseUrl;
|
|
92892
|
+
try {
|
|
92893
|
+
normalizedBaseUrl = new URL(entry.baseUrl).toString();
|
|
92894
|
+
} catch {
|
|
92895
|
+
normalizedBaseUrl = undefined;
|
|
92896
|
+
}
|
|
92897
|
+
if (normalizedBaseUrl) {
|
|
92898
|
+
const workspaceId = getEffectiveWorkspaceId2(name, entry);
|
|
92899
|
+
const profiles = await allWorkspaces(opts.configDir);
|
|
92900
|
+
boundProfileForGen = profiles.find((p) => p.remote === normalizedBaseUrl && p.workspaceId === workspaceId);
|
|
92901
|
+
}
|
|
92902
|
+
}
|
|
92903
|
+
if (boundProfileForGen) {
|
|
92904
|
+
try {
|
|
92905
|
+
const rtOpts = { ...opts };
|
|
92906
|
+
rtOpts.__secret_workspace = boundProfileForGen;
|
|
92907
|
+
await generateRTNamespace(rtOpts);
|
|
92908
|
+
} catch (error2) {
|
|
92909
|
+
warn(`Could not pull resource types and generate TypeScript namespace: ${error2 instanceof Error ? error2.message : error2}`);
|
|
92910
|
+
}
|
|
92911
|
+
} else {
|
|
92912
|
+
info(colors.gray("Skipped resource type namespace generation (no workspace bound). Run 'wmill workspace bind' then 'wmill init' to generate it."));
|
|
92913
|
+
}
|
|
92002
92914
|
}
|
|
92003
92915
|
}
|
|
92004
92916
|
var command31 = new Command().description("Bootstrap a windmill project with a wmill.yaml file").option("--use-default", "Use default settings without checking backend").option("--use-backend", "Use backend git-sync settings if available").option("--repository <repo:string>", "Specify repository path (e.g., u/user/repo) when using backend settings").option("--bind-profile", "Automatically bind active workspace profile to current Git branch").option("--no-bind-profile", "Skip workspace profile binding prompt").action(initAction);
|
|
@@ -94887,7 +95799,8 @@ function assetUriToNodeId(uri) {
|
|
|
94887
95799
|
return;
|
|
94888
95800
|
const prefix = m3[1].toLowerCase();
|
|
94889
95801
|
const kind = prefix === "s3" ? "s3object" : prefix;
|
|
94890
|
-
|
|
95802
|
+
const path23 = kind === "s3object" ? m3[2].replace(/^\/+/, "") : m3[2];
|
|
95803
|
+
return `${kind}:${path23}`;
|
|
94891
95804
|
}
|
|
94892
95805
|
function addEdge(dag, a2, b2) {
|
|
94893
95806
|
if (a2 === b2)
|
|
@@ -95008,6 +95921,18 @@ function validStarts(g2) {
|
|
|
95008
95921
|
}
|
|
95009
95922
|
return out;
|
|
95010
95923
|
}
|
|
95924
|
+
function validFromStarts(g2) {
|
|
95925
|
+
const nonAutorun = nonAutorunTriggerScripts(g2);
|
|
95926
|
+
const out = new Set(validStarts(g2));
|
|
95927
|
+
for (const r2 of g2.runnables ?? []) {
|
|
95928
|
+
if (r2.usage_kind !== "script")
|
|
95929
|
+
continue;
|
|
95930
|
+
const id = scriptNodeId(r2.path);
|
|
95931
|
+
if (!nonAutorun.has(id))
|
|
95932
|
+
out.add(id);
|
|
95933
|
+
}
|
|
95934
|
+
return out;
|
|
95935
|
+
}
|
|
95011
95936
|
function nonAutorunTriggerScripts(g2) {
|
|
95012
95937
|
const out = new Set;
|
|
95013
95938
|
for (const t2 of g2.triggers ?? []) {
|
|
@@ -95079,6 +96004,7 @@ function topoOrder(g2, scripts) {
|
|
|
95079
96004
|
}
|
|
95080
96005
|
|
|
95081
96006
|
// src/commands/pipeline/localGraph.ts
|
|
96007
|
+
init_log();
|
|
95082
96008
|
init_script_common();
|
|
95083
96009
|
await __promiseAll([
|
|
95084
96010
|
init_metadata(),
|
|
@@ -95088,6 +96014,235 @@ await __promiseAll([
|
|
|
95088
96014
|
import * as fs17 from "node:fs";
|
|
95089
96015
|
import * as path23 from "node:path";
|
|
95090
96016
|
import process25 from "node:process";
|
|
96017
|
+
|
|
96018
|
+
// src/commands/pipeline/duckdbMacros.ts
|
|
96019
|
+
function stripKw(s2, kw) {
|
|
96020
|
+
if (s2.length < kw.length)
|
|
96021
|
+
return null;
|
|
96022
|
+
if (s2.slice(0, kw.length).toLowerCase() !== kw)
|
|
96023
|
+
return null;
|
|
96024
|
+
const after = s2.slice(kw.length);
|
|
96025
|
+
if (after.length === 0 || /^\s/.test(after))
|
|
96026
|
+
return after.replace(/^\s+/, "");
|
|
96027
|
+
return null;
|
|
96028
|
+
}
|
|
96029
|
+
function isIdent(s2) {
|
|
96030
|
+
return /^[A-Za-z_][A-Za-z0-9_]*$/.test(s2);
|
|
96031
|
+
}
|
|
96032
|
+
function splitStatements(sql) {
|
|
96033
|
+
const out = [];
|
|
96034
|
+
let cur = "";
|
|
96035
|
+
const chars = [...sql];
|
|
96036
|
+
let i = 0;
|
|
96037
|
+
const n2 = chars.length;
|
|
96038
|
+
while (i < n2) {
|
|
96039
|
+
const c2 = chars[i];
|
|
96040
|
+
if (c2 === "-" && i + 1 < n2 && chars[i + 1] === "-" || c2 === "/" && i + 1 < n2 && chars[i + 1] === "/") {
|
|
96041
|
+
while (i < n2 && chars[i] !== `
|
|
96042
|
+
`)
|
|
96043
|
+
i += 1;
|
|
96044
|
+
continue;
|
|
96045
|
+
}
|
|
96046
|
+
if (c2 === "/" && i + 1 < n2 && chars[i + 1] === "*") {
|
|
96047
|
+
i += 2;
|
|
96048
|
+
while (i + 1 < n2 && !(chars[i] === "*" && chars[i + 1] === "/"))
|
|
96049
|
+
i += 1;
|
|
96050
|
+
i += 2;
|
|
96051
|
+
continue;
|
|
96052
|
+
}
|
|
96053
|
+
if (c2 === "'") {
|
|
96054
|
+
cur += c2;
|
|
96055
|
+
i += 1;
|
|
96056
|
+
while (i < n2) {
|
|
96057
|
+
cur += chars[i];
|
|
96058
|
+
if (chars[i] === "'") {
|
|
96059
|
+
if (i + 1 < n2 && chars[i + 1] === "'") {
|
|
96060
|
+
cur += "'";
|
|
96061
|
+
i += 2;
|
|
96062
|
+
continue;
|
|
96063
|
+
}
|
|
96064
|
+
i += 1;
|
|
96065
|
+
break;
|
|
96066
|
+
}
|
|
96067
|
+
i += 1;
|
|
96068
|
+
}
|
|
96069
|
+
continue;
|
|
96070
|
+
}
|
|
96071
|
+
if (c2 === '"') {
|
|
96072
|
+
cur += c2;
|
|
96073
|
+
i += 1;
|
|
96074
|
+
while (i < n2) {
|
|
96075
|
+
cur += chars[i];
|
|
96076
|
+
if (chars[i] === '"') {
|
|
96077
|
+
i += 1;
|
|
96078
|
+
break;
|
|
96079
|
+
}
|
|
96080
|
+
i += 1;
|
|
96081
|
+
}
|
|
96082
|
+
continue;
|
|
96083
|
+
}
|
|
96084
|
+
if (c2 === ";") {
|
|
96085
|
+
const t3 = cur.trim();
|
|
96086
|
+
if (t3 !== "")
|
|
96087
|
+
out.push(t3);
|
|
96088
|
+
cur = "";
|
|
96089
|
+
i += 1;
|
|
96090
|
+
continue;
|
|
96091
|
+
}
|
|
96092
|
+
cur += c2;
|
|
96093
|
+
i += 1;
|
|
96094
|
+
}
|
|
96095
|
+
const t2 = cur.trim();
|
|
96096
|
+
if (t2 !== "")
|
|
96097
|
+
out.push(t2);
|
|
96098
|
+
return out;
|
|
96099
|
+
}
|
|
96100
|
+
function parseCreateMacro(stmt) {
|
|
96101
|
+
let rest = stripKw(stmt.trim(), "create");
|
|
96102
|
+
if (rest === null)
|
|
96103
|
+
return null;
|
|
96104
|
+
const afterOr = stripKw(rest, "or");
|
|
96105
|
+
if (afterOr !== null) {
|
|
96106
|
+
const afterReplace = stripKw(afterOr, "replace");
|
|
96107
|
+
if (afterReplace === null)
|
|
96108
|
+
return null;
|
|
96109
|
+
rest = afterReplace;
|
|
96110
|
+
}
|
|
96111
|
+
const afterTemp = stripKw(rest, "temp") ?? stripKw(rest, "temporary");
|
|
96112
|
+
if (afterTemp !== null)
|
|
96113
|
+
rest = afterTemp;
|
|
96114
|
+
const afterMacro = stripKw(rest, "macro") ?? stripKw(rest, "function");
|
|
96115
|
+
if (afterMacro === null)
|
|
96116
|
+
return null;
|
|
96117
|
+
rest = afterMacro;
|
|
96118
|
+
const nameEndMatch = rest.match(/[\s(]/);
|
|
96119
|
+
const nameEnd = nameEndMatch ? nameEndMatch.index : rest.length;
|
|
96120
|
+
const rawName = rest.slice(0, nameEnd);
|
|
96121
|
+
if (rawName === "" || rawName.includes(".") || rawName.includes('"') || !isIdent(rawName)) {
|
|
96122
|
+
return null;
|
|
96123
|
+
}
|
|
96124
|
+
const name = rawName.toLowerCase();
|
|
96125
|
+
rest = rest.slice(nameEnd).replace(/^\s+/, "");
|
|
96126
|
+
if (!rest.startsWith("("))
|
|
96127
|
+
return null;
|
|
96128
|
+
const pchars = [...rest];
|
|
96129
|
+
let depth = 0;
|
|
96130
|
+
let j2 = 0;
|
|
96131
|
+
let close = -1;
|
|
96132
|
+
while (j2 < pchars.length) {
|
|
96133
|
+
const ch = pchars[j2];
|
|
96134
|
+
if (ch === "(")
|
|
96135
|
+
depth += 1;
|
|
96136
|
+
else if (ch === ")") {
|
|
96137
|
+
depth -= 1;
|
|
96138
|
+
if (depth === 0) {
|
|
96139
|
+
close = j2;
|
|
96140
|
+
break;
|
|
96141
|
+
}
|
|
96142
|
+
} else if (ch === "'" || ch === '"') {
|
|
96143
|
+
const q2 = ch;
|
|
96144
|
+
j2 += 1;
|
|
96145
|
+
while (j2 < pchars.length && pchars[j2] !== q2)
|
|
96146
|
+
j2 += 1;
|
|
96147
|
+
}
|
|
96148
|
+
j2 += 1;
|
|
96149
|
+
}
|
|
96150
|
+
if (close === -1)
|
|
96151
|
+
return null;
|
|
96152
|
+
const params = pchars.slice(1, close).join("").trim();
|
|
96153
|
+
const afterParams = pchars.slice(close + 1).join("").replace(/^\s+/, "");
|
|
96154
|
+
let body = stripKw(afterParams, "as");
|
|
96155
|
+
if (body === null)
|
|
96156
|
+
return null;
|
|
96157
|
+
let isTable = false;
|
|
96158
|
+
const afterTable = stripKw(body, "table");
|
|
96159
|
+
if (afterTable !== null) {
|
|
96160
|
+
body = afterTable;
|
|
96161
|
+
isTable = true;
|
|
96162
|
+
}
|
|
96163
|
+
const trimmedBody = body.replace(/;+\s*$/, "").trim();
|
|
96164
|
+
if (trimmedBody === "")
|
|
96165
|
+
return null;
|
|
96166
|
+
return { name, params, isTable };
|
|
96167
|
+
}
|
|
96168
|
+
function parseMacroLibrary(sql) {
|
|
96169
|
+
const out = [];
|
|
96170
|
+
for (const stmt of splitStatements(sql)) {
|
|
96171
|
+
const m3 = parseCreateMacro(stmt);
|
|
96172
|
+
if (m3)
|
|
96173
|
+
out.push(m3);
|
|
96174
|
+
}
|
|
96175
|
+
return out;
|
|
96176
|
+
}
|
|
96177
|
+
function detectMacroCalls(sql, names) {
|
|
96178
|
+
const found = new Set;
|
|
96179
|
+
if (names.size === 0)
|
|
96180
|
+
return found;
|
|
96181
|
+
for (const stmt of splitStatements(sql)) {
|
|
96182
|
+
const chars = [...stmt];
|
|
96183
|
+
const n2 = chars.length;
|
|
96184
|
+
let i = 0;
|
|
96185
|
+
let prev = undefined;
|
|
96186
|
+
while (i < n2) {
|
|
96187
|
+
const c2 = chars[i];
|
|
96188
|
+
if (c2 === "'" || c2 === '"') {
|
|
96189
|
+
const q2 = c2;
|
|
96190
|
+
i += 1;
|
|
96191
|
+
while (i < n2 && chars[i] !== q2)
|
|
96192
|
+
i += 1;
|
|
96193
|
+
i += 1;
|
|
96194
|
+
prev = q2;
|
|
96195
|
+
continue;
|
|
96196
|
+
}
|
|
96197
|
+
const isIdentStart = /[A-Za-z_]/.test(c2);
|
|
96198
|
+
const prevBlocks = prev !== undefined && /[.A-Za-z0-9_]/.test(prev);
|
|
96199
|
+
if (isIdentStart && !prevBlocks) {
|
|
96200
|
+
const start = i;
|
|
96201
|
+
while (i < n2 && /[A-Za-z0-9_]/.test(chars[i]))
|
|
96202
|
+
i += 1;
|
|
96203
|
+
const word = chars.slice(start, i).join("").toLowerCase();
|
|
96204
|
+
let k2 = i;
|
|
96205
|
+
while (k2 < n2 && /\s/.test(chars[k2]))
|
|
96206
|
+
k2 += 1;
|
|
96207
|
+
if (k2 < n2 && chars[k2] === "(" && names.has(word))
|
|
96208
|
+
found.add(word);
|
|
96209
|
+
prev = chars[i - 1];
|
|
96210
|
+
continue;
|
|
96211
|
+
}
|
|
96212
|
+
prev = c2;
|
|
96213
|
+
i += 1;
|
|
96214
|
+
}
|
|
96215
|
+
}
|
|
96216
|
+
return found;
|
|
96217
|
+
}
|
|
96218
|
+
function parseMacroAnnotations(content) {
|
|
96219
|
+
let macros = false;
|
|
96220
|
+
const useLibs = [];
|
|
96221
|
+
for (const raw of content.split(`
|
|
96222
|
+
`)) {
|
|
96223
|
+
const line = raw.replace(/^\s+/, "");
|
|
96224
|
+
if (line === "")
|
|
96225
|
+
continue;
|
|
96226
|
+
let rest;
|
|
96227
|
+
if (line.startsWith("//") || line.startsWith("--"))
|
|
96228
|
+
rest = line.slice(2);
|
|
96229
|
+
else if (line.startsWith("#"))
|
|
96230
|
+
rest = line.slice(1);
|
|
96231
|
+
else
|
|
96232
|
+
break;
|
|
96233
|
+
rest = rest.replace(/^\s+/, "");
|
|
96234
|
+
if (/^macros\s*$/.test(rest)) {
|
|
96235
|
+
macros = true;
|
|
96236
|
+
continue;
|
|
96237
|
+
}
|
|
96238
|
+
const u2 = rest.match(/^use\s+(\S+)\s*$/);
|
|
96239
|
+
if (u2 && u2[1].includes("/") && !useLibs.includes(u2[1]))
|
|
96240
|
+
useLibs.push(u2[1]);
|
|
96241
|
+
}
|
|
96242
|
+
return { macros, useLibs };
|
|
96243
|
+
}
|
|
96244
|
+
|
|
96245
|
+
// src/commands/pipeline/localGraph.ts
|
|
95091
96246
|
function workspaceRoot() {
|
|
95092
96247
|
const yaml = getWmillYamlPath();
|
|
95093
96248
|
return yaml ? path23.dirname(yaml) : process25.cwd();
|
|
@@ -95163,7 +96318,8 @@ function fallbackParse(content, language) {
|
|
|
95163
96318
|
if (uri) {
|
|
95164
96319
|
const prefix = uri[1].toLowerCase();
|
|
95165
96320
|
const kind = prefix === "s3" ? "s3object" : prefix;
|
|
95166
|
-
|
|
96321
|
+
const path24 = kind === "s3object" ? uri[2].replace(/^\/+/, "") : uri[2];
|
|
96322
|
+
out.triggers.push({ kind: "asset", asset_kind: kind, path: path24 });
|
|
95167
96323
|
} else if (NATIVE_KINDS.has(firstTok) && rest === firstTok) {
|
|
95168
96324
|
out.triggers.push({ kind: firstTok });
|
|
95169
96325
|
}
|
|
@@ -95243,6 +96399,7 @@ async function inferScriptAssets(content, language) {
|
|
|
95243
96399
|
}
|
|
95244
96400
|
return out;
|
|
95245
96401
|
}
|
|
96402
|
+
var warnedAssetParserUnavailable = false;
|
|
95246
96403
|
async function inferScriptAssetsBody(content, language) {
|
|
95247
96404
|
const fn = wasmFnForLanguage(language);
|
|
95248
96405
|
if (!fn)
|
|
@@ -95251,7 +96408,11 @@ async function inferScriptAssetsBody(content, language) {
|
|
|
95251
96408
|
try {
|
|
95252
96409
|
const mod = await loadParser(ASSET_WASM_PKG);
|
|
95253
96410
|
raw = mod[fn](content);
|
|
95254
|
-
} catch {
|
|
96411
|
+
} catch (e2) {
|
|
96412
|
+
if (!warnedAssetParserUnavailable) {
|
|
96413
|
+
warnedAssetParserUnavailable = true;
|
|
96414
|
+
warnStderr(`warning: ${ASSET_WASM_PKG} failed to load (${e2 instanceof Error ? e2.message : e2}) — falling back to annotation-only parsing; inferred read/write edges (materialize targets, COPY TO, writeS3File) will be missing from the local graph`);
|
|
96415
|
+
}
|
|
95255
96416
|
return fallbackParse(content, language);
|
|
95256
96417
|
}
|
|
95257
96418
|
if (raw.startsWith("err:"))
|
|
@@ -95306,20 +96467,37 @@ async function buildLocalPipelineGraph(args) {
|
|
|
95306
96467
|
const folderClean = args.folder.replace(/^f\//, "").replace(/\/$/, "");
|
|
95307
96468
|
const folderDir = path23.join(args.root, "f", folderClean);
|
|
95308
96469
|
const all = await collectScripts(folderDir, args.root, args.defaultTs);
|
|
96470
|
+
const libMacros = collectMacroLibraries(args.root);
|
|
95309
96471
|
const runnables = [];
|
|
95310
96472
|
const edges = [];
|
|
95311
96473
|
const triggers = [];
|
|
95312
96474
|
const assetSet = new Map;
|
|
96475
|
+
const derivedFromByKey = new Map;
|
|
95313
96476
|
const pipelineScripts = [];
|
|
95314
96477
|
for (const s2 of all) {
|
|
95315
96478
|
const out = await inferScriptAssets(s2.content, s2.language);
|
|
96479
|
+
const macroLibDefs = libMacros.get(s2.path);
|
|
96480
|
+
if (macroLibDefs) {
|
|
96481
|
+
runnables.push({
|
|
96482
|
+
path: s2.path,
|
|
96483
|
+
usage_kind: "script",
|
|
96484
|
+
in_pipeline: true,
|
|
96485
|
+
...out.tag ? { tag: out.tag } : {},
|
|
96486
|
+
macros: macroLibDefs.map((m3) => ({
|
|
96487
|
+
name: m3.name,
|
|
96488
|
+
params: m3.params,
|
|
96489
|
+
is_table: m3.isTable
|
|
96490
|
+
}))
|
|
96491
|
+
});
|
|
96492
|
+
continue;
|
|
96493
|
+
}
|
|
95316
96494
|
if (!out.in_pipeline)
|
|
95317
96495
|
continue;
|
|
95318
96496
|
const retry = normalizeRetry(out.retry);
|
|
95319
96497
|
const nativeTriggers = recoverHeaderNativeTriggers(s2.content, s2.language);
|
|
95320
96498
|
pipelineScripts.push(out.tag ? { ...s2, tag: out.tag } : s2);
|
|
95321
96499
|
const mat = out.materialize;
|
|
95322
|
-
const materialize_strategy = mat && !mat.manual ? mat.append ? "append" : mat.unique_key ? "merge" : "replace" : undefined;
|
|
96500
|
+
const materialize_strategy = mat && !mat.manual ? mat.scd2 ? "scd2" : mat.append ? "append" : mat.unique_key ? "merge" : "replace" : undefined;
|
|
95323
96501
|
runnables.push({
|
|
95324
96502
|
path: s2.path,
|
|
95325
96503
|
usage_kind: "script",
|
|
@@ -95331,7 +96509,8 @@ async function buildLocalPipelineGraph(args) {
|
|
|
95331
96509
|
...out.data_tests && out.data_tests.length > 0 ? { data_tests: out.data_tests } : {},
|
|
95332
96510
|
...out.column_lineage && out.column_lineage.length > 0 ? { column_lineage: out.column_lineage } : {},
|
|
95333
96511
|
...mat ? { materialize_target: { kind: mat.target_kind, path: mat.target_path } } : {},
|
|
95334
|
-
...materialize_strategy ? { materialize_strategy } : {}
|
|
96512
|
+
...materialize_strategy ? { materialize_strategy } : {},
|
|
96513
|
+
...mat?.on_schema_change === "ignore" ? { materialize_on_schema_change: "ignore" } : {}
|
|
95335
96514
|
});
|
|
95336
96515
|
for (const a2 of out.assets ?? []) {
|
|
95337
96516
|
assetSet.set(`${a2.kind}:${a2.path}`, { kind: a2.kind, path: a2.path });
|
|
@@ -95344,19 +96523,30 @@ async function buildLocalPipelineGraph(args) {
|
|
|
95344
96523
|
});
|
|
95345
96524
|
}
|
|
95346
96525
|
if (mat) {
|
|
95347
|
-
|
|
95348
|
-
|
|
95349
|
-
|
|
95350
|
-
|
|
95351
|
-
|
|
95352
|
-
|
|
95353
|
-
|
|
95354
|
-
|
|
95355
|
-
|
|
95356
|
-
|
|
95357
|
-
|
|
95358
|
-
|
|
96526
|
+
const matWrites = [
|
|
96527
|
+
{ path: mat.target_path }
|
|
96528
|
+
];
|
|
96529
|
+
if (mat.scd2 && !mat.manual) {
|
|
96530
|
+
const currentPath = `${mat.target_path}_current`;
|
|
96531
|
+
matWrites.push({ path: currentPath, derived_from: mat.target_path });
|
|
96532
|
+
derivedFromByKey.set(`${mat.target_kind}:${currentPath}`, mat.target_path);
|
|
96533
|
+
}
|
|
96534
|
+
for (const w2 of matWrites) {
|
|
96535
|
+
assetSet.set(`${mat.target_kind}:${w2.path}`, {
|
|
96536
|
+
kind: mat.target_kind,
|
|
96537
|
+
path: w2.path,
|
|
96538
|
+
...w2.derived_from ? { derived_from: w2.derived_from } : {}
|
|
95359
96539
|
});
|
|
96540
|
+
const hasWrite = edges.some((e2) => e2.runnable_path === s2.path && e2.asset_kind === mat.target_kind && e2.asset_path === w2.path && (e2.access_type === "w" || e2.access_type === "rw"));
|
|
96541
|
+
if (!hasWrite) {
|
|
96542
|
+
edges.push({
|
|
96543
|
+
runnable_kind: "script",
|
|
96544
|
+
runnable_path: s2.path,
|
|
96545
|
+
asset_kind: mat.target_kind,
|
|
96546
|
+
asset_path: w2.path,
|
|
96547
|
+
access_type: "w"
|
|
96548
|
+
});
|
|
96549
|
+
}
|
|
95360
96550
|
}
|
|
95361
96551
|
}
|
|
95362
96552
|
const existingNativeTriggers = new Set;
|
|
@@ -95393,16 +96583,134 @@ async function buildLocalPipelineGraph(args) {
|
|
|
95393
96583
|
});
|
|
95394
96584
|
}
|
|
95395
96585
|
}
|
|
96586
|
+
const macroEdges = buildMacroEdges(all, libMacros, runnables);
|
|
96587
|
+
const assets = [...assetSet.entries()].map(([key, a2]) => {
|
|
96588
|
+
const derived_from = a2.derived_from ?? derivedFromByKey.get(key);
|
|
96589
|
+
return derived_from ? { ...a2, derived_from } : a2;
|
|
96590
|
+
});
|
|
95396
96591
|
return {
|
|
95397
96592
|
graph: {
|
|
95398
96593
|
runnables,
|
|
95399
|
-
assets
|
|
96594
|
+
assets,
|
|
95400
96595
|
edges,
|
|
95401
|
-
triggers
|
|
96596
|
+
triggers,
|
|
96597
|
+
...macroEdges.length > 0 ? { macro_edges: macroEdges } : {}
|
|
95402
96598
|
},
|
|
95403
96599
|
scripts: pipelineScripts
|
|
95404
96600
|
};
|
|
95405
96601
|
}
|
|
96602
|
+
function collectMacroLibraries(root) {
|
|
96603
|
+
const out = new Map;
|
|
96604
|
+
const walk = (dir) => {
|
|
96605
|
+
let entries;
|
|
96606
|
+
try {
|
|
96607
|
+
entries = fs17.readdirSync(dir, { withFileTypes: true });
|
|
96608
|
+
} catch {
|
|
96609
|
+
return;
|
|
96610
|
+
}
|
|
96611
|
+
for (const e2 of entries) {
|
|
96612
|
+
if (e2.name.startsWith(".") || e2.name === "node_modules")
|
|
96613
|
+
continue;
|
|
96614
|
+
const abs = path23.join(dir, e2.name);
|
|
96615
|
+
if (e2.isDirectory()) {
|
|
96616
|
+
walk(abs);
|
|
96617
|
+
continue;
|
|
96618
|
+
}
|
|
96619
|
+
if (!e2.isFile() || !e2.name.endsWith(".duckdb.sql"))
|
|
96620
|
+
continue;
|
|
96621
|
+
let content;
|
|
96622
|
+
try {
|
|
96623
|
+
content = fs17.readFileSync(abs, "utf-8");
|
|
96624
|
+
} catch {
|
|
96625
|
+
continue;
|
|
96626
|
+
}
|
|
96627
|
+
if (!parseMacroAnnotations(content).macros)
|
|
96628
|
+
continue;
|
|
96629
|
+
const relFromRoot = path23.relative(root, abs).replaceAll("\\", "/");
|
|
96630
|
+
out.set(removeExtensionToPath(relFromRoot), parseMacroLibrary(content));
|
|
96631
|
+
}
|
|
96632
|
+
};
|
|
96633
|
+
walk(path23.join(root, "f"));
|
|
96634
|
+
return out;
|
|
96635
|
+
}
|
|
96636
|
+
function buildMacroEdges(all, libMacros, runnables) {
|
|
96637
|
+
if (libMacros.size === 0)
|
|
96638
|
+
return [];
|
|
96639
|
+
const useLibsByScript = new Map;
|
|
96640
|
+
for (const s2 of all) {
|
|
96641
|
+
if (s2.language !== "duckdb")
|
|
96642
|
+
continue;
|
|
96643
|
+
const { useLibs } = parseMacroAnnotations(s2.content);
|
|
96644
|
+
if (useLibs.length > 0)
|
|
96645
|
+
useLibsByScript.set(s2.path, useLibs);
|
|
96646
|
+
}
|
|
96647
|
+
const providerByName = new Map;
|
|
96648
|
+
for (const [lib, macros] of libMacros) {
|
|
96649
|
+
for (const m3 of macros)
|
|
96650
|
+
providerByName.set(m3.name, lib);
|
|
96651
|
+
}
|
|
96652
|
+
const allMacroNames = new Set(providerByName.keys());
|
|
96653
|
+
const pipelinePaths = new Set(runnables.map((r2) => r2.path));
|
|
96654
|
+
const edgeMap = new Map;
|
|
96655
|
+
const aggFor = (lib, consumer) => {
|
|
96656
|
+
let byConsumer = edgeMap.get(lib);
|
|
96657
|
+
if (!byConsumer) {
|
|
96658
|
+
byConsumer = new Map;
|
|
96659
|
+
edgeMap.set(lib, byConsumer);
|
|
96660
|
+
}
|
|
96661
|
+
let agg = byConsumer.get(consumer);
|
|
96662
|
+
if (!agg) {
|
|
96663
|
+
agg = { names: new Set, viaUse: false };
|
|
96664
|
+
byConsumer.set(consumer, agg);
|
|
96665
|
+
}
|
|
96666
|
+
return agg;
|
|
96667
|
+
};
|
|
96668
|
+
for (const s2 of all) {
|
|
96669
|
+
if (s2.language !== "duckdb")
|
|
96670
|
+
continue;
|
|
96671
|
+
for (const name of detectMacroCalls(s2.content, allMacroNames)) {
|
|
96672
|
+
const lib = providerByName.get(name);
|
|
96673
|
+
if (lib === s2.path)
|
|
96674
|
+
continue;
|
|
96675
|
+
aggFor(lib, s2.path).names.add(name);
|
|
96676
|
+
}
|
|
96677
|
+
if (!pipelinePaths.has(s2.path))
|
|
96678
|
+
continue;
|
|
96679
|
+
for (const lib of useLibsByScript.get(s2.path) ?? []) {
|
|
96680
|
+
const macros = libMacros.get(lib);
|
|
96681
|
+
if (!macros || lib === s2.path)
|
|
96682
|
+
continue;
|
|
96683
|
+
const agg = aggFor(lib, s2.path);
|
|
96684
|
+
agg.viaUse = true;
|
|
96685
|
+
for (const m3 of macros)
|
|
96686
|
+
agg.names.add(m3.name);
|
|
96687
|
+
}
|
|
96688
|
+
}
|
|
96689
|
+
const edges = [...edgeMap.entries()].flatMap(([lib_path, byConsumer]) => [...byConsumer.entries()].map(([consumer_path, agg]) => ({
|
|
96690
|
+
lib_path,
|
|
96691
|
+
consumer_path,
|
|
96692
|
+
macro_names: [...agg.names].sort(),
|
|
96693
|
+
via_use: agg.viaUse
|
|
96694
|
+
}))).sort((a2, b2) => a2.lib_path.localeCompare(b2.lib_path) || a2.consumer_path.localeCompare(b2.consumer_path));
|
|
96695
|
+
const libPaths = new Set(edges.map((e2) => e2.lib_path));
|
|
96696
|
+
for (const lib of libPaths) {
|
|
96697
|
+
if (runnables.some((r2) => r2.path === lib))
|
|
96698
|
+
continue;
|
|
96699
|
+
const macros = (libMacros.get(lib) ?? []).map((m3) => ({
|
|
96700
|
+
name: m3.name,
|
|
96701
|
+
params: m3.params,
|
|
96702
|
+
is_table: m3.isTable
|
|
96703
|
+
}));
|
|
96704
|
+
runnables.push({ path: lib, usage_kind: "script", macros });
|
|
96705
|
+
}
|
|
96706
|
+
for (const consumer of new Set(edges.map((e2) => e2.consumer_path))) {
|
|
96707
|
+
if (!runnables.some((r2) => r2.path === consumer)) {
|
|
96708
|
+
runnables.push({ path: consumer, usage_kind: "script" });
|
|
96709
|
+
}
|
|
96710
|
+
}
|
|
96711
|
+
runnables.sort((a2, b2) => a2.path.localeCompare(b2.path));
|
|
96712
|
+
return edges;
|
|
96713
|
+
}
|
|
95406
96714
|
|
|
95407
96715
|
// src/commands/pipeline/pipeline.ts
|
|
95408
96716
|
await __promiseAll([
|
|
@@ -95633,7 +96941,17 @@ function generatePipelineMarkdown(folder, graph, datatableSchemas, local) {
|
|
|
95633
96941
|
(nativeByScript.get(t2.runnable_path) ?? nativeByScript.set(t2.runnable_path, []).get(t2.runnable_path)).push(t2.trigger_kind);
|
|
95634
96942
|
}
|
|
95635
96943
|
}
|
|
95636
|
-
const
|
|
96944
|
+
const macroLibs = graph.runnables.filter((r2) => r2.usage_kind === "script" && (r2.macros?.length ?? 0) > 0).sort((a2, b2) => a2.path.localeCompare(b2.path));
|
|
96945
|
+
const macroLibPaths = new Set(macroLibs.map((r2) => r2.path));
|
|
96946
|
+
const macroConsumersByLib = new Map;
|
|
96947
|
+
for (const me of graph.macro_edges ?? []) {
|
|
96948
|
+
(macroConsumersByLib.get(me.lib_path) ?? macroConsumersByLib.set(me.lib_path, []).get(me.lib_path)).push({
|
|
96949
|
+
consumer: me.consumer_path,
|
|
96950
|
+
names: me.macro_names,
|
|
96951
|
+
viaUse: me.via_use
|
|
96952
|
+
});
|
|
96953
|
+
}
|
|
96954
|
+
const scripts = graph.runnables.filter((r2) => r2.usage_kind === "script" && !macroLibPaths.has(r2.path)).map((r2) => r2.path).sort();
|
|
95637
96955
|
let md = `# Pipeline \`f/${folder}\`
|
|
95638
96956
|
|
|
95639
96957
|
${local ? "_Built from local working-tree files (`// pipeline` scripts)._" : "_Built from the deployed workspace asset graph._"}
|
|
@@ -95644,7 +96962,7 @@ produces data by reading/writing assets in its body (\`datatable://\`,
|
|
|
95644
96962
|
\`ducklake://\`, \`s3://\`, \`volume://\`). The cascade runs a producer, then every
|
|
95645
96963
|
downstream subscriber, in topological order.
|
|
95646
96964
|
|
|
95647
|
-
- **${scripts.length}** script${scripts.length === 1 ? "" : "s"} · **${graph.assets.length}** asset${graph.assets.length === 1 ? "" : "s"}
|
|
96965
|
+
- **${scripts.length}** script${scripts.length === 1 ? "" : "s"} · **${graph.assets.length}** asset${graph.assets.length === 1 ? "" : "s"}${macroLibs.length > 0 ? ` · **${macroLibs.length}** macro librar${macroLibs.length === 1 ? "y" : "ies"}` : ""}
|
|
95648
96966
|
|
|
95649
96967
|
## Scripts
|
|
95650
96968
|
|
|
@@ -95676,6 +96994,36 @@ downstream subscriber, in topological order.
|
|
|
95676
96994
|
md += `
|
|
95677
96995
|
`;
|
|
95678
96996
|
}
|
|
96997
|
+
if (macroLibs.length > 0) {
|
|
96998
|
+
md += `## Macro libraries
|
|
96999
|
+
|
|
97000
|
+
`;
|
|
97001
|
+
md += `\`// macros\` DuckDB libraries. Their \`CREATE MACRO\` definitions are injected as
|
|
97002
|
+
TEMP macros into consuming scripts at run time — call a macro by name, or force the
|
|
97003
|
+
whole library in with \`// use <lib-path>\` (needed for macros only reached via dynamic SQL).
|
|
97004
|
+
|
|
97005
|
+
`;
|
|
97006
|
+
for (const lib of macroLibs) {
|
|
97007
|
+
md += `### \`${lib.path}\`
|
|
97008
|
+
|
|
97009
|
+
`;
|
|
97010
|
+
for (const m3 of lib.macros ?? []) {
|
|
97011
|
+
md += `- \`${m3.name}(${m3.params ?? ""})\`${m3.is_table ? " → TABLE" : ""}
|
|
97012
|
+
`;
|
|
97013
|
+
}
|
|
97014
|
+
const consumers = [...macroConsumersByLib.get(lib.path) ?? []].sort((a2, b2) => a2.consumer.localeCompare(b2.consumer));
|
|
97015
|
+
if (consumers.length > 0) {
|
|
97016
|
+
md += `- **Used by:**
|
|
97017
|
+
`;
|
|
97018
|
+
for (const c2 of consumers) {
|
|
97019
|
+
md += ` - \`${c2.consumer}\` (${c2.viaUse ? "via `// use`" : `calls ${c2.names.map((n2) => `\`${n2}\``).join(", ")}`})
|
|
97020
|
+
`;
|
|
97021
|
+
}
|
|
97022
|
+
}
|
|
97023
|
+
md += `
|
|
97024
|
+
`;
|
|
97025
|
+
}
|
|
97026
|
+
}
|
|
95679
97027
|
const referencedDatatables = new Set(graph.assets.filter((a2) => a2.kind === "datatable").map((a2) => a2.path.split("/")[0]));
|
|
95680
97028
|
const relevant = (datatableSchemas ?? []).filter((dt) => referencedDatatables.has(dt.datatable_name));
|
|
95681
97029
|
if (relevant.length > 0) {
|
|
@@ -96002,6 +97350,14 @@ async function renderGraph(graph, f3, enrich) {
|
|
|
96002
97350
|
}
|
|
96003
97351
|
return out.length > 0 ? " " + out.join(" ") : "";
|
|
96004
97352
|
}
|
|
97353
|
+
const macrosByLib = new Map(graph.runnables.filter((r2) => (r2.macros?.length ?? 0) > 0).map((r2) => [r2.path, r2.macros]));
|
|
97354
|
+
const macroConsumersByLib = new Map;
|
|
97355
|
+
for (const me of graph.macro_edges ?? []) {
|
|
97356
|
+
pushTo(macroConsumersByLib, me.lib_path, {
|
|
97357
|
+
consumer: me.consumer_path,
|
|
97358
|
+
names: me.macro_names
|
|
97359
|
+
});
|
|
97360
|
+
}
|
|
96005
97361
|
const printed = new Set;
|
|
96006
97362
|
const lines = [];
|
|
96007
97363
|
function printScript(script, prefix, extraOn) {
|
|
@@ -96011,8 +97367,15 @@ async function renderGraph(graph, f3, enrich) {
|
|
|
96011
97367
|
return;
|
|
96012
97368
|
}
|
|
96013
97369
|
printed.add(script);
|
|
96014
|
-
|
|
97370
|
+
const libMacros = macrosByLib.get(script);
|
|
97371
|
+
const macroBadge = libMacros ? " " + colors.magenta(`[ƒ macros: ${libMacros.map((m3) => m3.name).join(", ")}]`) : "";
|
|
97372
|
+
lines.push(`${prefix}${colors.bold(shortName(script))}${macroBadge}${triggerBadges(script)}${alsoOn}`);
|
|
96015
97373
|
const childPrefix = prefix.replace(/├─ $/, "│ ").replace(/└─ $/, " ");
|
|
97374
|
+
const macroConsumers = [...macroConsumersByLib.get(script) ?? []].sort((a2, b2) => a2.consumer.localeCompare(b2.consumer));
|
|
97375
|
+
macroConsumers.forEach(({ consumer, names }, i) => {
|
|
97376
|
+
const branch = i === macroConsumers.length - 1 ? "└─ƒ " : "├─ƒ ";
|
|
97377
|
+
lines.push(`${childPrefix}${branch}${shortName(consumer)} ${colors.dim(`(uses ${names.join(", ")})`)}`);
|
|
97378
|
+
});
|
|
96016
97379
|
const writes = [...writesByScript.get(script) ?? []].sort();
|
|
96017
97380
|
writes.forEach((uri, i) => {
|
|
96018
97381
|
const lastAsset = i === writes.length - 1;
|
|
@@ -96057,12 +97420,30 @@ async function waitJob(workspace, id) {
|
|
|
96057
97420
|
getStarted: false
|
|
96058
97421
|
});
|
|
96059
97422
|
if (r2.completed)
|
|
96060
|
-
return r2.success === true;
|
|
97423
|
+
return { ok: r2.success === true, result: r2.result };
|
|
96061
97424
|
} catch {}
|
|
96062
97425
|
await new Promise((res) => setTimeout(res, 100));
|
|
96063
97426
|
}
|
|
96064
97427
|
throw new Error(`Timed out waiting for job ${id}`);
|
|
96065
97428
|
}
|
|
97429
|
+
function formatJobFailure(result2) {
|
|
97430
|
+
if (result2 == null)
|
|
97431
|
+
return;
|
|
97432
|
+
const err = result2?.error;
|
|
97433
|
+
if (err && typeof err === "object") {
|
|
97434
|
+
const name = typeof err.name === "string" ? err.name : undefined;
|
|
97435
|
+
const message = typeof err.message === "string" ? err.message : undefined;
|
|
97436
|
+
if (message)
|
|
97437
|
+
return name ? `${name}: ${message}` : message;
|
|
97438
|
+
}
|
|
97439
|
+
if (typeof result2 === "string")
|
|
97440
|
+
return result2;
|
|
97441
|
+
try {
|
|
97442
|
+
return JSON.stringify(result2, null, 2);
|
|
97443
|
+
} catch {
|
|
97444
|
+
return;
|
|
97445
|
+
}
|
|
97446
|
+
}
|
|
96066
97447
|
async function resolveUploadArgs(bindings, scriptPath, workspaceId, local, localScripts) {
|
|
96067
97448
|
let schema;
|
|
96068
97449
|
const loadSchema = async () => {
|
|
@@ -96152,11 +97533,13 @@ async function run5(opts, folder) {
|
|
|
96152
97533
|
});
|
|
96153
97534
|
graph = built.graph;
|
|
96154
97535
|
localScripts = new Map(built.scripts.map((s2) => [s2.path, s2]));
|
|
96155
|
-
|
|
96156
|
-
|
|
96157
|
-
|
|
96158
|
-
|
|
96159
|
-
|
|
97536
|
+
if (!opts.dryRun) {
|
|
97537
|
+
try {
|
|
97538
|
+
const codebases = await listSyncCodebases(merged);
|
|
97539
|
+
const { buildPreviewTempScriptRefs: buildPreviewTempScriptRefs2 } = await init_generate_metadata().then(() => exports_generate_metadata);
|
|
97540
|
+
tempScriptRefs = await buildPreviewTempScriptRefs2(workspace, merged, codebases, { kind: "all" });
|
|
97541
|
+
} catch {}
|
|
97542
|
+
}
|
|
96160
97543
|
} else {
|
|
96161
97544
|
graph = await apiGet(`/w/${workspace.workspaceId}/assets/graph?folder=${encodeURIComponent(f3)}&asset_kinds=${ASSET_KINDS2}`);
|
|
96162
97545
|
await enrichDeployedNonAutorunTriggers(workspace.workspaceId, graph);
|
|
@@ -96191,7 +97574,17 @@ async function run5(opts, folder) {
|
|
|
96191
97574
|
}
|
|
96192
97575
|
merged[b2.param] = b2.value;
|
|
96193
97576
|
}
|
|
96194
|
-
const
|
|
97577
|
+
const macroLibPaths = new Set(graph.runnables.filter((r2) => r2.usage_kind === "script" && (r2.macros?.length ?? 0) > 0).map((r2) => r2.path));
|
|
97578
|
+
const notRunnablePaths = new Set(macroLibPaths);
|
|
97579
|
+
if (opts.local && localScripts) {
|
|
97580
|
+
for (const r2 of graph.runnables) {
|
|
97581
|
+
if (r2.usage_kind === "script" && !localScripts.has(r2.path)) {
|
|
97582
|
+
notRunnablePaths.add(r2.path);
|
|
97583
|
+
}
|
|
97584
|
+
}
|
|
97585
|
+
}
|
|
97586
|
+
const starts = new Set([...validStarts(graph), ...boundNodeIds].filter((id) => !notRunnablePaths.has(scriptPathOf(id))));
|
|
97587
|
+
const fromEligible = new Set([...validFromStarts(graph), ...boundNodeIds].filter((id) => !notRunnablePaths.has(scriptPathOf(id))));
|
|
96195
97588
|
let runAll = false;
|
|
96196
97589
|
let start;
|
|
96197
97590
|
if (opts.from) {
|
|
@@ -96203,8 +97596,17 @@ async function run5(opts, folder) {
|
|
|
96203
97596
|
}
|
|
96204
97597
|
throw new Error(`--from '${opts.from}' matched no script in f/${f3}.`);
|
|
96205
97598
|
}
|
|
96206
|
-
if (
|
|
96207
|
-
throw new Error(`--from '${opts.from}' is
|
|
97599
|
+
if (macroLibPaths.has(scriptPathOf(resolved))) {
|
|
97600
|
+
throw new Error(`--from '${opts.from}' is a \`// macros\` library — definition-only, injected into consuming scripts at run time, never a runnable step.`);
|
|
97601
|
+
}
|
|
97602
|
+
if (notRunnablePaths.has(scriptPathOf(resolved))) {
|
|
97603
|
+
throw new Error(`--from '${opts.from}' isn't a \`// pipeline\` script — it appears in the local graph only as a macro consumer (lineage). Mark it \`// pipeline\` to run it.`);
|
|
97604
|
+
}
|
|
97605
|
+
if (!resolved.startsWith("script:")) {
|
|
97606
|
+
throw new Error(`--from '${opts.from}' is an asset, not a runnable — start a run from a script (assets are produced, not run).`);
|
|
97607
|
+
}
|
|
97608
|
+
if (!fromEligible.has(resolved)) {
|
|
97609
|
+
throw new Error(`--from '${opts.from}' can't start a run: row-backed event triggers (kafka/mqtt/nats/postgres/sqs/gcp/email) and input-only entrypoints (webhook/data_upload) fan out per-event or need caller-supplied input — bind it with --upload to run it.`);
|
|
96208
97610
|
}
|
|
96209
97611
|
start = resolved;
|
|
96210
97612
|
} else if (starts.size === 1) {
|
|
@@ -96235,7 +97637,7 @@ async function run5(opts, folder) {
|
|
|
96235
97637
|
}
|
|
96236
97638
|
const idLabel = (id) => id.startsWith("script:") ? scriptPathOf(id) : id;
|
|
96237
97639
|
const dag = buildLineageDag(graph);
|
|
96238
|
-
const barriers = new Set([...nonAutorunTriggerScripts(graph)].filter((id) => !starts.has(id)));
|
|
97640
|
+
const barriers = new Set([...nonAutorunTriggerScripts(graph)].filter((id) => !starts.has(id) && id !== start));
|
|
96239
97641
|
let selectedScripts;
|
|
96240
97642
|
let reachableEnds = [];
|
|
96241
97643
|
let droppedEnds = [];
|
|
@@ -96260,6 +97662,8 @@ async function run5(opts, folder) {
|
|
|
96260
97662
|
}
|
|
96261
97663
|
}
|
|
96262
97664
|
}
|
|
97665
|
+
for (const p3 of notRunnablePaths)
|
|
97666
|
+
selectedScripts.delete(p3);
|
|
96263
97667
|
const { order, cyclic } = topoOrder(graph, selectedScripts);
|
|
96264
97668
|
if (cyclic.length > 0) {
|
|
96265
97669
|
warn(`Skipping ${cyclic.length} script(s) on a dependency cycle: ${cyclic.sort().join(", ")}`);
|
|
@@ -96360,9 +97764,13 @@ async function run5(opts, folder) {
|
|
|
96360
97764
|
requestBody: nodeArgs
|
|
96361
97765
|
});
|
|
96362
97766
|
}
|
|
96363
|
-
const ok = await waitJob(workspace.workspaceId, id);
|
|
97767
|
+
const { ok, result: result2 } = await waitJob(workspace.workspaceId, id);
|
|
96364
97768
|
if (!ok) {
|
|
96365
|
-
|
|
97769
|
+
const detail = formatJobFailure(result2);
|
|
97770
|
+
const runUrl = `${workspace.remote}run/${id}?workspace=${workspace.workspaceId}`;
|
|
97771
|
+
throw new Error(`Bounded run failed at ${nodePath2} (job ${id}).` + (detail ? `
|
|
97772
|
+
${detail}` : "") + `
|
|
97773
|
+
Full logs: ${runUrl}`);
|
|
96366
97774
|
}
|
|
96367
97775
|
if (!opts.json)
|
|
96368
97776
|
info(colors.green(` ✓ ${nodePath2}`));
|
|
@@ -96371,7 +97779,7 @@ async function run5(opts, folder) {
|
|
|
96371
97779
|
info(colors.green.bold(`Bounded run complete — ${order.length} script(s) succeeded.`));
|
|
96372
97780
|
}
|
|
96373
97781
|
}
|
|
96374
|
-
var command42 = new Command().description("inspect asset-driven pipelines (scripts marked `// pipeline`, wired by `// on <spec>` annotations)").command("list", "list pipeline folders in the workspace").option("--json", "Output as JSON (for piping to jq)").action(list18).command("show", "render a pipeline folder's DAG (sources, lineage, subscriptions) in the terminal").arguments("<folder:string>").option("--json", "Output the raw asset graph as JSON").option("--local", "Build the graph from local working-tree files (// pipeline scripts) instead of the deployed workspace — no deploy needed.").action(show2).command("run", "run a
|
|
97782
|
+
var command42 = new Command().description("inspect asset-driven pipelines (scripts marked `// pipeline`, wired by `// on <spec>` annotations)").command("list", "list pipeline folders in the workspace").option("--json", "Output as JSON (for piping to jq)").action(list18).command("show", "render a pipeline folder's DAG (sources, lineage, subscriptions) in the terminal").arguments("<folder:string>").option("--json", "Output the raw asset graph as JSON").option("--local", "Build the graph from local working-tree files (// pipeline scripts) instead of the deployed workspace — no deploy needed.").action(show2).command("run", "run a cascade: from --from (a root OR any mid-DAG model), fan downstream up to the --to end node(s)").arguments("<folder:string>").option("--from <script:string>", "Start script (short name or path). May be any node, including a mid-DAG model — that node plus its transitive downstream runs, upstream is NOT re-run (dbt `--select model+`). Defaults to the folder's sole schedule/manual root.").option("--to <node:string>", "End node(s) to stop at — script names/paths or asset URIs (e.g. datatable://main/staged). Repeatable or comma-separated. Omit to run the full downstream.", { collect: true }).option("--dry-run", "Print the topological run plan without executing.").option("--json", "Output the plan as JSON (for piping to jq).").option("--local", "Run the local working-tree scripts via preview (no deploy) instead of the deployed versions; the graph is built from local files.").option("--upload <binding:string>", "Bind an object to a data_upload/webhook entry point so it runs in the cascade, as SCRIPT[:PARAM]=SOURCE (SOURCE is a local file or an s3://key). Local files are uploaded to the workspace store; the S3Object param is inferred when the script has exactly one. Repeatable.", { collect: true }).option("--arg <binding:string>", "Pass a plain run arg to a script in the cascade, as SCRIPT:PARAM=VALUE (VALUE is parsed as JSON when possible, else taken as a string — e.g. daily_report:partition=2026-07-02). Repeatable.", { collect: true }).option("--partition <value:string>", "Partition value for `// partitioned` scripts in the run (e.g. 2026-06-30) — use it to backfill a past slice. With --local, time kinds (daily/hourly/weekly/monthly) default to the current UTC period when omitted; `dynamic` always needs it. Deployed runs without it defer to backend run-start resolution.").action(run5).command("docs", "generate PIPELINE.md (+ AGENTS.md pointer) describing a folder's pipeline graph and datatable schemas, for an editor / agentic loop").arguments("<folder:string>").option("--local", "Build the graph from local working-tree files instead of the deployed workspace.").action(generatePipelineDocs).command("dev", dev_default3);
|
|
96375
97783
|
var pipeline_default = command42;
|
|
96376
97784
|
|
|
96377
97785
|
// src/commands/ducklake/ducklake.ts
|