kimaki 1.4.0 → 1.5.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/assets/fonts/Geist-Bold.ttf +0 -0
- package/assets/fonts/Geist-Regular.ttf +0 -0
- package/assets/fonts/GeistMono-Regular.ttf +0 -0
- package/assets/fonts/OFL.txt +92 -0
- package/dist/agent-ui.e2e.test.js +27 -13
- package/dist/agent-ui.e2e.test.js.map +1 -1
- package/dist/agent-ui.js +2 -1
- package/dist/agent-ui.js.map +1 -1
- package/dist/analytics.e2e.test.js +1 -1
- package/dist/analytics.e2e.test.js.map +1 -1
- package/dist/autostart.d.ts +4 -0
- package/dist/autostart.js +55 -10
- package/dist/autostart.js.map +1 -1
- package/dist/bot.d.ts +10 -1
- package/dist/bot.js +14 -6
- package/dist/bot.js.map +1 -1
- package/dist/btw.e2e.test.js +3 -3
- package/dist/builtin-skills.d.ts +1 -1
- package/dist/builtin-skills.js +1 -1
- package/dist/builtin-skills.js.map +1 -1
- package/dist/builtin-skills.test.js +3 -4
- package/dist/builtin-skills.test.js.map +1 -1
- package/dist/catalog-refresh.e2e.test.js +2 -2
- package/dist/cli/bot.js +25 -14
- package/dist/cli/bot.js.map +1 -1
- package/dist/cli/discord.js +32 -6
- package/dist/cli/discord.js.map +1 -1
- package/dist/cli/schedule.js +23 -9
- package/dist/cli/schedule.js.map +1 -1
- package/dist/cli/session.js +37 -12
- package/dist/cli/session.js.map +1 -1
- package/dist/cli/shared.d.ts +5 -3
- package/dist/cli/shared.js +45 -10
- package/dist/cli/shared.js.map +1 -1
- package/dist/cli-discord.e2e.test.js +13 -8
- package/dist/cli-discord.e2e.test.js.map +1 -1
- package/dist/cli-lock.e2e.test.js +87 -20
- package/dist/cli-lock.e2e.test.js.map +1 -1
- package/dist/cli-read.e2e.test.js +18 -9
- package/dist/cli-read.e2e.test.js.map +1 -1
- package/dist/cli-sessions.e2e.test.js +4 -3
- package/dist/cli-sessions.e2e.test.js.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/preference-commands.d.ts +4 -0
- package/dist/commands/preference-commands.js +38 -4
- package/dist/commands/preference-commands.js.map +1 -1
- package/dist/commands/session-commands.js +11 -8
- package/dist/commands/session-commands.js.map +1 -1
- package/dist/commands/thread-commands.js +94 -24
- package/dist/commands/thread-commands.js.map +1 -1
- package/dist/commands/worktree-commands.d.ts +5 -6
- package/dist/commands/worktree-commands.js +8 -7
- package/dist/commands/worktree-commands.js.map +1 -1
- package/dist/commands.e2e.test.js +25 -21
- package/dist/commands.e2e.test.js.map +1 -1
- package/dist/coordinator-agents.e2e.test.d.ts +1 -0
- package/dist/coordinator-agents.e2e.test.js +113 -0
- package/dist/coordinator-agents.e2e.test.js.map +1 -0
- package/dist/coordinator-idle.e2e.test.d.ts +1 -0
- package/dist/coordinator-idle.e2e.test.js +100 -0
- package/dist/coordinator-idle.e2e.test.js.map +1 -0
- package/dist/coordinator-queue.e2e.test.d.ts +1 -0
- package/dist/coordinator-queue.e2e.test.js +244 -0
- package/dist/coordinator-queue.e2e.test.js.map +1 -0
- package/dist/coordinator-warmup.e2e.test.d.ts +1 -0
- package/dist/coordinator-warmup.e2e.test.js +131 -0
- package/dist/coordinator-warmup.e2e.test.js.map +1 -0
- package/dist/coordinator.d.ts +6 -0
- package/dist/coordinator.e2e.test.d.ts +1 -0
- package/dist/coordinator.e2e.test.js +505 -0
- package/dist/coordinator.e2e.test.js.map +1 -0
- package/dist/coordinator.js +164 -0
- package/dist/coordinator.js.map +1 -0
- package/dist/db.d.ts +78 -3
- package/dist/db.test.js +1 -0
- package/dist/db.test.js.map +1 -1
- package/dist/diagram.d.ts +11 -0
- package/dist/diagram.js +232 -0
- package/dist/diagram.js.map +1 -0
- package/dist/diagram.test.d.ts +1 -0
- package/dist/diagram.test.js +52 -0
- package/dist/diagram.test.js.map +1 -0
- package/dist/duration.js +13 -5
- package/dist/duration.js.map +1 -1
- package/dist/effects.d.ts +6 -1
- package/dist/effects.js +97 -26
- package/dist/effects.js.map +1 -1
- package/dist/event-loop.d.ts +1 -1
- package/dist/event-loop.js +73 -43
- package/dist/event-loop.js.map +1 -1
- package/dist/format-parts.d.ts +21 -4
- package/dist/format-parts.js +40 -23
- package/dist/format-parts.js.map +1 -1
- package/dist/gateway-replay.e2e.test.js +4 -4
- package/dist/harness.e2e.test.js +2 -2
- package/dist/harness.e2e.test.js.map +1 -1
- package/dist/hello-thread.e2e.test.js +56 -5
- package/dist/hello-thread.e2e.test.js.map +1 -1
- package/dist/ingress.js +47 -12
- package/dist/ingress.js.map +1 -1
- package/dist/interaction-context.d.ts +4 -4
- package/dist/interaction-context.js +9 -7
- package/dist/interaction-context.js.map +1 -1
- package/dist/interrupt.e2e.test.js +8 -5
- package/dist/interrupt.e2e.test.js.map +1 -1
- package/dist/legacy.e2e.test.js +1 -1
- package/dist/lock-routes.d.ts +83 -31
- package/dist/lock-routes.js +68 -8
- package/dist/lock-routes.js.map +1 -1
- package/dist/lock-server.d.ts +3 -2
- package/dist/lock-server.js +23 -7
- package/dist/lock-server.js.map +1 -1
- package/dist/main.d.ts +4 -2
- package/dist/main.js +13 -3
- package/dist/main.js.map +1 -1
- package/dist/mainmast-idle.e2e.test.d.ts +1 -0
- package/dist/mainmast-idle.e2e.test.js +99 -0
- package/dist/mainmast-idle.e2e.test.js.map +1 -0
- package/dist/mainmast-queue.e2e.test.d.ts +1 -0
- package/dist/mainmast-queue.e2e.test.js +244 -0
- package/dist/mainmast-queue.e2e.test.js.map +1 -0
- package/dist/mainmast-warmup.e2e.test.d.ts +1 -0
- package/dist/mainmast-warmup.e2e.test.js +130 -0
- package/dist/mainmast-warmup.e2e.test.js.map +1 -0
- package/dist/mainmast.d.ts +6 -0
- package/dist/mainmast.e2e.test.d.ts +1 -0
- package/dist/mainmast.e2e.test.js +428 -0
- package/dist/mainmast.e2e.test.js.map +1 -0
- package/dist/mainmast.js +156 -0
- package/dist/mainmast.js.map +1 -0
- package/dist/markdown/markdown.test.js +4 -4
- package/dist/markdown/render-markdown.js +6 -5
- package/dist/markdown/render-markdown.js.map +1 -1
- package/dist/onboarding-cli.e2e.test.js +7 -6
- package/dist/onboarding-cli.e2e.test.js.map +1 -1
- package/dist/onboarding.d.ts +3 -10
- package/dist/onboarding.e2e.test.js +8 -10
- package/dist/onboarding.e2e.test.js.map +1 -1
- package/dist/onboarding.js +14 -24
- package/dist/onboarding.js.map +1 -1
- package/dist/permissions.e2e.test.js +3 -3
- package/dist/plugin/coordinator.d.ts +4 -0
- package/dist/plugin/coordinator.js +389 -0
- package/dist/plugin/coordinator.js.map +1 -0
- package/dist/plugin/index.js +76 -17
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/mainmast.d.ts +4 -0
- package/dist/plugin/mainmast.js +379 -0
- package/dist/plugin/mainmast.js.map +1 -0
- package/dist/plugin.e2e.test.js +1 -1
- package/dist/preference-commands.e2e.test.js +103 -24
- package/dist/preference-commands.e2e.test.js.map +1 -1
- package/dist/project.d.ts +1 -1
- package/dist/prompt.d.ts +22 -9
- package/dist/prompt.js +64 -48
- package/dist/prompt.js.map +1 -1
- package/dist/questions.e2e.test.js +13 -13
- package/dist/queue-sources.e2e.test.d.ts +1 -0
- package/dist/queue-sources.e2e.test.js +168 -0
- package/dist/queue-sources.e2e.test.js.map +1 -0
- package/dist/queue.d.ts +9 -1
- package/dist/queue.e2e.test.js +48 -30
- package/dist/queue.e2e.test.js.map +1 -1
- package/dist/queue.js +97 -24
- package/dist/queue.js.map +1 -1
- package/dist/queue.test.d.ts +1 -0
- package/dist/queue.test.js +57 -0
- package/dist/queue.test.js.map +1 -0
- package/dist/remote-send.e2e.test.js +6 -6
- package/dist/remote-send.js +2 -1
- package/dist/remote-send.js.map +1 -1
- package/dist/renderer.e2e.test.js +7 -7
- package/dist/restart.e2e.test.js +2 -2
- package/dist/routines.e2e.test.js +2 -2
- package/dist/scheduler.d.ts +3 -3
- package/dist/scheduler.e2e.test.js +43 -20
- package/dist/scheduler.e2e.test.js.map +1 -1
- package/dist/scheduler.js +4 -2
- package/dist/scheduler.js.map +1 -1
- package/dist/schema-sql.d.ts +1 -1
- package/dist/schema-sql.js +1 -1
- package/dist/schema-sql.js.map +1 -1
- package/dist/schema.d.ts +152 -6
- package/dist/schema.js +12 -0
- package/dist/schema.js.map +1 -1
- package/dist/session-commands.e2e.test.js +36 -11
- package/dist/session-commands.e2e.test.js.map +1 -1
- package/dist/session-events.d.ts +18 -6
- package/dist/session-events.js +166 -22
- package/dist/session-events.js.map +1 -1
- package/dist/session-ops.e2e.test.js +63 -12
- package/dist/session-ops.e2e.test.js.map +1 -1
- package/dist/sessions.d.ts +44 -21
- package/dist/sessions.js +174 -63
- package/dist/sessions.js.map +1 -1
- package/dist/shell.e2e.test.js +4 -4
- package/dist/slash-commands.js +6 -4
- package/dist/slash-commands.js.map +1 -1
- package/dist/slash-commands.test.js +2 -0
- package/dist/slash-commands.test.js.map +1 -1
- package/dist/sleep.e2e.test.js +29 -14
- package/dist/sleep.e2e.test.js.map +1 -1
- package/dist/sleeps.d.ts +2 -1
- package/dist/sleeps.js +21 -3
- package/dist/sleeps.js.map +1 -1
- package/dist/store.d.ts +1 -0
- package/dist/store.js +3 -2
- package/dist/store.js.map +1 -1
- package/dist/system-prompt.d.ts +3 -1
- package/dist/system-prompt.js +138 -64
- package/dist/system-prompt.js.map +1 -1
- package/dist/test/generate-log-plugin/index.d.ts +3 -0
- package/dist/test/generate-log-plugin/index.js +15 -0
- package/dist/test/generate-log-plugin/index.js.map +1 -0
- package/dist/test/harness.d.ts +20 -1
- package/dist/test/harness.js +51 -10
- package/dist/test/harness.js.map +1 -1
- package/dist/test/replay.js +11 -7
- package/dist/test/replay.js.map +1 -1
- package/dist/thread-reducer.d.ts +29 -3
- package/dist/thread-reducer.fixtures.test.js +58 -51
- package/dist/thread-reducer.fixtures.test.js.map +1 -1
- package/dist/thread-reducer.js +112 -25
- package/dist/thread-reducer.js.map +1 -1
- package/dist/thread-reducer.test.js +197 -24
- package/dist/thread-reducer.test.js.map +1 -1
- package/dist/voice-attachments.e2e.test.js +108 -18
- package/dist/voice-attachments.e2e.test.js.map +1 -1
- package/dist/voice-call.e2e.test.js +9 -9
- package/dist/voice-call.js +6 -6
- package/dist/voice-call.js.map +1 -1
- package/dist/voice-openai.e2e.test.js +59 -23
- package/dist/voice-openai.e2e.test.js.map +1 -1
- package/dist/voice.d.ts +1 -1
- package/dist/voice.js +72 -24
- package/dist/voice.js.map +1 -1
- package/dist/working-directory.e2e.test.js +11 -11
- package/dist/working-directory.e2e.test.js.map +1 -1
- package/package.json +12 -6
- package/src/agent-ui.e2e.test.ts +27 -13
- package/src/agent-ui.ts +2 -1
- package/src/analytics.e2e.test.ts +1 -1
- package/src/autostart.ts +55 -10
- package/src/bot.ts +29 -5
- package/src/btw.e2e.test.ts +3 -3
- package/src/builtin-skills.test.ts +3 -4
- package/src/builtin-skills.ts +1 -1
- package/src/catalog-refresh.e2e.test.ts +2 -2
- package/src/cli/bot.ts +23 -14
- package/src/cli/discord.ts +30 -6
- package/src/cli/schedule.ts +23 -9
- package/src/cli/session.ts +35 -12
- package/src/cli/shared.ts +43 -8
- package/src/cli-discord.e2e.test.ts +13 -8
- package/src/cli-lock.e2e.test.ts +88 -20
- package/src/cli-read.e2e.test.ts +17 -8
- package/src/cli-sessions.e2e.test.ts +4 -3
- package/src/cli.ts +2 -0
- package/src/commands/preference-commands.ts +38 -4
- package/src/commands/session-commands.ts +12 -7
- package/src/commands/thread-commands.ts +92 -24
- package/src/commands/worktree-commands.ts +10 -9
- package/src/commands.e2e.test.ts +25 -21
- package/src/coordinator-agents.e2e.test.ts +145 -0
- package/src/coordinator-idle.e2e.test.ts +122 -0
- package/src/coordinator-queue.e2e.test.ts +279 -0
- package/src/coordinator-warmup.e2e.test.ts +158 -0
- package/src/coordinator.e2e.test.ts +545 -0
- package/src/coordinator.ts +168 -0
- package/src/db.test.ts +1 -0
- package/src/diagram.test.ts +56 -0
- package/src/diagram.ts +243 -0
- package/src/duration.ts +13 -5
- package/src/effects.ts +99 -27
- package/src/event-loop.ts +71 -42
- package/src/format-parts.ts +53 -22
- package/src/gateway-replay.e2e.test.ts +4 -4
- package/src/harness.e2e.test.ts +2 -2
- package/src/hello-thread.e2e.test.ts +59 -5
- package/src/ingress.ts +44 -11
- package/src/interaction-context.ts +12 -11
- package/src/interrupt.e2e.test.ts +8 -5
- package/src/legacy.e2e.test.ts +1 -1
- package/src/lock-routes.ts +62 -8
- package/src/lock-server.ts +23 -7
- package/src/main.ts +22 -7
- package/src/markdown/markdown.test.ts +4 -4
- package/src/markdown/render-markdown.ts +6 -5
- package/src/onboarding-cli.e2e.test.ts +7 -6
- package/src/onboarding.e2e.test.ts +8 -10
- package/src/onboarding.ts +13 -29
- package/src/permissions.e2e.test.ts +3 -3
- package/src/plugin/coordinator.ts +401 -0
- package/src/plugin/index.ts +68 -15
- package/src/plugin.e2e.test.ts +1 -1
- package/src/preference-commands.e2e.test.ts +103 -23
- package/src/prompt.ts +87 -43
- package/src/questions.e2e.test.ts +13 -13
- package/src/queue-sources.e2e.test.ts +197 -0
- package/src/queue.e2e.test.ts +48 -30
- package/src/queue.test.ts +59 -0
- package/src/queue.ts +104 -24
- package/src/remote-send.e2e.test.ts +6 -6
- package/src/remote-send.ts +2 -1
- package/src/renderer.e2e.test.ts +7 -7
- package/src/restart.e2e.test.ts +2 -2
- package/src/routines.e2e.test.ts +2 -2
- package/src/scheduler.e2e.test.ts +45 -19
- package/src/scheduler.ts +4 -2
- package/src/schema-sql.ts +1 -1
- package/src/schema.ts +13 -0
- package/src/session-commands.e2e.test.ts +38 -11
- package/src/session-events.ts +160 -21
- package/src/session-ops.e2e.test.ts +64 -11
- package/src/sessions.ts +214 -64
- package/src/shell.e2e.test.ts +4 -4
- package/src/slash-commands.test.ts +2 -0
- package/src/slash-commands.ts +6 -4
- package/src/sleep.e2e.test.ts +30 -13
- package/src/sleeps.ts +20 -3
- package/src/store.ts +5 -2
- package/src/system-prompt.ts +143 -63
- package/src/test/generate-log-plugin/index.ts +16 -0
- package/src/test/harness.ts +77 -14
- package/src/test/replay.ts +12 -6
- package/src/thread-reducer.fixtures.test.ts +58 -51
- package/src/thread-reducer.test.ts +207 -26
- package/src/thread-reducer.ts +138 -37
- package/src/voice-attachments.e2e.test.ts +110 -18
- package/src/voice-call.e2e.test.ts +9 -9
- package/src/voice-call.ts +6 -6
- package/src/voice-openai.e2e.test.ts +64 -24
- package/src/voice.ts +93 -26
- package/src/working-directory.e2e.test.ts +11 -11
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
// Queue cases in a thread that do not start from a queued Discord message:
|
|
2
|
+
// `kimaki send . queue`, a TUI prompt queued on the session, an item the TUI
|
|
3
|
+
// promotes to steer, a plain message while an item waits, and `. queue` on an
|
|
4
|
+
// idle thread. Split from queue.e2e so both files run in parallel.
|
|
5
|
+
import { execFile } from 'node:child_process';
|
|
6
|
+
import fs from 'node:fs';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import { promisify } from 'node:util';
|
|
9
|
+
import { afterAll, beforeAll, expect, test } from 'vitest';
|
|
10
|
+
import { TEST_USER_ID, seedProjectChannel, slowTextMatcher, startOpencodeTestServer, startTestBot, startTwin, tempDataDir, textParts, waitForBotMessageContaining, waitForFooter, warmUp, } from "./test/harness.js";
|
|
11
|
+
const exec = promisify(execFile);
|
|
12
|
+
function reply(marker, text) {
|
|
13
|
+
return { id: marker, priority: 50, when: { latestUserTextIncludes: marker }, then: { parts: textParts(text) } };
|
|
14
|
+
}
|
|
15
|
+
const matchers = [
|
|
16
|
+
slowTextMatcher({ marker: 'slow-marker', text: 'slow-done', delayMs: 1_200 }),
|
|
17
|
+
reply('steer-marker', 'steer ok'),
|
|
18
|
+
reply('queued-one', 'queued one ok'),
|
|
19
|
+
reply('idle-marker', 'idle ok'),
|
|
20
|
+
];
|
|
21
|
+
let server;
|
|
22
|
+
let twin;
|
|
23
|
+
let bot;
|
|
24
|
+
let dataDir;
|
|
25
|
+
beforeAll(async () => {
|
|
26
|
+
dataDir = tempDataDir();
|
|
27
|
+
[server, twin] = await Promise.all([startOpencodeTestServer({ matchers }), startTwin()]);
|
|
28
|
+
await seedProjectChannel({ dataDir, channelId: twin.channelId, guildId: twin.discord.guildId, directory: server.projectDirectory });
|
|
29
|
+
await warmUp({ server });
|
|
30
|
+
bot = await startTestBot({ dataDir, twin, server });
|
|
31
|
+
});
|
|
32
|
+
afterAll(async () => {
|
|
33
|
+
await bot?.stop();
|
|
34
|
+
await twin?.stop();
|
|
35
|
+
await server?.stop();
|
|
36
|
+
fs.rmSync(dataDir, { recursive: true, force: true });
|
|
37
|
+
});
|
|
38
|
+
// Starts a slow turn in a new thread and waits until it runs (banner posted).
|
|
39
|
+
async function startSlowThread(content) {
|
|
40
|
+
const { discord, channelId } = twin;
|
|
41
|
+
const before = new Set((await discord.channel(channelId).getThreads()).map((thread) => thread.id));
|
|
42
|
+
await discord.channel(channelId).user(TEST_USER_ID).sendMessage({ content: `${content} slow-marker` });
|
|
43
|
+
const thread = await discord.channel(channelId).waitForThread({ timeout: 8_000, predicate: (candidate) => !before.has(candidate.id) });
|
|
44
|
+
await waitForBotMessageContaining({ discord, threadId: thread.id, text: '*using ' });
|
|
45
|
+
return thread;
|
|
46
|
+
}
|
|
47
|
+
function rootOf(threadId) {
|
|
48
|
+
const sessionID = bot.store.getState().roots[threadId];
|
|
49
|
+
if (!sessionID)
|
|
50
|
+
throw new Error(`thread ${threadId} has no session`);
|
|
51
|
+
return sessionID;
|
|
52
|
+
}
|
|
53
|
+
test('CLI . queue into a busy thread shows the full text, then replies to it when it runs', async () => {
|
|
54
|
+
const thread = await startSlowThread('CLI queue');
|
|
55
|
+
await exec(process.execPath, ['--import', 'tsx', path.resolve('src/cli.ts'), 'send', '--thread', thread.id, '--prompt', 'From the CLI queued-one\nsecond line. queue', '--data-dir', dataDir], {
|
|
56
|
+
env: { ...process.env, KIMAKI_LOCK_PORT: String(bot.lock.port) },
|
|
57
|
+
});
|
|
58
|
+
await waitForBotMessageContaining({ discord: twin.discord, threadId: thread.id, text: 'queued one ok' });
|
|
59
|
+
await waitForFooter({ discord: twin.discord, threadId: thread.id, count: 2 });
|
|
60
|
+
expect(await twin.discord.thread(thread.id).text({ showReplies: true })).toMatchInlineSnapshot(`
|
|
61
|
+
"--- from: user (tommy)
|
|
62
|
+
CLI queue slow-marker
|
|
63
|
+
--- from: assistant (TestBot)
|
|
64
|
+
-# *using deterministic-provider/deterministic-v2 ⋅ build*
|
|
65
|
+
-# » **CLI:** From the CLI queued-one
|
|
66
|
+
-# second line
|
|
67
|
+
slow-done
|
|
68
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*
|
|
69
|
+
[reply to TestBot: -# » **CLI:** From the CLI queued-one -#]
|
|
70
|
+
-# Queued message sent
|
|
71
|
+
queued one ok
|
|
72
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*"
|
|
73
|
+
`);
|
|
74
|
+
});
|
|
75
|
+
test('a prompt queued from the TUI shows its text, then a reply to it when it runs', async () => {
|
|
76
|
+
const thread = await startSlowThread('TUI queue');
|
|
77
|
+
const client = await server.client();
|
|
78
|
+
await client.session.prompt({ sessionID: rootOf(thread.id), text: 'Typed in the TUI queued-one', delivery: 'queue' });
|
|
79
|
+
await waitForBotMessageContaining({ discord: twin.discord, threadId: thread.id, text: 'queued one ok' });
|
|
80
|
+
await waitForFooter({ discord: twin.discord, threadId: thread.id, count: 2 });
|
|
81
|
+
expect(await twin.discord.thread(thread.id).text({ showReplies: true })).toMatchInlineSnapshot(`
|
|
82
|
+
"--- from: user (tommy)
|
|
83
|
+
TUI queue slow-marker
|
|
84
|
+
--- from: assistant (TestBot)
|
|
85
|
+
-# *using deterministic-provider/deterministic-v2 ⋅ build*
|
|
86
|
+
-# » **user:** Typed in the TUI queued-one
|
|
87
|
+
slow-done
|
|
88
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*
|
|
89
|
+
[reply to TestBot: -# » **user:** Typed in the TUI queued-o]
|
|
90
|
+
-# Queued message sent
|
|
91
|
+
queued one ok
|
|
92
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*"
|
|
93
|
+
`);
|
|
94
|
+
});
|
|
95
|
+
test('a queued item the TUI sends now (steer) gets its reply when promoted, once', async () => {
|
|
96
|
+
const thread = await startSlowThread('Promote me');
|
|
97
|
+
const queued = await twin.discord.thread(thread.id).user(TEST_USER_ID).sendMessage({ content: 'Run me now queued-one. queue' });
|
|
98
|
+
await waitForBotMessageContaining({ discord: twin.discord, threadId: thread.id, text: 'position 1' });
|
|
99
|
+
const client = await server.client();
|
|
100
|
+
await client.session.inbox.update({ sessionID: rootOf(thread.id), inboxID: `msg_discord_${queued.id}`, delivery: 'steer' });
|
|
101
|
+
await waitForBotMessageContaining({ discord: twin.discord, threadId: thread.id, text: 'queued one ok' });
|
|
102
|
+
await waitForFooter({ discord: twin.discord, threadId: thread.id });
|
|
103
|
+
expect(await twin.discord.thread(thread.id).text({ showReplies: true })).toMatchInlineSnapshot(`
|
|
104
|
+
"--- from: user (tommy)
|
|
105
|
+
Promote me slow-marker
|
|
106
|
+
--- from: assistant (TestBot)
|
|
107
|
+
-# *using deterministic-provider/deterministic-v2 ⋅ build*
|
|
108
|
+
--- from: user (tommy)
|
|
109
|
+
Run me now queued-one. queue
|
|
110
|
+
--- from: assistant (TestBot)
|
|
111
|
+
[reply to tommy: Run me now queued-one. queue]
|
|
112
|
+
-# Queued
|
|
113
|
+
[reply to tommy: Run me now queued-one. queue]
|
|
114
|
+
-# Queued message sent
|
|
115
|
+
slow-done
|
|
116
|
+
queued one ok
|
|
117
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*"
|
|
118
|
+
`);
|
|
119
|
+
});
|
|
120
|
+
test('a plain message while an item waits runs first, then the queued item gets its reply', async () => {
|
|
121
|
+
const thread = await startSlowThread('Steer past the queue');
|
|
122
|
+
const user = twin.discord.thread(thread.id).user(TEST_USER_ID);
|
|
123
|
+
await user.sendMessage({ content: 'Later queued-one. queue' });
|
|
124
|
+
await waitForBotMessageContaining({ discord: twin.discord, threadId: thread.id, text: 'position 1' });
|
|
125
|
+
await user.sendMessage({ content: 'Now steer-marker' });
|
|
126
|
+
await waitForBotMessageContaining({ discord: twin.discord, threadId: thread.id, text: 'queued one ok' });
|
|
127
|
+
await waitForFooter({ discord: twin.discord, threadId: thread.id, count: 2 });
|
|
128
|
+
expect(await twin.discord.thread(thread.id).text({ showReplies: true })).toMatchInlineSnapshot(`
|
|
129
|
+
"--- from: user (tommy)
|
|
130
|
+
Steer past the queue slow-marker
|
|
131
|
+
--- from: assistant (TestBot)
|
|
132
|
+
-# *using deterministic-provider/deterministic-v2 ⋅ build*
|
|
133
|
+
--- from: user (tommy)
|
|
134
|
+
Later queued-one. queue
|
|
135
|
+
--- from: assistant (TestBot)
|
|
136
|
+
[reply to tommy: Later queued-one. queue]
|
|
137
|
+
-# Queued
|
|
138
|
+
--- from: user (tommy)
|
|
139
|
+
Now steer-marker
|
|
140
|
+
--- from: assistant (TestBot)
|
|
141
|
+
steer ok
|
|
142
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*
|
|
143
|
+
[reply to tommy: Later queued-one. queue]
|
|
144
|
+
-# Queued message sent
|
|
145
|
+
queued one ok
|
|
146
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*"
|
|
147
|
+
`);
|
|
148
|
+
});
|
|
149
|
+
test('. queue on an idle thread runs at once, like a plain message', async () => {
|
|
150
|
+
const thread = await startSlowThread('Idle queue');
|
|
151
|
+
await waitForFooter({ discord: twin.discord, threadId: thread.id });
|
|
152
|
+
await twin.discord.thread(thread.id).user(TEST_USER_ID).sendMessage({ content: 'Nothing waits idle-marker. queue' });
|
|
153
|
+
await waitForFooter({ discord: twin.discord, threadId: thread.id, count: 2 });
|
|
154
|
+
expect(await twin.discord.thread(thread.id).text({ showReplies: true })).toMatchInlineSnapshot(`
|
|
155
|
+
"--- from: user (tommy)
|
|
156
|
+
Idle queue slow-marker
|
|
157
|
+
--- from: assistant (TestBot)
|
|
158
|
+
-# *using deterministic-provider/deterministic-v2 ⋅ build*
|
|
159
|
+
slow-done
|
|
160
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*
|
|
161
|
+
--- from: user (tommy)
|
|
162
|
+
Nothing waits idle-marker. queue
|
|
163
|
+
--- from: assistant (TestBot)
|
|
164
|
+
idle ok
|
|
165
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*"
|
|
166
|
+
`);
|
|
167
|
+
});
|
|
168
|
+
//# sourceMappingURL=queue-sources.e2e.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-sources.e2e.test.js","sourceRoot":"","sources":["../src/queue-sources.e2e.test.ts"],"names":[],"mappings":"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"}
|
package/dist/queue.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { SessionInboxInfo, V2Event } from '@opencode/client';
|
|
2
2
|
import type { Draft } from 'immer';
|
|
3
3
|
import type { Bot } from './bot.ts';
|
|
4
|
+
import { type DiscordPayload } from './markdown/components.ts';
|
|
4
5
|
import type { Emit, ThreadView } from './thread-reducer.ts';
|
|
5
6
|
export type PendingInput = {
|
|
6
7
|
inboxID: string;
|
|
@@ -8,11 +9,18 @@ export type PendingInput = {
|
|
|
8
9
|
text: string;
|
|
9
10
|
username: string | null;
|
|
10
11
|
messageId: string | null;
|
|
12
|
+
replyTo: string | null;
|
|
11
13
|
acked: boolean;
|
|
12
14
|
echo: string | null;
|
|
13
15
|
};
|
|
14
16
|
export declare function queuedItems(view: Pick<ThreadView, 'inbox'>): readonly PendingInput[];
|
|
15
|
-
export declare function
|
|
17
|
+
export declare function discordMessageId(messageId: string): string | null;
|
|
18
|
+
export declare function formatEcho(input: {
|
|
19
|
+
username: string | null;
|
|
20
|
+
text: string;
|
|
21
|
+
}): string;
|
|
22
|
+
export declare function echoPayloads(echo: string): DiscordPayload[];
|
|
23
|
+
export declare function formatEchoReply(input: {
|
|
16
24
|
username: string | null;
|
|
17
25
|
text: string;
|
|
18
26
|
}): string;
|
package/dist/queue.e2e.test.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Phase 3: the queue on the native OpenCode inbox. `. queue` waits for the run,
|
|
2
|
-
// message delete/edit and /clear-queue change the inbox.
|
|
2
|
+
// message delete/edit and /clear-queue change the inbox. Other sources
|
|
3
|
+
// (CLI, TUI, promotion) are in queue-sources.e2e.
|
|
3
4
|
import fs from 'node:fs';
|
|
4
5
|
import { setTimeout as sleep } from 'node:timers/promises';
|
|
5
6
|
import { afterAll, beforeAll, expect, onTestFinished, test } from 'vitest';
|
|
@@ -8,7 +9,7 @@ function reply(marker, text) {
|
|
|
8
9
|
return { id: marker, priority: 50, when: { latestUserTextIncludes: marker }, then: { parts: textParts(text) } };
|
|
9
10
|
}
|
|
10
11
|
const matchers = [
|
|
11
|
-
slowTextMatcher({ marker: 'slow-marker', text: 'slow-done', delayMs:
|
|
12
|
+
slowTextMatcher({ marker: 'slow-marker', text: 'slow-done', delayMs: 1_500 }),
|
|
12
13
|
reply('steer-marker', 'steer ok'),
|
|
13
14
|
reply('queued-one', 'queued one ok'),
|
|
14
15
|
reply('queued-two', 'queued two ok'),
|
|
@@ -66,15 +67,15 @@ async function expectNever({ threadId, text }) {
|
|
|
66
67
|
expect(messages.some((message) => message.content.includes(text))).toBe(false);
|
|
67
68
|
}
|
|
68
69
|
}
|
|
69
|
-
test('. queue waits for the run, acks with position,
|
|
70
|
+
test('. queue waits for the run, acks with position, replies to the message when it starts', async () => {
|
|
70
71
|
const thread = await startSlowThread('Queue after me');
|
|
71
72
|
const user = twin.discord.thread(thread.id).user(TEST_USER_ID);
|
|
72
|
-
await user.sendMessage({ content: 'First queued-one. queue' });
|
|
73
|
+
const first = await user.sendMessage({ content: 'First queued-one. queue' });
|
|
73
74
|
await waitForBotMessageContaining({ discord: twin.discord, threadId: thread.id, text: 'position 1' });
|
|
74
|
-
await user.sendMessage({ content: 'Second queued-two. queue' });
|
|
75
|
+
const second = await user.sendMessage({ content: 'Second queued-two. queue' });
|
|
75
76
|
await waitForBotMessageContaining({ discord: twin.discord, threadId: thread.id, text: 'queued two ok' });
|
|
76
77
|
await waitForFooter({ discord: twin.discord, threadId: thread.id, count: 3 });
|
|
77
|
-
expect(await twin.discord.thread(thread.id).text()).toMatchInlineSnapshot(`
|
|
78
|
+
expect(await twin.discord.thread(thread.id).text({ showReplies: true })).toMatchInlineSnapshot(`
|
|
78
79
|
"--- from: user (tommy)
|
|
79
80
|
Queue after me slow-marker
|
|
80
81
|
--- from: assistant (TestBot)
|
|
@@ -82,20 +83,27 @@ test('. queue waits for the run, acks with position, echoes when it starts', asy
|
|
|
82
83
|
--- from: user (tommy)
|
|
83
84
|
First queued-one. queue
|
|
84
85
|
--- from: assistant (TestBot)
|
|
85
|
-
|
|
86
|
+
[reply to tommy: First queued-one. queue]
|
|
87
|
+
-# Queued
|
|
86
88
|
--- from: user (tommy)
|
|
87
89
|
Second queued-two. queue
|
|
88
90
|
--- from: assistant (TestBot)
|
|
89
|
-
|
|
91
|
+
[reply to tommy: Second queued-two. queue]
|
|
92
|
+
-# Queued
|
|
90
93
|
slow-done
|
|
91
|
-
-# *
|
|
92
|
-
|
|
94
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*
|
|
95
|
+
[reply to tommy: First queued-one. queue]
|
|
96
|
+
-# Queued message sent
|
|
93
97
|
queued one ok
|
|
94
|
-
-# *
|
|
95
|
-
|
|
98
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*
|
|
99
|
+
[reply to tommy: Second queued-two. queue]
|
|
100
|
+
-# Queued message sent
|
|
96
101
|
queued two ok
|
|
97
|
-
-# *
|
|
102
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*"
|
|
98
103
|
`);
|
|
104
|
+
const messages = await twin.discord.thread(thread.id).getMessages();
|
|
105
|
+
const sent = messages.filter((message) => message.content === '-# Queued message sent');
|
|
106
|
+
expect(sent.map((message) => message.message_reference?.message_id)).toEqual([first.id, second.id]);
|
|
99
107
|
});
|
|
100
108
|
test('message delete takes items out of the queue, edit re-queues', async () => {
|
|
101
109
|
const thread = await startSlowThread('Queue edits');
|
|
@@ -131,24 +139,29 @@ test('message delete takes items out of the queue, edit re-queues', async () =>
|
|
|
131
139
|
await user.editMessage({ messageId: edited.id, content: 'New text edited-marker. queue' });
|
|
132
140
|
await waitForBotMessageContaining({ discord: twin.discord, threadId: thread.id, text: 'edited ok' });
|
|
133
141
|
await waitForFooter({ discord: twin.discord, threadId: thread.id, count: 2 });
|
|
134
|
-
expect(await twin.discord.thread(thread.id).text()).toMatchInlineSnapshot(`
|
|
142
|
+
expect(await twin.discord.thread(thread.id).text({ showReplies: true })).toMatchInlineSnapshot(`
|
|
135
143
|
"--- from: user (tommy)
|
|
136
144
|
Queue edits slow-marker
|
|
137
145
|
--- from: assistant (TestBot)
|
|
138
146
|
-# *using deterministic-provider/deterministic-v2 ⋅ build*
|
|
147
|
+
[reply to unknown message]
|
|
139
148
|
-# Removed from queue
|
|
149
|
+
[reply to unknown message]
|
|
140
150
|
-# Removed from queue
|
|
141
151
|
--- from: user (tommy)
|
|
142
152
|
New text edited-marker. queue
|
|
143
153
|
[attachment: queued-notes.txt]
|
|
144
154
|
--- from: assistant (TestBot)
|
|
155
|
+
[reply to tommy: New text edited-marker. queue]
|
|
145
156
|
-# Removed from queue
|
|
146
|
-
|
|
157
|
+
[reply to tommy: New text edited-marker. queue]
|
|
158
|
+
-# Queued
|
|
147
159
|
slow-done
|
|
148
|
-
-# *
|
|
149
|
-
|
|
160
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*
|
|
161
|
+
[reply to tommy: New text edited-marker. queue]
|
|
162
|
+
-# Queued message sent
|
|
150
163
|
edited ok
|
|
151
|
-
-# *
|
|
164
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*"
|
|
152
165
|
`);
|
|
153
166
|
await expectNever({ threadId: thread.id, text: 'queued one ok' });
|
|
154
167
|
await expectNever({ threadId: thread.id, text: 'queued two ok' });
|
|
@@ -171,7 +184,7 @@ test('a revoked user cannot replace a queued prompt', async () => {
|
|
|
171
184
|
await twin.discord.prisma.guildMember.update({ where: member, data: { roles: JSON.stringify([deny.id]) } });
|
|
172
185
|
await user.editMessage({ messageId: queued.id, content: 'Replacement edited-marker. queue' });
|
|
173
186
|
await waitForFooter({ discord: twin.discord, threadId: thread.id, count: 2 });
|
|
174
|
-
expect(await twin.discord.thread(thread.id).text()).toMatchInlineSnapshot(`
|
|
187
|
+
expect(await twin.discord.thread(thread.id).text({ showReplies: true })).toMatchInlineSnapshot(`
|
|
175
188
|
"--- from: user (tommy)
|
|
176
189
|
Queue before revocation slow-marker
|
|
177
190
|
--- from: assistant (TestBot)
|
|
@@ -179,12 +192,14 @@ test('a revoked user cannot replace a queued prompt', async () => {
|
|
|
179
192
|
--- from: user (tommy)
|
|
180
193
|
Replacement edited-marker. queue
|
|
181
194
|
--- from: assistant (TestBot)
|
|
182
|
-
|
|
195
|
+
[reply to tommy: Replacement edited-marker. queue]
|
|
196
|
+
-# Queued
|
|
183
197
|
slow-done
|
|
184
|
-
-# *
|
|
185
|
-
|
|
198
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*
|
|
199
|
+
[reply to tommy: Replacement edited-marker. queue]
|
|
200
|
+
-# Queued message sent
|
|
186
201
|
queued one ok
|
|
187
|
-
-# *
|
|
202
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*"
|
|
188
203
|
`);
|
|
189
204
|
expect(await twin.discord.thread(thread.id).text()).toContain('queued one ok');
|
|
190
205
|
expect(await twin.discord.thread(thread.id).text()).not.toContain('edited ok');
|
|
@@ -199,21 +214,24 @@ test('/queue and /clear-queue', async () => {
|
|
|
199
214
|
await user.runSlashCommand({ name: 'clear-queue', options: [{ name: 'position', type: 4, value: 1 }] });
|
|
200
215
|
await waitForBotMessageContaining({ discord: twin.discord, threadId: thread.id, text: 'queued two ok' });
|
|
201
216
|
await waitForFooter({ discord: twin.discord, threadId: thread.id, count: 2 });
|
|
202
|
-
expect(await twin.discord.thread(thread.id).text()).toMatchInlineSnapshot(`
|
|
217
|
+
expect(await twin.discord.thread(thread.id).text({ showReplies: true })).toMatchInlineSnapshot(`
|
|
203
218
|
"--- from: user (tommy)
|
|
204
219
|
Slash queue slow-marker
|
|
205
220
|
--- from: assistant (TestBot)
|
|
206
221
|
-# *using deterministic-provider/deterministic-v2 ⋅ build*
|
|
207
|
-
» **tommy:** Slash queued-one
|
|
222
|
+
-# » **tommy:** Slash queued-one
|
|
223
|
+
[reply to TestBot: -# » **tommy:** Slash queued-one]
|
|
208
224
|
-# Removed from queue
|
|
209
|
-
» **tommy:** Slash queued-two
|
|
210
|
-
-#
|
|
225
|
+
-# » **tommy:** Slash queued-two
|
|
226
|
+
[reply to TestBot: -# » **tommy:** Slash queued-two]
|
|
227
|
+
-# Queued
|
|
211
228
|
-# Cleared 1 queued message
|
|
212
229
|
slow-done
|
|
213
|
-
-# *
|
|
214
|
-
» **tommy:** Slash queued-two
|
|
230
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*
|
|
231
|
+
[reply to TestBot: -# » **tommy:** Slash queued-two]
|
|
232
|
+
-# Queued message sent
|
|
215
233
|
queued two ok
|
|
216
|
-
-# *
|
|
234
|
+
-# *main ⋅ Ns ⋅ N% ⋅ deterministic-v2*"
|
|
217
235
|
`);
|
|
218
236
|
await expectNever({ threadId: thread.id, text: 'queued one ok' });
|
|
219
237
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.e2e.test.js","sourceRoot":"","sources":["../src/queue.e2e.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"queue.e2e.test.js","sourceRoot":"","sources":["../src/queue.e2e.test.ts"],"names":[],"mappings":"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"}
|
package/dist/queue.js
CHANGED
|
@@ -4,49 +4,115 @@
|
|
|
4
4
|
//
|
|
5
5
|
// inbox.enqueued (queue, while busy) ─▶ "Queued at position N" ack
|
|
6
6
|
// inbox.enqueued (steer, echo) ─▶ the echo line (wakes, scheduled runs, TUI prompts)
|
|
7
|
-
// inbox.delivered
|
|
7
|
+
// inbox.delivered (or promoted) ─▶ "Queued message sent" reply to the user message, ack says "Queued"
|
|
8
8
|
// inbox.cancelled ─▶ ack says "Removed from queue"
|
|
9
9
|
//
|
|
10
|
+
// Every acked item gets that reply when it starts, in threads and coordinator
|
|
11
|
+
// channels alike. The prompt text is never posted again. Prompts without a Discord
|
|
12
|
+
// message (CLI, routines, TUI) have nothing for the ack to reply to: the ack
|
|
13
|
+
// shows the full prompt, and the "Queued message sent" reply goes to the ack.
|
|
14
|
+
//
|
|
10
15
|
// A queued prompt's inbox ID is msg_discord_<messageId> (prompt.ts), so a
|
|
11
16
|
// message delete or an edit maps to the item by ID alone. Items without a
|
|
12
17
|
// Discord source message (/queue, CLI, commands) are removed with /clear-queue.
|
|
13
18
|
// The Discord handlers live in ingress.ts: this file must not import writers.
|
|
14
19
|
import { asSubtext, textOnly } from "./format-parts.js";
|
|
15
20
|
import { stripTurnContext } from "./system-prompt.js";
|
|
16
|
-
|
|
21
|
+
import { markdownPayloads } from "./markdown/components.js";
|
|
22
|
+
import { DISCORD_TEXT_LIMIT } from "./markdown/render-markdown.js";
|
|
17
23
|
export function queuedItems(view) {
|
|
18
24
|
return view.inbox.filter((item) => item.delivery === 'queue');
|
|
19
25
|
}
|
|
20
26
|
function ackKey(inboxID) {
|
|
21
27
|
return `queue:${inboxID}`;
|
|
22
28
|
}
|
|
23
|
-
|
|
29
|
+
// CLI and scheduled prompts carry a UUID, not a Discord message to reply to.
|
|
30
|
+
export function discordMessageId(messageId) {
|
|
31
|
+
return /^\d+$/.test(messageId) ? messageId : null;
|
|
32
|
+
}
|
|
33
|
+
function inputFields({ payload, channelId }) {
|
|
24
34
|
const text = stripTurnContext(payload.text);
|
|
25
35
|
const discord = payload.metadata?.['discord'];
|
|
26
36
|
// Sent outside Discord (TUI, other clients): echo it like V1 external sync did.
|
|
27
37
|
if (!discord || typeof discord !== 'object' || Array.isArray(discord)) {
|
|
28
|
-
return { external: true, text, username: null, messageId: null, echo: text.trim() ? formatEcho({ username: 'user', text }) : null };
|
|
38
|
+
return { external: true, text, username: null, messageId: null, replyTo: null, echo: text.trim() ? formatEcho({ username: 'user', text }) : null };
|
|
29
39
|
}
|
|
30
40
|
const username = discord['username'];
|
|
31
|
-
const
|
|
41
|
+
const raw = discord['messageId'];
|
|
32
42
|
const echo = discord['echo'];
|
|
43
|
+
const messageId = typeof raw === 'string' ? discordMessageId(raw) : null;
|
|
33
44
|
return {
|
|
34
45
|
external: false,
|
|
35
46
|
text,
|
|
36
47
|
username: typeof username === 'string' ? username : null,
|
|
37
|
-
|
|
38
|
-
|
|
48
|
+
messageId,
|
|
49
|
+
// A coordinator prompt's conversation is the project channel itself.
|
|
50
|
+
replyTo: discord['threadId'] === channelId ? messageId : null,
|
|
39
51
|
// Shown when a prompt without a Discord message is taken (wake, scheduled run).
|
|
40
52
|
echo: typeof echo === 'string' ? echo : null,
|
|
41
53
|
};
|
|
42
54
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
55
|
+
function echoLine({ username, text }) {
|
|
56
|
+
// Block markdown only renders at the start of a line, so it goes below the prefix.
|
|
57
|
+
const separator = BLOCK_MARKDOWN_START.test(text) ? '\n' : ' ';
|
|
58
|
+
return `» **${username ?? 'queued'}:**${separator}${text}`;
|
|
59
|
+
}
|
|
60
|
+
// Headings, quotes, lists, code fences, rules, tables and subtext.
|
|
61
|
+
const BLOCK_MARKDOWN_START = /^ {0,3}(#{1,6}(\s|$)|-#\s|>|[-*+]\s|\d{1,9}[.)]\s|```|~~~|-{3,}\s*$|\|)/;
|
|
62
|
+
const CODE_FENCE = /^ {0,3}(```|~~~)/;
|
|
63
|
+
// Every prompt the bot posts (CLI, routines, TUI, voice, slash commands) is
|
|
64
|
+
// subtext, so it reads apart from model output. A long one becomes several messages (effects.ts).
|
|
65
|
+
export function formatEcho(input) {
|
|
66
|
+
return subtext(echoLine(input));
|
|
67
|
+
}
|
|
68
|
+
// A long echo (formatEcho) as several messages, split like model markdown.
|
|
69
|
+
// Each piece gets its `-# ` again: a line cut at a word break would lose it.
|
|
70
|
+
export function echoPayloads(echo) {
|
|
71
|
+
return markdownPayloads(echo).map((payload) => ('content' in payload ? { content: subtext(payload.content.trim()) } : payload));
|
|
72
|
+
}
|
|
73
|
+
// A slash command reply stands in for the user message: one Discord message, long text is cut.
|
|
74
|
+
export function formatEchoReply(input) {
|
|
75
|
+
return cut(formatEcho(input), DISCORD_TEXT_LIMIT);
|
|
76
|
+
}
|
|
77
|
+
// Every non-empty line gets `-# `. Subtext only renders inline markdown: code
|
|
78
|
+
// blocks stay as they are, headings become bold, other block markers show as text.
|
|
79
|
+
function subtext(text) {
|
|
80
|
+
let fenced = false;
|
|
81
|
+
return text
|
|
82
|
+
.split('\n')
|
|
83
|
+
.flatMap((line) => {
|
|
84
|
+
if (CODE_FENCE.test(line))
|
|
85
|
+
fenced = !fenced;
|
|
86
|
+
else if (!fenced && line.trim() === '')
|
|
87
|
+
return [];
|
|
88
|
+
else if (!fenced && !line.startsWith('-# '))
|
|
89
|
+
return [asSubtext(line.replace(HEADING, '**$1**'))];
|
|
90
|
+
return [line];
|
|
91
|
+
})
|
|
92
|
+
.join('\n');
|
|
46
93
|
}
|
|
47
|
-
|
|
94
|
+
const HEADING = /^ {0,3}#{1,6}\s+(.+?)\s*$/;
|
|
95
|
+
function cut(text, limit) {
|
|
96
|
+
return text.length > limit ? `${text.slice(0, limit - 1)}…` : text;
|
|
97
|
+
}
|
|
98
|
+
// The ack of a prompt with a Discord message replies to it. Without one (CLI,
|
|
99
|
+
// routines, TUI) the ack itself shows the prompt, and its status line below.
|
|
100
|
+
function ackContent(item, status) {
|
|
101
|
+
if (item.messageId)
|
|
102
|
+
return asSubtext(status ?? '');
|
|
103
|
+
const line = status ? `\n${asSubtext(status)}` : '';
|
|
104
|
+
return `${cut(subtext(item.echo ?? echoLine(item)), DISCORD_TEXT_LIMIT - line.length)}${line}`;
|
|
105
|
+
}
|
|
106
|
+
function closeAck({ emit }, item, status) {
|
|
48
107
|
if (item.acked)
|
|
49
|
-
emit({ type: 'edit', key: ackKey(item.inboxID), messages: [textOnly(
|
|
108
|
+
emit({ type: 'edit', key: ackKey(item.inboxID), messages: [textOnly(ackContent(item, status))] });
|
|
109
|
+
}
|
|
110
|
+
// An acked item starts running. The user message (or the ack without one)
|
|
111
|
+
// already shows the prompt: a reply to it marks where it runs, instead of a
|
|
112
|
+
// second copy. Also in a coordinator, where the answer may post no text (IDLE).
|
|
113
|
+
function markStarted({ emit }, item) {
|
|
114
|
+
const ack = textOnly(ackContent(item, item.messageId ? 'Queued' : null));
|
|
115
|
+
emit({ type: 'edit', key: ackKey(item.inboxID), messages: [ack], reply: asSubtext('Queued message sent'), replyTo: item.messageId });
|
|
50
116
|
}
|
|
51
117
|
// Removes the item from the inbox; returns it when it was still queued.
|
|
52
118
|
function takeQueued({ draft }, inboxID) {
|
|
@@ -60,35 +126,38 @@ export function enqueueInput(slice) {
|
|
|
60
126
|
const { item, inboxID } = data;
|
|
61
127
|
if (item.type !== 'user' || draft.inbox.some((candidate) => candidate.inboxID === inboxID))
|
|
62
128
|
return;
|
|
63
|
-
const { external, ...fields } = inputFields(item.payload);
|
|
129
|
+
const { external, ...fields } = inputFields({ payload: item.payload, channelId: draft.channelId });
|
|
64
130
|
// The expanded prompt of a command Kimaki ran: the queue echo shows the typed command, never the template.
|
|
65
131
|
const command = external ? draft.commandPending : null;
|
|
66
132
|
if (external)
|
|
67
133
|
draft.commandPending = null;
|
|
68
|
-
const meta = command ? { ...fields, ...command
|
|
134
|
+
const meta = command ? { ...fields, ...command } : fields;
|
|
69
135
|
// Idle with nothing pending: OpenCode runs it at once, like a normal message.
|
|
70
136
|
const acked = item.delivery === 'queue' && (busy || draft.inbox.length > 0);
|
|
71
|
-
|
|
137
|
+
const pending = { inboxID, delivery: item.delivery, ...meta, acked };
|
|
138
|
+
draft.inbox.push(pending);
|
|
72
139
|
if (item.delivery !== 'queue') {
|
|
73
140
|
if (!meta.echo)
|
|
74
141
|
return;
|
|
75
|
-
emit({ type: 'send', text: meta.echo });
|
|
142
|
+
emit({ type: 'send', text: meta.echo, echo: true });
|
|
76
143
|
draft.lastKind = null;
|
|
77
144
|
return;
|
|
78
145
|
}
|
|
79
146
|
if (!acked)
|
|
80
147
|
return;
|
|
81
148
|
const position = queuedItems(draft).length;
|
|
82
|
-
const
|
|
83
|
-
|
|
149
|
+
const remove = meta.messageId ? 'Delete the original message to remove it, or use' : 'Remove it with';
|
|
150
|
+
const ack = textOnly(ackContent(pending, `Queued at position ${position}. ${remove} /clear-queue position:${position}`));
|
|
151
|
+
emit({ type: 'show', key: ackKey(inboxID), messages: [ack], replyTo: meta.messageId, notify: false, echo: true });
|
|
84
152
|
}
|
|
85
153
|
export function deliverQueued(slice) {
|
|
86
154
|
const item = takeQueued(slice, slice.inboxID);
|
|
87
155
|
if (!item || (!item.acked && !item.echo))
|
|
88
156
|
return;
|
|
89
|
-
closeAck(slice, item, 'Queued message sent');
|
|
90
|
-
slice.emit({ type: 'send', text: item.echo ?? formatEcho(item) });
|
|
91
157
|
slice.draft.lastKind = null;
|
|
158
|
+
if (item.acked)
|
|
159
|
+
return markStarted(slice, item);
|
|
160
|
+
slice.emit({ type: 'send', text: item.echo ?? formatEcho(item), echo: true });
|
|
92
161
|
}
|
|
93
162
|
export function cancelQueued(slice) {
|
|
94
163
|
const item = takeQueued(slice, slice.inboxID);
|
|
@@ -100,7 +169,8 @@ export function promoteQueued(slice) {
|
|
|
100
169
|
const item = slice.draft.inbox.find((candidate) => candidate.inboxID === slice.inboxID);
|
|
101
170
|
if (item?.delivery !== 'queue')
|
|
102
171
|
return;
|
|
103
|
-
|
|
172
|
+
if (item.acked)
|
|
173
|
+
markStarted(slice, { ...item });
|
|
104
174
|
item.delivery = 'steer';
|
|
105
175
|
}
|
|
106
176
|
// After a (re)connect: the inbox as OpenCode has it now. Items this view does
|
|
@@ -119,9 +189,12 @@ export function hydrateQueue(slice) {
|
|
|
119
189
|
const existing = known.get(item.id);
|
|
120
190
|
if (existing?.delivery === item.delivery)
|
|
121
191
|
return existing;
|
|
122
|
-
if (existing?.delivery === 'queue' && item.delivery === 'steer')
|
|
123
|
-
|
|
124
|
-
|
|
192
|
+
if (existing?.delivery === 'queue' && item.delivery === 'steer') {
|
|
193
|
+
if (existing.acked)
|
|
194
|
+
markStarted(slice, existing);
|
|
195
|
+
return { ...existing, delivery: 'steer' };
|
|
196
|
+
}
|
|
197
|
+
const { external: _external, ...fields } = inputFields({ payload: item.payload, channelId: draft.channelId });
|
|
125
198
|
return { inboxID: item.id, delivery: item.delivery, ...fields, acked: item.delivery === 'queue' };
|
|
126
199
|
});
|
|
127
200
|
}
|