- Bots have a current computer (bots.computer_id), switched from the chat header beside the model button or by clicking a computer the bot names ([computer:ID]); tasks run on it by default - search_computers runs one read-only command on all of a bot's computers; chat replies know their computers (compose-computers-note) - The coordinator can use every computer and grants or revokes crew access with assign_computer - Delegated jobs record requested_by_bot_id; the worker's result or failure is reported back in the coordinator's conversation - bots_queue_updates records each model turn of a job, pushed live and shown in the working-on panel - Live relay: every process pushes new messages, job steps and bot changes from the database to its own sockets, so work done elsewhere shows live - Bot messages render as markdown (react-markdown + remark-gfm, no raw HTML) with twui components; rail previews are plain text - Fix header button overflow in the model and computer selects - Bump @moduletrace/twui to 0.1.2 Co-Authored-By: Claude Opus 5.5 <[email protected]>
42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import type {
|
|
BUN_SQLITE_COBBLE_BOT_TASK_STEPS,
|
|
BUN_SQLITE_COBBLE_BOT_TASKS,
|
|
} from "@/db/types/db";
|
|
import type { BotTaskWithSteps } from "@/src/types";
|
|
import BunSQLite from "@moduletrace/bun-sqlite";
|
|
import grabBotJobUpdates from "../bots-queue/grab-bot-job-updates";
|
|
|
|
type Params = {
|
|
bot_id: number | string;
|
|
};
|
|
|
|
/**
|
|
* The bot's most recent active task, its steps and what its job has done
|
|
* so far, for the working-on panel.
|
|
*/
|
|
export default async function grabActiveBotTask({
|
|
bot_id,
|
|
}: Params): Promise<BotTaskWithSteps | null> {
|
|
const task_res = await BunSQLite.sql<BUN_SQLITE_COBBLE_BOT_TASKS>({
|
|
sql: `SELECT * FROM bot_tasks WHERE bot_id = ? AND status = 'active' ORDER BY created_at DESC, id DESC LIMIT 1`,
|
|
values: [bot_id],
|
|
});
|
|
|
|
const task = task_res.singleRes || task_res.payload?.[0];
|
|
|
|
if (!task?.id) {
|
|
return null;
|
|
}
|
|
|
|
const steps_res = await BunSQLite.sql<BUN_SQLITE_COBBLE_BOT_TASK_STEPS>({
|
|
sql: `SELECT * FROM bot_task_steps WHERE task_id = ? ORDER BY position ASC, id ASC`,
|
|
values: [task.id],
|
|
});
|
|
|
|
return {
|
|
...task,
|
|
steps: steps_res.payload || [],
|
|
updates: await grabBotJobUpdates({ task_id: task.id }),
|
|
};
|
|
}
|