@visorcraft/idlehands 1.1.16 → 1.2.0
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/dist/agent/formatting.js +30 -13
- package/dist/agent/formatting.js.map +1 -1
- package/dist/agent/review-artifact.js +12 -8
- package/dist/agent/review-artifact.js.map +1 -1
- package/dist/agent/tool-calls.js +62 -21
- package/dist/agent/tool-calls.js.map +1 -1
- package/dist/agent/tool-loop-detection.js +310 -0
- package/dist/agent/tool-loop-detection.js.map +1 -0
- package/dist/agent/tool-loop-guard.js +235 -0
- package/dist/agent/tool-loop-guard.js.map +1 -0
- package/dist/agent.js +585 -144
- package/dist/agent.js.map +1 -1
- package/dist/anton/controller.js +46 -30
- package/dist/anton/controller.js.map +1 -1
- package/dist/anton/lock.js +5 -1
- package/dist/anton/lock.js.map +1 -1
- package/dist/anton/parser.js +18 -19
- package/dist/anton/parser.js.map +1 -1
- package/dist/anton/prompt.js +42 -11
- package/dist/anton/prompt.js.map +1 -1
- package/dist/anton/reporter.js.map +1 -1
- package/dist/anton/session.js.map +1 -1
- package/dist/anton/verifier.js +3 -5
- package/dist/anton/verifier.js.map +1 -1
- package/dist/bench/compare.js +53 -20
- package/dist/bench/compare.js.map +1 -1
- package/dist/bench/openclaw.js +4 -4
- package/dist/bench/openclaw.js.map +1 -1
- package/dist/bench/report.js +11 -3
- package/dist/bench/report.js.map +1 -1
- package/dist/bench/runner.js +20 -14
- package/dist/bench/runner.js.map +1 -1
- package/dist/bot/commands.js +69 -26
- package/dist/bot/commands.js.map +1 -1
- package/dist/bot/confirm-discord.js +32 -9
- package/dist/bot/confirm-discord.js.map +1 -1
- package/dist/bot/confirm-telegram.js +26 -10
- package/dist/bot/confirm-telegram.js.map +1 -1
- package/dist/bot/dir-guard.js +18 -3
- package/dist/bot/dir-guard.js.map +1 -1
- package/dist/bot/discord-routing.js +28 -4
- package/dist/bot/discord-routing.js.map +1 -1
- package/dist/bot/discord-streaming.js +3 -3
- package/dist/bot/discord-streaming.js.map +1 -1
- package/dist/bot/discord.js +93 -37
- package/dist/bot/discord.js.map +1 -1
- package/dist/bot/escalation.js +124 -0
- package/dist/bot/escalation.js.map +1 -0
- package/dist/bot/format.js +2 -5
- package/dist/bot/format.js.map +1 -1
- package/dist/bot/session-manager.js +17 -6
- package/dist/bot/session-manager.js.map +1 -1
- package/dist/bot/telegram.js +92 -29
- package/dist/bot/telegram.js.map +1 -1
- package/dist/cli/agent-turn.js +10 -4
- package/dist/cli/agent-turn.js.map +1 -1
- package/dist/cli/args.js +51 -9
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/bot.js +19 -9
- package/dist/cli/bot.js.map +1 -1
- package/dist/cli/build-repl-context.js +60 -26
- package/dist/cli/build-repl-context.js.map +1 -1
- package/dist/cli/command-registry.js.map +1 -1
- package/dist/cli/commands/anton.js +5 -3
- package/dist/cli/commands/anton.js.map +1 -1
- package/dist/cli/commands/editing.js +27 -12
- package/dist/cli/commands/editing.js.map +1 -1
- package/dist/cli/commands/model.js +16 -7
- package/dist/cli/commands/model.js.map +1 -1
- package/dist/cli/commands/project.js +52 -17
- package/dist/cli/commands/project.js.map +1 -1
- package/dist/cli/commands/runtime.js +1 -1
- package/dist/cli/commands/runtime.js.map +1 -1
- package/dist/cli/commands/secrets.js +279 -0
- package/dist/cli/commands/secrets.js.map +1 -0
- package/dist/cli/commands/session.js +57 -2
- package/dist/cli/commands/session.js.map +1 -1
- package/dist/cli/commands/tools.js +3 -1
- package/dist/cli/commands/tools.js.map +1 -1
- package/dist/cli/commands/trifecta.js +1 -1
- package/dist/cli/commands/trifecta.js.map +1 -1
- package/dist/cli/commands/tui.js.map +1 -1
- package/dist/cli/init.js +50 -16
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/input.js +25 -7
- package/dist/cli/input.js.map +1 -1
- package/dist/cli/oneshot.js +31 -19
- package/dist/cli/oneshot.js.map +1 -1
- package/dist/cli/repl-dispatch.js +10 -6
- package/dist/cli/repl-dispatch.js.map +1 -1
- package/dist/cli/runtime-cmds.js +110 -46
- package/dist/cli/runtime-cmds.js.map +1 -1
- package/dist/cli/service.js +3 -3
- package/dist/cli/service.js.map +1 -1
- package/dist/cli/session-state.js +12 -5
- package/dist/cli/session-state.js.map +1 -1
- package/dist/cli/setup.js +86 -33
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/shell.js +4 -4
- package/dist/cli/shell.js.map +1 -1
- package/dist/cli/status.js +56 -12
- package/dist/cli/status.js.map +1 -1
- package/dist/client.js +40 -21
- package/dist/client.js.map +1 -1
- package/dist/commands.js +1 -1
- package/dist/commands.js.map +1 -1
- package/dist/config.js +171 -15
- package/dist/config.js.map +1 -1
- package/dist/confirm/auto.js.map +1 -1
- package/dist/confirm/headless.js +13 -2
- package/dist/confirm/headless.js.map +1 -1
- package/dist/confirm/terminal.js +1 -5
- package/dist/confirm/terminal.js.map +1 -1
- package/dist/context.js +9 -3
- package/dist/context.js.map +1 -1
- package/dist/git.js +56 -61
- package/dist/git.js.map +1 -1
- package/dist/harnesses.js +137 -37
- package/dist/harnesses.js.map +1 -1
- package/dist/history.js +12 -4
- package/dist/history.js.map +1 -1
- package/dist/hooks/index.js +2 -2
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/loader.js +6 -5
- package/dist/hooks/loader.js.map +1 -1
- package/dist/hooks/manager.js.map +1 -1
- package/dist/hooks/plugins/example-console.js.map +1 -1
- package/dist/hooks/scaffold.js +8 -6
- package/dist/hooks/scaffold.js.map +1 -1
- package/dist/index.js +120 -66
- package/dist/index.js.map +1 -1
- package/dist/indexer.js +6 -18
- package/dist/indexer.js.map +1 -1
- package/dist/jsonrpc.js.map +1 -1
- package/dist/lens.js +38 -16
- package/dist/lens.js.map +1 -1
- package/dist/lsp.js +60 -24
- package/dist/lsp.js.map +1 -1
- package/dist/markdown.js +6 -6
- package/dist/markdown.js.map +1 -1
- package/dist/mcp.js +15 -6
- package/dist/mcp.js.map +1 -1
- package/dist/model-customization.js +7 -3
- package/dist/model-customization.js.map +1 -1
- package/dist/progress/message-edit-scheduler.js +15 -3
- package/dist/progress/message-edit-scheduler.js.map +1 -1
- package/dist/progress/progress-message-renderer.js.map +1 -1
- package/dist/progress/progress-presenter.js +3 -3
- package/dist/progress/progress-presenter.js.map +1 -1
- package/dist/progress/serialize-telegram.js.map +1 -1
- package/dist/progress/tool-summary.js +3 -1
- package/dist/progress/tool-summary.js.map +1 -1
- package/dist/progress/turn-progress.js +3 -1
- package/dist/progress/turn-progress.js.map +1 -1
- package/dist/recovery.js +11 -3
- package/dist/recovery.js.map +1 -1
- package/dist/replay.js +9 -3
- package/dist/replay.js.map +1 -1
- package/dist/replay_cli.js +5 -3
- package/dist/replay_cli.js.map +1 -1
- package/dist/runtime/executor.js +66 -20
- package/dist/runtime/executor.js.map +1 -1
- package/dist/runtime/health.js.map +1 -1
- package/dist/runtime/host-runner.js +103 -0
- package/dist/runtime/host-runner.js.map +1 -0
- package/dist/runtime/planner.js +3 -1
- package/dist/runtime/planner.js.map +1 -1
- package/dist/runtime/secrets.js +102 -0
- package/dist/runtime/secrets.js.map +1 -0
- package/dist/runtime/store.js +95 -19
- package/dist/runtime/store.js.map +1 -1
- package/dist/safety.js +38 -21
- package/dist/safety.js.map +1 -1
- package/dist/spinner.js +7 -8
- package/dist/spinner.js.map +1 -1
- package/dist/sys/context.js +3 -3
- package/dist/sys/context.js.map +1 -1
- package/dist/term.js +1 -1
- package/dist/term.js.map +1 -1
- package/dist/themes.js +11 -5
- package/dist/themes.js.map +1 -1
- package/dist/tools/tool-error.js +2 -5
- package/dist/tools/tool-error.js.map +1 -1
- package/dist/tools.js +84 -35
- package/dist/tools.js.map +1 -1
- package/dist/tui/branch-picker.js +9 -3
- package/dist/tui/branch-picker.js.map +1 -1
- package/dist/tui/command-handler.js +88 -36
- package/dist/tui/command-handler.js.map +1 -1
- package/dist/tui/confirm.js.map +1 -1
- package/dist/tui/controller.js +234 -117
- package/dist/tui/controller.js.map +1 -1
- package/dist/tui/event-bridge.js.map +1 -1
- package/dist/tui/keymap.js +93 -71
- package/dist/tui/keymap.js.map +1 -1
- package/dist/tui/layout.js +9 -1
- package/dist/tui/layout.js.map +1 -1
- package/dist/tui/render.js +17 -5
- package/dist/tui/render.js.map +1 -1
- package/dist/tui/screen.js.map +1 -1
- package/dist/tui/state.js +129 -63
- package/dist/tui/state.js.map +1 -1
- package/dist/tui/theme.js +12 -3
- package/dist/tui/theme.js.map +1 -1
- package/dist/upgrade.js +28 -15
- package/dist/upgrade.js.map +1 -1
- package/dist/utils.js +8 -5
- package/dist/utils.js.map +1 -1
- package/dist/vault.js +48 -12
- package/dist/vault.js.map +1 -1
- package/dist/vim.js.map +1 -1
- package/package.json +11 -2
package/dist/bot/dir-guard.js
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
const SKIP_DIRS = new Set([
|
|
4
|
-
'.git',
|
|
5
|
-
'
|
|
4
|
+
'.git',
|
|
5
|
+
'node_modules',
|
|
6
|
+
'.cache',
|
|
7
|
+
'.local',
|
|
8
|
+
'.npm',
|
|
9
|
+
'.cargo',
|
|
10
|
+
'.rustup',
|
|
11
|
+
'.venv',
|
|
12
|
+
'venv',
|
|
13
|
+
'__pycache__',
|
|
14
|
+
'dist',
|
|
15
|
+
'build',
|
|
16
|
+
'target',
|
|
17
|
+
'.idea',
|
|
18
|
+
'.vscode',
|
|
6
19
|
]);
|
|
7
20
|
export function expandHome(raw) {
|
|
8
21
|
const home = process.env.HOME || '/home';
|
|
@@ -51,7 +64,9 @@ export async function detectRepoCandidates(seedDir, allowedDirs, opts = {}) {
|
|
|
51
64
|
const preferredRoot = path.dirname(seedAbs);
|
|
52
65
|
const scanRoot = (await isDirectory(preferredRoot))
|
|
53
66
|
? preferredRoot
|
|
54
|
-
: (
|
|
67
|
+
: (await isDirectory(seedAbs))
|
|
68
|
+
? seedAbs
|
|
69
|
+
: process.cwd();
|
|
55
70
|
const queue = [{ dir: scanRoot, depth: 0 }];
|
|
56
71
|
const visited = new Set();
|
|
57
72
|
const repos = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dir-guard.js","sourceRoot":"","sources":["../../src/bot/dir-guard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dir-guard.js","sourceRoot":"","sources":["../../src/bot/dir-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,9 @@ export function parseAllowedUsers(cfg) {
|
|
|
11
11
|
return new Set(values.map((v) => String(v).trim()).filter(Boolean));
|
|
12
12
|
}
|
|
13
13
|
export function normalizeApprovalMode(mode, fallback) {
|
|
14
|
-
const m = String(mode ?? '')
|
|
14
|
+
const m = String(mode ?? '')
|
|
15
|
+
.trim()
|
|
16
|
+
.toLowerCase();
|
|
15
17
|
if (m === 'plan' || m === 'default' || m === 'auto-edit' || m === 'yolo')
|
|
16
18
|
return m;
|
|
17
19
|
return fallback;
|
|
@@ -52,9 +54,31 @@ export function detectEscalation(text) {
|
|
|
52
54
|
}
|
|
53
55
|
/** Keyword presets for common escalation triggers */
|
|
54
56
|
const KEYWORD_PRESETS = {
|
|
55
|
-
coding: [
|
|
57
|
+
coding: [
|
|
58
|
+
'build',
|
|
59
|
+
'implement',
|
|
60
|
+
'create',
|
|
61
|
+
'develop',
|
|
62
|
+
'architect',
|
|
63
|
+
'refactor',
|
|
64
|
+
'debug',
|
|
65
|
+
'fix',
|
|
66
|
+
'code',
|
|
67
|
+
'program',
|
|
68
|
+
'write',
|
|
69
|
+
],
|
|
56
70
|
planning: ['plan', 'design', 'roadmap', 'strategy', 'analyze', 'research', 'evaluate', 'compare'],
|
|
57
|
-
complex: [
|
|
71
|
+
complex: [
|
|
72
|
+
'full',
|
|
73
|
+
'complete',
|
|
74
|
+
'comprehensive',
|
|
75
|
+
'multi-step',
|
|
76
|
+
'integrate',
|
|
77
|
+
'migration',
|
|
78
|
+
'overhaul',
|
|
79
|
+
'entire',
|
|
80
|
+
'whole',
|
|
81
|
+
],
|
|
58
82
|
};
|
|
59
83
|
/**
|
|
60
84
|
* Check if text matches a set of keywords.
|
|
@@ -127,7 +151,7 @@ export function checkKeywordEscalation(text, escalation) {
|
|
|
127
151
|
return {
|
|
128
152
|
escalate: true,
|
|
129
153
|
tier: 0,
|
|
130
|
-
reason: `keyword match: ${matched.slice(0, 3).join(', ')}${matched.length > 3 ? '...' : ''}
|
|
154
|
+
reason: `keyword match: ${matched.slice(0, 3).join(', ')}${matched.length > 3 ? '...' : ''}`,
|
|
131
155
|
};
|
|
132
156
|
}
|
|
133
157
|
return { escalate: false };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discord-routing.js","sourceRoot":"","sources":["../../src/bot/discord-routing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"discord-routing.js","sourceRoot":"","sources":["../../src/bot/discord-routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { formatToolCallSummary } from '../progress/tool-summary.js';
|
|
1
|
+
import { MessageEditScheduler, classifyDiscordEditError, } from '../progress/message-edit-scheduler.js';
|
|
3
2
|
import { ProgressPresenter } from '../progress/progress-presenter.js';
|
|
4
|
-
import {
|
|
3
|
+
import { formatToolCallSummary } from '../progress/tool-summary.js';
|
|
4
|
+
import { splitDiscord, safeContent } from './discord-routing.js';
|
|
5
5
|
export class DiscordStreamingMessage {
|
|
6
6
|
placeholder;
|
|
7
7
|
channel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discord-streaming.js","sourceRoot":"","sources":["../../src/bot/discord-streaming.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"discord-streaming.js","sourceRoot":"","sources":["../../src/bot/discord-streaming.ts"],"names":[],"mappings":"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"}
|
package/dist/bot/discord.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
1
3
|
import { Client, Events, GatewayIntentBits, Partials, REST, Routes, SlashCommandBuilder, } from 'discord.js';
|
|
2
4
|
import { createSession } from '../agent.js';
|
|
3
|
-
import { DiscordConfirmProvider } from './confirm-discord.js';
|
|
4
|
-
import { parseAllowedUsers, normalizeApprovalMode, splitDiscord, safeContent, detectEscalation, checkKeywordEscalation, resolveAgentForMessage, sessionKeyForMessage, } from './discord-routing.js';
|
|
5
|
-
import { firstToken } from '../cli/command-utils.js';
|
|
6
|
-
import { projectDir } from '../utils.js';
|
|
7
|
-
import { WATCHDOG_RECOMMENDED_TUNING_TEXT, formatWatchdogCancelMessage, resolveWatchdogSettings, shouldRecommendWatchdogTuning } from '../watchdog.js';
|
|
8
|
-
import path from 'node:path';
|
|
9
|
-
import fs from 'node:fs/promises';
|
|
10
|
-
import { detectRepoCandidates, expandHome, isPathAllowed, normalizeAllowedDirs } from './dir-guard.js';
|
|
11
5
|
import { runAnton } from '../anton/controller.js';
|
|
12
6
|
import { parseTaskFile } from '../anton/parser.js';
|
|
13
|
-
import { formatRunSummary, formatProgressBar, formatTaskStart, formatTaskEnd, formatTaskSkip } from '../anton/reporter.js';
|
|
14
|
-
import {
|
|
7
|
+
import { formatRunSummary, formatProgressBar, formatTaskStart, formatTaskEnd, formatTaskSkip, } from '../anton/reporter.js';
|
|
8
|
+
import { firstToken } from '../cli/command-utils.js';
|
|
15
9
|
import { chainAgentHooks } from '../progress/agent-hooks.js';
|
|
10
|
+
import { projectDir, PKG_VERSION } from '../utils.js';
|
|
11
|
+
import { WATCHDOG_RECOMMENDED_TUNING_TEXT, formatWatchdogCancelMessage, resolveWatchdogSettings, shouldRecommendWatchdogTuning, } from '../watchdog.js';
|
|
12
|
+
import { DiscordConfirmProvider } from './confirm-discord.js';
|
|
13
|
+
import { detectRepoCandidates, expandHome, isPathAllowed, normalizeAllowedDirs, } from './dir-guard.js';
|
|
14
|
+
import { parseAllowedUsers, normalizeApprovalMode, splitDiscord, safeContent, detectEscalation, checkKeywordEscalation, resolveAgentForMessage, sessionKeyForMessage, } from './discord-routing.js';
|
|
15
|
+
import { DiscordStreamingMessage } from './discord-streaming.js';
|
|
16
16
|
export async function startDiscordBot(config, botConfig) {
|
|
17
17
|
const token = process.env.IDLEHANDS_DISCORD_TOKEN || botConfig.token;
|
|
18
18
|
if (!token) {
|
|
@@ -65,7 +65,9 @@ export async function startDiscordBot(config, botConfig) {
|
|
|
65
65
|
lines.push(`Recommended tuning: ${WATCHDOG_RECOMMENDED_TUNING_TEXT}`);
|
|
66
66
|
}
|
|
67
67
|
if (managed) {
|
|
68
|
-
const idleSec = managed.lastProgressAt > 0
|
|
68
|
+
const idleSec = managed.lastProgressAt > 0
|
|
69
|
+
? ((Date.now() - managed.lastProgressAt) / 1000).toFixed(1)
|
|
70
|
+
: 'n/a';
|
|
69
71
|
lines.push('');
|
|
70
72
|
lines.push(`In-flight: ${managed.inFlight ? 'yes' : 'no'}`);
|
|
71
73
|
lines.push(`State: ${managed.state}`);
|
|
@@ -343,7 +345,9 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
343
345
|
}
|
|
344
346
|
}
|
|
345
347
|
const placeholder = await sendUserVisible(msg, '⏳ Thinking...').catch(() => null);
|
|
346
|
-
const streamer = new DiscordStreamingMessage(placeholder, msg.channel, {
|
|
348
|
+
const streamer = new DiscordStreamingMessage(placeholder, msg.channel, {
|
|
349
|
+
editIntervalMs: 1500,
|
|
350
|
+
});
|
|
347
351
|
streamer.start();
|
|
348
352
|
const baseHooks = {
|
|
349
353
|
onToken: () => {
|
|
@@ -402,11 +406,14 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
402
406
|
managed.activeAbortController?.abort();
|
|
403
407
|
}
|
|
404
408
|
catch { }
|
|
405
|
-
managed.session
|
|
409
|
+
managed.session
|
|
410
|
+
.compactHistory({ force: true })
|
|
411
|
+
.then((result) => {
|
|
406
412
|
console.error(`[bot:discord] ${managed.userId} watchdog compaction: freed ${result.freedTokens} tokens, dropped ${result.droppedMessages} messages`);
|
|
407
413
|
managed.lastProgressAt = Date.now();
|
|
408
414
|
watchdogCompactPending = false;
|
|
409
|
-
})
|
|
415
|
+
})
|
|
416
|
+
.catch((e) => {
|
|
410
417
|
console.error(`[bot:discord] ${managed.userId} watchdog compaction failed: ${e?.message ?? e}`);
|
|
411
418
|
watchdogCompactPending = false;
|
|
412
419
|
});
|
|
@@ -596,21 +603,28 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
596
603
|
try {
|
|
597
604
|
const commands = [
|
|
598
605
|
new SlashCommandBuilder().setName('help').setDescription('Show available commands'),
|
|
606
|
+
new SlashCommandBuilder().setName('version').setDescription('Show version'),
|
|
599
607
|
new SlashCommandBuilder().setName('new').setDescription('Start a new session'),
|
|
600
608
|
new SlashCommandBuilder().setName('status').setDescription('Show session statistics'),
|
|
601
|
-
new SlashCommandBuilder()
|
|
609
|
+
new SlashCommandBuilder()
|
|
610
|
+
.setName('watchdog')
|
|
611
|
+
.setDescription('Show watchdog settings/status'),
|
|
602
612
|
new SlashCommandBuilder().setName('agent').setDescription('Show current agent info'),
|
|
603
613
|
new SlashCommandBuilder().setName('agents').setDescription('List all configured agents'),
|
|
604
614
|
new SlashCommandBuilder().setName('cancel').setDescription('Cancel the current operation'),
|
|
605
615
|
new SlashCommandBuilder().setName('reset').setDescription('Reset the session'),
|
|
606
|
-
new SlashCommandBuilder()
|
|
607
|
-
.
|
|
616
|
+
new SlashCommandBuilder()
|
|
617
|
+
.setName('escalate')
|
|
618
|
+
.setDescription('Escalate to a larger model')
|
|
619
|
+
.addStringOption((option) => option.setName('model').setDescription('Model name or "next"').setRequired(false)),
|
|
608
620
|
new SlashCommandBuilder().setName('deescalate').setDescription('Return to base model'),
|
|
609
|
-
].map(cmd => cmd.toJSON());
|
|
621
|
+
].map((cmd) => cmd.toJSON());
|
|
610
622
|
const rest = new REST({ version: '10' }).setToken(token);
|
|
611
623
|
// Register globally (takes up to 1 hour to propagate) or per-guild (instant)
|
|
612
624
|
if (guildId) {
|
|
613
|
-
await rest.put(Routes.applicationGuildCommands(client.user.id, guildId), {
|
|
625
|
+
await rest.put(Routes.applicationGuildCommands(client.user.id, guildId), {
|
|
626
|
+
body: commands,
|
|
627
|
+
});
|
|
614
628
|
console.error(`[bot:discord] Registered ${commands.length} slash commands for guild ${guildId}`);
|
|
615
629
|
}
|
|
616
630
|
else {
|
|
@@ -627,7 +641,10 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
627
641
|
if (!interaction.isChatInputCommand())
|
|
628
642
|
return;
|
|
629
643
|
if (!allowedUsers.has(interaction.user.id)) {
|
|
630
|
-
await interaction.reply({
|
|
644
|
+
await interaction.reply({
|
|
645
|
+
content: '⚠️ You are not authorized to use this bot.',
|
|
646
|
+
ephemeral: true,
|
|
647
|
+
});
|
|
631
648
|
return;
|
|
632
649
|
}
|
|
633
650
|
const cmd = interaction.commandName;
|
|
@@ -658,6 +675,7 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
658
675
|
'**IdleHands Commands**',
|
|
659
676
|
'',
|
|
660
677
|
'/help — This message',
|
|
678
|
+
'/version — Show version',
|
|
661
679
|
'/new — Start fresh session',
|
|
662
680
|
'/status — Session stats',
|
|
663
681
|
'/watchdog — Show watchdog settings/status',
|
|
@@ -669,6 +687,16 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
669
687
|
await interaction.reply(lines.join('\n'));
|
|
670
688
|
break;
|
|
671
689
|
}
|
|
690
|
+
case 'version': {
|
|
691
|
+
const lines = [
|
|
692
|
+
`**IdleHands** v${PKG_VERSION}`,
|
|
693
|
+
'',
|
|
694
|
+
`**Model:** \`${config.model || 'auto'}\``,
|
|
695
|
+
`**Endpoint:** \`${config.endpoint || '?'}\``,
|
|
696
|
+
];
|
|
697
|
+
await interaction.reply(lines.join('\n'));
|
|
698
|
+
break;
|
|
699
|
+
}
|
|
672
700
|
case 'new': {
|
|
673
701
|
destroySession(key);
|
|
674
702
|
const agentName = persona?.display_name || agentId;
|
|
@@ -704,7 +732,9 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
704
732
|
const lines = [
|
|
705
733
|
`**Current Agent:** ${agentName}`,
|
|
706
734
|
persona.model ? `**Model:** ${persona.model}` : null,
|
|
707
|
-
persona.system_prompt
|
|
735
|
+
persona.system_prompt
|
|
736
|
+
? `**System Prompt:** ${persona.system_prompt.slice(0, 100)}...`
|
|
737
|
+
: null,
|
|
708
738
|
].filter(Boolean);
|
|
709
739
|
await interaction.editReply(lines.join('\n'));
|
|
710
740
|
}
|
|
@@ -758,7 +788,7 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
758
788
|
const currentModel = managed?.config.model || config.model || 'default';
|
|
759
789
|
const lines = [
|
|
760
790
|
`**Current model:** \`${currentModel}\``,
|
|
761
|
-
`**Escalation models:** ${escalation.models.map(m => `\`${m}\``).join(', ')}`,
|
|
791
|
+
`**Escalation models:** ${escalation.models.map((m) => `\`${m}\``).join(', ')}`,
|
|
762
792
|
'',
|
|
763
793
|
'Usage: `/escalate model:<name>` or `/escalate model:next`',
|
|
764
794
|
];
|
|
@@ -781,7 +811,7 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
781
811
|
else {
|
|
782
812
|
// Specific model requested
|
|
783
813
|
if (!escalation.models.includes(arg)) {
|
|
784
|
-
await interaction.reply(`❌ Model \`${arg}\` not in escalation chain. Available: ${escalation.models.map(m => `\`${m}\``).join(', ')}`);
|
|
814
|
+
await interaction.reply(`❌ Model \`${arg}\` not in escalation chain. Available: ${escalation.models.map((m) => `\`${m}\``).join(', ')}`);
|
|
785
815
|
break;
|
|
786
816
|
}
|
|
787
817
|
targetModel = arg;
|
|
@@ -831,7 +861,8 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
831
861
|
if (requireMentionChannels.includes(msg.channelId)) {
|
|
832
862
|
const botMention = client.user ? `<@${client.user.id}>` : null;
|
|
833
863
|
const botMentionNick = client.user ? `<@!${client.user.id}>` : null;
|
|
834
|
-
const isMentioned = botMention &&
|
|
864
|
+
const isMentioned = botMention &&
|
|
865
|
+
(content.includes(botMention) || (botMentionNick && content.includes(botMentionNick)));
|
|
835
866
|
if (!isMentioned)
|
|
836
867
|
return; // Silently ignore messages without mention
|
|
837
868
|
// Strip the bot mention from content so the agent sees clean text
|
|
@@ -882,6 +913,7 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
882
913
|
'Commands:',
|
|
883
914
|
'/start — Welcome + config summary',
|
|
884
915
|
'/help — This message',
|
|
916
|
+
'/version — Show version',
|
|
885
917
|
'/new — Start a new session',
|
|
886
918
|
'/cancel — Abort current generation',
|
|
887
919
|
'/status — Session stats',
|
|
@@ -909,6 +941,10 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
909
941
|
await sendUserVisible(msg, `Model: \`${managed.session.model}\`\nHarness: \`${managed.session.harness}\``).catch(() => { });
|
|
910
942
|
return;
|
|
911
943
|
}
|
|
944
|
+
if (content === '/version') {
|
|
945
|
+
await sendUserVisible(msg, `Idle Hands v${PKG_VERSION}`).catch(() => { });
|
|
946
|
+
return;
|
|
947
|
+
}
|
|
912
948
|
if (content === '/compact') {
|
|
913
949
|
managed.session.reset();
|
|
914
950
|
await sendUserVisible(msg, '🗜 Session context compacted (reset to system prompt).').catch(() => { });
|
|
@@ -923,7 +959,10 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
923
959
|
];
|
|
924
960
|
if (!managed.dirPinned && managed.repoCandidates.length > 1) {
|
|
925
961
|
lines.push('Action required: run `/dir <repo-root>` before file edits.');
|
|
926
|
-
lines.push(`Detected repos: ${managed.repoCandidates
|
|
962
|
+
lines.push(`Detected repos: ${managed.repoCandidates
|
|
963
|
+
.slice(0, 5)
|
|
964
|
+
.map((p) => `\`${p}\``)
|
|
965
|
+
.join(', ')}`);
|
|
927
966
|
}
|
|
928
967
|
await sendUserVisible(msg, lines.join('\n')).catch(() => { });
|
|
929
968
|
return;
|
|
@@ -1110,7 +1149,9 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
1110
1149
|
...(p.endpoint ? [`Endpoint: \`${p.endpoint}\``] : []),
|
|
1111
1150
|
...(p.approval_mode ? [`Approval: \`${p.approval_mode}\``] : []),
|
|
1112
1151
|
...(p.default_dir ? [`Default dir: \`${p.default_dir}\``] : []),
|
|
1113
|
-
...(p.allowed_dirs?.length
|
|
1152
|
+
...(p.allowed_dirs?.length
|
|
1153
|
+
? [`Allowed dirs: ${p.allowed_dirs.map((d) => `\`${d}\``).join(', ')}`]
|
|
1154
|
+
: []),
|
|
1114
1155
|
];
|
|
1115
1156
|
await sendUserVisible(msg, lines.join('\n')).catch(() => { });
|
|
1116
1157
|
return;
|
|
@@ -1135,13 +1176,19 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
1135
1176
|
if (routing.default)
|
|
1136
1177
|
lines.push(`Default: \`${routing.default}\``);
|
|
1137
1178
|
if (routing.users && Object.keys(routing.users).length > 0) {
|
|
1138
|
-
lines.push(`Users: ${Object.entries(routing.users)
|
|
1179
|
+
lines.push(`Users: ${Object.entries(routing.users)
|
|
1180
|
+
.map(([u, a]) => `${u}→${a}`)
|
|
1181
|
+
.join(', ')}`);
|
|
1139
1182
|
}
|
|
1140
1183
|
if (routing.channels && Object.keys(routing.channels).length > 0) {
|
|
1141
|
-
lines.push(`Channels: ${Object.entries(routing.channels)
|
|
1184
|
+
lines.push(`Channels: ${Object.entries(routing.channels)
|
|
1185
|
+
.map(([c, a]) => `${c}→${a}`)
|
|
1186
|
+
.join(', ')}`);
|
|
1142
1187
|
}
|
|
1143
1188
|
if (routing.guilds && Object.keys(routing.guilds).length > 0) {
|
|
1144
|
-
lines.push(`Guilds: ${Object.entries(routing.guilds)
|
|
1189
|
+
lines.push(`Guilds: ${Object.entries(routing.guilds)
|
|
1190
|
+
.map(([g, a]) => `${g}→${a}`)
|
|
1191
|
+
.join(', ')}`);
|
|
1145
1192
|
}
|
|
1146
1193
|
}
|
|
1147
1194
|
await sendUserVisible(msg, lines.join('\n')).catch(() => { });
|
|
@@ -1160,7 +1207,7 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
1160
1207
|
const currentModel = managed.config.model || config.model || 'default';
|
|
1161
1208
|
const lines = [
|
|
1162
1209
|
`**Current model:** \`${currentModel}\``,
|
|
1163
|
-
`**Escalation models:** ${escalation.models.map(m => `\`${m}\``).join(', ')}`,
|
|
1210
|
+
`**Escalation models:** ${escalation.models.map((m) => `\`${m}\``).join(', ')}`,
|
|
1164
1211
|
'',
|
|
1165
1212
|
'Usage: `/escalate <model>` or `/escalate next`',
|
|
1166
1213
|
'Then send your message - it will use the escalated model.',
|
|
@@ -1180,7 +1227,7 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
1180
1227
|
else {
|
|
1181
1228
|
// Specific model requested
|
|
1182
1229
|
if (!escalation.models.includes(arg)) {
|
|
1183
|
-
await sendUserVisible(msg, `❌ Model \`${arg}\` not in escalation chain. Available: ${escalation.models.map(m => `\`${m}\``).join(', ')}`).catch(() => { });
|
|
1230
|
+
await sendUserVisible(msg, `❌ Model \`${arg}\` not in escalation chain. Available: ${escalation.models.map((m) => `\`${m}\``).join(', ')}`).catch(() => { });
|
|
1184
1231
|
return;
|
|
1185
1232
|
}
|
|
1186
1233
|
targetModel = arg;
|
|
@@ -1454,7 +1501,8 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
1454
1501
|
}
|
|
1455
1502
|
const defaults = managed.config.anton || {};
|
|
1456
1503
|
const runConfig = {
|
|
1457
|
-
taskFile: filePath,
|
|
1504
|
+
taskFile: filePath,
|
|
1505
|
+
projectDir: cwd,
|
|
1458
1506
|
maxRetriesPerTask: defaults.max_retries ?? 3,
|
|
1459
1507
|
maxIterations: defaults.max_iterations ?? 200,
|
|
1460
1508
|
taskTimeoutSec: defaults.task_timeout_sec ?? 600,
|
|
@@ -1462,17 +1510,21 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
1462
1510
|
maxTotalTokens: defaults.max_total_tokens ?? Infinity,
|
|
1463
1511
|
maxPromptTokensPerAttempt: defaults.max_prompt_tokens_per_attempt ?? 128_000,
|
|
1464
1512
|
autoCommit: defaults.auto_commit ?? true,
|
|
1465
|
-
branch: false,
|
|
1513
|
+
branch: false,
|
|
1514
|
+
allowDirty: false,
|
|
1466
1515
|
aggressiveCleanOnFail: false,
|
|
1467
1516
|
verifyAi: defaults.verify_ai ?? true,
|
|
1468
1517
|
verifyModel: undefined,
|
|
1469
1518
|
decompose: defaults.decompose ?? true,
|
|
1470
1519
|
maxDecomposeDepth: defaults.max_decompose_depth ?? 2,
|
|
1471
1520
|
maxTotalTasks: defaults.max_total_tasks ?? 500,
|
|
1472
|
-
buildCommand: undefined,
|
|
1521
|
+
buildCommand: undefined,
|
|
1522
|
+
testCommand: undefined,
|
|
1523
|
+
lintCommand: undefined,
|
|
1473
1524
|
skipOnFail: defaults.skip_on_fail ?? true,
|
|
1474
1525
|
approvalMode: (defaults.approval_mode ?? 'yolo'),
|
|
1475
|
-
verbose: false,
|
|
1526
|
+
verbose: false,
|
|
1527
|
+
dryRun: false,
|
|
1476
1528
|
};
|
|
1477
1529
|
const abortSignal = { aborted: false };
|
|
1478
1530
|
managed.antonActive = true;
|
|
@@ -1544,8 +1596,12 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
1544
1596
|
await client.destroy();
|
|
1545
1597
|
process.exit(0);
|
|
1546
1598
|
};
|
|
1547
|
-
process.on('SIGINT', () => {
|
|
1548
|
-
|
|
1599
|
+
process.on('SIGINT', () => {
|
|
1600
|
+
void shutdown();
|
|
1601
|
+
});
|
|
1602
|
+
process.on('SIGTERM', () => {
|
|
1603
|
+
void shutdown();
|
|
1604
|
+
});
|
|
1549
1605
|
await client.login(token);
|
|
1550
1606
|
}
|
|
1551
1607
|
//# sourceMappingURL=discord.js.map
|