u-foo 3.0.9 → 3.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "u-foo",
3
- "version": "3.0.9",
3
+ "version": "3.0.10",
4
4
  "description": "Multi-Agent Workspace Protocol. Just add u. claude → uclaude, codex → ucodex.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://ufoo.dev",
@@ -45,7 +45,7 @@
45
45
  },
46
46
  "dependencies": {
47
47
  "@anthropic-ai/claude-agent-sdk": "^0.2.138",
48
- "@openai/codex-sdk": "^0.130.0",
48
+ "@openai/codex-sdk": "^0.145.0",
49
49
  "@xterm/addon-serialize": "^0.14.0",
50
50
  "@xterm/headless": "^6.0.0",
51
51
  "chalk": "^4.1.2",
@@ -190,7 +190,13 @@ function buildCommandRegistry(tree) {
190
190
  .sort(sortCommands)
191
191
  .map((cmd) => {
192
192
  const node = tree[cmd] || {};
193
- return { cmd, ...mapNode(node) };
193
+ const entry = { cmd, ...mapNode(node) };
194
+ // Stamp priority so buildCompletions keeps launch → group → bus → ctx
195
+ // at the top of the `/` popup instead of falling back to A–Z.
196
+ if (COMMAND_ORDER_MAP.has(cmd)) {
197
+ entry.order = COMMAND_ORDER_MAP.get(cmd);
198
+ }
199
+ return entry;
194
200
  });
195
201
  }
196
202
 
@@ -3852,13 +3852,24 @@ function createChatApp({ React, ink, props, interactive = true }) {
3852
3852
  const start = Math.min(completionWindowStart, Math.max(0, completions.length - POPUP_PAGE_SIZE));
3853
3853
  const end = Math.min(completions.length, start + POPUP_PAGE_SIZE);
3854
3854
  const visible = completions.slice(start, end);
3855
- return h(Box, { flexDirection: "column" },
3856
- h(Text, { color: "gray" }, "".repeat(Math.max(8, size.cols || 80))),
3855
+ const cols = Math.max(8, size.cols || 80);
3856
+ return h(Box, { flexDirection: "column", width: "100%" },
3857
+ h(Text, { color: "gray" }, "─".repeat(cols)),
3857
3858
  ...visible.map((s, idxInWindow) => {
3858
3859
  const idx = start + idxInWindow;
3859
- return h(Box, { key: `cmp-${idx}` },
3860
- h(Text, { color: idx === completionIndex ? "cyan" : "gray", inverse: idx === completionIndex }, s.label),
3861
- s.description ? h(Text, { color: "gray" }, ` ${s.description}`) : null,
3860
+ const selected = idx === completionIndex;
3861
+ // Keep label+description in one Text with wrap:"truncate".
3862
+ // Sibling Text nodes let Yoga shrink the label mid-command
3863
+ // (e.g. "/group run" / "build-lane" on two lines).
3864
+ const line = s.description
3865
+ ? `${s.label} ${s.description}`
3866
+ : String(s.label || "");
3867
+ return h(Box, { key: `cmp-${idx}`, width: "100%" },
3868
+ h(Text, {
3869
+ color: selected ? "cyan" : "gray",
3870
+ inverse: selected,
3871
+ wrap: "truncate",
3872
+ }, line),
3862
3873
  );
3863
3874
  }),
3864
3875
  );