nolo-cli 0.3.1 → 0.4.1

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 (2) hide show
  1. package/index.js +308 -138
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -12431,6 +12431,149 @@ var init_cliLocalToolBudget = __esm({
12431
12431
  }
12432
12432
  });
12433
12433
 
12434
+ // packages/core/builtinAgents.ts
12435
+ var BUILTIN_NOLO_AGENT_KEY, BUILTIN_APP_BUILDER_AGENT_KEY, BUILTIN_ECOMMERCE_AGENT_KEY, BUILTIN_AGENT_CREATOR_AGENT_KEY, BUILTIN_FEEDBACK_AGENT_KEY, BUILTIN_CHROME_OPERATOR_AGENT_KEY, PUBLIC_DEEPSEEK_V4_FLASH_AGENT_ID, PUBLIC_DEEPSEEK_V4_FLASH_AGENT_KEY, PUBLIC_DEEPSEEK_V4_PRO_AGENT_ID, PUBLIC_DEEPSEEK_V4_PRO_AGENT_KEY, PUBLIC_KIMI_K27_CODING_AGENT_ID, PUBLIC_KIMI_K27_CODING_AGENT_KEY, PUBLIC_GLM_52_AGENT_ID, PUBLIC_GLM_52_AGENT_KEY, PUBLIC_KIMI_K26_IMAGE_AGENT_ID, PUBLIC_KIMI_K26_IMAGE_AGENT_KEY, BUILTIN_PLATFORM_AGENT_KEYS, BUILTIN_PLATFORM_AGENT_KEY_SET;
12436
+ var init_builtinAgents = __esm({
12437
+ "packages/core/builtinAgents.ts"() {
12438
+ "use strict";
12439
+ BUILTIN_NOLO_AGENT_KEY = "agent-pub-01NOLOAPPBLD000000019KCKT0";
12440
+ BUILTIN_APP_BUILDER_AGENT_KEY = "agent-pub-01APPBUILDER00000001YAII3I";
12441
+ BUILTIN_ECOMMERCE_AGENT_KEY = "agent-pub-01ECOMMERCEAG00000001PYQ2J";
12442
+ BUILTIN_AGENT_CREATOR_AGENT_KEY = "agent-pub-01NOLOAGENTCRT000000000001";
12443
+ BUILTIN_FEEDBACK_AGENT_KEY = "agent-pub-01NOLOFEEDBACKA000000000R2";
12444
+ BUILTIN_CHROME_OPERATOR_AGENT_KEY = "agent-pub-01CHROMEOPR000000000001";
12445
+ PUBLIC_DEEPSEEK_V4_FLASH_AGENT_ID = "01DSV4FLASHPB00000000JFPFD";
12446
+ PUBLIC_DEEPSEEK_V4_FLASH_AGENT_KEY = `agent-pub-${PUBLIC_DEEPSEEK_V4_FLASH_AGENT_ID}`;
12447
+ PUBLIC_DEEPSEEK_V4_PRO_AGENT_ID = "01DSV4PROPUB00000001A9OLZN";
12448
+ PUBLIC_DEEPSEEK_V4_PRO_AGENT_KEY = `agent-pub-${PUBLIC_DEEPSEEK_V4_PRO_AGENT_ID}`;
12449
+ PUBLIC_KIMI_K27_CODING_AGENT_ID = "01KIMIK27CODEOL000000001";
12450
+ PUBLIC_KIMI_K27_CODING_AGENT_KEY = `agent-pub-${PUBLIC_KIMI_K27_CODING_AGENT_ID}`;
12451
+ PUBLIC_GLM_52_AGENT_ID = "01GLM52CHAT00000000001U721";
12452
+ PUBLIC_GLM_52_AGENT_KEY = `agent-pub-${PUBLIC_GLM_52_AGENT_ID}`;
12453
+ PUBLIC_KIMI_K26_IMAGE_AGENT_ID = "01KIMIK26OLLAMA0000000001";
12454
+ PUBLIC_KIMI_K26_IMAGE_AGENT_KEY = `agent-pub-${PUBLIC_KIMI_K26_IMAGE_AGENT_ID}`;
12455
+ BUILTIN_PLATFORM_AGENT_KEYS = [
12456
+ BUILTIN_NOLO_AGENT_KEY,
12457
+ BUILTIN_APP_BUILDER_AGENT_KEY,
12458
+ BUILTIN_ECOMMERCE_AGENT_KEY,
12459
+ BUILTIN_AGENT_CREATOR_AGENT_KEY,
12460
+ BUILTIN_FEEDBACK_AGENT_KEY,
12461
+ BUILTIN_CHROME_OPERATOR_AGENT_KEY
12462
+ ];
12463
+ BUILTIN_PLATFORM_AGENT_KEY_SET = new Set(BUILTIN_PLATFORM_AGENT_KEYS);
12464
+ }
12465
+ });
12466
+
12467
+ // packages/agent-runtime/builtinPlatformAgentConfigs.ts
12468
+ function resolveBuiltinPlatformAgentConfig(agentRef) {
12469
+ return BUILTIN_PLATFORM_AGENT_CONFIGS[agentRef] ?? null;
12470
+ }
12471
+ var BUILTIN_PLATFORM_AGENT_CONFIGS;
12472
+ var init_builtinPlatformAgentConfigs = __esm({
12473
+ "packages/agent-runtime/builtinPlatformAgentConfigs.ts"() {
12474
+ "use strict";
12475
+ init_builtinAgents();
12476
+ BUILTIN_PLATFORM_AGENT_CONFIGS = {
12477
+ [PUBLIC_DEEPSEEK_V4_FLASH_AGENT_KEY]: {
12478
+ key: PUBLIC_DEEPSEEK_V4_FLASH_AGENT_KEY,
12479
+ name: "DeepSeek V4 Flash",
12480
+ provider: "nolo",
12481
+ model: "deepseek-v4-flash",
12482
+ apiSource: "platform",
12483
+ useServerProxy: true,
12484
+ rawRecord: {
12485
+ dbKey: PUBLIC_DEEPSEEK_V4_FLASH_AGENT_KEY,
12486
+ isPublic: true,
12487
+ provider: "nolo",
12488
+ model: "deepseek-v4-flash",
12489
+ apiSource: "platform",
12490
+ useServerProxy: true
12491
+ }
12492
+ },
12493
+ [PUBLIC_DEEPSEEK_V4_PRO_AGENT_KEY]: {
12494
+ key: PUBLIC_DEEPSEEK_V4_PRO_AGENT_KEY,
12495
+ name: "DeepSeek V4 Pro",
12496
+ provider: "deepseek",
12497
+ model: "deepseek-v4-pro",
12498
+ apiSource: "platform",
12499
+ useServerProxy: true,
12500
+ rawRecord: {
12501
+ dbKey: PUBLIC_DEEPSEEK_V4_PRO_AGENT_KEY,
12502
+ isPublic: true,
12503
+ provider: "deepseek",
12504
+ model: "deepseek-v4-pro",
12505
+ apiSource: "platform",
12506
+ useServerProxy: true
12507
+ }
12508
+ },
12509
+ [PUBLIC_GLM_52_AGENT_KEY]: {
12510
+ key: PUBLIC_GLM_52_AGENT_KEY,
12511
+ name: "GLM 5.2",
12512
+ provider: "nolo",
12513
+ model: "glm-5.2",
12514
+ apiSource: "platform",
12515
+ useServerProxy: true,
12516
+ rawRecord: {
12517
+ dbKey: PUBLIC_GLM_52_AGENT_KEY,
12518
+ isPublic: true,
12519
+ provider: "nolo",
12520
+ model: "glm-5.2",
12521
+ apiSource: "platform",
12522
+ useServerProxy: true
12523
+ }
12524
+ },
12525
+ [PUBLIC_KIMI_K26_IMAGE_AGENT_KEY]: {
12526
+ key: PUBLIC_KIMI_K26_IMAGE_AGENT_KEY,
12527
+ name: "Kimi K2.6",
12528
+ provider: "ollama-cloud",
12529
+ model: "kimi-k2.6",
12530
+ apiSource: "platform",
12531
+ useServerProxy: true,
12532
+ rawRecord: {
12533
+ dbKey: PUBLIC_KIMI_K26_IMAGE_AGENT_KEY,
12534
+ isPublic: true,
12535
+ provider: "ollama-cloud",
12536
+ model: "kimi-k2.6",
12537
+ apiSource: "platform",
12538
+ useServerProxy: true
12539
+ }
12540
+ },
12541
+ [PUBLIC_KIMI_K27_CODING_AGENT_KEY]: {
12542
+ key: PUBLIC_KIMI_K27_CODING_AGENT_KEY,
12543
+ name: "Kimi K2.7 Coding",
12544
+ provider: "ollama-cloud",
12545
+ model: "kimi-k2.7-code",
12546
+ apiSource: "platform",
12547
+ useServerProxy: true,
12548
+ rawRecord: {
12549
+ dbKey: PUBLIC_KIMI_K27_CODING_AGENT_KEY,
12550
+ isPublic: true,
12551
+ provider: "ollama-cloud",
12552
+ model: "kimi-k2.7-code",
12553
+ apiSource: "platform",
12554
+ useServerProxy: true
12555
+ }
12556
+ },
12557
+ [BUILTIN_NOLO_AGENT_KEY]: {
12558
+ key: BUILTIN_NOLO_AGENT_KEY,
12559
+ name: "Nolo",
12560
+ provider: "nolo",
12561
+ model: "deepseek-v4-flash",
12562
+ apiSource: "platform",
12563
+ useServerProxy: true,
12564
+ rawRecord: {
12565
+ dbKey: BUILTIN_NOLO_AGENT_KEY,
12566
+ isPublic: true,
12567
+ provider: "nolo",
12568
+ model: "deepseek-v4-flash",
12569
+ apiSource: "platform",
12570
+ useServerProxy: true
12571
+ }
12572
+ }
12573
+ };
12574
+ }
12575
+ });
12576
+
12434
12577
  // packages/cli/client/localDialogRecords.ts
