neoagent 2.3.1-beta.16 → 2.3.1-beta.19

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
@@ -98,6 +98,18 @@ GOOGLE_AI_KEY=your-google-ai-key-here
98
98
  # • MiniMax-M2.7 via the Anthropic-compatible MiniMax endpoint
99
99
  MINIMAX_API_KEY=your-minimax-api-key-here
100
100
 
101
+ # GitHub Copilot OAuth token — used for:
102
+ # • Copilot-backed chat/coding models (gpt-5.3, gpt-4.1)
103
+ # Set via: neoagent login github-copilot
104
+ GITHUB_COPILOT_ACCESS_TOKEN=
105
+
106
+ # OpenAI Codex OAuth token — used for:
107
+ # • Codex-backed chat/coding models (gpt-5.3-codex, gpt-4.1-codex)
108
+ # Set via: neoagent login openai-codex
109
+ OPENAI_CODEX_ACCESS_TOKEN=
110
+ # Optional refresh token if your login flow returns it.
111
+ OPENAI_CODEX_REFRESH_TOKEN=
112
+
101
113
  ########################################
102
114
  # Provider endpoint overrides
103
115
  ########################################
@@ -105,6 +117,10 @@ MINIMAX_API_KEY=your-minimax-api-key-here
105
117
  # OPENAI_BASE_URL=https://your-openai-compatible-endpoint/v1
106
118
  # ANTHROPIC_BASE_URL=https://your-anthropic-compatible-endpoint
107
119
  # XAI_BASE_URL=https://api.x.ai/v1
120
+ # OPENAI_CODEX_BASE_URL=https://chatgpt.com/backend-api/codex
121
+ # OPENAI_CODEX_EDITOR_VERSION=vscode/1.99.0
122
+ # OPENAI_CODEX_EDITOR_PLUGIN_VERSION=neoagent/1.0.0
123
+ # OPENAI_CODEX_USER_AGENT=NeoAgent/1.0.0
108
124
 
109
125
  ########################################
110
126
  # Official integrations
@@ -152,6 +168,12 @@ GITHUB_OAUTH_CLIENT_ID=your-github-oauth-client-id
152
168
  GITHUB_OAUTH_CLIENT_SECRET=your-github-oauth-client-secret
153
169
  GITHUB_OAUTH_REDIRECT_URI=
154
170
 
171
+ # Spotify official integration OAuth client.
172
+ # Redirect URI should match <PUBLIC_URL>/api/integrations/oauth/callback.
173
+ SPOTIFY_OAUTH_CLIENT_ID=your-spotify-oauth-client-id
174
+ SPOTIFY_OAUTH_CLIENT_SECRET=your-spotify-oauth-client-secret
175
+ SPOTIFY_OAUTH_REDIRECT_URI=
176
+
155
177
  ########################################
156
178
  # Tools and media services
157
179
  ########################################
@@ -176,6 +198,10 @@ DEEPGRAM_LANGUAGE=multi
176
198
 
177
199
  OLLAMA_URL=http://localhost:11434
178
200
 
201
+ # Local screen OCR capture (macOS desktop context recorder).
202
+ # Set to false to disable background screen capture/OCR polling.
203
+ NEOAGENT_SCREEN_RECORDER_ENABLED=true
204
+
179
205
  ########################################
180
206
  # Messaging and voice integrations
181
207
  ########################################
@@ -75,10 +75,10 @@ The agent tool `read_health_data` returns summaries and recent samples. It is de
75
75
 
76
76
  NeoAgent has two separate integration layers:
77
77
 
78
- - Official integrations expose structured tools for Google Workspace, Microsoft 365, Notion, Slack, Figma, Home Assistant, Weather, Spotify, and a separate personal WhatsApp connection.
78
+ - Official integrations expose structured tools for Google Workspace, Microsoft 365, Notion, Slack, Figma, Home Assistant, Trello, Weather, Spotify, and a separate personal WhatsApp connection.
79
79
  - Messaging platforms let the agent talk through WhatsApp, Telegram, Discord, Slack, Google Chat, Teams, Matrix, Signal, iMessage/BlueBubbles, IRC, Twitch, LINE, Mattermost, configurable webhook bridges, and Telnyx Voice.
80
80
 
