@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 +13 -8
- package/frontend/dist/assets/{index-CxYyVrH5.js → index-CvOYN8ds.js} +1 -1
- package/frontend/dist/index.html +1 -1
- package/frontend/dist/sw.js +1 -1
- package/lib/config/models.js +13 -4
- package/lib/server/lib/cli-wrapper.js +7 -4
- package/package.json +1 -1
- package/lib/server/package-lock.json +0 -5895
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.
|
|
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.
|
|
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:"
|
|
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,{})}));
|
package/frontend/dist/index.html
CHANGED
|
@@ -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-
|
|
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>
|
package/frontend/dist/sw.js
CHANGED
package/lib/config/models.js
CHANGED
|
@@ -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: '🧠
|
|
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: '💎
|
|
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 =
|
|
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 =
|
|
34
|
+
shellCmd = this.defaultShell;
|
|
32
35
|
args = ['-c', command];
|
|
33
36
|
} else if (tool === 'python') {
|
|
34
|
-
shellCmd =
|
|
37
|
+
shellCmd = this.defaultPython;
|
|
35
38
|
args = ['-c', command];
|
|
36
39
|
} else if (tool === 'node') {
|
|
37
|
-
shellCmd =
|
|
40
|
+
shellCmd = this.defaultNode;
|
|
38
41
|
args = ['-e', command];
|
|
39
42
|
} else {
|
|
40
43
|
// Generic: assume tool is in PATH
|