@locusai/cli 0.13.0 → 0.13.3

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.
Files changed (3) hide show
  1. package/bin/agent/worker.js +561 -222
  2. package/bin/locus.js +1677 -617
  3. package/package.json +3 -3
package/bin/locus.js CHANGED
@@ -29,7 +29,7 @@ var __export = (target, all) => {
29
29
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
30
30
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
31
31
 
32
- // ../../node_modules/@sindresorhus/merge-streams/index.js
32
+ // ../../node_modules/.bun/@sindresorhus+merge-streams@2.3.0/node_modules/@sindresorhus/merge-streams/index.js
33
33
  import { on, once } from "node:events";
34
34
  import { PassThrough as PassThroughStream } from "node:stream";
35
35
  import { finished } from "node:stream/promises";
@@ -191,7 +191,7 @@ var init_merge_streams = __esm(() => {
191
191
  unpipeEvent = Symbol("unpipe");
192
192
  });
193
193
 
194
- // ../../node_modules/fast-glob/out/utils/array.js
194
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/utils/array.js
195
195
  var require_array = __commonJS((exports) => {
196
196
  Object.defineProperty(exports, "__esModule", { value: true });
197
197
  exports.splitWhen = exports.flatten = undefined;
@@ -215,7 +215,7 @@ var require_array = __commonJS((exports) => {
215
215
  exports.splitWhen = splitWhen;
216
216
  });
217
217
 
218
- // ../../node_modules/fast-glob/out/utils/errno.js
218
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/utils/errno.js
219
219
  var require_errno = __commonJS((exports) => {
220
220
  Object.defineProperty(exports, "__esModule", { value: true });
221
221
  exports.isEnoentCodeError = undefined;
@@ -225,7 +225,7 @@ var require_errno = __commonJS((exports) => {
225
225
  exports.isEnoentCodeError = isEnoentCodeError;
226
226
  });
227
227
 
228
- // ../../node_modules/fast-glob/out/utils/fs.js
228
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/utils/fs.js
229
229
  var require_fs = __commonJS((exports) => {
230
230
  Object.defineProperty(exports, "__esModule", { value: true });
231
231
  exports.createDirentFromStats = undefined;
@@ -248,7 +248,7 @@ var require_fs = __commonJS((exports) => {
248
248
  exports.createDirentFromStats = createDirentFromStats;
249
249
  });
250
250
 
251
- // ../../node_modules/fast-glob/out/utils/path.js
251
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/utils/path.js
252
252
  var require_path = __commonJS((exports) => {
253
253
  Object.defineProperty(exports, "__esModule", { value: true });
254
254
  exports.convertPosixPathToPattern = exports.convertWindowsPathToPattern = exports.convertPathToPattern = exports.escapePosixPath = exports.escapeWindowsPath = exports.escape = exports.removeLeadingDotSegment = exports.makeAbsolute = exports.unixify = undefined;
@@ -298,7 +298,7 @@ var require_path = __commonJS((exports) => {
298
298
  exports.convertPosixPathToPattern = convertPosixPathToPattern;
299
299
  });
300
300
 
301
- // ../../node_modules/is-extglob/index.js
301
+ // ../../node_modules/.bun/is-extglob@2.1.1/node_modules/is-extglob/index.js
302
302
  var require_is_extglob = __commonJS((exports, module) => {
303
303
  /*!
304
304
  * is-extglob <https://github.com/jonschlinkert/is-extglob>
@@ -320,7 +320,7 @@ var require_is_extglob = __commonJS((exports, module) => {
320
320
  };
321
321
  });
322
322
 
323
- // ../../node_modules/is-glob/index.js
323
+ // ../../node_modules/.bun/is-glob@4.0.3/node_modules/is-glob/index.js
324
324
  var require_is_glob = __commonJS((exports, module) => {
325
325
  /*!
326
326
  * is-glob <https://github.com/jonschlinkert/is-glob>
@@ -455,7 +455,7 @@ var require_is_glob = __commonJS((exports, module) => {
455
455
  };
456
456
  });
457
457
 
458
- // ../../node_modules/glob-parent/index.js
458
+ // ../../node_modules/.bun/glob-parent@5.1.2/node_modules/glob-parent/index.js
459
459
  var require_glob_parent = __commonJS((exports, module) => {
460
460
  var isGlob = require_is_glob();
461
461
  var pathPosixDirname = __require("path").posix.dirname;
@@ -481,7 +481,7 @@ var require_glob_parent = __commonJS((exports, module) => {
481
481
  };
482
482
  });
483
483
 
484
- // ../../node_modules/braces/lib/utils.js
484
+ // ../../node_modules/.bun/braces@3.0.3/node_modules/braces/lib/utils.js
485
485
  var require_utils = __commonJS((exports) => {
486
486
  exports.isInteger = (num) => {
487
487
  if (typeof num === "number") {
@@ -568,7 +568,7 @@ var require_utils = __commonJS((exports) => {
568
568
  };
569
569
  });
570
570
 
571
- // ../../node_modules/braces/lib/stringify.js
571
+ // ../../node_modules/.bun/braces@3.0.3/node_modules/braces/lib/stringify.js
572
572
  var require_stringify = __commonJS((exports, module) => {
573
573
  var utils = require_utils();
574
574
  module.exports = (ast, options = {}) => {
@@ -596,7 +596,7 @@ var require_stringify = __commonJS((exports, module) => {
596
596
  };
597
597
  });
598
598
 
599
- // ../../node_modules/is-number/index.js
599
+ // ../../node_modules/.bun/is-number@7.0.0/node_modules/is-number/index.js
600
600
  var require_is_number = __commonJS((exports, module) => {
601
601
  /*!
602
602
  * is-number <https://github.com/jonschlinkert/is-number>
@@ -615,7 +615,7 @@ var require_is_number = __commonJS((exports, module) => {
615
615
  };
616
616
  });
617
617
 
618
- // ../../node_modules/to-regex-range/index.js
618
+ // ../../node_modules/.bun/to-regex-range@5.0.1/node_modules/to-regex-range/index.js
619
619
  var require_to_regex_range = __commonJS((exports, module) => {
620
620
  /*!
621
621
  * to-regex-range <https://github.com/micromatch/to-regex-range>
@@ -830,7 +830,7 @@ var require_to_regex_range = __commonJS((exports, module) => {
830
830
  module.exports = toRegexRange;
831
831
  });
832
832
 
833
- // ../../node_modules/fill-range/index.js
833
+ // ../../node_modules/.bun/fill-range@7.1.1/node_modules/fill-range/index.js
834
834
  var require_fill_range = __commonJS((exports, module) => {
835
835
  /*!
836
836
  * fill-range <https://github.com/jonschlinkert/fill-range>
@@ -1039,7 +1039,7 @@ var require_fill_range = __commonJS((exports, module) => {
1039
1039
  module.exports = fill;
1040
1040
  });
1041
1041
 
1042
- // ../../node_modules/braces/lib/compile.js
1042
+ // ../../node_modules/.bun/braces@3.0.3/node_modules/braces/lib/compile.js
1043
1043
  var require_compile = __commonJS((exports, module) => {
1044
1044
  var fill = require_fill_range();
1045
1045
  var utils = require_utils();
@@ -1088,7 +1088,7 @@ var require_compile = __commonJS((exports, module) => {
1088
1088
  module.exports = compile;
1089
1089
  });
1090
1090
 
1091
- // ../../node_modules/braces/lib/expand.js
1091
+ // ../../node_modules/.bun/braces@3.0.3/node_modules/braces/lib/expand.js
1092
1092
  var require_expand = __commonJS((exports, module) => {
1093
1093
  var fill = require_fill_range();
1094
1094
  var stringify = require_stringify();
@@ -1182,7 +1182,7 @@ var require_expand = __commonJS((exports, module) => {
1182
1182
  module.exports = expand;
1183
1183
  });
1184
1184
 
1185
- // ../../node_modules/braces/lib/constants.js
1185
+ // ../../node_modules/.bun/braces@3.0.3/node_modules/braces/lib/constants.js
1186
1186
  var require_constants = __commonJS((exports, module) => {
1187
1187
  module.exports = {
1188
1188
  MAX_LENGTH: 1e4,
@@ -1234,7 +1234,7 @@ var require_constants = __commonJS((exports, module) => {
1234
1234
  };
1235
1235
  });
1236
1236
 
1237
- // ../../node_modules/braces/lib/parse.js
1237
+ // ../../node_modules/.bun/braces@3.0.3/node_modules/braces/lib/parse.js
1238
1238
  var require_parse = __commonJS((exports, module) => {
1239
1239
  var stringify = require_stringify();
1240
1240
  var {
@@ -1461,7 +1461,7 @@ var require_parse = __commonJS((exports, module) => {
1461
1461
  module.exports = parse;
1462
1462
  });
1463
1463
 
1464
- // ../../node_modules/braces/index.js
1464
+ // ../../node_modules/.bun/braces@3.0.3/node_modules/braces/index.js
1465
1465
  var require_braces = __commonJS((exports, module) => {
1466
1466
  var stringify = require_stringify();
1467
1467
  var compile = require_compile();
@@ -1521,7 +1521,7 @@ var require_braces = __commonJS((exports, module) => {
1521
1521
  module.exports = braces;
1522
1522
  });
1523
1523
 
1524
- // ../../node_modules/picomatch/lib/constants.js
1524
+ // ../../node_modules/.bun/picomatch@2.3.1/node_modules/picomatch/lib/constants.js
1525
1525
  var require_constants2 = __commonJS((exports, module) => {
1526
1526
  var path = __require("path");
1527
1527
  var WIN_SLASH = "\\\\/";
@@ -1661,7 +1661,7 @@ var require_constants2 = __commonJS((exports, module) => {
1661
1661
  };
1662
1662
  });
1663
1663
 
1664
- // ../../node_modules/picomatch/lib/utils.js
1664
+ // ../../node_modules/.bun/picomatch@2.3.1/node_modules/picomatch/lib/utils.js
1665
1665
  var require_utils2 = __commonJS((exports) => {
1666
1666
  var path = __require("path");
1667
1667
  var win32 = process.platform === "win32";
@@ -1721,7 +1721,7 @@ var require_utils2 = __commonJS((exports) => {
1721
1721
  };
1722
1722
  });
1723
1723
 
1724
- // ../../node_modules/picomatch/lib/scan.js
1724
+ // ../../node_modules/.bun/picomatch@2.3.1/node_modules/picomatch/lib/scan.js
1725
1725
  var require_scan = __commonJS((exports, module) => {
1726
1726
  var utils = require_utils2();
1727
1727
  var {
@@ -2036,7 +2036,7 @@ var require_scan = __commonJS((exports, module) => {
2036
2036
  module.exports = scan;
2037
2037
  });
2038
2038
 
2039
- // ../../node_modules/picomatch/lib/parse.js
2039
+ // ../../node_modules/.bun/picomatch@2.3.1/node_modules/picomatch/lib/parse.js
2040
2040
  var require_parse2 = __commonJS((exports, module) => {
2041
2041
  var constants = require_constants2();
2042
2042
  var utils = require_utils2();
@@ -2814,7 +2814,7 @@ var require_parse2 = __commonJS((exports, module) => {
2814
2814
  module.exports = parse;
2815
2815
  });
2816
2816
 
2817
- // ../../node_modules/picomatch/lib/picomatch.js
2817
+ // ../../node_modules/.bun/picomatch@2.3.1/node_modules/picomatch/lib/picomatch.js
2818
2818
  var require_picomatch = __commonJS((exports, module) => {
2819
2819
  var path = __require("path");
2820
2820
  var scan = require_scan();
@@ -2955,7 +2955,7 @@ var require_picomatch = __commonJS((exports, module) => {
2955
2955
  module.exports = picomatch;
2956
2956
  });
2957
2957
 
2958
- // ../../node_modules/micromatch/index.js
2958
+ // ../../node_modules/.bun/micromatch@4.0.8/node_modules/micromatch/index.js
2959
2959
  var require_micromatch = __commonJS((exports, module) => {
2960
2960
  var util = __require("util");
2961
2961
  var braces = require_braces();
@@ -3119,7 +3119,7 @@ var require_micromatch = __commonJS((exports, module) => {
3119
3119
  module.exports = micromatch;
3120
3120
  });
3121
3121
 
3122
- // ../../node_modules/fast-glob/out/utils/pattern.js
3122
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/utils/pattern.js
3123
3123
  var require_pattern = __commonJS((exports) => {
3124
3124
  Object.defineProperty(exports, "__esModule", { value: true });
3125
3125
  exports.isAbsolute = exports.partitionAbsoluteAndRelative = exports.removeDuplicateSlashes = exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.isPatternRelatedToParentDirectory = exports.getPatternsOutsideCurrentDirectory = exports.getPatternsInsideCurrentDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = undefined;
@@ -3281,7 +3281,7 @@ var require_pattern = __commonJS((exports) => {
3281
3281
  exports.isAbsolute = isAbsolute;
3282
3282
  });
3283
3283
 
3284
- // ../../node_modules/merge2/index.js
3284
+ // ../../node_modules/.bun/merge2@1.4.1/node_modules/merge2/index.js
3285
3285
  var require_merge2 = __commonJS((exports, module) => {
3286
3286
  var Stream = __require("stream");
3287
3287
  var PassThrough = Stream.PassThrough;
@@ -3397,7 +3397,7 @@ var require_merge2 = __commonJS((exports, module) => {
3397
3397
  }
3398
3398
  });
3399
3399
 
3400
- // ../../node_modules/fast-glob/out/utils/stream.js
3400
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/utils/stream.js
3401
3401
  var require_stream = __commonJS((exports) => {
3402
3402
  Object.defineProperty(exports, "__esModule", { value: true });
3403
3403
  exports.merge = undefined;
@@ -3417,7 +3417,7 @@ var require_stream = __commonJS((exports) => {
3417
3417
  }
3418
3418
  });
3419
3419
 
3420
- // ../../node_modules/fast-glob/out/utils/string.js
3420
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/utils/string.js
3421
3421
  var require_string = __commonJS((exports) => {
3422
3422
  Object.defineProperty(exports, "__esModule", { value: true });
3423
3423
  exports.isEmpty = exports.isString = undefined;
@@ -3431,7 +3431,7 @@ var require_string = __commonJS((exports) => {
3431
3431
  exports.isEmpty = isEmpty;
3432
3432
  });
3433
3433
 
3434
- // ../../node_modules/fast-glob/out/utils/index.js
3434
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/utils/index.js
3435
3435
  var require_utils3 = __commonJS((exports) => {
3436
3436
  Object.defineProperty(exports, "__esModule", { value: true });
3437
3437
  exports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = undefined;
@@ -3451,7 +3451,7 @@ var require_utils3 = __commonJS((exports) => {
3451
3451
  exports.string = string;
3452
3452
  });
3453
3453
 
3454
- // ../../node_modules/fast-glob/out/managers/tasks.js
3454
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/managers/tasks.js
3455
3455
  var require_tasks = __commonJS((exports) => {
3456
3456
  Object.defineProperty(exports, "__esModule", { value: true });
3457
3457
  exports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = undefined;
@@ -3534,7 +3534,7 @@ var require_tasks = __commonJS((exports) => {
3534
3534
  exports.convertPatternGroupToTask = convertPatternGroupToTask;
3535
3535
  });
3536
3536
 
3537
- // ../../node_modules/@nodelib/fs.stat/out/providers/async.js
3537
+ // ../../node_modules/.bun/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/providers/async.js
3538
3538
  var require_async = __commonJS((exports) => {
3539
3539
  Object.defineProperty(exports, "__esModule", { value: true });
3540
3540
  exports.read = undefined;
@@ -3573,7 +3573,7 @@ var require_async = __commonJS((exports) => {
3573
3573
  }
3574
3574
  });
3575
3575
 
3576
- // ../../node_modules/@nodelib/fs.stat/out/providers/sync.js
3576
+ // ../../node_modules/.bun/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/providers/sync.js
3577
3577
  var require_sync = __commonJS((exports) => {
3578
3578
  Object.defineProperty(exports, "__esModule", { value: true });
3579
3579
  exports.read = undefined;
@@ -3598,7 +3598,7 @@ var require_sync = __commonJS((exports) => {
3598
3598
  exports.read = read;
3599
3599
  });
3600
3600
 
3601
- // ../../node_modules/@nodelib/fs.stat/out/adapters/fs.js
3601
+ // ../../node_modules/.bun/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/adapters/fs.js
3602
3602
  var require_fs2 = __commonJS((exports) => {
3603
3603
  Object.defineProperty(exports, "__esModule", { value: true });
3604
3604
  exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = undefined;
@@ -3618,7 +3618,7 @@ var require_fs2 = __commonJS((exports) => {
3618
3618
  exports.createFileSystemAdapter = createFileSystemAdapter;
3619
3619
  });
3620
3620
 
3621
- // ../../node_modules/@nodelib/fs.stat/out/settings.js
3621
+ // ../../node_modules/.bun/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/settings.js
3622
3622
  var require_settings = __commonJS((exports) => {
3623
3623
  Object.defineProperty(exports, "__esModule", { value: true });
3624
3624
  var fs = require_fs2();
@@ -3638,7 +3638,7 @@ var require_settings = __commonJS((exports) => {
3638
3638
  exports.default = Settings;
3639
3639
  });
3640
3640
 
3641
- // ../../node_modules/@nodelib/fs.stat/out/index.js
3641
+ // ../../node_modules/.bun/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/index.js
3642
3642
  var require_out = __commonJS((exports) => {
3643
3643
  Object.defineProperty(exports, "__esModule", { value: true });
3644
3644
  exports.statSync = exports.stat = exports.Settings = undefined;
@@ -3667,7 +3667,7 @@ var require_out = __commonJS((exports) => {
3667
3667
  }
3668
3668
  });
3669
3669
 
3670
- // ../../node_modules/queue-microtask/index.js
3670
+ // ../../node_modules/.bun/queue-microtask@1.2.3/node_modules/queue-microtask/index.js
3671
3671
  var require_queue_microtask = __commonJS((exports, module) => {
3672
3672
  /*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
3673
3673
  var promise;
@@ -3676,7 +3676,7 @@ var require_queue_microtask = __commonJS((exports, module) => {
3676
3676
  }, 0));
3677
3677
  });
3678
3678
 
3679
- // ../../node_modules/run-parallel/index.js
3679
+ // ../../node_modules/.bun/run-parallel@1.2.0/node_modules/run-parallel/index.js
3680
3680
  var require_run_parallel = __commonJS((exports, module) => {
3681
3681
  /*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
3682
3682
  module.exports = runParallel;
@@ -3728,7 +3728,7 @@ var require_run_parallel = __commonJS((exports, module) => {
3728
3728
  }
3729
3729
  });
3730
3730
 
3731
- // ../../node_modules/@nodelib/fs.scandir/out/constants.js
3731
+ // ../../node_modules/.bun/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/constants.js
3732
3732
  var require_constants3 = __commonJS((exports) => {
3733
3733
  Object.defineProperty(exports, "__esModule", { value: true });
3734
3734
  exports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = undefined;
@@ -3745,7 +3745,7 @@ var require_constants3 = __commonJS((exports) => {
3745
3745
  exports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;
3746
3746
  });
3747
3747
 
3748
- // ../../node_modules/@nodelib/fs.scandir/out/utils/fs.js
3748
+ // ../../node_modules/.bun/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/utils/fs.js
3749
3749
  var require_fs3 = __commonJS((exports) => {
3750
3750
  Object.defineProperty(exports, "__esModule", { value: true });
3751
3751
  exports.createDirentFromStats = undefined;
@@ -3768,7 +3768,7 @@ var require_fs3 = __commonJS((exports) => {
3768
3768
  exports.createDirentFromStats = createDirentFromStats;
3769
3769
  });
3770
3770
 
3771
- // ../../node_modules/@nodelib/fs.scandir/out/utils/index.js
3771
+ // ../../node_modules/.bun/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/utils/index.js
3772
3772
  var require_utils4 = __commonJS((exports) => {
3773
3773
  Object.defineProperty(exports, "__esModule", { value: true });
3774
3774
  exports.fs = undefined;
@@ -3776,7 +3776,7 @@ var require_utils4 = __commonJS((exports) => {
3776
3776
  exports.fs = fs;
3777
3777
  });
3778
3778
 
3779
- // ../../node_modules/@nodelib/fs.scandir/out/providers/common.js
3779
+ // ../../node_modules/.bun/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/providers/common.js
3780
3780
  var require_common = __commonJS((exports) => {
3781
3781
  Object.defineProperty(exports, "__esModule", { value: true });
3782
3782
  exports.joinPathSegments = undefined;
@@ -3789,7 +3789,7 @@ var require_common = __commonJS((exports) => {
3789
3789
  exports.joinPathSegments = joinPathSegments;
3790
3790
  });
3791
3791
 
3792
- // ../../node_modules/@nodelib/fs.scandir/out/providers/async.js
3792
+ // ../../node_modules/.bun/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/providers/async.js
3793
3793
  var require_async2 = __commonJS((exports) => {
3794
3794
  Object.defineProperty(exports, "__esModule", { value: true });
3795
3795
  exports.readdir = exports.readdirWithFileTypes = exports.read = undefined;
@@ -3896,7 +3896,7 @@ var require_async2 = __commonJS((exports) => {
3896
3896
  }
3897
3897
  });
3898
3898
 
3899
- // ../../node_modules/@nodelib/fs.scandir/out/providers/sync.js
3899
+ // ../../node_modules/.bun/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/providers/sync.js
3900
3900
  var require_sync2 = __commonJS((exports) => {
3901
3901
  Object.defineProperty(exports, "__esModule", { value: true });
3902
3902
  exports.readdir = exports.readdirWithFileTypes = exports.read = undefined;
@@ -3952,7 +3952,7 @@ var require_sync2 = __commonJS((exports) => {
3952
3952
  exports.readdir = readdir;
3953
3953
  });
3954
3954
 
3955
- // ../../node_modules/@nodelib/fs.scandir/out/adapters/fs.js
3955
+ // ../../node_modules/.bun/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/adapters/fs.js
3956
3956
  var require_fs4 = __commonJS((exports) => {
3957
3957
  Object.defineProperty(exports, "__esModule", { value: true });
3958
3958
  exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = undefined;
@@ -3974,7 +3974,7 @@ var require_fs4 = __commonJS((exports) => {
3974
3974
  exports.createFileSystemAdapter = createFileSystemAdapter;
3975
3975
  });
3976
3976
 
3977
- // ../../node_modules/@nodelib/fs.scandir/out/settings.js
3977
+ // ../../node_modules/.bun/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/settings.js
3978
3978
  var require_settings2 = __commonJS((exports) => {
3979
3979
  Object.defineProperty(exports, "__esModule", { value: true });
3980
3980
  var path = __require("path");
@@ -4002,7 +4002,7 @@ var require_settings2 = __commonJS((exports) => {
4002
4002
  exports.default = Settings;
4003
4003
  });
4004
4004
 
4005
- // ../../node_modules/@nodelib/fs.scandir/out/index.js
4005
+ // ../../node_modules/.bun/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/index.js
4006
4006
  var require_out2 = __commonJS((exports) => {
4007
4007
  Object.defineProperty(exports, "__esModule", { value: true });
4008
4008
  exports.Settings = exports.scandirSync = exports.scandir = undefined;
@@ -4031,7 +4031,7 @@ var require_out2 = __commonJS((exports) => {
4031
4031
  }
4032
4032
  });
4033
4033
 
4034
- // ../../node_modules/reusify/reusify.js
4034
+ // ../../node_modules/.bun/reusify@1.1.0/node_modules/reusify/reusify.js
4035
4035
  var require_reusify = __commonJS((exports, module) => {
4036
4036
  function reusify(Constructor) {
4037
4037
  var head = new Constructor;
@@ -4059,7 +4059,7 @@ var require_reusify = __commonJS((exports, module) => {
4059
4059
  module.exports = reusify;
4060
4060
  });
4061
4061
 
4062
- // ../../node_modules/fastq/queue.js
4062
+ // ../../node_modules/.bun/fastq@1.20.1/node_modules/fastq/queue.js
4063
4063
  var require_queue = __commonJS((exports, module) => {
4064
4064
  var reusify = require_reusify();
4065
4065
  function fastqueue(context, worker, _concurrency) {
@@ -4342,7 +4342,7 @@ var require_queue = __commonJS((exports, module) => {
4342
4342
  module.exports.promise = queueAsPromised;
4343
4343
  });
4344
4344
 
4345
- // ../../node_modules/@nodelib/fs.walk/out/readers/common.js
4345
+ // ../../node_modules/.bun/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/common.js
4346
4346
  var require_common2 = __commonJS((exports) => {
4347
4347
  Object.defineProperty(exports, "__esModule", { value: true });
4348
4348
  exports.joinPathSegments = exports.replacePathSegmentSeparator = exports.isAppliedFilter = exports.isFatalError = undefined;
@@ -4373,7 +4373,7 @@ var require_common2 = __commonJS((exports) => {
4373
4373
  exports.joinPathSegments = joinPathSegments;
4374
4374
  });
4375
4375
 
4376
- // ../../node_modules/@nodelib/fs.walk/out/readers/reader.js
4376
+ // ../../node_modules/.bun/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/reader.js
4377
4377
  var require_reader = __commonJS((exports) => {
4378
4378
  Object.defineProperty(exports, "__esModule", { value: true });
4379
4379
  var common = require_common2();
@@ -4388,7 +4388,7 @@ var require_reader = __commonJS((exports) => {
4388
4388
  exports.default = Reader;
4389
4389
  });
4390
4390
 
4391
- // ../../node_modules/@nodelib/fs.walk/out/readers/async.js
4391
+ // ../../node_modules/.bun/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/async.js
4392
4392
  var require_async3 = __commonJS((exports) => {
4393
4393
  Object.defineProperty(exports, "__esModule", { value: true });
4394
4394
  var events_1 = __require("events");
@@ -4489,7 +4489,7 @@ var require_async3 = __commonJS((exports) => {
4489
4489
  exports.default = AsyncReader;
4490
4490
  });
4491
4491
 
4492
- // ../../node_modules/@nodelib/fs.walk/out/providers/async.js
4492
+ // ../../node_modules/.bun/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/providers/async.js
4493
4493
  var require_async4 = __commonJS((exports) => {
4494
4494
  Object.defineProperty(exports, "__esModule", { value: true });
4495
4495
  var async_1 = require_async3();
@@ -4523,7 +4523,7 @@ var require_async4 = __commonJS((exports) => {
4523
4523
  }
4524
4524
  });
4525
4525
 
4526
- // ../../node_modules/@nodelib/fs.walk/out/providers/stream.js
4526
+ // ../../node_modules/.bun/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/providers/stream.js
4527
4527
  var require_stream2 = __commonJS((exports) => {
4528
4528
  Object.defineProperty(exports, "__esModule", { value: true });
4529
4529
  var stream_1 = __require("stream");
@@ -4561,7 +4561,7 @@ var require_stream2 = __commonJS((exports) => {
4561
4561
  exports.default = StreamProvider;
4562
4562
  });
4563
4563
 
4564
- // ../../node_modules/@nodelib/fs.walk/out/readers/sync.js
4564
+ // ../../node_modules/.bun/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/sync.js
4565
4565
  var require_sync3 = __commonJS((exports) => {
4566
4566
  Object.defineProperty(exports, "__esModule", { value: true });
4567
4567
  var fsScandir = require_out2();
@@ -4623,7 +4623,7 @@ var require_sync3 = __commonJS((exports) => {
4623
4623
  exports.default = SyncReader;
4624
4624
  });
4625
4625
 
4626
- // ../../node_modules/@nodelib/fs.walk/out/providers/sync.js
4626
+ // ../../node_modules/.bun/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/providers/sync.js
4627
4627
  var require_sync4 = __commonJS((exports) => {
4628
4628
  Object.defineProperty(exports, "__esModule", { value: true });
4629
4629
  var sync_1 = require_sync3();
@@ -4641,7 +4641,7 @@ var require_sync4 = __commonJS((exports) => {
4641
4641
  exports.default = SyncProvider;
4642
4642
  });
4643
4643
 
4644
- // ../../node_modules/@nodelib/fs.walk/out/settings.js
4644
+ // ../../node_modules/.bun/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/settings.js
4645
4645
  var require_settings3 = __commonJS((exports) => {
4646
4646
  Object.defineProperty(exports, "__esModule", { value: true });
4647
4647
  var path = __require("path");
@@ -4671,7 +4671,7 @@ var require_settings3 = __commonJS((exports) => {
4671
4671
  exports.default = Settings;
4672
4672
  });
4673
4673
 
4674
- // ../../node_modules/@nodelib/fs.walk/out/index.js
4674
+ // ../../node_modules/.bun/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/index.js
4675
4675
  var require_out3 = __commonJS((exports) => {
4676
4676
  Object.defineProperty(exports, "__esModule", { value: true });
4677
4677
  exports.Settings = exports.walkStream = exports.walkSync = exports.walk = undefined;
@@ -4708,7 +4708,7 @@ var require_out3 = __commonJS((exports) => {
4708
4708
  }
4709
4709
  });
4710
4710
 
4711
- // ../../node_modules/fast-glob/out/readers/reader.js
4711
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/readers/reader.js
4712
4712
  var require_reader2 = __commonJS((exports) => {
4713
4713
  Object.defineProperty(exports, "__esModule", { value: true });
4714
4714
  var path = __require("path");
@@ -4745,7 +4745,7 @@ var require_reader2 = __commonJS((exports) => {
4745
4745
  exports.default = Reader;
4746
4746
  });
4747
4747
 
4748
- // ../../node_modules/fast-glob/out/readers/stream.js
4748
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/readers/stream.js
4749
4749
  var require_stream3 = __commonJS((exports) => {
4750
4750
  Object.defineProperty(exports, "__esModule", { value: true });
4751
4751
  var stream_1 = __require("stream");
@@ -4800,7 +4800,7 @@ var require_stream3 = __commonJS((exports) => {
4800
4800
  exports.default = ReaderStream;
4801
4801
  });
4802
4802
 
4803
- // ../../node_modules/fast-glob/out/readers/async.js
4803
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/readers/async.js
4804
4804
  var require_async5 = __commonJS((exports) => {
4805
4805
  Object.defineProperty(exports, "__esModule", { value: true });
4806
4806
  var fsWalk = require_out3();
@@ -4837,7 +4837,7 @@ var require_async5 = __commonJS((exports) => {
4837
4837
  exports.default = ReaderAsync;
4838
4838
  });
4839
4839
 
4840
- // ../../node_modules/fast-glob/out/providers/matchers/matcher.js
4840
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/providers/matchers/matcher.js
4841
4841
  var require_matcher = __commonJS((exports) => {
4842
4842
  Object.defineProperty(exports, "__esModule", { value: true });
4843
4843
  var utils = require_utils3();
@@ -4886,7 +4886,7 @@ var require_matcher = __commonJS((exports) => {
4886
4886
  exports.default = Matcher;
4887
4887
  });
4888
4888
 
4889
- // ../../node_modules/fast-glob/out/providers/matchers/partial.js
4889
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/providers/matchers/partial.js
4890
4890
  var require_partial = __commonJS((exports) => {
4891
4891
  Object.defineProperty(exports, "__esModule", { value: true });
4892
4892
  var matcher_1 = require_matcher();
@@ -4921,7 +4921,7 @@ var require_partial = __commonJS((exports) => {
4921
4921
  exports.default = PartialMatcher;
4922
4922
  });
4923
4923
 
4924
- // ../../node_modules/fast-glob/out/providers/filters/deep.js
4924
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/providers/filters/deep.js
4925
4925
  var require_deep = __commonJS((exports) => {
4926
4926
  Object.defineProperty(exports, "__esModule", { value: true });
4927
4927
  var utils = require_utils3();
@@ -4984,7 +4984,7 @@ var require_deep = __commonJS((exports) => {
4984
4984
  exports.default = DeepFilter;
4985
4985
  });
4986
4986
 
4987
- // ../../node_modules/fast-glob/out/providers/filters/entry.js
4987
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/providers/filters/entry.js
4988
4988
  var require_entry = __commonJS((exports) => {
4989
4989
  Object.defineProperty(exports, "__esModule", { value: true });
4990
4990
  var utils = require_utils3();
@@ -5070,7 +5070,7 @@ var require_entry = __commonJS((exports) => {
5070
5070
  exports.default = EntryFilter;
5071
5071
  });
5072
5072
 
5073
- // ../../node_modules/fast-glob/out/providers/filters/error.js
5073
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/providers/filters/error.js
5074
5074
  var require_error = __commonJS((exports) => {
5075
5075
  Object.defineProperty(exports, "__esModule", { value: true });
5076
5076
  var utils = require_utils3();
@@ -5089,7 +5089,7 @@ var require_error = __commonJS((exports) => {
5089
5089
  exports.default = ErrorFilter;
5090
5090
  });
5091
5091
 
5092
- // ../../node_modules/fast-glob/out/providers/transformers/entry.js
5092
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/providers/transformers/entry.js
5093
5093
  var require_entry2 = __commonJS((exports) => {
5094
5094
  Object.defineProperty(exports, "__esModule", { value: true });
5095
5095
  var utils = require_utils3();
@@ -5119,7 +5119,7 @@ var require_entry2 = __commonJS((exports) => {
5119
5119
  exports.default = EntryTransformer;
5120
5120
  });
5121
5121
 
5122
- // ../../node_modules/fast-glob/out/providers/provider.js
5122
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/providers/provider.js
5123
5123
  var require_provider = __commonJS((exports) => {
5124
5124
  Object.defineProperty(exports, "__esModule", { value: true });
5125
5125
  var path = __require("path");
@@ -5171,7 +5171,7 @@ var require_provider = __commonJS((exports) => {
5171
5171
  exports.default = Provider;
5172
5172
  });
5173
5173
 
5174
- // ../../node_modules/fast-glob/out/providers/async.js
5174
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/providers/async.js
5175
5175
  var require_async6 = __commonJS((exports) => {
5176
5176
  Object.defineProperty(exports, "__esModule", { value: true });
5177
5177
  var async_1 = require_async5();
@@ -5198,7 +5198,7 @@ var require_async6 = __commonJS((exports) => {
5198
5198
  exports.default = ProviderAsync;
5199
5199
  });
5200
5200
 
5201
- // ../../node_modules/fast-glob/out/providers/stream.js
5201
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/providers/stream.js
5202
5202
  var require_stream4 = __commonJS((exports) => {
5203
5203
  Object.defineProperty(exports, "__esModule", { value: true });
5204
5204
  var stream_1 = __require("stream");
@@ -5229,7 +5229,7 @@ var require_stream4 = __commonJS((exports) => {
5229
5229
  exports.default = ProviderStream;
5230
5230
  });
5231
5231
 
5232
- // ../../node_modules/fast-glob/out/readers/sync.js
5232
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/readers/sync.js
5233
5233
  var require_sync5 = __commonJS((exports) => {
5234
5234
  Object.defineProperty(exports, "__esModule", { value: true });
5235
5235
  var fsStat = require_out();
@@ -5275,7 +5275,7 @@ var require_sync5 = __commonJS((exports) => {
5275
5275
  exports.default = ReaderSync;
5276
5276
  });
5277
5277
 
5278
- // ../../node_modules/fast-glob/out/providers/sync.js
5278
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/providers/sync.js
5279
5279
  var require_sync6 = __commonJS((exports) => {
5280
5280
  Object.defineProperty(exports, "__esModule", { value: true });
5281
5281
  var sync_1 = require_sync5();
@@ -5302,7 +5302,7 @@ var require_sync6 = __commonJS((exports) => {
5302
5302
  exports.default = ProviderSync;
5303
5303
  });
5304
5304
 
5305
- // ../../node_modules/fast-glob/out/settings.js
5305
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/settings.js
5306
5306
  var require_settings4 = __commonJS((exports) => {
5307
5307
  Object.defineProperty(exports, "__esModule", { value: true });
5308
5308
  exports.DEFAULT_FILE_SYSTEM_ADAPTER = undefined;
@@ -5360,7 +5360,7 @@ var require_settings4 = __commonJS((exports) => {
5360
5360
  exports.default = Settings;
5361
5361
  });
5362
5362
 
5363
- // ../../node_modules/fast-glob/out/index.js
5363
+ // ../../node_modules/.bun/fast-glob@3.3.3/node_modules/fast-glob/out/index.js
5364
5364
  var require_out4 = __commonJS((exports, module) => {
5365
5365
  var taskManager = require_tasks();
5366
5366
  var async_1 = require_async6();
@@ -5458,7 +5458,7 @@ var require_out4 = __commonJS((exports, module) => {
5458
5458
  module.exports = FastGlob;
5459
5459
  });
5460
5460
 
5461
- // ../../node_modules/path-type/index.js
5461
+ // ../../node_modules/.bun/path-type@6.0.0/node_modules/path-type/index.js
5462
5462
  import fs from "node:fs";
5463
5463
  import fsPromises from "node:fs/promises";
5464
5464
  async function isType(fsStatType, statsMethodName, filePath) {
@@ -5498,7 +5498,7 @@ var init_path_type = __esm(() => {
5498
5498
  isSymlinkSync = isTypeSync.bind(undefined, "lstatSync", "isSymbolicLink");
5499
5499
  });
5500
5500
 
5501
- // ../../node_modules/unicorn-magic/node.js
5501
+ // ../../node_modules/.bun/unicorn-magic@0.3.0/node_modules/unicorn-magic/node.js
5502
5502
  import { promisify } from "node:util";
5503
5503
  import { execFile as execFileCallback, execFileSync as execFileSyncOriginal } from "node:child_process";
5504
5504
  import { fileURLToPath } from "node:url";
@@ -5511,7 +5511,7 @@ var init_node = __esm(() => {
5511
5511
  TEN_MEGABYTES_IN_BYTES = 10 * 1024 * 1024;
5512
5512
  });
5513
5513
 
5514
- // ../../node_modules/ignore/index.js
5514
+ // ../../node_modules/.bun/ignore@7.0.5/node_modules/ignore/index.js
5515
5515
  var require_ignore = __commonJS((exports, module) => {
5516
5516
  function makeArray(subject) {
5517
5517
  return Array.isArray(subject) ? subject : [subject];
@@ -5838,7 +5838,7 @@ var require_ignore = __commonJS((exports, module) => {
5838
5838
  define(module.exports, Symbol.for("setupWindows"), setupWindows);
5839
5839
  });
5840
5840
 
5841
- // ../../node_modules/globby/node_modules/slash/index.js
5841
+ // ../../node_modules/.bun/slash@5.1.0/node_modules/slash/index.js
5842
5842
  function slash(path) {
5843
5843
  const isExtendedLengthPath = path.startsWith("\\\\?\\");
5844
5844
  if (isExtendedLengthPath) {
@@ -5847,10 +5847,10 @@ function slash(path) {
5847
5847
  return path.replace(/\\/g, "/");
5848
5848
  }
5849
5849
 
5850
- // ../../node_modules/globby/utilities.js
5850
+ // ../../node_modules/.bun/globby@14.1.0/node_modules/globby/utilities.js
5851
5851
  var isNegativePattern = (pattern) => pattern[0] === "!";
5852
5852
 
5853
- // ../../node_modules/globby/ignore.js
5853
+ // ../../node_modules/.bun/globby@14.1.0/node_modules/globby/ignore.js
5854
5854
  import process2 from "node:process";
5855
5855
  import fs2 from "node:fs";
5856
5856
  import fsPromises2 from "node:fs/promises";
@@ -5925,7 +5925,7 @@ var init_ignore = __esm(() => {
5925
5925
  };
5926
5926
  });
5927
5927
 
5928
- // ../../node_modules/globby/index.js
5928
+ // ../../node_modules/.bun/globby@14.1.0/node_modules/globby/index.js
5929
5929
  import process3 from "node:process";
5930
5930
  import fs3 from "node:fs";
5931
5931
  import nodePath from "node:path";
@@ -6365,18 +6365,44 @@ var init_codebase_indexer_service = __esm(() => {
6365
6365
 
6366
6366
  // ../sdk/src/core/config.ts
6367
6367
  import { join as join2 } from "node:path";
6368
+ function isValidModelForProvider(provider, model) {
6369
+ return PROVIDER_MODELS[provider].includes(model);
6370
+ }
6371
+ function getModelsForProvider(provider) {
6372
+ return PROVIDER_MODELS[provider];
6373
+ }
6368
6374
  function getLocusPath(projectPath, fileName) {
6369
6375
  return join2(projectPath, LOCUS_CONFIG.dir, LOCUS_CONFIG[fileName]);
6370
6376
  }
6371
- var PROVIDER, DEFAULT_MODEL, LOCUS_SCHEMA_BASE_URL = "https://locusai.dev/schemas", LOCUS_SCHEMAS, LOCUS_CONFIG, LOCUS_GITIGNORE_PATTERNS;
6377
+ var PROVIDER, CLAUDE_MODELS, CODEX_MODELS, PROVIDER_MODELS, DEFAULT_MODEL, LOCUS_SCHEMA_BASE_URL = "https://locusai.dev/schemas", LOCUS_SCHEMAS, LOCUS_CONFIG, LOCUS_GITIGNORE_PATTERNS;
6372
6378
  var init_config = __esm(() => {
6373
6379
  PROVIDER = {
6374
6380
  CLAUDE: "claude",
6375
6381
  CODEX: "codex"
6376
6382
  };
6383
+ CLAUDE_MODELS = {
6384
+ OPUS: "opus",
6385
+ SONNET: "sonnet",
6386
+ HAIKU: "haiku",
6387
+ OPUS_PLAN: "opusplan",
6388
+ CLAUDE_OPUS_4_6: "claude-opus-4-6",
6389
+ CLAUDE_SONNET_4_5: "claude-sonnet-4-5-20250929",
6390
+ CLAUDE_SONNET_4_6: "claude-sonnet-4-6",
6391
+ CLAUDE_HAIKU_4_5: "claude-haiku-4-5-20251001"
6392
+ };
6393
+ CODEX_MODELS = {
6394
+ GPT_5_3_CODEX: "gpt-5.3-codex",
6395
+ GPT_5_3_CODEX_SPARK: "gpt-5.3-codex-spark",
6396
+ GPT_5_CODEX_MINI: "gpt-5-codex-mini",
6397
+ GPT_5_2_CODEX: "gpt-5.2-codex"
6398
+ };
6399
+ PROVIDER_MODELS = {
6400
+ [PROVIDER.CLAUDE]: Object.values(CLAUDE_MODELS),
6401
+ [PROVIDER.CODEX]: Object.values(CODEX_MODELS)
6402
+ };
6377
6403
  DEFAULT_MODEL = {
6378
- [PROVIDER.CLAUDE]: "opus",
6379
- [PROVIDER.CODEX]: "gpt-5.3-codex"
6404
+ [PROVIDER.CLAUDE]: CLAUDE_MODELS.OPUS,
6405
+ [PROVIDER.CODEX]: CODEX_MODELS.GPT_5_3_CODEX
6380
6406
  };
6381
6407
  LOCUS_SCHEMAS = {
6382
6408
  config: `${LOCUS_SCHEMA_BASE_URL}/config.schema.json`,
@@ -6393,7 +6419,8 @@ var init_config = __esm(() => {
6393
6419
  documentsDir: "documents",
6394
6420
  sessionsDir: "sessions",
6395
6421
  reviewsDir: "reviews",
6396
- plansDir: "plans"
6422
+ plansDir: "plans",
6423
+ discussionsDir: "discussions"
6397
6424
  };
6398
6425
  LOCUS_GITIGNORE_PATTERNS = [
6399
6426
  "# Locus AI - Session data (user-specific, can grow large)",
@@ -6408,6 +6435,9 @@ var init_config = __esm(() => {
6408
6435
  "# Locus AI - Plans (generated per task)",
6409
6436
  ".locus/plans/",
6410
6437
  "",
6438
+ "# Locus AI - Discussions (AI discussion sessions)",
6439
+ ".locus/discussions/",
6440
+ "",
6411
6441
  "# Locus AI - Settings (contains API key, telegram config, etc.)",
6412
6442
  ".locus/settings.json",
6413
6443
  "",
@@ -7806,6 +7836,10 @@ var init_codex_runner = __esm(() => {
7806
7836
  function createAiRunner(provider, config) {
7807
7837
  const resolvedProvider = provider ?? PROVIDER.CLAUDE;
7808
7838
  const model = config.model ?? DEFAULT_MODEL[resolvedProvider];
7839
+ if (!isValidModelForProvider(resolvedProvider, model)) {
7840
+ const validModels = getModelsForProvider(resolvedProvider);
7841
+ throw new Error(`Model "${model}" is not valid for provider "${resolvedProvider}". ` + `Valid models: ${validModels.join(", ")}`);
7842
+ }
7809
7843
  switch (resolvedProvider) {
7810
7844
  case PROVIDER.CODEX:
7811
7845
  return new CodexRunner(config.projectPath, model, config.log, config.reasoningEffort ?? "high", config.timeoutMs);
@@ -8055,14 +8089,14 @@ var init_pr_service = __esm(() => {
8055
8089
  init_git_utils();
8056
8090
  });
8057
8091
 
8058
- // ../../node_modules/axios/lib/helpers/bind.js
8092
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/bind.js
8059
8093
  function bind(fn, thisArg) {
8060
8094
  return function wrap() {
8061
8095
  return fn.apply(thisArg, arguments);
8062
8096
  };
8063
8097
  }
8064
8098
 
8065
- // ../../node_modules/axios/lib/utils.js
8099
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/utils.js
8066
8100
  function isBuffer(val) {
8067
8101
  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);
8068
8102
  }
@@ -8121,6 +8155,9 @@ function merge() {
8121
8155
  const { caseless, skipUndefined } = isContextDefined(this) && this || {};
8122
8156
  const result = {};
8123
8157
  const assignValue = (val, key) => {
8158
+ if (key === "__proto__" || key === "constructor" || key === "prototype") {
8159
+ return;
8160
+ }
8124
8161
  const targetKey = caseless && findKey(result, key) || key;
8125
8162
  if (isPlainObject(result[targetKey]) && isPlainObject(val)) {
8126
8163
  result[targetKey] = merge(result[targetKey], val);
@@ -8342,7 +8379,12 @@ var init_utils = __esm(() => {
8342
8379
  isBlob = kindOfTest("Blob");
8343
8380
  isFileList = kindOfTest("FileList");
8344
8381
  isURLSearchParams = kindOfTest("URLSearchParams");
8345
- [isReadableStream, isRequest, isResponse, isHeaders] = ["ReadableStream", "Request", "Response", "Headers"].map(kindOfTest);
8382
+ [isReadableStream, isRequest, isResponse, isHeaders] = [
8383
+ "ReadableStream",
8384
+ "Request",
8385
+ "Response",
8386
+ "Headers"
8387
+ ].map(kindOfTest);
8346
8388
  _global = (() => {
8347
8389
  if (typeof globalThis !== "undefined")
8348
8390
  return globalThis;
@@ -8435,7 +8477,7 @@ var init_utils = __esm(() => {
8435
8477
  };
8436
8478
  });
8437
8479
 
8438
- // ../../node_modules/axios/lib/core/AxiosError.js
8480
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/core/AxiosError.js
8439
8481
  var AxiosError, AxiosError_default;
8440
8482
  var init_AxiosError = __esm(() => {
8441
8483
  init_utils();
@@ -8490,7 +8532,7 @@ var init_AxiosError = __esm(() => {
8490
8532
  AxiosError_default = AxiosError;
8491
8533
  });
8492
8534
 
8493
- // ../../node_modules/delayed-stream/lib/delayed_stream.js
8535
+ // ../../node_modules/.bun/delayed-stream@1.0.0/node_modules/delayed-stream/lib/delayed_stream.js
8494
8536
  var require_delayed_stream = __commonJS((exports, module) => {
8495
8537
  var Stream = __require("stream").Stream;
8496
8538
  var util = __require("util");
@@ -8578,7 +8620,7 @@ var require_delayed_stream = __commonJS((exports, module) => {
8578
8620
  };
8579
8621
  });
8580
8622
 
8581
- // ../../node_modules/combined-stream/lib/combined_stream.js
8623
+ // ../../node_modules/.bun/combined-stream@1.0.8/node_modules/combined-stream/lib/combined_stream.js
8582
8624
  var require_combined_stream = __commonJS((exports, module) => {
8583
8625
  var util = __require("util");
8584
8626
  var Stream = __require("stream").Stream;
@@ -8747,7 +8789,7 @@ var require_combined_stream = __commonJS((exports, module) => {
8747
8789
  };
8748
8790
  });
8749
8791
 
8750
- // ../../node_modules/mime-db/db.json
8792
+ // ../../node_modules/.bun/mime-db@1.52.0/node_modules/mime-db/db.json
8751
8793
  var require_db = __commonJS((exports, module) => {
8752
8794
  module.exports = {
8753
8795
  "application/1d-interleaved-parityfec": {
@@ -17270,7 +17312,7 @@ var require_db = __commonJS((exports, module) => {
17270
17312
  };
17271
17313
  });
17272
17314
 
17273
- // ../../node_modules/mime-types/index.js
17315
+ // ../../node_modules/.bun/mime-types@2.1.35/node_modules/mime-types/index.js
17274
17316
  var require_mime_types = __commonJS((exports) => {
17275
17317
  /*!
17276
17318
  * mime-types
@@ -17364,7 +17406,7 @@ var require_mime_types = __commonJS((exports) => {
17364
17406
  }
17365
17407
  });
17366
17408
 
17367
- // ../../node_modules/asynckit/lib/defer.js
17409
+ // ../../node_modules/.bun/asynckit@0.4.0/node_modules/asynckit/lib/defer.js
17368
17410
  var require_defer = __commonJS((exports, module) => {
17369
17411
  module.exports = defer;
17370
17412
  function defer(fn) {
@@ -17377,7 +17419,7 @@ var require_defer = __commonJS((exports, module) => {
17377
17419
  }
17378
17420
  });
17379
17421
 
17380
- // ../../node_modules/asynckit/lib/async.js
17422
+ // ../../node_modules/.bun/asynckit@0.4.0/node_modules/asynckit/lib/async.js
17381
17423
  var require_async7 = __commonJS((exports, module) => {
17382
17424
  var defer = require_defer();
17383
17425
  module.exports = async;
@@ -17398,7 +17440,7 @@ var require_async7 = __commonJS((exports, module) => {
17398
17440
  }
17399
17441
  });
17400
17442
 
17401
- // ../../node_modules/asynckit/lib/abort.js
17443
+ // ../../node_modules/.bun/asynckit@0.4.0/node_modules/asynckit/lib/abort.js
17402
17444
  var require_abort = __commonJS((exports, module) => {
17403
17445
  module.exports = abort;
17404
17446
  function abort(state) {
@@ -17412,7 +17454,7 @@ var require_abort = __commonJS((exports, module) => {
17412
17454
  }
17413
17455
  });
17414
17456
 
17415
- // ../../node_modules/asynckit/lib/iterate.js
17457
+ // ../../node_modules/.bun/asynckit@0.4.0/node_modules/asynckit/lib/iterate.js
17416
17458
  var require_iterate = __commonJS((exports, module) => {
17417
17459
  var async = require_async7();
17418
17460
  var abort = require_abort();
@@ -17443,7 +17485,7 @@ var require_iterate = __commonJS((exports, module) => {
17443
17485
  }
17444
17486
  });
17445
17487
 
17446
- // ../../node_modules/asynckit/lib/state.js
17488
+ // ../../node_modules/.bun/asynckit@0.4.0/node_modules/asynckit/lib/state.js
17447
17489
  var require_state = __commonJS((exports, module) => {
17448
17490
  module.exports = state;
17449
17491
  function state(list, sortMethod) {
@@ -17463,7 +17505,7 @@ var require_state = __commonJS((exports, module) => {
17463
17505
  }
17464
17506
  });
17465
17507
 
17466
- // ../../node_modules/asynckit/lib/terminator.js
17508
+ // ../../node_modules/.bun/asynckit@0.4.0/node_modules/asynckit/lib/terminator.js
17467
17509
  var require_terminator = __commonJS((exports, module) => {
17468
17510
  var abort = require_abort();
17469
17511
  var async = require_async7();
@@ -17478,7 +17520,7 @@ var require_terminator = __commonJS((exports, module) => {
17478
17520
  }
17479
17521
  });
17480
17522
 
17481
- // ../../node_modules/asynckit/parallel.js
17523
+ // ../../node_modules/.bun/asynckit@0.4.0/node_modules/asynckit/parallel.js
17482
17524
  var require_parallel = __commonJS((exports, module) => {
17483
17525
  var iterate = require_iterate();
17484
17526
  var initState = require_state();
@@ -17503,7 +17545,7 @@ var require_parallel = __commonJS((exports, module) => {
17503
17545
  }
17504
17546
  });
17505
17547
 
17506
- // ../../node_modules/asynckit/serialOrdered.js
17548
+ // ../../node_modules/.bun/asynckit@0.4.0/node_modules/asynckit/serialOrdered.js
17507
17549
  var require_serialOrdered = __commonJS((exports, module) => {
17508
17550
  var iterate = require_iterate();
17509
17551
  var initState = require_state();
@@ -17535,7 +17577,7 @@ var require_serialOrdered = __commonJS((exports, module) => {
17535
17577
  }
17536
17578
  });
17537
17579
 
17538
- // ../../node_modules/asynckit/serial.js
17580
+ // ../../node_modules/.bun/asynckit@0.4.0/node_modules/asynckit/serial.js
17539
17581
  var require_serial = __commonJS((exports, module) => {
17540
17582
  var serialOrdered = require_serialOrdered();
17541
17583
  module.exports = serial;
@@ -17544,7 +17586,7 @@ var require_serial = __commonJS((exports, module) => {
17544
17586
  }
17545
17587
  });
17546
17588
 
17547
- // ../../node_modules/asynckit/index.js
17589
+ // ../../node_modules/.bun/asynckit@0.4.0/node_modules/asynckit/index.js
17548
17590
  var require_asynckit = __commonJS((exports, module) => {
17549
17591
  module.exports = {
17550
17592
  parallel: require_parallel(),
@@ -17553,84 +17595,84 @@ var require_asynckit = __commonJS((exports, module) => {
17553
17595
  };
17554
17596
  });
17555
17597
 
17556
- // ../../node_modules/es-object-atoms/index.js
17598
+ // ../../node_modules/.bun/es-object-atoms@1.1.1/node_modules/es-object-atoms/index.js
17557
17599
  var require_es_object_atoms = __commonJS((exports, module) => {
17558
17600
  module.exports = Object;
17559
17601
  });
17560
17602
 
17561
- // ../../node_modules/es-errors/index.js
17603
+ // ../../node_modules/.bun/es-errors@1.3.0/node_modules/es-errors/index.js
17562
17604
  var require_es_errors = __commonJS((exports, module) => {
17563
17605
  module.exports = Error;
17564
17606
  });
17565
17607
 
17566
- // ../../node_modules/es-errors/eval.js
17608
+ // ../../node_modules/.bun/es-errors@1.3.0/node_modules/es-errors/eval.js
17567
17609
  var require_eval = __commonJS((exports, module) => {
17568
17610
  module.exports = EvalError;
17569
17611
  });
17570
17612
 
17571
- // ../../node_modules/es-errors/range.js
17613
+ // ../../node_modules/.bun/es-errors@1.3.0/node_modules/es-errors/range.js
17572
17614
  var require_range = __commonJS((exports, module) => {
17573
17615
  module.exports = RangeError;
17574
17616
  });
17575
17617
 
17576
- // ../../node_modules/es-errors/ref.js
17618
+ // ../../node_modules/.bun/es-errors@1.3.0/node_modules/es-errors/ref.js
17577
17619
  var require_ref = __commonJS((exports, module) => {
17578
17620
  module.exports = ReferenceError;
17579
17621
  });
17580
17622
 
17581
- // ../../node_modules/es-errors/syntax.js
17623
+ // ../../node_modules/.bun/es-errors@1.3.0/node_modules/es-errors/syntax.js
17582
17624
  var require_syntax = __commonJS((exports, module) => {
17583
17625
  module.exports = SyntaxError;
17584
17626
  });
17585
17627
 
17586
- // ../../node_modules/es-errors/type.js
17628
+ // ../../node_modules/.bun/es-errors@1.3.0/node_modules/es-errors/type.js
17587
17629
  var require_type = __commonJS((exports, module) => {
17588
17630
  module.exports = TypeError;
17589
17631
  });
17590
17632
 
17591
- // ../../node_modules/es-errors/uri.js
17633
+ // ../../node_modules/.bun/es-errors@1.3.0/node_modules/es-errors/uri.js
17592
17634
  var require_uri = __commonJS((exports, module) => {
17593
17635
  module.exports = URIError;
17594
17636
  });
17595
17637
 
17596
- // ../../node_modules/math-intrinsics/abs.js
17638
+ // ../../node_modules/.bun/math-intrinsics@1.1.0/node_modules/math-intrinsics/abs.js
17597
17639
  var require_abs = __commonJS((exports, module) => {
17598
17640
  module.exports = Math.abs;
17599
17641
  });
17600
17642
 
17601
- // ../../node_modules/math-intrinsics/floor.js
17643
+ // ../../node_modules/.bun/math-intrinsics@1.1.0/node_modules/math-intrinsics/floor.js
17602
17644
  var require_floor = __commonJS((exports, module) => {
17603
17645
  module.exports = Math.floor;
17604
17646
  });
17605
17647
 
17606
- // ../../node_modules/math-intrinsics/max.js
17648
+ // ../../node_modules/.bun/math-intrinsics@1.1.0/node_modules/math-intrinsics/max.js
17607
17649
  var require_max = __commonJS((exports, module) => {
17608
17650
  module.exports = Math.max;
17609
17651
  });
17610
17652
 
17611
- // ../../node_modules/math-intrinsics/min.js
17653
+ // ../../node_modules/.bun/math-intrinsics@1.1.0/node_modules/math-intrinsics/min.js
17612
17654
  var require_min = __commonJS((exports, module) => {
17613
17655
  module.exports = Math.min;
17614
17656
  });
17615
17657
 
17616
- // ../../node_modules/math-intrinsics/pow.js
17658
+ // ../../node_modules/.bun/math-intrinsics@1.1.0/node_modules/math-intrinsics/pow.js
17617
17659
  var require_pow = __commonJS((exports, module) => {
17618
17660
  module.exports = Math.pow;
17619
17661
  });
17620
17662
 
17621
- // ../../node_modules/math-intrinsics/round.js
17663
+ // ../../node_modules/.bun/math-intrinsics@1.1.0/node_modules/math-intrinsics/round.js
17622
17664
  var require_round = __commonJS((exports, module) => {
17623
17665
  module.exports = Math.round;
17624
17666
  });
17625
17667
 
17626
- // ../../node_modules/math-intrinsics/isNaN.js
17668
+ // ../../node_modules/.bun/math-intrinsics@1.1.0/node_modules/math-intrinsics/isNaN.js
17627
17669
  var require_isNaN = __commonJS((exports, module) => {
17628
17670
  module.exports = Number.isNaN || function isNaN2(a) {
17629
17671
  return a !== a;
17630
17672
  };
17631
17673
  });
17632
17674
 
17633
- // ../../node_modules/math-intrinsics/sign.js
17675
+ // ../../node_modules/.bun/math-intrinsics@1.1.0/node_modules/math-intrinsics/sign.js
17634
17676
  var require_sign = __commonJS((exports, module) => {
17635
17677
  var $isNaN = require_isNaN();
17636
17678
  module.exports = function sign(number) {
@@ -17641,12 +17683,12 @@ var require_sign = __commonJS((exports, module) => {
17641
17683
  };
17642
17684
  });
17643
17685
 
17644
- // ../../node_modules/gopd/gOPD.js
17686
+ // ../../node_modules/.bun/gopd@1.2.0/node_modules/gopd/gOPD.js
17645
17687
  var require_gOPD = __commonJS((exports, module) => {
17646
17688
  module.exports = Object.getOwnPropertyDescriptor;
17647
17689
  });
17648
17690
 
17649
- // ../../node_modules/gopd/index.js
17691
+ // ../../node_modules/.bun/gopd@1.2.0/node_modules/gopd/index.js
17650
17692
  var require_gopd = __commonJS((exports, module) => {
17651
17693
  var $gOPD = require_gOPD();
17652
17694
  if ($gOPD) {
@@ -17659,7 +17701,7 @@ var require_gopd = __commonJS((exports, module) => {
17659
17701
  module.exports = $gOPD;
17660
17702
  });
17661
17703
 
17662
- // ../../node_modules/es-define-property/index.js
17704
+ // ../../node_modules/.bun/es-define-property@1.0.1/node_modules/es-define-property/index.js
17663
17705
  var require_es_define_property = __commonJS((exports, module) => {
17664
17706
  var $defineProperty = Object.defineProperty || false;
17665
17707
  if ($defineProperty) {
@@ -17672,7 +17714,7 @@ var require_es_define_property = __commonJS((exports, module) => {
17672
17714
  module.exports = $defineProperty;
17673
17715
  });
17674
17716
 
17675
- // ../../node_modules/has-symbols/shams.js
17717
+ // ../../node_modules/.bun/has-symbols@1.1.0/node_modules/has-symbols/shams.js
17676
17718
  var require_shams = __commonJS((exports, module) => {
17677
17719
  module.exports = function hasSymbols() {
17678
17720
  if (typeof Symbol !== "function" || typeof Object.getOwnPropertySymbols !== "function") {
@@ -17721,7 +17763,7 @@ var require_shams = __commonJS((exports, module) => {
17721
17763
  };
17722
17764
  });
17723
17765
 
17724
- // ../../node_modules/has-symbols/index.js
17766
+ // ../../node_modules/.bun/has-symbols@1.1.0/node_modules/has-symbols/index.js
17725
17767
  var require_has_symbols = __commonJS((exports, module) => {
17726
17768
  var origSymbol = typeof Symbol !== "undefined" && Symbol;
17727
17769
  var hasSymbolSham = require_shams();
@@ -17742,18 +17784,18 @@ var require_has_symbols = __commonJS((exports, module) => {
17742
17784
  };
17743
17785
  });
17744
17786
 
17745
- // ../../node_modules/get-proto/Reflect.getPrototypeOf.js
17787
+ // ../../node_modules/.bun/get-proto@1.0.1/node_modules/get-proto/Reflect.getPrototypeOf.js
17746
17788
  var require_Reflect_getPrototypeOf = __commonJS((exports, module) => {
17747
17789
  module.exports = typeof Reflect !== "undefined" && Reflect.getPrototypeOf || null;
17748
17790
  });
17749
17791
 
17750
- // ../../node_modules/get-proto/Object.getPrototypeOf.js
17792
+ // ../../node_modules/.bun/get-proto@1.0.1/node_modules/get-proto/Object.getPrototypeOf.js
17751
17793
  var require_Object_getPrototypeOf = __commonJS((exports, module) => {
17752
17794
  var $Object = require_es_object_atoms();
17753
17795
  module.exports = $Object.getPrototypeOf || null;
17754
17796
  });
17755
17797
 
17756
- // ../../node_modules/function-bind/implementation.js
17798
+ // ../../node_modules/.bun/function-bind@1.1.2/node_modules/function-bind/implementation.js
17757
17799
  var require_implementation = __commonJS((exports, module) => {
17758
17800
  var ERROR_MESSAGE = "Function.prototype.bind called on incompatible ";
17759
17801
  var toStr = Object.prototype.toString;
@@ -17819,28 +17861,28 @@ var require_implementation = __commonJS((exports, module) => {
17819
17861
  };
17820
17862
  });
17821
17863
 
17822
- // ../../node_modules/function-bind/index.js
17864
+ // ../../node_modules/.bun/function-bind@1.1.2/node_modules/function-bind/index.js
17823
17865
  var require_function_bind = __commonJS((exports, module) => {
17824
17866
  var implementation = require_implementation();
17825
17867
  module.exports = Function.prototype.bind || implementation;
17826
17868
  });
17827
17869
 
17828
- // ../../node_modules/call-bind-apply-helpers/functionCall.js
17870
+ // ../../node_modules/.bun/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers/functionCall.js
17829
17871
  var require_functionCall = __commonJS((exports, module) => {
17830
17872
  module.exports = Function.prototype.call;
17831
17873
  });
17832
17874
 
17833
- // ../../node_modules/call-bind-apply-helpers/functionApply.js
17875
+ // ../../node_modules/.bun/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers/functionApply.js
17834
17876
  var require_functionApply = __commonJS((exports, module) => {
17835
17877
  module.exports = Function.prototype.apply;
17836
17878
  });
17837
17879
 
17838
- // ../../node_modules/call-bind-apply-helpers/reflectApply.js
17880
+ // ../../node_modules/.bun/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers/reflectApply.js
17839
17881
  var require_reflectApply = __commonJS((exports, module) => {
17840
17882
  module.exports = typeof Reflect !== "undefined" && Reflect && Reflect.apply;
17841
17883
  });
17842
17884
 
17843
- // ../../node_modules/call-bind-apply-helpers/actualApply.js
17885
+ // ../../node_modules/.bun/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers/actualApply.js
17844
17886
  var require_actualApply = __commonJS((exports, module) => {
17845
17887
  var bind2 = require_function_bind();
17846
17888
  var $apply = require_functionApply();
@@ -17849,7 +17891,7 @@ var require_actualApply = __commonJS((exports, module) => {
17849
17891
  module.exports = $reflectApply || bind2.call($call, $apply);
17850
17892
  });
17851
17893
 
17852
- // ../../node_modules/call-bind-apply-helpers/index.js
17894
+ // ../../node_modules/.bun/call-bind-apply-helpers@1.0.2/node_modules/call-bind-apply-helpers/index.js
17853
17895
  var require_call_bind_apply_helpers = __commonJS((exports, module) => {
17854
17896
  var bind2 = require_function_bind();
17855
17897
  var $TypeError = require_type();
@@ -17863,7 +17905,7 @@ var require_call_bind_apply_helpers = __commonJS((exports, module) => {
17863
17905
  };
17864
17906
  });
17865
17907
 
17866
- // ../../node_modules/dunder-proto/get.js
17908
+ // ../../node_modules/.bun/dunder-proto@1.0.1/node_modules/dunder-proto/get.js
17867
17909
  var require_get = __commonJS((exports, module) => {
17868
17910
  var callBind = require_call_bind_apply_helpers();
17869
17911
  var gOPD = require_gopd();
@@ -17883,7 +17925,7 @@ var require_get = __commonJS((exports, module) => {
17883
17925
  } : false;
17884
17926
  });
17885
17927
 
17886
- // ../../node_modules/get-proto/index.js
17928
+ // ../../node_modules/.bun/get-proto@1.0.1/node_modules/get-proto/index.js
17887
17929
  var require_get_proto = __commonJS((exports, module) => {
17888
17930
  var reflectGetProto = require_Reflect_getPrototypeOf();
17889
17931
  var originalGetProto = require_Object_getPrototypeOf();
@@ -17900,7 +17942,7 @@ var require_get_proto = __commonJS((exports, module) => {
17900
17942
  } : null;
17901
17943
  });
17902
17944
 
17903
- // ../../node_modules/hasown/index.js
17945
+ // ../../node_modules/.bun/hasown@2.0.2/node_modules/hasown/index.js
17904
17946
  var require_hasown = __commonJS((exports, module) => {
17905
17947
  var call = Function.prototype.call;
17906
17948
  var $hasOwn = Object.prototype.hasOwnProperty;
@@ -17908,7 +17950,7 @@ var require_hasown = __commonJS((exports, module) => {
17908
17950
  module.exports = bind2.call(call, $hasOwn);
17909
17951
  });
17910
17952
 
17911
- // ../../node_modules/get-intrinsic/index.js
17953
+ // ../../node_modules/.bun/get-intrinsic@1.3.0/node_modules/get-intrinsic/index.js
17912
17954
  var require_get_intrinsic = __commonJS((exports, module) => {
17913
17955
  var undefined2;
17914
17956
  var $Object = require_es_object_atoms();
@@ -18234,7 +18276,7 @@ var require_get_intrinsic = __commonJS((exports, module) => {
18234
18276
  };
18235
18277
  });
18236
18278
 
18237
- // ../../node_modules/has-tostringtag/shams.js
18279
+ // ../../node_modules/.bun/has-tostringtag@1.0.2/node_modules/has-tostringtag/shams.js
18238
18280
  var require_shams2 = __commonJS((exports, module) => {
18239
18281
  var hasSymbols = require_shams();
18240
18282
  module.exports = function hasToStringTagShams() {
@@ -18242,7 +18284,7 @@ var require_shams2 = __commonJS((exports, module) => {
18242
18284
  };
18243
18285
  });
18244
18286
 
18245
- // ../../node_modules/es-set-tostringtag/index.js
18287
+ // ../../node_modules/.bun/es-set-tostringtag@2.1.0/node_modules/es-set-tostringtag/index.js
18246
18288
  var require_es_set_tostringtag = __commonJS((exports, module) => {
18247
18289
  var GetIntrinsic = require_get_intrinsic();
18248
18290
  var $defineProperty = GetIntrinsic("%Object.defineProperty%", true);
@@ -18271,7 +18313,7 @@ var require_es_set_tostringtag = __commonJS((exports, module) => {
18271
18313
  };
18272
18314
  });
18273
18315
 
18274
- // ../../node_modules/form-data/lib/populate.js
18316
+ // ../../node_modules/.bun/form-data@4.0.5/node_modules/form-data/lib/populate.js
18275
18317
  var require_populate = __commonJS((exports, module) => {
18276
18318
  module.exports = function(dst, src) {
18277
18319
  Object.keys(src).forEach(function(prop) {
@@ -18281,7 +18323,7 @@ var require_populate = __commonJS((exports, module) => {
18281
18323
  };
18282
18324
  });
18283
18325
 
18284
- // ../../node_modules/form-data/lib/form_data.js
18326
+ // ../../node_modules/.bun/form-data@4.0.5/node_modules/form-data/lib/form_data.js
18285
18327
  var require_form_data = __commonJS((exports, module) => {
18286
18328
  var CombinedStream = require_combined_stream();
18287
18329
  var util = __require("util");
@@ -18596,14 +18638,14 @@ var require_form_data = __commonJS((exports, module) => {
18596
18638
  module.exports = FormData2;
18597
18639
  });
18598
18640
 
18599
- // ../../node_modules/axios/lib/platform/node/classes/FormData.js
18641
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/platform/node/classes/FormData.js
18600
18642
  var import_form_data, FormData_default;
18601
18643
  var init_FormData = __esm(() => {
18602
18644
  import_form_data = __toESM(require_form_data(), 1);
18603
18645
  FormData_default = import_form_data.default;
18604
18646
  });
18605
18647
 
18606
- // ../../node_modules/axios/lib/helpers/toFormData.js
18648
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/toFormData.js
18607
18649
  function isVisitable(thing) {
18608
18650
  return utils_default.isPlainObject(thing) || utils_default.isArray(thing);
18609
18651
  }
@@ -18717,7 +18759,7 @@ var init_toFormData = __esm(() => {
18717
18759
  toFormData_default = toFormData;
18718
18760
  });
18719
18761
 
18720
- // ../../node_modules/axios/lib/helpers/AxiosURLSearchParams.js
18762
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/AxiosURLSearchParams.js
18721
18763
  function encode(str) {
18722
18764
  const charMap = {
18723
18765
  "!": "%21",
@@ -18754,7 +18796,7 @@ var init_AxiosURLSearchParams = __esm(() => {
18754
18796
  AxiosURLSearchParams_default = AxiosURLSearchParams;
18755
18797
  });
18756
18798
 
18757
- // ../../node_modules/axios/lib/helpers/buildURL.js
18799
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/buildURL.js
18758
18800
  function encode2(val) {
18759
18801
  return encodeURIComponent(val).replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+");
18760
18802
  }
@@ -18787,7 +18829,7 @@ var init_buildURL = __esm(() => {
18787
18829
  init_AxiosURLSearchParams();
18788
18830
  });
18789
18831
 
18790
- // ../../node_modules/axios/lib/core/InterceptorManager.js
18832
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/core/InterceptorManager.js
18791
18833
  class InterceptorManager {
18792
18834
  constructor() {
18793
18835
  this.handlers = [];
@@ -18825,24 +18867,25 @@ var init_InterceptorManager = __esm(() => {
18825
18867
  InterceptorManager_default = InterceptorManager;
18826
18868
  });
18827
18869
 
18828
- // ../../node_modules/axios/lib/defaults/transitional.js
18870
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/defaults/transitional.js
18829
18871
  var transitional_default;
18830
18872
  var init_transitional = __esm(() => {
18831
18873
  transitional_default = {
18832
18874
  silentJSONParsing: true,
18833
18875
  forcedJSONParsing: true,
18834
- clarifyTimeoutError: false
18876
+ clarifyTimeoutError: false,
18877
+ legacyInterceptorReqResOrdering: true
18835
18878
  };
18836
18879
  });
18837
18880
 
18838
- // ../../node_modules/axios/lib/platform/node/classes/URLSearchParams.js
18881
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/platform/node/classes/URLSearchParams.js
18839
18882
  import url from "url";
18840
18883
  var URLSearchParams_default;
18841
18884
  var init_URLSearchParams = __esm(() => {
18842
18885
  URLSearchParams_default = url.URLSearchParams;
18843
18886
  });
18844
18887
 
18845
- // ../../node_modules/axios/lib/platform/node/index.js
18888
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/platform/node/index.js
18846
18889
  import crypto from "crypto";
18847
18890
  var ALPHA = "abcdefghijklmnopqrstuvwxyz", DIGIT = "0123456789", ALPHABET, generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {
18848
18891
  let str = "";
@@ -18875,7 +18918,7 @@ var init_node2 = __esm(() => {
18875
18918
  };
18876
18919
  });
18877
18920
 
18878
- // ../../node_modules/axios/lib/platform/common/utils.js
18921
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/platform/common/utils.js
18879
18922
  var exports_utils = {};
18880
18923
  __export(exports_utils, {
18881
18924
  origin: () => origin,
@@ -18895,7 +18938,7 @@ var init_utils2 = __esm(() => {
18895
18938
  origin = hasBrowserEnv && window.location.href || "http://localhost";
18896
18939
  });
18897
18940
 
18898
- // ../../node_modules/axios/lib/platform/index.js
18941
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/platform/index.js
18899
18942
  var platform_default;
18900
18943
  var init_platform = __esm(() => {
18901
18944
  init_node2();
@@ -18906,7 +18949,7 @@ var init_platform = __esm(() => {
18906
18949
  };
18907
18950
  });
18908
18951
 
18909
- // ../../node_modules/axios/lib/helpers/toURLEncodedForm.js
18952
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/toURLEncodedForm.js
18910
18953
  function toURLEncodedForm(data, options) {
18911
18954
  return toFormData_default(data, new platform_default.classes.URLSearchParams, {
18912
18955
  visitor: function(value, key, path2, helpers) {
@@ -18925,7 +18968,7 @@ var init_toURLEncodedForm = __esm(() => {
18925
18968
  init_platform();
18926
18969
  });
18927
18970
 
18928
- // ../../node_modules/axios/lib/helpers/formDataToJSON.js
18971
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/formDataToJSON.js
18929
18972
  function parsePropPath(name) {
18930
18973
  return utils_default.matchAll(/\w+|\[(\w*)]/g, name).map((match) => {
18931
18974
  return match[0] === "[]" ? "" : match[1] || match[0];
@@ -18983,7 +19026,7 @@ var init_formDataToJSON = __esm(() => {
18983
19026
  formDataToJSON_default = formDataToJSON;
18984
19027
  });
18985
19028
 
18986
- // ../../node_modules/axios/lib/defaults/index.js
19029
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/defaults/index.js
18987
19030
  function stringifySafely(rawValue, parser, encoder) {
18988
19031
  if (utils_default.isString(rawValue)) {
18989
19032
  try {
@@ -19094,7 +19137,7 @@ var init_defaults = __esm(() => {
19094
19137
  defaults_default = defaults;
19095
19138
  });
19096
19139
 
19097
- // ../../node_modules/axios/lib/helpers/parseHeaders.js
19140
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/parseHeaders.js
19098
19141
  var ignoreDuplicateOf, parseHeaders_default = (rawHeaders) => {
19099
19142
  const parsed = {};
19100
19143
  let key;
@@ -19143,7 +19186,7 @@ var init_parseHeaders = __esm(() => {
19143
19186
  ]);
19144
19187
  });
19145
19188
 
19146
- // ../../node_modules/axios/lib/core/AxiosHeaders.js
19189
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/core/AxiosHeaders.js
19147
19190
  function normalizeHeader(header) {
19148
19191
  return header && String(header).trim().toLowerCase();
19149
19192
  }
@@ -19378,7 +19421,7 @@ var init_AxiosHeaders = __esm(() => {
19378
19421
  AxiosHeaders_default = AxiosHeaders;
19379
19422
  });
19380
19423
 
19381
- // ../../node_modules/axios/lib/core/transformData.js
19424
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/core/transformData.js
19382
19425
  function transformData(fns, response) {
19383
19426
  const config = this || defaults_default;
19384
19427
  const context = response || config;
@@ -19396,12 +19439,12 @@ var init_transformData = __esm(() => {
19396
19439
  init_AxiosHeaders();
19397
19440
  });
19398
19441
 
19399
- // ../../node_modules/axios/lib/cancel/isCancel.js
19442
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/cancel/isCancel.js
19400
19443
  function isCancel(value) {
19401
19444
  return !!(value && value.__CANCEL__);
19402
19445
  }
19403
19446
 
19404
- // ../../node_modules/axios/lib/cancel/CanceledError.js
19447
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/cancel/CanceledError.js
19405
19448
  var CanceledError, CanceledError_default;
19406
19449
  var init_CanceledError = __esm(() => {
19407
19450
  init_AxiosError();
@@ -19415,7 +19458,7 @@ var init_CanceledError = __esm(() => {
19415
19458
  CanceledError_default = CanceledError;
19416
19459
  });
19417
19460
 
19418
- // ../../node_modules/axios/lib/core/settle.js
19461
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/core/settle.js
19419
19462
  function settle(resolve2, reject, response) {
19420
19463
  const validateStatus2 = response.config.validateStatus;
19421
19464
  if (!response.status || !validateStatus2 || validateStatus2(response.status)) {
@@ -19428,17 +19471,20 @@ var init_settle = __esm(() => {
19428
19471
  init_AxiosError();
19429
19472
  });
19430
19473
 
19431
- // ../../node_modules/axios/lib/helpers/isAbsoluteURL.js
19474
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/isAbsoluteURL.js
19432
19475
  function isAbsoluteURL(url2) {
19476
+ if (typeof url2 !== "string") {
19477
+ return false;
19478
+ }
19433
19479
  return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url2);
19434
19480
  }
19435
19481
 
19436
- // ../../node_modules/axios/lib/helpers/combineURLs.js
19482
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/combineURLs.js
19437
19483
  function combineURLs(baseURL, relativeURL) {
19438
19484
  return relativeURL ? baseURL.replace(/\/?\/$/, "") + "/" + relativeURL.replace(/^\/+/, "") : baseURL;
19439
19485
  }
19440
19486
 
19441
- // ../../node_modules/axios/lib/core/buildFullPath.js
19487
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/core/buildFullPath.js
19442
19488
  function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {
19443
19489
  let isRelativeUrl = !isAbsoluteURL(requestedURL);
19444
19490
  if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {
@@ -19448,7 +19494,7 @@ function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {
19448
19494
  }
19449
19495
  var init_buildFullPath = () => {};
19450
19496
 
19451
- // ../../node_modules/proxy-from-env/index.js
19497
+ // ../../node_modules/.bun/proxy-from-env@1.1.0/node_modules/proxy-from-env/index.js
19452
19498
  var require_proxy_from_env = __commonJS((exports) => {
19453
19499
  var parseUrl = __require("url").parse;
19454
19500
  var DEFAULT_PORTS = {
@@ -19515,7 +19561,7 @@ var require_proxy_from_env = __commonJS((exports) => {
19515
19561
  exports.getProxyForUrl = getProxyForUrl;
19516
19562
  });
19517
19563
 
19518
- // ../../node_modules/ms/index.js
19564
+ // ../../node_modules/.bun/ms@2.1.3/node_modules/ms/index.js
19519
19565
  var require_ms = __commonJS((exports, module) => {
19520
19566
  var s = 1000;
19521
19567
  var m = s * 60;
@@ -19625,7 +19671,7 @@ var require_ms = __commonJS((exports, module) => {
19625
19671
  }
19626
19672
  });
19627
19673
 
19628
- // ../../node_modules/debug/src/common.js
19674
+ // ../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/common.js
19629
19675
  var require_common3 = __commonJS((exports, module) => {
19630
19676
  function setup(env) {
19631
19677
  createDebug.debug = createDebug;
@@ -19800,7 +19846,7 @@ var require_common3 = __commonJS((exports, module) => {
19800
19846
  module.exports = setup;
19801
19847
  });
19802
19848
 
19803
- // ../../node_modules/debug/src/browser.js
19849
+ // ../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/browser.js
19804
19850
  var require_browser = __commonJS((exports, module) => {
19805
19851
  exports.formatArgs = formatArgs;
19806
19852
  exports.save = save;
@@ -19960,7 +20006,7 @@ var require_browser = __commonJS((exports, module) => {
19960
20006
  };
19961
20007
  });
19962
20008
 
19963
- // ../../node_modules/has-flag/index.js
20009
+ // ../../node_modules/.bun/has-flag@4.0.0/node_modules/has-flag/index.js
19964
20010
  var require_has_flag = __commonJS((exports, module) => {
19965
20011
  module.exports = (flag, argv = process.argv) => {
19966
20012
  const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
@@ -19970,7 +20016,7 @@ var require_has_flag = __commonJS((exports, module) => {
19970
20016
  };
19971
20017
  });
19972
20018
 
19973
- // ../../node_modules/supports-color/index.js
20019
+ // ../../node_modules/.bun/supports-color@7.2.0/node_modules/supports-color/index.js
19974
20020
  var require_supports_color = __commonJS((exports, module) => {
19975
20021
  var os = __require("os");
19976
20022
  var tty = __require("tty");
@@ -20069,7 +20115,7 @@ var require_supports_color = __commonJS((exports, module) => {
20069
20115
  };
20070
20116
  });
20071
20117
 
20072
- // ../../node_modules/debug/src/node.js
20118
+ // ../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/node.js
20073
20119
  var require_node = __commonJS((exports, module) => {
20074
20120
  var tty = __require("tty");
20075
20121
  var util = __require("util");
@@ -20240,7 +20286,7 @@ var require_node = __commonJS((exports, module) => {
20240
20286
  };
20241
20287
  });
20242
20288
 
20243
- // ../../node_modules/debug/src/index.js
20289
+ // ../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/index.js
20244
20290
  var require_src = __commonJS((exports, module) => {
20245
20291
  if (typeof process === "undefined" || process.type === "renderer" || false || process.__nwjs) {
20246
20292
  module.exports = require_browser();
@@ -20249,7 +20295,7 @@ var require_src = __commonJS((exports, module) => {
20249
20295
  }
20250
20296
  });
20251
20297
 
20252
- // ../../node_modules/follow-redirects/debug.js
20298
+ // ../../node_modules/.bun/follow-redirects@1.15.11/node_modules/follow-redirects/debug.js
20253
20299
  var require_debug = __commonJS((exports, module) => {
20254
20300
  var debug;
20255
20301
  module.exports = function() {
@@ -20265,7 +20311,7 @@ var require_debug = __commonJS((exports, module) => {
20265
20311
  };
20266
20312
  });
20267
20313
 
20268
- // ../../node_modules/follow-redirects/index.js
20314
+ // ../../node_modules/.bun/follow-redirects@1.15.11/node_modules/follow-redirects/index.js
20269
20315
  var require_follow_redirects = __commonJS((exports, module) => {
20270
20316
  var url2 = __require("url");
20271
20317
  var URL2 = url2.URL;
@@ -20732,16 +20778,16 @@ var require_follow_redirects = __commonJS((exports, module) => {
20732
20778
  module.exports.wrap = wrap;
20733
20779
  });
20734
20780
 
20735
- // ../../node_modules/axios/lib/env/data.js
20736
- var VERSION = "1.13.3";
20781
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/env/data.js
20782
+ var VERSION = "1.13.5";
20737
20783
 
20738
- // ../../node_modules/axios/lib/helpers/parseProtocol.js
20784
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/parseProtocol.js
20739
20785
  function parseProtocol(url2) {
20740
20786
  const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url2);
20741
20787
  return match && match[1] || "";
20742
20788
  }
20743
20789
 
20744
- // ../../node_modules/axios/lib/helpers/fromDataURI.js
20790
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/fromDataURI.js
20745
20791
  function fromDataURI(uri, asBlob, options) {
20746
20792
  const _Blob = options && options.Blob || platform_default.classes.Blob;
20747
20793
  const protocol = parseProtocol(uri);
@@ -20775,7 +20821,7 @@ var init_fromDataURI = __esm(() => {
20775
20821
  DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/;
20776
20822
  });
20777
20823
 
20778
- // ../../node_modules/axios/lib/helpers/AxiosTransformStream.js
20824
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/AxiosTransformStream.js
20779
20825
  import stream from "stream";
20780
20826
  var kInternals, AxiosTransformStream, AxiosTransformStream_default;
20781
20827
  var init_AxiosTransformStream = __esm(() => {
@@ -20894,7 +20940,7 @@ var init_AxiosTransformStream = __esm(() => {
20894
20940
  AxiosTransformStream_default = AxiosTransformStream;
20895
20941
  });
20896
20942
 
20897
- // ../../node_modules/axios/lib/helpers/readBlob.js
20943
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/readBlob.js
20898
20944
  var asyncIterator, readBlob = async function* (blob) {
20899
20945
  if (blob.stream) {
20900
20946
  yield* blob.stream();
@@ -20911,7 +20957,7 @@ var init_readBlob = __esm(() => {
20911
20957
  readBlob_default = readBlob;
20912
20958
  });
20913
20959
 
20914
- // ../../node_modules/axios/lib/helpers/formDataToStream.js
20960
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/formDataToStream.js
20915
20961
  import util from "util";
20916
20962
  import { Readable } from "stream";
20917
20963
 
@@ -20997,7 +21043,7 @@ var init_formDataToStream = __esm(() => {
20997
21043
  formDataToStream_default = formDataToStream;
20998
21044
  });
20999
21045
 
21000
- // ../../node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js
21046
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js
21001
21047
  import stream2 from "stream";
21002
21048
  var ZlibHeaderTransformStream, ZlibHeaderTransformStream_default;
21003
21049
  var init_ZlibHeaderTransformStream = __esm(() => {
@@ -21022,7 +21068,7 @@ var init_ZlibHeaderTransformStream = __esm(() => {
21022
21068
  ZlibHeaderTransformStream_default = ZlibHeaderTransformStream;
21023
21069
  });
21024
21070
 
21025
- // ../../node_modules/axios/lib/helpers/callbackify.js
21071
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/callbackify.js
21026
21072
  var callbackify = (fn, reducer) => {
21027
21073
  return utils_default.isAsyncFn(fn) ? function(...args) {
21028
21074
  const cb = args.pop();
@@ -21040,7 +21086,7 @@ var init_callbackify = __esm(() => {
21040
21086
  callbackify_default = callbackify;
21041
21087
  });
21042
21088
 
21043
- // ../../node_modules/axios/lib/helpers/speedometer.js
21089
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/speedometer.js
21044
21090
  function speedometer(samplesCount, min) {
21045
21091
  samplesCount = samplesCount || 10;
21046
21092
  const bytes = new Array(samplesCount);
@@ -21079,7 +21125,7 @@ var init_speedometer = __esm(() => {
21079
21125
  speedometer_default = speedometer;
21080
21126
  });
21081
21127
 
21082
- // ../../node_modules/axios/lib/helpers/throttle.js
21128
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/throttle.js
21083
21129
  function throttle(fn, freq) {
21084
21130
  let timestamp = 0;
21085
21131
  let threshold = 1000 / freq;
@@ -21117,7 +21163,7 @@ var init_throttle = __esm(() => {
21117
21163
  throttle_default = throttle;
21118
21164
  });
21119
21165
 
21120
- // ../../node_modules/axios/lib/helpers/progressEventReducer.js
21166
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/progressEventReducer.js
21121
21167
  var progressEventReducer = (listener, isDownloadStream, freq = 3) => {
21122
21168
  let bytesNotified = 0;
21123
21169
  const _speedometer = speedometer_default(50, 250);
@@ -21155,7 +21201,7 @@ var init_progressEventReducer = __esm(() => {
21155
21201
  init_utils();
21156
21202
  });
21157
21203
 
21158
- // ../../node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js
21204
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js
21159
21205
  function estimateDataURLDecodedBytes(url2) {
21160
21206
  if (!url2 || typeof url2 !== "string")
21161
21207
  return 0;
@@ -21207,7 +21253,7 @@ function estimateDataURLDecodedBytes(url2) {
21207
21253
  return Buffer.byteLength(body, "utf8");
21208
21254
  }
21209
21255
 
21210
- // ../../node_modules/axios/lib/adapters/http.js
21256
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/adapters/http.js
21211
21257
  import http from "http";
21212
21258
  import https from "https";
21213
21259
  import http2 from "http2";
@@ -21822,7 +21868,7 @@ var init_http = __esm(() => {
21822
21868
  };
21823
21869
  });
21824
21870
 
21825
- // ../../node_modules/axios/lib/helpers/isURLSameOrigin.js
21871
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/isURLSameOrigin.js
21826
21872
  var isURLSameOrigin_default;
21827
21873
  var init_isURLSameOrigin = __esm(() => {
21828
21874
  init_platform();
@@ -21832,7 +21878,7 @@ var init_isURLSameOrigin = __esm(() => {
21832
21878
  })(new URL(platform_default.origin), platform_default.navigator && /(msie|trident)/i.test(platform_default.navigator.userAgent)) : () => true;
21833
21879
  });
21834
21880
 
21835
- // ../../node_modules/axios/lib/helpers/cookies.js
21881
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/cookies.js
21836
21882
  var cookies_default;
21837
21883
  var init_cookies = __esm(() => {
21838
21884
  init_utils();
@@ -21877,7 +21923,7 @@ var init_cookies = __esm(() => {
21877
21923
  };
21878
21924
  });
21879
21925
 
21880
- // ../../node_modules/axios/lib/core/mergeConfig.js
21926
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/core/mergeConfig.js
21881
21927
  function mergeConfig(config1, config2) {
21882
21928
  config2 = config2 || {};
21883
21929
  const config = {};
@@ -21949,7 +21995,9 @@ function mergeConfig(config1, config2) {
21949
21995
  headers: (a, b, prop) => mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true)
21950
21996
  };
21951
21997
  utils_default.forEach(Object.keys({ ...config1, ...config2 }), function computeConfigValue(prop) {
21952
- const merge2 = mergeMap[prop] || mergeDeepProperties;
21998
+ if (prop === "__proto__" || prop === "constructor" || prop === "prototype")
21999
+ return;
22000
+ const merge2 = utils_default.hasOwnProp(mergeMap, prop) ? mergeMap[prop] : mergeDeepProperties;
21953
22001
  const configValue = merge2(config1[prop], config2[prop], prop);
21954
22002
  utils_default.isUndefined(configValue) && merge2 !== mergeDirectKeys || (config[prop] = configValue);
21955
22003
  });
@@ -21961,7 +22009,7 @@ var init_mergeConfig = __esm(() => {
21961
22009
  init_AxiosHeaders();
21962
22010
  });
21963
22011
 
21964
- // ../../node_modules/axios/lib/helpers/resolveConfig.js
22012
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/resolveConfig.js
21965
22013
  var resolveConfig_default = (config) => {
21966
22014
  const newConfig = mergeConfig({}, config);
21967
22015
  let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;
@@ -22005,7 +22053,7 @@ var init_resolveConfig = __esm(() => {
22005
22053
  init_buildURL();
22006
22054
  });
22007
22055
 
22008
- // ../../node_modules/axios/lib/adapters/xhr.js
22056
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/adapters/xhr.js
22009
22057
  var isXHRAdapterSupported, xhr_default;
22010
22058
  var init_xhr = __esm(() => {
22011
22059
  init_utils();
@@ -22140,7 +22188,7 @@ var init_xhr = __esm(() => {
22140
22188
  };
22141
22189
  });
22142
22190
 
22143
- // ../../node_modules/axios/lib/helpers/composeSignals.js
22191
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/composeSignals.js
22144
22192
  var composeSignals = (signals, timeout) => {
22145
22193
  const { length } = signals = signals ? signals.filter(Boolean) : [];
22146
22194
  if (timeout || length) {
@@ -22181,7 +22229,7 @@ var init_composeSignals = __esm(() => {
22181
22229
  composeSignals_default = composeSignals;
22182
22230
  });
22183
22231
 
22184
- // ../../node_modules/axios/lib/helpers/trackStream.js
22232
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/trackStream.js
22185
22233
  var streamChunk = function* (chunk, chunkSize) {
22186
22234
  let len = chunk.byteLength;
22187
22235
  if (!chunkSize || len < chunkSize) {
@@ -22255,7 +22303,7 @@ var streamChunk = function* (chunk, chunkSize) {
22255
22303
  });
22256
22304
  };
22257
22305
 
22258
- // ../../node_modules/axios/lib/adapters/fetch.js
22306
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/adapters/fetch.js
22259
22307
  var DEFAULT_CHUNK_SIZE, isFunction2, globalFetchAPI, ReadableStream2, TextEncoder2, test = (fn, ...args) => {
22260
22308
  try {
22261
22309
  return !!fn(...args);
@@ -22413,11 +22461,11 @@ var DEFAULT_CHUNK_SIZE, isFunction2, globalFetchAPI, ReadableStream2, TextEncode
22413
22461
  } catch (err) {
22414
22462
  unsubscribe && unsubscribe();
22415
22463
  if (err && err.name === "TypeError" && /Load failed|fetch/i.test(err.message)) {
22416
- throw Object.assign(new AxiosError_default("Network Error", AxiosError_default.ERR_NETWORK, config, request), {
22464
+ throw Object.assign(new AxiosError_default("Network Error", AxiosError_default.ERR_NETWORK, config, request, err && err.response), {
22417
22465
  cause: err.cause || err
22418
22466
  });
22419
22467
  }
22420
- throw AxiosError_default.from(err, err && err.code, config, request);
22468
+ throw AxiosError_default.from(err, err && err.code, config, request, err && err.response);
22421
22469
  }
22422
22470
  };
22423
22471
  }, seedCache, getFetch = (config) => {
@@ -22460,7 +22508,7 @@ var init_fetch = __esm(() => {
22460
22508
  adapter = getFetch();
22461
22509
  });
22462
22510
 
22463
- // ../../node_modules/axios/lib/adapters/adapters.js
22511
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/adapters/adapters.js
22464
22512
  function getAdapter(adapters, config) {
22465
22513
  adapters = utils_default.isArray(adapters) ? adapters : [adapters];
22466
22514
  const { length } = adapters;
@@ -22519,7 +22567,7 @@ var init_adapters = __esm(() => {
22519
22567
  };
22520
22568
  });
22521
22569
 
22522
- // ../../node_modules/axios/lib/core/dispatchRequest.js
22570
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/core/dispatchRequest.js
22523
22571
  function throwIfCancellationRequested(config) {
22524
22572
  if (config.cancelToken) {
22525
22573
  config.cancelToken.throwIfRequested();
@@ -22560,7 +22608,7 @@ var init_dispatchRequest = __esm(() => {
22560
22608
  init_adapters();
22561
22609
  });
22562
22610
 
22563
- // ../../node_modules/axios/lib/helpers/validator.js
22611
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/validator.js
22564
22612
  function assertOptions(options, schema, allowUnknown) {
22565
22613
  if (typeof options !== "object") {
22566
22614
  throw new AxiosError_default("options must be an object", AxiosError_default.ERR_BAD_OPTION_VALUE);
@@ -22620,7 +22668,7 @@ var init_validator = __esm(() => {
22620
22668
  };
22621
22669
  });
22622
22670
 
22623
- // ../../node_modules/axios/lib/core/Axios.js
22671
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/core/Axios.js
22624
22672
  class Axios {
22625
22673
  constructor(instanceConfig) {
22626
22674
  this.defaults = instanceConfig || {};
@@ -22662,7 +22710,8 @@ class Axios {
22662
22710
  validator_default.assertOptions(transitional2, {
22663
22711
  silentJSONParsing: validators2.transitional(validators2.boolean),
22664
22712
  forcedJSONParsing: validators2.transitional(validators2.boolean),
22665
- clarifyTimeoutError: validators2.transitional(validators2.boolean)
22713
+ clarifyTimeoutError: validators2.transitional(validators2.boolean),
22714
+ legacyInterceptorReqResOrdering: validators2.transitional(validators2.boolean)
22666
22715
  }, false);
22667
22716
  }
22668
22717
  if (paramsSerializer != null) {
@@ -22699,7 +22748,13 @@ class Axios {
22699
22748
  return;
22700
22749
  }
22701
22750
  synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
22702
- requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
22751
+ const transitional3 = config.transitional || transitional_default;
22752
+ const legacyInterceptorReqResOrdering = transitional3 && transitional3.legacyInterceptorReqResOrdering;
22753
+ if (legacyInterceptorReqResOrdering) {
22754
+ requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
22755
+ } else {
22756
+ requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
22757
+ }
22703
22758
  });
22704
22759
  const responseInterceptorChain = [];
22705
22760
  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
@@ -22714,11 +22769,8 @@ class Axios {
22714
22769
  chain.push(...responseInterceptorChain);
22715
22770
  len = chain.length;
22716
22771
  promise = Promise.resolve(config);
22717
- let prevResult = config;
22718
22772
  while (i < len) {
22719
- promise = promise.then(chain[i++]).then((result) => {
22720
- prevResult = result !== undefined ? result : prevResult;
22721
- }).catch(chain[i++]).then(() => prevResult);
22773
+ promise = promise.then(chain[i++], chain[i++]);
22722
22774
  }
22723
22775
  return promise;
22724
22776
  }
@@ -22742,7 +22794,7 @@ class Axios {
22742
22794
  i = 0;
22743
22795
  len = responseInterceptorChain.length;
22744
22796
  while (i < len) {
22745
- promise = promise.then(responseInterceptorChain[i++]).catch(responseInterceptorChain[i++]);
22797
+ promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);
22746
22798
  }
22747
22799
  return promise;
22748
22800
  }
@@ -22762,6 +22814,7 @@ var init_Axios = __esm(() => {
22762
22814
  init_buildFullPath();
22763
22815
  init_validator();
22764
22816
  init_AxiosHeaders();
22817
+ init_transitional();
22765
22818
  validators2 = validator_default.validators;
22766
22819
  utils_default.forEach(["delete", "get", "head", "options"], function forEachMethodNoData(method) {
22767
22820
  Axios.prototype[method] = function(url2, config) {
@@ -22791,7 +22844,7 @@ var init_Axios = __esm(() => {
22791
22844
  Axios_default = Axios;
22792
22845
  });
22793
22846
 
22794
- // ../../node_modules/axios/lib/cancel/CancelToken.js
22847
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/cancel/CancelToken.js
22795
22848
  class CancelToken {
22796
22849
  constructor(executor) {
22797
22850
  if (typeof executor !== "function") {
@@ -22881,14 +22934,14 @@ var init_CancelToken = __esm(() => {
22881
22934
  CancelToken_default = CancelToken;
22882
22935
  });
22883
22936
 
22884
- // ../../node_modules/axios/lib/helpers/spread.js
22937
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/spread.js
22885
22938
  function spread(callback) {
22886
22939
  return function wrap(arr) {
22887
22940
  return callback.apply(null, arr);
22888
22941
  };
22889
22942
  }
22890
22943
 
22891
- // ../../node_modules/axios/lib/helpers/isAxiosError.js
22944
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/isAxiosError.js
22892
22945
  function isAxiosError(payload) {
22893
22946
  return utils_default.isObject(payload) && payload.isAxiosError === true;
22894
22947
  }
@@ -22896,7 +22949,7 @@ var init_isAxiosError = __esm(() => {
22896
22949
  init_utils();
22897
22950
  });
22898
22951
 
22899
- // ../../node_modules/axios/lib/helpers/HttpStatusCode.js
22952
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/helpers/HttpStatusCode.js
22900
22953
  var HttpStatusCode, HttpStatusCode_default;
22901
22954
  var init_HttpStatusCode = __esm(() => {
22902
22955
  HttpStatusCode = {
@@ -22976,7 +23029,7 @@ var init_HttpStatusCode = __esm(() => {
22976
23029
  HttpStatusCode_default = HttpStatusCode;
22977
23030
  });
22978
23031
 
22979
- // ../../node_modules/axios/lib/axios.js
23032
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/lib/axios.js
22980
23033
  function createInstance(defaultConfig) {
22981
23034
  const context = new Axios_default(defaultConfig);
22982
23035
  const instance = bind(Axios_default.prototype.request, context);
@@ -23025,7 +23078,7 @@ var init_axios = __esm(() => {
23025
23078
  axios_default = axios;
23026
23079
  });
23027
23080
 
23028
- // ../../node_modules/axios/index.js
23081
+ // ../../node_modules/.bun/axios@1.13.5/node_modules/axios/index.js
23029
23082
  var init_axios2 = __esm(() => {
23030
23083
  init_axios();
23031
23084
  });
@@ -23249,7 +23302,7 @@ var init_sprints = __esm(() => {
23249
23302
  };
23250
23303
  });
23251
23304
 
23252
- // ../../node_modules/zod/v4/core/core.js
23305
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/core.js
23253
23306
  function $constructor(name, initializer, params) {
23254
23307
  function init(inst, def) {
23255
23308
  if (!inst._zod) {
@@ -23327,7 +23380,7 @@ var init_core = __esm(() => {
23327
23380
  globalConfig = {};
23328
23381
  });
23329
23382
 
23330
- // ../../node_modules/zod/v4/core/util.js
23383
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/util.js
23331
23384
  var exports_util = {};
23332
23385
  __export(exports_util, {
23333
23386
  unwrapMessage: () => unwrapMessage,
@@ -24003,7 +24056,7 @@ var init_util = __esm(() => {
24003
24056
  };
24004
24057
  });
24005
24058
 
24006
- // ../../node_modules/zod/v4/core/errors.js
24059
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/errors.js
24007
24060
  function flattenError(error, mapper = (issue2) => issue2.message) {
24008
24061
  const fieldErrors = {};
24009
24062
  const formErrors = [];
@@ -24144,7 +24197,7 @@ var init_errors = __esm(() => {
24144
24197
  $ZodRealError = $constructor("$ZodError", initializer, { Parent: Error });
24145
24198
  });
24146
24199
 
24147
- // ../../node_modules/zod/v4/core/parse.js
24200
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/parse.js
24148
24201
  var _parse = (_Err) => (schema, value, _ctx, _params) => {
24149
24202
  const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };
24150
24203
  const result = schema._zod.run({ value, issues: [] }, ctx);
@@ -24226,7 +24279,7 @@ var init_parse = __esm(() => {
24226
24279
  safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync($ZodRealError);
24227
24280
  });
24228
24281
 
24229
- // ../../node_modules/zod/v4/core/regexes.js
24282
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/regexes.js
24230
24283
  var exports_regexes = {};
24231
24284
  __export(exports_regexes, {
24232
24285
  xid: () => xid,
@@ -24382,7 +24435,7 @@ var init_regexes = __esm(() => {
24382
24435
  sha512_base64url = /* @__PURE__ */ fixedBase64url(86);
24383
24436
  });
24384
24437
 
24385
- // ../../node_modules/zod/v4/core/checks.js
24438
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/checks.js
24386
24439
  function handleCheckPropertyResult(result, payload, property) {
24387
24440
  if (result.issues.length) {
24388
24441
  payload.issues.push(...prefixIssues(property, result.issues));
@@ -24935,7 +24988,7 @@ var init_checks = __esm(() => {
24935
24988
  });
24936
24989
  });
24937
24990
 
24938
- // ../../node_modules/zod/v4/core/doc.js
24991
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/doc.js
24939
24992
  class Doc {
24940
24993
  constructor(args = []) {
24941
24994
  this.content = [];
@@ -24973,7 +25026,7 @@ class Doc {
24973
25026
  }
24974
25027
  }
24975
25028
 
24976
- // ../../node_modules/zod/v4/core/versions.js
25029
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/versions.js
24977
25030
  var version;
24978
25031
  var init_versions = __esm(() => {
24979
25032
  version = {
@@ -24983,7 +25036,7 @@ var init_versions = __esm(() => {
24983
25036
  };
24984
25037
  });
24985
25038
 
24986
- // ../../node_modules/zod/v4/core/schemas.js
25039
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/schemas.js
24987
25040
  function isValidBase64(data) {
24988
25041
  if (data === "")
24989
25042
  return true;
@@ -26956,7 +27009,7 @@ var init_schemas = __esm(() => {
26956
27009
  });
26957
27010
  });
26958
27011
 
26959
- // ../../node_modules/zod/v4/locales/ar.js
27012
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/ar.js
26960
27013
  function ar_default() {
26961
27014
  return {
26962
27015
  localeError: error()
@@ -27066,7 +27119,7 @@ var init_ar = __esm(() => {
27066
27119
  init_util();
27067
27120
  });
27068
27121
 
27069
- // ../../node_modules/zod/v4/locales/az.js
27122
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/az.js
27070
27123
  function az_default() {
27071
27124
  return {
27072
27125
  localeError: error2()
@@ -27175,7 +27228,7 @@ var init_az = __esm(() => {
27175
27228
  init_util();
27176
27229
  });
27177
27230
 
27178
- // ../../node_modules/zod/v4/locales/be.js
27231
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/be.js
27179
27232
  function getBelarusianPlural(count, one, few, many) {
27180
27233
  const absCount = Math.abs(count);
27181
27234
  const lastDigit = absCount % 10;
@@ -27335,7 +27388,7 @@ var init_be = __esm(() => {
27335
27388
  init_util();
27336
27389
  });
27337
27390
 
27338
- // ../../node_modules/zod/v4/locales/bg.js
27391
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/bg.js
27339
27392
  function bg_default() {
27340
27393
  return {
27341
27394
  localeError: error4()
@@ -27459,7 +27512,7 @@ var init_bg = __esm(() => {
27459
27512
  init_util();
27460
27513
  });
27461
27514
 
27462
- // ../../node_modules/zod/v4/locales/ca.js
27515
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/ca.js
27463
27516
  function ca_default() {
27464
27517
  return {
27465
27518
  localeError: error5()
@@ -27570,7 +27623,7 @@ var init_ca = __esm(() => {
27570
27623
  init_util();
27571
27624
  });
27572
27625
 
27573
- // ../../node_modules/zod/v4/locales/cs.js
27626
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/cs.js
27574
27627
  function cs_default() {
27575
27628
  return {
27576
27629
  localeError: error6()
@@ -27685,7 +27738,7 @@ var init_cs = __esm(() => {
27685
27738
  init_util();
27686
27739
  });
27687
27740
 
27688
- // ../../node_modules/zod/v4/locales/da.js
27741
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/da.js
27689
27742
  function da_default() {
27690
27743
  return {
27691
27744
  localeError: error7()
@@ -27804,7 +27857,7 @@ var init_da = __esm(() => {
27804
27857
  init_util();
27805
27858
  });
27806
27859
 
27807
- // ../../node_modules/zod/v4/locales/de.js
27860
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/de.js
27808
27861
  function de_default() {
27809
27862
  return {
27810
27863
  localeError: error8()
@@ -27916,7 +27969,7 @@ var init_de = __esm(() => {
27916
27969
  init_util();
27917
27970
  });
27918
27971
 
27919
- // ../../node_modules/zod/v4/locales/en.js
27972
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/en.js
27920
27973
  function en_default() {
27921
27974
  return {
27922
27975
  localeError: error9()
@@ -28026,7 +28079,7 @@ var init_en = __esm(() => {
28026
28079
  init_util();
28027
28080
  });
28028
28081
 
28029
- // ../../node_modules/zod/v4/locales/eo.js
28082
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/eo.js
28030
28083
  function eo_default() {
28031
28084
  return {
28032
28085
  localeError: error10()
@@ -28139,7 +28192,7 @@ var init_eo = __esm(() => {
28139
28192
  init_util();
28140
28193
  });
28141
28194
 
28142
- // ../../node_modules/zod/v4/locales/es.js
28195
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/es.js
28143
28196
  function es_default() {
28144
28197
  return {
28145
28198
  localeError: error11()
@@ -28275,7 +28328,7 @@ var init_es = __esm(() => {
28275
28328
  init_util();
28276
28329
  });
28277
28330
 
28278
- // ../../node_modules/zod/v4/locales/fa.js
28331
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/fa.js
28279
28332
  function fa_default() {
28280
28333
  return {
28281
28334
  localeError: error12()
@@ -28393,7 +28446,7 @@ var init_fa = __esm(() => {
28393
28446
  init_util();
28394
28447
  });
28395
28448
 
28396
- // ../../node_modules/zod/v4/locales/fi.js
28449
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/fi.js
28397
28450
  function fi_default() {
28398
28451
  return {
28399
28452
  localeError: error13()
@@ -28509,7 +28562,7 @@ var init_fi = __esm(() => {
28509
28562
  init_util();
28510
28563
  });
28511
28564
 
28512
- // ../../node_modules/zod/v4/locales/fr.js
28565
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/fr.js
28513
28566
  function fr_default() {
28514
28567
  return {
28515
28568
  localeError: error14()
@@ -28621,7 +28674,7 @@ var init_fr = __esm(() => {
28621
28674
  init_util();
28622
28675
  });
28623
28676
 
28624
- // ../../node_modules/zod/v4/locales/fr-CA.js
28677
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/fr-CA.js
28625
28678
  function fr_CA_default() {
28626
28679
  return {
28627
28680
  localeError: error15()
@@ -28732,7 +28785,7 @@ var init_fr_CA = __esm(() => {
28732
28785
  init_util();
28733
28786
  });
28734
28787
 
28735
- // ../../node_modules/zod/v4/locales/he.js
28788
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/he.js
28736
28789
  function he_default() {
28737
28790
  return {
28738
28791
  localeError: error16()
@@ -28929,7 +28982,7 @@ var init_he = __esm(() => {
28929
28982
  init_util();
28930
28983
  });
28931
28984
 
28932
- // ../../node_modules/zod/v4/locales/hu.js
28985
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/hu.js
28933
28986
  function hu_default() {
28934
28987
  return {
28935
28988
  localeError: error17()
@@ -29041,7 +29094,7 @@ var init_hu = __esm(() => {
29041
29094
  init_util();
29042
29095
  });
29043
29096
 
29044
- // ../../node_modules/zod/v4/locales/hy.js
29097
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/hy.js
29045
29098
  function getArmenianPlural(count, one, many) {
29046
29099
  return Math.abs(count) === 1 ? one : many;
29047
29100
  }
@@ -29192,7 +29245,7 @@ var init_hy = __esm(() => {
29192
29245
  init_util();
29193
29246
  });
29194
29247
 
29195
- // ../../node_modules/zod/v4/locales/id.js
29248
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/id.js
29196
29249
  function id_default() {
29197
29250
  return {
29198
29251
  localeError: error19()
@@ -29302,7 +29355,7 @@ var init_id = __esm(() => {
29302
29355
  init_util();
29303
29356
  });
29304
29357
 
29305
- // ../../node_modules/zod/v4/locales/is.js
29358
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/is.js
29306
29359
  function is_default() {
29307
29360
  return {
29308
29361
  localeError: error20()
@@ -29415,7 +29468,7 @@ var init_is = __esm(() => {
29415
29468
  init_util();
29416
29469
  });
29417
29470
 
29418
- // ../../node_modules/zod/v4/locales/it.js
29471
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/it.js
29419
29472
  function it_default() {
29420
29473
  return {
29421
29474
  localeError: error21()
@@ -29527,7 +29580,7 @@ var init_it = __esm(() => {
29527
29580
  init_util();
29528
29581
  });
29529
29582
 
29530
- // ../../node_modules/zod/v4/locales/ja.js
29583
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/ja.js
29531
29584
  function ja_default() {
29532
29585
  return {
29533
29586
  localeError: error22()
@@ -29638,7 +29691,7 @@ var init_ja = __esm(() => {
29638
29691
  init_util();
29639
29692
  });
29640
29693
 
29641
- // ../../node_modules/zod/v4/locales/ka.js
29694
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/ka.js
29642
29695
  function ka_default() {
29643
29696
  return {
29644
29697
  localeError: error23()
@@ -29754,7 +29807,7 @@ var init_ka = __esm(() => {
29754
29807
  init_util();
29755
29808
  });
29756
29809
 
29757
- // ../../node_modules/zod/v4/locales/km.js
29810
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/km.js
29758
29811
  function km_default() {
29759
29812
  return {
29760
29813
  localeError: error24()
@@ -29868,7 +29921,7 @@ var init_km = __esm(() => {
29868
29921
  init_util();
29869
29922
  });
29870
29923
 
29871
- // ../../node_modules/zod/v4/locales/kh.js
29924
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/kh.js
29872
29925
  function kh_default() {
29873
29926
  return km_default();
29874
29927
  }
@@ -29876,7 +29929,7 @@ var init_kh = __esm(() => {
29876
29929
  init_km();
29877
29930
  });
29878
29931
 
29879
- // ../../node_modules/zod/v4/locales/ko.js
29932
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/ko.js
29880
29933
  function ko_default() {
29881
29934
  return {
29882
29935
  localeError: error25()
@@ -29991,7 +30044,7 @@ var init_ko = __esm(() => {
29991
30044
  init_util();
29992
30045
  });
29993
30046
 
29994
- // ../../node_modules/zod/v4/locales/lt.js
30047
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/lt.js
29995
30048
  function getUnitTypeFromNumber(number2) {
29996
30049
  const abs = Math.abs(number2);
29997
30050
  const last = abs % 10;
@@ -30197,7 +30250,7 @@ var init_lt = __esm(() => {
30197
30250
  init_util();
30198
30251
  });
30199
30252
 
30200
- // ../../node_modules/zod/v4/locales/mk.js
30253
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/mk.js
30201
30254
  function mk_default() {
30202
30255
  return {
30203
30256
  localeError: error27()
@@ -30310,7 +30363,7 @@ var init_mk = __esm(() => {
30310
30363
  init_util();
30311
30364
  });
30312
30365
 
30313
- // ../../node_modules/zod/v4/locales/ms.js
30366
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/ms.js
30314
30367
  function ms_default() {
30315
30368
  return {
30316
30369
  localeError: error28()
@@ -30421,7 +30474,7 @@ var init_ms = __esm(() => {
30421
30474
  init_util();
30422
30475
  });
30423
30476
 
30424
- // ../../node_modules/zod/v4/locales/nl.js
30477
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/nl.js
30425
30478
  function nl_default() {
30426
30479
  return {
30427
30480
  localeError: error29()
@@ -30535,7 +30588,7 @@ var init_nl = __esm(() => {
30535
30588
  init_util();
30536
30589
  });
30537
30590
 
30538
- // ../../node_modules/zod/v4/locales/no.js
30591
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/no.js
30539
30592
  function no_default() {
30540
30593
  return {
30541
30594
  localeError: error30()
@@ -30647,7 +30700,7 @@ var init_no = __esm(() => {
30647
30700
  init_util();
30648
30701
  });
30649
30702
 
30650
- // ../../node_modules/zod/v4/locales/ota.js
30703
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/ota.js
30651
30704
  function ota_default() {
30652
30705
  return {
30653
30706
  localeError: error31()
@@ -30760,7 +30813,7 @@ var init_ota = __esm(() => {
30760
30813
  init_util();
30761
30814
  });
30762
30815
 
30763
- // ../../node_modules/zod/v4/locales/ps.js
30816
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/ps.js
30764
30817
  function ps_default() {
30765
30818
  return {
30766
30819
  localeError: error32()
@@ -30878,7 +30931,7 @@ var init_ps = __esm(() => {
30878
30931
  init_util();
30879
30932
  });
30880
30933
 
30881
- // ../../node_modules/zod/v4/locales/pl.js
30934
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/pl.js
30882
30935
  function pl_default() {
30883
30936
  return {
30884
30937
  localeError: error33()
@@ -30991,7 +31044,7 @@ var init_pl = __esm(() => {
30991
31044
  init_util();
30992
31045
  });
30993
31046
 
30994
- // ../../node_modules/zod/v4/locales/pt.js
31047
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/pt.js
30995
31048
  function pt_default() {
30996
31049
  return {
30997
31050
  localeError: error34()
@@ -31103,7 +31156,7 @@ var init_pt = __esm(() => {
31103
31156
  init_util();
31104
31157
  });
31105
31158
 
31106
- // ../../node_modules/zod/v4/locales/ru.js
31159
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/ru.js
31107
31160
  function getRussianPlural(count, one, few, many) {
31108
31161
  const absCount = Math.abs(count);
31109
31162
  const lastDigit = absCount % 10;
@@ -31263,7 +31316,7 @@ var init_ru = __esm(() => {
31263
31316
  init_util();
31264
31317
  });
31265
31318
 
31266
- // ../../node_modules/zod/v4/locales/sl.js
31319
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/sl.js
31267
31320
  function sl_default() {
31268
31321
  return {
31269
31322
  localeError: error36()
@@ -31376,7 +31429,7 @@ var init_sl = __esm(() => {
31376
31429
  init_util();
31377
31430
  });
31378
31431
 
31379
- // ../../node_modules/zod/v4/locales/sv.js
31432
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/sv.js
31380
31433
  function sv_default() {
31381
31434
  return {
31382
31435
  localeError: error37()
@@ -31490,7 +31543,7 @@ var init_sv = __esm(() => {
31490
31543
  init_util();
31491
31544
  });
31492
31545
 
31493
- // ../../node_modules/zod/v4/locales/ta.js
31546
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/ta.js
31494
31547
  function ta_default() {
31495
31548
  return {
31496
31549
  localeError: error38()
@@ -31604,7 +31657,7 @@ var init_ta = __esm(() => {
31604
31657
  init_util();
31605
31658
  });
31606
31659
 
31607
- // ../../node_modules/zod/v4/locales/th.js
31660
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/th.js
31608
31661
  function th_default() {
31609
31662
  return {
31610
31663
  localeError: error39()
@@ -31718,7 +31771,7 @@ var init_th = __esm(() => {
31718
31771
  init_util();
31719
31772
  });
31720
31773
 
31721
- // ../../node_modules/zod/v4/locales/tr.js
31774
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/tr.js
31722
31775
  function tr_default() {
31723
31776
  return {
31724
31777
  localeError: error40()
@@ -31827,7 +31880,7 @@ var init_tr = __esm(() => {
31827
31880
  init_util();
31828
31881
  });
31829
31882
 
31830
- // ../../node_modules/zod/v4/locales/uk.js
31883
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/uk.js
31831
31884
  function uk_default() {
31832
31885
  return {
31833
31886
  localeError: error41()
@@ -31939,7 +31992,7 @@ var init_uk = __esm(() => {
31939
31992
  init_util();
31940
31993
  });
31941
31994
 
31942
- // ../../node_modules/zod/v4/locales/ua.js
31995
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/ua.js
31943
31996
  function ua_default() {
31944
31997
  return uk_default();
31945
31998
  }
@@ -31947,7 +32000,7 @@ var init_ua = __esm(() => {
31947
32000
  init_uk();
31948
32001
  });
31949
32002
 
31950
- // ../../node_modules/zod/v4/locales/ur.js
32003
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/ur.js
31951
32004
  function ur_default() {
31952
32005
  return {
31953
32006
  localeError: error42()
@@ -32061,7 +32114,7 @@ var init_ur = __esm(() => {
32061
32114
  init_util();
32062
32115
  });
32063
32116
 
32064
- // ../../node_modules/zod/v4/locales/uz.js
32117
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/uz.js
32065
32118
  function uz_default() {
32066
32119
  return {
32067
32120
  localeError: error43()
@@ -32174,7 +32227,7 @@ var init_uz = __esm(() => {
32174
32227
  init_util();
32175
32228
  });
32176
32229
 
32177
- // ../../node_modules/zod/v4/locales/vi.js
32230
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/vi.js
32178
32231
  function vi_default() {
32179
32232
  return {
32180
32233
  localeError: error44()
@@ -32286,7 +32339,7 @@ var init_vi = __esm(() => {
32286
32339
  init_util();
32287
32340
  });
32288
32341
 
32289
- // ../../node_modules/zod/v4/locales/zh-CN.js
32342
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/zh-CN.js
32290
32343
  function zh_CN_default() {
32291
32344
  return {
32292
32345
  localeError: error45()
@@ -32399,7 +32452,7 @@ var init_zh_CN = __esm(() => {
32399
32452
  init_util();
32400
32453
  });
32401
32454
 
32402
- // ../../node_modules/zod/v4/locales/zh-TW.js
32455
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/zh-TW.js
32403
32456
  function zh_TW_default() {
32404
32457
  return {
32405
32458
  localeError: error46()
@@ -32510,7 +32563,7 @@ var init_zh_TW = __esm(() => {
32510
32563
  init_util();
32511
32564
  });
32512
32565
 
32513
- // ../../node_modules/zod/v4/locales/yo.js
32566
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/yo.js
32514
32567
  function yo_default() {
32515
32568
  return {
32516
32569
  localeError: error47()
@@ -32621,7 +32674,7 @@ var init_yo = __esm(() => {
32621
32674
  init_util();
32622
32675
  });
32623
32676
 
32624
- // ../../node_modules/zod/v4/locales/index.js
32677
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/locales/index.js
32625
32678
  var exports_locales = {};
32626
32679
  __export(exports_locales, {
32627
32680
  zhTW: () => zh_TW_default,
@@ -32726,7 +32779,7 @@ var init_locales = __esm(() => {
32726
32779
  init_yo();
32727
32780
  });
32728
32781
 
32729
- // ../../node_modules/zod/v4/core/registries.js
32782
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/registries.js
32730
32783
  class $ZodRegistry {
32731
32784
  constructor() {
32732
32785
  this._map = new WeakMap;
@@ -32778,7 +32831,7 @@ var init_registries = __esm(() => {
32778
32831
  globalRegistry = globalThis.__zod_globalRegistry;
32779
32832
  });
32780
32833
 
32781
- // ../../node_modules/zod/v4/core/api.js
32834
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/api.js
32782
32835
  function _string(Class2, params) {
32783
32836
  return new Class2({
32784
32837
  type: "string",
@@ -33706,7 +33759,7 @@ var init_api = __esm(() => {
33706
33759
  };
33707
33760
  });
33708
33761
 
33709
- // ../../node_modules/zod/v4/core/to-json-schema.js
33762
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.js
33710
33763
  function initializeContext(params) {
33711
33764
  let target = params?.target ?? "draft-2020-12";
33712
33765
  if (target === "draft-4")
@@ -34054,7 +34107,7 @@ var init_to_json_schema = __esm(() => {
34054
34107
  init_registries();
34055
34108
  });
34056
34109
 
34057
- // ../../node_modules/zod/v4/core/json-schema-processors.js
34110
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/json-schema-processors.js
34058
34111
  function toJSONSchema(input, params) {
34059
34112
  if ("_idmap" in input) {
34060
34113
  const registry2 = input;
@@ -34566,7 +34619,7 @@ var init_json_schema_processors = __esm(() => {
34566
34619
  };
34567
34620
  });
34568
34621
 
34569
- // ../../node_modules/zod/v4/core/json-schema-generator.js
34622
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/json-schema-generator.js
34570
34623
  class JSONSchemaGenerator {
34571
34624
  get metadataRegistry() {
34572
34625
  return this.ctx.metadataRegistry;
@@ -34630,11 +34683,11 @@ var init_json_schema_generator = __esm(() => {
34630
34683
  init_to_json_schema();
34631
34684
  });
34632
34685
 
34633
- // ../../node_modules/zod/v4/core/json-schema.js
34686
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/json-schema.js
34634
34687
  var exports_json_schema = {};
34635
34688
  var init_json_schema = () => {};
34636
34689
 
34637
- // ../../node_modules/zod/v4/core/index.js
34690
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/core/index.js
34638
34691
  var exports_core2 = {};
34639
34692
  __export(exports_core2, {
34640
34693
  version: () => version,
@@ -34929,7 +34982,7 @@ var init_core2 = __esm(() => {
34929
34982
  init_to_json_schema();
34930
34983
  });
34931
34984
 
34932
- // ../../node_modules/zod/v4/classic/checks.js
34985
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/checks.js
34933
34986
  var exports_checks2 = {};
34934
34987
  __export(exports_checks2, {
34935
34988
  uppercase: () => _uppercase,
@@ -34966,7 +35019,7 @@ var init_checks2 = __esm(() => {
34966
35019
  init_core2();
34967
35020
  });
34968
35021
 
34969
- // ../../node_modules/zod/v4/classic/iso.js
35022
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/iso.js
34970
35023
  var exports_iso = {};
34971
35024
  __export(exports_iso, {
34972
35025
  time: () => time2,
@@ -35012,7 +35065,7 @@ var init_iso = __esm(() => {
35012
35065
  });
35013
35066
  });
35014
35067
 
35015
- // ../../node_modules/zod/v4/classic/errors.js
35068
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/errors.js
35016
35069
  var initializer2 = (inst, issues) => {
35017
35070
  $ZodError.init(inst, issues);
35018
35071
  inst.name = "ZodError";
@@ -35052,7 +35105,7 @@ var init_errors2 = __esm(() => {
35052
35105
  });
35053
35106
  });
35054
35107
 
35055
- // ../../node_modules/zod/v4/classic/parse.js
35108
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/parse.js
35056
35109
  var parse3, parseAsync2, safeParse2, safeParseAsync2, encode4, decode2, encodeAsync2, decodeAsync2, safeEncode2, safeDecode2, safeEncodeAsync2, safeDecodeAsync2;
35057
35110
  var init_parse2 = __esm(() => {
35058
35111
  init_core2();
@@ -35071,7 +35124,7 @@ var init_parse2 = __esm(() => {
35071
35124
  safeDecodeAsync2 = /* @__PURE__ */ _safeDecodeAsync(ZodRealError);
35072
35125
  });
35073
35126
 
35074
- // ../../node_modules/zod/v4/classic/schemas.js
35127
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/schemas.js
35075
35128
  var exports_schemas2 = {};
35076
35129
  __export(exports_schemas2, {
35077
35130
  xor: () => xor,
@@ -36324,7 +36377,7 @@ var init_schemas2 = __esm(() => {
36324
36377
  meta2 = meta;
36325
36378
  });
36326
36379
 
36327
- // ../../node_modules/zod/v4/classic/compat.js
36380
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/compat.js
36328
36381
  function setErrorMap(map2) {
36329
36382
  config({
36330
36383
  customError: map2
@@ -36352,7 +36405,7 @@ var init_compat = __esm(() => {
36352
36405
  (function(ZodFirstPartyTypeKind2) {})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));
36353
36406
  });
36354
36407
 
36355
- // ../../node_modules/zod/v4/classic/from-json-schema.js
36408
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/from-json-schema.js
36356
36409
  function detectVersion(schema, defaultTarget) {
36357
36410
  const $schema = schema.$schema;
36358
36411
  if ($schema === "https://json-schema.org/draft/2020-12/schema") {
@@ -36821,7 +36874,7 @@ var init_from_json_schema = __esm(() => {
36821
36874
  ]);
36822
36875
  });
36823
36876
 
36824
- // ../../node_modules/zod/v4/classic/coerce.js
36877
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/coerce.js
36825
36878
  var exports_coerce = {};
36826
36879
  __export(exports_coerce, {
36827
36880
  string: () => string3,
@@ -36850,7 +36903,7 @@ var init_coerce = __esm(() => {
36850
36903
  init_schemas2();
36851
36904
  });
36852
36905
 
36853
- // ../../node_modules/zod/v4/classic/external.js
36906
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/external.js
36854
36907
  var exports_external = {};
36855
36908
  __export(exports_external, {
36856
36909
  xor: () => xor,
@@ -37109,7 +37162,7 @@ var init_external = __esm(() => {
37109
37162
  config(en_default());
37110
37163
  });
37111
37164
 
37112
- // ../../node_modules/zod/index.js
37165
+ // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/index.js
37113
37166
  var init_zod = __esm(() => {
37114
37167
  init_external();
37115
37168
  init_external();
@@ -38244,7 +38297,8 @@ var init_session = __esm(() => {
38244
38297
  model: exports_external.string().optional(),
38245
38298
  createdAt: exports_external.number(),
38246
38299
  updatedAt: exports_external.number(),
38247
- title: exports_external.string().optional()
38300
+ title: exports_external.string().optional(),
38301
+ prompt: exports_external.string().optional()
38248
38302
  });
38249
38303
  SessionSummarySchema = exports_external.object({
38250
38304
  sessionId: exports_external.string(),
@@ -38611,6 +38665,39 @@ var init_workspaces = __esm(() => {
38611
38665
  };
38612
38666
  });
38613
38667
 
38668
+ // ../sdk/src/discussion/discussion-types.ts
38669
+ var DiscussionMessageSchema, DiscussionInsightSchema, DiscussionSchema;
38670
+ var init_discussion_types = __esm(() => {
38671
+ init_zod();
38672
+ DiscussionMessageSchema = exports_external.object({
38673
+ role: exports_external.enum(["user", "assistant"]),
38674
+ content: exports_external.string(),
38675
+ timestamp: exports_external.number()
38676
+ });
38677
+ DiscussionInsightSchema = exports_external.object({
38678
+ id: exports_external.string(),
38679
+ type: exports_external.enum(["decision", "requirement", "idea", "concern", "learning"]),
38680
+ title: exports_external.string(),
38681
+ content: exports_external.string(),
38682
+ tags: exports_external.array(exports_external.string()).default([]),
38683
+ createdAt: exports_external.string()
38684
+ });
38685
+ DiscussionSchema = exports_external.object({
38686
+ id: exports_external.string(),
38687
+ title: exports_external.string(),
38688
+ topic: exports_external.string(),
38689
+ status: exports_external.enum(["active", "completed", "archived"]).default("active"),
38690
+ messages: exports_external.array(DiscussionMessageSchema).default([]),
38691
+ insights: exports_external.array(DiscussionInsightSchema).default([]),
38692
+ createdAt: exports_external.string(),
38693
+ updatedAt: exports_external.string(),
38694
+ metadata: exports_external.object({
38695
+ model: exports_external.string(),
38696
+ provider: exports_external.string()
38697
+ })
38698
+ });
38699
+ });
38700
+
38614
38701
  // ../sdk/src/index.ts
38615
38702
  class LocusClient {
38616
38703
  api;
@@ -38712,6 +38799,7 @@ var init_src2 = __esm(() => {
38712
38799
  init_sprints();
38713
38800
  init_tasks();
38714
38801
  init_workspaces();
38802
+ init_discussion_types();
38715
38803
  init_events();
38716
38804
  init_auth();
38717
38805
  init_ci();
@@ -38936,10 +39024,198 @@ var init_reviewer_worker = __esm(() => {
38936
39024
  }
38937
39025
  });
38938
39026
 
38939
- // ../sdk/src/core/prompt-builder.ts
38940
- import { existsSync as existsSync5, readFileSync as readFileSync5 } from "node:fs";
39027
+ // ../sdk/src/discussion/discussion-manager.ts
39028
+ import {
39029
+ existsSync as existsSync5,
39030
+ mkdirSync as mkdirSync3,
39031
+ readdirSync as readdirSync2,
39032
+ readFileSync as readFileSync5,
39033
+ unlinkSync as unlinkSync2,
39034
+ writeFileSync as writeFileSync3
39035
+ } from "node:fs";
38941
39036
  import { join as join6 } from "node:path";
38942
39037
 
39038
+ class DiscussionManager {
39039
+ discussionsDir;
39040
+ constructor(projectPath) {
39041
+ this.discussionsDir = getLocusPath(projectPath, "discussionsDir");
39042
+ }
39043
+ create(topic, model, provider) {
39044
+ this.ensureDir();
39045
+ const now = new Date().toISOString();
39046
+ const id = `disc-${Date.now()}`;
39047
+ const discussion = {
39048
+ id,
39049
+ title: topic,
39050
+ topic,
39051
+ status: "active",
39052
+ messages: [],
39053
+ insights: [],
39054
+ createdAt: now,
39055
+ updatedAt: now,
39056
+ metadata: { model, provider }
39057
+ };
39058
+ this.save(discussion);
39059
+ return discussion;
39060
+ }
39061
+ save(discussion) {
39062
+ this.ensureDir();
39063
+ const jsonPath = join6(this.discussionsDir, `${discussion.id}.json`);
39064
+ const mdPath = join6(this.discussionsDir, `summary-${discussion.id}.md`);
39065
+ writeFileSync3(jsonPath, JSON.stringify(discussion, null, 2), "utf-8");
39066
+ writeFileSync3(mdPath, this.toMarkdown(discussion), "utf-8");
39067
+ }
39068
+ load(id) {
39069
+ this.ensureDir();
39070
+ const filePath = join6(this.discussionsDir, `${id}.json`);
39071
+ if (!existsSync5(filePath)) {
39072
+ return null;
39073
+ }
39074
+ try {
39075
+ return JSON.parse(readFileSync5(filePath, "utf-8"));
39076
+ } catch {
39077
+ return null;
39078
+ }
39079
+ }
39080
+ list(status) {
39081
+ this.ensureDir();
39082
+ const files = readdirSync2(this.discussionsDir).filter((f) => f.endsWith(".json"));
39083
+ const discussions = [];
39084
+ for (const file2 of files) {
39085
+ try {
39086
+ const discussion = JSON.parse(readFileSync5(join6(this.discussionsDir, file2), "utf-8"));
39087
+ if (!status || discussion.status === status) {
39088
+ discussions.push(discussion);
39089
+ }
39090
+ } catch {}
39091
+ }
39092
+ discussions.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
39093
+ return discussions;
39094
+ }
39095
+ complete(id) {
39096
+ const discussion = this.load(id);
39097
+ if (!discussion) {
39098
+ throw new Error(`Discussion not found: ${id}`);
39099
+ }
39100
+ discussion.status = "completed";
39101
+ discussion.updatedAt = new Date().toISOString();
39102
+ this.save(discussion);
39103
+ return discussion;
39104
+ }
39105
+ archive(id) {
39106
+ const discussion = this.load(id);
39107
+ if (!discussion) {
39108
+ throw new Error(`Discussion not found: ${id}`);
39109
+ }
39110
+ discussion.status = "archived";
39111
+ discussion.updatedAt = new Date().toISOString();
39112
+ this.save(discussion);
39113
+ }
39114
+ delete(id) {
39115
+ this.ensureDir();
39116
+ const jsonPath = join6(this.discussionsDir, `${id}.json`);
39117
+ const mdPath = join6(this.discussionsDir, `summary-${id}.md`);
39118
+ if (existsSync5(jsonPath)) {
39119
+ unlinkSync2(jsonPath);
39120
+ }
39121
+ if (existsSync5(mdPath)) {
39122
+ unlinkSync2(mdPath);
39123
+ }
39124
+ }
39125
+ addMessage(id, role, content) {
39126
+ const discussion = this.load(id);
39127
+ if (!discussion) {
39128
+ throw new Error(`Discussion not found: ${id}`);
39129
+ }
39130
+ discussion.messages.push({
39131
+ role,
39132
+ content,
39133
+ timestamp: Date.now()
39134
+ });
39135
+ discussion.updatedAt = new Date().toISOString();
39136
+ this.save(discussion);
39137
+ return discussion;
39138
+ }
39139
+ addInsight(id, insight) {
39140
+ const discussion = this.load(id);
39141
+ if (!discussion) {
39142
+ throw new Error(`Discussion not found: ${id}`);
39143
+ }
39144
+ discussion.insights.push(insight);
39145
+ discussion.updatedAt = new Date().toISOString();
39146
+ this.save(discussion);
39147
+ return discussion;
39148
+ }
39149
+ getAllInsights() {
39150
+ const discussions = this.list("completed");
39151
+ const insights = [];
39152
+ for (const discussion of discussions) {
39153
+ insights.push(...discussion.insights);
39154
+ }
39155
+ insights.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
39156
+ return insights;
39157
+ }
39158
+ getMarkdown(id) {
39159
+ const discussion = this.load(id);
39160
+ if (!discussion)
39161
+ return null;
39162
+ return this.toMarkdown(discussion);
39163
+ }
39164
+ toMarkdown(discussion) {
39165
+ const lines = [];
39166
+ lines.push(`# Discussion: ${discussion.title}`);
39167
+ lines.push("");
39168
+ lines.push(`**Status:** ${discussion.status.toUpperCase()}`);
39169
+ lines.push(`**Topic:** ${discussion.topic}`);
39170
+ lines.push(`**Created:** ${discussion.createdAt}`);
39171
+ lines.push(`**Updated:** ${discussion.updatedAt}`);
39172
+ lines.push(`**Model:** ${discussion.metadata.model} (${discussion.metadata.provider})`);
39173
+ lines.push("");
39174
+ if (discussion.messages.length > 0) {
39175
+ lines.push(`## Messages (${discussion.messages.length})`);
39176
+ lines.push("");
39177
+ for (const msg of discussion.messages) {
39178
+ const time3 = new Date(msg.timestamp).toISOString();
39179
+ const roleLabel = msg.role === "user" ? "User" : "Assistant";
39180
+ lines.push(`### ${roleLabel} — ${time3}`);
39181
+ lines.push("");
39182
+ lines.push(msg.content);
39183
+ lines.push("");
39184
+ }
39185
+ }
39186
+ if (discussion.insights.length > 0) {
39187
+ lines.push(`## Insights (${discussion.insights.length})`);
39188
+ lines.push("");
39189
+ for (const insight of discussion.insights) {
39190
+ lines.push(`### [${insight.type.toUpperCase()}] ${insight.title}`);
39191
+ lines.push("");
39192
+ lines.push(insight.content);
39193
+ if (insight.tags.length > 0) {
39194
+ lines.push("");
39195
+ lines.push(`**Tags:** ${insight.tags.join(", ")}`);
39196
+ }
39197
+ lines.push("");
39198
+ }
39199
+ }
39200
+ lines.push("---");
39201
+ lines.push(`*Discussion ID: ${discussion.id}*`);
39202
+ return lines.join(`
39203
+ `);
39204
+ }
39205
+ ensureDir() {
39206
+ if (!existsSync5(this.discussionsDir)) {
39207
+ mkdirSync3(this.discussionsDir, { recursive: true });
39208
+ }
39209
+ }
39210
+ }
39211
+ var init_discussion_manager = __esm(() => {
39212
+ init_config();
39213
+ });
39214
+
39215
+ // ../sdk/src/core/prompt-builder.ts
39216
+ import { existsSync as existsSync6, readFileSync as readFileSync6 } from "node:fs";
39217
+ import { join as join7 } from "node:path";
39218
+
38943
39219
  class PromptBuilder {
38944
39220
  projectPath;
38945
39221
  constructor(projectPath) {
@@ -38977,6 +39253,15 @@ ${knowledgeBase}
38977
39253
  These are accumulated lessons from past tasks. Follow them to avoid repeating mistakes:
38978
39254
  ${learnings}
38979
39255
  </learnings>
39256
+ `;
39257
+ }
39258
+ const discussionInsights = this.getDiscussionInsightsContent();
39259
+ if (discussionInsights) {
39260
+ sections += `
39261
+ <discussion_insights>
39262
+ These are key decisions and insights from product discussions. Follow them to maintain product coherence:
39263
+ ${discussionInsights}
39264
+ </discussion_insights>
38980
39265
  `;
38981
39266
  }
38982
39267
  if (task2.docs && task2.docs.length > 0) {
@@ -39065,6 +39350,15 @@ ${knowledgeBase}
39065
39350
  These are accumulated lessons from past tasks. Follow them to avoid repeating mistakes:
39066
39351
  ${learnings}
39067
39352
  </learnings>
39353
+ `;
39354
+ }
39355
+ const discussionInsights = this.getDiscussionInsightsContent();
39356
+ if (discussionInsights) {
39357
+ sections += `
39358
+ <discussion_insights>
39359
+ These are key decisions and insights from product discussions. Follow them to maintain product coherence:
39360
+ ${discussionInsights}
39361
+ </discussion_insights>
39068
39362
  `;
39069
39363
  }
39070
39364
  return `<direct_execution>
@@ -39079,9 +39373,9 @@ ${sections}
39079
39373
  }
39080
39374
  getProjectContext() {
39081
39375
  const contextPath = getLocusPath(this.projectPath, "contextFile");
39082
- if (existsSync5(contextPath)) {
39376
+ if (existsSync6(contextPath)) {
39083
39377
  try {
39084
- const context2 = readFileSync5(contextPath, "utf-8");
39378
+ const context2 = readFileSync6(contextPath, "utf-8");
39085
39379
  if (context2.trim().length > 20) {
39086
39380
  return context2;
39087
39381
  }
@@ -39092,10 +39386,10 @@ ${sections}
39092
39386
  return this.getFallbackContext() || null;
39093
39387
  }
39094
39388
  getFallbackContext() {
39095
- const readmePath = join6(this.projectPath, "README.md");
39096
- if (existsSync5(readmePath)) {
39389
+ const readmePath = join7(this.projectPath, "README.md");
39390
+ if (existsSync6(readmePath)) {
39097
39391
  try {
39098
- const content = readFileSync5(readmePath, "utf-8");
39392
+ const content = readFileSync6(readmePath, "utf-8");
39099
39393
  const limit = 1000;
39100
39394
  return content.slice(0, limit) + (content.length > limit ? `
39101
39395
  ...(truncated)...` : "");
@@ -39109,15 +39403,16 @@ ${sections}
39109
39403
  return `You have access to the following documentation directories for context:
39110
39404
  - Artifacts: \`.locus/artifacts\` (local-only, not synced to cloud)
39111
39405
  - Documents: \`.locus/documents\` (synced from cloud)
39406
+ - Discussions: \`.locus/discussions\` (product discussion insights and decisions)
39112
39407
  If you need more information about the project strategies, plans, or architecture, read files in these directories.`;
39113
39408
  }
39114
39409
  getLearningsContent() {
39115
39410
  const learningsPath = getLocusPath(this.projectPath, "learningsFile");
39116
- if (!existsSync5(learningsPath)) {
39411
+ if (!existsSync6(learningsPath)) {
39117
39412
  return null;
39118
39413
  }
39119
39414
  try {
39120
- const content = readFileSync5(learningsPath, "utf-8");
39415
+ const content = readFileSync6(learningsPath, "utf-8");
39121
39416
  const lines = content.split(`
39122
39417
  `).filter((l) => l.startsWith("- "));
39123
39418
  if (lines.length === 0) {
@@ -39129,6 +39424,53 @@ If you need more information about the project strategies, plans, or architectur
39129
39424
  return null;
39130
39425
  }
39131
39426
  }
39427
+ getDiscussionInsightsContent() {
39428
+ try {
39429
+ const manager = new DiscussionManager(this.projectPath);
39430
+ const insights = manager.getAllInsights();
39431
+ if (insights.length === 0) {
39432
+ return null;
39433
+ }
39434
+ const groups = {};
39435
+ for (const insight of insights) {
39436
+ const key = insight.type;
39437
+ if (!groups[key]) {
39438
+ groups[key] = [];
39439
+ }
39440
+ groups[key].push(insight);
39441
+ }
39442
+ const typeLabels = {
39443
+ decision: "Decisions",
39444
+ requirement: "Requirements",
39445
+ idea: "Ideas",
39446
+ concern: "Concerns",
39447
+ learning: "Learnings"
39448
+ };
39449
+ let output = "";
39450
+ for (const [type, label] of Object.entries(typeLabels)) {
39451
+ const items = groups[type];
39452
+ if (!items || items.length === 0)
39453
+ continue;
39454
+ output += `## ${label}
39455
+ `;
39456
+ for (const item of items) {
39457
+ output += `- [${item.title}]: ${item.content}
39458
+ `;
39459
+ }
39460
+ output += `
39461
+ `;
39462
+ }
39463
+ if (output.length === 0) {
39464
+ return null;
39465
+ }
39466
+ if (output.length > 2000) {
39467
+ output = `${output.slice(0, 1997)}...`;
39468
+ }
39469
+ return output.trimEnd();
39470
+ } catch {
39471
+ return null;
39472
+ }
39473
+ }
39132
39474
  roleToText(role) {
39133
39475
  if (!role) {
39134
39476
  return null;
@@ -39151,6 +39493,7 @@ If you need more information about the project strategies, plans, or architectur
39151
39493
  }
39152
39494
  var init_prompt_builder = __esm(() => {
39153
39495
  init_src();
39496
+ init_discussion_manager();
39154
39497
  init_config();
39155
39498
  });
39156
39499
 
@@ -39467,7 +39810,6 @@ Branch: \`${result.branch}\`` : "";
39467
39810
  this.log("All tasks done. Creating pull request...", "info");
39468
39811
  const prResult = this.gitWorkflow.createPullRequest(this.completedTaskList, this.taskSummaries);
39469
39812
  if (prResult.url) {
39470
- this.log(`PR created: ${prResult.url}`, "success");
39471
39813
  for (const task2 of this.completedTaskList) {
39472
39814
  try {
39473
39815
  await this.client.tasks.update(task2.id, this.config.workspaceId, {
@@ -39535,6 +39877,349 @@ var init_core3 = __esm(() => {
39535
39877
  init_prompt_builder();
39536
39878
  });
39537
39879
 
39880
+ // ../sdk/src/discussion/agents/facilitator-prompt.ts
39881
+ function buildFacilitatorPrompt(input) {
39882
+ const {
39883
+ topic,
39884
+ projectContext,
39885
+ learnings,
39886
+ knowledgeBase,
39887
+ previousMessages,
39888
+ insights,
39889
+ isFirstMessage
39890
+ } = input;
39891
+ let sections = "";
39892
+ if (projectContext) {
39893
+ sections += `
39894
+ <project_context>
39895
+ ${projectContext}
39896
+ </project_context>
39897
+ `;
39898
+ }
39899
+ sections += `
39900
+ <knowledge_base>
39901
+ ${knowledgeBase}
39902
+ </knowledge_base>
39903
+ `;
39904
+ if (learnings) {
39905
+ sections += `
39906
+ <learnings>
39907
+ These are accumulated lessons from past work on this project. Use them to ask more informed questions:
39908
+ ${learnings}
39909
+ </learnings>
39910
+ `;
39911
+ }
39912
+ if (previousMessages.length > 0) {
39913
+ let history = "";
39914
+ for (const msg of previousMessages) {
39915
+ const role = msg.role === "user" ? "User" : "Facilitator";
39916
+ history += `[${role}]: ${msg.content}
39917
+
39918
+ `;
39919
+ }
39920
+ sections += `
39921
+ <conversation_history>
39922
+ ${history.trimEnd()}
39923
+ </conversation_history>
39924
+ `;
39925
+ }
39926
+ if (insights.length > 0) {
39927
+ let insightsText = "";
39928
+ for (const insight of insights) {
39929
+ insightsText += `- [${insight.type.toUpperCase()}] ${insight.title}: ${insight.content}
39930
+ `;
39931
+ }
39932
+ sections += `
39933
+ <extracted_insights>
39934
+ Insights identified so far in this discussion:
39935
+ ${insightsText.trimEnd()}
39936
+ </extracted_insights>
39937
+ `;
39938
+ }
39939
+ const firstMessageInstruction = isFirstMessage ? `This is the START of the discussion. Introduce yourself briefly, then ask your first probing question about the topic. Do NOT extract any insights yet — there is no user input to extract from.` : `Continue the discussion by responding to the user's latest message. Build on their answers to go deeper. After responding, extract any insights from their message.`;
39940
+ return `<discussion_facilitator>
39941
+ You are a product strategy facilitator leading a structured discussion.
39942
+
39943
+ <topic>
39944
+ ${topic}
39945
+ </topic>
39946
+ ${sections}
39947
+ <role>
39948
+ You are an expert product strategy facilitator. Your job is to:
39949
+ 1. Ask probing, specific questions about the topic — never generic or surface-level
39950
+ 2. Build on previous answers to progressively deepen the conversation
39951
+ 3. Identify and extract key decisions, requirements, ideas, concerns, and learnings
39952
+ 4. Reference existing project context and learnings to ask informed questions
39953
+ 5. When the topic feels fully explored, suggest wrapping up with a summary
39954
+ </role>
39955
+
39956
+ <rules>
39957
+ - ${firstMessageInstruction}
39958
+ - Ask ONE focused question at a time. Do not overwhelm with multiple questions.
39959
+ - Be conversational but purposeful — every question should drive toward actionable insights.
39960
+ - When you identify an insight from the user's response, include it as a structured XML block in your response.
39961
+ - Insight blocks use this format within your response text:
39962
+
39963
+ <insight>
39964
+ {"type": "decision|requirement|idea|concern|learning", "title": "short title", "content": "detailed description", "tags": ["relevant", "tags"]}
39965
+ </insight>
39966
+
39967
+ - You may include multiple <insight> blocks if the user's response contains several distinct insights.
39968
+ - The insight blocks will be parsed and removed from the displayed response, so write your conversational text as if they are not there.
39969
+ - Types explained:
39970
+ - **decision**: A choice or direction that has been made or agreed upon
39971
+ - **requirement**: A specific need, constraint, or must-have
39972
+ - **idea**: A suggestion, proposal, or possibility to explore
39973
+ - **concern**: A risk, worry, or potential problem identified
39974
+ - **learning**: A realization, lesson, or important context discovered
39975
+ - Keep responses concise. Aim for 2-4 sentences of conversation plus any insight blocks.
39976
+ - If the user's responses indicate the topic is well-explored, suggest summarizing and wrapping up.
39977
+ </rules>
39978
+ </discussion_facilitator>`;
39979
+ }
39980
+ function buildSummaryPrompt(topic, messages, insights) {
39981
+ let history = "";
39982
+ for (const msg of messages) {
39983
+ const role = msg.role === "user" ? "User" : "Facilitator";
39984
+ history += `[${role}]: ${msg.content}
39985
+
39986
+ `;
39987
+ }
39988
+ let insightsText = "";
39989
+ if (insights.length > 0) {
39990
+ for (const insight of insights) {
39991
+ insightsText += `- [${insight.type.toUpperCase()}] **${insight.title}**: ${insight.content}`;
39992
+ if (insight.tags.length > 0) {
39993
+ insightsText += ` (tags: ${insight.tags.join(", ")})`;
39994
+ }
39995
+ insightsText += `
39996
+ `;
39997
+ }
39998
+ }
39999
+ return `<discussion_summary>
40000
+ Create a final summary of this product discussion.
40001
+
40002
+ <topic>
40003
+ ${topic}
40004
+ </topic>
40005
+
40006
+ <conversation>
40007
+ ${history.trimEnd()}
40008
+ </conversation>
40009
+
40010
+ ${insightsText ? `<insights>
40011
+ ${insightsText.trimEnd()}
40012
+ </insights>
40013
+ ` : ""}
40014
+ <rules>
40015
+ - Write a clear, structured summary of the entire discussion.
40016
+ - Organize by: Key Decisions, Requirements, Ideas to Explore, Concerns & Risks, and Learnings.
40017
+ - Only include sections that have relevant content — skip empty categories.
40018
+ - For each item, provide a brief but actionable description.
40019
+ - End with a "Next Steps" section listing concrete action items that emerged.
40020
+ - Be concise — this summary should be scannable and useful as a reference.
40021
+ - Do NOT include any <insight> XML blocks in the summary.
40022
+ </rules>
40023
+ </discussion_summary>`;
40024
+ }
40025
+
40026
+ // ../sdk/src/discussion/discussion-facilitator.ts
40027
+ import { existsSync as existsSync7, readFileSync as readFileSync7 } from "node:fs";
40028
+
40029
+ class DiscussionFacilitator {
40030
+ projectPath;
40031
+ aiRunner;
40032
+ discussionManager;
40033
+ log;
40034
+ provider;
40035
+ model;
40036
+ constructor(config2) {
40037
+ this.projectPath = config2.projectPath;
40038
+ this.aiRunner = config2.aiRunner;
40039
+ this.discussionManager = config2.discussionManager;
40040
+ this.log = config2.log ?? ((_msg) => {
40041
+ return;
40042
+ });
40043
+ this.provider = config2.provider;
40044
+ this.model = config2.model;
40045
+ }
40046
+ async startDiscussion(topic) {
40047
+ this.log("Starting new discussion...", "info");
40048
+ const discussion = this.discussionManager.create(topic, this.model, this.provider);
40049
+ const { projectContext, learnings, knowledgeBase } = this.buildContext();
40050
+ const prompt = buildFacilitatorPrompt({
40051
+ topic,
40052
+ projectContext,
40053
+ learnings,
40054
+ knowledgeBase,
40055
+ previousMessages: [],
40056
+ insights: [],
40057
+ isFirstMessage: true
40058
+ });
40059
+ const response = await this.aiRunner.run(prompt);
40060
+ const { cleanResponse } = this.parseInsights(response);
40061
+ this.discussionManager.addMessage(discussion.id, "assistant", cleanResponse);
40062
+ this.log("Discussion started", "success");
40063
+ const saved = this.discussionManager.load(discussion.id);
40064
+ if (!saved) {
40065
+ throw new Error(`Failed to load discussion after creation: ${discussion.id}`);
40066
+ }
40067
+ return {
40068
+ discussion: saved,
40069
+ message: cleanResponse
40070
+ };
40071
+ }
40072
+ async continueDiscussion(discussionId, userMessage) {
40073
+ const discussion = this.discussionManager.load(discussionId);
40074
+ if (!discussion) {
40075
+ throw new Error(`Discussion not found: ${discussionId}`);
40076
+ }
40077
+ const updated = this.discussionManager.addMessage(discussionId, "user", userMessage);
40078
+ const { projectContext, learnings, knowledgeBase } = this.buildContext();
40079
+ const prompt = buildFacilitatorPrompt({
40080
+ topic: updated.topic,
40081
+ projectContext,
40082
+ learnings,
40083
+ knowledgeBase,
40084
+ previousMessages: updated.messages,
40085
+ insights: updated.insights,
40086
+ isFirstMessage: false
40087
+ });
40088
+ const response = await this.aiRunner.run(prompt);
40089
+ const { cleanResponse, insights } = this.parseInsights(response);
40090
+ for (const insight of insights) {
40091
+ this.discussionManager.addInsight(discussionId, insight);
40092
+ }
40093
+ this.discussionManager.addMessage(discussionId, "assistant", cleanResponse);
40094
+ return { response: cleanResponse, insights };
40095
+ }
40096
+ async* continueDiscussionStream(discussionId, userMessage) {
40097
+ const discussion = this.discussionManager.load(discussionId);
40098
+ if (!discussion) {
40099
+ throw new Error(`Discussion not found: ${discussionId}`);
40100
+ }
40101
+ const updated = this.discussionManager.addMessage(discussionId, "user", userMessage);
40102
+ const { projectContext, learnings, knowledgeBase } = this.buildContext();
40103
+ const prompt = buildFacilitatorPrompt({
40104
+ topic: updated.topic,
40105
+ projectContext,
40106
+ learnings,
40107
+ knowledgeBase,
40108
+ previousMessages: updated.messages,
40109
+ insights: updated.insights,
40110
+ isFirstMessage: false
40111
+ });
40112
+ let fullResponse = "";
40113
+ const stream4 = this.aiRunner.runStream(prompt);
40114
+ for await (const chunk of stream4) {
40115
+ yield chunk;
40116
+ if (chunk.type === "text_delta") {
40117
+ fullResponse += chunk.content;
40118
+ } else if (chunk.type === "result") {
40119
+ fullResponse = chunk.content;
40120
+ }
40121
+ }
40122
+ const { cleanResponse, insights } = this.parseInsights(fullResponse);
40123
+ for (const insight of insights) {
40124
+ this.discussionManager.addInsight(discussionId, insight);
40125
+ }
40126
+ this.discussionManager.addMessage(discussionId, "assistant", cleanResponse);
40127
+ return { response: cleanResponse, insights };
40128
+ }
40129
+ async summarizeDiscussion(discussionId) {
40130
+ const discussion = this.discussionManager.load(discussionId);
40131
+ if (!discussion) {
40132
+ throw new Error(`Discussion not found: ${discussionId}`);
40133
+ }
40134
+ this.log("Generating discussion summary...", "info");
40135
+ const prompt = buildSummaryPrompt(discussion.topic, discussion.messages, discussion.insights);
40136
+ const summary = await this.aiRunner.run(prompt);
40137
+ this.discussionManager.addMessage(discussionId, "assistant", summary);
40138
+ this.discussionManager.complete(discussionId);
40139
+ this.log("Discussion summarized and completed", "success");
40140
+ return summary;
40141
+ }
40142
+ parseInsights(response) {
40143
+ const insights = [];
40144
+ const insightRegex = /<insight>\s*([\s\S]*?)\s*<\/insight>/g;
40145
+ let match = insightRegex.exec(response);
40146
+ while (match !== null) {
40147
+ try {
40148
+ const parsed = JSON.parse(match[1]);
40149
+ const id = `ins-${Date.now()}-${Math.random().toString(36).substring(2, 7)}`;
40150
+ insights.push({
40151
+ id,
40152
+ type: parsed.type,
40153
+ title: parsed.title,
40154
+ content: parsed.content,
40155
+ tags: parsed.tags ?? [],
40156
+ createdAt: new Date().toISOString()
40157
+ });
40158
+ } catch {}
40159
+ match = insightRegex.exec(response);
40160
+ }
40161
+ const cleanResponse = response.replace(/<insight>\s*[\s\S]*?\s*<\/insight>/g, "").replace(/\n{3,}/g, `
40162
+
40163
+ `).trim();
40164
+ return { cleanResponse, insights };
40165
+ }
40166
+ buildContext() {
40167
+ return {
40168
+ projectContext: this.getProjectContext(),
40169
+ learnings: this.getLearningsContent(),
40170
+ knowledgeBase: this.getKnowledgeBaseSection()
40171
+ };
40172
+ }
40173
+ getProjectContext() {
40174
+ const contextPath = getLocusPath(this.projectPath, "contextFile");
40175
+ if (existsSync7(contextPath)) {
40176
+ try {
40177
+ const context2 = readFileSync7(contextPath, "utf-8");
40178
+ if (context2.trim().length > 20) {
40179
+ return context2;
40180
+ }
40181
+ } catch {
40182
+ return null;
40183
+ }
40184
+ }
40185
+ return null;
40186
+ }
40187
+ getLearningsContent() {
40188
+ const learningsPath = getLocusPath(this.projectPath, "learningsFile");
40189
+ if (!existsSync7(learningsPath)) {
40190
+ return null;
40191
+ }
40192
+ try {
40193
+ const content = readFileSync7(learningsPath, "utf-8");
40194
+ const lines = content.split(`
40195
+ `).filter((l) => l.startsWith("- "));
40196
+ if (lines.length === 0) {
40197
+ return null;
40198
+ }
40199
+ return lines.join(`
40200
+ `);
40201
+ } catch {
40202
+ return null;
40203
+ }
40204
+ }
40205
+ getKnowledgeBaseSection() {
40206
+ return `You have access to the following documentation directories for context:
40207
+ - Artifacts: \`.locus/artifacts\` (local-only, not synced to cloud)
40208
+ - Documents: \`.locus/documents\` (synced from cloud)
40209
+ If you need more information about the project strategies, plans, or architecture, read files in these directories.`;
40210
+ }
40211
+ }
40212
+ var init_discussion_facilitator = __esm(() => {
40213
+ init_config();
40214
+ });
40215
+
40216
+ // ../sdk/src/discussion/index.ts
40217
+ var init_discussion = __esm(() => {
40218
+ init_discussion_facilitator();
40219
+ init_discussion_manager();
40220
+ init_discussion_types();
40221
+ });
40222
+
39538
40223
  // ../sdk/src/exec/context-tracker.ts
39539
40224
  function generateArtifactId() {
39540
40225
  const timestamp = Date.now().toString(36);
@@ -39942,14 +40627,14 @@ var init_event_emitter = __esm(() => {
39942
40627
 
39943
40628
  // ../sdk/src/exec/history-manager.ts
39944
40629
  import {
39945
- existsSync as existsSync6,
39946
- mkdirSync as mkdirSync3,
39947
- readdirSync as readdirSync2,
39948
- readFileSync as readFileSync6,
40630
+ existsSync as existsSync8,
40631
+ mkdirSync as mkdirSync4,
40632
+ readdirSync as readdirSync3,
40633
+ readFileSync as readFileSync8,
39949
40634
  rmSync,
39950
- writeFileSync as writeFileSync3
40635
+ writeFileSync as writeFileSync4
39951
40636
  } from "node:fs";
39952
- import { join as join7 } from "node:path";
40637
+ import { join as join8 } from "node:path";
39953
40638
  function generateSessionId2() {
39954
40639
  const timestamp = Date.now().toString(36);
39955
40640
  const random = Math.random().toString(36).substring(2, 9);
@@ -39960,30 +40645,30 @@ class HistoryManager {
39960
40645
  historyDir;
39961
40646
  maxSessions;
39962
40647
  constructor(projectPath, options) {
39963
- this.historyDir = options?.historyDir ?? join7(projectPath, LOCUS_CONFIG.dir, LOCUS_CONFIG.sessionsDir);
40648
+ this.historyDir = options?.historyDir ?? join8(projectPath, LOCUS_CONFIG.dir, LOCUS_CONFIG.sessionsDir);
39964
40649
  this.maxSessions = options?.maxSessions ?? DEFAULT_MAX_SESSIONS;
39965
40650
  this.ensureHistoryDir();
39966
40651
  }
39967
40652
  ensureHistoryDir() {
39968
- if (!existsSync6(this.historyDir)) {
39969
- mkdirSync3(this.historyDir, { recursive: true });
40653
+ if (!existsSync8(this.historyDir)) {
40654
+ mkdirSync4(this.historyDir, { recursive: true });
39970
40655
  }
39971
40656
  }
39972
40657
  getSessionPath(sessionId) {
39973
- return join7(this.historyDir, `${sessionId}.json`);
40658
+ return join8(this.historyDir, `${sessionId}.json`);
39974
40659
  }
39975
40660
  saveSession(session2) {
39976
40661
  const filePath = this.getSessionPath(session2.id);
39977
40662
  session2.updatedAt = Date.now();
39978
- writeFileSync3(filePath, JSON.stringify(session2, null, 2), "utf-8");
40663
+ writeFileSync4(filePath, JSON.stringify(session2, null, 2), "utf-8");
39979
40664
  }
39980
40665
  loadSession(sessionId) {
39981
40666
  const filePath = this.getSessionPath(sessionId);
39982
- if (!existsSync6(filePath)) {
40667
+ if (!existsSync8(filePath)) {
39983
40668
  return null;
39984
40669
  }
39985
40670
  try {
39986
- const content = readFileSync6(filePath, "utf-8");
40671
+ const content = readFileSync8(filePath, "utf-8");
39987
40672
  return JSON.parse(content);
39988
40673
  } catch {
39989
40674
  return null;
@@ -39991,7 +40676,7 @@ class HistoryManager {
39991
40676
  }
39992
40677
  deleteSession(sessionId) {
39993
40678
  const filePath = this.getSessionPath(sessionId);
39994
- if (!existsSync6(filePath)) {
40679
+ if (!existsSync8(filePath)) {
39995
40680
  return false;
39996
40681
  }
39997
40682
  try {
@@ -40002,7 +40687,7 @@ class HistoryManager {
40002
40687
  }
40003
40688
  }
40004
40689
  listSessions(options) {
40005
- const files = readdirSync2(this.historyDir);
40690
+ const files = readdirSync3(this.historyDir);
40006
40691
  let sessions = [];
40007
40692
  for (const file2 of files) {
40008
40693
  if (file2.endsWith(".json")) {
@@ -40075,11 +40760,11 @@ class HistoryManager {
40075
40760
  return deleted;
40076
40761
  }
40077
40762
  getSessionCount() {
40078
- const files = readdirSync2(this.historyDir);
40763
+ const files = readdirSync3(this.historyDir);
40079
40764
  return files.filter((f) => f.endsWith(".json")).length;
40080
40765
  }
40081
40766
  sessionExists(sessionId) {
40082
- return existsSync6(this.getSessionPath(sessionId));
40767
+ return existsSync8(this.getSessionPath(sessionId));
40083
40768
  }
40084
40769
  findSessionByPartialId(partialId) {
40085
40770
  const sessions = this.listSessions();
@@ -40093,12 +40778,12 @@ class HistoryManager {
40093
40778
  return this.historyDir;
40094
40779
  }
40095
40780
  clearAllSessions() {
40096
- const files = readdirSync2(this.historyDir);
40781
+ const files = readdirSync3(this.historyDir);
40097
40782
  let deleted = 0;
40098
40783
  for (const file2 of files) {
40099
40784
  if (file2.endsWith(".json")) {
40100
40785
  try {
40101
- rmSync(join7(this.historyDir, file2));
40786
+ rmSync(join8(this.historyDir, file2));
40102
40787
  deleted++;
40103
40788
  } catch {}
40104
40789
  }
@@ -40387,8 +41072,8 @@ var init_git = __esm(() => {
40387
41072
 
40388
41073
  // ../sdk/src/orchestrator/index.ts
40389
41074
  import { spawn as spawn3 } from "node:child_process";
40390
- import { existsSync as existsSync7 } from "node:fs";
40391
- import { dirname as dirname2, join as join8 } from "node:path";
41075
+ import { existsSync as existsSync9 } from "node:fs";
41076
+ import { dirname as dirname2, join as join9 } from "node:path";
40392
41077
  import { fileURLToPath as fileURLToPath2 } from "node:url";
40393
41078
  import { EventEmitter as EventEmitter4 } from "events";
40394
41079
  function killProcessTree(proc) {
@@ -40677,12 +41362,12 @@ ${agentId} finished (exit code: ${code})`);
40677
41362
  const currentModulePath = fileURLToPath2(import.meta.url);
40678
41363
  const currentModuleDir = dirname2(currentModulePath);
40679
41364
  const potentialPaths = [
40680
- join8(currentModuleDir, "..", "agent", "worker.js"),
40681
- join8(currentModuleDir, "agent", "worker.js"),
40682
- join8(currentModuleDir, "worker.js"),
40683
- join8(currentModuleDir, "..", "agent", "worker.ts")
41365
+ join9(currentModuleDir, "..", "agent", "worker.js"),
41366
+ join9(currentModuleDir, "agent", "worker.js"),
41367
+ join9(currentModuleDir, "worker.js"),
41368
+ join9(currentModuleDir, "..", "agent", "worker.ts")
40684
41369
  ];
40685
- return potentialPaths.find((p) => existsSync7(p));
41370
+ return potentialPaths.find((p) => existsSync9(p));
40686
41371
  }
40687
41372
  };
40688
41373
  });
@@ -40794,14 +41479,14 @@ var init_sprint_plan = __esm(() => {
40794
41479
 
40795
41480
  // ../sdk/src/planning/plan-manager.ts
40796
41481
  import {
40797
- existsSync as existsSync8,
40798
- mkdirSync as mkdirSync4,
40799
- readdirSync as readdirSync3,
40800
- readFileSync as readFileSync7,
40801
- unlinkSync as unlinkSync2,
40802
- writeFileSync as writeFileSync4
41482
+ existsSync as existsSync10,
41483
+ mkdirSync as mkdirSync5,
41484
+ readdirSync as readdirSync4,
41485
+ readFileSync as readFileSync9,
41486
+ unlinkSync as unlinkSync3,
41487
+ writeFileSync as writeFileSync5
40803
41488
  } from "node:fs";
40804
- import { join as join9 } from "node:path";
41489
+ import { join as join10 } from "node:path";
40805
41490
 
40806
41491
  class PlanManager {
40807
41492
  plansDir;
@@ -40811,19 +41496,19 @@ class PlanManager {
40811
41496
  save(plan) {
40812
41497
  this.ensurePlansDir();
40813
41498
  const slug = this.slugify(plan.name);
40814
- const jsonPath = join9(this.plansDir, `${slug}.json`);
40815
- const mdPath = join9(this.plansDir, `sprint-${slug}.md`);
40816
- writeFileSync4(jsonPath, JSON.stringify(plan, null, 2), "utf-8");
40817
- writeFileSync4(mdPath, sprintPlanToMarkdown(plan), "utf-8");
41499
+ const jsonPath = join10(this.plansDir, `${slug}.json`);
41500
+ const mdPath = join10(this.plansDir, `sprint-${slug}.md`);
41501
+ writeFileSync5(jsonPath, JSON.stringify(plan, null, 2), "utf-8");
41502
+ writeFileSync5(mdPath, sprintPlanToMarkdown(plan), "utf-8");
40818
41503
  return plan.id;
40819
41504
  }
40820
41505
  load(idOrSlug) {
40821
41506
  this.ensurePlansDir();
40822
- const files = readdirSync3(this.plansDir).filter((f) => f.endsWith(".json"));
41507
+ const files = readdirSync4(this.plansDir).filter((f) => f.endsWith(".json"));
40823
41508
  for (const file2 of files) {
40824
- const filePath = join9(this.plansDir, file2);
41509
+ const filePath = join10(this.plansDir, file2);
40825
41510
  try {
40826
- const plan = JSON.parse(readFileSync7(filePath, "utf-8"));
41511
+ const plan = JSON.parse(readFileSync9(filePath, "utf-8"));
40827
41512
  if (plan.id === idOrSlug || this.slugify(plan.name) === idOrSlug) {
40828
41513
  return plan;
40829
41514
  }
@@ -40833,11 +41518,11 @@ class PlanManager {
40833
41518
  }
40834
41519
  list(status) {
40835
41520
  this.ensurePlansDir();
40836
- const files = readdirSync3(this.plansDir).filter((f) => f.endsWith(".json"));
41521
+ const files = readdirSync4(this.plansDir).filter((f) => f.endsWith(".json"));
40837
41522
  const plans = [];
40838
41523
  for (const file2 of files) {
40839
41524
  try {
40840
- const plan = JSON.parse(readFileSync7(join9(this.plansDir, file2), "utf-8"));
41525
+ const plan = JSON.parse(readFileSync9(join10(this.plansDir, file2), "utf-8"));
40841
41526
  if (!status || plan.status === status) {
40842
41527
  plans.push(plan);
40843
41528
  }
@@ -40894,18 +41579,18 @@ class PlanManager {
40894
41579
  }
40895
41580
  delete(idOrSlug) {
40896
41581
  this.ensurePlansDir();
40897
- const files = readdirSync3(this.plansDir);
41582
+ const files = readdirSync4(this.plansDir);
40898
41583
  for (const file2 of files) {
40899
- const filePath = join9(this.plansDir, file2);
41584
+ const filePath = join10(this.plansDir, file2);
40900
41585
  if (!file2.endsWith(".json"))
40901
41586
  continue;
40902
41587
  try {
40903
- const plan = JSON.parse(readFileSync7(filePath, "utf-8"));
41588
+ const plan = JSON.parse(readFileSync9(filePath, "utf-8"));
40904
41589
  if (plan.id === idOrSlug || this.slugify(plan.name) === idOrSlug) {
40905
- unlinkSync2(filePath);
40906
- const mdPath = join9(this.plansDir, `sprint-${this.slugify(plan.name)}.md`);
40907
- if (existsSync8(mdPath)) {
40908
- unlinkSync2(mdPath);
41590
+ unlinkSync3(filePath);
41591
+ const mdPath = join10(this.plansDir, `sprint-${this.slugify(plan.name)}.md`);
41592
+ if (existsSync10(mdPath)) {
41593
+ unlinkSync3(mdPath);
40909
41594
  }
40910
41595
  return;
40911
41596
  }
@@ -40919,8 +41604,8 @@ class PlanManager {
40919
41604
  return sprintPlanToMarkdown(plan);
40920
41605
  }
40921
41606
  ensurePlansDir() {
40922
- if (!existsSync8(this.plansDir)) {
40923
- mkdirSync4(this.plansDir, { recursive: true });
41607
+ if (!existsSync10(this.plansDir)) {
41608
+ mkdirSync5(this.plansDir, { recursive: true });
40924
41609
  }
40925
41610
  }
40926
41611
  slugify(name) {
@@ -41002,8 +41687,8 @@ IMPORTANT:
41002
41687
  }
41003
41688
 
41004
41689
  // ../sdk/src/planning/planning-meeting.ts
41005
- import { existsSync as existsSync9, mkdirSync as mkdirSync5, readFileSync as readFileSync8 } from "node:fs";
41006
- import { join as join10 } from "node:path";
41690
+ import { existsSync as existsSync11, mkdirSync as mkdirSync6, readFileSync as readFileSync10 } from "node:fs";
41691
+ import { join as join11 } from "node:path";
41007
41692
 
41008
41693
  class PlanningMeeting {
41009
41694
  projectPath;
@@ -41019,8 +41704,8 @@ class PlanningMeeting {
41019
41704
  async run(directive, feedback) {
41020
41705
  this.log("Planning sprint...", "info");
41021
41706
  const plansDir = getLocusPath(this.projectPath, "plansDir");
41022
- if (!existsSync9(plansDir)) {
41023
- mkdirSync5(plansDir, { recursive: true });
41707
+ if (!existsSync11(plansDir)) {
41708
+ mkdirSync6(plansDir, { recursive: true });
41024
41709
  }
41025
41710
  const ts = Date.now();
41026
41711
  const planId = `plan-${ts}`;
@@ -41034,11 +41719,11 @@ class PlanningMeeting {
41034
41719
  });
41035
41720
  const response = await this.aiRunner.run(prompt);
41036
41721
  this.log("Planning meeting complete.", "success");
41037
- const expectedPath = join10(plansDir, `${fileName}.json`);
41722
+ const expectedPath = join11(plansDir, `${fileName}.json`);
41038
41723
  let plan = null;
41039
- if (existsSync9(expectedPath)) {
41724
+ if (existsSync11(expectedPath)) {
41040
41725
  try {
41041
- plan = JSON.parse(readFileSync8(expectedPath, "utf-8"));
41726
+ plan = JSON.parse(readFileSync10(expectedPath, "utf-8"));
41042
41727
  } catch {}
41043
41728
  }
41044
41729
  if (!plan) {
@@ -41073,112 +41758,13 @@ var init_index_node = __esm(() => {
41073
41758
  init_agent2();
41074
41759
  init_ai();
41075
41760
  init_core3();
41761
+ init_discussion();
41076
41762
  init_exec();
41077
41763
  init_git();
41078
41764
  init_src2();
41079
41765
  init_planning();
41080
41766
  });
41081
41767
 
41082
- // src/display/execution-stats.ts
41083
- class ExecutionStatsTracker {
41084
- startTime;
41085
- endTime = null;
41086
- toolTimings = new Map;
41087
- toolOrder = [];
41088
- tokensUsed = null;
41089
- error = null;
41090
- constructor() {
41091
- this.startTime = Date.now();
41092
- }
41093
- toolStarted(toolName, toolId) {
41094
- const key = toolId ?? `${toolName}-${Date.now()}`;
41095
- this.toolTimings.set(key, {
41096
- name: toolName,
41097
- id: toolId,
41098
- startTime: Date.now()
41099
- });
41100
- this.toolOrder.push(key);
41101
- }
41102
- toolCompleted(toolName, toolId) {
41103
- const key = this.findToolKey(toolName, toolId);
41104
- if (key) {
41105
- const timing = this.toolTimings.get(key);
41106
- if (timing) {
41107
- timing.endTime = Date.now();
41108
- timing.duration = timing.endTime - timing.startTime;
41109
- timing.success = true;
41110
- }
41111
- }
41112
- }
41113
- toolFailed(toolName, error48, toolId) {
41114
- const key = this.findToolKey(toolName, toolId);
41115
- if (key) {
41116
- const timing = this.toolTimings.get(key);
41117
- if (timing) {
41118
- timing.endTime = Date.now();
41119
- timing.duration = timing.endTime - timing.startTime;
41120
- timing.success = false;
41121
- timing.error = error48;
41122
- }
41123
- }
41124
- }
41125
- setTokensUsed(tokens) {
41126
- this.tokensUsed = tokens;
41127
- }
41128
- setError(error48) {
41129
- this.error = error48;
41130
- }
41131
- finalize() {
41132
- this.endTime = Date.now();
41133
- const toolsUsed = [];
41134
- const seenTools = new Set;
41135
- for (const key of this.toolOrder) {
41136
- const timing = this.toolTimings.get(key);
41137
- if (timing && !seenTools.has(timing.name)) {
41138
- seenTools.add(timing.name);
41139
- toolsUsed.push(timing.name);
41140
- }
41141
- }
41142
- const toolTimings = this.toolOrder.map((key) => this.toolTimings.get(key)).filter((t) => t !== undefined);
41143
- const stats = {
41144
- duration: this.endTime - this.startTime,
41145
- toolsUsed,
41146
- toolTimings,
41147
- success: this.error === null
41148
- };
41149
- if (this.tokensUsed !== null) {
41150
- stats.tokensUsed = this.tokensUsed;
41151
- }
41152
- if (this.error !== null) {
41153
- stats.error = this.error;
41154
- }
41155
- return stats;
41156
- }
41157
- getCurrentDuration() {
41158
- return Date.now() - this.startTime;
41159
- }
41160
- findToolKey(toolName, toolId) {
41161
- if (toolId && this.toolTimings.has(toolId)) {
41162
- return toolId;
41163
- }
41164
- for (let i = this.toolOrder.length - 1;i >= 0; i--) {
41165
- const key = this.toolOrder[i];
41166
- const timing = this.toolTimings.get(key);
41167
- if (timing && timing.name === toolName && timing.endTime === undefined) {
41168
- return key;
41169
- }
41170
- }
41171
- for (let i = this.toolOrder.length - 1;i >= 0; i--) {
41172
- const key = this.toolOrder[i];
41173
- const timing = this.toolTimings.get(key);
41174
- if (timing && timing.name === toolName) {
41175
- return key;
41176
- }
41177
- }
41178
- return null;
41179
- }
41180
- }
41181
-
41182
41768
  // src/display/tool-display.ts
41183
41769
  import * as path2 from "node:path";
41184
41770
 
@@ -41769,6 +42355,106 @@ var init_progress_renderer = __esm(() => {
41769
42355
  SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
41770
42356
  });
41771
42357
 
42358
+ // src/display/execution-stats.ts
42359
+ class ExecutionStatsTracker {
42360
+ startTime;
42361
+ endTime = null;
42362
+ toolTimings = new Map;
42363
+ toolOrder = [];
42364
+ tokensUsed = null;
42365
+ error = null;
42366
+ constructor() {
42367
+ this.startTime = Date.now();
42368
+ }
42369
+ toolStarted(toolName, toolId) {
42370
+ const key = toolId ?? `${toolName}-${Date.now()}`;
42371
+ this.toolTimings.set(key, {
42372
+ name: toolName,
42373
+ id: toolId,
42374
+ startTime: Date.now()
42375
+ });
42376
+ this.toolOrder.push(key);
42377
+ }
42378
+ toolCompleted(toolName, toolId) {
42379
+ const key = this.findToolKey(toolName, toolId);
42380
+ if (key) {
42381
+ const timing = this.toolTimings.get(key);
42382
+ if (timing) {
42383
+ timing.endTime = Date.now();
42384
+ timing.duration = timing.endTime - timing.startTime;
42385
+ timing.success = true;
42386
+ }
42387
+ }
42388
+ }
42389
+ toolFailed(toolName, error48, toolId) {
42390
+ const key = this.findToolKey(toolName, toolId);
42391
+ if (key) {
42392
+ const timing = this.toolTimings.get(key);
42393
+ if (timing) {
42394
+ timing.endTime = Date.now();
42395
+ timing.duration = timing.endTime - timing.startTime;
42396
+ timing.success = false;
42397
+ timing.error = error48;
42398
+ }
42399
+ }
42400
+ }
42401
+ setTokensUsed(tokens) {
42402
+ this.tokensUsed = tokens;
42403
+ }
42404
+ setError(error48) {
42405
+ this.error = error48;
42406
+ }
42407
+ finalize() {
42408
+ this.endTime = Date.now();
42409
+ const toolsUsed = [];
42410
+ const seenTools = new Set;
42411
+ for (const key of this.toolOrder) {
42412
+ const timing = this.toolTimings.get(key);
42413
+ if (timing && !seenTools.has(timing.name)) {
42414
+ seenTools.add(timing.name);
42415
+ toolsUsed.push(timing.name);
42416
+ }
42417
+ }
42418
+ const toolTimings = this.toolOrder.map((key) => this.toolTimings.get(key)).filter((t) => t !== undefined);
42419
+ const stats = {
42420
+ duration: this.endTime - this.startTime,
42421
+ toolsUsed,
42422
+ toolTimings,
42423
+ success: this.error === null
42424
+ };
42425
+ if (this.tokensUsed !== null) {
42426
+ stats.tokensUsed = this.tokensUsed;
42427
+ }
42428
+ if (this.error !== null) {
42429
+ stats.error = this.error;
42430
+ }
42431
+ return stats;
42432
+ }
42433
+ getCurrentDuration() {
42434
+ return Date.now() - this.startTime;
42435
+ }
42436
+ findToolKey(toolName, toolId) {
42437
+ if (toolId && this.toolTimings.has(toolId)) {
42438
+ return toolId;
42439
+ }
42440
+ for (let i = this.toolOrder.length - 1;i >= 0; i--) {
42441
+ const key = this.toolOrder[i];
42442
+ const timing = this.toolTimings.get(key);
42443
+ if (timing && timing.name === toolName && timing.endTime === undefined) {
42444
+ return key;
42445
+ }
42446
+ }
42447
+ for (let i = this.toolOrder.length - 1;i >= 0; i--) {
42448
+ const key = this.toolOrder[i];
42449
+ const timing = this.toolTimings.get(key);
42450
+ if (timing && timing.name === toolName) {
42451
+ return key;
42452
+ }
42453
+ }
42454
+ return null;
42455
+ }
42456
+ }
42457
+
41772
42458
  // src/repl/commands.ts
41773
42459
  function parseCommand(input) {
41774
42460
  const lowerInput = input.toLowerCase();
@@ -41878,7 +42564,7 @@ var exports_interactive_session = {};
41878
42564
  __export(exports_interactive_session, {
41879
42565
  InteractiveSession: () => InteractiveSession
41880
42566
  });
41881
- import * as readline from "node:readline";
42567
+ import * as readline2 from "node:readline";
41882
42568
 
41883
42569
  class InteractiveSession {
41884
42570
  readline = null;
@@ -41924,7 +42610,7 @@ class InteractiveSession {
41924
42610
  }
41925
42611
  async start() {
41926
42612
  this.printWelcome();
41927
- this.readline = readline.createInterface({
42613
+ this.readline = readline2.createInterface({
41928
42614
  input: process.stdin,
41929
42615
  output: process.stdout,
41930
42616
  terminal: true
@@ -42121,10 +42807,10 @@ import { createInterface } from "node:readline";
42121
42807
 
42122
42808
  // src/settings-manager.ts
42123
42809
  init_index_node();
42124
- import { existsSync as existsSync10, readFileSync as readFileSync9, unlinkSync as unlinkSync3, writeFileSync as writeFileSync5 } from "node:fs";
42125
- import { join as join11 } from "node:path";
42810
+ import { existsSync as existsSync12, readFileSync as readFileSync11, unlinkSync as unlinkSync4, writeFileSync as writeFileSync6 } from "node:fs";
42811
+ import { join as join12 } from "node:path";
42126
42812
  function getSettingsPath(projectPath) {
42127
- return join11(projectPath, LOCUS_CONFIG.dir, LOCUS_CONFIG.settingsFile);
42813
+ return join12(projectPath, LOCUS_CONFIG.dir, LOCUS_CONFIG.settingsFile);
42128
42814
  }
42129
42815
 
42130
42816
  class SettingsManager {
@@ -42134,16 +42820,16 @@ class SettingsManager {
42134
42820
  }
42135
42821
  load() {
42136
42822
  const settingsPath = getSettingsPath(this.projectPath);
42137
- if (!existsSync10(settingsPath)) {
42823
+ if (!existsSync12(settingsPath)) {
42138
42824
  return {};
42139
42825
  }
42140
- return JSON.parse(readFileSync9(settingsPath, "utf-8"));
42826
+ return JSON.parse(readFileSync11(settingsPath, "utf-8"));
42141
42827
  }
42142
42828
  save(settings) {
42143
42829
  const { $schema: _2, ...rest } = settings;
42144
42830
  const ordered = { $schema: LOCUS_SCHEMAS.settings, ...rest };
42145
42831
  const settingsPath = getSettingsPath(this.projectPath);
42146
- writeFileSync5(settingsPath, JSON.stringify(ordered, null, 2), "utf-8");
42832
+ writeFileSync6(settingsPath, JSON.stringify(ordered, null, 2), "utf-8");
42147
42833
  }
42148
42834
  get(key) {
42149
42835
  return this.load()[key];
@@ -42155,12 +42841,12 @@ class SettingsManager {
42155
42841
  }
42156
42842
  remove() {
42157
42843
  const settingsPath = getSettingsPath(this.projectPath);
42158
- if (existsSync10(settingsPath)) {
42159
- unlinkSync3(settingsPath);
42844
+ if (existsSync12(settingsPath)) {
42845
+ unlinkSync4(settingsPath);
42160
42846
  }
42161
42847
  }
42162
42848
  exists() {
42163
- return existsSync10(getSettingsPath(this.projectPath));
42849
+ return existsSync12(getSettingsPath(this.projectPath));
42164
42850
  }
42165
42851
  }
42166
42852
 
@@ -42419,15 +43105,444 @@ async function configCommand(args) {
42419
43105
  showConfigHelp();
42420
43106
  }
42421
43107
  }
42422
- // src/commands/docs.ts
43108
+ // src/commands/discuss.ts
42423
43109
  init_index_node();
43110
+ init_progress_renderer();
43111
+ import * as readline from "node:readline";
42424
43112
  import { parseArgs } from "node:util";
42425
43113
 
43114
+ // src/utils/banner.ts
43115
+ init_index_node();
43116
+
43117
+ // src/utils/version.ts
43118
+ import { existsSync as existsSync13, readFileSync as readFileSync12 } from "node:fs";
43119
+ import { dirname as dirname3, join as join13 } from "node:path";
43120
+ import { fileURLToPath as fileURLToPath3 } from "node:url";
43121
+ function getVersion() {
43122
+ try {
43123
+ const __filename2 = fileURLToPath3(import.meta.url);
43124
+ const __dirname2 = dirname3(__filename2);
43125
+ const bundledPath = join13(__dirname2, "..", "package.json");
43126
+ const sourcePath = join13(__dirname2, "..", "..", "package.json");
43127
+ if (existsSync13(bundledPath)) {
43128
+ const pkg = JSON.parse(readFileSync12(bundledPath, "utf-8"));
43129
+ if (pkg.name === "@locusai/cli") {
43130
+ return pkg.version || "0.0.0";
43131
+ }
43132
+ }
43133
+ if (existsSync13(sourcePath)) {
43134
+ const pkg = JSON.parse(readFileSync12(sourcePath, "utf-8"));
43135
+ if (pkg.name === "@locusai/cli") {
43136
+ return pkg.version || "0.0.0";
43137
+ }
43138
+ }
43139
+ } catch {}
43140
+ return "0.0.0";
43141
+ }
43142
+ var VERSION2 = getVersion();
43143
+
43144
+ // src/utils/banner.ts
43145
+ function printBanner() {
43146
+ console.log(c.primary(`
43147
+ _ ____ ____ _ _ ____
43148
+ | | / __ \\ / ___| | | |/ ___|
43149
+ | | | | | | | | | | |\\___ \\
43150
+ | |___| |__| | |___| |_| |___) |
43151
+ |_____|\\____/ \\____|\\___/|____/ ${c.dim(`v${VERSION2}`)}
43152
+ `));
43153
+ }
43154
+ // src/utils/helpers.ts
43155
+ init_index_node();
43156
+ import { existsSync as existsSync14 } from "node:fs";
43157
+ import { join as join14 } from "node:path";
43158
+ function isProjectInitialized(projectPath) {
43159
+ const locusDir = join14(projectPath, LOCUS_CONFIG.dir);
43160
+ const configPath = join14(locusDir, LOCUS_CONFIG.configFile);
43161
+ return existsSync14(locusDir) && existsSync14(configPath);
43162
+ }
43163
+ function requireInitialization(projectPath, command) {
43164
+ if (!isProjectInitialized(projectPath)) {
43165
+ console.error(`
43166
+ ${c.error("✖ Error")} ${c.red(`Locus is not initialized in this directory.`)}
43167
+
43168
+ The '${c.bold(command)}' command requires a Locus project to be initialized.
43169
+
43170
+ To initialize Locus in this directory, run:
43171
+ ${c.primary("locus init")}
43172
+
43173
+ This will create a ${c.dim(".locus")} directory with the necessary configuration.
43174
+ `);
43175
+ process.exit(1);
43176
+ }
43177
+ }
43178
+ function resolveProvider3(input) {
43179
+ if (!input)
43180
+ return PROVIDER.CLAUDE;
43181
+ if (input === PROVIDER.CLAUDE || input === PROVIDER.CODEX)
43182
+ return input;
43183
+ console.error(c.error(`Error: invalid provider '${input}'. Use 'claude' or 'codex'.`));
43184
+ process.exit(1);
43185
+ }
43186
+ // src/commands/discuss.ts
43187
+ async function discussCommand(args) {
43188
+ const { values, positionals } = parseArgs({
43189
+ args,
43190
+ options: {
43191
+ list: { type: "boolean" },
43192
+ show: { type: "string" },
43193
+ archive: { type: "string" },
43194
+ delete: { type: "string" },
43195
+ model: { type: "string" },
43196
+ provider: { type: "string" },
43197
+ "reasoning-effort": { type: "string" },
43198
+ dir: { type: "string" }
43199
+ },
43200
+ strict: false,
43201
+ allowPositionals: true
43202
+ });
43203
+ const projectPath = values.dir || process.cwd();
43204
+ requireInitialization(projectPath, "discuss");
43205
+ const discussionManager = new DiscussionManager(projectPath);
43206
+ if (values.list) {
43207
+ return listDiscussions(discussionManager);
43208
+ }
43209
+ if (values.show) {
43210
+ return showDiscussion(discussionManager, values.show);
43211
+ }
43212
+ if (values.archive) {
43213
+ return archiveDiscussion(discussionManager, values.archive);
43214
+ }
43215
+ if (values.delete) {
43216
+ return deleteDiscussion(discussionManager, values.delete);
43217
+ }
43218
+ const topic = positionals.join(" ").trim();
43219
+ if (!topic) {
43220
+ showDiscussHelp();
43221
+ return;
43222
+ }
43223
+ const settings = new SettingsManager(projectPath).load();
43224
+ const provider = resolveProvider3(values.provider || settings.provider);
43225
+ const model = values.model || settings.model || DEFAULT_MODEL[provider];
43226
+ const reasoningEffort = values["reasoning-effort"];
43227
+ const aiRunner = createAiRunner(provider, {
43228
+ projectPath,
43229
+ model,
43230
+ reasoningEffort
43231
+ });
43232
+ const log = (message, level) => {
43233
+ const icon = level === "success" ? c.success("✔") : level === "error" ? c.error("✖") : level === "warn" ? c.warning("!") : c.info("●");
43234
+ console.log(` ${icon} ${message}`);
43235
+ };
43236
+ const facilitator = new DiscussionFacilitator({
43237
+ projectPath,
43238
+ aiRunner,
43239
+ discussionManager,
43240
+ log,
43241
+ provider,
43242
+ model
43243
+ });
43244
+ console.log(`
43245
+ ${c.header(" DISCUSSION ")} ${c.bold("Starting interactive discussion...")}
43246
+ `);
43247
+ console.log(` ${c.dim("Topic:")} ${c.bold(topic)}`);
43248
+ console.log(` ${c.dim("Model:")} ${c.dim(`${model} (${provider})`)}
43249
+ `);
43250
+ const renderer = new ProgressRenderer({ animated: true });
43251
+ let discussionId;
43252
+ try {
43253
+ renderer.showThinkingStarted();
43254
+ const result = await facilitator.startDiscussion(topic);
43255
+ renderer.showThinkingStopped();
43256
+ discussionId = result.discussion.id;
43257
+ process.stdout.write(`
43258
+ `);
43259
+ process.stdout.write(result.message);
43260
+ process.stdout.write(`
43261
+
43262
+ `);
43263
+ renderer.finalize();
43264
+ } catch (error48) {
43265
+ renderer.finalize();
43266
+ console.error(`
43267
+ ${c.error("✖")} ${c.red("Failed to start discussion:")} ${error48 instanceof Error ? error48.message : String(error48)}
43268
+ `);
43269
+ process.exit(1);
43270
+ }
43271
+ console.log(` ${c.dim("Type your response, or 'help' for commands. Use 'exit' or Ctrl+C to quit.")}
43272
+ `);
43273
+ const rl = readline.createInterface({
43274
+ input: process.stdin,
43275
+ output: process.stdout,
43276
+ terminal: true
43277
+ });
43278
+ rl.setPrompt(c.cyan("> "));
43279
+ rl.prompt();
43280
+ let isProcessing = false;
43281
+ const shutdown = () => {
43282
+ if (isProcessing) {
43283
+ aiRunner.abort();
43284
+ }
43285
+ console.log(`
43286
+ ${c.dim("Discussion saved.")} ${c.dim("ID:")} ${c.cyan(discussionId)}`);
43287
+ console.log(c.dim(`
43288
+ Goodbye!
43289
+ `));
43290
+ rl.close();
43291
+ process.exit(0);
43292
+ };
43293
+ process.on("SIGINT", () => {
43294
+ if (isProcessing) {
43295
+ aiRunner.abort();
43296
+ isProcessing = false;
43297
+ console.log(c.dim(`
43298
+ [Interrupted]`));
43299
+ rl.prompt();
43300
+ } else {
43301
+ shutdown();
43302
+ }
43303
+ });
43304
+ rl.on("close", () => {
43305
+ shutdown();
43306
+ });
43307
+ rl.on("line", async (input) => {
43308
+ const trimmed = input.trim();
43309
+ if (trimmed === "" || isProcessing) {
43310
+ rl.prompt();
43311
+ return;
43312
+ }
43313
+ const lowerInput = trimmed.toLowerCase();
43314
+ if (lowerInput === "help") {
43315
+ showReplHelp();
43316
+ rl.prompt();
43317
+ return;
43318
+ }
43319
+ if (lowerInput === "exit" || lowerInput === "quit") {
43320
+ shutdown();
43321
+ return;
43322
+ }
43323
+ if (lowerInput === "insights") {
43324
+ showCurrentInsights(discussionManager, discussionId);
43325
+ rl.prompt();
43326
+ return;
43327
+ }
43328
+ if (lowerInput === "summary") {
43329
+ isProcessing = true;
43330
+ const summaryRenderer = new ProgressRenderer({ animated: true });
43331
+ try {
43332
+ summaryRenderer.showThinkingStarted();
43333
+ const summary = await facilitator.summarizeDiscussion(discussionId);
43334
+ summaryRenderer.showThinkingStopped();
43335
+ process.stdout.write(`
43336
+ `);
43337
+ process.stdout.write(summary);
43338
+ process.stdout.write(`
43339
+ `);
43340
+ summaryRenderer.finalize();
43341
+ const discussion2 = discussionManager.load(discussionId);
43342
+ if (discussion2) {
43343
+ console.log(`
43344
+ ${c.success("✔")} ${c.success("Discussion completed!")}
43345
+ `);
43346
+ console.log(` ${c.dim("Messages:")} ${discussion2.messages.length} ${c.dim("Insights:")} ${discussion2.insights.length}
43347
+ `);
43348
+ }
43349
+ console.log(` ${c.dim("To review:")} ${c.cyan(`locus discuss --show ${discussionId}`)}`);
43350
+ console.log(` ${c.dim("To list all:")} ${c.cyan("locus discuss --list")}
43351
+ `);
43352
+ } catch (error48) {
43353
+ summaryRenderer.finalize();
43354
+ console.error(`
43355
+ ${c.error("✖")} ${c.red("Failed to summarize:")} ${error48 instanceof Error ? error48.message : String(error48)}
43356
+ `);
43357
+ }
43358
+ rl.close();
43359
+ process.exit(0);
43360
+ return;
43361
+ }
43362
+ isProcessing = true;
43363
+ const chunkRenderer = new ProgressRenderer({ animated: true });
43364
+ try {
43365
+ chunkRenderer.showThinkingStarted();
43366
+ const stream4 = facilitator.continueDiscussionStream(discussionId, trimmed);
43367
+ let result = {
43368
+ response: "",
43369
+ insights: []
43370
+ };
43371
+ let iterResult = await stream4.next();
43372
+ while (!iterResult.done) {
43373
+ chunkRenderer.renderChunk(iterResult.value);
43374
+ iterResult = await stream4.next();
43375
+ }
43376
+ result = iterResult.value;
43377
+ chunkRenderer.finalize();
43378
+ if (result.insights.length > 0) {
43379
+ console.log("");
43380
+ for (const insight of result.insights) {
43381
+ const tag = formatInsightTag(insight.type);
43382
+ console.log(` ${tag} ${c.bold(insight.title)}`);
43383
+ console.log(` ${c.dim(insight.content)}
43384
+ `);
43385
+ }
43386
+ }
43387
+ } catch (error48) {
43388
+ chunkRenderer.finalize();
43389
+ console.error(`
43390
+ ${c.error("✖")} ${c.red(error48 instanceof Error ? error48.message : String(error48))}
43391
+ `);
43392
+ }
43393
+ isProcessing = false;
43394
+ rl.prompt();
43395
+ });
43396
+ }
43397
+ function listDiscussions(discussionManager) {
43398
+ const discussions = discussionManager.list();
43399
+ if (discussions.length === 0) {
43400
+ console.log(`
43401
+ ${c.dim("No discussions found.")}
43402
+ `);
43403
+ console.log(` ${c.dim("Start one with:")} ${c.cyan('locus discuss "your topic"')}
43404
+ `);
43405
+ return;
43406
+ }
43407
+ console.log(`
43408
+ ${c.header(" DISCUSSIONS ")} ${c.dim(`(${discussions.length})`)}
43409
+ `);
43410
+ for (const disc of discussions) {
43411
+ const statusIcon = disc.status === "active" ? c.warning("◯") : disc.status === "completed" ? c.success("✔") : c.dim("⊘");
43412
+ console.log(` ${statusIcon} ${c.bold(disc.title)} ${c.dim(`[${disc.status}]`)} ${c.dim(`— ${disc.messages.length} messages, ${disc.insights.length} insights`)}`);
43413
+ console.log(` ${c.dim("ID:")} ${disc.id}`);
43414
+ console.log(` ${c.dim("Created:")} ${disc.createdAt}`);
43415
+ console.log("");
43416
+ }
43417
+ }
43418
+ function showDiscussion(discussionManager, id) {
43419
+ const md = discussionManager.getMarkdown(id);
43420
+ if (!md) {
43421
+ console.error(`
43422
+ ${c.error("✖")} ${c.red(`Discussion not found: ${id}`)}
43423
+ `);
43424
+ process.exit(1);
43425
+ }
43426
+ console.log(`
43427
+ ${md}
43428
+ `);
43429
+ }
43430
+ function archiveDiscussion(discussionManager, id) {
43431
+ try {
43432
+ discussionManager.archive(id);
43433
+ console.log(`
43434
+ ${c.success("✔")} ${c.dim("Discussion archived.")}
43435
+ `);
43436
+ } catch (error48) {
43437
+ console.error(`
43438
+ ${c.error("✖")} ${c.red(error48 instanceof Error ? error48.message : String(error48))}
43439
+ `);
43440
+ process.exit(1);
43441
+ }
43442
+ }
43443
+ function deleteDiscussion(discussionManager, id) {
43444
+ try {
43445
+ discussionManager.delete(id);
43446
+ console.log(`
43447
+ ${c.success("✔")} ${c.dim("Discussion deleted.")}
43448
+ `);
43449
+ } catch (error48) {
43450
+ console.error(`
43451
+ ${c.error("✖")} ${c.red(error48 instanceof Error ? error48.message : String(error48))}
43452
+ `);
43453
+ process.exit(1);
43454
+ }
43455
+ }
43456
+ function showCurrentInsights(discussionManager, discussionId) {
43457
+ const discussion2 = discussionManager.load(discussionId);
43458
+ if (!discussion2 || discussion2.insights.length === 0) {
43459
+ console.log(`
43460
+ ${c.dim("No insights extracted yet.")}
43461
+ `);
43462
+ return;
43463
+ }
43464
+ console.log(`
43465
+ ${c.header(" INSIGHTS ")} ${c.dim(`(${discussion2.insights.length})`)}
43466
+ `);
43467
+ for (const insight of discussion2.insights) {
43468
+ const tag = formatInsightTag(insight.type);
43469
+ console.log(` ${tag} ${c.bold(insight.title)}`);
43470
+ console.log(` ${c.dim(insight.content)}`);
43471
+ if (insight.tags.length > 0) {
43472
+ console.log(` ${c.dim(`Tags: ${insight.tags.join(", ")}`)}`);
43473
+ }
43474
+ console.log("");
43475
+ }
43476
+ }
43477
+ function formatInsightTag(type) {
43478
+ switch (type) {
43479
+ case "decision":
43480
+ return c.green("[DECISION]");
43481
+ case "requirement":
43482
+ return c.blue("[REQUIREMENT]");
43483
+ case "idea":
43484
+ return c.yellow("[IDEA]");
43485
+ case "concern":
43486
+ return c.red("[CONCERN]");
43487
+ case "learning":
43488
+ return c.cyan("[LEARNING]");
43489
+ }
43490
+ }
43491
+ function showReplHelp() {
43492
+ console.log(`
43493
+ ${c.header(" DISCUSSION COMMANDS ")}
43494
+
43495
+ ${c.cyan("summary")} Generate a final summary and end the discussion
43496
+ ${c.cyan("insights")} Show all insights extracted so far
43497
+ ${c.cyan("exit")} Save and exit without generating a summary
43498
+ ${c.cyan("help")} Show this help message
43499
+
43500
+ ${c.dim("Type anything else to continue the discussion.")}
43501
+ `);
43502
+ }
43503
+ function showDiscussHelp() {
43504
+ console.log(`
43505
+ ${c.header(" LOCUS DISCUSS ")} ${c.dim("— Interactive AI Discussion")}
43506
+
43507
+ ${c.bold("Usage:")}
43508
+ ${c.cyan('locus discuss "topic"')} Start a discussion on a topic
43509
+ ${c.cyan("locus discuss --list")} List all discussions
43510
+ ${c.cyan("locus discuss --show <id>")} Show discussion details
43511
+ ${c.cyan("locus discuss --archive <id>")} Archive a discussion
43512
+ ${c.cyan("locus discuss --delete <id>")} Delete a discussion
43513
+
43514
+ ${c.bold("Options:")}
43515
+ ${c.dim("--model <model>")} AI model (claude: opus, sonnet, haiku | codex: gpt-5.3-codex, gpt-5-codex-mini)
43516
+ ${c.dim("--provider <p>")} AI provider (claude, codex)
43517
+ ${c.dim("--reasoning-effort <level>")} Reasoning effort (low, medium, high)
43518
+ ${c.dim("--dir <path>")} Project directory
43519
+
43520
+ ${c.bold("REPL Commands:")}
43521
+ ${c.dim("summary")} Generate final summary and end the discussion
43522
+ ${c.dim("insights")} Show all insights extracted so far
43523
+ ${c.dim("exit")} Save and exit without generating a summary
43524
+ ${c.dim("help")} Show available commands
43525
+
43526
+ ${c.bold("Examples:")}
43527
+ ${c.dim("# Start a discussion about architecture")}
43528
+ ${c.cyan('locus discuss "how should we structure the auth system?"')}
43529
+
43530
+ ${c.dim("# Review a past discussion")}
43531
+ ${c.cyan("locus discuss --show disc-1234567890")}
43532
+
43533
+ ${c.dim("# List all discussions")}
43534
+ ${c.cyan("locus discuss --list")}
43535
+ `);
43536
+ }
43537
+ // src/commands/docs.ts
43538
+ init_index_node();
43539
+ import { parseArgs as parseArgs2 } from "node:util";
43540
+
42426
43541
  // src/config-manager.ts
42427
43542
  init_index_node();
42428
43543
  import { execSync as execSync2 } from "node:child_process";
42429
- import { existsSync as existsSync11, mkdirSync as mkdirSync6, readFileSync as readFileSync10, writeFileSync as writeFileSync6 } from "node:fs";
42430
- import { join as join12 } from "node:path";
43544
+ import { existsSync as existsSync15, mkdirSync as mkdirSync7, readFileSync as readFileSync13, writeFileSync as writeFileSync7 } from "node:fs";
43545
+ import { join as join15 } from "node:path";
42431
43546
  var LOCUS_GITIGNORE_MARKER = "# Locus AI";
42432
43547
  var LOCUS_MD_TEMPLATE = `## Planning First
42433
43548
 
@@ -42519,12 +43634,12 @@ It is read by AI agents before every task to avoid repeating mistakes and to fol
42519
43634
  <!-- Add learnings below this line. Format: - **[Category]**: Description -->
42520
43635
  `;
42521
43636
  function updateGitignore(projectPath) {
42522
- const gitignorePath = join12(projectPath, ".gitignore");
43637
+ const gitignorePath = join15(projectPath, ".gitignore");
42523
43638
  let content = "";
42524
43639
  const locusBlock = LOCUS_GITIGNORE_PATTERNS.join(`
42525
43640
  `);
42526
- if (existsSync11(gitignorePath)) {
42527
- content = readFileSync10(gitignorePath, "utf-8");
43641
+ if (existsSync15(gitignorePath)) {
43642
+ content = readFileSync13(gitignorePath, "utf-8");
42528
43643
  if (content.includes(LOCUS_GITIGNORE_MARKER)) {
42529
43644
  const lines = content.split(`
42530
43645
  `);
@@ -42541,7 +43656,7 @@ function updateGitignore(projectPath) {
42541
43656
  const after = lines.slice(endIdx + 1);
42542
43657
  content = [...before, locusBlock, ...after].join(`
42543
43658
  `);
42544
- writeFileSync6(gitignorePath, content);
43659
+ writeFileSync7(gitignorePath, content);
42545
43660
  return;
42546
43661
  }
42547
43662
  if (content.length > 0 && !content.endsWith(`
@@ -42556,7 +43671,7 @@ function updateGitignore(projectPath) {
42556
43671
  }
42557
43672
  content += `${locusBlock}
42558
43673
  `;
42559
- writeFileSync6(gitignorePath, content);
43674
+ writeFileSync7(gitignorePath, content);
42560
43675
  }
42561
43676
  function ensureGitIdentity(projectPath) {
42562
43677
  const hasName = (() => {
@@ -42603,48 +43718,49 @@ class ConfigManager {
42603
43718
  this.projectPath = projectPath;
42604
43719
  }
42605
43720
  async init(version2) {
42606
- const locusConfigDir = join12(this.projectPath, LOCUS_CONFIG.dir);
43721
+ const locusConfigDir = join15(this.projectPath, LOCUS_CONFIG.dir);
42607
43722
  const locusConfigPath = getLocusPath(this.projectPath, "configFile");
42608
- if (!existsSync11(locusConfigDir)) {
42609
- mkdirSync6(locusConfigDir, { recursive: true });
43723
+ if (!existsSync15(locusConfigDir)) {
43724
+ mkdirSync7(locusConfigDir, { recursive: true });
42610
43725
  }
42611
43726
  const locusSubdirs = [
42612
43727
  LOCUS_CONFIG.artifactsDir,
42613
43728
  LOCUS_CONFIG.documentsDir,
42614
43729
  LOCUS_CONFIG.sessionsDir,
42615
43730
  LOCUS_CONFIG.reviewsDir,
42616
- LOCUS_CONFIG.plansDir
43731
+ LOCUS_CONFIG.plansDir,
43732
+ LOCUS_CONFIG.discussionsDir
42617
43733
  ];
42618
43734
  for (const subdir of locusSubdirs) {
42619
- const subdirPath = join12(locusConfigDir, subdir);
42620
- if (!existsSync11(subdirPath)) {
42621
- mkdirSync6(subdirPath, { recursive: true });
43735
+ const subdirPath = join15(locusConfigDir, subdir);
43736
+ if (!existsSync15(subdirPath)) {
43737
+ mkdirSync7(subdirPath, { recursive: true });
42622
43738
  }
42623
43739
  }
42624
43740
  const locusMdPath = getLocusPath(this.projectPath, "contextFile");
42625
- if (!existsSync11(locusMdPath)) {
42626
- writeFileSync6(locusMdPath, LOCUS_MD_TEMPLATE);
43741
+ if (!existsSync15(locusMdPath)) {
43742
+ writeFileSync7(locusMdPath, LOCUS_MD_TEMPLATE);
42627
43743
  }
42628
43744
  const learningsMdPath = getLocusPath(this.projectPath, "learningsFile");
42629
- if (!existsSync11(learningsMdPath)) {
42630
- writeFileSync6(learningsMdPath, DEFAULT_LEARNINGS_MD);
43745
+ if (!existsSync15(learningsMdPath)) {
43746
+ writeFileSync7(learningsMdPath, DEFAULT_LEARNINGS_MD);
42631
43747
  }
42632
- if (!existsSync11(locusConfigPath)) {
43748
+ if (!existsSync15(locusConfigPath)) {
42633
43749
  const config2 = {
42634
43750
  $schema: LOCUS_SCHEMAS.config,
42635
43751
  version: version2,
42636
43752
  createdAt: new Date().toISOString(),
42637
43753
  projectPath: "."
42638
43754
  };
42639
- writeFileSync6(locusConfigPath, JSON.stringify(config2, null, 2));
43755
+ writeFileSync7(locusConfigPath, JSON.stringify(config2, null, 2));
42640
43756
  }
42641
43757
  updateGitignore(this.projectPath);
42642
43758
  ensureGitIdentity(this.projectPath);
42643
43759
  }
42644
43760
  loadConfig() {
42645
- const path2 = getLocusPath(this.projectPath, "configFile");
42646
- if (existsSync11(path2)) {
42647
- return JSON.parse(readFileSync10(path2, "utf-8"));
43761
+ const path3 = getLocusPath(this.projectPath, "configFile");
43762
+ if (existsSync15(path3)) {
43763
+ return JSON.parse(readFileSync13(path3, "utf-8"));
42648
43764
  }
42649
43765
  return null;
42650
43766
  }
@@ -42674,19 +43790,19 @@ class ConfigManager {
42674
43790
  this.saveConfig(config2);
42675
43791
  }
42676
43792
  }
42677
- const settingsPath = join12(this.projectPath, LOCUS_CONFIG.dir, LOCUS_CONFIG.settingsFile);
42678
- if (existsSync11(settingsPath)) {
42679
- const raw = readFileSync10(settingsPath, "utf-8");
43793
+ const settingsPath = join15(this.projectPath, LOCUS_CONFIG.dir, LOCUS_CONFIG.settingsFile);
43794
+ if (existsSync15(settingsPath)) {
43795
+ const raw = readFileSync13(settingsPath, "utf-8");
42680
43796
  const settings = JSON.parse(raw);
42681
43797
  if (settings.$schema !== LOCUS_SCHEMAS.settings) {
42682
43798
  const { $schema: _2, ...rest } = settings;
42683
43799
  const ordered = { $schema: LOCUS_SCHEMAS.settings, ...rest };
42684
- writeFileSync6(settingsPath, JSON.stringify(ordered, null, 2), "utf-8");
43800
+ writeFileSync7(settingsPath, JSON.stringify(ordered, null, 2), "utf-8");
42685
43801
  }
42686
43802
  }
42687
43803
  const locusMdPath = getLocusPath(this.projectPath, "contextFile");
42688
- const locusMdExisted = existsSync11(locusMdPath);
42689
- writeFileSync6(locusMdPath, LOCUS_MD_TEMPLATE);
43804
+ const locusMdExisted = existsSync15(locusMdPath);
43805
+ writeFileSync7(locusMdPath, LOCUS_MD_TEMPLATE);
42690
43806
  if (!locusMdExisted) {
42691
43807
  result.directoriesCreated.push(".locus/LOCUS.md");
42692
43808
  }
@@ -42695,25 +43811,26 @@ class ConfigManager {
42695
43811
  LOCUS_CONFIG.documentsDir,
42696
43812
  LOCUS_CONFIG.sessionsDir,
42697
43813
  LOCUS_CONFIG.reviewsDir,
42698
- LOCUS_CONFIG.plansDir
43814
+ LOCUS_CONFIG.plansDir,
43815
+ LOCUS_CONFIG.discussionsDir
42699
43816
  ];
42700
- const locusConfigDir = join12(this.projectPath, LOCUS_CONFIG.dir);
43817
+ const locusConfigDir = join15(this.projectPath, LOCUS_CONFIG.dir);
42701
43818
  for (const subdir of locusSubdirs) {
42702
- const subdirPath = join12(locusConfigDir, subdir);
42703
- if (!existsSync11(subdirPath)) {
42704
- mkdirSync6(subdirPath, { recursive: true });
43819
+ const subdirPath = join15(locusConfigDir, subdir);
43820
+ if (!existsSync15(subdirPath)) {
43821
+ mkdirSync7(subdirPath, { recursive: true });
42705
43822
  result.directoriesCreated.push(`.locus/${subdir}`);
42706
43823
  }
42707
43824
  }
42708
43825
  const learningsMdPath = getLocusPath(this.projectPath, "learningsFile");
42709
- if (!existsSync11(learningsMdPath)) {
42710
- writeFileSync6(learningsMdPath, DEFAULT_LEARNINGS_MD);
43826
+ if (!existsSync15(learningsMdPath)) {
43827
+ writeFileSync7(learningsMdPath, DEFAULT_LEARNINGS_MD);
42711
43828
  result.directoriesCreated.push(".locus/LEARNINGS.md");
42712
43829
  }
42713
- const gitignorePath = join12(this.projectPath, ".gitignore");
42714
- const gitignoreBefore = existsSync11(gitignorePath) ? readFileSync10(gitignorePath, "utf-8") : "";
43830
+ const gitignorePath = join15(this.projectPath, ".gitignore");
43831
+ const gitignoreBefore = existsSync15(gitignorePath) ? readFileSync13(gitignorePath, "utf-8") : "";
42715
43832
  updateGitignore(this.projectPath);
42716
- const gitignoreAfter = readFileSync10(gitignorePath, "utf-8");
43833
+ const gitignoreAfter = readFileSync13(gitignorePath, "utf-8");
42717
43834
  if (gitignoreBefore !== gitignoreAfter) {
42718
43835
  result.gitignoreUpdated = true;
42719
43836
  }
@@ -42723,83 +43840,11 @@ class ConfigManager {
42723
43840
  saveConfig(config2) {
42724
43841
  const { $schema: _2, ...rest } = config2;
42725
43842
  const ordered = { $schema: LOCUS_SCHEMAS.config, ...rest };
42726
- const path2 = getLocusPath(this.projectPath, "configFile");
42727
- writeFileSync6(path2, JSON.stringify(ordered, null, 2));
43843
+ const path3 = getLocusPath(this.projectPath, "configFile");
43844
+ writeFileSync7(path3, JSON.stringify(ordered, null, 2));
42728
43845
  }
42729
43846
  }
42730
43847
 
42731
- // src/utils/banner.ts
42732
- init_index_node();
42733
-
42734
- // src/utils/version.ts
42735
- import { existsSync as existsSync12, readFileSync as readFileSync11 } from "node:fs";
42736
- import { dirname as dirname3, join as join13 } from "node:path";
42737
- import { fileURLToPath as fileURLToPath3 } from "node:url";
42738
- function getVersion() {
42739
- try {
42740
- const __filename2 = fileURLToPath3(import.meta.url);
42741
- const __dirname2 = dirname3(__filename2);
42742
- const bundledPath = join13(__dirname2, "..", "package.json");
42743
- const sourcePath = join13(__dirname2, "..", "..", "package.json");
42744
- if (existsSync12(bundledPath)) {
42745
- const pkg = JSON.parse(readFileSync11(bundledPath, "utf-8"));
42746
- if (pkg.name === "@locusai/cli") {
42747
- return pkg.version || "0.0.0";
42748
- }
42749
- }
42750
- if (existsSync12(sourcePath)) {
42751
- const pkg = JSON.parse(readFileSync11(sourcePath, "utf-8"));
42752
- if (pkg.name === "@locusai/cli") {
42753
- return pkg.version || "0.0.0";
42754
- }
42755
- }
42756
- } catch {}
42757
- return "0.0.0";
42758
- }
42759
- var VERSION2 = getVersion();
42760
-
42761
- // src/utils/banner.ts
42762
- function printBanner() {
42763
- console.log(c.primary(`
42764
- _ ____ ____ _ _ ____
42765
- | | / __ \\ / ___| | | |/ ___|
42766
- | | | | | | | | | | |\\___ \\
42767
- | |___| |__| | |___| |_| |___) |
42768
- |_____|\\____/ \\____|\\___/|____/ ${c.dim(`v${VERSION2}`)}
42769
- `));
42770
- }
42771
- // src/utils/helpers.ts
42772
- init_index_node();
42773
- import { existsSync as existsSync13 } from "node:fs";
42774
- import { join as join14 } from "node:path";
42775
- function isProjectInitialized(projectPath) {
42776
- const locusDir = join14(projectPath, LOCUS_CONFIG.dir);
42777
- const configPath = join14(locusDir, LOCUS_CONFIG.configFile);
42778
- return existsSync13(locusDir) && existsSync13(configPath);
42779
- }
42780
- function requireInitialization(projectPath, command) {
42781
- if (!isProjectInitialized(projectPath)) {
42782
- console.error(`
42783
- ${c.error("✖ Error")} ${c.red(`Locus is not initialized in this directory.`)}
42784
-
42785
- The '${c.bold(command)}' command requires a Locus project to be initialized.
42786
-
42787
- To initialize Locus in this directory, run:
42788
- ${c.primary("locus init")}
42789
-
42790
- This will create a ${c.dim(".locus")} directory with the necessary configuration.
42791
- `);
42792
- process.exit(1);
42793
- }
42794
- }
42795
- function resolveProvider3(input) {
42796
- if (!input)
42797
- return PROVIDER.CLAUDE;
42798
- if (input === PROVIDER.CLAUDE || input === PROVIDER.CODEX)
42799
- return input;
42800
- console.error(c.error(`Error: invalid provider '${input}'. Use 'claude' or 'codex'.`));
42801
- process.exit(1);
42802
- }
42803
43848
  // src/workspace-resolver.ts
42804
43849
  init_index_node();
42805
43850
 
@@ -42844,7 +43889,7 @@ async function docsCommand(args) {
42844
43889
  }
42845
43890
  }
42846
43891
  async function docsSyncCommand(args) {
42847
- const { values } = parseArgs({
43892
+ const { values } = parseArgs2({
42848
43893
  args,
42849
43894
  options: {
42850
43895
  "api-key": { type: "string" },
@@ -42961,7 +44006,7 @@ function showDocsSyncHelp() {
42961
44006
  // src/commands/exec.ts
42962
44007
  init_index_node();
42963
44008
  import { randomUUID as randomUUID2 } from "node:crypto";
42964
- import { parseArgs as parseArgs2 } from "node:util";
44009
+ import { parseArgs as parseArgs3 } from "node:util";
42965
44010
 
42966
44011
  // src/display/json-stream-renderer.ts
42967
44012
  init_src();
@@ -43254,7 +44299,7 @@ function showSessionsHelp() {
43254
44299
 
43255
44300
  // src/commands/exec.ts
43256
44301
  async function execCommand(args) {
43257
- const { values, positionals } = parseArgs2({
44302
+ const { values, positionals } = parseArgs3({
43258
44303
  args,
43259
44304
  options: {
43260
44305
  model: { type: "string" },
@@ -43265,6 +44310,7 @@ async function execCommand(args) {
43265
44310
  "no-status": { type: "boolean" },
43266
44311
  interactive: { type: "boolean", short: "i" },
43267
44312
  session: { type: "string", short: "s" },
44313
+ "session-id": { type: "string" },
43268
44314
  "json-stream": { type: "boolean" }
43269
44315
  },
43270
44316
  strict: false
@@ -43393,7 +44439,7 @@ async function execCommand(args) {
43393
44439
  }
43394
44440
  }
43395
44441
  async function execJsonStream(values, positionals, projectPath) {
43396
- const sessionId = values.session ?? randomUUID2();
44442
+ const sessionId = values["session-id"] ?? values.session ?? randomUUID2();
43397
44443
  const execSettings = new SettingsManager(projectPath).load();
43398
44444
  const provider = resolveProvider3(values.provider || execSettings.provider);
43399
44445
  const model = values.model || execSettings.model || DEFAULT_MODEL[provider];
@@ -43462,6 +44508,11 @@ function showHelp2() {
43462
44508
  ${c.dim("remove Remove all settings")}
43463
44509
  ${c.success("index")} Index the codebase for AI context
43464
44510
  ${c.success("run")} Start agent to work on tasks sequentially
44511
+ ${c.success("discuss")} Start an interactive AI discussion on a topic
44512
+ ${c.dim("--list List all discussions")}
44513
+ ${c.dim("--show <id> Show discussion details")}
44514
+ ${c.dim("--archive <id> Archive a discussion")}
44515
+ ${c.dim("--delete <id> Delete a discussion")}
43465
44516
  ${c.success("plan")} Run async planning meeting to create sprint plans
43466
44517
  ${c.success("docs")} Manage workspace docs
43467
44518
  ${c.dim("sync Sync docs from API to .locus/documents")}
@@ -43485,6 +44536,7 @@ function showHelp2() {
43485
44536
  ${c.header(" OPTIONS ")}
43486
44537
  ${c.secondary("--help")} Show this help message
43487
44538
  ${c.secondary("--provider")} <name> AI provider: ${c.dim("claude")} or ${c.dim("codex")} (default: ${c.dim("claude")})
44539
+ ${c.secondary("--model")} <name> AI model (claude: ${c.dim("opus, sonnet, haiku")} | codex: ${c.dim("gpt-5.3-codex, gpt-5-codex-mini")})
43488
44540
  ${c.secondary("--reasoning-effort")} <level> Codex reasoning effort: ${c.dim("low, medium, high")} (default: model default)
43489
44541
 
43490
44542
  ${c.header(" GETTING STARTED ")}
@@ -43499,6 +44551,7 @@ function showHelp2() {
43499
44551
  ${c.dim("$")} ${c.primary("locus review")}
43500
44552
  ${c.dim("$")} ${c.primary("locus review local")}
43501
44553
  ${c.dim("$")} ${c.primary("locus telegram setup")}
44554
+ ${c.dim("$")} ${c.primary('locus discuss "how should we design the auth system?"')}
43502
44555
  ${c.dim("$")} ${c.primary("locus exec sessions list")}
43503
44556
 
43504
44557
  For more information, visit: ${c.underline("https://docs.locusai.dev")}
@@ -43506,7 +44559,7 @@ function showHelp2() {
43506
44559
  }
43507
44560
  // src/commands/index-codebase.ts
43508
44561
  init_index_node();
43509
- import { parseArgs as parseArgs3 } from "node:util";
44562
+ import { parseArgs as parseArgs4 } from "node:util";
43510
44563
 
43511
44564
  // src/tree-summarizer.ts
43512
44565
  init_index_node();
@@ -43534,7 +44587,7 @@ ${tree}`;
43534
44587
 
43535
44588
  // src/commands/index-codebase.ts
43536
44589
  async function indexCommand(args) {
43537
- const { values } = parseArgs3({
44590
+ const { values } = parseArgs4({
43538
44591
  args,
43539
44592
  options: {
43540
44593
  dir: { type: "string" },
@@ -43632,9 +44685,9 @@ async function initCommand() {
43632
44685
  }
43633
44686
  // src/commands/plan.ts
43634
44687
  init_index_node();
43635
- import { existsSync as existsSync14, unlinkSync as unlinkSync4 } from "node:fs";
43636
- import { join as join15 } from "node:path";
43637
- import { parseArgs as parseArgs4 } from "node:util";
44688
+ import { existsSync as existsSync16, unlinkSync as unlinkSync5 } from "node:fs";
44689
+ import { join as join16 } from "node:path";
44690
+ import { parseArgs as parseArgs5 } from "node:util";
43638
44691
  function normalizePlanIdArgs(args) {
43639
44692
  const planIdFlags = new Set(["--approve", "--reject", "--cancel", "--show"]);
43640
44693
  const result = [];
@@ -43653,7 +44706,7 @@ function normalizePlanIdArgs(args) {
43653
44706
  }
43654
44707
  async function planCommand(args) {
43655
44708
  const normalizedArgs = normalizePlanIdArgs(args);
43656
- const { values, positionals } = parseArgs4({
44709
+ const { values, positionals } = parseArgs5({
43657
44710
  args: normalizedArgs,
43658
44711
  options: {
43659
44712
  approve: { type: "string" },
@@ -43740,9 +44793,9 @@ async function planCommand(args) {
43740
44793
  try {
43741
44794
  const result = await meeting.run(directive, feedback);
43742
44795
  planManager.save(result.plan);
43743
- const tempFile = join15(getLocusPath(projectPath, "plansDir"), `${result.plan.id}.json`);
43744
- if (existsSync14(tempFile)) {
43745
- unlinkSync4(tempFile);
44796
+ const tempFile = join16(getLocusPath(projectPath, "plansDir"), `${result.plan.id}.json`);
44797
+ if (existsSync16(tempFile)) {
44798
+ unlinkSync5(tempFile);
43746
44799
  }
43747
44800
  console.log(`
43748
44801
  ${c.success("✔")} ${c.success("Planning meeting complete!")}
@@ -43916,7 +44969,7 @@ function showPlanHelp() {
43916
44969
  ${c.dim("--api-key <key>")} API key override (reads from settings.json)
43917
44970
  ${c.dim("--api-url <url>")} API base URL (default: https://api.locusai.dev/api)
43918
44971
  ${c.dim("--workspace <id>")} Workspace ID
43919
- ${c.dim("--model <model>")} AI model to use
44972
+ ${c.dim("--model <model>")} AI model (claude: opus, sonnet, haiku | codex: gpt-5.3-codex, gpt-5-codex-mini)
43920
44973
  ${c.dim("--provider <p>")} AI provider (claude, codex)
43921
44974
  ${c.dim("--feedback <text>")} CEO feedback when rejecting
43922
44975
  ${c.dim("--dir <path>")} Project directory
@@ -43938,9 +44991,9 @@ function showPlanHelp() {
43938
44991
  }
43939
44992
  // src/commands/review.ts
43940
44993
  init_index_node();
43941
- import { existsSync as existsSync15, mkdirSync as mkdirSync7, writeFileSync as writeFileSync7 } from "node:fs";
43942
- import { join as join16 } from "node:path";
43943
- import { parseArgs as parseArgs5 } from "node:util";
44994
+ import { existsSync as existsSync17, mkdirSync as mkdirSync8, writeFileSync as writeFileSync8 } from "node:fs";
44995
+ import { join as join17 } from "node:path";
44996
+ import { parseArgs as parseArgs6 } from "node:util";
43944
44997
  async function reviewCommand(args) {
43945
44998
  const subcommand = args[0];
43946
44999
  if (subcommand === "local") {
@@ -43949,7 +45002,7 @@ async function reviewCommand(args) {
43949
45002
  return reviewPrsCommand(args);
43950
45003
  }
43951
45004
  async function reviewPrsCommand(args) {
43952
- const { values } = parseArgs5({
45005
+ const { values } = parseArgs6({
43953
45006
  args,
43954
45007
  options: {
43955
45008
  "api-key": { type: "string" },
@@ -44035,7 +45088,7 @@ ${c.info("Received shutdown signal. Stopping reviewer...")}`);
44035
45088
  await reviewer.run();
44036
45089
  }
44037
45090
  async function reviewLocalCommand(args) {
44038
- const { values } = parseArgs5({
45091
+ const { values } = parseArgs6({
44039
45092
  args,
44040
45093
  options: {
44041
45094
  model: { type: "string" },
@@ -44078,13 +45131,13 @@ async function reviewLocalCommand(args) {
44078
45131
  `);
44079
45132
  return;
44080
45133
  }
44081
- const reviewsDir = join16(projectPath, LOCUS_CONFIG.dir, LOCUS_CONFIG.reviewsDir);
44082
- if (!existsSync15(reviewsDir)) {
44083
- mkdirSync7(reviewsDir, { recursive: true });
45134
+ const reviewsDir = join17(projectPath, LOCUS_CONFIG.dir, LOCUS_CONFIG.reviewsDir);
45135
+ if (!existsSync17(reviewsDir)) {
45136
+ mkdirSync8(reviewsDir, { recursive: true });
44084
45137
  }
44085
45138
  const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
44086
- const reportPath = join16(reviewsDir, `review-${timestamp}.md`);
44087
- writeFileSync7(reportPath, report, "utf-8");
45139
+ const reportPath = join17(reviewsDir, `review-${timestamp}.md`);
45140
+ writeFileSync8(reportPath, report, "utf-8");
44088
45141
  console.log(`
44089
45142
  ${c.success("✔")} ${c.success("Review complete!")}`);
44090
45143
  console.log(` ${c.dim("Report saved to:")} ${c.primary(reportPath)}
@@ -44092,9 +45145,9 @@ async function reviewLocalCommand(args) {
44092
45145
  }
44093
45146
  // src/commands/run.ts
44094
45147
  init_index_node();
44095
- import { parseArgs as parseArgs6 } from "node:util";
45148
+ import { parseArgs as parseArgs7 } from "node:util";
44096
45149
  async function runCommand(args) {
44097
- const { values } = parseArgs6({
45150
+ const { values } = parseArgs7({
44098
45151
  args,
44099
45152
  options: {
44100
45153
  "api-key": { type: "string" },
@@ -44176,11 +45229,11 @@ ${c.info(`Received ${signal}. Stopping agent and cleaning up...`)}`);
44176
45229
  // src/commands/telegram.ts
44177
45230
  init_index_node();
44178
45231
  import { spawn as spawn4 } from "node:child_process";
44179
- import { existsSync as existsSync16 } from "node:fs";
44180
- import { join as join17 } from "node:path";
44181
- import { createInterface as createInterface3 } from "node:readline";
45232
+ import { existsSync as existsSync18 } from "node:fs";
45233
+ import { join as join18 } from "node:path";
45234
+ import { createInterface as createInterface4 } from "node:readline";
44182
45235
  function ask2(question) {
44183
- const rl = createInterface3({
45236
+ const rl = createInterface4({
44184
45237
  input: process.stdin,
44185
45238
  output: process.stdout
44186
45239
  });
@@ -44411,8 +45464,8 @@ function runBotCommand(projectPath) {
44411
45464
  `);
44412
45465
  process.exit(1);
44413
45466
  }
44414
- const monorepoTelegramEntry = join17(projectPath, "packages/telegram/src/index.ts");
44415
- const isMonorepo = existsSync16(monorepoTelegramEntry);
45467
+ const monorepoTelegramEntry = join18(projectPath, "packages/telegram/src/index.ts");
45468
+ const isMonorepo = existsSync18(monorepoTelegramEntry);
44416
45469
  let cmd;
44417
45470
  let args;
44418
45471
  if (isMonorepo) {
@@ -44571,6 +45624,10 @@ var isJsonStream = process.argv.includes("--json-stream");
44571
45624
  async function main() {
44572
45625
  const command = process.argv[2];
44573
45626
  const args = process.argv.slice(3);
45627
+ if (command === "--json-stream") {
45628
+ await execCommand([command, ...args]);
45629
+ return;
45630
+ }
44574
45631
  if (command !== "exec" && !isJsonStream) {
44575
45632
  printBanner();
44576
45633
  }
@@ -44587,6 +45644,9 @@ async function main() {
44587
45644
  case "exec":
44588
45645
  await execCommand(args);
44589
45646
  break;
45647
+ case "discuss":
45648
+ await discussCommand(args);
45649
+ break;
44590
45650
  case "plan":
44591
45651
  await planCommand(args);
44592
45652
  break;