@base44-preview/cli 0.0.25-pr.104.a8520b5 → 0.0.25-pr.104.e8c6c8b

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/README.md CHANGED
@@ -53,8 +53,6 @@ The CLI will guide you through project setup. For step-by-step tutorials, see th
53
53
  | [`entities push`](https://docs.base44.com/developers/references/cli/commands/entities-push) | Push local entity schemas to Base44 |
54
54
  | [`functions deploy`](https://docs.base44.com/developers/references/cli/commands/functions-deploy) | Deploy local functions to Base44 |
55
55
  | [`site deploy`](https://docs.base44.com/developers/references/cli/commands/site-deploy) | Deploy built site files to Base44 hosting |
56
- | `connectors add [type]` | Connect an OAuth integration |
57
- | `connectors remove [type]` | Disconnect an integration |
58
56
 
59
57
 
60
58
  <!--| [`eject`](https://docs.base44.com/developers/references/cli/commands/eject) | Create a Base44 backend project from an existing Base44 app | -->
package/dist/index.js CHANGED
@@ -8038,19 +8038,6 @@ var AuthValidationError = class extends Error {
8038
8038
  this.name = "AuthValidationError";
8039
8039
  }
8040
8040
  };
8041
- var ConnectorApiError = class extends Error {
8042
- constructor(message, cause) {
8043
- super(message);
8044
- this.cause = cause;
8045
- this.name = "ConnectorApiError";
8046
- }
8047
- };
8048
- var ConnectorValidationError = class extends Error {
8049
- constructor(message) {
8050
- super(message);
8051
- this.name = "ConnectorValidationError";
8052
- }
8053
- };
8054
8041
 
8055
8042
  //#endregion
8056
8043
  //#region src/core/consts.ts
@@ -10905,11 +10892,11 @@ var require_fill_range = /* @__PURE__ */ __commonJSMin(((exports, module) => {
10905
10892
  negatives: [],
10906
10893
  positives: []
10907
10894
  };
10908
- let push$1 = (num) => parts[num < 0 ? "negatives" : "positives"].push(Math.abs(num));
10895
+ let push$2 = (num) => parts[num < 0 ? "negatives" : "positives"].push(Math.abs(num));
10909
10896
  let range = [];
10910
10897
  let index = 0;
10911
10898
  while (descending ? a$1 >= b$2 : a$1 <= b$2) {
10912
- if (options.toRegex === true && step > 1) push$1(a$1);
10899
+ if (options.toRegex === true && step > 1) push$2(a$1);
10913
10900
  else range.push(pad(format$1(a$1, index), maxLen, toNumber));
10914
10901
  a$1 = descending ? a$1 - step : a$1 + step;
10915
10902
  index++;
@@ -11161,7 +11148,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
11161
11148
  * Helpers
11162
11149
  */
11163
11150
  const advance = () => input[index++];
11164
- const push$1 = (node) => {
11151
+ const push$2 = (node) => {
11165
11152
  if (node.type === "text" && prev.type === "dot") prev.type = "text";
11166
11153
  if (prev && prev.type === "text" && node.type === "text") {
11167
11154
  prev.value += node.value;
@@ -11173,7 +11160,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
11173
11160
  prev = node;
11174
11161
  return node;
11175
11162
  };
11176
- push$1({ type: "bos" });
11163
+ push$2({ type: "bos" });
11177
11164
  while (index < length) {
11178
11165
  block = stack[stack.length - 1];
11179
11166
  value = advance();
@@ -11185,7 +11172,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
11185
11172
  * Escaped chars
11186
11173
  */
11187
11174
  if (value === CHAR_BACKSLASH) {
11188
- push$1({
11175
+ push$2({
11189
11176
  type: "text",
11190
11177
  value: (options.keepEscaping ? value : "") + advance()
11191
11178
  });
@@ -11195,7 +11182,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
11195
11182
  * Right square bracket (literal): ']'
11196
11183
  */
11197
11184
  if (value === CHAR_RIGHT_SQUARE_BRACKET) {
11198
- push$1({
11185
+ push$2({
11199
11186
  type: "text",
11200
11187
  value: "\\" + value
11201
11188
  });
@@ -11222,7 +11209,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
11222
11209
  if (brackets === 0) break;
11223
11210
  }
11224
11211
  }
11225
- push$1({
11212
+ push$2({
11226
11213
  type: "text",
11227
11214
  value
11228
11215
  });
@@ -11232,12 +11219,12 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
11232
11219
  * Parentheses
11233
11220
  */
11234
11221
  if (value === CHAR_LEFT_PARENTHESES) {
11235
- block = push$1({
11222
+ block = push$2({
11236
11223
  type: "paren",
11237
11224
  nodes: []
11238
11225
  });
11239
11226
  stack.push(block);
11240
- push$1({
11227
+ push$2({
11241
11228
  type: "text",
11242
11229
  value
11243
11230
  });
@@ -11245,14 +11232,14 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
11245
11232
  }
11246
11233
  if (value === CHAR_RIGHT_PARENTHESES) {
11247
11234
  if (block.type !== "paren") {
11248
- push$1({
11235
+ push$2({
11249
11236
  type: "text",
11250
11237
  value
11251
11238
  });
11252
11239
  continue;
11253
11240
  }
11254
11241
  block = stack.pop();
11255
- push$1({
11242
+ push$2({
11256
11243
  type: "text",
11257
11244
  value
11258
11245
  });
@@ -11277,7 +11264,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
11277
11264
  }
11278
11265
  value += next;
11279
11266
  }
11280
- push$1({
11267
+ push$2({
11281
11268
  type: "text",
11282
11269
  value
11283
11270
  });
@@ -11288,7 +11275,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
11288
11275
  */
11289
11276
  if (value === CHAR_LEFT_CURLY_BRACE) {
11290
11277
  depth++;
11291
- block = push$1({
11278
+ block = push$2({
11292
11279
  type: "brace",
11293
11280
  open: true,
11294
11281
  close: false,
@@ -11299,7 +11286,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
11299
11286
  nodes: []
11300
11287
  });
11301
11288
  stack.push(block);
11302
- push$1({
11289
+ push$2({
11303
11290
  type: "open",
11304
11291
  value
11305
11292
  });
@@ -11310,7 +11297,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
11310
11297
  */
11311
11298
  if (value === CHAR_RIGHT_CURLY_BRACE) {
11312
11299
  if (block.type !== "brace") {
11313
- push$1({
11300
+ push$2({
11314
11301
  type: "text",
11315
11302
  value
11316
11303
  });
@@ -11319,7 +11306,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
11319
11306
  const type = "close";
11320
11307
  block = stack.pop();
11321
11308
  block.close = true;
11322
- push$1({
11309
+ push$2({
11323
11310
  type,
11324
11311
  value
11325
11312
  });
@@ -11339,7 +11326,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
11339
11326
  value: stringify(block)
11340
11327
  }];
11341
11328
  }
11342
- push$1({
11329
+ push$2({
11343
11330
  type: "comma",
11344
11331
  value
11345
11332
  });
@@ -11352,7 +11339,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
11352
11339
  if (value === CHAR_DOT && depth > 0 && block.commas === 0) {
11353
11340
  const siblings = block.nodes;
11354
11341
  if (depth === 0 || siblings.length === 0) {
11355
- push$1({
11342
+ push$2({
11356
11343
  type: "text",
11357
11344
  value
11358
11345
  });
@@ -11380,7 +11367,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
11380
11367
  block.ranges--;
11381
11368
  continue;
11382
11369
  }
11383
- push$1({
11370
+ push$2({
11384
11371
  type: "dot",
11385
11372
  value
11386
11373
  });
@@ -11389,7 +11376,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
11389
11376
  /**
11390
11377
  * Text
11391
11378
  */
11392
- push$1({
11379
+ push$2({
11393
11380
  type: "text",
11394
11381
  value
11395
11382
  });
@@ -11410,7 +11397,7 @@ var require_parse$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
11410
11397
  parent.nodes.splice(index$1, 1, ...block.nodes);
11411
11398
  }
11412
11399
  } while (stack.length > 0);
11413
- push$1({ type: "eos" });
11400
+ push$2({ type: "eos" });
11414
11401
  return ast;
11415
11402
  };
11416
11403
  module.exports = parse;
@@ -12169,7 +12156,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12169
12156
  * characters are plain text. This improves performance and simplifies
12170
12157
  * lookbehinds.
12171
12158
  */
12172
- const push$1 = (tok) => {
12159
+ const push$2 = (tok) => {
12173
12160
  if (prev.type === "globstar") {
12174
12161
  const isBrace = state.braces > 0 && (tok.type === "comma" || tok.type === "brace");
12175
12162
  const isExtglob = tok.extglob === true || extglobs.length && (tok.type === "pipe" || tok.type === "paren");
@@ -12203,12 +12190,12 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12203
12190
  token.output = state.output;
12204
12191
  const output = (opts.capture ? "(" : "") + token.open;
12205
12192
  increment$1("parens");
12206
- push$1({
12193
+ push$2({
12207
12194
  type,
12208
12195
  value: value$1,
12209
12196
  output: state.output ? "" : ONE_CHAR
12210
12197
  });
12211
- push$1({
12198
+ push$2({
12212
12199
  type: "paren",
12213
12200
  extglob: true,
12214
12201
  value: advance(),
@@ -12229,7 +12216,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12229
12216
  }).output})${extglobStar})`;
12230
12217
  if (token.prev.type === "bos") state.negatedExtglob = true;
12231
12218
  }
12232
- push$1({
12219
+ push$2({
12233
12220
  type: "paren",
12234
12221
  extglob: true,
12235
12222
  value,
@@ -12285,7 +12272,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12285
12272
  if (next === "." || next === ";") continue;
12286
12273
  if (!next) {
12287
12274
  value += "\\";
12288
- push$1({
12275
+ push$2({
12289
12276
  type: "text",
12290
12277
  value
12291
12278
  });
@@ -12301,7 +12288,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12301
12288
  if (opts.unescape === true) value = advance();
12302
12289
  else value += advance();
12303
12290
  if (state.brackets === 0) {
12304
- push$1({
12291
+ push$2({
12305
12292
  type: "text",
12306
12293
  value
12307
12294
  });
@@ -12353,7 +12340,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12353
12340
  */
12354
12341
  if (value === "\"") {
12355
12342
  state.quotes = state.quotes === 1 ? 0 : 1;
12356
- if (opts.keepQuotes === true) push$1({
12343
+ if (opts.keepQuotes === true) push$2({
12357
12344
  type: "text",
12358
12345
  value
12359
12346
  });
@@ -12364,7 +12351,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12364
12351
  */
12365
12352
  if (value === "(") {
12366
12353
  increment$1("parens");
12367
- push$1({
12354
+ push$2({
12368
12355
  type: "paren",
12369
12356
  value
12370
12357
  });
@@ -12377,7 +12364,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12377
12364
  extglobClose(extglobs.pop());
12378
12365
  continue;
12379
12366
  }
12380
- push$1({
12367
+ push$2({
12381
12368
  type: "paren",
12382
12369
  value,
12383
12370
  output: state.parens ? ")" : "\\)"
@@ -12393,7 +12380,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12393
12380
  if (opts.nobracket !== true && opts.strictBrackets === true) throw new SyntaxError(syntaxError("closing", "]"));
12394
12381
  value = `\\${value}`;
12395
12382
  } else increment$1("brackets");
12396
- push$1({
12383
+ push$2({
12397
12384
  type: "bracket",
12398
12385
  value
12399
12386
  });
@@ -12401,7 +12388,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12401
12388
  }
12402
12389
  if (value === "]") {
12403
12390
  if (opts.nobracket === true || prev && prev.type === "bracket" && prev.value.length === 1) {
12404
- push$1({
12391
+ push$2({
12405
12392
  type: "text",
12406
12393
  value,
12407
12394
  output: `\\${value}`
@@ -12410,7 +12397,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12410
12397
  }
12411
12398
  if (state.brackets === 0) {
12412
12399
  if (opts.strictBrackets === true) throw new SyntaxError(syntaxError("opening", "["));
12413
- push$1({
12400
+ push$2({
12414
12401
  type: "text",
12415
12402
  value,
12416
12403
  output: `\\${value}`
@@ -12447,13 +12434,13 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12447
12434
  tokensIndex: state.tokens.length
12448
12435
  };
12449
12436
  braces.push(open$1);
12450
- push$1(open$1);
12437
+ push$2(open$1);
12451
12438
  continue;
12452
12439
  }
12453
12440
  if (value === "}") {
12454
12441
  const brace = braces[braces.length - 1];
12455
12442
  if (opts.nobrace === true || !brace) {
12456
- push$1({
12443
+ push$2({
12457
12444
  type: "text",
12458
12445
  value,
12459
12446
  output: value
@@ -12480,7 +12467,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12480
12467
  state.output = out;
12481
12468
  for (const t of toks) state.output += t.output || t.value;
12482
12469
  }
12483
- push$1({
12470
+ push$2({
12484
12471
  type: "brace",
12485
12472
  value,
12486
12473
  output
@@ -12494,7 +12481,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12494
12481
  */
12495
12482
  if (value === "|") {
12496
12483
  if (extglobs.length > 0) extglobs[extglobs.length - 1].conditions++;
12497
- push$1({
12484
+ push$2({
12498
12485
  type: "text",
12499
12486
  value
12500
12487
  });
@@ -12510,7 +12497,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12510
12497
  brace.comma = true;
12511
12498
  output = "|";
12512
12499
  }
12513
- push$1({
12500
+ push$2({
12514
12501
  type: "comma",
12515
12502
  value,
12516
12503
  output
@@ -12529,7 +12516,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12529
12516
  prev = bos;
12530
12517
  continue;
12531
12518
  }
12532
- push$1({
12519
+ push$2({
12533
12520
  type: "slash",
12534
12521
  value,
12535
12522
  output: SLASH_LITERAL
@@ -12550,14 +12537,14 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12550
12537
  continue;
12551
12538
  }
12552
12539
  if (state.braces + state.parens === 0 && prev.type !== "bos" && prev.type !== "slash") {
12553
- push$1({
12540
+ push$2({
12554
12541
  type: "text",
12555
12542
  value,
12556
12543
  output: DOT_LITERAL
12557
12544
  });
12558
12545
  continue;
12559
12546
  }
12560
- push$1({
12547
+ push$2({
12561
12548
  type: "dot",
12562
12549
  value,
12563
12550
  output: DOT_LITERAL
@@ -12577,7 +12564,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12577
12564
  let output = value;
12578
12565
  if (next === "<" && !utils.supportsLookbehinds()) throw new Error("Node.js v10 or higher is required for regex lookbehinds");
12579
12566
  if (prev.value === "(" && !/[!=<:]/.test(next) || next === "<" && !/<([!=]|\w+>)/.test(remaining())) output = `\\${value}`;
12580
- push$1({
12567
+ push$2({
12581
12568
  type: "text",
12582
12569
  value,
12583
12570
  output
@@ -12585,14 +12572,14 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12585
12572
  continue;
12586
12573
  }
12587
12574
  if (opts.dot !== true && (prev.type === "slash" || prev.type === "bos")) {
12588
- push$1({
12575
+ push$2({
12589
12576
  type: "qmark",
12590
12577
  value,
12591
12578
  output: QMARK_NO_DOT
12592
12579
  });
12593
12580
  continue;
12594
12581
  }
12595
- push$1({
12582
+ push$2({
12596
12583
  type: "qmark",
12597
12584
  value,
12598
12585
  output: QMARK
@@ -12623,7 +12610,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12623
12610
  continue;
12624
12611
  }
12625
12612
  if (prev && prev.value === "(" || opts.regex === false) {
12626
- push$1({
12613
+ push$2({
12627
12614
  type: "plus",
12628
12615
  value,
12629
12616
  output: PLUS_LITERAL
@@ -12631,13 +12618,13 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12631
12618
  continue;
12632
12619
  }
12633
12620
  if (prev && (prev.type === "bracket" || prev.type === "paren" || prev.type === "brace") || state.parens > 0) {
12634
- push$1({
12621
+ push$2({
12635
12622
  type: "plus",
12636
12623
  value
12637
12624
  });
12638
12625
  continue;
12639
12626
  }
12640
- push$1({
12627
+ push$2({
12641
12628
  type: "plus",
12642
12629
  value: PLUS_LITERAL
12643
12630
  });
@@ -12648,7 +12635,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12648
12635
  */
12649
12636
  if (value === "@") {
12650
12637
  if (opts.noextglob !== true && peek() === "(" && peek(2) !== "?") {
12651
- push$1({
12638
+ push$2({
12652
12639
  type: "at",
12653
12640
  extglob: true,
12654
12641
  value,
@@ -12656,7 +12643,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12656
12643
  });
12657
12644
  continue;
12658
12645
  }
12659
- push$1({
12646
+ push$2({
12660
12647
  type: "text",
12661
12648
  value
12662
12649
  });
@@ -12672,7 +12659,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12672
12659
  value += match[0];
12673
12660
  state.index += match[0].length;
12674
12661
  }
12675
- push$1({
12662
+ push$2({
12676
12663
  type: "text",
12677
12664
  value
12678
12665
  });
@@ -12706,7 +12693,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12706
12693
  const isStart = prior.type === "slash" || prior.type === "bos";
12707
12694
  const afterStar = before && (before.type === "star" || before.type === "globstar");
12708
12695
  if (opts.bash === true && (!isStart || rest[0] && rest[0] !== "/")) {
12709
- push$1({
12696
+ push$2({
12710
12697
  type: "star",
12711
12698
  value,
12712
12699
  output: ""
@@ -12716,7 +12703,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12716
12703
  const isBrace = state.braces > 0 && (prior.type === "comma" || prior.type === "brace");
12717
12704
  const isExtglob = extglobs.length && (prior.type === "pipe" || prior.type === "paren");
12718
12705
  if (!isStart && prior.type !== "paren" && !isBrace && !isExtglob) {
12719
- push$1({
12706
+ push$2({
12720
12707
  type: "star",
12721
12708
  value,
12722
12709
  output: ""
@@ -12759,7 +12746,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12759
12746
  state.output += prior.output + prev.output;
12760
12747
  state.globstar = true;
12761
12748
  consume(value + advance());
12762
- push$1({
12749
+ push$2({
12763
12750
  type: "slash",
12764
12751
  value: "/",
12765
12752
  output: ""
@@ -12773,7 +12760,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12773
12760
  state.output = prev.output;
12774
12761
  state.globstar = true;
12775
12762
  consume(value + advance());
12776
- push$1({
12763
+ push$2({
12777
12764
  type: "slash",
12778
12765
  value: "/",
12779
12766
  output: ""
@@ -12797,12 +12784,12 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12797
12784
  if (opts.bash === true) {
12798
12785
  token.output = ".*?";
12799
12786
  if (prev.type === "bos" || prev.type === "slash") token.output = nodot + token.output;
12800
- push$1(token);
12787
+ push$2(token);
12801
12788
  continue;
12802
12789
  }
12803
12790
  if (prev && (prev.type === "bracket" || prev.type === "paren") && opts.regex === true) {
12804
12791
  token.output = value;
12805
- push$1(token);
12792
+ push$2(token);
12806
12793
  continue;
12807
12794
  }
12808
12795
  if (state.index === state.start || prev.type === "slash" || prev.type === "dot") {
@@ -12821,7 +12808,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12821
12808
  prev.output += ONE_CHAR;
12822
12809
  }
12823
12810
  }
12824
- push$1(token);
12811
+ push$2(token);
12825
12812
  }
12826
12813
  while (state.brackets > 0) {
12827
12814
  if (opts.strictBrackets === true) throw new SyntaxError(syntaxError("closing", "]"));
@@ -12838,7 +12825,7 @@ var require_parse$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
12838
12825
  state.output = utils.escapeLast(state.output, "{");
12839
12826
  decrement("braces");
12840
12827
  }
12841
- if (opts.strictSlashes !== true && (prev.type === "star" || prev.type === "bracket")) push$1({
12828
+ if (opts.strictSlashes !== true && (prev.type === "star" || prev.type === "bracket")) push$2({
12842
12829
  type: "maybe_slash",
12843
12830
  value: "",
12844
12831
  output: `${SLASH_LITERAL}?`
@@ -14542,7 +14529,7 @@ var require_queue = /* @__PURE__ */ __commonJSMin(((exports, module) => {
14542
14529
  var _running = 0;
14543
14530
  var errorHandler = null;
14544
14531
  var self$1 = {
14545
- push: push$1,
14532
+ push: push$2,
14546
14533
  drain: noop,
14547
14534
  saturated: noop,
14548
14535
  pause,
@@ -14612,7 +14599,7 @@ var require_queue = /* @__PURE__ */ __commonJSMin(((exports, module) => {
14612
14599
  function idle() {
14613
14600
  return _running === 0 && self$1.length() === 0;
14614
14601
  }
14615
- function push$1(value, done) {
14602
+ function push$2(value, done) {
14616
14603
  var current = cache$2.get();
14617
14604
  current.context = context;
14618
14605
  current.release = release;
@@ -14733,11 +14720,11 @@ var require_queue = /* @__PURE__ */ __commonJSMin(((exports, module) => {
14733
14720
  var queue = fastqueue(context, asyncWrapper, _concurrency);
14734
14721
  var pushCb = queue.push;
14735
14722
  var unshiftCb = queue.unshift;
14736
- queue.push = push$1;
14723
+ queue.push = push$2;
14737
14724
  queue.unshift = unshift$1;
14738
14725
  queue.drained = drained;
14739
14726
  return queue;
14740
- function push$1(value) {
14727
+ function push$2(value) {
14741
14728
  var p$1 = new Promise(function(resolve$1, reject) {
14742
14729
  pushCb(value, function(err, result) {
14743
14730
  if (err) {
@@ -16954,7 +16941,8 @@ const ProjectConfigSchema = object({
16954
16941
  site: SiteConfigSchema.optional(),
16955
16942
  entitiesDir: string().optional().default("entities"),
16956
16943
  functionsDir: string().optional().default("functions"),
16957
- agentsDir: string().optional().default("agents")
16944
+ agentsDir: string().optional().default("agents"),
16945
+ connectors: array(string()).optional()
16958
16946
  });
16959
16947
  const AppConfigSchema = object({ id: string().min(1, "id cannot be empty") });
16960
16948
  const CreateProjectResponseSchema = looseObject({ id: string() });
@@ -28864,7 +28852,7 @@ var Yallist = class Yallist {
28864
28852
  this.length++;
28865
28853
  }
28866
28854
  push(...args) {
28867
- for (let i$1 = 0, l$1 = args.length; i$1 < l$1; i$1++) push(this, args[i$1]);
28855
+ for (let i$1 = 0, l$1 = args.length; i$1 < l$1; i$1++) push$1(this, args[i$1]);
28868
28856
  return this.length;
28869
28857
  }
28870
28858
  unshift(...args) {
@@ -29042,7 +29030,7 @@ function insertAfter(self$1, node, value) {
29042
29030
  self$1.length++;
29043
29031
  return inserted;
29044
29032
  }
29045
- function push(self$1, item) {
29033
+ function push$1(self$1, item) {
29046
29034
  self$1.tail = new Node(item, self$1.tail, void 0, self$1);
29047
29035
  if (!self$1.head) self$1.head = self$1.tail;
29048
29036
  self$1.length++;
@@ -30806,7 +30794,7 @@ function getAppClient() {
30806
30794
 
30807
30795
  //#endregion
30808
30796
  //#region src/core/clients/schemas.ts
30809
- const ApiErrorSchema$1 = object({
30797
+ const ApiErrorSchema = object({
30810
30798
  error_type: string().optional(),
30811
30799
  message: union([string(), record(string(), unknown())]).optional(),
30812
30800
  detail: union([
@@ -39291,7 +39279,13 @@ const InitiateResponseSchema = object({
39291
39279
  already_authorized: boolean().nullish(),
39292
39280
  other_user_email: string().nullish(),
39293
39281
  error: string().nullish()
39294
- });
39282
+ }).transform((data) => ({
39283
+ redirectUrl: data.redirect_url,
39284
+ connectionId: data.connection_id,
39285
+ alreadyAuthorized: data.already_authorized,
39286
+ otherUserEmail: data.other_user_email,
39287
+ error: data.error
39288
+ }));
39295
39289
  /**
39296
39290
  * Response from GET /api/apps/{app_id}/external-auth/status
39297
39291
  */
@@ -39329,13 +39323,6 @@ const ConnectorSchema = object({
39329
39323
  * Response from GET /api/apps/{app_id}/external-auth/list
39330
39324
  */
39331
39325
  const ListResponseSchema = object({ integrations: array(ConnectorSchema) });
39332
- /**
39333
- * Generic API error response
39334
- */
39335
- const ApiErrorSchema = object({
39336
- error: string(),
39337
- detail: string().nullish()
39338
- });
39339
39326
 
39340
39327
  //#endregion
39341
39328
  //#region src/core/connectors/api.ts
@@ -39344,92 +39331,39 @@ const ApiErrorSchema = object({
39344
39331
  * Returns a redirect URL to open in the browser.
39345
39332
  */
39346
39333
  async function initiateOAuth(integrationType, scopes = null) {
39347
- const response = await getAppClient().post("external-auth/initiate", {
39348
- json: {
39349
- integration_type: integrationType,
39350
- scopes
39351
- },
39352
- throwHttpErrors: false
39353
- });
39354
- const json = await response.json();
39355
- if (!response.ok) {
39356
- const errorResult = ApiErrorSchema.safeParse(json);
39357
- if (errorResult.success) throw new ConnectorApiError(errorResult.data.error);
39358
- throw new ConnectorApiError(`Failed to initiate OAuth: ${response.status} ${response.statusText}`);
39359
- }
39360
- const result = InitiateResponseSchema.safeParse(json);
39361
- if (!result.success) throw new ConnectorValidationError(`Invalid initiate response from server: ${result.error.message}`);
39362
- return result.data;
39334
+ const json = await (await getAppClient().post("external-auth/initiate", { json: {
39335
+ integration_type: integrationType,
39336
+ scopes
39337
+ } })).json();
39338
+ return InitiateResponseSchema.parse(json);
39363
39339
  }
39364
39340
  /**
39365
39341
  * Checks the status of an OAuth connection attempt.
39366
39342
  */
39367
39343
  async function checkOAuthStatus(integrationType, connectionId) {
39368
- const response = await getAppClient().get("external-auth/status", {
39369
- searchParams: {
39370
- integration_type: integrationType,
39371
- connection_id: connectionId
39372
- },
39373
- throwHttpErrors: false
39374
- });
39375
- const json = await response.json();
39376
- if (!response.ok) {
39377
- const errorResult = ApiErrorSchema.safeParse(json);
39378
- if (errorResult.success) throw new ConnectorApiError(errorResult.data.error);
39379
- throw new ConnectorApiError(`Failed to check OAuth status: ${response.status} ${response.statusText}`);
39380
- }
39381
- const result = StatusResponseSchema.safeParse(json);
39382
- if (!result.success) throw new ConnectorValidationError(`Invalid status response from server: ${result.error.message}`);
39383
- return result.data;
39344
+ const json = await (await getAppClient().get("external-auth/status", { searchParams: {
39345
+ integration_type: integrationType,
39346
+ connection_id: connectionId
39347
+ } })).json();
39348
+ return StatusResponseSchema.parse(json);
39384
39349
  }
39385
39350
  /**
39386
39351
  * Lists all connected integrations for the current app.
39387
39352
  */
39388
39353
  async function listConnectors() {
39389
- const response = await getAppClient().get("external-auth/list", { throwHttpErrors: false });
39390
- const json = await response.json();
39391
- if (!response.ok) {
39392
- const errorResult = ApiErrorSchema.safeParse(json);
39393
- if (errorResult.success) throw new ConnectorApiError(errorResult.data.error);
39394
- throw new ConnectorApiError(`Failed to list connectors: ${response.status} ${response.statusText}`);
39395
- }
39396
- const result = ListResponseSchema.safeParse(json);
39397
- if (!result.success) throw new ConnectorValidationError(`Invalid list response from server: ${result.error.message}`);
39398
- return result.data.integrations;
39399
- }
39400
- /**
39401
- * Disconnects (soft delete) a connector integration.
39402
- */
39403
- async function disconnectConnector(integrationType) {
39404
- const response = await getAppClient().delete(`external-auth/integrations/${integrationType}`, { throwHttpErrors: false });
39405
- if (!response.ok) {
39406
- const json = await response.json();
39407
- const errorResult = ApiErrorSchema.safeParse(json);
39408
- if (errorResult.success) throw new ConnectorApiError(errorResult.data.error);
39409
- throw new ConnectorApiError(`Failed to disconnect connector: ${response.status} ${response.statusText}`);
39410
- }
39354
+ const json = await (await getAppClient().get("external-auth/list")).json();
39355
+ return ListResponseSchema.parse(json).integrations;
39411
39356
  }
39412
39357
  /**
39413
39358
  * Removes (hard delete) a connector integration.
39414
39359
  * This permanently removes the connector and cannot be undone.
39415
39360
  */
39416
39361
  async function removeConnector(integrationType) {
39417
- const response = await getAppClient().delete(`external-auth/integrations/${integrationType}/remove`, { throwHttpErrors: false });
39418
- if (!response.ok) {
39419
- const json = await response.json();
39420
- const errorResult = ApiErrorSchema.safeParse(json);
39421
- if (errorResult.success) throw new ConnectorApiError(errorResult.data.error);
39422
- throw new ConnectorApiError(`Failed to remove connector: ${response.status} ${response.statusText}`);
39423
- }
39362
+ await getAppClient().delete(`external-auth/integrations/${integrationType}`);
39424
39363
  }
39425
39364
 
39426
39365
  //#endregion
39427
- //#region src/core/connectors/constants.ts
39428
- /**
39429
- * OAuth polling configuration
39430
- */
39431
- const OAUTH_POLL_INTERVAL_MS = 2e3;
39432
- const OAUTH_POLL_TIMEOUT_MS = 300 * 1e3;
39366
+ //#region src/core/connectors/consts.ts
39433
39367
  /**
39434
39368
  * Supported OAuth connector integrations.
39435
39369
  * Based on apper/backend/app/external_auth/models/constants.py
@@ -39469,12 +39403,13 @@ function isValidIntegration(type) {
39469
39403
  return SUPPORTED_INTEGRATIONS.includes(type);
39470
39404
  }
39471
39405
  function getIntegrationDisplayName(type) {
39472
- if (isValidIntegration(type)) return INTEGRATION_DISPLAY_NAMES[type];
39473
- return type;
39406
+ return INTEGRATION_DISPLAY_NAMES[type] ?? type;
39474
39407
  }
39475
39408
 
39476
39409
  //#endregion
39477
- //#region src/core/connectors/oauth.ts
39410
+ //#region src/cli/commands/connectors/utils.ts
39411
+ const OAUTH_POLL_INTERVAL_MS = 2e3;
39412
+ const OAUTH_POLL_TIMEOUT_MS = 300 * 1e3;
39478
39413
  /**
39479
39414
  * Polls for OAuth completion status.
39480
39415
  * Returns when status becomes ACTIVE or FAILED, or times out.
@@ -39516,125 +39451,127 @@ async function waitForOAuthCompletion(integrationType, connectionId, options) {
39516
39451
  }
39517
39452
 
39518
39453
  //#endregion
39519
- //#region src/cli/commands/connectors/add.ts
39520
- function validateIntegrationType(type) {
39521
- if (!isValidIntegration(type)) {
39522
- const supportedList = SUPPORTED_INTEGRATIONS.join(", ");
39523
- throw new Error(`Unsupported connector: ${type}\nSupported connectors: ${supportedList}`);
39524
- }
39525
- return type;
39526
- }
39527
- async function promptForIntegrationType() {
39528
- const selected = await ve({
39529
- message: "Select an integration to connect:",
39530
- options: SUPPORTED_INTEGRATIONS.map((type) => ({
39531
- value: type,
39532
- label: getIntegrationDisplayName(type)
39533
- }))
39534
- });
39535
- if (pD(selected)) {
39536
- xe("Operation cancelled.");
39537
- process.exit(0);
39538
- }
39539
- return selected;
39454
+ //#region src/cli/commands/connectors/push.ts
39455
+ /**
39456
+ * Get connectors defined in the local config.jsonc
39457
+ */
39458
+ async function getLocalConnectors() {
39459
+ const connectors = (await runTask("Reading project config...", async () => readProjectConfig(), {
39460
+ successMessage: "Project config loaded",
39461
+ errorMessage: "Failed to read project config"
39462
+ })).project.connectors || [];
39463
+ const validConnectors = [];
39464
+ const invalidConnectors = [];
39465
+ for (const connector of connectors) if (isValidIntegration(connector)) validConnectors.push(connector);
39466
+ else invalidConnectors.push(connector);
39467
+ if (invalidConnectors.length > 0) throw new Error(`Invalid connectors found in config.jsonc: ${invalidConnectors.join(", ")}`);
39468
+ return validConnectors;
39540
39469
  }
39541
- async function pollForOAuthCompletion(integrationType, connectionId) {
39542
- return await runTask("Waiting for authorization...", async () => {
39543
- return await waitForOAuthCompletion(integrationType, connectionId);
39544
- }, {
39545
- successMessage: "Authorization completed!",
39546
- errorMessage: "Authorization failed"
39470
+ /**
39471
+ * Get active connectors from the backend
39472
+ */
39473
+ async function getBackendConnectors() {
39474
+ const connectors = await runTask("Fetching active connectors...", async () => listConnectors(), {
39475
+ successMessage: "Active connectors loaded",
39476
+ errorMessage: "Failed to fetch connectors"
39547
39477
  });
39478
+ const activeConnectors = /* @__PURE__ */ new Set();
39479
+ for (const connector of connectors) if (isValidIntegration(connector.integrationType)) activeConnectors.add(connector.integrationType);
39480
+ return activeConnectors;
39548
39481
  }
39549
- async function addConnector(integrationType) {
39550
- const selectedType = integrationType ? validateIntegrationType(integrationType) : await promptForIntegrationType();
39551
- const displayName = getIntegrationDisplayName(selectedType);
39482
+ /**
39483
+ * Activate a connector by initiating OAuth and polling for completion
39484
+ */
39485
+ async function activateConnector(integrationType) {
39486
+ const displayName = getIntegrationDisplayName(integrationType);
39552
39487
  const initiateResponse = await runTask(`Initiating ${displayName} connection...`, async () => {
39553
- return await initiateOAuth(selectedType);
39488
+ return await initiateOAuth(integrationType);
39554
39489
  }, {
39555
39490
  successMessage: `${displayName} OAuth initiated`,
39556
39491
  errorMessage: `Failed to initiate ${displayName} connection`
39557
39492
  });
39558
- if (initiateResponse.already_authorized) return { outroMessage: `Already connected to ${theme.styles.bold(displayName)}` };
39559
- if (initiateResponse.error === "different_user" && initiateResponse.other_user_email) throw new Error(`This app is already connected to ${displayName} by ${initiateResponse.other_user_email}`);
39560
- if (!initiateResponse.redirect_url || !initiateResponse.connection_id) throw new Error("Invalid response from server: missing redirect URL or connection ID");
39561
- M.info(`Please authorize ${displayName} at:\n${theme.colors.links(initiateResponse.redirect_url)}`);
39562
- const result = await pollForOAuthCompletion(selectedType, initiateResponse.connection_id);
39563
- if (!result.success) throw new Error(result.error || "Authorization failed");
39564
- const accountInfo = result.accountEmail ? ` as ${theme.styles.bold(result.accountEmail)}` : "";
39565
- return { outroMessage: `Successfully connected to ${theme.styles.bold(displayName)}${accountInfo}` };
39566
- }
39567
- const connectorsAddCommand = new Command("add").argument("[type]", "Integration type (e.g., slack, notion, googlecalendar)").description("Connect an OAuth integration").action(async (type) => {
39568
- await runCommand(() => addConnector(type), {
39569
- requireAuth: true,
39570
- requireAppConfig: true
39493
+ if (initiateResponse.alreadyAuthorized) return { success: true };
39494
+ if (initiateResponse.error === "different_user" && initiateResponse.otherUserEmail) return {
39495
+ success: false,
39496
+ error: `Already connected by ${initiateResponse.otherUserEmail}`
39497
+ };
39498
+ if (!initiateResponse.redirectUrl || !initiateResponse.connectionId) return {
39499
+ success: false,
39500
+ error: "Invalid response from server: missing redirect URL or connection ID"
39501
+ };
39502
+ M.info(`Please authorize ${displayName} at:\n${theme.colors.links(initiateResponse.redirectUrl)}`);
39503
+ return await runTask("Waiting for authorization...", async () => {
39504
+ return await waitForOAuthCompletion(integrationType, initiateResponse.connectionId);
39505
+ }, {
39506
+ successMessage: "Authorization completed!",
39507
+ errorMessage: "Authorization failed"
39571
39508
  });
39572
- });
39573
-
39574
- //#endregion
39575
- //#region src/cli/commands/connectors/remove.ts
39576
- function mapBackendConnectors(connectors) {
39577
- return connectors.filter((c$1) => isValidIntegration(c$1.integrationType)).map((c$1) => ({
39578
- type: c$1.integrationType,
39579
- displayName: getIntegrationDisplayName(c$1.integrationType),
39580
- accountEmail: (c$1.accountInfo?.email || c$1.accountInfo?.name) ?? void 0
39581
- }));
39582
39509
  }
39583
- function validateConnectorType(type, connectors) {
39584
- if (!isValidIntegration(type)) throw new Error(`Invalid connector type: ${type}`);
39585
- const connector = connectors.find((c$1) => c$1.type === type);
39586
- if (!connector) throw new Error(`No ${getIntegrationDisplayName(type)} connector found`);
39587
- return connector;
39588
- }
39589
- async function promptForConnectorToRemove(connectors) {
39590
- const selected = await ve({
39591
- message: "Select a connector to remove:",
39592
- options: connectors.map((c$1) => {
39593
- let label = c$1.displayName;
39594
- if (c$1.accountEmail) label += ` (${c$1.accountEmail})`;
39595
- return {
39596
- value: c$1.type,
39597
- label
39598
- };
39599
- })
39510
+ /**
39511
+ * Delete a connector from the backend (hard delete)
39512
+ */
39513
+ async function deleteConnector(integrationType) {
39514
+ const displayName = getIntegrationDisplayName(integrationType);
39515
+ await runTask(`Removing ${displayName}...`, async () => {
39516
+ await removeConnector(integrationType);
39517
+ }, {
39518
+ successMessage: `${displayName} removed`,
39519
+ errorMessage: `Failed to remove ${displayName}`
39600
39520
  });
39601
- if (pD(selected)) {
39602
- xe("Operation cancelled.");
39603
- process.exit(0);
39604
- }
39605
- return connectors.find((c$1) => c$1.type === selected);
39606
39521
  }
39607
- async function removeConnectorCommand(integrationType, options = {}) {
39608
- const isHardDelete = options.hard === true;
39609
- const connectors = mapBackendConnectors(await runTask("Fetching connectors...", async () => listConnectors(), {
39610
- successMessage: "Connectors loaded",
39611
- errorMessage: "Failed to fetch connectors"
39612
- }));
39613
- if (connectors.length === 0) return { outroMessage: "No connectors to remove" };
39614
- const selectedConnector = integrationType ? validateConnectorType(integrationType, connectors) : await promptForConnectorToRemove(connectors);
39615
- const displayName = selectedConnector.displayName;
39616
- const accountInfo = selectedConnector.accountEmail ? ` (${selectedConnector.accountEmail})` : "";
39617
- if (!options.yes) {
39618
- const shouldRemove = await ye({
39619
- message: `${isHardDelete ? "Permanently remove" : "Remove"} ${displayName}${accountInfo}?`,
39620
- initialValue: false
39621
- });
39622
- if (pD(shouldRemove) || !shouldRemove) {
39522
+ async function push(options = {}) {
39523
+ const localConnectors = await getLocalConnectors();
39524
+ const backendConnectors = await getBackendConnectors();
39525
+ const toDelete = [];
39526
+ const toActivate = [];
39527
+ const alreadyActive = [];
39528
+ for (const connector of backendConnectors) if (!localConnectors.includes(connector)) toDelete.push(connector);
39529
+ for (const connector of localConnectors) if (backendConnectors.has(connector)) alreadyActive.push(connector);
39530
+ else toActivate.push(connector);
39531
+ if (toDelete.length === 0 && toActivate.length === 0) return { outroMessage: "All connectors are in sync. Nothing to do." };
39532
+ M.info("\nConnector sync summary:");
39533
+ if (toDelete.length > 0) M.warn(` ${theme.colors.error("Delete from backend:")} ${toDelete.map(getIntegrationDisplayName).join(", ")}`);
39534
+ if (toActivate.length > 0) M.info(` ${theme.colors.success("Activate:")} ${toActivate.map(getIntegrationDisplayName).join(", ")}`);
39535
+ if (alreadyActive.length > 0) M.info(` ${theme.colors.dim("Already active:")} ${alreadyActive.map(getIntegrationDisplayName).join(", ")}`);
39536
+ if (!options.yes && toDelete.length > 0) {
39537
+ const shouldContinue = await ye({ message: `Delete ${toDelete.length} connector(s) from backend?` });
39538
+ if (pD(shouldContinue) || !shouldContinue) {
39623
39539
  xe("Operation cancelled.");
39624
39540
  process.exit(0);
39625
39541
  }
39626
39542
  }
39627
- await runTask(`Removing ${displayName}...`, async () => {
39628
- if (isHardDelete) await removeConnector(selectedConnector.type);
39629
- else await disconnectConnector(selectedConnector.type);
39630
- }, {
39631
- successMessage: `${displayName} removed`,
39632
- errorMessage: `Failed to remove ${displayName}`
39633
- });
39634
- return { outroMessage: `Successfully removed ${theme.styles.bold(displayName)}` };
39543
+ const deleteResults = [];
39544
+ for (const connector of toDelete) try {
39545
+ await deleteConnector(connector);
39546
+ deleteResults.push(`${theme.colors.success("✓")} Deleted ${getIntegrationDisplayName(connector)}`);
39547
+ } catch (error) {
39548
+ const errorMsg = error instanceof Error ? error.message : "Unknown error";
39549
+ deleteResults.push(`${theme.colors.error("✗")} Failed to delete ${getIntegrationDisplayName(connector)}: ${errorMsg}`);
39550
+ }
39551
+ const activationResults = [];
39552
+ for (const connector of toActivate) try {
39553
+ const result = await activateConnector(connector);
39554
+ if (result.success) {
39555
+ const accountInfo = result.accountEmail ? ` as ${theme.styles.bold(result.accountEmail)}` : "";
39556
+ activationResults.push(`${theme.colors.success("✓")} Activated ${getIntegrationDisplayName(connector)}${accountInfo}`);
39557
+ } else activationResults.push(`${theme.colors.error("✗")} Failed to activate ${getIntegrationDisplayName(connector)}: ${result.error}`);
39558
+ } catch (error) {
39559
+ const errorMsg = error instanceof Error ? error.message : "Unknown error";
39560
+ activationResults.push(`${theme.colors.error("✗")} Failed to activate ${getIntegrationDisplayName(connector)}: ${errorMsg}`);
39561
+ }
39562
+ const summaryLines = [];
39563
+ if (deleteResults.length > 0) {
39564
+ summaryLines.push("\nDeleted connectors:");
39565
+ summaryLines.push(...deleteResults.map((r$1) => ` ${r$1}`));
39566
+ }
39567
+ if (activationResults.length > 0) {
39568
+ summaryLines.push("\nActivated connectors:");
39569
+ summaryLines.push(...activationResults.map((r$1) => ` ${r$1}`));
39570
+ }
39571
+ return { outroMessage: summaryLines.join("\n") || "Connector sync completed" };
39635
39572
  }
39636
- const connectorsRemoveCommand = new Command("remove").argument("[type]", "Integration type to remove (e.g., slack, notion)").option("--hard", "Permanently remove the connector (cannot be undone)").option("-y, --yes", "Skip confirmation prompt").description("Remove an OAuth integration").action(async (type, options) => {
39637
- await runCommand(() => removeConnectorCommand(type, options), {
39573
+ const connectorsPushCommand = new Command("push").description("Sync connectors defined in config.jsonc with backend").option("-y, --yes", "Skip confirmation prompts").action(async (options) => {
39574
+ await runCommand(() => push(options), {
39638
39575
  requireAuth: true,
39639
39576
  requireAppConfig: true
39640
39577
  });
@@ -39642,7 +39579,7 @@ const connectorsRemoveCommand = new Command("remove").argument("[type]", "Integr
39642
39579
 
39643
39580
  //#endregion
39644
39581
  //#region src/cli/commands/connectors/index.ts
39645
- const connectorsCommand = new Command("connectors").description("Manage OAuth connectors").addCommand(connectorsAddCommand).addCommand(connectorsRemoveCommand);
39582
+ const connectorsCommand = new Command("connectors").description("Manage OAuth connectors").addCommand(connectorsPushCommand);
39646
39583
 
39647
39584
  //#endregion
39648
39585
  //#region package.json
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "task_manager",
3
+ "description": "An AI agent that helps you manage and change your tasks",
4
+ "instructions": "You are a helpful task management assistant. You can help users create, update, mark as completed, and delete tasks using the entity tool. When a user asks to change a task, help them modify it by updating the appropriate fields. Always be conversational and helpful.",
5
+ "tool_configs": [
6
+ {
7
+ "entity_name": "Task",
8
+ "allowed_operations": ["read", "create", "update", "delete"]
9
+ }
10
+ ]
11
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@base44-preview/cli",
3
- "version": "0.0.25-pr.104.a8520b5",
3
+ "version": "0.0.25-pr.104.e8c6c8b",
4
4
  "description": "Base44 CLI - Unified interface for managing Base44 applications",
5
5
  "type": "module",
6
6
  "bin": {