81
- Official integration examples include Gmail thread search and send mail, Google Calendar events, Drive upload/download/export/share links, Docs create/append/replace, Sheets read/update/append/create, Microsoft Outlook/Calendar/OneDrive/Teams tools, Notion search/page/block/database tools, Slack conversation/message tools, Figma file/node/comment/image tools, Home Assistant entity/config reads and service calls, Weather current/forecast tools plus weather-event task triggers, Spotify playback/search/control tools, and a personal WhatsApp integration with isolated chat read/send tools and per-account read-only versus read/write access.
81
+ Official integration examples include Gmail thread search and send mail, Google Calendar events, Drive upload/download/export/share links, Docs create/append/replace, Sheets read/update/append/create, Microsoft Outlook/Calendar/OneDrive/Teams tools, Notion search/page/block/database tools, Slack conversation/message tools, Figma file/node/comment/image tools, Home Assistant entity/config reads and service calls, Trello board/list/card/comment/search tools, Weather current/forecast tools plus weather-event task triggers, Spotify playback/search/control tools, and a personal WhatsApp integration with isolated chat read/send tools and per-account read-only versus read/write access.
82
82
 
83
83
  Messaging examples include Telegram and Discord messages, Slack channel replies, Matrix room messages, Google Chat and Teams webhook delivery, Signal bridge delivery, iMessage/BlueBubbles sends, WhatsApp text and media sends, Telnyx inbound voice, Telnyx outbound calls, and scheduled-task call delivery.
84
84
 
