neoagent 2.3.1-beta.97 → 2.3.1-beta.99

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/.env.example CHANGED
@@ -116,9 +116,9 @@ MINIMAX_API_KEY=your-minimax-api-key-here
116
116
  # Set via: neoagent login github-copilot
117
117
  GITHUB_COPILOT_ACCESS_TOKEN=
118
118
 
119
- # OpenAI Codex OAuth token — used for:
120
- # • Codex-backed chat/coding models (gpt-5.3-codex, gpt-4.1-codex)
121
- # Set via: neoagent login openai-codex
119
+ # OpenAI Codex API key or Codex access token — used for:
120
+ # • Codex-backed chat/coding models (gpt-5.5, gpt-5.4, gpt-5.4-mini)
121
+ # API-key usage goes through the normal OpenAI Responses API endpoint.
122
122
  OPENAI_CODEX_ACCESS_TOKEN=
123
123
  # Optional refresh token if your login flow returns it.
124
124
  OPENAI_CODEX_REFRESH_TOKEN=
@@ -130,7 +130,7 @@ OPENAI_CODEX_REFRESH_TOKEN=
130
130
  # OPENAI_BASE_URL=https://your-openai-compatible-endpoint/v1
131
131
  # ANTHROPIC_BASE_URL=https://your-anthropic-compatible-endpoint
132
132
  # XAI_BASE_URL=https://api.x.ai/v1
133
- # OPENAI_CODEX_BASE_URL=https://chatgpt.com/backend-api/codex
133
+ # OPENAI_CODEX_BASE_URL=https://api.openai.com/v1
134
134
  # OPENAI_CODEX_EDITOR_VERSION=vscode/1.99.0
135
135
  # OPENAI_CODEX_EDITOR_PLUGIN_VERSION=neoagent/1.0.0
136
136
  # OPENAI_CODEX_USER_AGENT=NeoAgent/1.0.0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neoagent",
3
- "version": "2.3.1-beta.97",
3
+ "version": "2.3.1-beta.99",
4
4
  "description": "Proactive personal AI agent with no limits",
5
5
  "license": "MIT",
6
6
  "main": "server/index.js",
@@ -1 +1 @@
1
- e299764c07bc83e074bc914963bc6b6a
1
+ 1f7fbbbdae35e424bcbd5adf22601df0
@@ -37,6 +37,6 @@ _flutter.buildConfig = {"engineRevision":"42d3d75a56efe1a2e9902f52dc8006099c45d9
37
37
 
38
38
  _flutter.loader.load({
39
39
  serviceWorkerSettings: {
40
- serviceWorkerVersion: "818064985" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
40
+ serviceWorkerVersion: "141828066" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
41
41
  }
42
42
  });
@@ -129338,7 +129338,7 @@ r===$&&A.b()
129338
129338
  o.push(A.ii(p,A.iY(!1,new A.a3(B.tM,A.dT(new A.cI(B.he,new A.a5V(r,p),p),p,p),p),!1,B.I,!0),p,p,0,0,0,p))}r=!1
129339
129339
  if(!s.ay)if(!s.ch){r=s.e
129340
129340
  r===$&&A.b()
129341
- r=B.b.t("mp9vo0j5-aadf22e").length!==0&&r.b}if(r){r=s.d
129341
+ r=B.b.t("mp9znmhn-185109e").length!==0&&r.b}if(r){r=s.d
129342
129342
  r===$&&A.b()
129343
129343
  r=r.ag&&!r.V?84:0
129344
129344
  q=s.e
@@ -134146,7 +134146,7 @@ $S:236}
134146
134146
  A.Ys.prototype={}
134147
134147
  A.Rr.prototype={
134148
134148
  mT(a){var s=this
134149
- if(B.b.t("mp9vo0j5-aadf22e").length===0||s.a!=null)return
134149
+ if(B.b.t("mp9znmhn-185109e").length===0||s.a!=null)return
134150
134150
  s.A5()
134151
134151
  s.a=A.q1(B.PP,new A.b58(s))},
134152
134152
  A5(){var s=0,r=A.l(t.H),q,p=2,o=[],n=this,m,l,k,j,i,h,g,f
@@ -134164,7 +134164,7 @@ if(!t.f.b(k)){s=1
134164
134164
  break}i=J.Z(k,"buildId")
134165
134165
  h=i==null?null:B.b.t(J.r(i))
134166
134166
  j=h==null?"":h
134167
- if(J.bm(j)===0||J.d(j,"mp9vo0j5-aadf22e")){s=1
134167
+ if(J.bm(j)===0||J.d(j,"mp9znmhn-185109e")){s=1
134168
134168
  break}n.b=!0
134169
134169
  n.D()
134170
134170
  p=2
@@ -134181,7 +134181,7 @@ case 2:return A.i(o.at(-1),r)}})
134181
134181
  return A.k($async$A5,r)},
