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.
- package/commands/auth_nodes.mjs +6 -6
- package/config_features.mjs +1 -1
- package/mas/index_db.mjs +5 -4
- package/package.json +1 -1
- package/tui/status_bar.mjs +2 -1
- package/tui/theme.mjs +6 -0
package/commands/auth_nodes.mjs
CHANGED
|
@@ -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(
|
|
247
|
-
console.log(
|
|
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(
|
|
258
|
-
console.log(
|
|
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(
|
|
283
|
+
console.log(`✓ sent to "${name}" (${r.kind}).`);
|
|
284
284
|
} catch (e) {
|
|
285
|
-
console.error(
|
|
285
|
+
console.error(`✗ ${e.message}`); process.exit(1);
|
|
286
286
|
}
|
|
287
287
|
return;
|
|
288
288
|
}
|
package/config_features.mjs
CHANGED
|
@@ -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(`
|
|
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.
|
|
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",
|
package/tui/status_bar.mjs
CHANGED
|
@@ -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
|
-
|
|
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
|
};
|