12435
12578
  function buildLocalDialogWritePlan(args2) {
12436
12579
  return buildAgentRuntimeDialogWritePlan({
@@ -12490,7 +12633,9 @@ async function readAgentFromStore(args2) {
12490
12633
  return resolveAgentRuntimeConfigFromRecord(key, record);
12491
12634
  }
12492
12635
  const normalizedRef = normalizeAgentHandle(args2.agentRef);
12493
- if (!normalizedRef) return null;
12636
+ if (!normalizedRef) {
12637
+ return resolveBuiltinPlatformAgentConfig(args2.agentRef);
12638
+ }
12494
12639
  try {
12495
12640
  const iterator = args2.store.iterator({
12496
12641
  gte: "agent-",
@@ -12504,7 +12649,7 @@ async function readAgentFromStore(args2) {
12504
12649
  }
12505
12650
  } catch {
12506
12651
  }
12507
- return null;
12652
+ return resolveBuiltinPlatformAgentConfig(args2.agentRef);
12508
12653
  }
12509
12654
  async function readDialogMessages(args2) {
12510
12655
  const messages = [];
@@ -12520,6 +12665,7 @@ var init_cliLocalAgentRecordReader = __esm({
12520
12665
  "packages/cli/client/cliLocalAgentRecordReader.ts"() {
12521
12666
  "use strict";
12522
12667
  init_agent_runtime();
12668
+ init_builtinPlatformAgentConfigs();
12523
12669
  init_localAgentRecords();
12524
12670
  init_agentHandle();
12525
12671
  init_keys2();
@@ -12693,7 +12839,7 @@ function resolveLocalUserId(env) {
12693
12839
  function isBuiltinNoloAgentRef(ref) {
12694
12840
  if (typeof ref !== "string") return false;
12695
12841
  const normalized = ref.trim();
12696
- return normalized === BUILTIN_NOLO_AGENT_KEY || normalized === BUILTIN_NOLO_AGENT_ID || normalized.endsWith(`-${BUILTIN_NOLO_AGENT_ID}`);
12842
+ return normalized === BUILTIN_NOLO_AGENT_KEY2 || normalized === BUILTIN_NOLO_AGENT_ID || normalized.endsWith(`-${BUILTIN_NOLO_AGENT_ID}`);
12697
12843
  }
12698
12844
  function isBuiltinNoloAgentConfig(agentConfig) {
12699
12845
  const key = agentConfig?.key || agentConfig?.rawRecord?.dbKey || agentConfig?.rawRecord?.agentKey;
@@ -12734,7 +12880,7 @@ function extractLastUserText2(messages) {
12734
12880
  function localTurnHasSubjectRefs(input2) {
12735
12881
  return Array.isArray(input2.runtimeContext?.subjectRefs) && input2.runtimeContext.subjectRefs.length > 0;
12736
12882
  }
12737
- var BUILTIN_NOLO_AGENT_KEY, BUILTIN_NOLO_AGENT_ID;
12883
+ var BUILTIN_NOLO_AGENT_KEY2, BUILTIN_NOLO_AGENT_ID;
12738
12884
  var init_cliAgentConfigHelpers = __esm({
12739
12885
  "packages/cli/client/cliAgentConfigHelpers.ts"() {
12740
12886
  "use strict";
@@ -12743,7 +12889,7 @@ var init_cliAgentConfigHelpers = __esm({
12743
12889
  init_agentAliases();
12744
12890
  init_cliEnvHelpers();
12745
12891
  init_localRuntimeHelpers();
12746
- BUILTIN_NOLO_AGENT_KEY = NOLO_DEFAULT_AGENT_KEY;
12892
+ BUILTIN_NOLO_AGENT_KEY2 = NOLO_DEFAULT_AGENT_KEY;
12747
12893
  BUILTIN_NOLO_AGENT_ID = NOLO_DEFAULT_AGENT_ID;
12748
12894
  }
12749
12895
  });
@@ -31926,39 +32072,6 @@ var init_readRequestManager = __esm({
31926
32072
  }
31927
32073
  });
31928
32074
 
31929
- // packages/core/builtinAgents.ts
31930
- var BUILTIN_NOLO_AGENT_KEY2, BUILTIN_APP_BUILDER_AGENT_KEY, BUILTIN_ECOMMERCE_AGENT_KEY, BUILTIN_AGENT_CREATOR_AGENT_KEY, BUILTIN_FEEDBACK_AGENT_KEY, BUILTIN_CHROME_OPERATOR_AGENT_KEY, PUBLIC_DEEPSEEK_V4_FLASH_AGENT_ID, PUBLIC_DEEPSEEK_V4_FLASH_AGENT_KEY, PUBLIC_DEEPSEEK_V4_PRO_AGENT_ID, PUBLIC_DEEPSEEK_V4_PRO_AGENT_KEY, PUBLIC_KIMI_K27_CODING_AGENT_ID, PUBLIC_KIMI_K27_CODING_AGENT_KEY, PUBLIC_GLM_52_AGENT_ID, PUBLIC_GLM_52_AGENT_KEY, PUBLIC_KIMI_K26_IMAGE_AGENT_ID, PUBLIC_KIMI_K26_IMAGE_AGENT_KEY, BUILTIN_PLATFORM_AGENT_KEYS, BUILTIN_PLATFORM_AGENT_KEY_SET;
31931
- var init_builtinAgents = __esm({
31932
- "packages/core/builtinAgents.ts"() {
31933
- "use strict";
31934
- BUILTIN_NOLO_AGENT_KEY2 = "agent-pub-01NOLOAPPBLD000000019KCKT0";
31935
- BUILTIN_APP_BUILDER_AGENT_KEY = "agent-pub-01APPBUILDER00000001YAII3I";
31936
- BUILTIN_ECOMMERCE_AGENT_KEY = "agent-pub-01ECOMMERCEAG00000001PYQ2J";
31937
- BUILTIN_AGENT_CREATOR_AGENT_KEY = "agent-pub-01NOLOAGENTCRT000000000001";
31938
- BUILTIN_FEEDBACK_AGENT_KEY = "agent-pub-01NOLOFEEDBACKA000000000R2";
31939
- BUILTIN_CHROME_OPERATOR_AGENT_KEY = "agent-pub-01CHROMEOPR000000000001";
31940
- PUBLIC_DEEPSEEK_V4_FLASH_AGENT_ID = "01DSV4FLASHPB00000000JFPFD";
31941
- PUBLIC_DEEPSEEK_V4_FLASH_AGENT_KEY = `agent-pub-${PUBLIC_DEEPSEEK_V4_FLASH_AGENT_ID}`;
31942
- PUBLIC_DEEPSEEK_V4_PRO_AGENT_ID = "01DSV4PROPUB00000001A9OLZN";
31943
- PUBLIC_DEEPSEEK_V4_PRO_AGENT_KEY = `agent-pub-${PUBLIC_DEEPSEEK_V4_PRO_AGENT_ID}`;
31944
- PUBLIC_KIMI_K27_CODING_AGENT_ID = "01KIMIK27CODEOL000000001";
31945
- PUBLIC_KIMI_K27_CODING_AGENT_KEY = `agent-pub-${PUBLIC_KIMI_K27_CODING_AGENT_ID}`;
31946
- PUBLIC_GLM_52_AGENT_ID = "01GLM52CHAT00000000001U721";
31947
- PUBLIC_GLM_52_AGENT_KEY = `agent-pub-${PUBLIC_GLM_52_AGENT_ID}`;
31948
- PUBLIC_KIMI_K26_IMAGE_AGENT_ID = "01KIMIK26OLLAMA0000000001";
31949
- PUBLIC_KIMI_K26_IMAGE_AGENT_KEY = `agent-pub-${PUBLIC_KIMI_K26_IMAGE_AGENT_ID}`;
31950
- BUILTIN_PLATFORM_AGENT_KEYS = [
31951
- BUILTIN_NOLO_AGENT_KEY2,
31952
- BUILTIN_APP_BUILDER_AGENT_KEY,
31953
- BUILTIN_ECOMMERCE_AGENT_KEY,
31954
- BUILTIN_AGENT_CREATOR_AGENT_KEY,
31955
- BUILTIN_FEEDBACK_AGENT_KEY,
31956
- BUILTIN_CHROME_OPERATOR_AGENT_KEY
31957
- ];
31958
- BUILTIN_PLATFORM_AGENT_KEY_SET = new Set(BUILTIN_PLATFORM_AGENT_KEYS);
31959
- }
31960
- });
31961
-
31962
32075
  // packages/database/actions/agentReadResolution.ts
31963
32076
  var BUILTIN_PLATFORM_AGENT_KEYS2, BUILTIN_PLATFORM_AGENT_KEY_SET2, normalizeServer2, isBuiltinPlatformAgentKey, resolveAgentReadServers;
31964
32077
  var init_agentReadResolution = __esm({
@@ -33709,80 +33822,83 @@ var init_colors = __esm({
33709
33822
  }
33710
33823
  };
33711
33824
  catppuccin = {
33825
+ // 保留 catppuccin 的柔和圆角 + 弹性缓动;色值换成 Ghostty "GitHub Light/Dark Default"
33826
+ // 官方 palette,获得通透高对比的观感。合成后名字/位次不变,DEFAULT_THEME_NAME 不动。
33827
+ // Reviewer 改进:dark textTertiary/quaternary 提亮达 WCAG AA;light warning 改琥珀色;
33828
+ // light backgroundElevated 拉开与画布的层级,大圆角浮层不再粘连。
33712
33829
  meta: { radiusBoost: 2, motionEase: "cubic-bezier(0.22, 1, 0.36, 1)" },
33713
33830
  light: {
33714
- // Catppuccin Latte — 白底冷调
33715
- primary: "#1E66F5",
33716
- primaryLight: "#7287FD",
33717
- primaryDark: "#0D52D4",
33718
- primaryGradient: "linear-gradient(135deg, #1E66F5, #7287FD)",
33719
- primaryGhost: "rgba(30, 102, 245, 0.08)",
33720
- primaryHover: "rgba(30, 102, 245, 0.10)",
33721
- borderAccent: "#89B4FA",
33722
- success: "#40A02B",
33723
- warning: "#DF8E1D",
33724
- info: "#04A5E5",
33725
- error: "#D20F39",
33726
- background: "#FCFDFE",
33727
- backgroundSecondary: "#F1F4F9",
33728
- backgroundTertiary: "#E6E9F1",
33729
- backgroundGhost: "rgba(252, 253, 254, 0.94)",
33730
- backgroundHover: "#DCE0EA",
33731
- backgroundSelected: "#CCD2DF",
33732
- backgroundElevated: "#EBEFF6",
33733
- // 雾灰下沉面板:与 #FCFDFE 画布/字段拉开对比,修复 surface 层级倒挂
33734
- text: "#4C4F69",
33735
- textSecondary: "#5C5F77",
33736
- textTertiary: "#6C6F85",
33737
- textQuaternary: "#9799A4",
33738
- textLight: "#BCC0CF",
33739
- placeholder: "#8C8FA1",
33740
- border: "#DCDFE8",
33741
- borderHover: "#C6C9D5",
33742
- borderLight: "#EFF2F7",
33743
- messageBackground: "#FFFFFF",
33744
- codeBackground: "#EEF1F6",
33745
- shadowLight: "rgba(76, 79, 105, 0.05)",
33746
- shadowMedium: "rgba(76, 79, 105, 0.09)",
33747
- shadowHeavy: "rgba(76, 79, 105, 0.14)",
33831
+ // Ghostty GitHub Light Default — 纯白 canvas + blue-500 accent
33832
+ primary: "#0969DA",
33833
+ primaryLight: "#218BFF",
33834
+ primaryDark: "#0550AE",
33835
+ primaryGradient: "linear-gradient(135deg, #0969DA, #218BFF)",
33836
+ primaryGhost: "rgba(9,105,218,0.08)",
33837
+ primaryHover: "rgba(9,105,218,0.10)",
33838
+ borderAccent: "#54AEFF",
33839
+ success: "#116329",
33840
+ warning: "#9A6700",
33841
+ info: "#0969DA",
33842
+ error: "#CF222E",
33843
+ background: "#FFFFFF",
33844
+ backgroundSecondary: "#F6F8FA",
33845
+ backgroundTertiary: "#E8ECF0",
33846
+ backgroundGhost: "rgba(255,255,255,0.94)",
33847
+ backgroundHover: "#E8ECF0",
33848
+ backgroundSelected: "#D0D7DE",
33849
+ backgroundElevated: "#F6F8FA",
33850
+ text: "#1F2328",
33851
+ textSecondary: "#57606A",
33852
+ textTertiary: "#6E7781",
33853
+ textQuaternary: "#8C959F",
33854
+ textLight: "#D0D7DE",
33855
+ placeholder: "#6E7781",
33856
+ border: "#D0D7DE",
33857
+ borderHover: "#B1BAC4",
33858
+ borderLight: "#D8DEE4",
33859
+ messageBackground: "#F6F8FA",
33860
+ codeBackground: "#F6F8FA",
33861
+ shadowLight: "rgba(0,0,0,0.04)",
33862
+ shadowMedium: "rgba(0,0,0,0.08)",
33863
+ shadowHeavy: "rgba(0,0,0,0.14)",
33748
33864
  textOnPrimary: "#FFFFFF"
33749
33865
  },
33750
33866
  dark: {
33751
- // Catppuccin Mocha — 层级修正
33752
- primary: "#89B4FA",
33753
- primaryLight: "#B4BEFE",
33754
- primaryDark: "#1E66F5",
33755
- primaryGradient: "linear-gradient(135deg, #89B4FA, #B4BEFE)",
33756
- primaryGhost: "rgba(137, 180, 250, 0.10)",
33757
- primaryHover: "rgba(137, 180, 250, 0.14)",
33758
- borderAccent: "#313244",
33759
- success: "#A6E3A1",
33760
- warning: "#F9E2AF",
33761
- info: "#94E2D5",
33762
- error: "#F38BA8",
33763
- background: "#1E1E2E",
33764
- backgroundSecondary: "#181825",
33765
- backgroundTertiary: "#313244",
33766
- backgroundGhost: "rgba(24, 24, 37, 0.94)",
33767
- backgroundHover: "#45475A",
33768
- backgroundSelected: "#585B70",
33769
- backgroundElevated: "#313244",
33770
- text: "#CDD6F4",
33771
- textSecondary: "#BAC2DE",
33772
- textTertiary: "#A6ADC8",
33773
- textQuaternary: "#6C7086",
33774
- textLight: "#585B70",
33775
- placeholder: "#6C7086",
33776
- border: "#313244",
33777
- borderHover: "#585B70",
33778
- borderLight: "#181825",
33779
- messageBackground: "#181825",
33780
- codeBackground: "#11111B",
33781
- shadowLight: "rgba(17, 17, 27, 0.22)",
33782
- shadowMedium: "rgba(17, 17, 27, 0.34)",
33783
- shadowHeavy: "rgba(17, 17, 27, 0.46)",
33784
- textHeading: "#F5E0DC",
33785
- textOnPrimary: "#1E1E2E"
33867
+ // Ghostty GitHub Dark Default — #0D1117 canvas + sky blue #58A6FF accent
33868
+ primary: "#58A6FF",
33869
+ primaryLight: "#79C0FF",
33870
+ primaryDark: "#1F6FEB",
33871
+ primaryGradient: "linear-gradient(135deg, #58A6FF, #79C0FF)",
33872
+ primaryGhost: "rgba(88,166,255,0.10)",
33873
+ primaryHover: "rgba(88,166,255,0.12)",
33874
+ borderAccent: "#1F6FEB",
33875
+ success: "#3FB950",
33876
+ warning: "#D29922",
33877
+ info: "#58A6FF",
33878
+ error: "#FF7B72",
33879
+ background: "#0D1117",
33880
+ backgroundSecondary: "#161B22",
33881
+ backgroundTertiary: "#21262D",
33882
+ backgroundGhost: "rgba(13,17,23,0.94)",
33883
+ backgroundHover: "#1C2128",
33884
+ backgroundSelected: "#1F6FEB",
33885
+ backgroundElevated: "#161B22",
33886
+ text: "#E6EDF3",
33887
+ textSecondary: "#B1BAC4",
33888
+ textTertiary: "#8B949E",
33889
+ textQuaternary: "#6E7681",
33890
+ textLight: "#30363D",
33891
+ placeholder: "#6E7681",
33892
+ border: "#30363D",
33893
+ borderHover: "#424A53",
33894
+ borderLight: "#21262D",
33895
+ messageBackground: "#161B22",
33896
+ codeBackground: "#161B22",
33897
+ shadowLight: "rgba(13,17,23,0.18)",
33898
+ shadowMedium: "rgba(13,17,23,0.30)",
33899
+ shadowHeavy: "rgba(13,17,23,0.44)",
33900
+ textHeading: "#E6EDF3",
33901
+ textOnPrimary: "#0D1117"
33786
33902
  }
33787
33903
  };
33788
33904
  }
@@ -34070,7 +34186,7 @@ var init_init = __esm({
34070
34186
  nolotusId = "0e95801d90";
34071
34187
  ADMIN_IDS = /* @__PURE__ */ new Set([nolotusId]);
34072
34188
  isSystemAdmin = (userId) => userId != null && ADMIN_IDS.has(userId);
34073
- noloAgentId = BUILTIN_NOLO_AGENT_KEY2;
34189
+ noloAgentId = BUILTIN_NOLO_AGENT_KEY;
34074
34190
  }
34075
34191
  });
34076
34192
 
@@ -91914,23 +92030,23 @@ var init_theme = __esm({
91914
92030
  },
91915
92031
  catppuccin: {
91916
92032
  light: {
91917
- accent: { hex: "1E66F5", ansiFallback: "\x1B[34m" },
91918
- chrome: { hex: "9CCFD8", ansiFallback: "\x1B[90m" },
91919
- success: { hex: "40A02B", ansiFallback: "\x1B[32m" },
91920
- warning: { hex: "DF8E1D", ansiFallback: "\x1B[33m" },
91921
- info: { hex: "04A5E5", ansiFallback: "\x1B[36m" },
91922
- danger: { hex: "D20F39", ansiFallback: "\x1B[31m" },
91923
- muted: { hex: "7C7F93", ansiFallback: "\x1B[90m" }
92033
+ accent: { hex: "0969DA", ansiFallback: "\x1B[34m" },
92034
+ chrome: { hex: "57606A", ansiFallback: "\x1B[90m" },
92035
+ success: { hex: "116329", ansiFallback: "\x1B[32m" },
92036
+ warning: { hex: "9A6700", ansiFallback: "\x1B[33m" },
92037
+ info: { hex: "0969DA", ansiFallback: "\x1B[36m" },
92038
+ danger: { hex: "CF222E", ansiFallback: "\x1B[31m" },
92039
+ muted: { hex: "6E7781", ansiFallback: "\x1B[90m" }
91924
92040
  },
91925
92041
  dark: {
91926
- accent: { hex: "89B4FA", ansiFallback: "\x1B[34m" },
91927
- // mocha blue
91928
- chrome: { hex: "6C7086", ansiFallback: "\x1B[90m" },
91929
- success: { hex: "A6E3A1", ansiFallback: "\x1B[32m" },
91930
- warning: { hex: "F9E2AF", ansiFallback: "\x1B[33m" },
91931
- info: { hex: "94E2D5", ansiFallback: "\x1B[36m" },
91932
- danger: { hex: "F38BA8", ansiFallback: "\x1B[31m" },
91933
- muted: { hex: "A6ADC8", ansiFallback: "\x1B[90m" }
92042
+ accent: { hex: "58A6FF", ansiFallback: "\x1B[34m" },
92043
+ // GitHub sky blue
92044
+ chrome: { hex: "6E7681", ansiFallback: "\x1B[90m" },
92045
+ success: { hex: "3FB950", ansiFallback: "\x1B[32m" },
92046
+ warning: { hex: "D29922", ansiFallback: "\x1B[33m" },
92047
+ info: { hex: "58A6FF", ansiFallback: "\x1B[36m" },
92048
+ danger: { hex: "FF7B72", ansiFallback: "\x1B[31m" },
92049
+ muted: { hex: "B1BAC4", ansiFallback: "\x1B[90m" }
91934
92050
  }
91935
92051
  },
91936
92052
  wave: {
@@ -92016,12 +92132,12 @@ var init_theme = __esm({
92016
92132
  }
92017
92133
  }
92018
92134
  };
92019
- activeThemeName = "trail";
92135
+ activeThemeName = "catppuccin";
92020
92136
  activeBrightness = null;
92021
92137
  activeDensity = "spacious";
92022
92138
  SURFACE_HEX = {
92023
92139
  trail: { light: "E4E8EC", dark: "313244" },
92024
- catppuccin: { light: "E6E9EF", dark: "313244" },
92140
+ catppuccin: { light: "E8ECF0", dark: "161B22" },
92025
92141
  wave: { light: "E5E1D6", dark: "2A2A37" },
92026
92142
  iris: { light: "E9E8F2", dark: "2A2740" },
92027
92143
  rose: { light: "F2EAE4", dark: "26233A" },
@@ -93479,7 +93595,7 @@ function formatSearchTreeBlockForCli(items, colorEnabled) {
93479
93595
  `;
93480
93596
  const treeLines = lines.map((l) => {
93481
93597
  const connector = themeText(` ${l.connector}`, "chrome", true);
93482
- const queryText = themeText(l.queryText, "info", true);
93598
+ const queryText = themeText(l.queryText, "muted", true);
93483
93599
  return `${connector}${queryText}`;
93484
93600
  }).join("\n");
93485
93601
  return `${headerLine}${treeLines}
@@ -93502,7 +93618,7 @@ function formatReadTreeBlockForCli(items, colorEnabled) {
93502
93618
  `;
93503
93619
  const treeLines = lines.map((l) => {
93504
93620
  const connector = themeText(` ${l.connector}`, "chrome", true);
93505
- const pathText = themeText(l.pathWithRange, "info", true);
93621
+ const pathText = themeText(l.pathWithRange, "muted", true);
93506
93622
  return `${connector}${pathText}`;
93507
93623
  }).join("\n");
93508
93624
  return `${headerLine}${treeLines}
@@ -93525,7 +93641,7 @@ function formatRunTreeBlockForCli(items, colorEnabled) {
93525
93641
  `;
93526
93642
  const treeLines = lines.map((l) => {
93527
93643
  const connector = themeText(` ${l.connector}`, "chrome", true);
93528
- const commandText = themeText(l.commandText, "info", true);
93644
+ const commandText = themeText(l.commandText, "muted", true);
93529
93645
  return `${connector}${commandText}`;
93530
93646
  }).join("\n");
93531
93647
  return `${headerLine}${treeLines}
@@ -93548,7 +93664,7 @@ function formatFetchTreeBlockForCli(items, colorEnabled) {
93548
93664
  `;
93549
93665
  const treeLines = lines.map((l) => {
93550
93666
  const connector = themeText(` ${l.connector}`, "chrome", true);
93551
- const urlText = themeText(l.urlText, "info", true);
93667
+ const urlText = themeText(l.urlText, "muted", true);
93552
93668
  return `${connector}${urlText}`;
93553
93669
  }).join("\n");
93554
93670
  return `${headerLine}${treeLines}
@@ -107178,6 +107294,57 @@ var init_dialogHost = __esm({
107178
107294
  }
107179
107295
  });
107180
107296
 
107297
+ // packages/ai/agent/utils/sortUtils.ts
107298
+ function sortAgentsFavoriteOwnedPublic(items) {
107299
+ const map = /* @__PURE__ */ new Map();
107300
+ for (const item of items) {
107301
+ const existing = map.get(item.key);
107302
+ if (!existing) {
107303
+ map.set(item.key, { ...item });
107304
+ continue;
107305
+ }
107306
+ map.set(item.key, {
107307
+ ...existing,
107308
+ ...item,
107309
+ key: existing.key,
107310
+ favoritedAt: Math.max(existing.favoritedAt ?? 0, item.favoritedAt ?? 0) || void 0,
107311
+ isOwned: Boolean(existing.isOwned || item.isOwned),
107312
+ isPublic: Boolean(existing.isPublic || item.isPublic),
107313
+ updatedAt: Math.max(existing.updatedAt ?? 0, item.updatedAt ?? 0),
107314
+ order: existing.order ?? item.order
107315
+ });
107316
+ }
107317
+ const arr = Array.from(map.values());
107318
+ arr.sort((a, b) => {
107319
+ const aFav = a.favoritedAt != null && a.favoritedAt > 0;
107320
+ const bFav = b.favoritedAt != null && b.favoritedAt > 0;
107321
+ if (aFav !== bFav) return aFav ? -1 : 1;
107322
+ if (aFav && bFav) {
107323
+ const diff = (b.favoritedAt ?? 0) - (a.favoritedAt ?? 0);
107324
+ if (diff !== 0) return diff;
107325
+ }
107326
+ const aOwned = Boolean(a.isOwned);
107327
+ const bOwned = Boolean(b.isOwned);
107328
+ if (aOwned !== bOwned) return aOwned ? -1 : 1;
107329
+ const aPublic = Boolean(a.isPublic);
107330
+ const bPublic = Boolean(b.isPublic);
107331
+ if (aPublic !== bPublic) return aPublic ? -1 : 1;
107332
+ const tsDiff = (b.updatedAt ?? 0) - (a.updatedAt ?? 0);
107333
+ if (tsDiff !== 0) return tsDiff;
107334
+ const aOrder = a.order ?? Number.POSITIVE_INFINITY;
107335
+ const bOrder = b.order ?? Number.POSITIVE_INFINITY;
107336
+ if (aOrder !== bOrder) return aOrder - bOrder;
107337
+ return a.key.localeCompare(b.key);
107338
+ });
107339
+ return arr;
107340
+ }
107341
+ var init_sortUtils = __esm({
107342
+ "packages/ai/agent/utils/sortUtils.ts"() {
107343
+ "use strict";
107344
+ init_optionalNumber();
107345
+ }
107346
+ });
107347
+
107181
107348
  // packages/cli/tui/agentCatalog.ts
107182
107349
  function formatAgentSourceLabel(entry) {
107183
107350
  if (entry.kind === "platform" || entry.apiSource === "platform") return "\u5E73\u53F0";
@@ -107224,15 +107391,17 @@ function mergeCatalogEntries(currentKey, platformAgents, privateAgents, favorite
107224
107391
  for (const entry of platformAgents) {
107225
107392
  if (entry.key !== currentKey) push(entry);
107226
107393
  }
107227
- const sortedPrivate = [...privateAgents].sort((a, b) => {
107228
- const fa = favoritedAtByKey[a.key] ?? 0;
107229
- const fb = favoritedAtByKey[b.key] ?? 0;
107230
- if (fa !== fb) return fb - fa;
107231
- const tb = b.updatedAt ?? 0;
107232
- const ta = a.updatedAt ?? 0;
107233
- if (tb !== ta) return tb - ta;
107234
- return a.name.localeCompare(b.name);
107235
- });
107394
+ const sortablePrivate = privateAgents.map((entry) => ({
107395
+ key: entry.key,
107396
+ favoritedAt: favoritedAtByKey[entry.key],
107397
+ isOwned: true,
107398
+ updatedAt: entry.updatedAt ?? 0
107399
+ }));
107400
+ const sortedKeys = sortAgentsFavoriteOwnedPublic(sortablePrivate);
107401
+ const sortedKeyOrder = new Map(sortedKeys.map((item, i) => [item.key, i]));
107402
+ const sortedPrivate = [...privateAgents].sort(
107403
+ (a, b) => (sortedKeyOrder.get(a.key) ?? 0) - (sortedKeyOrder.get(b.key) ?? 0)
107404
+ );
107236
107405
  for (const entry of sortedPrivate) {
107237
107406
  if (entry.key !== currentKey) push(entry);
107238
107407
  }
@@ -107361,6 +107530,7 @@ var init_agentCatalog = __esm({
107361
107530
  init_agentCommandSupport();
107362
107531
  init_agentRecordHelpers();
107363
107532
  init_cliEnvHelpers();
107533
+ init_sortUtils();
107364
107534
  DEFAULT_TUI_AGENT_KEY = "agent-pub-01NOLOAPPBLD000000019KCKT0";
107365
107535
  PLATFORM_AGENTS = [
107366
107536
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nolo-cli",
3
- "version": "0.3.1",
3
+ "version": "0.4.1",
4
4
  "type": "module",
5
5
  "description": "Agent-first terminal workspace for Nolo",
6
6
  "bin": {