@@ -68,7 +68,7 @@ Recording insight generation is controlled in app AI settings with `auto_recordi
68
68
 
69
69
  ## Official Integrations
70
70
 
71
- Official integrations use OAuth or provider-native account linking and expose structured tools to the agent. The built-in registry currently covers Google Workspace, Notion, Microsoft 365, Slack, Figma, Home Assistant, Weather, Spotify, and personal WhatsApp.
71
+ Official integrations use OAuth or provider-native account linking and expose structured tools to the agent. The built-in registry currently covers Google Workspace, Notion, Microsoft 365, Slack, Figma, Home Assistant, Trello, Weather, Spotify, and personal WhatsApp.
72
72
 
73
73
  All OAuth callbacks default to `PUBLIC_URL + /api/integrations/oauth/callback` unless you set a provider-specific redirect URI.
74
74
 
@@ -95,13 +95,17 @@ All OAuth callbacks default to `PUBLIC_URL + /api/integrations/oauth/callback` u
95
95
  | `HOME_ASSISTANT_OAUTH_CLIENT_SECRET` | Optional fallback Home Assistant OAuth client secret. |
96
96
  | `HOME_ASSISTANT_OAUTH_REDIRECT_URI` | Optional fallback Home Assistant OAuth callback URL. |
97
97
  | `HOME_ASSISTANT_ALLOW_PRIVATE_BASE_URL` | Optional safety override. Set to `1` only if you intentionally allow Home Assistant base URLs on localhost/private networks. |
98
+ | `TRELLO_API_KEY` | Not used. Trello is configured per user in Official Integrations. |
99
+ | `TRELLO_TOKEN` | Not used. Trello is configured per user in Official Integrations. |
98
100
  | `SPOTIFY_OAUTH_CLIENT_ID` | Spotify OAuth client ID |
99
101
  | `SPOTIFY_OAUTH_CLIENT_SECRET` | Spotify OAuth client secret |
100
102
  | `SPOTIFY_OAUTH_REDIRECT_URI` | Optional Spotify OAuth callback URL |
101
103
 
102
- Home Assistant no longer requires server-side setup. Each user can open Official Integrations, select Home Assistant, and enter their own base URL and OAuth app credentials.
104
+ Home Assistant and Trello no longer require server-side setup. Each user can open Official Integrations and enter their own provider-specific credentials in the Flutter UI.
103
105
  For safety, local/private Home Assistant targets are blocked by default unless `HOME_ASSISTANT_ALLOW_PRIVATE_BASE_URL=1` is set on the server.
104
106
 
107
+ Trello uses each user’s own API key and token. Those values are stored securely per user and are never added to server environment variables.
108
+
105
109
  Weather integration uses Open-Meteo public endpoints and does not require OAuth environment variables.
106
110
 
107
111
  ## Messaging
@@ -14,10 +14,13 @@ The built-in registry includes:
14
14
  | Slack | Conversations, history, posting, search, user info, and Slack Web API requests |
15
15
  | Figma | Current user, files, nodes, rendered images, comments, and Figma REST requests |
16
16
  | Home Assistant | Entity/config reads, service calls, and Home Assistant REST API requests |
17
+ | Trello | Boards, lists, cards, comments, search, and Trello REST API requests |
17
18
  | Weather | Keyless Open-Meteo current weather and forecast tools |
18
19
  | Spotify | Playback state, recently played, search, and playback controls |
19
20
 
20
- OAuth app credentials are configured through server environment variables for most providers. Home Assistant can also be configured per-user in the Flutter **Integrations** UI without any server-side setup. Account connections are created in the Flutter UI under **Integrations**. Connected tools are exposed to the agent as structured tools, so prefer them over browser automation when they can do the job.
21
+ OAuth app credentials are configured through server environment variables for most providers. Home Assistant and Trello can also be configured per-user in the Flutter **Integrations** UI without any server-side setup. Account connections are created in the Flutter UI under **Integrations**. Connected tools are exposed to the agent as structured tools, so prefer them over browser automation when they can do the job.
22
+
23
+ Trello uses a user-supplied API key and token instead of OAuth. Those values are stored per user in the encrypted integration config store, and Trello does not need any server environment variables.
21
24
 
22
25
  Weather note: the Weather integration uses Open-Meteo public APIs and does not require OAuth client credentials.
23
26
 
package/lib/manager.js CHANGED
@@ -542,6 +542,40 @@ async function cmdSetup() {
542
542
  const normalizedDeploymentMode = parseDeploymentMode(deploymentMode);
543
543
  const normalizedReleaseChannel = parseReleaseChannel(releaseChannel) || 'stable';
544
544
 
545
+ const githubOauthClientId = await askSecret(
546
+ 'GitHub OAuth client ID',
547
+ current.GITHUB_OAUTH_CLIENT_ID || ''
548
+ );
549
+ const githubOauthClientSecret = await askSecret(
550
+ 'GitHub OAuth client secret',
551
+ current.GITHUB_OAUTH_CLIENT_SECRET || ''
552
+ );
553
+ const githubOauthRedirectUri = await ask(
554
+ 'GitHub OAuth redirect URI',
555
+ current.GITHUB_OAUTH_REDIRECT_URI || ''
556
+ );
557
+
558
+ const homeAssistantOauthClientId = await askSecret(
559
+ 'Home Assistant OAuth client ID',
560
+ current.HOME_ASSISTANT_OAUTH_CLIENT_ID || ''
561
+ );
562
+ const homeAssistantOauthClientSecret = await askSecret(
563
+ 'Home Assistant OAuth client secret',
564
+ current.HOME_ASSISTANT_OAUTH_CLIENT_SECRET || ''
565
+ );
566
+ const homeAssistantOauthRedirectUri = await ask(
567
+ 'Home Assistant OAuth redirect URI',
568
+ current.HOME_ASSISTANT_OAUTH_REDIRECT_URI || ''
569
+ );
570
+ const homeAssistantBaseUrl = await ask(
571
+ 'Home Assistant base URL (e.g., https://ha.example.com)',
572
+ current.HOME_ASSISTANT_BASE_URL || ''
573
+ );
574
+ const homeAssistantAllowPrivateUrl = current.HOME_ASSISTANT_ALLOW_PRIVATE_BASE_URL === '1' ? 'true' : await ask(
575
+ 'Allow local/private Home Assistant base URLs? (true/false)',
576
+ 'false'
577
+ );
578
+
545
579
  const lines = [
546
580
  `NODE_ENV=production`,
547
581
  `PORT=${port}`,
@@ -576,6 +610,14 @@ async function cmdSetup() {
576
610
  figmaOauthClientId ? `FIGMA_OAUTH_CLIENT_ID=${figmaOauthClientId}` : '',
577
611
  figmaOauthClientSecret ? `FIGMA_OAUTH_CLIENT_SECRET=${figmaOauthClientSecret}` : '',
578
612
  figmaOauthRedirectUri ? `FIGMA_OAUTH_REDIRECT_URI=${figmaOauthRedirectUri}` : '',
613
+ githubOauthClientId ? `GITHUB_OAUTH_CLIENT_ID=${githubOauthClientId}` : '',
614
+ githubOauthClientSecret ? `GITHUB_OAUTH_CLIENT_SECRET=${githubOauthClientSecret}` : '',
615
+ githubOauthRedirectUri ? `GITHUB_OAUTH_REDIRECT_URI=${githubOauthRedirectUri}` : '',
616
+ homeAssistantOauthClientId ? `HOME_ASSISTANT_OAUTH_CLIENT_ID=${homeAssistantOauthClientId}` : '',
617
+ homeAssistantOauthClientSecret ? `HOME_ASSISTANT_OAUTH_CLIENT_SECRET=${homeAssistantOauthClientSecret}` : '',
618
+ homeAssistantOauthRedirectUri ? `HOME_ASSISTANT_OAUTH_REDIRECT_URI=${homeAssistantOauthRedirectUri}` : '',
619
+ homeAssistantBaseUrl ? `HOME_ASSISTANT_BASE_URL=${homeAssistantBaseUrl}` : '',
620
+ String(homeAssistantAllowPrivateUrl || '').trim().toLowerCase() === 'true' ? `HOME_ASSISTANT_ALLOW_PRIVATE_BASE_URL=1` : '',
579
621
  deepgramApiKey ? `DEEPGRAM_API_KEY=${deepgramApiKey}` : '',
580
622
  deepgramBaseUrl ? `DEEPGRAM_BASE_URL=${deepgramBaseUrl}` : '',
581
623
  deepgramModel ? `DEEPGRAM_MODEL=${deepgramModel}` : '',
@@ -726,6 +768,8 @@ async function cmdLogin(args = []) {
726
768
  if (data.access_token) {
727
769
  upsertEnvValue('GITHUB_COPILOT_ACCESS_TOKEN', data.access_token);
728
770
  logOk('Successfully authenticated and saved GitHub Copilot access token to .env');
771
+ logInfo('Applying updated provider credentials by restarting NeoAgent...');
772
+ cmdRestart();
729
773
  return;
730
774
  } else if (data.error === 'authorization_pending') {
731
775
  // Continue polling
@@ -830,6 +874,8 @@ async function cmdLogin(args = []) {
830
874
  upsertEnvValue('OPENAI_CODEX_REFRESH_TOKEN', exchangeData.refresh_token);
831
875
  }
832
876
  logOk('Successfully authenticated and saved OpenAI Codex tokens to .env');
877
+ logInfo('Applying updated provider credentials by restarting NeoAgent...');
878
+ cmdRestart();
833
879
  } else {
834
880
  throw new Error('OpenAI token exchange succeeded but did not return an access token.');
835
881
  }
@@ -1124,6 +1170,8 @@ function cmdUpdate(args = []) {
1124
1170
  }
1125
1171
  const versionBefore = currentInstalledVersionLabel();
1126
1172
  let versionAfter = versionBefore;
1173
+ const githubInstallRef = releaseChannel === 'beta' ? '#beta' : '';
1174
+ const githubInstallSpec = `git+https://github.com/NeoLabs-Systems/NeoAgent.git${githubInstallRef}`;
1127
1175
 
