@base44-preview/cli 0.0.38-pr.330.d128357 → 0.0.38-pr.362.72930b8

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/dist/cli/index.js CHANGED
@@ -18040,7 +18040,7 @@ var require_lodash = __commonJS((exports, module) => {
18040
18040
  }
18041
18041
  return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, undefined2, comparator) : [];
18042
18042
  });
18043
- function join14(array2, separator) {
18043
+ function join12(array2, separator) {
18044
18044
  return array2 == null ? "" : nativeJoin.call(array2, separator);
18045
18045
  }
18046
18046
  function last(array2) {
@@ -18062,7 +18062,7 @@ var require_lodash = __commonJS((exports, module) => {
18062
18062
  function nth(array2, n2) {
18063
18063
  return array2 && array2.length ? baseNth(array2, toInteger(n2)) : undefined2;
18064
18064
  }
18065
- var pull2 = baseRest(pullAll);
18065
+ var pull = baseRest(pullAll);
18066
18066
  function pullAll(array2, values2) {
18067
18067
  return array2 && array2.length && values2 && values2.length ? basePullAll(array2, values2) : array2;
18068
18068
  }
@@ -19827,7 +19827,7 @@ __p += '`;
19827
19827
  lodash.pickBy = pickBy;
19828
19828
  lodash.property = property;
19829
19829
  lodash.propertyOf = propertyOf;
19830
- lodash.pull = pull2;
19830
+ lodash.pull = pull;
19831
19831
  lodash.pullAll = pullAll;
19832
19832
  lodash.pullAllBy = pullAllBy;
19833
19833
  lodash.pullAllWith = pullAllWith;
@@ -19972,7 +19972,7 @@ __p += '`;
19972
19972
  lodash.isUndefined = isUndefined;
19973
19973
  lodash.isWeakMap = isWeakMap;
19974
19974
  lodash.isWeakSet = isWeakSet;
19975
- lodash.join = join14;
19975
+ lodash.join = join12;
19976
19976
  lodash.kebabCase = kebabCase2;
19977
19977
  lodash.last = last;
19978
19978
  lodash.lastIndexOf = lastIndexOf;
@@ -20601,7 +20601,7 @@ function cleanDoc(doc2) {
20601
20601
  return mapDoc(doc2, (currentDoc) => cleanDocFn(currentDoc));
20602
20602
  }
20603
20603
  function replaceEndOfLine(doc2, replacement = literalline) {
20604
- return mapDoc(doc2, (currentDoc) => typeof currentDoc === "string" ? join14(replacement, currentDoc.split(`
20604
+ return mapDoc(doc2, (currentDoc) => typeof currentDoc === "string" ? join12(replacement, currentDoc.split(`
20605
20605
  `)) : currentDoc);
20606
20606
  }
20607
20607
  function canBreakFn(doc2) {
@@ -20681,7 +20681,7 @@ function indentIfBreak(contents, options) {
20681
20681
  negate: options.negate
20682
20682
  };
20683
20683
  }
20684
- function join14(separator, docs) {
20684
+ function join12(separator, docs) {
20685
20685
  assertDoc(separator);
20686
20686
  assertDocArray(docs);
20687
20687
  const parts = [];
@@ -21392,7 +21392,7 @@ var init_doc = __esm(() => {
21392
21392
  MODE_FLAT = Symbol("MODE_FLAT");
21393
21393
  DOC_FILL_PRINTED_LENGTH = Symbol("DOC_FILL_PRINTED_LENGTH");
21394
21394
  builders = {
21395
- join: join14,
21395
+ join: join12,
21396
21396
  line,
21397
21397
  softline,
21398
21398
  hardline,
@@ -126306,7 +126306,7 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
126306
126306
  return mapDoc2(doc2, (currentDoc) => cleanDocFn2(currentDoc));
126307
126307
  }
126308
126308
  function replaceEndOfLine2(doc2, replacement = literalline2) {
126309
- return mapDoc2(doc2, (currentDoc) => typeof currentDoc === "string" ? join16(replacement, currentDoc.split(`
126309
+ return mapDoc2(doc2, (currentDoc) => typeof currentDoc === "string" ? join14(replacement, currentDoc.split(`
126310
126310
  `)) : currentDoc);
126311
126311
  }
126312
126312
  function canBreakFn2(doc2) {
@@ -126392,7 +126392,7 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
126392
126392
  negate: options8.negate
126393
126393
  };
126394
126394
  }
126395
- function join16(separator, docs) {
126395
+ function join14(separator, docs) {
126396
126396
  assertDoc2(separator);
126397
126397
  assertDocArray2(docs);
126398
126398
  const parts = [];
@@ -127057,7 +127057,7 @@ Expected it to be ${EXPECTED_TYPE_VALUES}.`;
127057
127057
  }
127058
127058
  }
127059
127059
  var builders2 = {
127060
- join: join16,
127060
+ join: join14,
127061
127061
  line: line3,
127062
127062
  softline: softline2,
127063
127063
  hardline: hardline4,
@@ -156272,10 +156272,10 @@ var require_view = __commonJS((exports, module) => {
156272
156272
  var debug = require_src4()("express:view");
156273
156273
  var path18 = __require("node:path");
156274
156274
  var fs28 = __require("node:fs");
156275
- var dirname13 = path18.dirname;
156275
+ var dirname12 = path18.dirname;
156276
156276
  var basename4 = path18.basename;
156277
156277
  var extname2 = path18.extname;
156278
- var join17 = path18.join;
156278
+ var join15 = path18.join;
156279
156279
  var resolve6 = path18.resolve;
156280
156280
  module.exports = View;
156281
156281
  function View(name2, options8) {
@@ -156311,7 +156311,7 @@ var require_view = __commonJS((exports, module) => {
156311
156311
  for (var i5 = 0;i5 < roots.length && !path19; i5++) {
156312
156312
  var root2 = roots[i5];
156313
156313
  var loc = resolve6(root2, name2);
156314
- var dir = dirname13(loc);
156314
+ var dir = dirname12(loc);
156315
156315
  var file2 = basename4(loc);
156316
156316
  path19 = this.resolve(dir, file2);
156317
156317
  }
@@ -156337,12 +156337,12 @@ var require_view = __commonJS((exports, module) => {
156337
156337
  };
156338
156338
  View.prototype.resolve = function resolve7(dir, file2) {
156339
156339
  var ext = this.ext;
156340
- var path19 = join17(dir, file2);
156340
+ var path19 = join15(dir, file2);
156341
156341
  var stat2 = tryStat(path19);
156342
156342
  if (stat2 && stat2.isFile()) {
156343
156343
  return path19;
156344
156344
  }
156345
- path19 = join17(dir, basename4(file2, ext), "index" + ext);
156345
+ path19 = join15(dir, basename4(file2, ext), "index" + ext);
156346
156346
  stat2 = tryStat(path19);
156347
156347
  if (stat2 && stat2.isFile()) {
156348
156348
  return path19;
@@ -160037,7 +160037,7 @@ var require_send = __commonJS((exports, module) => {
160037
160037
  var Stream2 = __require("stream");
160038
160038
  var util2 = __require("util");
160039
160039
  var extname2 = path18.extname;
160040
- var join17 = path18.join;
160040
+ var join15 = path18.join;
160041
160041
  var normalize = path18.normalize;
160042
160042
  var resolve6 = path18.resolve;
160043
160043
  var sep = path18.sep;
@@ -160209,7 +160209,7 @@ var require_send = __commonJS((exports, module) => {
160209
160209
  return res;
160210
160210
  }
160211
160211
  parts = path19.split(sep);
160212
- path19 = normalize(join17(root2, path19));
160212
+ path19 = normalize(join15(root2, path19));
160213
160213
  } else {
160214
160214
  if (UP_PATH_REGEXP.test(path19)) {
160215
160215
  debug('malicious path "%s"', path19);
@@ -160349,7 +160349,7 @@ var require_send = __commonJS((exports, module) => {
160349
160349
  return self2.onStatError(err);
160350
160350
  return self2.error(404);
160351
160351
  }
160352
- var p4 = join17(path19, self2._index[i5]);
160352
+ var p4 = join15(path19, self2._index[i5]);
160353
160353
  debug('stat "%s"', p4);
160354
160354
  fs28.stat(p4, function(err2, stat2) {
160355
160355
  if (err2)
@@ -206944,7 +206944,7 @@ var require_buffer_list = __commonJS((exports, module) => {
206944
206944
  }
206945
206945
  }, {
206946
206946
  key: "join",
206947
- value: function join18(s5) {
206947
+ value: function join16(s5) {
206948
206948
  if (this.length === 0)
206949
206949
  return "";
206950
206950
  var p4 = this.head;
@@ -210671,7 +210671,7 @@ var {
210671
210671
  } = import__.default;
210672
210672
 
210673
210673
  // src/cli/commands/agents/pull.ts
210674
- import { dirname as dirname8, join as join10 } from "node:path";
210674
+ import { dirname as dirname8, join as join9 } from "node:path";
210675
210675
 
210676
210676
  // node_modules/@clack/core/dist/index.mjs
210677
210677
  var import_picocolors = __toESM(require_picocolors(), 1);
@@ -225313,6 +225313,9 @@ var UserInfoSchema = exports_external.object({
225313
225313
  name: exports_external.string()
225314
225314
  });
225315
225315
 
225316
+ // src/core/clients/base44-client.ts
225317
+ import { randomUUID as randomUUID2 } from "node:crypto";
225318
+
225316
225319
  // node_modules/ky/distribution/errors/HTTPError.js
225317
225320
  class HTTPError extends Error {
225318
225321
  response;
@@ -226137,6 +226140,12 @@ import { homedir } from "node:os";
226137
226140
  import { dirname, join } from "node:path";
226138
226141
  import { fileURLToPath } from "node:url";
226139
226142
 
226143
+ // src/core/assets.ts
226144
+ var assetsDir;
226145
+ function getAssetsDir() {
226146
+ return assetsDir;
226147
+ }
226148
+
226140
226149
  // src/core/consts.ts
226141
226150
  var PROJECT_SUBDIR = "base44";
226142
226151
  var CONFIG_FILE_EXTENSION = "jsonc";
@@ -226215,6 +226224,9 @@ function getAuthFilePath() {
226215
226224
  return join(getBase44GlobalDir(), "auth", "auth.json");
226216
226225
  }
226217
226226
  function getTemplatesDir() {
226227
+ const assets = getAssetsDir();
226228
+ if (assets)
226229
+ return join(assets, "templates");
226218
226230
  return join(__dirname2, "../templates");
226219
226231
  }
226220
226232
  function getTemplatesIndexPath() {
@@ -233172,7 +233184,7 @@ var generateGlobTasks = normalizeArguments(generateTasks);
233172
233184
  var generateGlobTasksSync = normalizeArgumentsSync(generateTasksSync);
233173
233185
 
233174
233186
  // src/core/project/config.ts
233175
- import { dirname as dirname6, join as join7 } from "node:path";
233187
+ import { dirname as dirname6, join as join6 } from "node:path";
233176
233188
 
233177
233189
  // src/core/resources/agent/schema.ts
233178
233190
  var EntityOperationSchema = exports_external.enum(["create", "update", "delete", "read"]);
@@ -233902,23 +233914,11 @@ var BackendFunctionSchema = FunctionConfigSchema.extend({
233902
233914
  entryPath: exports_external.string().min(1, "Entry path cannot be empty"),
233903
233915
  filePaths: exports_external.array(exports_external.string()).min(1, "Function must have at least one file")
233904
233916
  });
233905
- var DeploySingleFunctionResponseSchema = exports_external.object({
233906
- status: exports_external.enum(["deployed", "unchanged"])
233907
- });
233908
- var FunctionAutomationInfoSchema = exports_external.object({
233909
- name: exports_external.string(),
233910
- type: exports_external.string(),
233911
- is_active: exports_external.boolean()
233912
- });
233913
- var FunctionInfoSchema = exports_external.object({
233914
- name: exports_external.string(),
233915
- deployment_id: exports_external.string(),
233916
- entry: exports_external.string(),
233917
- files: exports_external.array(FunctionFileSchema),
233918
- automations: exports_external.array(FunctionAutomationInfoSchema)
233919
- });
233920
- var ListFunctionsResponseSchema = exports_external.object({
233921
- functions: exports_external.array(FunctionInfoSchema)
233917
+ var DeployFunctionsResponseSchema = exports_external.object({
233918
+ deployed: exports_external.array(exports_external.string()),
233919
+ deleted: exports_external.array(exports_external.string()),
233920
+ skipped: exports_external.array(exports_external.string()).optional().nullable(),
233921
+ errors: exports_external.array(exports_external.object({ name: exports_external.string(), message: exports_external.string() })).nullable()
233922
233922
  });
233923
233923
  var LogLevelSchema = exports_external.enum(["info", "warning", "error", "debug"]);
233924
233924
  var FunctionLogEntrySchema = exports_external.object({
@@ -233929,37 +233929,29 @@ var FunctionLogEntrySchema = exports_external.object({
233929
233929
  var FunctionLogsResponseSchema = exports_external.array(FunctionLogEntrySchema);
233930
233930
 
233931
233931
  // src/core/resources/function/api.ts
233932
- async function deploySingleFunction(name2, payload) {
233933
- const appClient = getAppClient();
233934
- let response;
233935
- try {
233936
- response = await appClient.put(`backend-functions/${encodeURIComponent(name2)}`, { json: payload, timeout: false });
233937
- } catch (error48) {
233938
- throw await ApiError.fromHttpError(error48, `deploying function "${name2}"`);
233939
- }
233940
- const result = DeploySingleFunctionResponseSchema.safeParse(await response.json());
233941
- if (!result.success) {
233942
- throw new SchemaValidationError("Invalid response from server", result.error);
233943
- }
233944
- return result.data;
233945
- }
233946
- async function deleteSingleFunction(name2) {
233947
- const appClient = getAppClient();
233948
- try {
233949
- await appClient.delete(`backend-functions/${encodeURIComponent(name2)}`, { timeout: 60000 });
233950
- } catch (error48) {
233951
- throw await ApiError.fromHttpError(error48, `deleting function "${name2}"`);
233952
- }
233932
+ function toDeployPayloadItem(fn) {
233933
+ return {
233934
+ name: fn.name,
233935
+ entry: fn.entry,
233936
+ files: fn.files,
233937
+ automations: fn.automations
233938
+ };
233953
233939
  }
233954
- async function listDeployedFunctions() {
233940
+ async function deployFunctions(functions) {
233955
233941
  const appClient = getAppClient();
233942
+ const payload = {
233943
+ functions: functions.map(toDeployPayloadItem)
233944
+ };
233956
233945
  let response;
233957
233946
  try {
233958
- response = await appClient.get("backend-functions", { timeout: 30000 });
233947
+ response = await appClient.put("backend-functions", {
233948
+ json: payload,
233949
+ timeout: false
233950
+ });
233959
233951
  } catch (error48) {
233960
- throw await ApiError.fromHttpError(error48, "listing deployed functions");
233952
+ throw await ApiError.fromHttpError(error48, "deploying functions");
233961
233953
  }
233962
- const result = ListFunctionsResponseSchema.safeParse(await response.json());
233954
+ const result = DeployFunctionsResponseSchema.safeParse(await response.json());
233963
233955
  if (!result.success) {
233964
233956
  throw new SchemaValidationError("Invalid response from server", result.error);
233965
233957
  }
@@ -234082,131 +234074,24 @@ async function readAllFunctions(functionsDir) {
234082
234074
  import { dirname as dirname5, relative as relative2 } from "node:path";
234083
234075
  async function loadFunctionCode(fn) {
234084
234076
  const functionDir = dirname5(fn.entryPath);
234085
- const resolvedFiles = await Promise.all(fn.filePaths.map(async (filePath) => {
234077
+ const loadedFiles = await Promise.all(fn.filePaths.map(async (filePath) => {
234086
234078
  const content = await readTextFile(filePath);
234087
234079
  const path11 = relative2(functionDir, filePath).split(/[/\\]/).join("/");
234088
234080
  return { path: path11, content };
234089
234081
  }));
234090
- return { ...fn, files: resolvedFiles };
234091
- }
234092
- async function deployOne(fn) {
234093
- const start = Date.now();
234094
- try {
234095
- const functionWithCode = await loadFunctionCode(fn);
234096
- const response = await deploySingleFunction(functionWithCode.name, {
234097
- entry: functionWithCode.entry,
234098
- files: functionWithCode.files,
234099
- automations: functionWithCode.automations
234100
- });
234101
- return {
234102
- name: functionWithCode.name,
234103
- status: response.status,
234104
- durationMs: Date.now() - start
234105
- };
234106
- } catch (error48) {
234107
- return {
234108
- name: fn.name,
234109
- status: "error",
234110
- error: error48 instanceof Error ? error48.message : String(error48)
234111
- };
234112
- }
234113
- }
234114
- async function deployFunctionsSequentially(functions, options) {
234115
- if (functions.length === 0)
234116
- return [];
234117
- const results = [];
234118
- for (const fn of functions) {
234119
- options?.onStart?.([fn.name]);
234120
- const result = await deployOne(fn);
234121
- results.push(result);
234122
- options?.onResult?.(result);
234123
- }
234124
- return results;
234125
- }
234126
- async function pruneRemovedFunctions(localFunctionNames) {
234127
- const remote = await listDeployedFunctions();
234128
- const localSet = new Set(localFunctionNames);
234129
- const toDelete = remote.functions.filter((f) => !localSet.has(f.name));
234130
- const results = [];
234131
- for (const fn of toDelete) {
234132
- try {
234133
- await deleteSingleFunction(fn.name);
234134
- results.push({ name: fn.name, deleted: true });
234135
- } catch (error48) {
234136
- results.push({
234137
- name: fn.name,
234138
- deleted: false,
234139
- error: error48 instanceof Error ? error48.message : String(error48)
234140
- });
234141
- }
234142
- }
234143
- return results;
234144
- }
234145
- // src/core/resources/function/pull.ts
234146
- import { join as join6 } from "node:path";
234147
- async function writeFunctions(functionsDir, functions) {
234148
- const written = [];
234149
- const skipped = [];
234150
- for (const fn of functions) {
234151
- const functionDir = join6(functionsDir, fn.name);
234152
- const configPath = join6(functionDir, "function.jsonc");
234153
- if (await isFunctionUnchanged(functionDir, fn)) {
234154
- skipped.push(fn.name);
234155
- continue;
234156
- }
234157
- const config5 = {
234158
- name: fn.name,
234159
- entry: fn.entry
234160
- };
234161
- if (fn.automations.length > 0) {
234162
- config5.automations = fn.automations;
234163
- }
234164
- await writeJsonFile(configPath, config5);
234165
- for (const file2 of fn.files) {
234166
- await writeFile(join6(functionDir, file2.path), file2.content);
234167
- }
234168
- written.push(fn.name);
234169
- }
234170
- return { written, skipped };
234082
+ return { ...fn, files: loadedFiles };
234171
234083
  }
234172
- async function isFunctionUnchanged(functionDir, fn) {
234173
- if (!await pathExists(functionDir)) {
234174
- return false;
234175
- }
234176
- const configPath = join6(functionDir, "function.jsonc");
234177
- try {
234178
- const localConfig = await readJsonFile(configPath);
234179
- if (localConfig.entry !== fn.entry) {
234180
- return false;
234181
- }
234182
- const localAuto = JSON.stringify(localConfig.automations ?? []);
234183
- const remoteAuto = JSON.stringify(fn.automations);
234184
- if (localAuto !== remoteAuto) {
234185
- return false;
234186
- }
234187
- } catch {
234188
- return false;
234189
- }
234190
- for (const file2 of fn.files) {
234191
- const filePath = join6(functionDir, file2.path);
234192
- if (!await pathExists(filePath)) {
234193
- return false;
234194
- }
234195
- try {
234196
- const localContent = await readTextFile(filePath);
234197
- if (localContent !== file2.content) {
234198
- return false;
234199
- }
234200
- } catch {
234201
- return false;
234202
- }
234084
+ async function pushFunctions(functions) {
234085
+ if (functions.length === 0) {
234086
+ return { deployed: [], deleted: [], skipped: [], errors: null };
234203
234087
  }
234204
- return true;
234088
+ const functionsWithCode = await Promise.all(functions.map(loadFunctionCode));
234089
+ return deployFunctions(functionsWithCode);
234205
234090
  }
234206
234091
  // src/core/resources/function/resource.ts
234207
234092
  var functionResource = {
234208
234093
  readAll: readAllFunctions,
234209
- push: (functions) => deployFunctionsSequentially(functions)
234094
+ push: pushFunctions
234210
234095
  };
234211
234096
  // src/core/project/config.ts
234212
234097
  async function findConfigInDir(dir) {
@@ -234247,10 +234132,10 @@ async function readProjectConfig(projectRoot) {
234247
234132
  const project = result.data;
234248
234133
  const configDir = dirname6(configPath);
234249
234134
  const [entities, functions, agents, connectors] = await Promise.all([
234250
- entityResource.readAll(join7(configDir, project.entitiesDir)),
234251
- functionResource.readAll(join7(configDir, project.functionsDir)),
234252
- agentResource.readAll(join7(configDir, project.agentsDir)),
234253
- connectorResource.readAll(join7(configDir, project.connectorsDir))
234135
+ entityResource.readAll(join6(configDir, project.entitiesDir)),
234136
+ functionResource.readAll(join6(configDir, project.functionsDir)),
234137
+ agentResource.readAll(join6(configDir, project.agentsDir)),
234138
+ connectorResource.readAll(join6(configDir, project.connectorsDir))
234254
234139
  ]);
234255
234140
  return {
234256
234141
  project: { ...project, root, configPath },
@@ -234347,7 +234232,7 @@ async function readAppConfig(projectRoot) {
234347
234232
  // src/core/project/template.ts
234348
234233
  var import_ejs = __toESM(require_ejs(), 1);
234349
234234
  var import_front_matter = __toESM(require_front_matter(), 1);
234350
- import { dirname as dirname7, join as join8 } from "node:path";
234235
+ import { dirname as dirname7, join as join7 } from "node:path";
234351
234236
  async function listTemplates() {
234352
234237
  const parsed = await readJsonFile(getTemplatesIndexPath());
234353
234238
  const result = TemplatesConfigSchema.safeParse(parsed);
@@ -234357,23 +234242,23 @@ async function listTemplates() {
234357
234242
  return result.data.templates;
234358
234243
  }
234359
234244
  async function renderTemplate(template, destPath, data) {
234360
- const templateDir = join8(getTemplatesDir(), template.path);
234245
+ const templateDir = join7(getTemplatesDir(), template.path);
234361
234246
  const files = await globby("**/*", {
234362
234247
  cwd: templateDir,
234363
234248
  dot: true,
234364
234249
  onlyFiles: true
234365
234250
  });
234366
234251
  for (const file2 of files) {
234367
- const srcPath = join8(templateDir, file2);
234252
+ const srcPath = join7(templateDir, file2);
234368
234253
  try {
234369
234254
  if (file2.endsWith(".ejs")) {
234370
234255
  const rendered = await import_ejs.default.renderFile(srcPath, data);
234371
234256
  const { attributes, body } = import_front_matter.default(rendered);
234372
- const destFile = attributes.outputFileName ? join8(dirname7(file2), attributes.outputFileName) : file2.replace(/\.ejs$/, "");
234373
- const destFilePath = join8(destPath, destFile);
234257
+ const destFile = attributes.outputFileName ? join7(dirname7(file2), attributes.outputFileName) : file2.replace(/\.ejs$/, "");
234258
+ const destFilePath = join7(destPath, destFile);
234374
234259
  await writeFile(destFilePath, body);
234375
234260
  } else {
234376
- const destFilePath = join8(destPath, file2);
234261
+ const destFilePath = join7(destPath, file2);
234377
234262
  await copyFile(srcPath, destFilePath);
234378
234263
  }
234379
234264
  } catch (error48) {
@@ -234476,7 +234361,7 @@ async function getSiteFilePaths(outputDir) {
234476
234361
  // src/core/site/deploy.ts
234477
234362
  import { randomUUID } from "node:crypto";
234478
234363
  import { tmpdir } from "node:os";
234479
- import { join as join9 } from "node:path";
234364
+ import { join as join8 } from "node:path";
234480
234365
  async function deploySite(siteOutputDir) {
234481
234366
  if (!await pathExists(siteOutputDir)) {
234482
234367
  throw new InvalidInputError(`Output directory does not exist: ${siteOutputDir}. Make sure to build your project first.`, {
@@ -234493,7 +234378,7 @@ async function deploySite(siteOutputDir) {
234493
234378
  ]
234494
234379
  });
234495
234380
  }
234496
- const archivePath = join9(tmpdir(), `base44-site-${randomUUID()}.tar.gz`);
234381
+ const archivePath = join8(tmpdir(), `base44-site-${randomUUID()}.tar.gz`);
234497
234382
  try {
234498
234383
  await createArchive(siteOutputDir, archivePath);
234499
234384
  return await uploadSite(archivePath);
@@ -234518,13 +234403,10 @@ function hasResourcesToDeploy(projectData) {
234518
234403
  const hasConnectors = connectors.length > 0;
234519
234404
  return hasEntities || hasFunctions || hasAgents || hasConnectors || hasSite;
234520
234405
  }
234521
- async function deployAll(projectData, options) {
234406
+ async function deployAll(projectData) {
234522
234407
  const { project, entities, functions, agents, connectors } = projectData;
234523
234408
  await entityResource.push(entities);
234524
- await deployFunctionsSequentially(functions, {
234525
- onStart: options?.onFunctionStart,
234526
- onResult: options?.onFunctionResult
234527
- });
234409
+ await functionResource.push(functions);
234528
234410
  await agentResource.push(agents);
234529
234411
  const { results: connectorResults } = await pushConnectors(connectors);
234530
234412
  if (project.site?.outputDirectory) {
@@ -234558,8 +234440,12 @@ async function handleUnauthorized(request, _options, response) {
234558
234440
  return;
234559
234441
  }
234560
234442
  retriedRequests.add(request);
234443
+ const requestId = request.headers.get("X-Request-ID");
234561
234444
  return distribution_default(request.clone(), {
234562
- headers: { Authorization: `Bearer ${newAccessToken}` }
234445
+ headers: {
234446
+ ...requestId && { "X-Request-ID": requestId },
234447
+ Authorization: `Bearer ${newAccessToken}`
234448
+ }
234563
234449
  });
234564
234450
  }
234565
234451
  var base44Client = distribution_default.create({
@@ -234569,6 +234455,9 @@ var base44Client = distribution_default.create({
234569
234455
  },
234570
234456
  hooks: {
234571
234457
  beforeRequest: [
234458
+ (request) => {
234459
+ request.headers.set("X-Request-ID", randomUUID2());
234460
+ },
234572
234461
  captureRequestBody,
234573
234462
  async (request) => {
234574
234463
  try {
@@ -234594,10 +234483,18 @@ function getAppClient() {
234594
234483
  });
234595
234484
  }
234596
234485
  // src/core/clients/oauth-client.ts
234486
+ import { randomUUID as randomUUID3 } from "node:crypto";
234597
234487
  var oauthClient = distribution_default.create({
234598
234488
  prefixUrl: getBase44ApiUrl(),
234599
234489
  headers: {
234600
234490
  "User-Agent": "Base44 CLI"
234491
+ },
234492
+ hooks: {
234493
+ beforeRequest: [
234494
+ (request) => {
234495
+ request.headers.set("X-Request-ID", randomUUID3());
234496
+ }
234497
+ ]
234601
234498
  }
234602
234499
  });
234603
234500
  // src/core/auth/api.ts
@@ -234742,7 +234639,8 @@ async function deleteSecret(name2) {
234742
234639
  let response;
234743
234640
  try {
234744
234641
  response = await appClient.delete("secrets", {
234745
- searchParams: { secret_name: name2 }
234642
+ searchParams: { secret_name: name2 },
234643
+ timeout: false
234746
234644
  });
234747
234645
  } catch (error48) {
234748
234646
  throw await ApiError.fromHttpError(error48, "deleting secret");
@@ -242069,6 +241967,7 @@ var package_default = {
242069
241967
  "lint:fix": "biome check --write src tests",
242070
241968
  test: "vitest run",
242071
241969
  "test:watch": "vitest",
241970
+ "build:binaries": "bun run infra/build-binaries.ts",
242072
241971
  knip: "knip",
242073
241972
  "knip:fix": "knip --fix"
242074
241973
  },
@@ -242258,7 +242157,7 @@ function getDashboardUrl(projectId) {
242258
242157
  async function pullAgentsAction() {
242259
242158
  const { project: project2 } = await readProjectConfig();
242260
242159
  const configDir = dirname8(project2.configPath);
242261
- const agentsDir = join10(configDir, project2.agentsDir);
242160
+ const agentsDir = join9(configDir, project2.agentsDir);
242262
242161
  const remoteAgents = await runTask("Fetching agents from Base44", async () => {
242263
242162
  return await fetchAgents();
242264
242163
  }, {
@@ -242352,11 +242251,11 @@ function getWhoamiCommand(context) {
242352
242251
  }
242353
242252
 
242354
242253
  // src/cli/commands/connectors/pull.ts
242355
- import { dirname as dirname9, join as join11 } from "node:path";
242254
+ import { dirname as dirname9, join as join10 } from "node:path";
242356
242255
  async function pullConnectorsAction() {
242357
242256
  const { project: project2 } = await readProjectConfig();
242358
242257
  const configDir = dirname9(project2.configPath);
242359
- const connectorsDir = join11(configDir, project2.connectorsDir);
242258
+ const connectorsDir = join10(configDir, project2.connectorsDir);
242360
242259
  const remoteConnectors = await runTask("Fetching connectors from Base44", async () => {
242361
242260
  return await listConnectors();
242362
242261
  }, {
@@ -243204,225 +243103,46 @@ function getEntitiesPushCommand(context) {
243204
243103
  }));
243205
243104
  }
243206
243105
 
243207
- // src/cli/utils/parseNames.ts
243208
- function parseNames(args) {
243209
- return args.flatMap((arg) => arg.split(",")).map((n2) => n2.trim()).filter(Boolean);
243210
- }
243211
-
243212
- // src/cli/commands/functions/delete.ts
243213
- async function deleteFunctionsAction(names) {
243214
- let deleted = 0;
243215
- let notFound = 0;
243216
- let errors4 = 0;
243217
- let completed = 0;
243218
- const total = names.length;
243219
- for (const name2 of names) {
243220
- R2.step(theme.styles.dim(`[${completed + 1}/${total}] Deleting ${name2}...`));
243221
- try {
243222
- await deleteSingleFunction(name2);
243223
- R2.success(`${name2.padEnd(25)} deleted`);
243224
- deleted++;
243225
- } catch (error48) {
243226
- if (error48 instanceof ApiError && error48.statusCode === 404) {
243227
- R2.warn(`${name2.padEnd(25)} not found`);
243228
- notFound++;
243229
- } else {
243230
- R2.error(`${name2.padEnd(25)} error: ${error48 instanceof Error ? error48.message : String(error48)}`);
243231
- errors4++;
243232
- }
243233
- }
243234
- completed++;
243235
- }
243236
- if (names.length === 1) {
243237
- if (deleted)
243238
- return { outroMessage: `Function "${names[0]}" deleted` };
243239
- if (notFound)
243240
- return { outroMessage: `Function "${names[0]}" not found` };
243241
- return { outroMessage: `Failed to delete "${names[0]}"` };
243242
- }
243243
- const parts = [];
243244
- if (deleted > 0)
243245
- parts.push(`${deleted}/${total} deleted`);
243246
- if (notFound > 0)
243247
- parts.push(`${notFound} not found`);
243248
- if (errors4 > 0)
243249
- parts.push(`${errors4} error${errors4 !== 1 ? "s" : ""}`);
243250
- return { outroMessage: parts.join(", ") };
243251
- }
243252
- function getDeleteCommand(context) {
243253
- return new Command("delete").description("Delete deployed functions").argument("<names...>", "Function names to delete").action(async (rawNames) => {
243254
- await runCommand(() => {
243255
- const names = parseNames(rawNames);
243256
- if (names.length === 0) {
243257
- throw new InvalidInputError("At least one function name is required");
243258
- }
243259
- return deleteFunctionsAction(names);
243260
- }, { requireAuth: true }, context);
243261
- });
243262
- }
243263
-
243264
- // src/cli/utils/formatDeployResult.ts
243265
- function formatDuration(ms) {
243266
- return `${(ms / 1000).toFixed(1)}s`;
243267
- }
243268
- function formatDeployResult(result) {
243269
- const label = result.name.padEnd(25);
243270
- if (result.status === "deployed") {
243271
- const timing = result.durationMs ? theme.styles.dim(` (${formatDuration(result.durationMs)})`) : "";
243272
- R2.success(`${label} deployed${timing}`);
243273
- } else if (result.status === "unchanged") {
243274
- R2.success(`${label} unchanged`);
243275
- } else {
243276
- R2.error(`${label} error: ${result.error}`);
243277
- }
243278
- }
243279
-
243280
243106
  // src/cli/commands/functions/deploy.ts
243281
- function resolveFunctionsToDeploy(names, allFunctions) {
243282
- if (names.length === 0)
243283
- return allFunctions;
243284
- const notFound = names.filter((n2) => !allFunctions.some((f) => f.name === n2));
243285
- if (notFound.length > 0) {
243286
- throw new InvalidInputError(`Function${notFound.length > 1 ? "s" : ""} not found in project: ${notFound.join(", ")}`);
243287
- }
243288
- return allFunctions.filter((f) => names.includes(f.name));
243289
- }
243290
- function formatPruneResults(pruneResults) {
243291
- for (const pruneResult of pruneResults) {
243292
- if (pruneResult.deleted) {
243293
- R2.success(`${pruneResult.name.padEnd(25)} deleted`);
243294
- } else {
243295
- R2.error(`${pruneResult.name.padEnd(25)} error: ${pruneResult.error}`);
243296
- }
243297
- }
243298
- if (pruneResults.length > 0) {
243299
- const pruned = pruneResults.filter((r) => r.deleted).length;
243300
- R2.info(`${pruned} function${pruned !== 1 ? "s" : ""} removed`);
243301
- }
243302
- }
243303
- function buildDeploySummary(results) {
243304
- const deployed = results.filter((r) => r.status !== "error").length;
243305
- const failed = results.filter((r) => r.status === "error").length;
243306
- const parts = [];
243307
- if (deployed > 0)
243308
- parts.push(`${deployed}/${results.length} deployed`);
243309
- if (failed > 0)
243310
- parts.push(`${failed} error${failed !== 1 ? "s" : ""}`);
243311
- return parts.join(", ") || "No functions deployed";
243312
- }
243313
- async function deployFunctionsAction(names, options) {
243314
- if (options.force && names.length > 0) {
243315
- throw new InvalidInputError("--force cannot be used when specifying function names");
243316
- }
243107
+ async function deployFunctionsAction() {
243317
243108
  const { functions } = await readProjectConfig();
243318
- const toDeploy = resolveFunctionsToDeploy(names, functions);
243319
- if (toDeploy.length === 0) {
243109
+ if (functions.length === 0) {
243320
243110
  return {
243321
243111
  outroMessage: "No functions found. Create functions in the 'functions' directory."
243322
243112
  };
243323
243113
  }
243324
- R2.info(`Found ${toDeploy.length} ${toDeploy.length === 1 ? "function" : "functions"} to deploy`);
243325
- let completed = 0;
243326
- const total = toDeploy.length;
243327
- const results = await deployFunctionsSequentially(toDeploy, {
243328
- onStart: (startNames) => {
243329
- const label = startNames.length === 1 ? startNames[0] : `${startNames.length} functions`;
243330
- R2.step(theme.styles.dim(`[${completed + 1}/${total}] Deploying ${label}...`));
243331
- },
243332
- onResult: (result) => {
243333
- completed++;
243334
- formatDeployResult(result);
243335
- }
243336
- });
243337
- if (options.force) {
243338
- R2.info("Removing remote functions not found locally...");
243339
- const allLocalNames = functions.map((f) => f.name);
243340
- const pruneResults = await pruneRemovedFunctions(allLocalNames);
243341
- formatPruneResults(pruneResults);
243342
- }
243343
- return { outroMessage: buildDeploySummary(results) };
243344
- }
243345
- function getDeployCommand(context) {
243346
- return new Command("deploy").description("Deploy functions to Base44").argument("[names...]", "Function names to deploy (deploys all if omitted)").option("--force", "Delete remote functions not found locally").action(async (rawNames, options) => {
243347
- await runCommand(() => {
243348
- const names = parseNames(rawNames);
243349
- return deployFunctionsAction(names, options);
243350
- }, { requireAuth: true }, context);
243351
- });
243352
- }
243353
-
243354
- // src/cli/commands/functions/list.ts
243355
- async function listFunctionsAction() {
243356
- const { functions } = await listDeployedFunctions();
243357
- if (functions.length === 0) {
243358
- return { outroMessage: "No functions on remote" };
243359
- }
243360
- for (const fn of functions) {
243361
- const autoCount = fn.automations.length;
243362
- const autoLabel = autoCount > 0 ? theme.styles.dim(` (${autoCount} automation${autoCount > 1 ? "s" : ""})`) : "";
243363
- R2.message(` ${fn.name}${autoLabel}`);
243364
- }
243365
- return {
243366
- outroMessage: `${functions.length} function${functions.length !== 1 ? "s" : ""} on remote`
243367
- };
243368
- }
243369
- function getListCommand(context) {
243370
- return new Command("list").description("List all deployed functions").action(async () => {
243371
- await runCommand(listFunctionsAction, { requireAuth: true }, context);
243372
- });
243373
- }
243374
-
243375
- // src/cli/commands/functions/pull.ts
243376
- import { dirname as dirname10, join as join12 } from "node:path";
243377
- async function pullFunctionsAction(name2) {
243378
- const { project: project2 } = await readProjectConfig();
243379
- const configDir = dirname10(project2.configPath);
243380
- const functionsDir = join12(configDir, project2.functionsDir);
243381
- const remoteFunctions = await runTask("Fetching functions from Base44", async () => {
243382
- const { functions } = await listDeployedFunctions();
243383
- return functions;
243114
+ R2.info(`Found ${functions.length} ${functions.length === 1 ? "function" : "functions"} to deploy`);
243115
+ const result = await runTask("Deploying functions to Base44", async () => {
243116
+ return await pushFunctions(functions);
243384
243117
  }, {
243385
- successMessage: "Functions fetched successfully",
243386
- errorMessage: "Failed to fetch functions"
243118
+ successMessage: "Functions deployed successfully",
243119
+ errorMessage: "Failed to deploy functions"
243387
243120
  });
243388
- const toPull = name2 ? remoteFunctions.filter((f) => f.name === name2) : remoteFunctions;
243389
- if (name2 && toPull.length === 0) {
243390
- return {
243391
- outroMessage: `Function "${name2}" not found on remote`
243392
- };
243121
+ if (result.deployed.length > 0) {
243122
+ R2.success(`Deployed: ${result.deployed.join(", ")}`);
243393
243123
  }
243394
- if (toPull.length === 0) {
243395
- return { outroMessage: "No functions found on remote" };
243396
- }
243397
- const { written, skipped } = await runTask("Writing function files", async () => {
243398
- return await writeFunctions(functionsDir, toPull);
243399
- }, {
243400
- successMessage: "Function files written successfully",
243401
- errorMessage: "Failed to write function files"
243402
- });
243403
- for (const name3 of written) {
243404
- R2.success(`${name3.padEnd(25)} written`);
243124
+ if (result.deleted.length > 0) {
243125
+ R2.warn(`Deleted: ${result.deleted.join(", ")}`);
243405
243126
  }
243406
- for (const name3 of skipped) {
243407
- R2.info(`${name3.padEnd(25)} unchanged`);
243127
+ if (result.errors && result.errors.length > 0) {
243128
+ throw new ApiError("Function deployment errors", {
243129
+ details: result.errors.map((e2) => `'${e2.name}': ${e2.message}`),
243130
+ hints: [
243131
+ { message: "Check the function code for syntax errors" },
243132
+ { message: "Ensure all imports are valid" }
243133
+ ]
243134
+ });
243408
243135
  }
243409
- return {
243410
- outroMessage: `Pulled ${toPull.length} function${toPull.length !== 1 ? "s" : ""} to ${functionsDir}`
243411
- };
243136
+ return { outroMessage: "Functions deployed to Base44" };
243412
243137
  }
243413
- function getPullCommand(context) {
243414
- return new Command("pull").description("Pull deployed functions from Base44").argument("[name]", "Pull a single function by name").action(async (name2) => {
243415
- await runCommand(() => pullFunctionsAction(name2), { requireAuth: true }, context);
243416
- });
243417
- }
243418
-
243419
- // src/cli/commands/functions/index.ts
243420
- function getFunctionsCommand(context) {
243421
- return new Command("functions").description("Manage backend functions").addCommand(getDeployCommand(context)).addCommand(getPullCommand(context)).addCommand(getListCommand(context)).addCommand(getDeleteCommand(context));
243138
+ function getFunctionsDeployCommand(context) {
243139
+ return new Command("functions").description("Manage project functions").addCommand(new Command("deploy").description("Deploy local functions to Base44").action(async () => {
243140
+ await runCommand(deployFunctionsAction, { requireAuth: true }, context);
243141
+ }));
243422
243142
  }
243423
243143
 
243424
243144
  // src/cli/commands/project/create.ts
243425
- import { basename as basename3, join as join13, resolve as resolve2 } from "node:path";
243145
+ import { basename as basename3, join as join11, resolve as resolve2 } from "node:path";
243426
243146
  var import_kebabCase = __toESM(require_kebabCase(), 1);
243427
243147
  var DEFAULT_TEMPLATE_ID = "backend-only";
243428
243148
  async function getTemplateById(templateId) {
@@ -243558,7 +243278,7 @@ async function executeCreate({
243558
243278
  updateMessage("Building project...");
243559
243279
  await execa({ cwd: resolvedPath, shell: true })`${buildCommand}`;
243560
243280
  updateMessage("Deploying site...");
243561
- return await deploySite(join13(resolvedPath, outputDirectory));
243281
+ return await deploySite(join11(resolvedPath, outputDirectory));
243562
243282
  }, {
243563
243283
  successMessage: theme.colors.base44Orange("Site deployed successfully"),
243564
243284
  errorMessage: "Failed to deploy site"
@@ -243638,17 +243358,11 @@ ${summaryLines.join(`
243638
243358
  ${summaryLines.join(`
243639
243359
  `)}`);
243640
243360
  }
243641
- let functionCompleted = 0;
243642
- const functionTotal = functions.length;
243643
- const result = await deployAll(projectData, {
243644
- onFunctionStart: (names) => {
243645
- const label = names.length === 1 ? names[0] : `${names.length} functions`;
243646
- R2.step(theme.styles.dim(`[${functionCompleted + 1}/${functionTotal}] Deploying ${label}...`));
243647
- },
243648
- onFunctionResult: (r) => {
243649
- functionCompleted++;
243650
- formatDeployResult(r);
243651
- }
243361
+ const result = await runTask("Deploying your app...", async () => {
243362
+ return await deployAll(projectData);
243363
+ }, {
243364
+ successMessage: theme.colors.base44Orange("Deployment completed"),
243365
+ errorMessage: "Deployment failed"
243652
243366
  });
243653
243367
  const needsOAuth = filterPendingOAuth(result.connectorResults ?? []);
243654
243368
  if (needsOAuth.length > 0) {
@@ -243666,7 +243380,7 @@ ${summaryLines.join(`
243666
243380
  }
243667
243381
  return { outroMessage: "App deployed successfully" };
243668
243382
  }
243669
- function getDeployCommand2(context) {
243383
+ function getDeployCommand(context) {
243670
243384
  return new Command("deploy").description("Deploy all project resources (entities, functions, agents, connectors, and site)").option("-y, --yes", "Skip confirmation prompt").action(async (options) => {
243671
243385
  await runCommand(() => deployAction({
243672
243386
  ...options,
@@ -244190,10 +243904,10 @@ function toPascalCase(name2) {
244190
243904
  return name2.split(/[-_\s]+/).map((w8) => w8.charAt(0).toUpperCase() + w8.slice(1)).join("");
244191
243905
  }
244192
243906
  // src/core/types/update-project.ts
244193
- import { join as join16 } from "node:path";
243907
+ import { join as join14 } from "node:path";
244194
243908
  var TYPES_INCLUDE_PATH = `${PROJECT_SUBDIR}/${TYPES_OUTPUT_SUBDIR}/*.d.ts`;
244195
243909
  async function updateProjectConfig(projectRoot) {
244196
- const tsconfigPath = join16(projectRoot, "tsconfig.json");
243910
+ const tsconfigPath = join14(projectRoot, "tsconfig.json");
244197
243911
  if (!await pathExists(tsconfigPath)) {
244198
243912
  return false;
244199
243913
  }
@@ -244236,7 +243950,7 @@ function getTypesCommand(context) {
244236
243950
  }
244237
243951
 
244238
243952
  // src/cli/dev/dev-server/main.ts
244239
- import { dirname as dirname16, join as join20 } from "node:path";
243953
+ import { dirname as dirname15, join as join18 } from "node:path";
244240
243954
  var import_cors = __toESM(require_lib4(), 1);
244241
243955
  var import_express4 = __toESM(require_express(), 1);
244242
243956
 
@@ -244395,10 +244109,10 @@ function createDevLogger() {
244395
244109
 
244396
244110
  // src/cli/dev/dev-server/function-manager.ts
244397
244111
  import { spawn as spawn2, spawnSync as spawnSync2 } from "node:child_process";
244398
- import { dirname as dirname13, join as join17 } from "node:path";
244112
+ import { dirname as dirname12, join as join15 } from "node:path";
244399
244113
  import { fileURLToPath as fileURLToPath7 } from "node:url";
244400
- var __dirname5 = dirname13(fileURLToPath7(import.meta.url));
244401
- var WRAPPER_PATH = join17(__dirname5, "../deno-runtime/main.js");
244114
+ var __dirname5 = dirname12(fileURLToPath7(import.meta.url));
244115
+ var WRAPPER_PATH = getAssetsDir() ? join15(getAssetsDir(), "deno-runtime", "main.js") : join15(__dirname5, "../deno-runtime/main.js");
244402
244116
  var READY_TIMEOUT = 30000;
244403
244117
 
244404
244118
  class FunctionManager {
@@ -244899,7 +244613,7 @@ function createEntityRoutes(db2, logger, remoteProxy, broadcast) {
244899
244613
  // src/cli/dev/dev-server/routes/integrations.ts
244900
244614
  var import_express3 = __toESM(require_express(), 1);
244901
244615
  var import_multer = __toESM(require_multer(), 1);
244902
- import { randomUUID as randomUUID2 } from "node:crypto";
244616
+ import { randomUUID as randomUUID4 } from "node:crypto";
244903
244617
  import fs28 from "node:fs";
244904
244618
  import path18 from "node:path";
244905
244619
  function createIntegrationRoutes(mediaFilesDir, baseUrl, remoteProxy, logger) {
@@ -244910,7 +244624,7 @@ function createIntegrationRoutes(mediaFilesDir, baseUrl, remoteProxy, logger) {
244910
244624
  destination: mediaFilesDir,
244911
244625
  filename: (_req, file2, cb2) => {
244912
244626
  const ext = path18.extname(file2.originalname);
244913
- cb2(null, `${randomUUID2()}${ext}`);
244627
+ cb2(null, `${randomUUID4()}${ext}`);
244914
244628
  }
244915
244629
  });
244916
244630
  const MAX_FILE_SIZE = 50 * 1024 * 1024;
@@ -244937,7 +244651,7 @@ function createIntegrationRoutes(mediaFilesDir, baseUrl, remoteProxy, logger) {
244937
244651
  res.status(400).json({ error: "file_uri is required" });
244938
244652
  return;
244939
244653
  }
244940
- const signature = randomUUID2();
244654
+ const signature = randomUUID4();
244941
244655
  const signed_url = `${baseUrl}/media/${file_uri}?signature=${signature}`;
244942
244656
  res.json({ signed_url });
244943
244657
  });
@@ -245702,9 +245416,9 @@ class NodeFsHandler {
245702
245416
  if (this.fsw.closed) {
245703
245417
  return;
245704
245418
  }
245705
- const dirname15 = sp2.dirname(file2);
245419
+ const dirname14 = sp2.dirname(file2);
245706
245420
  const basename5 = sp2.basename(file2);
245707
- const parent = this.fsw._getWatchedDir(dirname15);
245421
+ const parent = this.fsw._getWatchedDir(dirname14);
245708
245422
  let prevStats = stats;
245709
245423
  if (parent.has(basename5))
245710
245424
  return;
@@ -245731,7 +245445,7 @@ class NodeFsHandler {
245731
245445
  prevStats = newStats2;
245732
245446
  }
245733
245447
  } catch (error48) {
245734
- this.fsw._remove(dirname15, basename5);
245448
+ this.fsw._remove(dirname14, basename5);
245735
245449
  }
245736
245450
  } else if (parent.has(basename5)) {
245737
245451
  const at13 = newStats.atimeMs;
@@ -246734,8 +246448,8 @@ async function createDevServer(options8) {
246734
246448
  broadcastEntityEvent(io6, appId, entityName, event);
246735
246449
  };
246736
246450
  const base44ConfigWatcher = new WatchBase44({
246737
- functions: join20(dirname16(project2.configPath), project2.functionsDir),
246738
- entities: join20(dirname16(project2.configPath), project2.entitiesDir)
246451
+ functions: join18(dirname15(project2.configPath), project2.functionsDir),
246452
+ entities: join18(dirname15(project2.configPath), project2.entitiesDir)
246739
246453
  }, devLogger);
246740
246454
  base44ConfigWatcher.on("change", async (name2) => {
246741
246455
  try {
@@ -246904,13 +246618,13 @@ function createProgram(context) {
246904
246618
  program2.addCommand(getLogoutCommand(context));
246905
246619
  program2.addCommand(getCreateCommand(context));
246906
246620
  program2.addCommand(getDashboardCommand(context));
246907
- program2.addCommand(getDeployCommand2(context));
246621
+ program2.addCommand(getDeployCommand(context));
246908
246622
  program2.addCommand(getLinkCommand(context));
246909
246623
  program2.addCommand(getEjectCommand(context));
246910
246624
  program2.addCommand(getEntitiesPushCommand(context));
246911
246625
  program2.addCommand(getAgentsCommand(context));
246912
246626
  program2.addCommand(getConnectorsCommand(context));
246913
- program2.addCommand(getFunctionsCommand(context));
246627
+ program2.addCommand(getFunctionsDeployCommand(context));
246914
246628
  program2.addCommand(getSecretsCommand(context));
246915
246629
  program2.addCommand(getSiteCommand(context));
246916
246630
  program2.addCommand(getTypesCommand(context));
@@ -246924,7 +246638,7 @@ var import_detect_agent = __toESM(require_dist5(), 1);
246924
246638
  import { release, type } from "node:os";
246925
246639
 
246926
246640
  // node_modules/posthog-node/dist/extensions/error-tracking/modifiers/module.node.mjs
246927
- import { dirname as dirname17, posix, sep } from "path";
246641
+ import { dirname as dirname16, posix, sep } from "path";
246928
246642
  function createModulerModifier() {
246929
246643
  const getModuleFromFileName = createGetModuleFromFilename();
246930
246644
  return async (frames) => {
@@ -246933,7 +246647,7 @@ function createModulerModifier() {
246933
246647
  return frames;
246934
246648
  };
246935
246649
  }
246936
- function createGetModuleFromFilename(basePath = process.argv[1] ? dirname17(process.argv[1]) : process.cwd(), isWindows5 = sep === "\\") {
246650
+ function createGetModuleFromFilename(basePath = process.argv[1] ? dirname16(process.argv[1]) : process.cwd(), isWindows5 = sep === "\\") {
246937
246651
  const normalizedBase = isWindows5 ? normalizeWindowsPath2(basePath) : basePath;
246938
246652
  return (filename) => {
246939
246653
  if (!filename)
@@ -251151,4 +250865,4 @@ export {
251151
250865
  CLIExitError
251152
250866
  };
251153
250867
 
251154
- //# debugId=0324A58C26AC18BA64756E2164756E21
250868
+ //# debugId=16BBB389AA548E0B64756E2164756E21