@visorcraft/idlehands 1.1.17 → 1.2.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/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 +57 -20
- 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 +251 -0
- package/dist/agent/tool-loop-guard.js.map +1 -0
- package/dist/agent.js +460 -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 +65 -31
- 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 +82 -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 +88 -28
- 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 +49 -1
- 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 +69 -34
- 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":"AAGA,OAAO,EACL,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,OAAO,uBAAuB;IAgBf;IACA;IACA;IAjBX,MAAM,GAAkB,IAAI,CAAC;IAC7B,SAAS,GAAG,KAAK,CAAC;IAElB,SAAS,GAAG,IAAI,iBAAiB,CAAC;QACxC,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,EAAE;QAChB,iBAAiB,EAAE,IAAI;QACvB,aAAa,EAAE,IAAI;QACnB,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAW,EAAE,CAAC;KACrF,CAAC,CAAC;IAEK,SAAS,GAAgC,IAAI,CAAC;IAEtD,YACmB,WAAuB,EACvB,OAAyB,EACzB,IAAkC;QAFlC,gBAAW,GAAX,WAAW,CAAY;QACvB,YAAO,GAAP,OAAO,CAAkB;QACzB,SAAI,GAAJ,IAAI,CAA8B;IAClD,CAAC;IAEJ,KAAK;QACH,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAE7C,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC;YAC3E,IAAI,CAAC,SAAS,GAAG,IAAI,oBAAoB,CAAC;gBACxC,UAAU,EAAE,KAAK;gBACjB,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE;gBACpD,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;oBACpB,IAAI,CAAC,IAAI,CAAC,WAAW;wBAAE,OAAO;oBAC9B,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpC,CAAC;gBACD,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;gBACvC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;gBAC7C,aAAa,EAAE,wBAAwB;aACxC,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,SAAS,CAAC,IAAmB;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAChD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAiB;QAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3C,gDAAgD;QAChD,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,SAAS,CAAC,MAAM;YAAE,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;QAEhE,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YAClC,QAAQ,IAAI,SAAS,CAAC;QACxB,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,QAAQ,IAAI,0EAA0E,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,QAAQ,IAAI,4EAA4E,CAAC;QAC3F,CAAC;QAED,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEnD,IAAI,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACzD,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAO,IAAI,CAAC,OAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,MAAO,IAAI,CAAC,OAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACvB,MAAO,IAAI,CAAC,OAAe,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAc;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,MAAM,EAAE,CACxE,CAAC;QACF,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QAEtC,IAAI,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACzD,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAO,IAAI,CAAC,OAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;CACF"}
|
package/dist/bot/discord.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { Client, Events, GatewayIntentBits, Partials, REST, Routes, SlashCommandBuilder, } from 'discord.js';
|
|
2
|
-
import path from 'node:path';
|
|
3
1
|
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { Client, Events, GatewayIntentBits, Partials, REST, Routes, SlashCommandBuilder, } from 'discord.js';
|
|
4
4
|
import { createSession } from '../agent.js';
|
|
5
|
-
import { DiscordConfirmProvider } from './confirm-discord.js';
|
|
6
|
-
import { parseAllowedUsers, normalizeApprovalMode, splitDiscord, safeContent, detectEscalation, checkKeywordEscalation, resolveAgentForMessage, sessionKeyForMessage, } from './discord-routing.js';
|
|
7
|
-
import { firstToken } from '../cli/command-utils.js';
|
|
8
|
-
import { projectDir, PKG_VERSION } from '../utils.js';
|
|
9
|
-
import { WATCHDOG_RECOMMENDED_TUNING_TEXT, formatWatchdogCancelMessage, resolveWatchdogSettings, shouldRecommendWatchdogTuning } from '../watchdog.js';
|
|
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;
|
|
@@ -715,7 +732,9 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
715
732
|
const lines = [
|
|
716
733
|
`**Current Agent:** ${agentName}`,
|
|
717
734
|
persona.model ? `**Model:** ${persona.model}` : null,
|
|
718
|
-
persona.system_prompt
|
|
735
|
+
persona.system_prompt
|
|
736
|
+
? `**System Prompt:** ${persona.system_prompt.slice(0, 100)}...`
|
|
737
|
+
: null,
|
|
719
738
|
].filter(Boolean);
|
|
720
739
|
await interaction.editReply(lines.join('\n'));
|
|
721
740
|
}
|
|
@@ -769,7 +788,7 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
769
788
|
const currentModel = managed?.config.model || config.model || 'default';
|
|
770
789
|
const lines = [
|
|
771
790
|
`**Current model:** \`${currentModel}\``,
|
|
772
|
-
`**Escalation models:** ${escalation.models.map(m => `\`${m}\``).join(', ')}`,
|
|
791
|
+
`**Escalation models:** ${escalation.models.map((m) => `\`${m}\``).join(', ')}`,
|
|
773
792
|
'',
|
|
774
793
|
'Usage: `/escalate model:<name>` or `/escalate model:next`',
|
|
775
794
|
];
|
|
@@ -792,7 +811,7 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
792
811
|
else {
|
|
793
812
|
// Specific model requested
|
|
794
813
|
if (!escalation.models.includes(arg)) {
|
|
795
|
-
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(', ')}`);
|
|
796
815
|
break;
|
|
797
816
|
}
|
|
798
817
|
targetModel = arg;
|
|
@@ -842,7 +861,8 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
842
861
|
if (requireMentionChannels.includes(msg.channelId)) {
|
|
843
862
|
const botMention = client.user ? `<@${client.user.id}>` : null;
|
|
844
863
|
const botMentionNick = client.user ? `<@!${client.user.id}>` : null;
|
|
845
|
-
const isMentioned = botMention &&
|
|
864
|
+
const isMentioned = botMention &&
|
|
865
|
+
(content.includes(botMention) || (botMentionNick && content.includes(botMentionNick)));
|
|
846
866
|
if (!isMentioned)
|
|
847
867
|
return; // Silently ignore messages without mention
|
|
848
868
|
// Strip the bot mention from content so the agent sees clean text
|
|
@@ -893,6 +913,7 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
893
913
|
'Commands:',
|
|
894
914
|
'/start — Welcome + config summary',
|
|
895
915
|
'/help — This message',
|
|
916
|
+
'/version — Show version',
|
|
896
917
|
'/new — Start a new session',
|
|
897
918
|
'/cancel — Abort current generation',
|
|
898
919
|
'/status — Session stats',
|
|
@@ -920,6 +941,10 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
920
941
|
await sendUserVisible(msg, `Model: \`${managed.session.model}\`\nHarness: \`${managed.session.harness}\``).catch(() => { });
|
|
921
942
|
return;
|
|
922
943
|
}
|
|
944
|
+
if (content === '/version') {
|
|
945
|
+
await sendUserVisible(msg, `Idle Hands v${PKG_VERSION}`).catch(() => { });
|
|
946
|
+
return;
|
|
947
|
+
}
|
|
923
948
|
if (content === '/compact') {
|
|
924
949
|
managed.session.reset();
|
|
925
950
|
await sendUserVisible(msg, '🗜 Session context compacted (reset to system prompt).').catch(() => { });
|
|
@@ -934,7 +959,10 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
934
959
|
];
|
|
935
960
|
if (!managed.dirPinned && managed.repoCandidates.length > 1) {
|
|
936
961
|
lines.push('Action required: run `/dir <repo-root>` before file edits.');
|
|
937
|
-
lines.push(`Detected repos: ${managed.repoCandidates
|
|
962
|
+
lines.push(`Detected repos: ${managed.repoCandidates
|
|
963
|
+
.slice(0, 5)
|
|
964
|
+
.map((p) => `\`${p}\``)
|
|
965
|
+
.join(', ')}`);
|
|
938
966
|
}
|
|
939
967
|
await sendUserVisible(msg, lines.join('\n')).catch(() => { });
|
|
940
968
|
return;
|
|
@@ -1121,7 +1149,9 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
1121
1149
|
...(p.endpoint ? [`Endpoint: \`${p.endpoint}\``] : []),
|
|
1122
1150
|
...(p.approval_mode ? [`Approval: \`${p.approval_mode}\``] : []),
|
|
1123
1151
|
...(p.default_dir ? [`Default dir: \`${p.default_dir}\``] : []),
|
|
1124
|
-
...(p.allowed_dirs?.length
|
|
1152
|
+
...(p.allowed_dirs?.length
|
|
1153
|
+
? [`Allowed dirs: ${p.allowed_dirs.map((d) => `\`${d}\``).join(', ')}`]
|
|
1154
|
+
: []),
|
|
1125
1155
|
];
|
|
1126
1156
|
await sendUserVisible(msg, lines.join('\n')).catch(() => { });
|
|
1127
1157
|
return;
|
|
@@ -1146,13 +1176,19 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
1146
1176
|
if (routing.default)
|
|
1147
1177
|
lines.push(`Default: \`${routing.default}\``);
|
|
1148
1178
|
if (routing.users && Object.keys(routing.users).length > 0) {
|
|
1149
|
-
lines.push(`Users: ${Object.entries(routing.users)
|
|
1179
|
+
lines.push(`Users: ${Object.entries(routing.users)
|
|
1180
|
+
.map(([u, a]) => `${u}→${a}`)
|
|
1181
|
+
.join(', ')}`);
|
|
1150
1182
|
}
|
|
1151
1183
|
if (routing.channels && Object.keys(routing.channels).length > 0) {
|
|
1152
|
-
lines.push(`Channels: ${Object.entries(routing.channels)
|
|
1184
|
+
lines.push(`Channels: ${Object.entries(routing.channels)
|
|
1185
|
+
.map(([c, a]) => `${c}→${a}`)
|
|
1186
|
+
.join(', ')}`);
|
|
1153
1187
|
}
|
|
1154
1188
|
if (routing.guilds && Object.keys(routing.guilds).length > 0) {
|
|
1155
|
-
lines.push(`Guilds: ${Object.entries(routing.guilds)
|
|
1189
|
+
lines.push(`Guilds: ${Object.entries(routing.guilds)
|
|
1190
|
+
.map(([g, a]) => `${g}→${a}`)
|
|
1191
|
+
.join(', ')}`);
|
|
1156
1192
|
}
|
|
1157
1193
|
}
|
|
1158
1194
|
await sendUserVisible(msg, lines.join('\n')).catch(() => { });
|
|
@@ -1171,7 +1207,7 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
1171
1207
|
const currentModel = managed.config.model || config.model || 'default';
|
|
1172
1208
|
const lines = [
|
|
1173
1209
|
`**Current model:** \`${currentModel}\``,
|
|
1174
|
-
`**Escalation models:** ${escalation.models.map(m => `\`${m}\``).join(', ')}`,
|
|
1210
|
+
`**Escalation models:** ${escalation.models.map((m) => `\`${m}\``).join(', ')}`,
|
|
1175
1211
|
'',
|
|
1176
1212
|
'Usage: `/escalate <model>` or `/escalate next`',
|
|
1177
1213
|
'Then send your message - it will use the escalated model.',
|
|
@@ -1191,7 +1227,7 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
1191
1227
|
else {
|
|
1192
1228
|
// Specific model requested
|
|
1193
1229
|
if (!escalation.models.includes(arg)) {
|
|
1194
|
-
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(() => { });
|
|
1195
1231
|
return;
|
|
1196
1232
|
}
|
|
1197
1233
|
targetModel = arg;
|
|
@@ -1465,7 +1501,8 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
1465
1501
|
}
|
|
1466
1502
|
const defaults = managed.config.anton || {};
|
|
1467
1503
|
const runConfig = {
|
|
1468
|
-
taskFile: filePath,
|
|
1504
|
+
taskFile: filePath,
|
|
1505
|
+
projectDir: cwd,
|
|
1469
1506
|
maxRetriesPerTask: defaults.max_retries ?? 3,
|
|
1470
1507
|
maxIterations: defaults.max_iterations ?? 200,
|
|
1471
1508
|
taskTimeoutSec: defaults.task_timeout_sec ?? 600,
|
|
@@ -1473,17 +1510,21 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
1473
1510
|
maxTotalTokens: defaults.max_total_tokens ?? Infinity,
|
|
1474
1511
|
maxPromptTokensPerAttempt: defaults.max_prompt_tokens_per_attempt ?? 128_000,
|
|
1475
1512
|
autoCommit: defaults.auto_commit ?? true,
|
|
1476
|
-
branch: false,
|
|
1513
|
+
branch: false,
|
|
1514
|
+
allowDirty: false,
|
|
1477
1515
|
aggressiveCleanOnFail: false,
|
|
1478
1516
|
verifyAi: defaults.verify_ai ?? true,
|
|
1479
1517
|
verifyModel: undefined,
|
|
1480
1518
|
decompose: defaults.decompose ?? true,
|
|
1481
1519
|
maxDecomposeDepth: defaults.max_decompose_depth ?? 2,
|
|
1482
1520
|
maxTotalTasks: defaults.max_total_tasks ?? 500,
|
|
1483
|
-
buildCommand: undefined,
|
|
1521
|
+
buildCommand: undefined,
|
|
1522
|
+
testCommand: undefined,
|
|
1523
|
+
lintCommand: undefined,
|
|
1484
1524
|
skipOnFail: defaults.skip_on_fail ?? true,
|
|
1485
1525
|
approvalMode: (defaults.approval_mode ?? 'yolo'),
|
|
1486
|
-
verbose: false,
|
|
1526
|
+
verbose: false,
|
|
1527
|
+
dryRun: false,
|
|
1487
1528
|
};
|
|
1488
1529
|
const abortSignal = { aborted: false };
|
|
1489
1530
|
managed.antonActive = true;
|
|
@@ -1555,8 +1596,12 @@ When you escalate, your request will be re-run on a more capable model.`;
|
|
|
1555
1596
|
await client.destroy();
|
|
1556
1597
|
process.exit(0);
|
|
1557
1598
|
};
|
|
1558
|
-
process.on('SIGINT', () => {
|
|
1559
|
-
|
|
1599
|
+
process.on('SIGINT', () => {
|
|
1600
|
+
void shutdown();
|
|
1601
|
+
});
|
|
1602
|
+
process.on('SIGTERM', () => {
|
|
1603
|
+
void shutdown();
|
|
1604
|
+
});
|
|
1560
1605
|
await client.login(token);
|
|
1561
1606
|
}
|
|
1562
1607
|
//# sourceMappingURL=discord.js.map
|