obol-ai 0.2.28 → 0.2.30
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/CHANGELOG.md +6 -0
- package/package.json +1 -1
- package/src/claude/constants.js +0 -5
- package/src/claude/prompt.js +0 -3
- package/src/claude/tool-registry.js +0 -2
- package/src/cli/init.js +4 -62
- package/src/config.js +4 -1
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "obol-ai",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.30",
|
|
4
4
|
"description": "Self-evolving AI assistant that learns, remembers, and acts on its own. Persistent vector memory, self-rewriting personality, proactive heartbeats.",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"bin": {
|
package/src/claude/constants.js
CHANGED
|
@@ -19,11 +19,6 @@ const OPTIONAL_TOOLS = {
|
|
|
19
19
|
tools: ['create_pdf'],
|
|
20
20
|
config: {},
|
|
21
21
|
},
|
|
22
|
-
vercel: {
|
|
23
|
-
label: 'Vercel Deploy',
|
|
24
|
-
tools: ['vercel_deploy', 'vercel_list'],
|
|
25
|
-
config: {},
|
|
26
|
-
},
|
|
27
22
|
background: {
|
|
28
23
|
label: 'Background Tasks',
|
|
29
24
|
tools: ['background_task'],
|
package/src/claude/prompt.js
CHANGED
|
@@ -117,9 +117,6 @@ Cannot access paths outside workspace or /tmp.
|
|
|
117
117
|
### Web (\`web_search\`)
|
|
118
118
|
Search the web for current information.
|
|
119
119
|
|
|
120
|
-
### Vercel (\`vercel_deploy\`, \`vercel_list\`)
|
|
121
|
-
Deploy directories to Vercel. Ship websites, dashboards, web apps.
|
|
122
|
-
|
|
123
120
|
### Background Tasks (\`background_task\`)
|
|
124
121
|
Spawn heavy work (research, site building, complex analysis) in the background.
|
|
125
122
|
The main conversation stays responsive. User gets progress updates every 30s.
|
|
@@ -5,7 +5,6 @@ const memoryTool = require('./tools/memory');
|
|
|
5
5
|
const webTool = require('./tools/web');
|
|
6
6
|
const filesTool = require('./tools/files');
|
|
7
7
|
const secretsTool = require('./tools/secrets');
|
|
8
|
-
const vercelTool = require('./tools/vercel');
|
|
9
8
|
const backgroundTool = require('./tools/background');
|
|
10
9
|
const telegramTool = require('./tools/telegram');
|
|
11
10
|
const schedulerTool = require('./tools/scheduler');
|
|
@@ -21,7 +20,6 @@ const TOOL_MODULES = [
|
|
|
21
20
|
webTool,
|
|
22
21
|
filesTool,
|
|
23
22
|
secretsTool,
|
|
24
|
-
vercelTool,
|
|
25
23
|
backgroundTool,
|
|
26
24
|
telegramTool,
|
|
27
25
|
schedulerTool,
|
package/src/cli/init.js
CHANGED
|
@@ -6,7 +6,7 @@ const { execSync } = require('child_process');
|
|
|
6
6
|
const { getConfigDir, saveConfig, loadConfig, CONFIG_FILE, ensureUserDir } = require('../config');
|
|
7
7
|
const { generatePKCE, buildAuthorizationUrl, exchangeCodeForTokens } = require('../oauth');
|
|
8
8
|
const {
|
|
9
|
-
validateAnthropic, validateTelegram, validateSupabase,
|
|
9
|
+
validateAnthropic, validateTelegram, validateSupabase,
|
|
10
10
|
} = require('../validators');
|
|
11
11
|
|
|
12
12
|
const OBOL_DIR = getConfigDir();
|
|
@@ -120,7 +120,7 @@ async function init(opts = {}) {
|
|
|
120
120
|
|
|
121
121
|
const config = {};
|
|
122
122
|
let step = 0;
|
|
123
|
-
const totalSteps =
|
|
123
|
+
const totalSteps = 5;
|
|
124
124
|
const stepLabel = (name) => `─── Step ${++step}/${totalSteps}: ${name} ───`;
|
|
125
125
|
|
|
126
126
|
// Step 1: Anthropic
|
|
@@ -223,65 +223,7 @@ async function init(opts = {}) {
|
|
|
223
223
|
console.log('');
|
|
224
224
|
}
|
|
225
225
|
|
|
226
|
-
// Step 4:
|
|
227
|
-
console.log(stepLabel('GitHub (backup)') + '\n');
|
|
228
|
-
const { setupGithub } = await inquirer.prompt([{
|
|
229
|
-
type: 'confirm',
|
|
230
|
-
name: 'setupGithub',
|
|
231
|
-
message: 'Set up GitHub backup?',
|
|
232
|
-
default: true,
|
|
233
|
-
}]);
|
|
234
|
-
if (setupGithub) {
|
|
235
|
-
console.log(' OBOL backs up its personality, scripts, and commands to a');
|
|
236
|
-
console.log(' private GitHub repo daily. This lets you restore on any server.\n');
|
|
237
|
-
console.log(' How to get a token:');
|
|
238
|
-
console.log(' 1. Go to https://github.com/settings/tokens');
|
|
239
|
-
console.log(' 2. Click "Generate new token (classic)"');
|
|
240
|
-
console.log(' 3. Name it "obol"');
|
|
241
|
-
console.log(' 4. Check the "repo" scope (full control of private repos)');
|
|
242
|
-
console.log(' 5. Click "Generate token" and copy it\n');
|
|
243
|
-
const { githubToken } = await inquirer.prompt([{
|
|
244
|
-
type: 'password',
|
|
245
|
-
name: 'githubToken',
|
|
246
|
-
message: 'GitHub personal access token:',
|
|
247
|
-
mask: '*',
|
|
248
|
-
}]);
|
|
249
|
-
config.github = await setupGitHub(githubToken);
|
|
250
|
-
} else {
|
|
251
|
-
config.github = null;
|
|
252
|
-
console.log(' Skipped — no backup configured\n');
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
// Step 5: Vercel
|
|
256
|
-
console.log(stepLabel('Vercel (deploy sites)') + '\n');
|
|
257
|
-
const { setupVercel } = await inquirer.prompt([{
|
|
258
|
-
type: 'confirm',
|
|
259
|
-
name: 'setupVercel',
|
|
260
|
-
message: 'Set up Vercel deployments?',
|
|
261
|
-
default: true,
|
|
262
|
-
}]);
|
|
263
|
-
if (setupVercel) {
|
|
264
|
-
console.log(' OBOL can deploy websites and apps to Vercel for you.\n');
|
|
265
|
-
console.log(' How to get a token:');
|
|
266
|
-
console.log(' 1. Go to https://vercel.com (sign up free if needed)');
|
|
267
|
-
console.log(' 2. Go to https://vercel.com/account/tokens');
|
|
268
|
-
console.log(' 3. Click "Create" and name it "obol"');
|
|
269
|
-
console.log(' 4. Copy the token\n');
|
|
270
|
-
const { vercelToken } = await inquirer.prompt([{
|
|
271
|
-
type: 'password',
|
|
272
|
-
name: 'vercelToken',
|
|
273
|
-
message: 'Vercel token:',
|
|
274
|
-
mask: '*',
|
|
275
|
-
}]);
|
|
276
|
-
config.vercel = { token: vercelToken };
|
|
277
|
-
await validateCredential('Vercel', () => validateVercel(vercelToken));
|
|
278
|
-
} else {
|
|
279
|
-
config.vercel = null;
|
|
280
|
-
console.log(' Skipped — no deploy target configured\n');
|
|
281
|
-
}
|
|
282
|
-
console.log('');
|
|
283
|
-
|
|
284
|
-
// Step 6: Identity
|
|
226
|
+
// Step 4: Identity
|
|
285
227
|
console.log(stepLabel('Identity') + '\n');
|
|
286
228
|
console.log(' Give your bot a name and tell it who you are.');
|
|
287
229
|
console.log(' The bot name appears in personality files. Change later with `obol config`.\n');
|
|
@@ -292,7 +234,7 @@ async function init(opts = {}) {
|
|
|
292
234
|
config.owner = { name: ownerName };
|
|
293
235
|
config.bot = { name: botName };
|
|
294
236
|
|
|
295
|
-
// Step
|
|
237
|
+
// Step 5: Allowed Telegram users
|
|
296
238
|
console.log('\n' + stepLabel('Access control') + '\n');
|
|
297
239
|
console.log(' Each allowed user gets their own isolated brain — separate');
|
|
298
240
|
console.log(' personality, memory, evolution cycle, and workspace.');
|
package/src/config.js
CHANGED
|
@@ -86,7 +86,10 @@ function decryptSensitiveFields(config) {
|
|
|
86
86
|
if (ENCRYPTED_RE.test(val)) {
|
|
87
87
|
try {
|
|
88
88
|
setPath(config, p, decrypt(val, key));
|
|
89
|
-
} catch {
|
|
89
|
+
} catch {
|
|
90
|
+
setPath(config, p, null);
|
|
91
|
+
console.warn(`[config] Could not decrypt ${p} — hostname may have changed. Run: obol config`);
|
|
92
|
+
}
|
|
90
93
|
} else {
|
|
91
94
|
hadPlaintext = true;
|
|
92
95
|
}
|