obol-ai 0.3.18 → 0.3.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/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.3.19
2
+ - update changelog
3
+ - add curiosity toggle, fix describeToolCall crash in background tasks
4
+
1
5
  ## 0.3.18
2
6
  - store news in self-memory, boost humor output, fix analysis self-referential patterns
3
7
  - update readme with curiosity, analysis, news, voice, patterns, and remove traits
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obol-ai",
3
- "version": "0.3.18",
3
+ "version": "0.3.19",
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": {
@@ -42,6 +42,12 @@ const OPTIONAL_TOOLS = {
42
42
  topics: { label: 'Topics', default: [] },
43
43
  },
44
44
  },
45
+ curiosity: {
46
+ label: 'Curiosity',
47
+ tools: [],
48
+ config: {},
49
+ defaultEnabled: true,
50
+ },
45
51
  };
46
52
 
47
53
  const BLOCKED_EXEC_PATTERNS = [
@@ -1,4 +1,4 @@
1
- const { buildStatusHtml, describeToolCall } = require('../status');
1
+ const { buildStatusHtml, formatToolCall } = require('../status');
2
2
 
3
3
  const MAX_CONCURRENT_TASKS = 3;
4
4
 
@@ -88,10 +88,7 @@ TASK: ${task}`;
88
88
  if (update.model) routeInfo.model = update.model;
89
89
  },
90
90
  _onToolStart: (toolName, inputSummary) => {
91
- statusText = 'Processing';
92
- describeToolCall(claude.client, toolName, inputSummary).then(desc => {
93
- if (desc) statusText = desc;
94
- });
91
+ statusText = formatToolCall(toolName, inputSummary) || 'Processing';
95
92
  startStatusTimer();
96
93
  },
97
94
  });
@@ -87,13 +87,27 @@ async function runCuriosityOnce(config, allowedUsers) {
87
87
  console.log('[curiosity] Skipping — previous cycle still running');
88
88
  return;
89
89
  }
90
+
91
+ const enabledUsers = [];
92
+ for (const userId of allowedUsers) {
93
+ const tenant = await getTenant(userId, config);
94
+ const pref = tenant.toolPrefs?.get('curiosity');
95
+ const enabled = pref ? pref.enabled : true;
96
+ if (enabled) enabledUsers.push(userId);
97
+ }
98
+
99
+ if (!enabledUsers.length) {
100
+ console.log('[curiosity] Skipping — no users have curiosity enabled');
101
+ return;
102
+ }
103
+
90
104
  _curiosityRunning = true;
91
105
  try {
92
106
  const selfMemory = await createSelfMemory(config.supabase, 0);
93
- const firstTenant = await getTenant(allowedUsers[0], config);
107
+ const firstTenant = await getTenant(enabledUsers[0], config);
94
108
  const client = firstTenant.claude.client;
95
109
 
96
- const contexts = await Promise.all(allowedUsers.map(async (userId) => {
110
+ const contexts = await Promise.all(enabledUsers.map(async (userId) => {
97
111
  try {
98
112
  const tenant = await getTenant(userId, config);
99
113
  const parts = [];
@@ -120,7 +134,7 @@ async function runCuriosityOnce(config, allowedUsers) {
120
134
  const firstUserDir = firstTenant.userDir;
121
135
  await runCuriosity(client, selfMemory, 0, { peopleContext, userDir: firstUserDir });
122
136
 
123
- const userDispatchData = await Promise.all(allowedUsers.map(async (userId) => {
137
+ const userDispatchData = await Promise.all(enabledUsers.map(async (userId) => {
124
138
  try {
125
139
  const tenant = await getTenant(userId, config);
126
140
  const patterns = tenant.patterns ? await tenant.patterns.format().catch(() => null) : null;