@mmmbuto/nexuscli 0.9.4 → 0.9.6

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/README.md CHANGED
@@ -27,19 +27,24 @@ NexusCLI is a lightweight, Termux-first AI cockpit to orchestrate Claude Code, C
27
27
 
28
28
  ---
29
29
 
30
- ## Highlights (v0.9.4)
30
+ ## Highlights (v0.9.6)
31
+
32
+ - **Jobs Runner Restored**: `jobs` route works again after cleanup regression
33
+ - **Termux-Safe Execution**: no hardcoded `/bin` or `/usr/bin` paths for job tools
34
+ - **Cleaner Errors**: job SSE errors now display correctly in UI
35
+
36
+ ### v0.9.5
37
+
38
+ - **GPT-5.2 Codex**: Added latest frontier agentic coding model as default
39
+ - Updated Codex model catalog to match latest OpenAI CLI
40
+
41
+ ### v0.9.4
31
42
 
32
43
  - **Dark/Light Theme**: Toggle between themes via UserMenu (persisted in localStorage)
33
44
  - **Rate Limiting**: Chat endpoints now protected (10 req/min per user)
34
45
  - **Architecture Docs**: New `docs/ARCHITECTURE.md` with system diagrams
35
46
  - CSS refactored to use CSS variables for theming support
36
47
 
37
- ### v0.9.3
38
-
39
- - Fix: sanitize Termux workspace paths (auto-correct `/data/data/com/termux/...`), preventing Claude spawn ENOENT and stalled GLM-4.6/DeepSeek runs.
40
- - Workspaces API now filters/merges invalid paths so the UI dropdown stays clean.
41
- - Session importer reads `cwd` from Claude session files when available (more accurate workspace mapping).
42
-
43
48
  ## Features
44
49
 
45
50
  - Multi-engine support (Claude, Codex, Gemini)
@@ -58,7 +63,7 @@ NexusCLI is a lightweight, Termux-first AI cockpit to orchestrate Claude Code, C
58
63
  |--------|--------|----------|
59
64
  | **Claude (native)** | Opus 4.5, Sonnet 4.5, Haiku 4.5 | Anthropic |
60
65
  | **Claude-compatible** | DeepSeek (deepseek-*), GLM-4.6 | DeepSeek, Z.ai |
61
- | **Codex** | GPT-5.1, GPT-5.1 Codex (Mini/Max) | OpenAI |
66
+ | **Codex** | GPT-5.2 Codex, GPT-5.2, GPT-5.1 Codex (Mini/Max), GPT-5.1 | OpenAI |
62
67
  | **Gemini** | Gemini 3 Pro Preview, Gemini 3 Flash Preview | Google |
63
68
 
64
69
  ---
