@serkanalgur/opencode-nexus 2.2.0 → 2.3.0

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/dist/index.js +46 -0
  2. package/dist/tui.js +101 -88
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -11930,6 +11930,7 @@ You are a technical writer who creates documentation that developers actually wa
11930
11930
  },
11931
11931
  additionalProperties: false
11932
11932
  },
11933
+ options: { codemode: true },
11933
11934
  execute: async (input) => {
11934
11935
  const { detailed } = input;
11935
11936
  const status = orchestrator.getStatus(detailed);
@@ -11947,6 +11948,7 @@ You are a technical writer who creates documentation that developers actually wa
11947
11948
  },
11948
11949
  additionalProperties: false
11949
11950
  },
11951
+ options: { codemode: true },
11950
11952
  execute: async (input) => {
11951
11953
  const { filter } = input;
11952
11954
  return { content: orchestrator.listAgents(filter) };
@@ -11960,6 +11962,7 @@ You are a technical writer who creates documentation that developers actually wa
11960
11962
  properties: {},
11961
11963
  additionalProperties: false
11962
11964
  },
11965
+ options: { codemode: true },
11963
11966
  execute: async () => {
11964
11967
  return { content: orchestrator.getCostReport() };
11965
11968
  }
@@ -11972,6 +11975,7 @@ You are a technical writer who creates documentation that developers actually wa
11972
11975
  properties: {},
11973
11976
  additionalProperties: false
11974
11977
  },
11978
+ options: { codemode: true },
11975
11979
  execute: async () => {
11976
11980
  const state = orchestrator.getState();
11977
11981
  await ctx.storage.set("orchestrator-state", JSON.parse(JSON.stringify(state)));
@@ -11986,6 +11990,7 @@ You are a technical writer who creates documentation that developers actually wa
11986
11990
  properties: {},
11987
11991
  additionalProperties: false
11988
11992
  },
11993
+ options: { codemode: true },
11989
11994
  execute: async () => {
11990
11995
  const state = orchestrator.getState();
11991
11996
  const tasks = state.tasks || [];
@@ -12004,6 +12009,7 @@ You are a technical writer who creates documentation that developers actually wa
12004
12009
  required: ["level"],
12005
12010
  additionalProperties: false
12006
12011
  },
12012
+ options: { codemode: true },
12007
12013
  execute: async (input) => {
12008
12014
  const { level, basePath } = input;
12009
12015
  orchestrator.configManager.saveConfig(level, basePath || process.cwd());
@@ -12023,6 +12029,7 @@ You are a technical writer who creates documentation that developers actually wa
12023
12029
  required: ["level"],
12024
12030
  additionalProperties: false
12025
12031
  },
12032
+ options: { codemode: true },
12026
12033
  execute: async (input) => {
12027
12034
  const { level, basePath } = input;
12028
12035
  const path = basePath || process.cwd();
@@ -12049,6 +12056,7 @@ You are a technical writer who creates documentation that developers actually wa
12049
12056
  required: ["name"],
12050
12057
  additionalProperties: false
12051
12058
  },
12059
+ options: { codemode: true },
12052
12060
  execute: async (input) => {
12053
12061
  const { name } = input;
12054
12062
  try {
@@ -12070,6 +12078,7 @@ You are a technical writer who creates documentation that developers actually wa
12070
12078
  },
12071
12079
  additionalProperties: false
12072
12080
  },
12081
+ options: { codemode: true },
12073
12082
  execute: async (input) => {
12074
12083
  const { port, host } = input;
12075
12084
  orchestrator.startDashboard(port, host);
@@ -12084,6 +12093,7 @@ You are a technical writer who creates documentation that developers actually wa
12084
12093
  properties: {},
12085
12094
  additionalProperties: false
12086
12095
  },
12096
+ options: { codemode: true },
12087
12097
  execute: async () => {
12088
12098
  orchestrator.stopDashboard();
12089
12099
  return { content: "Dashboard stopped" };
@@ -12101,6 +12111,7 @@ You are a technical writer who creates documentation that developers actually wa
12101
12111
  },