1128
1176
  if (fs.existsSync(path.join(APP_DIR, '.git')) && commandExists('git')) {
1129
1177
  const current = runQuiet('git', ['rev-parse', '--short', 'HEAD']);
@@ -1144,17 +1192,16 @@ function cmdUpdate(args = []) {
1144
1192
  buildBundledWebClientIfPossible();
1145
1193
  }
1146
1194
  } else {
1147
- const npmTag = resolvePreferredNpmTag(releaseChannel);
1148
- logWarn(`No git repo detected; attempting npm global update from ${npmTag}.`);
1195
+ logWarn(`No git repo detected; attempting npm global update from ${githubInstallSpec}.`);
1149
1196
  if (commandExists('npm')) {
1150
1197
  try {
1151
1198
  backupRuntimeData();
1152
- runOrThrow('npm', ['install', '-g', `neoagent@${npmTag}`, '--force'], {
1199
+ runOrThrow('npm', ['install', '-g', githubInstallSpec, '--force'], {
1153
1200
  env: withInstallEnv()
1154
1201
  });
1155
- logOk('npm global update completed (forced reinstall)');
1202
+ logOk('npm global update completed (forced reinstall from GitHub)');
1156
1203
  } catch {
1157
- logWarn(`npm global update failed. Run: npm install -g neoagent@${npmTag} --force`);
1204
+ logWarn(`npm global update failed. Run: npm install -g ${githubInstallSpec} --force`);
1158
1205
  }
1159
1206
  } else {
1160
1207
  logWarn('npm not found. Cannot perform global update.');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neoagent",
3
- "version": "2.3.1-beta.16",
3
+ "version": "2.3.1-beta.19",
4
4
  "description": "Proactive personal AI agent with no limits",
5
5
  "license": "MIT",
6
6
  "main": "server/index.js",
@@ -37,6 +37,6 @@ _flutter.buildConfig = {"engineRevision":"59aa584fdf100e6c78c785d8a5b565d1de4b48
37
37
 
38
38
  _flutter.loader.load({
39
39
  serviceWorkerSettings: {
40
- serviceWorkerVersion: "2591082487" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
40
+ serviceWorkerVersion: "568119488" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
41
41
  }
42
42
  });