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 +26 -0
- package/docs/capabilities.md +2 -2
- package/docs/configuration.md +6 -2
- package/docs/integrations.md +4 -1
- package/lib/manager.js +52 -5
- package/package.json +1 -1
- package/server/public/flutter_bootstrap.js +1 -1
- package/server/public/main.dart.js +48133 -47844
- package/server/services/ai/providers/openai.js +2 -1
- package/server/services/ai/providers/openaiCodex.js +6 -1
- package/server/services/desktop/screenRecorder.js +54 -8
- package/server/services/integrations/registry.js +2 -0
- package/server/services/integrations/trello/provider.js +744 -0
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
|
########################################
|
package/docs/capabilities.md
CHANGED
|
@@ -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
|
|
package/docs/configuration.md
CHANGED
|
@@ -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
|
|
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
|
package/docs/integrations.md
CHANGED
|
@@ -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
|
-
|
|
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',
|
|
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
|
|
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
|
@@ -37,6 +37,6 @@ _flutter.buildConfig = {"engineRevision":"59aa584fdf100e6c78c785d8a5b565d1de4b48
|
|
|
37
37
|
|
|
38
38
|
_flutter.loader.load({
|
|
39
39
|
serviceWorkerSettings: {
|
|
40
|
-
serviceWorkerVersion: "
|
|
40
|
+
serviceWorkerVersion: "568119488" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
|
|
41
41
|
}
|
|
42
42
|
});
|