lazyclaw 6.9.0 → 6.9.1

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.
@@ -243,8 +243,8 @@ export async function cmdMessage(sub, positional, flags = {}) {
243
243
  process.exit(2);
244
244
  }
245
245
  try { m.messageAdd(cfg, name, url, flags.kind); writeConfig(cfg); }
246
- catch (e) { console.error(`error: ${e.message}`); process.exit(1); }
247
- console.log(JSON.stringify({ ok: true, name }));
246
+ catch (e) { console.error(`✗ ${e.message}`); process.exit(1); }
247
+ console.log(`✓ added "${name}" webhook.`);
248
248
  return;
249
249
  }
250
250
  case 'remove': {
@@ -254,8 +254,8 @@ export async function cmdMessage(sub, positional, flags = {}) {
254
254
  process.exit(2);
255
255
  }
256
256
  try { m.messageRemove(cfg, name); writeConfig(cfg); }
257
- catch (e) { console.error(`error: ${e.message}`); process.exit(1); }
258
- console.log(JSON.stringify({ ok: true, removed: name }));
257
+ catch (e) { console.error(`✗ ${e.message}`); process.exit(1); }
258
+ console.log(`✓ removed "${name}".`);
259
259
  return;
260
260
  }
261
261
  case 'send': {
@@ -280,9 +280,9 @@ export async function cmdMessage(sub, positional, flags = {}) {
280
280
  }
281
281
  try {
282
282
  const r = await m.messageSend(cfg, name, text);
283
- console.log(JSON.stringify(r));
283
+ console.log(`✓ sent to "${name}" (${r.kind}).`);
284
284
  } catch (e) {
285
- console.error(`error: ${e.message}`); process.exit(1);
285
+ console.error(`✗ ${e.message}`); process.exit(1);
286
286
  }
287
287
  return;
288
288
  }
@@ -216,7 +216,7 @@ export function messageRemove(cfg, name) {
216
216
  export async function messageSend(cfg, name, text, opts = {}) {
217
217
  const map = (cfg.messaging || {}).webhooks || {};
218
218
  const hook = map[name];
219
- if (!hook) throw new Error(`webhook "${name}" not configured add via \`lazyclaw message add\``);
219
+ if (!hook) throw new Error(`no "${name}" channel is configured. Set up Slack with \`lazyclaw setup\` (channel step), or add a webhook: \`lazyclaw message add ${name} <webhook-url>\``);
220
220
  const fetchFn = opts.fetch || globalThis.fetch;
221
221
  if (!fetchFn) throw new Error('no fetch implementation');
222
222
 
package/mas/index_db.mjs CHANGED
@@ -55,14 +55,15 @@ export function _isNativeAbiError(e) {
55
55
  .test(String(e?.message || e || ''));
56
56
  }
57
57
  export function _warnIndexFailure(label, e) {
58
+ // Index internals stay off the user's screen: recorded in index-failures.jsonl
59
+ // (+ surfaced by `lazyclaw doctor`); echoed to the console only when an
60
+ // operator sets LAZYCLAW_DEBUG. End users never see DB error codes.
61
+ if (!process.env.LAZYCLAW_DEBUG) return;
58
62
  if (_isNativeAbiError(e)) {
59
63
  if (_nativeHintShown) return;
60
64
  _nativeHintShown = true;
61
65
  // eslint-disable-next-line no-console
62
- console.warn(
63
- '[index_db] recall index disabled — better-sqlite3 was built for a different Node.js version.\n' +
64
- ' Re-enable it once with: npm rebuild better-sqlite3 (in the lazyclaw install dir),\n' +
65
- ' or reinstall deps with the Node you run lazyclaw with. Chat is unaffected.');
66
+ console.warn('[index_db] recall index disabled — better-sqlite3 ABI mismatch; run `npm rebuild better-sqlite3`.');
66
67
  return;
67
68
  }
68
69
  // eslint-disable-next-line no-console
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lazyclaw",
3
- "version": "6.9.0",
3
+ "version": "6.9.1",
4
4
  "description": "Lazy, elegant terminal CLI for chatting with Claude / OpenAI / Gemini / Ollama, orchestrating multi-step LLM workflows, and running multi-agent Slack teams with cross-task memory. Banner-on-launch, slash-command ghost autocomplete, persistent sessions, local HTTP gateway.",
5
5
  "keywords": [
6
6
  "claude",
@@ -17,7 +17,8 @@ export const BLINK_MS = 450;
17
17
  // Pure (takes the current blink phase) so it's unit-testable without a timer.
18
18
  export function streamingIndicator(streaming, blinkOn, t = theme) {
19
19
  if (!streaming) return t.dim('○ idle');
20
- return blinkOn ? t.accent('● streaming') : t.dim('● streaming');
20
+ // Pulse a GREEN dot while streaming (live/working), not the amber accent.
21
+ return blinkOn ? t.success('● streaming') : t.dim('● streaming');
21
22
  }
22
23
 
23
24
  export function StatusBar({ provider, model, streaming, ctxUsed, ctxTotal, hud }) {
package/tui/theme.mjs CHANGED
@@ -9,6 +9,7 @@ import chalk from 'chalk';
9
9
 
10
10
  const AMBER_HEX = '#FFB347';
11
11
  const BORDER_HEX = '#5A5A5A';
12
+ const GREEN_HEX = '#34D399'; // emerald — "live/working" (matches the dashboard ring)
12
13
 
13
14
  // Central color gate. Color is OFF when the NO_COLOR standard applies
14
15
  // (https://no-color.org — any non-empty NO_COLOR), the terminal is `dumb`,
@@ -50,6 +51,10 @@ function accent(text) {
50
51
  return chalk.bold.hex(AMBER_HEX)(text);
51
52
  }
52
53
 
54
+ function success(text) {
55
+ return chalk.bold.hex(GREEN_HEX)(text);
56
+ }
57
+
53
58
  function muted(text) {
54
59
  return chalk.gray(text);
55
60
  }
@@ -65,6 +70,7 @@ export const theme = {
65
70
  colorize: amber,
66
71
  dim,
67
72
  accent,
73
+ success,
68
74
  muted,
69
75
  plain,
70
76
  };