12102
12112
  additionalProperties: false
12103
12113
  },
12114
+ options: { codemode: true },
12104
12115
  execute: async (input) => {
12105
12116
  const { model, setInput, setOutput } = input;
12106
12117
  if (model && setInput !== undefined && setOutput !== undefined) {
@@ -12141,6 +12152,7 @@ You are a technical writer who creates documentation that developers actually wa
12141
12152
  required: ["role", "task"],
12142
12153
  additionalProperties: false
12143
12154
  },
12155
+ options: { codemode: true },
12144
12156
  execute: async (input) => {
12145
12157
  const { role, task, model, wait, timeout } = input;
12146
12158
  try {
@@ -12277,6 +12289,7 @@ You are a technical writer who creates documentation that developers actually wa
12277
12289
  required: ["role", "task"],
12278
12290
  additionalProperties: false
12279
12291
  },
12292
+ options: { codemode: true },
12280
12293
  execute: async (input) => {
12281
12294
  const { role, task, model, timeout } = input;
12282
12295
  try {
@@ -12340,6 +12353,7 @@ You are a technical writer who creates documentation that developers actually wa
12340
12353
  },
12341
12354
  additionalProperties: false
12342
12355
  },
12356
+ options: { codemode: true },
12343
12357
  execute: async (input) => {
12344
12358
  const { name, baseDir } = input;
12345
12359
  if (!name || name === "list") {
@@ -12363,6 +12377,7 @@ You are a technical writer who creates documentation that developers actually wa
12363
12377
  properties: {},
12364
12378
  additionalProperties: false
12365
12379
  },
12380
+ options: { codemode: true },
12366
12381
  execute: async () => {
12367
12382
  const scores = orchestrator.performanceTracker.getScores();
12368
12383
  if (scores.length === 0)
@@ -12383,6 +12398,7 @@ You are a technical writer who creates documentation that developers actually wa
12383
12398
  required: ["role"],
12384
12399
  additionalProperties: false
12385
12400
  },
12401
+ options: { codemode: true },
12386
12402
  execute: async (input) => {
12387
12403
  const { role } = input;
12388
12404
  const best = orchestrator.performanceTracker.getBestModel(role);
@@ -12403,6 +12419,7 @@ You are a technical writer who creates documentation that developers actually wa
12403
12419
  required: ["content"],
12404
12420
  additionalProperties: false
12405
12421
  },
12422
+ options: { codemode: true },
12406
12423
  execute: async (input) => {
12407
12424
  const { content, filename } = input;
12408
12425
  const issues = orchestrator.securityScanner.scanContent(content, filename || "unknown");
@@ -12420,6 +12437,7 @@ You are a technical writer who creates documentation that developers actually wa
12420
12437
  },
12421
12438
  additionalProperties: false
12422
12439
  },
12440
+ options: { codemode: true },
12423
12441
  execute: async (input) => {
12424
12442
  const { count } = input;
12425
12443
  const records = count ? orchestrator.executionHistory.getRecent(count) : orchestrator.executionHistory.getAll();
@@ -12438,6 +12456,7 @@ You are a technical writer who creates documentation that developers actually wa
12438
12456
  properties: {},
12439
12457
  additionalProperties: false
12440
12458
  },
12459
+ options: { codemode: true },
12441
12460
  execute: async () => {
12442
12461
  const stats = orchestrator.executionHistory.getStats();
12443
12462
  return { content: `Total: ${stats.total} | Success: ${(stats.successRate * 100).toFixed(1)}% | Cost: $${stats.totalCost.toFixed(4)} | Avg: ${stats.avgDuration.toFixed(0)}ms
@@ -12452,6 +12471,7 @@ By role: ${JSON.stringify(stats.byRole)}` };
12452
12471
  properties: {},
12453
12472
  additionalProperties: false
12454
12473
  },
12474
+ options: { codemode: true },
12455
12475
  execute: async () => {
12456
12476
  const roles = orchestrator.customRoles.list();
12457
12477
  if (roles.length === 0)
@@ -12475,6 +12495,7 @@ By role: ${JSON.stringify(stats.byRole)}` };
12475
12495
  },
12476
12496
  required: ["name", "displayName", "prompt"]
12477
12497
  },
12498
+ options: { codemode: true },
12478
12499
  execute: async (input) => {
12479
12500
  const { name, displayName, emoji, prompt, model } = input;
12480
12501
  orchestrator.customRoles.register({ name, displayName, emoji: emoji || "\uD83E\uDD16", prompt, model });
@@ -12491,6 +12512,7 @@ By role: ${JSON.stringify(stats.byRole)}` };
12491
12512
  },
12492
12513
  required: ["tasks"]
12493
12514
  },
