assistme 0.8.3 → 0.8.5

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.
@@ -17,7 +17,7 @@ import {
17
17
  readAuthStore,
18
18
  safeParse,
19
19
  writeAuthStore
20
- } from "./chunk-3UNXN3BX.js";
20
+ } from "./chunk-QGH5MFJA.js";
21
21
  import {
22
22
  AppError,
23
23
  errorMessage,
@@ -3015,7 +3015,10 @@ var SkillManager = class {
3015
3015
  }
3016
3016
  // ── Create / Update / Remove ──────────────────────────────────
3017
3017
  async create(name, description, content, options) {
3018
- if (!this.userId) return null;
3018
+ if (!this.userId) {
3019
+ log.warn(`Skill create skipped for "${name}": no userId set`);
3020
+ return null;
3021
+ }
3019
3022
  try {
3020
3023
  const metadata = options?.emoji ? { openclaw: { emoji: options.emoji } } : {};
3021
3024
  const data = await callMcpHandler(
@@ -3060,7 +3063,7 @@ var SkillManager = class {
3060
3063
  log.info(`Skill "${skillName}" created in skills table (pending approval)`);
3061
3064
  return { id, name: skillName };
3062
3065
  } catch (err) {
3063
- log.debug(`Skill create error: ${err}`);
3066
+ log.warn(`Skill create error for "${name}": ${err instanceof Error ? err.message : err}`);
3064
3067
  return null;
3065
3068
  }
3066
3069
  }
@@ -340,7 +340,6 @@ var MAX_CONTENT_SEARCH_RESULTS = 30;
340
340
  var MEMORY_DEDUP_SIMILARITY_THRESHOLD = 0.75;
341
341
  var MEMORY_COMPRESSION_THRESHOLD = 50;
342
342
  var MEMORY_COMPRESSION_TARGET = 30;
343
- var MAX_BUDGET_USD = 2;
344
343
  var SELF_ANALYSIS_MAX_SESSION_LOGS = 200;
345
344
  var SELF_ANALYSIS_MAX_MESSAGE_EVENTS = 300;
346
345
  var SELF_ANALYSIS_MAX_CONVERSATION_MESSAGES = 10;
@@ -589,7 +588,6 @@ export {
589
588
  MEMORY_DEDUP_SIMILARITY_THRESHOLD,
590
589
  MEMORY_COMPRESSION_THRESHOLD,
591
590
  MEMORY_COMPRESSION_TARGET,
592
- MAX_BUDGET_USD,
593
591
  SELF_ANALYSIS_MAX_SESSION_LOGS,
594
592
  SELF_ANALYSIS_MAX_MESSAGE_EVENTS,
595
593
  SELF_ANALYSIS_MAX_CONVERSATION_MESSAGES,
package/dist/index.js CHANGED
@@ -27,7 +27,7 @@ import {
27
27
  setSessionBusy,
28
28
  toggleScheduledTask,
29
29
  updateHeartbeat
30
- } from "./chunk-UHGTMSLZ.js";
30
+ } from "./chunk-4E5QAYTQ.js";
31
31
  import {
32
32
  HEARTBEAT_INTERVAL_MS,
33
33
  HEARTBEAT_LOG_MAX_ENTRIES,
@@ -39,7 +39,7 @@ import {
39
39
  setLogConversationId,
40
40
  setLogHook,
41
41
  setLogLevel
42
- } from "./chunk-3UNXN3BX.js";
42
+ } from "./chunk-QGH5MFJA.js";
43
43
  import {
44
44
  clearConfig,
45
45
  errorMessage,
@@ -2159,7 +2159,7 @@ function registerJobCommands(program2) {
2159
2159
  jobCmd.command("list").description("List your defined jobs").action(async () => {
2160
2160
  try {
2161
2161
  await getCurrentUserId();
2162
- const { JobRunner: JobRunner2 } = await import("./job-runner-P4DIXXCV.js");
2162
+ const { JobRunner: JobRunner2 } = await import("./job-runner-IBVUDW6A.js");
2163
2163
  const runner = new JobRunner2();
2164
2164
  const jobs = await runner.listJobs();
2165
2165
  if (jobs.length === 0) {
@@ -2183,7 +2183,7 @@ function registerJobCommands(program2) {
2183
2183
  jobCmd.command("status [name]").description("Show run history for a job (or all jobs)").option("-l, --limit <number>", "Max runs to show (default: 5)").action(async (name, opts) => {
2184
2184
  try {
2185
2185
  await getCurrentUserId();
2186
- const { JobRunner: JobRunner2 } = await import("./job-runner-P4DIXXCV.js");
2186
+ const { JobRunner: JobRunner2 } = await import("./job-runner-IBVUDW6A.js");
2187
2187
  const runner = new JobRunner2();
2188
2188
  const runs = await runner.getRunHistory(name, parseInt(opts.limit || "5"));
2189
2189
  if (runs.length === 0) {
@@ -2222,7 +2222,7 @@ Job Run History${name ? ` \u2014 ${name}` : ""}:`));
2222
2222
  process.exit(1);
2223
2223
  }
2224
2224
  await getCurrentUserId();
2225
- const { JobRunner: JobRunner2 } = await import("./job-runner-P4DIXXCV.js");
2225
+ const { JobRunner: JobRunner2 } = await import("./job-runner-IBVUDW6A.js");
2226
2226
  const runner = new JobRunner2();
2227
2227
  const job = await runner.loadJob(name);
2228
2228
  if (!job) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  JobRunner
3
- } from "./chunk-3UNXN3BX.js";
3
+ } from "./chunk-QGH5MFJA.js";
4
4
  import "./chunk-HY3FFXSQ.js";
5
5
  export {
6
6
  JobRunner
@@ -19,11 +19,10 @@ import {
19
19
  pollActionResponse,
20
20
  resetEventSequence,
21
21
  setActionRequest
22
- } from "../chunk-UHGTMSLZ.js";
22
+ } from "../chunk-4E5QAYTQ.js";
23
23
  import {
24
24
  EDSGER_PRODUCT_SLUG,
25
25
  JobRunner,
26
- MAX_BUDGET_USD,
27
26
  MAX_COMPLETE_TASK_RETRIES,
28
27
  MAX_CONTENT_SEARCH_FILES,
29
28
  MAX_CONTENT_SEARCH_RESULTS,
@@ -47,7 +46,7 @@ import {
47
46
  safeParse,
48
47
  setCorrelationId,
49
48
  setLogTransport
50
- } from "../chunk-3UNXN3BX.js";
49
+ } from "../chunk-QGH5MFJA.js";
51
50
  import {
52
51
  AppError,
53
52
  assertWithinAssistMeRoot,
@@ -1740,7 +1739,12 @@ function createAgentToolsServer(deps) {
1740
1739
  });
1741
1740
  if (!result) {
1742
1741
  return {
1743
- content: [{ type: "text", text: `Failed to create skill "${args.name}".` }]
1742
+ content: [
1743
+ {
1744
+ type: "text",
1745
+ text: `Failed to create skill "${args.name}". Check logs for details (userId may not be set, or database error).`
1746
+ }
1747
+ ]
1744
1748
  };
1745
1749
  }
1746
1750
  await skillManager.syncToAgentSkills(
@@ -3323,7 +3327,7 @@ var TaskProcessor = class {
3323
3327
  historyCache: this.historyCache
3324
3328
  });
3325
3329
  const abortController = new AbortController();
3326
- const taskTimeout = new TaskTimeout(abortController, taskTimeoutMs);
3330
+ const taskTimeout = taskTimeoutMs > 0 ? new TaskTimeout(abortController, taskTimeoutMs) : null;
3327
3331
  const browserServer = createBrowserMcpServer();
3328
3332
  const agentToolsServer = createAgentToolsServer({
3329
3333
  memoryManager: this.memoryManager,
@@ -3331,8 +3335,8 @@ var TaskProcessor = class {
3331
3335
  taskId: task.id,
3332
3336
  sessionId: this.sessionId || void 0,
3333
3337
  heartbeatEngine: this.heartbeatEngine || void 0,
3334
- onUserWaitStart: () => taskTimeout.pause(),
3335
- onUserWaitEnd: () => taskTimeout.resume()
3338
+ onUserWaitStart: () => taskTimeout?.pause(),
3339
+ onUserWaitEnd: () => taskTimeout?.resume()
3336
3340
  });
3337
3341
  const eventHooks = createEventHooks(task.id, toolCallRecords, toolFailures);
3338
3342
  const options = {
@@ -3352,10 +3356,9 @@ var TaskProcessor = class {
3352
3356
  },
3353
3357
  hooks: eventHooks,
3354
3358
  persistSession: true,
3355
- abortController,
3359
+ ...taskTimeout ? { abortController } : {},
3356
3360
  thinking: { type: "adaptive" },
3357
- effort: "high",
3358
- maxBudgetUsd: MAX_BUDGET_USD
3361
+ effort: "high"
3359
3362
  };
3360
3363
  let result;
3361
3364
  try {
@@ -3373,7 +3376,7 @@ var TaskProcessor = class {
3373
3376
  }
3374
3377
  });
3375
3378
  } finally {
3376
- taskTimeout.clear();
3379
+ taskTimeout?.clear();
3377
3380
  }
3378
3381
  const { response: finalResponse, sessionId: agentSessionId, costUsd, numTurns } = result;
3379
3382
  tokenUsage = result.tokenUsage;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "assistme",
3
- "version": "0.8.3",
3
+ "version": "0.8.5",
4
4
  "description": "AssistMe CLI Agent - AI-powered agentic assistant for code, browser, and automation",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -39,7 +39,6 @@ import {
39
39
  MAX_RESPONSE_CONTENT_LENGTH,
40
40
  MAX_HISTORY_ENTRIES,
41
41
  MAX_COMPLETE_TASK_RETRIES,
42
- MAX_BUDGET_USD,
43
42
  } from "../utils/constants.js";
44
43
  import { errorMessage } from "../utils/errors.js";
45
44
  import type { HeartbeatEngine } from "./proactive-monitor.js";
@@ -190,7 +189,8 @@ export class TaskProcessor {
190
189
  });
191
190
 
192
191
  const abortController = new AbortController();
193
- const taskTimeout = new TaskTimeout(abortController, taskTimeoutMs);
192
+ const taskTimeout =
193
+ taskTimeoutMs > 0 ? new TaskTimeout(abortController, taskTimeoutMs) : null;
194
194
 
195
195
  // Create MCP servers for custom tools
196
196
  const browserServer = createBrowserMcpServer();
@@ -200,8 +200,8 @@ export class TaskProcessor {
200
200
  taskId: task.id,
201
201
  sessionId: this.sessionId || undefined,
202
202
  heartbeatEngine: this.heartbeatEngine || undefined,
203
- onUserWaitStart: () => taskTimeout.pause(),
204
- onUserWaitEnd: () => taskTimeout.resume(),
203
+ onUserWaitStart: () => taskTimeout?.pause(),
204
+ onUserWaitEnd: () => taskTimeout?.resume(),
205
205
  });
206
206
 
207
207
  const eventHooks = createEventHooks(task.id, toolCallRecords, toolFailures);
@@ -223,10 +223,9 @@ export class TaskProcessor {
223
223
  },
224
224
  hooks: eventHooks,
225
225
  persistSession: true,
226
- abortController,
226
+ ...(taskTimeout ? { abortController } : {}),
227
227
  thinking: { type: "adaptive" },
228
228
  effort: "high",
229
- maxBudgetUsd: MAX_BUDGET_USD,
230
229
  };
231
230
 
232
231
  // Execute via SDK with real-time event streaming
@@ -246,7 +245,7 @@ export class TaskProcessor {
246
245
  },
247
246
  });
248
247
  } finally {
249
- taskTimeout.clear();
248
+ taskTimeout?.clear();
250
249
  }
251
250
 
252
251
  const { response: finalResponse, sessionId: agentSessionId, costUsd, numTurns } = result;
@@ -258,7 +258,10 @@ export class SkillManager {
258
258
  content: string,
259
259
  options?: { source?: string; emoji?: string; keywords?: string[] }
260
260
  ): Promise<{ id: string; name: string } | null> {
261
- if (!this.userId) return null;
261
+ if (!this.userId) {
262
+ log.warn(`Skill create skipped for "${name}": no userId set`);
263
+ return null;
264
+ }
262
265
 
263
266
  try {
264
267
  const metadata = options?.emoji ? { openclaw: { emoji: options.emoji } } : {};
@@ -309,7 +312,7 @@ export class SkillManager {
309
312
  log.info(`Skill "${skillName}" created in skills table (pending approval)`);
310
313
  return { id, name: skillName };
311
314
  } catch (err) {
312
- log.debug(`Skill create error: ${err}`);
315
+ log.warn(`Skill create error for "${name}": ${err instanceof Error ? err.message : err}`);
313
316
  return null;
314
317
  }
315
318
  }
@@ -129,7 +129,12 @@ export function createAgentToolsServer(deps: AgentToolsDeps): McpSdkServerConfig
129
129
 
130
130
  if (!result) {
131
131
  return {
132
- content: [{ type: "text", text: `Failed to create skill "${args.name}".` }],
132
+ content: [
133
+ {
134
+ type: "text",
135
+ text: `Failed to create skill "${args.name}". Check logs for details (userId may not be set, or database error).`,
136
+ },
137
+ ],
133
138
  };
134
139
  }
135
140
 
@@ -31,8 +31,8 @@ export const SKILL_DESCRIPTION_BUDGET_CHARS = 16_000;
31
31
 
32
32
  // ── Timeouts ───────────────────────────────────────────────────────
33
33
 
34
- /** Default task timeout in minutes */
35
- export const DEFAULT_TASK_TIMEOUT_MINUTES = 10;
34
+ /** Default task timeout in minutes (0 = no timeout) */
35
+ export const DEFAULT_TASK_TIMEOUT_MINUTES = 0;
36
36
 
37
37
  /** Shell command execution timeout in ms */
38
38
  export const SHELL_TIMEOUT_MS = 30_000;