From a97ed6004094504e9dfdf9f3e3370f764a2ea5d3 Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Wed, 12 Mar 2025 15:10:39 +0000 Subject: [PATCH 01/17] wip --- packages/pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pro b/packages/pro index a44aec4935..4942b9b822 160000 --- a/packages/pro +++ b/packages/pro @@ -1 +1 @@ -Subproject commit a44aec4935713412feaaddb50b5075a5e748c575 +Subproject commit 4942b9b82276bad2e37fa084707ec95fa9b6a9ad From aba313c5f8d79b4a2c5a66b522a4ccd84c29bd66 Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Tue, 18 Mar 2025 17:49:33 +0000 Subject: [PATCH 02/17] More LLM refactoring. --- packages/backend-core/src/environment.ts | 1 + packages/pro | 2 +- .../server/src/automations/steps/openai.ts | 15 ++-------- .../src/utilities/rowProcessor/utils.ts | 13 ++------- packages/types/src/documents/global/config.ts | 28 ++++++++++++------- packages/types/src/sdk/licensing/license.ts | 1 + 6 files changed, 27 insertions(+), 33 deletions(-) diff --git a/packages/backend-core/src/environment.ts b/packages/backend-core/src/environment.ts index 9a46758062..0a5fcc0707 100644 --- a/packages/backend-core/src/environment.ts +++ b/packages/backend-core/src/environment.ts @@ -163,6 +163,7 @@ const environment = { ACCOUNT_PORTAL_URL: process.env.ACCOUNT_PORTAL_URL || "https://account.budibase.app", ACCOUNT_PORTAL_API_KEY: process.env.ACCOUNT_PORTAL_API_KEY || "", + BUDICLOUD_URL: process.env.BUDICLOUD_URL || "https://budibase.app", DISABLE_ACCOUNT_PORTAL: process.env.DISABLE_ACCOUNT_PORTAL, SELF_HOSTED: selfHosted, COOKIE_DOMAIN: process.env.COOKIE_DOMAIN, diff --git a/packages/pro b/packages/pro index f709bb6a07..582049785a 160000 --- a/packages/pro +++ b/packages/pro @@ -1 +1 @@ -Subproject commit f709bb6a07483785c32ebb6f186709450d735ec3 +Subproject commit 582049785a97dd66082d7d9d788a8078f2ac5509 diff --git a/packages/server/src/automations/steps/openai.ts b/packages/server/src/automations/steps/openai.ts index 55f57aff7c..212a960e6a 100644 --- a/packages/server/src/automations/steps/openai.ts +++ b/packages/server/src/automations/steps/openai.ts @@ -41,18 +41,9 @@ export async function run({ try { let response - const customConfigsEnabled = await pro.features.isAICustomConfigsEnabled() - const budibaseAIEnabled = await pro.features.isBudibaseAIEnabled() - - let llmWrapper - if (budibaseAIEnabled || customConfigsEnabled) { - llmWrapper = await pro.ai.LargeLanguageModel.forCurrentTenant( - inputs.model - ) - } - - response = llmWrapper?.llm - ? await llmWrapper.run(inputs.prompt) + const llm = await pro.ai.getLLM(inputs.model) + response = llm + ? (await llm.prompt(inputs.prompt)).message : await legacyOpenAIPrompt(inputs) return { diff --git a/packages/server/src/utilities/rowProcessor/utils.ts b/packages/server/src/utilities/rowProcessor/utils.ts index 7d2f8b49f4..41f88b0a33 100644 --- a/packages/server/src/utilities/rowProcessor/utils.ts +++ b/packages/server/src/utilities/rowProcessor/utils.ts @@ -126,10 +126,8 @@ export async function processAIColumns( const numRows = Array.isArray(inputRows) ? inputRows.length : 1 span?.addTags({ table_id: table._id, numRows }) const rows = Array.isArray(inputRows) ? inputRows : [inputRows] - const llmWrapper = await pro.ai.LargeLanguageModel.forCurrentTenant( - "gpt-4o-mini" - ) - if (rows && llmWrapper.llm) { + const llm = await pro.ai.getLLM() + if (rows && llm) { // Ensure we have snippet context await context.ensureSnippetContext() @@ -153,14 +151,9 @@ export async function processAIColumns( } } - const prompt = llmWrapper.buildPromptFromAIOperation({ - schema: aiSchema, - row, - }) - return tracer.trace("processAIColumn", {}, async span => { span?.addTags({ table_id: table._id, column }) - const llmResponse = await llmWrapper.run(prompt) + const llmResponse = await llm.operation(aiSchema, row) return { ...row, [column]: llmResponse, diff --git a/packages/types/src/documents/global/config.ts b/packages/types/src/documents/global/config.ts index 1ad20e291f..480d45b33e 100644 --- a/packages/types/src/documents/global/config.ts +++ b/packages/types/src/documents/global/config.ts @@ -110,18 +110,26 @@ export interface SCIMInnerConfig { export interface SCIMConfig extends Config {} -export type AIProvider = "OpenAI" | "Anthropic" | "TogetherAI" | "Custom" +export type AIProvider = + | "OpenAI" + | "Anthropic" + | "AzureOpenAI" + | "TogetherAI" + | "Custom" + +export interface ProviderConfig { + provider: AIProvider + isDefault: boolean + isBudibaseAI?: boolean + name: string + active: boolean + baseUrl?: string + apiKey?: string + defaultModel?: string +} export interface AIInnerConfig { - [key: string]: { - provider: AIProvider - isDefault: boolean - name: string - active: boolean - baseUrl?: string - apiKey?: string - defaultModel?: string - } + [key: string]: ProviderConfig } export interface AIConfig extends Config {} diff --git a/packages/types/src/sdk/licensing/license.ts b/packages/types/src/sdk/licensing/license.ts index 105c3680a3..c51fa33203 100644 --- a/packages/types/src/sdk/licensing/license.ts +++ b/packages/types/src/sdk/licensing/license.ts @@ -17,4 +17,5 @@ export interface License { plan: PurchasedPlan billing?: Billing testClockId?: string + tenantId?: string } From ef263a13c54a1f8ca8125d14a0cd848dd95f0f2f Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Mon, 24 Mar 2025 09:48:30 +0000 Subject: [PATCH 03/17] Fix tests. --- packages/server/src/utilities/rowProcessor/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/src/utilities/rowProcessor/utils.ts b/packages/server/src/utilities/rowProcessor/utils.ts index 41f88b0a33..eb731bca30 100644 --- a/packages/server/src/utilities/rowProcessor/utils.ts +++ b/packages/server/src/utilities/rowProcessor/utils.ts @@ -156,7 +156,7 @@ export async function processAIColumns( const llmResponse = await llm.operation(aiSchema, row) return { ...row, - [column]: llmResponse, + [column]: llmResponse.message, } }) }) From a6d3301da59e0131acbf228cc8fa85e9dd5c3055 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Mon, 24 Mar 2025 13:30:34 +0000 Subject: [PATCH 04/17] Fixes an issue when using double quotes as const char wrapper, this is allowed by default in MySQL. --- .../server/src/integrations/queries/sql.ts | 28 ++++++++++++++++--- packages/server/src/threads/query.ts | 12 ++++++-- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/packages/server/src/integrations/queries/sql.ts b/packages/server/src/integrations/queries/sql.ts index f6b0d68e7f..4b6fd378fb 100644 --- a/packages/server/src/integrations/queries/sql.ts +++ b/packages/server/src/integrations/queries/sql.ts @@ -1,10 +1,30 @@ import { findHBSBlocks } from "@budibase/string-templates" -import { DatasourcePlus } from "@budibase/types" +import { DatasourcePlus, SourceName } from "@budibase/types" import sdk from "../../sdk" -const CONST_CHAR_REGEX = new RegExp("'[^']*'", "g") +function getConstCharRegex(sourceName: SourceName) { + // MySQL clients support ANSI_QUOTES mode off, this is by default + // but " and ' count as string literals + if (sourceName === SourceName.MYSQL) { + return new RegExp(`"[^"]*"|'[^']*'`, "g") + } else { + return new RegExp(`'[^']*'`, "g") + } +} + +function getBindingWithinConstCharRegex( + sourceName: SourceName, + binding: string +) { + if (sourceName === SourceName.MYSQL) { + return new RegExp(`[^']*${binding}[^']*'|"[^"]*${binding}[^"]*"`, "g") + } else { + return new RegExp(`'[^']*${binding}[^']*'`) + } +} export async function interpolateSQL( + sourceName: SourceName, fields: { sql: string; bindings: any[] }, parameters: { [key: string]: any }, integration: DatasourcePlus, @@ -24,10 +44,10 @@ export async function interpolateSQL( ) // check if the variable was used as part of a string concat e.g. 'Hello {{binding}}' // start by finding all the instances of const character strings - const charConstMatch = sql.match(CONST_CHAR_REGEX) || [] + const charConstMatch = sql.match(getConstCharRegex(sourceName)) || [] // now look within them to see if a binding is used const charConstBindingMatch = charConstMatch.find((string: any) => - string.match(new RegExp(`'[^']*${binding}[^']*'`)) + string.match(getBindingWithinConstCharRegex(sourceName, binding)) ) if (charConstBindingMatch) { let [part1, part2] = charConstBindingMatch.split(binding) diff --git a/packages/server/src/threads/query.ts b/packages/server/src/threads/query.ts index 3ba4995b2c..59c4b6dc89 100644 --- a/packages/server/src/threads/query.ts +++ b/packages/server/src/threads/query.ts @@ -112,9 +112,15 @@ class QueryRunner { let query: Record // handle SQL injections by interpolating the variables if (isSQL(datasourceClone)) { - query = await interpolateSQL(fieldsClone, enrichedContext, integration, { - nullDefaultSupport, - }) + query = await interpolateSQL( + datasource.source, + fieldsClone, + enrichedContext, + integration, + { + nullDefaultSupport, + } + ) } else { query = await sdk.queries.enrichContext(fieldsClone, enrichedContext) } From 3c4a68ff03916e2e60bfbbc9bed7864d43f3fced Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Mon, 24 Mar 2025 13:30:45 +0000 Subject: [PATCH 05/17] Test case for this. --- .../routes/tests/queries/generic-sql.spec.ts | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/packages/server/src/api/routes/tests/queries/generic-sql.spec.ts b/packages/server/src/api/routes/tests/queries/generic-sql.spec.ts index 4a545b253e..59a9b98ff9 100644 --- a/packages/server/src/api/routes/tests/queries/generic-sql.spec.ts +++ b/packages/server/src/api/routes/tests/queries/generic-sql.spec.ts @@ -16,7 +16,7 @@ const descriptions = datasourceDescribe({ if (descriptions.length) { describe.each(descriptions)( "queries ($dbName)", - ({ config, dsProvider, isOracle, isMSSQL, isPostgres }) => { + ({ config, dsProvider, isOracle, isMSSQL, isPostgres, isMySQL }) => { let rawDatasource: Datasource let datasource: Datasource let client: Knex @@ -217,6 +217,38 @@ if (descriptions.length) { expect(res).toBeDefined() }) }) + + isMySQL && + it("should handle ANSI_QUOTE=off MySQL queries with bindings", async () => { + const query = await createQuery({ + fields: { + sql: client(tableName) + .select("*") + .where({ + name: client.raw("'{{ name }}'"), + }) + .toString(), + }, + parameters: [ + { + name: "name", + default: "", + }, + ], + queryVerb: "read", + }) + const res = await config.api.query.execute( + query._id!, + { + parameters: { name: "one" }, + }, + { + status: 200, + } + ) + expect(res.data.length).toEqual(1) + expect(res.data[0].name).toEqual("one") + }) }) describe("preview", () => { From da33f4f89bbf929f19d26edc6203692493acd081 Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Mon, 24 Mar 2025 13:43:02 +0000 Subject: [PATCH 06/17] Update pro reference. --- packages/pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pro b/packages/pro index 582049785a..6dc3bda535 160000 --- a/packages/pro +++ b/packages/pro @@ -1 +1 @@ -Subproject commit 582049785a97dd66082d7d9d788a8078f2ac5509 +Subproject commit 6dc3bda5351989872356037be23ce717d13a29a5 From 713a081543aa9bb03ada333669bf41f08d36d417 Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Mon, 24 Mar 2025 13:49:54 +0000 Subject: [PATCH 07/17] Update pro reference. --- packages/pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pro b/packages/pro index 6dc3bda535..83bf6474e7 160000 --- a/packages/pro +++ b/packages/pro @@ -1 +1 @@ -Subproject commit 6dc3bda5351989872356037be23ce717d13a29a5 +Subproject commit 83bf6474e70db9e8999d9bdfa76ff523b7873af1 From d0f4c8f52dd3549d68e38e82c4d83794d8e19b0b Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Mon, 24 Mar 2025 13:52:23 +0000 Subject: [PATCH 08/17] Remove AI column test in utils.spec.ts, case is covered in row.spec.ts. --- .../rowProcessor/tests/utils.spec.ts | 76 +------------------ 1 file changed, 1 insertion(+), 75 deletions(-) diff --git a/packages/server/src/utilities/rowProcessor/tests/utils.spec.ts b/packages/server/src/utilities/rowProcessor/tests/utils.spec.ts index fa674fcc52..49dd05910d 100644 --- a/packages/server/src/utilities/rowProcessor/tests/utils.spec.ts +++ b/packages/server/src/utilities/rowProcessor/tests/utils.spec.ts @@ -1,30 +1,11 @@ -import { fixAutoColumnSubType, processAIColumns } from "../utils" +import { fixAutoColumnSubType } from "../utils" import { AutoFieldDefaultNames } from "../../../constants" import { - AIOperationEnum, AutoFieldSubType, FieldSchema, FieldType, - INTERNAL_TABLE_SOURCE_ID, RelationshipType, - Table, - TableSourceType, } from "@budibase/types" -import { generator } from "@budibase/backend-core/tests" - -const buildPromptMock = jest.fn() - -jest.mock("@budibase/pro", () => ({ - ai: { - LargeLanguageModel: { - forCurrentTenant: async () => ({ - llm: {}, - run: jest.fn(() => "response from LLM"), - buildPromptFromAIOperation: buildPromptMock, - }), - }, - }, -})) describe("rowProcessor utility", () => { describe("fixAutoColumnSubType", () => { @@ -79,59 +60,4 @@ describe("rowProcessor utility", () => { expect(fixAutoColumnSubType(schema)).toEqual(schema) }) }) - - describe("processAIColumns", () => { - it("ensures that bindable inputs are mapped and passed to to LLM prompt generation", async () => { - const table: Table = { - _id: generator.guid(), - name: "AITestTable", - type: "table", - sourceId: INTERNAL_TABLE_SOURCE_ID, - sourceType: TableSourceType.INTERNAL, - schema: { - product: { - type: FieldType.STRING, - name: "product", - constraints: { - presence: true, - type: "string", - }, - }, - aicol: { - type: FieldType.AI, - name: "aicol", - operation: AIOperationEnum.PROMPT, - prompt: "Translate '{{ product }}' into German", - }, - }, - } - - const inputRows = [ - { - product: "Car Battery", - }, - ] - - const result = await processAIColumns(table, inputRows, { - contextRows: inputRows, - }) - expect(buildPromptMock).toHaveBeenCalledWith({ - row: { - product: "Car Battery", - }, - schema: { - name: "aicol", - operation: "PROMPT", - prompt: "Translate 'Car Battery' into German", - type: "ai", - }, - }) - expect(result).toEqual([ - { - aicol: "response from LLM", - product: "Car Battery", - }, - ]) - }) - }) }) From 5b7033e5b50874c21618d75f90efd8455df5c7fa Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Mon, 24 Mar 2025 14:23:28 +0000 Subject: [PATCH 09/17] Update pro reference. --- packages/pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pro b/packages/pro index 83bf6474e7..81386c4f4c 160000 --- a/packages/pro +++ b/packages/pro @@ -1 +1 @@ -Subproject commit 83bf6474e70db9e8999d9bdfa76ff523b7873af1 +Subproject commit 81386c4f4cb0526d27bb54e7414a4f6bc1c3a160 From 0de99907995ac3c9ec4844b7461557d137144296 Mon Sep 17 00:00:00 2001 From: jvcalderon Date: Mon, 24 Mar 2025 15:25:42 +0100 Subject: [PATCH 10/17] Multi-tenant functionality will need the tenantId in GetLicenseRequest --- packages/types/src/api/account/license.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/types/src/api/account/license.ts b/packages/types/src/api/account/license.ts index 342e4882e6..9f3a96c6bd 100644 --- a/packages/types/src/api/account/license.ts +++ b/packages/types/src/api/account/license.ts @@ -6,6 +6,7 @@ export interface GetLicenseRequest { // All fields should be optional to cater for // historical versions of budibase quotaUsage?: QuotaUsage + tenantId?: string install: { id: string tenantId: string From 465e0140a80ba731f98afe7ee228084477a64ff8 Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Mon, 24 Mar 2025 14:45:43 +0000 Subject: [PATCH 11/17] Attempt to fix build error. --- packages/server/src/automations/steps/openai.ts | 4 ++-- packages/server/src/utilities/rowProcessor/utils.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/server/src/automations/steps/openai.ts b/packages/server/src/automations/steps/openai.ts index 212a960e6a..fc61af92df 100644 --- a/packages/server/src/automations/steps/openai.ts +++ b/packages/server/src/automations/steps/openai.ts @@ -3,7 +3,7 @@ import { OpenAI } from "openai" import { OpenAIStepInputs, OpenAIStepOutputs } from "@budibase/types" import { env } from "@budibase/backend-core" import * as automationUtils from "../automationUtils" -import * as pro from "@budibase/pro" +import { ai } from "@budibase/pro" /** * Maintains backward compatibility with automation steps created before the introduction @@ -41,7 +41,7 @@ export async function run({ try { let response - const llm = await pro.ai.getLLM(inputs.model) + const llm = await ai.getLLM(inputs.model) response = llm ? (await llm.prompt(inputs.prompt)).message : await legacyOpenAIPrompt(inputs) diff --git a/packages/server/src/utilities/rowProcessor/utils.ts b/packages/server/src/utilities/rowProcessor/utils.ts index eb731bca30..8344ca5ce1 100644 --- a/packages/server/src/utilities/rowProcessor/utils.ts +++ b/packages/server/src/utilities/rowProcessor/utils.ts @@ -15,7 +15,7 @@ import { import { OperationFields } from "@budibase/shared-core" import tracer from "dd-trace" import { context } from "@budibase/backend-core" -import * as pro from "@budibase/pro" +import { ai } from "@budibase/pro" import { coerce } from "./index" interface FormulaOpts { @@ -126,7 +126,7 @@ export async function processAIColumns( const numRows = Array.isArray(inputRows) ? inputRows.length : 1 span?.addTags({ table_id: table._id, numRows }) const rows = Array.isArray(inputRows) ? inputRows : [inputRows] - const llm = await pro.ai.getLLM() + const llm = await ai.getLLM() if (rows && llm) { // Ensure we have snippet context await context.ensureSnippetContext() From c0134600307769bc8635d3321629515bc769a8a5 Mon Sep 17 00:00:00 2001 From: jvcalderon Date: Mon, 24 Mar 2025 15:46:24 +0100 Subject: [PATCH 12/17] Solves wrong user/creator calculation on app init --- packages/backend-core/src/users/db.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/backend-core/src/users/db.ts b/packages/backend-core/src/users/db.ts index 677feed678..ac3c9e30ab 100644 --- a/packages/backend-core/src/users/db.ts +++ b/packages/backend-core/src/users/db.ts @@ -261,9 +261,13 @@ export class UserDB { } } - const change = dbUser ? 0 : 1 // no change if there is existing user - + let change = 1 let creatorsChange = 0 + if (opts.isAccountHolder || dbUser) { + change = 0 + creatorsChange = 1 + } + if (dbUser) { const [isDbUserCreator, isUserCreator] = await creatorsInList([ dbUser, From 8196b1a1f2f4128e4f94a782c51cc87efe7c940e Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Mon, 24 Mar 2025 14:52:46 +0000 Subject: [PATCH 13/17] Review comments. --- packages/server/src/integrations/queries/sql.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/server/src/integrations/queries/sql.ts b/packages/server/src/integrations/queries/sql.ts index 4b6fd378fb..e7419ea403 100644 --- a/packages/server/src/integrations/queries/sql.ts +++ b/packages/server/src/integrations/queries/sql.ts @@ -2,13 +2,16 @@ import { findHBSBlocks } from "@budibase/string-templates" import { DatasourcePlus, SourceName } from "@budibase/types" import sdk from "../../sdk" +const MYSQL_CONST_CHAR_REGEX = new RegExp(`"[^"]*"|'[^']*'`, "g") +const CONST_CHAR_REGEX = new RegExp(`'[^']*'`, "g") + function getConstCharRegex(sourceName: SourceName) { // MySQL clients support ANSI_QUOTES mode off, this is by default // but " and ' count as string literals if (sourceName === SourceName.MYSQL) { - return new RegExp(`"[^"]*"|'[^']*'`, "g") + return MYSQL_CONST_CHAR_REGEX } else { - return new RegExp(`'[^']*'`, "g") + return CONST_CHAR_REGEX } } From e3cf6dd362f972ed56657d387fc277a995a7df45 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Mon, 24 Mar 2025 16:31:29 +0100 Subject: [PATCH 14/17] Move pro resolutions to packages using it --- package.json | 1 - packages/server/package.json | 3 +++ packages/worker/package.json | 3 +++ yarn.lock | 22 ---------------------- 4 files changed, 6 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index d083dbad90..0bf3c29b2b 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,6 @@ "@budibase/shared-core": "*", "@budibase/string-templates": "*", "@budibase/types": "*", - "@budibase/pro": "npm:@budibase/pro@latest", "tough-cookie": "4.1.3", "node-fetch": "2.6.7", "semver": "7.5.3", diff --git a/packages/server/package.json b/packages/server/package.json index 38dd746c4f..ee89218c52 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -182,6 +182,9 @@ "yargs": "^13.2.4", "zod": "^3.23.8" }, + "resolutions": { + "@budibase/pro": "npm:@budibase/pro@latest" + }, "nx": { "targets": { "dev": { diff --git a/packages/worker/package.json b/packages/worker/package.json index b67e8d4911..7af2a4cdd6 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -102,6 +102,9 @@ "typescript": "5.7.2", "update-dotenv": "1.1.1" }, + "resolutions": { + "@budibase/pro": "npm:@budibase/pro@latest" + }, "nx": { "targets": { "dev": { diff --git a/yarn.lock b/yarn.lock index 7b855ecf15..2fa83c1deb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2795,28 +2795,6 @@ pouchdb-promise "^6.0.4" through2 "^2.0.0" -"@budibase/pro@npm:@budibase/pro@latest": - version "3.4.22" - resolved "https://registry.yarnpkg.com/@budibase/pro/-/pro-3.4.22.tgz#943f23cb7056041bc1f433ee60b3d093145e7a4a" - integrity sha512-Du3iZsmRLopfoi2SvxQyY1P2Su3Nw0WbITOrKmZFsVLjZ9MzzTZs0Ph/SJHzrfJpM7rn9+8788BLSf3Z3l9KcQ== - dependencies: - "@anthropic-ai/sdk" "^0.27.3" - "@budibase/backend-core" "*" - "@budibase/shared-core" "*" - "@budibase/string-templates" "*" - "@budibase/types" "*" - "@koa/router" "13.1.0" - bull "4.10.1" - dd-trace "5.26.0" - joi "17.6.0" - jsonwebtoken "9.0.2" - lru-cache "^7.14.1" - memorystream "^0.3.1" - node-fetch "2.6.7" - openai "4.59.0" - scim-patch "^0.8.1" - scim2-parse-filter "^0.2.8" - "@budibase/vm-browserify@^1.1.4": version "1.1.4" resolved "https://registry.yarnpkg.com/@budibase/vm-browserify/-/vm-browserify-1.1.4.tgz#eecb001bd9521cb7647e26fb4d2d29d0a4dce262" From f62299b5aea06ba103b2a654d2811e2a5e3277fb Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Mon, 24 Mar 2025 16:01:56 +0000 Subject: [PATCH 15/17] Update pro reference. --- packages/pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pro b/packages/pro index 81386c4f4c..2991addf93 160000 --- a/packages/pro +++ b/packages/pro @@ -1 +1 @@ -Subproject commit 81386c4f4cb0526d27bb54e7414a4f6bc1c3a160 +Subproject commit 2991addf939f2b6fb1a258616056f2931348c09b From 4b410661dc12ee511efe48357ca18cae89d7b79d Mon Sep 17 00:00:00 2001 From: jvcalderon Date: Mon, 24 Mar 2025 17:10:06 +0100 Subject: [PATCH 16/17] Update pro submodule --- packages/pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pro b/packages/pro index f709bb6a07..2991addf93 160000 --- a/packages/pro +++ b/packages/pro @@ -1 +1 @@ -Subproject commit f709bb6a07483785c32ebb6f186709450d735ec3 +Subproject commit 2991addf939f2b6fb1a258616056f2931348c09b From 5c03a38b441fe4274b8ffda670e1412e2cfb7268 Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Mon, 24 Mar 2025 16:54:05 +0000 Subject: [PATCH 17/17] Update pro reference. --- packages/pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pro b/packages/pro index 2991addf93..761ec71e15 160000 --- a/packages/pro +++ b/packages/pro @@ -1 +1 @@ -Subproject commit 2991addf939f2b6fb1a258616056f2931348c09b +Subproject commit 761ec71e1543ef04887d6515f99a2c2911999ebf