neoagent 2.1.17 → 2.1.18-beta.0

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
@@ -27,6 +27,12 @@ OPENAI_API_KEY=your-openai-api-key-here
27
27
  # Get your key at: https://aistudio.google.com/app/apikey
28
28
  GOOGLE_AI_KEY=your-google-ai-key-here
29
29
 
30
+ # Google Workspace official integration OAuth client
31
+ # Redirect URI should match ${PUBLIC_URL:-http://localhost:3333}/api/integrations/oauth/callback
32
+ GOOGLE_OAUTH_CLIENT_ID=your-google-oauth-client-id
33
+ GOOGLE_OAUTH_CLIENT_SECRET=your-google-oauth-client-secret
34
+ # GOOGLE_OAUTH_REDIRECT_URI=http://localhost:3333/api/integrations/oauth/callback
35
+
30
36
  # Brave Search API key — used for:
31
37
  # • Native web_search tool (search the web without driving the browser)
32
38
  # Get your key at: https://api.search.brave.com/
@@ -25,6 +25,9 @@ At least one API key is required. The active provider and model are configured i
25
25
  | `OPENAI_API_KEY` | GPT-4o / Whisper (OpenAI) |
26
26
  | `XAI_API_KEY` | Grok (xAI) |
27
27
  | `GOOGLE_AI_KEY` | Gemini (Google) |
28
+ | `GOOGLE_OAUTH_CLIENT_ID` | Google Workspace official integrations OAuth client ID |
29
+ | `GOOGLE_OAUTH_CLIENT_SECRET` | Google Workspace official integrations OAuth client secret |
30
+ | `GOOGLE_OAUTH_REDIRECT_URI` | Optional override for the Google Workspace OAuth callback URL |
28
31
  | `MINIMAX_API_KEY` | MiniMax Code (Coding Plan / Token Plan for `MiniMax-M2.7`) |
29
32
  | `BRAVE_SEARCH_API_KEY` | Brave Search API for the native `web_search` tool |
30
33
  | `DEEPGRAM_API_KEY` | Recordings transcription with Deepgram Nova-3 multilingual |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neoagent",
3
- "version": "2.1.17",
3
+ "version": "2.1.18-beta.0",
4
4
  "description": "Proactive personal AI agent with no limits",
5
5
  "license": "MIT",
6
6
  "main": "server/index.js",
@@ -55,6 +55,7 @@
55
55
  "express": "^4.21.2",
56
56
  "express-rate-limit": "^7.5.0",
57
57
  "express-session": "^1.18.1",
58
+ "googleapis": "^150.0.1",
58
59
  "helmet": "^8.0.0",
59
60
  "multer": "^1.4.5-lts.1",
60
61
  "node-cron": "^3.0.3",
@@ -108,6 +108,33 @@ db.exec(`
108
108
  FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
109
109
  );
110
110
 
111
+ CREATE TABLE IF NOT EXISTS integration_connections (
112
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
113
+ user_id INTEGER NOT NULL,
114
+ provider_key TEXT NOT NULL,
115
+ status TEXT DEFAULT 'not_connected',
116
+ account_email TEXT,
117
+ scopes_json TEXT DEFAULT '[]',
118
+ credentials_json TEXT DEFAULT '{}',
119
+ metadata_json TEXT DEFAULT '{}',
120
+ last_connected_at TEXT,
121
+ created_at TEXT DEFAULT (datetime('now')),
122
+ updated_at TEXT DEFAULT (datetime('now')),
123
+ FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
124
+ UNIQUE(user_id, provider_key)
125
+ );
126
+
127
+ CREATE TABLE IF NOT EXISTS integration_oauth_states (
128
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
129
+ user_id INTEGER NOT NULL,
130
+ provider_key TEXT NOT NULL,
131
+ state TEXT NOT NULL UNIQUE,
132
+ code_verifier TEXT NOT NULL,
133
+ expires_at TEXT NOT NULL,
134
+ created_at TEXT DEFAULT (datetime('now')),
135
+ FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
136
+ );
137
+
111
138
  CREATE TABLE IF NOT EXISTS scheduled_tasks (
112
139
  id INTEGER PRIMARY KEY AUTOINCREMENT,
113
140
  user_id INTEGER NOT NULL,
@@ -173,6 +200,8 @@ db.exec(`
173
200
  CREATE INDEX IF NOT EXISTS idx_agent_runs_user ON agent_runs(user_id, created_at DESC);
174
201
  CREATE INDEX IF NOT EXISTS idx_agent_runs_status ON agent_runs(status);
175
202
  CREATE INDEX IF NOT EXISTS idx_agent_steps_run ON agent_steps(run_id, step_index);
203
+ CREATE INDEX IF NOT EXISTS idx_integration_connections_user ON integration_connections(user_id, provider_key);
204
+ CREATE INDEX IF NOT EXISTS idx_integration_oauth_states_state ON integration_oauth_states(state);
176
205
  CREATE INDEX IF NOT EXISTS idx_messages_user ON messages(user_id, created_at DESC);
177
206
  CREATE INDEX IF NOT EXISTS idx_messages_platform ON messages(platform, platform_chat_id);
178
207
  CREATE INDEX IF NOT EXISTS idx_conv_messages ON conversation_messages(conversation_id, created_at);
@@ -10,6 +10,7 @@ const routeRegistry = [
10
10
  { basePath: '/api/agents', modulePath: '../routes/agents' },
11
11
  { basePath: '/api/messaging', modulePath: '../routes/messaging' },
12
12
  { basePath: '/api/mcp', modulePath: '../routes/mcp' },
13
+ { basePath: '/api/integrations', modulePath: '../routes/integrations' },
13
14
  { basePath: '/api/skills', modulePath: '../routes/skills' },
14
15
  { basePath: '/api/store', modulePath: '../routes/store' },
15
16
  { basePath: '/api/memory', modulePath: '../routes/memory' },
@@ -37,6 +37,6 @@ _flutter.buildConfig = {"engineRevision":"425cfb54d01a9472b3e81d9e76fd63a4a44cfb
37
37
 
38
38
  _flutter.loader.load({
39
39
  serviceWorkerSettings: {
40
- serviceWorkerVersion: "816714754" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
40
+ serviceWorkerVersion: "196428123" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
41
41
  }
42
42
  });