12515
+ options: { codemode: true },
12494
12516
  execute: async (input) => {
12495
12517
  const { tasks } = input;
12496
12518
  const taskList = JSON.parse(tasks);
@@ -12525,6 +12547,7 @@ Total: ~$${result.totalEstimatedCost.toFixed(4)}`);
12525
12547
  name: "worktree.enable",
12526
12548
  description: "Enable git worktree isolation for agents",
12527
12549
  input: { type: "object", properties: { repoRoot: { type: "string", description: "Repository root (defaults to cwd)" } } },
12550
+ options: { codemode: true },
12528
12551
  execute: async (input) => {
12529
12552
  const { repoRoot } = input;
12530
12553
  orchestrator.enableWorktrees(repoRoot || process.cwd());
@@ -12535,6 +12558,7 @@ Total: ~$${result.totalEstimatedCost.toFixed(4)}`);
12535
12558
  name: "worktree.list",
12536
12559
  description: "List active agent worktrees",
12537
12560
  input: { type: "object", properties: {}, additionalProperties: false },
12561
+ options: { codemode: true },
12538
12562
  execute: async () => {
12539
12563
  if (!orchestrator.worktreeManager)
12540
12564
  return { content: "Worktree isolation not enabled." };
@@ -12549,6 +12573,7 @@ Total: ~$${result.totalEstimatedCost.toFixed(4)}`);
12549
12573
  name: "worktree.disable",
12550
12574
  description: "Disable worktree isolation and clean up",
12551
12575
  input: { type: "object", properties: {}, additionalProperties: false },
12576
+ options: { codemode: true },
12552
12577
  execute: async () => {
12553
12578
  if (orchestrator.worktreeManager) {
12554
12579
  orchestrator.worktreeManager.cleanupAll();
@@ -12561,6 +12586,7 @@ Total: ~$${result.totalEstimatedCost.toFixed(4)}`);
12561
12586
  name: "sessions",
12562
12587
  description: "List all active Nexus agent sessions",
12563
12588
  input: { type: "object", properties: {}, additionalProperties: false },