134182
134182
  vb(){var s=0,r=A.l(t.H),q,p=2,o=[],n=this,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1
134183
134183
  var $async$vb=A.h(function(a2,a3){if(a2===1){o.push(a3)
134184
- s=p}for(;;)switch(s){case 0:if(B.b.t("mp9vo0j5-aadf22e").length===0||n.c){s=1
134184
+ s=p}for(;;)switch(s){case 0:if(B.b.t("mp9znmhn-185109e").length===0||n.c){s=1
134185
134185
  break}n.c=!0
134186
134186
  n.D()
134187
134187
  p=4
@@ -31,8 +31,8 @@ const STATIC_MODELS = [
31
31
  purpose: 'coding'
32
32
  },
33
33
  {
34
- id: 'gpt-5.4',
35
- label: 'GPT-5.4 (Codex Default)',
34
+ id: 'gpt-5.5',
35
+ label: 'GPT-5.5 (Codex Default)',
36
36
  provider: 'openai-codex',
37
37
  purpose: 'general'
38
38
  },
@@ -42,6 +42,12 @@ const STATIC_MODELS = [
42
42
  provider: 'openai-codex',
43
43
  purpose: 'coding'
44
44
  },
45
+ {
46
+ id: 'gpt-5.4',
47
+ label: 'GPT-5.4 (Codex Fallback)',
48
+ provider: 'openai-codex',
49
+ purpose: 'general'
50
+ },
45
51
  {
46
52
  id: 'gpt-5-nano',
47
53
  label: 'GPT-5 Nano (Fast / Subagents)',
@@ -1,7 +1,7 @@
1
1
  const OpenAI = require('openai');
2
2
  const { BaseProvider } = require('./base');
3
3
 
4
- const DEFAULT_BASE_URL = 'https://chatgpt.com/backend-api/codex';
4
+ const DEFAULT_BASE_URL = 'https://api.openai.com/v1';
5
5
 
6
6
  function normalizeContent(content) {
7
7
  if (content == null) return '';
@@ -136,25 +136,40 @@ class OpenAICodexProvider extends BaseProvider {
136
136
 
137
137
  this.name = 'openai-codex';
138
138
  this.models = [
139
+ 'gpt-5.5',
139
140
  'gpt-5.4',
140
141
  'gpt-5.4-mini',
141
142
  ];
142
143
  this.reasoningModels = new Set([
144
+ 'gpt-5.5',
143
145
  'gpt-5.4',
144
146
  'gpt-5.4-mini',
145
- 'gpt-5.4-nano',
146
147
  ]);
148
+ const defaultHeaders = baseURL.includes('chatgpt.com/backend-api/codex')
149
+ ? {
150
+ 'Editor-Version': process.env.OPENAI_CODEX_EDITOR_VERSION || 'vscode/1.99.0',
151
+ 'Editor-Plugin-Version': process.env.OPENAI_CODEX_EDITOR_PLUGIN_VERSION || 'neoagent/1.0.0',
152
+ 'User-Agent': process.env.OPENAI_CODEX_USER_AGENT || 'NeoAgent/1.0.0',
153
+ }
154
+ : undefined;
155
+
147
156
  this.client = new OpenAI({
148
157
  apiKey: config.apiKey || process.env.OPENAI_CODEX_ACCESS_TOKEN,
149
158
  baseURL,
150
- defaultHeaders: {
151
- 'Editor-Version': process.env.OPENAI_CODEX_EDITOR_VERSION || 'vscode/1.99.0',
152
- 'Editor-Plugin-Version': process.env.OPENAI_CODEX_EDITOR_PLUGIN_VERSION || 'neoagent/1.0.0',
153
- 'User-Agent': process.env.OPENAI_CODEX_USER_AGENT || 'NeoAgent/1.0.0',
154
- },
159
+ defaultHeaders,
155
160
  });
156
161
  }
157
162
 
163
+ formatTools(tools) {
164
+ return tools.map((tool) => ({
165
+ type: 'function',
166
+ name: tool.name,
167
+ description: tool.description || '',
168
+ parameters: tool.parameters || { type: 'object', properties: {} },
169
+ strict: false,
170
+ }));
171
+ }
172
+
158
173
  _isReasoningModel(model) {
159
174
  if (!model) return false;
160
175
  for (const id of this.reasoningModels) {
@@ -200,7 +215,6 @@ class OpenAICodexProvider extends BaseProvider {
200
215
  if (!name || !callId) continue;
201
216
  input.push({
202
217
  type: 'function_call',
203
- id: callId,
204
218
  call_id: callId,
205
219
  name,
206
220
  arguments: argumentsText,
@@ -72,12 +72,12 @@ const AI_PROVIDER_DEFINITIONS = Object.freeze({
72
72
  'openai-codex': {
73
73
  id: 'openai-codex',
74
74
  label: 'OpenAI Codex',
75
- description: 'Use your ChatGPT/Codex subscription as an AI provider.',
75
+ description: 'Use Codex models through OpenAI authentication.',
76
76
  envKey: 'OPENAI_CODEX_ACCESS_TOKEN',
77
77
  supportsApiKey: true,
78
78
  supportsBaseUrl: true,
79
79
  defaultEnabled: false,
80
- defaultBaseUrl: 'https://chatgpt.com/backend-api/codex'
80
+ defaultBaseUrl: 'https://api.openai.com/v1'
81
81
  },
82
82
  ollama: {
83
83
  id: 'ollama',