@locusai/cli 0.1.0 → 0.1.2

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 (45) hide show
  1. package/bin/locus.js +1 -2
  2. package/bin/mcp.js +21 -44
  3. package/bin/server.js +37 -69
  4. package/package.json +1 -1
  5. package/public/dashboard/404.html +1 -1
  6. package/public/dashboard/_next/static/chunks/{140.29d6e9ea1df01666.js → 140.d5e67b269d70c096.js} +1 -1
  7. package/public/dashboard/_next/static/chunks/{142.e0cbd3087fd025fc.js → 142.82cd6bec804102b9.js} +1 -1
  8. package/public/dashboard/_next/static/chunks/{188.1512869303a9ef11.js → 188.27288b5094867f29.js} +1 -1
  9. package/public/dashboard/_next/static/chunks/855-a193e1d785e334cf.js +2 -0
  10. package/public/dashboard/_next/static/chunks/892-70ddfae0f8c9ee9f.js +1 -0
  11. package/public/dashboard/_next/static/chunks/app/{page-e1e7887da301e162.js → backlog/page-ade60a21a3597509.js} +1 -1
  12. package/public/dashboard/_next/static/chunks/app/docs/{page-e90e86777b3c946f.js → page-5f69fffac832d77c.js} +1 -1
  13. package/public/dashboard/_next/static/chunks/app/{layout-152c7fef4bd8f727.js → layout-a0acefd9b75ec3b8.js} +1 -1
  14. package/public/dashboard/_next/static/chunks/app/{backlog/page-f30275eedcf12ad8.js → page-cb3aec9c8077eab1.js} +1 -1
  15. package/public/dashboard/_next/static/chunks/app/settings/{page-67b58b5201cc6766.js → page-82693b6134aafc85.js} +1 -1
  16. package/public/dashboard/_next/static/chunks/main-39090d49dd3cd8c7.js +1 -0
  17. package/public/dashboard/_next/static/chunks/{main-app-18102516cfd3e949.js → main-app-bb0a6e7769aa4668.js} +1 -1
  18. package/public/dashboard/_next/static/chunks/{webpack-a4df5dd62e0babef.js → webpack-a21f388d2a000173.js} +1 -1
  19. package/public/dashboard/backlog.html +1 -1
  20. package/public/dashboard/backlog.txt +5 -5
  21. package/public/dashboard/docs.html +1 -1
  22. package/public/dashboard/docs.txt +5 -5
  23. package/public/dashboard/index.html +1 -1
  24. package/public/dashboard/index.txt +5 -5
  25. package/public/dashboard/settings.html +1 -1
  26. package/public/dashboard/settings.txt +5 -5
  27. package/public/dashboard/_next/static/WfUedKoDM4nZdcatRoQdk/_buildManifest.js +0 -1
  28. package/public/dashboard/_next/static/WfUedKoDM4nZdcatRoQdk/_ssgManifest.js +0 -1
  29. package/public/dashboard/_next/static/XW3_p_di5drusE-VlxzXK/_buildManifest.js +0 -1
  30. package/public/dashboard/_next/static/XW3_p_di5drusE-VlxzXK/_ssgManifest.js +0 -1
  31. package/public/dashboard/_next/static/bf2GOBXb9EaNnZkv7RVlG/_buildManifest.js +0 -1
  32. package/public/dashboard/_next/static/bf2GOBXb9EaNnZkv7RVlG/_ssgManifest.js +0 -1
  33. package/public/dashboard/_next/static/chunks/84-575620eb3bbfced4.js +0 -1
  34. package/public/dashboard/_next/static/chunks/855-df0aee06463ea596.js +0 -2
  35. package/public/dashboard/_next/static/chunks/886-5056f491a3d531b3.js +0 -1
  36. package/public/dashboard/_next/static/chunks/app/docs/page-377e5ca3267a2eb5.js +0 -1
  37. package/public/dashboard/_next/static/chunks/app/docs/page-89769946bd53dc5b.js +0 -1
  38. package/public/dashboard/_next/static/chunks/main-8ea28c2ff0c09b83.js +0 -1
  39. package/public/dashboard/_next/static/chunks/webpack-3acb64ba00ce78c9.js +0 -1
  40. package/public/dashboard/_next/static/chunks/webpack-ce3693c6fe6b715d.js +0 -1
  41. package/public/dashboard/_next/static/omFaTNN93MZypoe_iVckS/_buildManifest.js +0 -1
  42. package/public/dashboard/_next/static/omFaTNN93MZypoe_iVckS/_ssgManifest.js +0 -1
  43. /package/public/dashboard/_next/static/chunks/{273-a1771233d25f2119.js → 273-95c2836f1a6dfb23.js} +0 -0
  44. /package/public/dashboard/_next/static/{FKNiy9gxnBJm8JQK-p25K → mgA6xTBePiCXP1IVRWWME}/_buildManifest.js +0 -0
  45. /package/public/dashboard/_next/static/{FKNiy9gxnBJm8JQK-p25K → mgA6xTBePiCXP1IVRWWME}/_ssgManifest.js +0 -0
package/bin/locus.js CHANGED
@@ -1102,8 +1102,7 @@ async function dev(args) {
1102
1102
  if (process.platform === "darwin") {
1103
1103
  Bun.spawn(["open", "http://localhost:3080"], { stdout: "ignore" });
1104
1104
  }
1105
- } catch {
1106
- }
1105
+ } catch {}
1107
1106
  }, 2000);