12589
+ options: { codemode: true },
12564
12590
  execute: async () => {
12565
12591
  const agents = orchestrator.getState().agents;
12566
12592
  if (agents.length === 0)
@@ -12578,6 +12604,7 @@ ${lines.join(`
12578
12604
  name: "background",
12579
12605
  description: "Move running agents to background (detach from current session)",
12580
12606
  input: { type: "object", properties: {}, additionalProperties: false },
12607
+ options: { codemode: true },
12581
12608
  execute: async () => {
12582
12609
  const agents = orchestrator.getState().agents.filter((a) => a.status === "working" || a.status === "idle");
12583
12610
  if (agents.length === 0)
@@ -12600,6 +12627,7 @@ ${lines.join(`
12600
12627
  },
12601
12628
  required: ["sessionID"]
12602
12629
  },
12630
+ options: { codemode: true },
12603
12631
  execute: async (input) => {
12604
12632
  const { sessionID } = input;
12605
12633
  try {
@@ -12628,6 +12656,7 @@ ${lastMsg.content}` };
12628
12656
  required: ["question"],
12629
12657
  additionalProperties: false
12630
12658
  },
12659
+ options: { codemode: true },
12631
12660
  execute: async (input) => {
12632
12661
  const { question, options, assumption } = input;
12633
12662
  const optionList = options ? options.split(",").map((o) => o.trim()) : [];
@@ -12655,6 +12684,7 @@ Options: ${optionList.map((o, i) => `${i + 1}. ${o}`).join(", ")}`;
12655
12684
  required: ["description"],
12656
12685
  additionalProperties: false
12657
12686
  },
12687
+ options: { codemode: true },
12658
12688
  execute: async (input) => {
12659
12689
  const { description, assignedTo } = input;
12660
12690
  const item = orchestrator.todoEnforcer.add(description, assignedTo);
@@ -12669,6 +12699,7 @@ Options: ${optionList.map((o, i) => `${i + 1}. ${o}`).join(", ")}`;
12669
12699
  properties: {},
12670
12700
  additionalProperties: false
12671
12701
  },
12702
+ options: { codemode: true },
12672
12703
  execute: async () => {
12673
12704
  return { content: orchestrator.todoEnforcer.formatAll() };
12674
12705
  }
@@ -12684,6 +12715,7 @@ Options: ${optionList.map((o, i) => `${i + 1}. ${o}`).join(", ")}`;
12684
12715
  required: ["id"],
12685
12716
  additionalProperties: false
12686
12717
  },
12718
+ options: { codemode: true },
12687
12719
  execute: async (input) => {
12688
12720
  const { id } = input;
12689
12721
  const item = orchestrator.todoEnforcer.get(id);
@@ -12701,6 +12733,7 @@ Options: ${optionList.map((o, i) => `${i + 1}. ${o}`).join(", ")}`;
12701
12733
  properties: {},
12702
12734
  additionalProperties: false
12703
12735
  },
12736
+ options: { codemode: true },
12704
12737
  execute: async () => {
12705
12738
  const stats = orchestrator.todoEnforcer.getStats();
12706
12739
  return {
@@ -12725,6 +12758,7 @@ Options: ${optionList.map((o, i) => `${i + 1}. ${o}`).join(", ")}`;
12725
12758
  required: ["description"],
12726
12759
  additionalProperties: false
12727
12760
  },
12761
+ options: { codemode: true },
12728
12762
  execute: async (input) => {
12729
12763
  const { description, autoContinue } = input;
12730
12764
  const goal = goalManager.set(description, autoContinue ?? true);
@@ -12735,6 +12769,7 @@ Options: ${optionList.map((o, i) => `${i + 1}. ${o}`).join(", ")}`;
12735
12769
  name: "goal.status",
12736
12770
  description: "Show current goal status",
12737
12771
  input: { type: "object", properties: {}, additionalProperties: false },
12772
+ options: { codemode: true },
12738
12773
  execute: async () => {
12739
12774
  const goal = goalManager.getActive();
12740
12775
  if (!goal)
@@ -12748,6 +12783,7 @@ Tasks: ${goal.tasks.length}` };
12748
12783
  name: "goal.complete",
12749
12784
  description: "Complete current goal",
12750
12785
  input: { type: "object", properties: {}, additionalProperties: false },
12786
+ options: { codemode: true },
12751
12787
  execute: async () => {
12752
12788
  const goal = goalManager.getActive();
12753
12789
  if (!goal)
@@ -12760,6 +12796,7 @@ Tasks: ${goal.tasks.length}` };
12760
12796
  name: "goal.list",
12761
12797
  description: "List all goals",
12762
12798
  input: { type: "object", properties: {}, additionalProperties: false },
12799
+ options: { codemode: true },
12763
12800
  execute: async () => {
12764
12801
  const goals = goalManager.getAll();
12765
12802
  if (goals.length === 0)
@@ -12777,6 +12814,7 @@ Tasks: ${goal.tasks.length}` };
12777
12814
  properties: {},
12778
12815
  additionalProperties: false
12779
12816
  },
12817
+ options: { codemode: true },
12780
12818
  execute: async () => {
12781
12819
  const active = goalManager.getActive();
12782
12820
  if (!active)
@@ -12803,6 +12841,7 @@ Tasks: ${goal.tasks.length}` };
12803
12841
  properties: {},
12804
12842
  additionalProperties: false
12805
12843
  },
12844
+ options: { codemode: true },
12806
12845
  execute: async () => {
12807
12846
  const active = goalManager.getActive();
12808
12847
  if (!active)
@@ -12827,6 +12866,7 @@ Tasks: ${goal.tasks.length}` };
12827
12866
  properties: {},
12828
12867
  additionalProperties: false
12829
12868
  },
