@sulala/agent 0.1.7 → 0.1.9
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 +65 -29
- package/dist/agent/loop.js +1 -1
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/skills-config.js +1 -1
- package/dist/ai/orchestrator.d.ts +2 -0
- package/dist/ai/orchestrator.d.ts.map +1 -1
- package/dist/ai/orchestrator.js +205 -151
- package/dist/ai/orchestrator.js.map +1 -1
- package/dist/channels/telegram.js +1 -1
- package/dist/cli.js +3 -3
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +40 -4
- package/dist/config.js.map +1 -1
- package/dist/gateway/server.d.ts.map +1 -1
- package/dist/gateway/server.js +17 -8
- package/dist/gateway/server.js.map +1 -1
- package/dist/onboard-env.d.ts +1 -1
- package/dist/onboard-env.d.ts.map +1 -1
- package/dist/onboard-env.js +1 -0
- package/dist/onboard-env.js.map +1 -1
- package/dist/onboard.js +2 -2
- package/dist/plugins/index.d.ts +2 -2
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +1 -1
- package/dist/plugins/index.js.map +1 -1
- package/dist/types.d.ts +3 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -2
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAMvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAMvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AA6BzC,8FAA8F;AAC9F,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,+KAA+K;AAC/K,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAsB/D;AAED,gIAAgI;AAChI,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,iEAAiE;AACjE,eAAO,MAAM,0BAA0B,yCAAyC,CAAC;AAEjF,oLAAoL;AACpL,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAKpD;AAED,wIAAwI;AACxI,wBAAgB,wBAAwB,IAAI,MAAM,GAAG,IAAI,CAExD;AA0BD,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9E,wBAAgB,mBAAmB,IAAI,aAAa,EAAE,CAUrD;AAOD,eAAO,MAAM,MAAM,EAAE,MA8DpB,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -4,14 +4,19 @@ import { join, dirname } from 'path';
|
|
|
4
4
|
/** Use os.homedir() for cross-platform home (Unix: $HOME / Windows: USERPROFILE). */
|
|
5
5
|
import { homedir } from 'os';
|
|
6
6
|
import { fileURLToPath } from 'url';
|
|
7
|
-
//
|
|
7
|
+
// Keys we load from ~/.sulala/.env at startup (same whitelist as onboard). Project .env wins (we only set if process.env[key] is unset).
|
|
8
|
+
const SULALA_ENV_LOAD_KEYS = [
|
|
9
|
+
'OPENAI_API_KEY', 'OPENROUTER_API_KEY', 'ANTHROPIC_API_KEY', 'GOOGLE_GEMINI_API_KEY', 'GEMINI_API_KEY',
|
|
10
|
+
'OLLAMA_BASE_URL', 'AI_DEFAULT_PROVIDER', 'GATEWAY_API_KEY', 'PORTAL_GATEWAY_URL', 'PORTAL_API_KEY',
|
|
11
|
+
'ALLOWED_BINARIES',
|
|
12
|
+
];
|
|
8
13
|
(function loadSulalaEnv() {
|
|
9
14
|
const path = join(homedir(), '.sulala', '.env');
|
|
10
15
|
if (!existsSync(path))
|
|
11
16
|
return;
|
|
12
17
|
try {
|
|
13
18
|
const content = readFileSync(path, 'utf8');
|
|
14
|
-
const
|
|
19
|
+
const allow = new Set(SULALA_ENV_LOAD_KEYS);
|
|
15
20
|
for (const line of content.split('\n')) {
|
|
16
21
|
const trimmed = line.trim();
|
|
17
22
|
if (!trimmed || trimmed.startsWith('#'))
|
|
@@ -20,7 +25,7 @@ import { fileURLToPath } from 'url';
|
|
|
20
25
|
if (eq <= 0)
|
|
21
26
|
continue;
|
|
22
27
|
const key = trimmed.slice(0, eq).trim();
|
|
23
|
-
if (!
|
|
28
|
+
if (!allow.has(key) || process.env[key] !== undefined)
|
|
24
29
|
continue;
|
|
25
30
|
const value = trimmed.slice(eq + 1).trim().replace(/^["']|["']$/g, '');
|
|
26
31
|
process.env[key] = value;
|
|
@@ -34,6 +39,37 @@ import { fileURLToPath } from 'url';
|
|
|
34
39
|
export function getSulalaEnvPath() {
|
|
35
40
|
return join(homedir(), '.sulala', '.env');
|
|
36
41
|
}
|
|
42
|
+
/** Get a key from process.env or ~/.sulala/.env (file wins only if process.env[key] is unset). Use at request time so keys saved via dashboard take effect without restart. */
|
|
43
|
+
export function getSulalaEnvKey(key) {
|
|
44
|
+
const fromProcess = process.env[key];
|
|
45
|
+
if (fromProcess !== undefined && fromProcess !== '')
|
|
46
|
+
return fromProcess;
|
|
47
|
+
const path = getSulalaEnvPath();
|
|
48
|
+
if (!existsSync(path))
|
|
49
|
+
return undefined;
|
|
50
|
+
try {
|
|
51
|
+
const content = readFileSync(path, 'utf8');
|
|
52
|
+
const allow = new Set(SULALA_ENV_LOAD_KEYS);
|
|
53
|
+
if (!allow.has(key))
|
|
54
|
+
return undefined;
|
|
55
|
+
for (const line of content.split('\n')) {
|
|
56
|
+
const trimmed = line.trim();
|
|
57
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
58
|
+
continue;
|
|
59
|
+
const eq = trimmed.indexOf('=');
|
|
60
|
+
if (eq <= 0)
|
|
61
|
+
continue;
|
|
62
|
+
const k = trimmed.slice(0, eq).trim();
|
|
63
|
+
if (k !== key)
|
|
64
|
+
continue;
|
|
65
|
+
return trimmed.slice(eq + 1).trim().replace(/^["']|["']$/g, '') || undefined;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// ignore
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
37
73
|
/** Path to ~/.sulala/secrets.json for future use (skill secrets, OAuth tokens). Not yet used; config stores secrets for now. */
|
|
38
74
|
export function getSulalaSecretsPath() {
|
|
39
75
|
return join(homedir(), '.sulala', 'secrets.json');
|
|
@@ -96,7 +132,7 @@ function parseToolProfile(v) {
|
|
|
96
132
|
return 'full';
|
|
97
133
|
}
|
|
98
134
|
export const config = {
|
|
99
|
-
port: parseInt(process.env.PORT || '
|
|
135
|
+
port: parseInt(process.env.PORT || '2026', 10),
|
|
100
136
|
host: process.env.HOST || '127.0.0.1',
|
|
101
137
|
dbPath: process.env.DB_PATH || './data/sulala.db',
|
|
102
138
|
watchFolders: loadWatchFolders(),
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,qFAAqF;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAGpC,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/gateway/server.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,KAAK,OAAO,EAA+B,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/gateway/server.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,KAAK,OAAO,EAA+B,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAIpC,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,IAAI,CAAC;AA8FrD,wBAAgB,aAAa,CAAC,QAAQ,GAAE,OAAO,GAAG,IAAW,GAAG,OAAO,CAkwDtE;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,EACvC,YAAY,GAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAe,GAC/C;IAAE,GAAG,EAAE,eAAe,CAAC;IAAC,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE,CAa9D;AAED,wBAAgB,YAAY,IAAI;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAA;CAAE,CAmBxF"}
|
package/dist/gateway/server.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
2
|
import { createServer } from 'http';
|
|
3
3
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
4
|
-
import { join
|
|
5
|
-
import { fileURLToPath } from 'url';
|
|
4
|
+
import { join } from 'path';
|
|
6
5
|
import { randomBytes } from 'crypto';
|
|
7
6
|
import { WebSocketServer } from 'ws';
|
|
8
7
|
import cors from 'cors';
|
|
@@ -13,6 +12,7 @@ import { scheduleCronById, unscheduleJob } from '../scheduler/cron.js';
|
|
|
13
12
|
import { getTelegramChannelState, setTelegramChannelConfig } from '../channels/telegram.js';
|
|
14
13
|
import { getDiscordChannelState, setDiscordChannelConfig } from '../channels/discord.js';
|
|
15
14
|
import { getStripeChannelState, setStripeChannelConfig } from '../channels/stripe.js';
|
|
15
|
+
import { reloadProviders } from '../ai/orchestrator.js';
|
|
16
16
|
import { runAgentTurn, runAgentTurnStream } from '../agent/loop.js';
|
|
17
17
|
import { runAgentTurnWithPi, isPiAvailable } from '../agent/pi-runner.js';
|
|
18
18
|
import { listTools, executeTool } from '../agent/tools.js';
|
|
@@ -26,8 +26,8 @@ import { withSessionLock } from '../agent/session-queue.js';
|
|
|
26
26
|
import { listPendingActions, getPendingAction, getPendingActionForReplay, setPendingActionApproved, setPendingActionRejected, sanitizeArgsForDisplay, } from '../agent/pending-actions.js';
|
|
27
27
|
import { isOllamaReachable, startOllamaServeForApi, runOllamaInstall, setPullProgressCallback, pullOllamaModel } from '../ollama-setup.js';
|
|
28
28
|
import { getSystemCapabilities } from '../system-capabilities.js';
|
|
29
|
-
|
|
30
|
-
const projectRoot =
|
|
29
|
+
import { getPackageRoot } from '../onboard.js';
|
|
30
|
+
const projectRoot = getPackageRoot();
|
|
31
31
|
const dashboardDist = join(projectRoot, 'dashboard', 'dist');
|
|
32
32
|
const registryDir = join(projectRoot, 'registry');
|
|
33
33
|
const rateLimitMap = new Map();
|
|
@@ -163,9 +163,10 @@ export function createGateway(appMount = null) {
|
|
|
163
163
|
}
|
|
164
164
|
});
|
|
165
165
|
/** Onboard: mark onboarding as complete. */
|
|
166
|
-
app.put('/api/onboard/complete', (_req, res) => {
|
|
166
|
+
app.put('/api/onboard/complete', async (_req, res) => {
|
|
167
167
|
try {
|
|
168
168
|
setOnboardingComplete(true);
|
|
169
|
+
await reloadProviders();
|
|
169
170
|
res.json({ ok: true, complete: true });
|
|
170
171
|
}
|
|
171
172
|
catch (e) {
|
|
@@ -185,8 +186,8 @@ export function createGateway(appMount = null) {
|
|
|
185
186
|
res.status(500).json({ error: e.message });
|
|
186
187
|
}
|
|
187
188
|
});
|
|
188
|
-
/** Onboard: save API keys to ~/.sulala/.env (whitelist only). */
|
|
189
|
-
app.put('/api/onboard/env', (req, res) => {
|
|
189
|
+
/** Onboard: save API keys to ~/.sulala/.env (whitelist only). Reload AI providers so new keys apply without restart. */
|
|
190
|
+
app.put('/api/onboard/env', async (req, res) => {
|
|
190
191
|
try {
|
|
191
192
|
const body = req.body;
|
|
192
193
|
if (!body || typeof body !== 'object') {
|
|
@@ -194,6 +195,7 @@ export function createGateway(appMount = null) {
|
|
|
194
195
|
return;
|
|
195
196
|
}
|
|
196
197
|
writeOnboardEnvKeys(body);
|
|
198
|
+
await reloadProviders();
|
|
197
199
|
res.json({ ok: true, keys: readOnboardEnvKeys() });
|
|
198
200
|
}
|
|
199
201
|
catch (e) {
|
|
@@ -1196,7 +1198,7 @@ export function createGateway(appMount = null) {
|
|
|
1196
1198
|
res.status(500).json({ error: e.message });
|
|
1197
1199
|
}
|
|
1198
1200
|
});
|
|
1199
|
-
/** POST /api/tools/invoke — direct tool execution
|
|
1201
|
+
/** POST /api/tools/invoke — direct tool execution. Same policy as agent run. */
|
|
1200
1202
|
app.post('/api/tools/invoke', async (req, res) => {
|
|
1201
1203
|
try {
|
|
1202
1204
|
const body = (req.body || {});
|
|
@@ -1864,6 +1866,13 @@ export function createGateway(appMount = null) {
|
|
|
1864
1866
|
res.sendFile(join(dashboardDist, 'index.html'));
|
|
1865
1867
|
});
|
|
1866
1868
|
}
|
|
1869
|
+
else {
|
|
1870
|
+
// Dashboard not built or not present (e.g. global install without dashboard/dist). Serve / and SPA routes → onboard.
|
|
1871
|
+
log('gateway', 'warn', 'Dashboard not found at dashboard/dist; serving / as redirect to /onboard', { dashboardDist });
|
|
1872
|
+
app.get(/^\/(?!api|health|ws|onboard)/, (_req, res) => {
|
|
1873
|
+
res.redirect(302, '/onboard');
|
|
1874
|
+
});
|
|
1875
|
+
}
|
|
1867
1876
|
return app;
|
|
1868
1877
|
}
|
|
1869
1878
|
export function attachWebSocket(server, onConnection = () => { }) {
|