1108
1107
  process.on("SIGINT", () => {
1109
1108
  console.log(`
package/bin/mcp.js CHANGED
@@ -2029,10 +2029,8 @@ var require_json_schema_traverse = __commonJS((exports, module) => {
2029
2029
  opts = {};
2030
2030
  }
2031
2031
  cb = opts.cb || cb;
2032
- var pre = typeof cb == "function" ? cb : cb.pre || function() {
2033
- };
2034
- var post = cb.post || function() {
2035
- };
2032
+ var pre = typeof cb == "function" ? cb : cb.pre || function() {};
2033
+ var post = cb.post || function() {};
2036
2034
  _traverse(opts, pre, post, schema, "", schema);
2037
2035
  };
2038
2036
  traverse.keywords = {
@@ -4233,10 +4231,7 @@ var require_core = __commonJS((exports) => {
4233
4231
  delete metaOpts[opt];
4234
4232
  return metaOpts;
4235
4233
  }
4236
- var noLogs = { log() {
4237
- }, warn() {
4238
- }, error() {
4239
- } };
4234
+ var noLogs = { log() {}, warn() {}, error() {} };
4240
4235
  function getLogger(logger) {
4241
4236
  if (logger === false)
4242
4237
  return noLogs;
@@ -6610,10 +6605,8 @@ __export(exports_external, {
6610
6605
  // node_modules/zod/v3/helpers/util.js
6611
6606
  var util;
6612
6607
  (function(util2) {
6613
- util2.assertEqual = (_) => {
6614
- };
6615
- function assertIs(_arg) {
6616
- }
6608
+ util2.assertEqual = (_) => {};
6609
+ function assertIs(_arg) {}
6617
6610
  util2.assertIs = assertIs;
6618
6611
  function assertNever(_x) {
6619
6612
  throw new Error;
@@ -8933,8 +8926,7 @@ class ZodObject extends ZodType {
8933
8926
  });
8934
8927
  status.dirty();
8935
8928
  }
8936
- } else if (unknownKeys === "strip") {
8937
- } else {
8929
+ } else if (unknownKeys === "strip") {} else {
8938
8930
  throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);
8939
8931
  }
8940
8932
  } else {
@@ -10590,13 +10582,11 @@ function assertEqual(val) {
10590
10582
  function assertNotEqual(val) {
10591
10583
  return val;
10592
10584
  }
10593
- function assertIs(_arg) {
10594
- }
10585
+ function assertIs(_arg) {}
10595
10586
  function assertNever(_x) {
10596
10587
  throw new Error;
10597
10588
  }
10598
- function assert(_) {
10599
- }
10589
+ function assert(_) {}
10600
10590
  function getEnumValues(entries) {
10601
10591
  const numericValues = Object.values(entries).filter((v) => typeof v === "number");
10602
10592
  const values = Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v);
@@ -10693,8 +10683,7 @@ function randomString(length = 10) {
10693
10683
  function esc(str) {
10694
10684
  return JSON.stringify(str);
10695
10685
  }
10696
- var captureStackTrace = Error.captureStackTrace ? Error.captureStackTrace : (..._args) => {
10697
- };
10686
+ var captureStackTrace = Error.captureStackTrace ? Error.captureStackTrace : (..._args) => {};
10698
10687
  function isObject(data) {
10699
10688
  return typeof data === "object" && data !== null && !Array.isArray(data);
10700
10689
  }
@@ -11045,8 +11034,7 @@ function cleanEnum(obj) {
11045
11034
  }
11046
11035
 
11047
11036
  class Class {
11048
- constructor(..._args) {
11049
- }
11037
+ constructor(..._args) {}
11050
11038
  }
11051
11039
 
11052
11040
  // node_modules/zod/v4/core/errors.js
@@ -11512,8 +11500,7 @@ var $ZodCheckStringFormat = /* @__PURE__ */ $constructor("$ZodCheckStringFormat"
11512
11500
  });
11513
11501
  });
11514
11502
  else
11515
- (_b = inst._zod).check ?? (_b.check = () => {
11516
- });
11503
+ (_b = inst._zod).check ?? (_b.check = () => {});
11517
11504
  });
11518
11505
  var $ZodCheckRegex = /* @__PURE__ */ $constructor("$ZodCheckRegex", (inst, def) => {
11519
11506
  $ZodCheckStringFormat.init(inst, def);
@@ -11754,8 +11741,7 @@ var $ZodString = /* @__PURE__ */ $constructor("$ZodString", (inst, def) => {
11754
11741
  if (def.coerce)
11755
11742
  try {
11756
11743
  payload.value = String(payload.value);
11757
- } catch (_2) {
11758
- }
11744
+ } catch (_2) {}
11759
11745
  if (typeof payload.value === "string")
11760
11746
  return payload;
11761
11747
  payload.issues.push({
@@ -12053,8 +12039,7 @@ var $ZodNumber = /* @__PURE__ */ $constructor("$ZodNumber", (inst, def) => {
12053
12039
  if (def.coerce)
12054
12040
  try {
12055
12041
  payload.value = Number(payload.value);
12056
- } catch (_) {
12057
- }
12042
+ } catch (_) {}
12058
12043
  const input = payload.value;
12059
12044
  if (typeof input === "number" && !Number.isNaN(input) && Number.isFinite(input)) {
12060
12045
  return payload;
@@ -12081,8 +12066,7 @@ var $ZodBoolean = /* @__PURE__ */ $constructor("$ZodBoolean", (inst, def) => {
12081
12066
  if (def.coerce)
12082
12067
  try {
12083
12068
  payload.value = Boolean(payload.value);
12084
- } catch (_) {
12085
- }
12069
+ } catch (_) {}
12086
12070
  const input = payload.value;
12087
12071
  if (typeof input === "boolean")
12088
12072
  return payload;
@@ -13505,8 +13489,7 @@ class JSONSchemaGenerator {
13505
13489
  this.metadataRegistry = params?.metadata ?? globalRegistry;
13506
13490
  this.target = params?.target ?? "draft-2020-12";
13507
13491
  this.unrepresentable = params?.unrepresentable ?? "throw";
13508
- this.override = params?.override ?? (() => {
13509
- });
13492
+ this.override = params?.override ?? (() => {});
13510
13493
  this.io = params?.io ?? "output";
13511
13494
  this.seen = new Map;
13512
13495
  }
@@ -13805,8 +13788,7 @@ class JSONSchemaGenerator {
13805
13788
  if (val === undefined) {
13806
13789
  if (this.unrepresentable === "throw") {
13807
13790
  throw new Error("Literal `undefined` cannot be represented in JSON Schema");
13808
- } else {
13809
- }
13791
+ } else {}
13810
13792
  } else if (typeof val === "bigint") {
13811
13793
  if (this.unrepresentable === "throw") {
13812
13794
  throw new Error("BigInt literals cannot be represented in JSON Schema");
@@ -13817,8 +13799,7 @@ class JSONSchemaGenerator {
13817
13799
  vals.push(val);
13818
13800
  }
13819
13801
  }
13820
- if (vals.length === 0) {
13821
- } else if (vals.length === 1) {
13802
+ if (vals.length === 0) {} else if (vals.length === 1) {
13822
13803
  const val = vals[0];
13823
13804
  json.type = val === null ? "null" : typeof val;
13824
13805
  json.const = val;
@@ -13957,8 +13938,7 @@ class JSONSchemaGenerator {
13957
13938
  }
13958
13939
  break;
13959
13940
  }
13960
- default: {
13961
- }
13941
+ default: {}
13962
13942
  }
13963
13943
  }
13964
13944
  }
@@ -14108,8 +14088,7 @@ class JSONSchemaGenerator {
14108
14088
  defs[seen.defId] = seen.def;
14109
14089
  }
14110
14090
  }
14111
- if (params.external) {
14112
- } else {
14091
+ if (params.external) {} else {
14113
14092
  if (Object.keys(defs).length > 0) {
14114
14093
  if (this.target === "draft-2020-12") {
14115
14094
  result.$defs = defs;
@@ -16424,8 +16403,7 @@ function parseStringDef(def, refs) {
16424
16403
  case "trim":
16425
16404
  break;
16426
16405
  default:
16427
- ((_) => {
16428
- })(check2);
16406
+ ((_) => {})(check2);
16429
16407
  }
16430
16408
  }
16431
16409
  }
@@ -17974,8 +17952,7 @@ class Protocol {
17974
17952
  if (task?.pollInterval) {
17975
17953
  interval = task.pollInterval;
17976
17954
  }
17977
- } catch {
17978
- }
17955
+ } catch {}
17979
17956
  return new Promise((resolve, reject) => {
17980
17957
  if (signal.aborted) {
17981
17958
  reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled"));
package/bin/server.js CHANGED
@@ -1061,8 +1061,7 @@ var require_inherits_browser = __commonJS((exports, module) => {
1061
1061
  module.exports = function inherits(ctor, superCtor) {
1062
1062
  if (superCtor) {
1063
1063
  ctor.super_ = superCtor;
1064
- var TempCtor = function() {
1065
- };
1064
+ var TempCtor = function() {};
1066
1065
  TempCtor.prototype = superCtor.prototype;
1067
1066
  ctor.prototype = new TempCtor;
1068
1067
  ctor.prototype.constructor = ctor;
@@ -1528,15 +1527,13 @@ var require_browser = __commonJS((exports, module) => {
1528
1527
  } else {
1529
1528
  exports.storage.debug = namespaces;
1530
1529
  }
1531
- } catch (e) {
1532
- }
1530
+ } catch (e) {}
1533
1531
  }
1534
1532
  function load() {
1535
1533
  var r;
1536
1534
  try {
1537
1535
  r = exports.storage.debug;
1538
- } catch (e) {
1539
- }
1536
+ } catch (e) {}
1540
1537
  if (!r && typeof process !== "undefined" && "env" in process) {
1541
1538
  r = process.env.DEBUG;
1542
1539
  }
@@ -1546,8 +1543,7 @@ var require_browser = __commonJS((exports, module) => {
1546
1543
  function localstorage() {
1547
1544
  try {
1548
1545
  return window.localStorage;
1549
- } catch (e) {
1550
- }
1546
+ } catch (e) {}
1551
1547
  }
1552
1548
  });
1553
1549
 
@@ -1583,8 +1579,7 @@ var require_node = __commonJS((exports, module) => {
1583
1579
  }, {});
1584
1580
  var fd = parseInt(process.env.DEBUG_FD, 10) || 2;
1585
1581
  if (fd !== 1 && fd !== 2) {
1586
- util.deprecate(function() {
1587
- }, "except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)")();
1582
+ util.deprecate(function() {}, "except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)")();
1588
1583
  }
1589
1584
  var stream = fd === 1 ? process.stdout : fd === 2 ? process.stderr : createWritableStdioStream(fd);
1590
1585
  function useColors() {
@@ -1764,8 +1759,7 @@ var require_destroy = __commonJS((exports, module) => {
1764
1759
  function isZlibStream(stream) {
1765
1760
  return stream instanceof Zlib.Gzip || stream instanceof Zlib.Gunzip || stream instanceof Zlib.Deflate || stream instanceof Zlib.DeflateRaw || stream instanceof Zlib.Inflate || stream instanceof Zlib.InflateRaw || stream instanceof Zlib.Unzip;
1766
1761
  }
1767
- function noop() {
1768
- }
1762
+ function noop() {}
1769
1763
  function onDrainClearBinding() {
1770
1764
  this._binding.clear();
1771
1765
  }
@@ -1831,8 +1825,7 @@ var require_safer = __commonJS((exports, module) => {
1831
1825
  if (!safer.kStringMaxLength) {
1832
1826
  try {
1833
1827
  safer.kStringMaxLength = process.binding("buffer").kStringMaxLength;
1834
- } catch (e) {
1835
- }
1828
+ } catch (e) {}
1836
1829
  }
1837
1830
  if (!safer.constants) {
1838
1831
  safer.constants = {
@@ -1918,8 +1911,7 @@ var require_internal = __commonJS((exports, module) => {
1918
1911
  InternalCodec.prototype.decoder = InternalDecoder;
1919
1912
  var StringDecoder = __require("string_decoder").StringDecoder;
1920
1913
  if (!StringDecoder.prototype.end)
1921
- StringDecoder.prototype.end = function() {
1922
- };
1914
+ StringDecoder.prototype.end = function() {};
1923
1915
  function InternalDecoder(options, codec) {
1924
1916
  StringDecoder.call(this, codec.enc);
1925
1917
  }
@@ -1930,8 +1922,7 @@ var require_internal = __commonJS((exports, module) => {
1930
1922
  InternalEncoder.prototype.write = function(str) {
1931
1923
  return Buffer2.from(str, this.enc);
1932
1924
  };
1933
- InternalEncoder.prototype.end = function() {
1934
- };
1925
+ InternalEncoder.prototype.end = function() {};
1935
1926
  function InternalEncoderBase64(options, codec) {
1936
1927
  this.prevStr = "";
1937
1928
  }
@@ -1945,8 +1936,7 @@ var require_internal = __commonJS((exports, module) => {
1945
1936
  InternalEncoderBase64.prototype.end = function() {
1946
1937
  return Buffer2.from(this.prevStr, "base64");
1947
1938
  };
1948
- function InternalEncoderCesu8(options, codec) {
1949
- }
1939
+ function InternalEncoderCesu8(options, codec) {}
1950
1940
  InternalEncoderCesu8.prototype.write = function(str) {
1951
1941
  var buf = Buffer2.alloc(str.length * 3), bufIdx = 0;
1952
1942
  for (var i = 0;i < str.length; i++) {
@@ -1964,8 +1954,7 @@ var require_internal = __commonJS((exports, module) => {
1964
1954
  }
1965
1955
  return buf.slice(0, bufIdx);
1966
1956
  };
1967
- InternalEncoderCesu8.prototype.end = function() {
1968
- };
1957
+ InternalEncoderCesu8.prototype.end = function() {};
1969
1958
  function InternalDecoderCesu8(options, codec) {
1970
1959
  this.acc = 0;
1971
1960
  this.contBytes = 0;
@@ -2029,13 +2018,11 @@ var require_internal = __commonJS((exports, module) => {
2029
2018
  var require_utf16 = __commonJS((exports) => {
2030
2019
  var Buffer2 = require_safer().Buffer;
2031
2020
  exports.utf16be = Utf16BECodec;
2032
- function Utf16BECodec() {
2033
- }
2021
+ function Utf16BECodec() {}
2034
2022
  Utf16BECodec.prototype.encoder = Utf16BEEncoder;
2035
2023
  Utf16BECodec.prototype.decoder = Utf16BEDecoder;
2036
2024
  Utf16BECodec.prototype.bomAware = true;
2037
- function Utf16BEEncoder() {
2038
- }
2025
+ function Utf16BEEncoder() {}
2039
2026
  Utf16BEEncoder.prototype.write = function(str) {
2040
2027
  var buf = Buffer2.from(str, "ucs2");
2041
2028
  for (var i = 0;i < buf.length; i += 2) {
@@ -2045,8 +2032,7 @@ var require_utf16 = __commonJS((exports) => {
2045
2032
  }
2046
2033
  return buf;
2047
2034
  };
2048
- Utf16BEEncoder.prototype.end = function() {
2049
- };
2035
+ Utf16BEEncoder.prototype.end = function() {};
2050
2036
  function Utf16BEDecoder() {
2051
2037
  this.overflowByte = -1;
2052
2038
  }
@@ -2067,8 +2053,7 @@ var require_utf16 = __commonJS((exports) => {
2067
2053
  this.overflowByte = i == buf.length - 1 ? buf[buf.length - 1] : -1;
2068
2054
  return buf2.slice(0, j).toString("ucs2");
2069
2055
  };
2070
- Utf16BEDecoder.prototype.end = function() {
2071
- };
2056
+ Utf16BEDecoder.prototype.end = function() {};
2072
2057
  exports.utf16 = Utf16Codec;
2073
2058
  function Utf16Codec(codecOptions, iconv) {
2074
2059
  this.iconv = iconv;
@@ -2160,8 +2145,7 @@ var require_utf7 = __commonJS((exports) => {
2160
2145
  return "+" + (chunk === "+" ? "" : this.iconv.encode(chunk, "utf16-be").toString("base64").replace(/=+$/, "")) + "-";
2161
2146
  }.bind(this)));
2162
2147
  };
2163
- Utf7Encoder.prototype.end = function() {
2164
- };
2148
+ Utf7Encoder.prototype.end = function() {};
2165
2149
  function Utf7Decoder(options, codec) {
2166
2150
  this.iconv = codec.iconv;
2167
2151
  this.inBase64 = false;
@@ -2370,8 +2354,7 @@ var require_sbcs_codec = __commonJS((exports) => {
2370
2354
  buf[i] = this.encodeBuf[str.charCodeAt(i)];
2371
2355
  return buf;
2372
2356
  };
2373
- SBCSEncoder.prototype.end = function() {
2374
- };
2357
+ SBCSEncoder.prototype.end = function() {};
2375
2358
  function SBCSDecoder(options, codec) {
2376
2359
  this.decodeBuf = codec.decodeBuf;
2377
2360
  }
@@ -2387,8 +2370,7 @@ var require_sbcs_codec = __commonJS((exports) => {
2387
2370
  }
2388
2371
  return newBuf.toString("ucs2");
2389
2372
  };
2390
- SBCSDecoder.prototype.end = function() {
2391
- };
2373
+ SBCSDecoder.prototype.end = function() {};
2392
2374
  });
2393
2375
 
2394
2376
  // node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-data.js
@@ -3225,8 +3207,7 @@ var require_dbcs_codec = __commonJS((exports) => {
3225
3207
  if (resCode !== undefined) {
3226
3208
  dbcsCode = resCode;
3227
3209
  nextChar = uCode;
3228
- } else {
3229
- }
3210
+ } else {}
3230
3211
  }
3231
3212
  seqObj = undefined;
3232
3213
  } else if (uCode >= 0) {
@@ -3282,8 +3263,7 @@ var require_dbcs_codec = __commonJS((exports) => {
3282
3263
  newBuf[j++] = dbcsCode >> 8;
3283
3264
  newBuf[j++] = dbcsCode & 255;
3284
3265
  }
3285
- } else {
3286
- }
3266
+ } else {}
3287
3267
  this.seqObj = undefined;
3288
3268
  }
3289
3269
  if (this.leadSurrogate !== -1) {
@@ -3308,8 +3288,7 @@ var require_dbcs_codec = __commonJS((exports) => {
3308
3288
  for (var i2 = 0, j = 0;i2 < buf.length; i2++) {
3309
3289
  var curByte = i2 >= 0 ? buf[i2] : prevBuf[i2 + prevBufOffset];
3310
3290
  var uCode = this.decodeTables[nodeIdx][curByte];
3311
- if (uCode >= 0) {
3312
- } else if (uCode === UNASSIGNED) {
3291
+ if (uCode >= 0) {} else if (uCode === UNASSIGNED) {
3313
3292
  i2 = seqStart;
3314
3293
  uCode = this.defaultCharUnicode.charCodeAt(0);
3315
3294
  } else if (uCode === GB18030_CODE) {
@@ -5094,8 +5073,7 @@ var require_lib2 = __commonJS((exports, module) => {
5094
5073
  require_extend_node()(iconv);
5095
5074
  }
5096
5075
  var nodeVerArr;
5097
- if (false) {
5098
- }
5076
+ if (false) {}
5099
5077
  });
5100
5078
 
5101
5079
  // node_modules/unpipe/index.js
@@ -15065,8 +15043,7 @@ var require_object_inspect = __commonJS((exports, module) => {
15065
15043
  try {
15066
15044
  symToString.call(obj);
15067
15045
  return true;
15068
- } catch (e) {
15069
- }
15046
+ } catch (e) {}
15070
15047
  return false;
15071
15048
  }
15072
15049
  function isBigInt(obj) {
@@ -15076,8 +15053,7 @@ var require_object_inspect = __commonJS((exports, module) => {
15076
15053
  try {
15077
15054
  bigIntValueOf.call(obj);
15078
15055
  return true;
15079
- } catch (e) {
15080
- }
15056
+ } catch (e) {}
15081
15057
  return false;
15082
15058
  }
15083
15059
  var hasOwn = Object.prototype.hasOwnProperty || function(key) {
@@ -15122,8 +15098,7 @@ var require_object_inspect = __commonJS((exports, module) => {
15122
15098
  return true;
15123
15099
  }
15124
15100
  return x instanceof Map;
15125
- } catch (e) {
15126
- }
15101
+ } catch (e) {}
15127
15102
  return false;
15128
15103
  }
15129
15104
  function isWeakMap(x) {
@@ -15138,8 +15113,7 @@ var require_object_inspect = __commonJS((exports, module) => {
15138
15113
  return true;
15139
15114
  }
15140
15115
  return x instanceof WeakMap;
15141
- } catch (e) {
15142
- }
15116
+ } catch (e) {}
15143
15117
  return false;
15144
15118
  }
15145
15119
  function isWeakRef(x) {
@@ -15149,8 +15123,7 @@ var require_object_inspect = __commonJS((exports, module) => {
15149
15123
  try {
15150
15124
  weakRefDeref.call(x);
15151
15125
  return true;
15152
- } catch (e) {
15153
- }
15126
+ } catch (e) {}
15154
15127
  return false;
15155
15128
  }
15156
15129
  function isSet(x) {
@@ -15165,8 +15138,7 @@ var require_object_inspect = __commonJS((exports, module) => {
15165
15138
  return true;
15166
15139
  }
15167
15140
  return x instanceof Set;
15168
- } catch (e) {
15169
- }
15141
+ } catch (e) {}
15170
15142
  return false;
15171
15143
  }
15172
15144
  function isWeakSet(x) {
@@ -15181,8 +15153,7 @@ var require_object_inspect = __commonJS((exports, module) => {
15181
15153
  return true;
15182
15154
  }
15183
15155
  return x instanceof WeakSet;
15184
- } catch (e) {
15185
- }
15156
+ } catch (e) {}
15186
15157
  return false;
15187
15158
  }
15188
15159
  function isElement(x) {
@@ -15639,8 +15610,7 @@ var require_implementation = __commonJS((exports, module) => {
15639
15610
  }
15640
15611
  bound = Function("binder", "return function (" + joiny(boundArgs, ",") + "){ return binder.apply(this,arguments); }")(binder);
15641
15612
  if (target.prototype) {
15642
- var Empty = function Empty() {
15643
- };
15613
+ var Empty = function Empty() {};
15644
15614
  Empty.prototype = target.prototype;
15645
15615
  bound.prototype = new Empty;
15646
15616
  Empty.prototype = null;
@@ -15760,8 +15730,7 @@ var require_get_intrinsic = __commonJS((exports, module) => {
15760
15730
  var getEvalledConstructor = function(expressionSyntax) {
15761
15731
  try {
15762
15732
  return $Function('"use strict"; return (' + expressionSyntax + ").constructor;")();
15763
- } catch (e) {
15764
- }
15733
+ } catch (e) {}
15765
15734
  };
15766
15735
  var $gOPD = require_gopd();
15767
15736
  var $defineProperty = require_es_define_property();
@@ -31345,12 +31314,13 @@ class CiController {
31345
31314
  // apps/server/src/controllers/doc.controller.ts
31346
31315
  import {
31347
31316
  existsSync as existsSync2,
31317
+ mkdirSync,
31348
31318
  readdirSync,
31349
31319
  readFileSync,
31350
31320
  statSync,
31351
31321
  writeFileSync
31352
31322
  } from "fs";
31353
- import { join as join2 } from "path";
31323
+ import { dirname, join as join2 } from "path";
31354
31324
 
31355
31325
  class DocController {
31356
31326
  config;
@@ -31407,6 +31377,7 @@ class DocController {
31407
31377
  if (!fullPath.startsWith(this.config.docsPath)) {
31408
31378
  return res.status(403).json({ error: { message: "Invalid path" } });
31409
31379
  }
31380
+ mkdirSync(dirname(fullPath), { recursive: true });
31410
31381
  writeFileSync(fullPath, content, "utf-8");
31411
31382
  res.json({ ok: true });
31412
31383
  } catch (err) {
@@ -31610,10 +31581,8 @@ __export(exports_external, {
31610
31581
  // node_modules/zod/v3/helpers/util.js
31611
31582
  var util;
31612
31583
  (function(util2) {
31613
- util2.assertEqual = (_) => {
31614
- };
31615
- function assertIs(_arg) {
31616
- }
31584
+ util2.assertEqual = (_) => {};
31585
+ function assertIs(_arg) {}
31617
31586
  util2.assertIs = assertIs;
31618
31587
  function assertNever(_x) {
31619
31588
  throw new Error;
@@ -33933,8 +33902,7 @@ class ZodObject extends ZodType {
33933
33902
  });
33934
33903
  status.dirty();
33935
33904
  }
33936
- } else if (unknownKeys === "strip") {
33937
- } else {
33905
+ } else if (unknownKeys === "strip") {} else {
33938
33906
  throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);
33939
33907
  }
33940
33908
  } else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@locusai/cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Local-first AI development platform & engineering workspace",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/47cbc4e2adbc5db9-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/8aea088cdc4338f0.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/c2c06e0e7e056d3e.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-ce3693c6fe6b715d.js"/><script src="/_next/static/chunks/87c73c54-18883d7ce69be0ce.js" async=""></script><script src="/_next/static/chunks/855-df0aee06463ea596.js" async=""></script><script src="/_next/static/chunks/main-app-18102516cfd3e949.js" async=""></script><script src="/_next/static/chunks/954-73b5906ca7819e42.js" async=""></script><script src="/_next/static/chunks/273-a1771233d25f2119.js" async=""></script><script src="/_next/static/chunks/app/layout-152c7fef4bd8f727.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>Locus | Engineering Workspace</title><meta name="description" content="Modernized task management and documentation for engineering teams."/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__className_6a21cc antialiased"><div class="flex h-screen overflow-hidden bg-background"><aside class="w-[260px] flex flex-col border-r border-border/50 bg-card/50 backdrop-blur-sm h-full"><div class="flex items-center gap-3 p-5 border-b border-border/50"><div class="bg-linear-to-br from-primary to-primary/70 text-primary-foreground p-2 rounded-xl shadow-lg shadow-primary/20"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-command"><path d="M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3"></path></svg></div><div><h2 class="text-lg font-bold tracking-tight text-foreground">Locus</h2><p class="text-[10px] text-muted-foreground font-medium">Engineering Workspace</p></div></div><div class="flex-1 p-4"><div class="text-[10px] uppercase font-bold tracking-widest text-muted-foreground/70 mb-3 px-3">Navigation</div><nav class="space-y-1"><a class="group flex items-center gap-3 px-3 py-2.5 text-sm font-medium rounded-xl transition-all text-muted-foreground hover:bg-secondary hover:text-foreground" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard group-hover:scale-110 transition-transform"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg><div class="flex-1"><span class="block">Board</span></div></a><a class="group flex items-center gap-3 px-3 py-2.5 text-sm font-medium rounded-xl transition-all text-muted-foreground hover:bg-secondary hover:text-foreground" href="/backlog"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list group-hover:scale-110 transition-transform"><path d="M3 12h.01"></path><path d="M3 18h.01"></path><path d="M3 6h.01"></path><path d="M8 12h13"></path><path d="M8 18h13"></path><path d="M8 6h13"></path></svg><div class="flex-1"><span class="block">Backlog</span></div></a><a class="group flex items-center gap-3 px-3 py-2.5 text-sm font-medium rounded-xl transition-all text-muted-foreground hover:bg-secondary hover:text-foreground" href="/docs"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-text group-hover:scale-110 transition-transform"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"></path><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M10 9H8"></path><path d="M16 13H8"></path><path d="M16 17H8"></path></svg><div class="flex-1"><span class="block">Library</span></div></a></nav></div><div class="p-4 border-t border-border/50"><a class="flex items-center gap-3 w-full px-3 py-2.5 text-sm font-medium rounded-xl transition-all text-muted-foreground hover:bg-secondary/60 hover:text-foreground" href="/settings"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span>Settings</span></a></div></aside><main class="flex-1 overflow-auto bg-background p-8"><div class="max-w-[1440px] mx-auto"><header class="flex items-center mb-6 py-3"><div class="relative flex-1 max-w-md group"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search absolute left-3.5 top-1/2 -translate-y-1/2 text-muted-foreground group-focus-within:text-primary transition-colors"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.3-4.3"></path></svg><input type="text" placeholder="Search tasks, docs... (⌘K)" class="w-full bg-secondary/40 border border-border/50 rounded-lg pl-10 pr-4 py-2.5 text-sm text-foreground placeholder:text-muted-foreground/70 outline-none transition-all focus:border-primary/50 focus:ring-2 focus:ring-primary/20 focus:bg-background hover:bg-secondary/60"/></div></header><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div></div></main></div><script src="/_next/static/chunks/webpack-ce3693c6fe6b715d.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[3619,[\"954\",\"static/chunks/954-73b5906ca7819e42.js\",\"273\",\"static/chunks/273-a1771233d25f2119.js\",\"177\",\"static/chunks/app/layout-152c7fef4bd8f727.js\"],\"Providers\"]\n3:I[4211,[\"954\",\"static/chunks/954-73b5906ca7819e42.js\",\"273\",\"static/chunks/273-a1771233d25f2119.js\",\"177\",\"static/chunks/app/layout-152c7fef4bd8f727.js\"],\"Sidebar\"]\n4:I[8714,[\"954\",\"static/chunks/954-73b5906ca7819e42.js\",\"273\",\"static/chunks/273-a1771233d25f2119.js\",\"177\",\"static/chunks/app/layout-152c7fef4bd8f727.js\"],\"Header\"]\n5:I[9507,[],\"\"]\n6:I[2639,[],\"\"]\n7:I[1432,[],\"OutletBoundary\"]\n9:I[1432,[],\"MetadataBoundary\"]\nb:I[1432,[],\"ViewportBoundary\"]\nd:I[9398,[],\"\"]\n:HL[\"/_next/static/media/47cbc4e2adbc5db9-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/8aea088cdc4338f0.css\",\"style\"]\n:HL[\"/_next/static/css/c2c06e0e7e056d3e.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"FKNiy9gxnBJm8JQK-p25K\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/8aea088cdc4338f0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c2c06e0e7e056d3e.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"children\":[\"$\",\"body\",null,{\"className\":\"__className_6a21cc antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"flex h-screen overflow-hidden bg-background\",\"children\":[[\"$\",\"$L3\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1 overflow-auto bg-background p-8\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-[1440px] mx-auto\",\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[],[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]}]]}]}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:props:children:1:props:children:props:children:1:props:notFound:1:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:props:children:1:props:children:props:children:1:props:notFound:1:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:props:children:1:props:children:props:children:1:props:notFound:1:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:props:children:1:props:children:props:children:1:props:notFound:1:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$1\",\"vAuyA6dqYIBcsL_AIDFUf\",{\"children\":[[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",\"$undefined\"],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\na:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"1\",{\"children\":\"Locus | Engineering Workspace\"}],[\"$\",\"meta\",\"2\",{\"name\":\"description\",\"content\":\"Modernized task management and documentation for engineering teams.\"}]]\n"])</script><script>self.__next_f.push([1,"8:null\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/47cbc4e2adbc5db9-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/8aea088cdc4338f0.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/c2c06e0e7e056d3e.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-a21f388d2a000173.js"/><script src="/_next/static/chunks/87c73c54-18883d7ce69be0ce.js" async=""></script><script src="/_next/static/chunks/855-a193e1d785e334cf.js" async=""></script><script src="/_next/static/chunks/main-app-bb0a6e7769aa4668.js" async=""></script><script src="/_next/static/chunks/954-73b5906ca7819e42.js" async=""></script><script src="/_next/static/chunks/273-95c2836f1a6dfb23.js" async=""></script><script src="/_next/static/chunks/app/layout-a0acefd9b75ec3b8.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>Locus | Engineering Workspace</title><meta name="description" content="Modernized task management and documentation for engineering teams."/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__className_6a21cc antialiased"><div class="flex h-screen overflow-hidden bg-background"><aside class="w-[260px] flex flex-col border-r border-border/50 bg-card/50 backdrop-blur-sm h-full"><div class="flex items-center gap-3 p-5 border-b border-border/50"><div class="bg-linear-to-br from-primary to-primary/70 text-primary-foreground p-2 rounded-xl shadow-lg shadow-primary/20"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-command"><path d="M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3"></path></svg></div><div><h2 class="text-lg font-bold tracking-tight text-foreground">Locus</h2><p class="text-[10px] text-muted-foreground font-medium">Engineering Workspace</p></div></div><div class="flex-1 p-4"><div class="text-[10px] uppercase font-bold tracking-widest text-muted-foreground/70 mb-3 px-3">Navigation</div><nav class="space-y-1"><a class="group flex items-center gap-3 px-3 py-2.5 text-sm font-medium rounded-xl transition-all text-muted-foreground hover:bg-secondary hover:text-foreground" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard group-hover:scale-110 transition-transform"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg><div class="flex-1"><span class="block">Board</span></div></a><a class="group flex items-center gap-3 px-3 py-2.5 text-sm font-medium rounded-xl transition-all text-muted-foreground hover:bg-secondary hover:text-foreground" href="/backlog"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list group-hover:scale-110 transition-transform"><path d="M3 12h.01"></path><path d="M3 18h.01"></path><path d="M3 6h.01"></path><path d="M8 12h13"></path><path d="M8 18h13"></path><path d="M8 6h13"></path></svg><div class="flex-1"><span class="block">Backlog</span></div></a><a class="group flex items-center gap-3 px-3 py-2.5 text-sm font-medium rounded-xl transition-all text-muted-foreground hover:bg-secondary hover:text-foreground" href="/docs"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-text group-hover:scale-110 transition-transform"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"></path><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M10 9H8"></path><path d="M16 13H8"></path><path d="M16 17H8"></path></svg><div class="flex-1"><span class="block">Library</span></div></a></nav></div><div class="p-4 border-t border-border/50"><a class="flex items-center gap-3 w-full px-3 py-2.5 text-sm font-medium rounded-xl transition-all text-muted-foreground hover:bg-secondary/60 hover:text-foreground" href="/settings"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span>Settings</span></a></div></aside><main class="flex-1 overflow-auto bg-background p-8"><div class="max-w-[1440px] mx-auto"><header class="flex items-center mb-6 py-3"><div class="relative flex-1 max-w-md group"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search absolute left-3.5 top-1/2 -translate-y-1/2 text-muted-foreground group-focus-within:text-primary transition-colors"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.3-4.3"></path></svg><input type="text" placeholder="Search tasks, docs... (⌘K)" class="w-full bg-secondary/40 border border-border/50 rounded-lg pl-10 pr-4 py-2.5 text-sm text-foreground placeholder:text-muted-foreground/70 outline-none transition-all focus:border-primary/50 focus:ring-2 focus:ring-primary/20 focus:bg-background hover:bg-secondary/60"/></div></header><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div></div></main></div><script src="/_next/static/chunks/webpack-a21f388d2a000173.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[3619,[\"954\",\"static/chunks/954-73b5906ca7819e42.js\",\"273\",\"static/chunks/273-95c2836f1a6dfb23.js\",\"177\",\"static/chunks/app/layout-a0acefd9b75ec3b8.js\"],\"Providers\"]\n3:I[4211,[\"954\",\"static/chunks/954-73b5906ca7819e42.js\",\"273\",\"static/chunks/273-95c2836f1a6dfb23.js\",\"177\",\"static/chunks/app/layout-a0acefd9b75ec3b8.js\"],\"Sidebar\"]\n4:I[8714,[\"954\",\"static/chunks/954-73b5906ca7819e42.js\",\"273\",\"static/chunks/273-95c2836f1a6dfb23.js\",\"177\",\"static/chunks/app/layout-a0acefd9b75ec3b8.js\"],\"Header\"]\n5:I[9507,[],\"\"]\n6:I[2639,[],\"\"]\n7:I[1432,[],\"OutletBoundary\"]\n9:I[1432,[],\"MetadataBoundary\"]\nb:I[1432,[],\"ViewportBoundary\"]\nd:I[9398,[],\"\"]\n:HL[\"/_next/static/media/47cbc4e2adbc5db9-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/8aea088cdc4338f0.css\",\"style\"]\n:HL[\"/_next/static/css/c2c06e0e7e056d3e.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"mgA6xTBePiCXP1IVRWWME\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/8aea088cdc4338f0.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c2c06e0e7e056d3e.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"children\":[\"$\",\"body\",null,{\"className\":\"__className_6a21cc antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"flex h-screen overflow-hidden bg-background\",\"children\":[[\"$\",\"$L3\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1 overflow-auto bg-background p-8\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-[1440px] mx-auto\",\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[],[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]}]]}]}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:props:children:1:props:children:props:children:1:props:notFound:1:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:props:children:1:props:children:props:children:1:props:notFound:1:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:props:children:1:props:children:props:children:1:props:notFound:1:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:1:props:children:1:props:children:props:children:props:children:props:children:1:props:children:props:children:1:props:notFound:1:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$1\",\"8V3ZDiNmdnEshdpnhFeDT\",{\"children\":[[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",\"$undefined\"],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\na:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"1\",{\"children\":\"Locus | Engineering Workspace\"}],[\"$\",\"meta\",\"2\",{\"name\":\"description\",\"content\":\"Modernized task management and documentation for engineering teams.\"}]]\n"])</script><script>self.__next_f.push([1,"8:null\n"])</script></body></html>