12869
+ options: { codemode: true },
12830
12870
  execute: async () => {
12831
12871
  const goals = goalManager.getAll();
12832
12872
  if (goals.length === 0)
@@ -12854,6 +12894,7 @@ ${lines.join(`
12854
12894
  required: ["name", "leadRole"],
12855
12895
  additionalProperties: false
12856
12896
  },
12897
+ options: { codemode: true },
12857
12898
  execute: async (input) => {
12858
12899
  const { name, leadRole } = input;
12859
12900
  const team = teamManager.create(name, leadRole);
@@ -12877,6 +12918,7 @@ Add members with nexus.team.addMember(teamId="${team.id}", role="...", model="..
12877
12918
  required: ["teamId", "role", "model"],
12878
12919
  additionalProperties: false
12879
12920
  },
12921
+ options: { codemode: true },
12880
12922
  execute: async (input) => {
12881
12923
  const { teamId, role, model } = input;
12882
12924
  const member = teamManager.addMember(teamId, role, model);
@@ -12903,6 +12945,7 @@ Total members: ${team?.members.length || 0}` };
12903
12945
  },
12904
12946
  additionalProperties: false
12905
12947
  },
12948
+ options: { codemode: true },
12906
12949
  execute: async (input) => {
12907
12950
  const { teamId } = input;
12908
12951
  if (teamId) {
@@ -12940,6 +12983,7 @@ ${lines.join(`
12940
12983
  required: ["teamId"],
12941
12984
  additionalProperties: false
12942
12985
  },
12986
+ options: { codemode: true },
12943
12987
  execute: async (input) => {
12944
12988
  const { teamId } = input;
12945
12989
  const team = teamManager.get(teamId);
@@ -12970,6 +13014,7 @@ ${team.members.map((m) => ` - ${m.role}: ${m.model}`).join(`
12970
13014
  required: ["pattern", "language", "directory"],
12971
13015
  additionalProperties: false
12972
13016
  },
13017
+ options: { codemode: true },
12973
13018
  execute: async (input) => {
12974
13019
  const { pattern, language, directory } = input;
12975
13020
  const results = astGrep.search(pattern, language, directory);
@@ -12985,6 +13030,7 @@ ${lines.join(`
12985
13030
  name: "astgrep.status",
12986
13031
  description: "Check if ast-grep is installed",
12987
13032
  input: { type: "object", properties: {}, additionalProperties: false },
13033
+ options: { codemode: true },
12988
13034
  execute: async () => {
12989
13035
  const available = astGrep.isAvailable();
12990
13036
  return { content: available ? "✅ ast-grep is installed" : "❌ ast-grep is not installed. Install with: cargo install ast-grep" };
package/dist/tui.js CHANGED
@@ -34857,104 +34857,117 @@ var tui_default = define({
34857
34857
  pollChildSessions();
34858
34858
  } catch {}
34859
34859
  const agents = sidebarState.agents;
34860
- if (!agents || agents.length === 0) {
34860
+ if (!agents || agents.length === 0)
34861
34861
  return null;
34862
- }
34863
- const activeAgents = agents.filter((a) => a.status === "working" || a.status === "idle");
34864
- const completedAgents = agents.filter((a) => a.status === "completed");
34865
- const failedAgents = agents.filter((a) => a.status === "failed");
34866
- return /* @__PURE__ */ jsxDEV("div", {
34867
- style: {
34868
- padding: "8px",
34869
- borderTop: "1px solid #333",
34870
- marginTop: "8px"
34871
- },
34872
- children: [
34873
- /* @__PURE__ */ jsxDEV("div", {
34874
- style: {
34875
- fontSize: "11px",
34876
- color: "#888",
34877
- marginBottom: "4px",
34878
- display: "flex",
34879
- justifyContent: "space-between",
34880
- alignItems: "center"
34881
- },
34882
- children: [
34883
- /* @__PURE__ */ jsxDEV("span", {
34884
- children: "\uD83E\uDD16 Nexus Agents"
34885
- }, undefined, false, undefined, this),
34886
- /* @__PURE__ */ jsxDEV("span", {
34887
- style: { color: "#666" },
34862
+ try {
34863
+ const activeAgents = agents.filter((a) => a.status === "working" || a.status === "idle");
34864
+ const completedAgents = agents.filter((a) => a.status === "completed");
34865
+ const failedAgents = agents.filter((a) => a.status === "failed");
34866
+ return /* @__PURE__ */ jsxDEV("div", {
34867
+ style: {
34868
+ padding: "8px",
34869
+ borderTop: "1px solid #333",
34870
+ marginTop: "8px"
34871
+ },
34872
+ children: [
34873
+ /* @__PURE__ */ jsxDEV("div", {
34874
+ style: {
34875
+ fontSize: "11px",
34876
+ color: "#888",
34877
+ marginBottom: "4px",
34878
+ display: "flex",
34879
+ justifyContent: "space-between",
34880
+ alignItems: "center"
34881
+ },
34882
+ children: [
34883
+ /* @__PURE__ */ jsxDEV("span", {
34884
+ children: "\uD83E\uDD16 Nexus Agents"
34885
+ }, undefined, false, undefined, this),
34886
+ /* @__PURE__ */ jsxDEV("span", {
34887
+ style: { color: "#666" },
34888
+ children: [
34889
+ activeAgents.length,
34890
+ " active"
34891
+ ]
34892
+ }, undefined, true, undefined, this)
34893
+ ]
34894
+ }, undefined, true, undefined, this),
34895
+ activeAgents.map((agent) => /* @__PURE__ */ jsxDEV("div", {
34896
+ style: {
34897
+ fontSize: "10px",
34898
+ padding: "2px 0",
34899
+ color: agent.status === "working" ? "#4ade80" : "#94a3b8"
34900
+ },
34901
+ children: [
34902
+ /* @__PURE__ */ jsxDEV("span", {
34903
+ children: agent.status === "working" ? "\uD83D\uDD04" : "⏸️"
34904
+ }, undefined, false, undefined, this),
34905
+ " ",
34906
+ agent.name,
34907
+ agent.model && /* @__PURE__ */ jsxDEV("span", {
34908
+ style: { color: "#64748b" },
34909
+ children: [
34910
+ " — ",
34911
+ agent.model.split("/").pop()
34912
+ ]
34913
+ }, undefined, true, undefined, this)
34914
+ ]
34915
+ }, agent.id, true, undefined, this)),
34916
+ completedAgents.length > 0 && /* @__PURE__ */ jsxDEV("div", {
34917
+ style: {
34918
+ marginTop: "4px",
34919
+ paddingTop: "4px",
34920
+ borderTop: "1px solid #222"
34921
+ },
34922
+ children: /* @__PURE__ */ jsxDEV("div", {
34923
+ style: { fontSize: "10px", color: "#666", marginBottom: "2px" },
34888
34924
  children: [
34889
- activeAgents.length,
34890
- " active"
34925
+ "✅ ",
34926
+ completedAgents.length,
34927
+ " completed"
34891
34928
  ]
34892
34929
  }, undefined, true, undefined, this)
34893
- ]
34894
- }, undefined, true, undefined, this),
34895
- activeAgents.map((agent) => /* @__PURE__ */ jsxDEV("div", {
34896
- style: {
34897
- fontSize: "10px",
34898
- padding: "2px 0",
34899
- color: agent.status === "working" ? "#4ade80" : "#94a3b8"
34900
- },
34901
- children: [
34902
- /* @__PURE__ */ jsxDEV("span", {
34903
- children: agent.status === "working" ? "\uD83D\uDD04" : "⏸️"
34904
- }, undefined, false, undefined, this),
34905
- " ",
34906
- agent.name,
34907
- agent.model && /* @__PURE__ */ jsxDEV("span", {
34908
- style: { color: "#64748b" },
34930
+ }, undefined, false, undefined, this),
34931
+ failedAgents.length > 0 && /* @__PURE__ */ jsxDEV("div", {
34932
+ style: { marginTop: "2px" },
34933
+ children: /* @__PURE__ */ jsxDEV("div", {
34934
+ style: { fontSize: "10px", color: "#ef4444", marginBottom: "2px" },
34909
34935
  children: [
34910
- " — ",
34911
- agent.model.split("/").pop()
34936
+ "❌ ",
34937
+ failedAgents.length,
34938
+ " failed"
34912
34939
  ]
34913
34940
  }, undefined, true, undefined, this)
34914
- ]
34915
- }, agent.id, true, undefined, this)),
34916
- completedAgents.length > 0 && /* @__PURE__ */ jsxDEV("div", {
34917
- style: {
34918
- marginTop: "4px",
34919
- paddingTop: "4px",
34920
- borderTop: "1px solid #222"
34921
- },
34922
- children: /* @__PURE__ */ jsxDEV("div", {
34923
- style: { fontSize: "10px", color: "#666", marginBottom: "2px" },
34924
- children: [
34925
- "✅ ",
34926
- completedAgents.length,
34927
- " completed"
34928
- ]
34929
- }, undefined, true, undefined, this)
34930
- }, undefined, false, undefined, this),
34931
- failedAgents.length > 0 && /* @__PURE__ */ jsxDEV("div", {
34932
- style: { marginTop: "2px" },
34933
- children: /* @__PURE__ */ jsxDEV("div", {
34934
- style: { fontSize: "10px", color: "#ef4444", marginBottom: "2px" },
34941
+ }, undefined, false, undefined, this),
34942
+ sidebarState.totalCost > 0 && /* @__PURE__ */ jsxDEV("div", {
34943
+ style: {
34944
+ marginTop: "4px",
34945
+ fontSize: "10px",
34946
+ color: "#666"
34947
+ },
34935
34948
  children: [
34936
- "❌ ",
34937
- failedAgents.length,
34938
- " failed"
34949
+ "\uD83D\uDCB0 $",
34950
+ sidebarState.totalCost.toFixed(4),
34951
+ " / $",
34952
+ sidebarState.budgetRemaining.toFixed(2),
34953
+ " remaining"
34939
34954
  ]
34940
34955
  }, undefined, true, undefined, this)
34941
- }, undefined, false, undefined, this),
34942
- sidebarState.totalCost > 0 && /* @__PURE__ */ jsxDEV("div", {
34943
- style: {
34944
- marginTop: "4px",
34945
- fontSize: "10px",
34946
- color: "#666"
34947
- },
34948
- children: [
34949
- "\uD83D\uDCB0 $",
34950
- sidebarState.totalCost.toFixed(4),
34951
- " / $",
34952
- sidebarState.budgetRemaining.toFixed(2),
34953
- " remaining"
34954
- ]
34955
- }, undefined, true, undefined, this)
34956
- ]
34957
- }, undefined, true, undefined, this);
34956
+ ]
34957
+ }, undefined, true, undefined, this);
34958
+ } catch {
34959
+ const active = agents.filter((a) => a.status === "working").length;
34960
+ const failed = agents.filter((a) => a.status === "failed").length;
34961
+ const completed = agents.filter((a) => a.status === "completed").length;
34962
+ const parts = [`${agents.length} agents`];
34963
+ if (active > 0)
34964
+ parts.push(`${active} active`);
34965
+ if (completed > 0)
34966
+ parts.push(`${completed} done`);
34967
+ if (failed > 0)
34968
+ parts.push(`${failed} failed`);
34969
+ return `\uD83E\uDD16 ${parts.join(", ")}`;
34970
+ }
34958
34971
  }
34959
34972
  });
34960
34973
  return () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serkanalgur/opencode-nexus",
3
- "version": "2.2.0",
3
+ "version": "2.3.0",
4
4
  "description": "Adaptive Multi-Agent Orchestration with Cost Intelligence for OpenCode V2",
5
5
  "keywords": [
6
6
  "opencode",