@@ -8614,4 +8614,4 @@ ${J}`);const nn={id:`user-${Date.now()}`,role:"user",content:De,created_at:Date.
8614
8614
  🇪🇸 Tu interfaz para tu CLI de IAs.
8615
8615
  🇨🇳 你的 AI CLI 界面。
8616
8616
  🇯🇵 あなたの AI CLI インターフェース。
8617
- 🇷🇺 Твой интерфейс для CLI ИИ.`,subtitle:""},kSe="Nuova Chat",gSe="Workspace",vSe="Invia",MSe={inputPlaceholder:"Scrivi un messaggio..."},xSe={searchPlaceholder:"Cerca chat..."},wSe={welcome:mSe,newChat:kSe,workspace:gSe,send:vSe,chat:MSe,sidebar:xSe},bSe={title:"🇬🇧 Your interface for your AIs CLI",subtitle:""},_Se="New Chat",SSe="Workspace",LSe="Send",NSe={inputPlaceholder:"Type a message..."},CSe={searchPlaceholder:"Search chats..."},ISe={welcome:bSe,newChat:_Se,workspace:SSe,send:LSe,chat:NSe,sidebar:CSe},ASe={title:"🇪🇸 Tu interfaz para tu CLI de IAs",subtitle:""},ESe="Nueva Chat",TSe="Espacio de trabajo",zSe="Enviar",$Se={inputPlaceholder:"Escribe un mensaje..."},RSe={searchPlaceholder:"Buscar chats..."},OSe={welcome:ASe,newChat:ESe,workspace:TSe,send:zSe,chat:$Se,sidebar:RSe},DSe={title:"🇷🇺 Твой интерфейс для CLI ИИ",subtitle:""},PSe="Новый чат",qSe="Рабочее пространство",FSe="Отправить",BSe={inputPlaceholder:"Введите сообщение..."},HSe={searchPlaceholder:"Поиск чатов..."},jSe={welcome:DSe,newChat:PSe,workspace:qSe,send:FSe,chat:BSe,sidebar:HSe},VSe={title:"🇯🇵 あなたの AI CLI インターフェース",subtitle:""},USe="新しいチャット",GSe="ワークスペース",WSe="送信",KSe={inputPlaceholder:"メッセージを入力..."},ZSe={searchPlaceholder:"チャットを検索..."},XSe={welcome:VSe,newChat:USe,workspace:GSe,send:WSe,chat:KSe,sidebar:ZSe},YSe={title:"🇨🇳 你的 AI CLI 界面",subtitle:""},QSe="新对话",JSe="工作区",eLe="发送",tLe={inputPlaceholder:"输入消息..."},nLe={searchPlaceholder:"搜索对话..."},aLe={welcome:YSe,newChat:QSe,workspace:JSe,send:eLe,chat:tLe,sidebar:nLe};Tt.use(OH).use(IU).init({resources:{it:{translation:wSe},en:{translation:ISe},es:{translation:OSe},ru:{translation:jSe},ja:{translation:XSe},zh:{translation:aLe}},fallbackLng:"it",debug:!1,interpolation:{escapeValue:!1},detection:{order:["localStorage","navigator"],caches:["localStorage"]}});ZA.createRoot(document.getElementById("root")).render(_.jsx(aj.StrictMode,{children:_.jsx(C_e,{})}));
8617
+ 🇷🇺 Твой интерфейс для CLI ИИ.`,subtitle:""},kSe="Nuova Chat",gSe="Workspace",vSe="Invia",MSe={inputPlaceholder:"Scrivi un messaggio..."},xSe={searchPlaceholder:"Cerca chat..."},wSe={welcome:mSe,newChat:kSe,workspace:gSe,send:vSe,chat:MSe,sidebar:xSe},bSe={title:"🇬🇧 Your interface for your AIs CLI",subtitle:""},_Se="New Chat",SSe="Workspace",LSe="Send",NSe={inputPlaceholder:"Type a message..."},CSe={searchPlaceholder:"Search chats..."},ISe={welcome:bSe,newChat:_Se,workspace:SSe,send:LSe,chat:NSe,sidebar:CSe},ASe={title:"🇪🇸 Tu interfaz para tu CLI de IAs",subtitle:""},ESe="Nueva Chat",TSe="Espacio de trabajo",zSe="Enviar",$Se={inputPlaceholder:"Escribe un mensaje..."},RSe={searchPlaceholder:"Buscar chats..."},OSe={welcome:ASe,newChat:ESe,workspace:TSe,send:zSe,chat:$Se,sidebar:RSe},DSe={title:"🇷🇺 Твой интерфейс для CLI ИИ",subtitle:""},PSe="Новый чат",qSe="Рабочее пространство",FSe="Отправить",BSe={inputPlaceholder:"Введите сообщение..."},HSe={searchPlaceholder:"Поиск чатов..."},jSe={welcome:DSe,newChat:PSe,workspace:qSe,send:FSe,chat:BSe,sidebar:HSe},VSe={title:"🇯🇵 あなたの AI CLI インターフェース",subtitle:""},USe="新しいチャット",GSe="ワークスペース",WSe="送信",KSe={inputPlaceholder:"メッセージを入力..."},ZSe={searchPlaceholder:"チャットを検索..."},XSe={welcome:VSe,newChat:USe,workspace:GSe,send:WSe,chat:KSe,sidebar:ZSe},YSe={title:"🇨🇳 你的 AI CLI 界面",subtitle:""},QSe="新对话",JSe="工作区",eLe="发送",tLe={inputPlaceholder:"输入消息..."},nLe={searchPlaceholder:"搜索对话..."},aLe={welcome:YSe,newChat:QSe,workspace:JSe,send:eLe,chat:tLe,sidebar:nLe};Tt.use(OH).use(IU).init({resources:{it:{translation:wSe},en:{translation:ISe},es:{translation:OSe},ru:{translation:jSe},ja:{translation:XSe},zh:{translation:aLe}},fallbackLng:"en",debug:!1,interpolation:{escapeValue:!1},detection:{order:["localStorage","navigator"],caches:["localStorage"]}});ZA.createRoot(document.getElementById("root")).render(_.jsx(aj.StrictMode,{children:_.jsx(C_e,{})}));
@@ -59,7 +59,7 @@
59
59
 
60
60
  <!-- Prevent Scaling on iOS -->
61
61
  <meta name="format-detection" content="telephone=no" />
62
- <script type="module" crossorigin src="/assets/index-CxYyVrH5.js"></script>
62
+ <script type="module" crossorigin src="/assets/index-CvOYN8ds.js"></script>
63
63
  <link rel="stylesheet" crossorigin href="/assets/index-BAfxoAUN.css">
64
64
  </head>
65
65
  <body>
@@ -1,5 +1,5 @@
1
1
  // NexusCLI Service Worker
2
- const CACHE_VERSION = 'nexuscli-v1766695496989';
2
+ const CACHE_VERSION = 'nexuscli-v1766701518522';
3
3
  const STATIC_CACHE = `${CACHE_VERSION}-static`;
4
4
  const DYNAMIC_CACHE = `${CACHE_VERSION}-dynamic`;
5
5
 
@@ -80,11 +80,21 @@ function getCliTools() {
80
80
  enabled: true,
81
81
  endpoint: '/api/v1/codex',
82
82
  models: [
83
+ {
84
+ id: 'gpt-5.2-codex',
85
+ name: 'gpt-5.2-codex',
86
+ label: 'GPT-5.2 Codex',
87
+ description: '🤖 Latest frontier agentic coding model',
88
+ category: 'codex',
89
+ reasoningEfforts: ['low', 'medium', 'high', 'xhigh'],
90
+ defaultReasoning: 'xhigh',
91
+ default: true
92
+ },
83
93
  {
84
94
  id: 'gpt-5.2',
85
95
  name: 'gpt-5.2',
86
96
  label: 'GPT-5.2',
87
- description: '🧠 Next Gen Reasoning',
97
+ description: '🧠 Latest frontier model',
88
98
  category: 'codex',
89
99
  reasoningEfforts: ['low', 'medium', 'high', 'xhigh'],
90
100
  defaultReasoning: 'xhigh'
@@ -93,11 +103,10 @@ function getCliTools() {
93
103
  id: 'gpt-5.1-codex-max',
94
104
  name: 'gpt-5.1-codex-max',
95
105
  label: 'GPT-5.1 Codex Max',
96
- description: '💎 Extra High reasoning (best)',
106
+ description: '💎 Deep and fast reasoning',
97
107
  category: 'codex',
98
108
  reasoningEfforts: ['low', 'medium', 'high', 'xhigh'],
99
- defaultReasoning: 'xhigh',
100
- default: true
109
+ defaultReasoning: 'xhigh'
101
110
  },
102
111
  {
103
112
  id: 'gpt-5.1-codex',
@@ -10,6 +10,9 @@ class CliWrapper {
10
10
  constructor(options = {}) {
11
11
  this.workspaceDir = options.workspaceDir || process.cwd();
12
12
  this.activeJobs = new Map();
13
+ this.defaultShell = process.env.SHELL || 'bash';
14
+ this.defaultPython = 'python3';
15
+ this.defaultNode = process.execPath || 'node';
13
16
  }
14
17
 
15
18
  /**
@@ -23,18 +26,18 @@ class CliWrapper {
23
26
  const startTime = Date.now();
24
27
 
25
28
  // Determine shell command
26
- let shellCmd = '/bin/bash';
29
+ let shellCmd = this.defaultShell;
27
30
  let args = ['-c', command];
28
31
 
29
32
  // Tool-specific handling
30
33
  if (tool === 'bash') {
31
- shellCmd = '/bin/bash';
34
+ shellCmd = this.defaultShell;
32
35
  args = ['-c', command];
33
36
  } else if (tool === 'python') {
34
- shellCmd = '/usr/bin/python3';
37
+ shellCmd = this.defaultPython;
35
38
  args = ['-c', command];
36
39
  } else if (tool === 'node') {
37
- shellCmd = '/usr/bin/node';
40
+ shellCmd = this.defaultNode;
38
41
  args = ['-e', command];
39
42
  } else {
40
43
  // Generic: assume tool is in PATH
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmmbuto/nexuscli",
3
- "version": "0.9.4",
3
+ "version": "0.9.6",
4
4
  "description": "NexusCLI - TRI CLI Control Plane (Claude/Codex/Gemini)",
5
5
  "main": "lib/server/server.js",
6
6
  "bin": {