mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-07-07 23:33:14 +08:00
The boot reconcile of crash-orphaned pending assistant turns (findPendingAssistantMessageIds) full-scanned the message and agent_session_message tables. Add a plain status index on each so the lookup is a SEARCH, not a SCAN. Plain, not partial: Drizzle binds status = ?, which SQLite cannot match against a partial (literal-predicate) index. Also select only id, since the reconcile just flips matched rows to error.
97 lines
4.8 KiB
SQL
97 lines
4.8 KiB
SQL
CREATE TABLE `agent_workspace` (
|
|
`id` text PRIMARY KEY NOT NULL,
|
|
`name` text NOT NULL,
|
|
`path` text NOT NULL,
|
|
`order_key` text NOT NULL,
|
|
`created_at` integer NOT NULL,
|
|
`updated_at` integer NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE UNIQUE INDEX `agent_workspace_path_unique_idx` ON `agent_workspace` (`path`);--> statement-breakpoint
|
|
CREATE INDEX `agent_workspace_order_key_idx` ON `agent_workspace` (`order_key`);--> statement-breakpoint
|
|
DROP TABLE `agent_task_run_log`;--> statement-breakpoint
|
|
DROP TABLE `agent_task`;--> statement-breakpoint
|
|
PRAGMA foreign_keys=OFF;--> statement-breakpoint
|
|
CREATE TABLE `__new_agent_channel_task` (
|
|
`channel_id` text NOT NULL,
|
|
`task_id` text NOT NULL,
|
|
PRIMARY KEY(`channel_id`, `task_id`),
|
|
FOREIGN KEY (`channel_id`) REFERENCES `agent_channel`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
FOREIGN KEY (`task_id`) REFERENCES `job_schedule`(`id`) ON UPDATE no action ON DELETE cascade
|
|
);
|
|
--> statement-breakpoint
|
|
INSERT INTO `__new_agent_channel_task`("channel_id", "task_id") SELECT "channel_id", "task_id" FROM `agent_channel_task`;--> statement-breakpoint
|
|
DROP TABLE `agent_channel_task`;--> statement-breakpoint
|
|
ALTER TABLE `__new_agent_channel_task` RENAME TO `agent_channel_task`;--> statement-breakpoint
|
|
PRAGMA foreign_keys=ON;--> statement-breakpoint
|
|
CREATE INDEX `agent_channel_task_channel_id_idx` ON `agent_channel_task` (`channel_id`);--> statement-breakpoint
|
|
CREATE INDEX `agent_channel_task_task_id_idx` ON `agent_channel_task` (`task_id`);--> statement-breakpoint
|
|
CREATE TABLE `__new_agent_session` (
|
|
`id` text PRIMARY KEY NOT NULL,
|
|
`agent_id` text,
|
|
`name` text NOT NULL,
|
|
`description` text DEFAULT '' NOT NULL,
|
|
`workspace_id` text,
|
|
`order_key` text NOT NULL,
|
|
`created_at` integer NOT NULL,
|
|
`updated_at` integer NOT NULL,
|
|
FOREIGN KEY (`agent_id`) REFERENCES `agent`(`id`) ON UPDATE no action ON DELETE set null,
|
|
FOREIGN KEY (`workspace_id`) REFERENCES `agent_workspace`(`id`) ON UPDATE no action ON DELETE set null
|
|
);
|
|
--> statement-breakpoint
|
|
DROP TABLE `agent_session`;--> statement-breakpoint
|
|
ALTER TABLE `__new_agent_session` RENAME TO `agent_session`;--> statement-breakpoint
|
|
CREATE INDEX `agent_session_order_key_idx` ON `agent_session` (`order_key`);--> statement-breakpoint
|
|
CREATE TABLE `__new_agent` (
|
|
`id` text PRIMARY KEY NOT NULL,
|
|
`type` text NOT NULL,
|
|
`name` text NOT NULL,
|
|
`description` text DEFAULT '' NOT NULL,
|
|
`instructions` text NOT NULL,
|
|
`model` text,
|
|
`plan_model` text,
|
|
`small_model` text,
|
|
`mcps` text DEFAULT '[]' NOT NULL,
|
|
`allowed_tools` text DEFAULT '[]' NOT NULL,
|
|
`configuration` text DEFAULT '{}' NOT NULL,
|
|
`order_key` text NOT NULL,
|
|
`created_at` integer NOT NULL,
|
|
`updated_at` integer NOT NULL,
|
|
`deleted_at` integer,
|
|
FOREIGN KEY (`model`) REFERENCES `user_model`(`id`) ON UPDATE no action ON DELETE set null,
|
|
FOREIGN KEY (`plan_model`) REFERENCES `user_model`(`id`) ON UPDATE no action ON DELETE set null,
|
|
FOREIGN KEY (`small_model`) REFERENCES `user_model`(`id`) ON UPDATE no action ON DELETE set null
|
|
);
|
|
--> statement-breakpoint
|
|
DROP TABLE `agent`;--> statement-breakpoint
|
|
ALTER TABLE `__new_agent` RENAME TO `agent`;--> statement-breakpoint
|
|
CREATE INDEX `agent_name_idx` ON `agent` (`name`);--> statement-breakpoint
|
|
CREATE INDEX `agent_type_idx` ON `agent` (`type`);--> statement-breakpoint
|
|
CREATE INDEX `agent_order_key_idx` ON `agent` (`order_key`);--> statement-breakpoint
|
|
CREATE TABLE `__new_agent_session_message` (
|
|
`id` text PRIMARY KEY NOT NULL,
|
|
`session_id` text NOT NULL,
|
|
`role` text NOT NULL,
|
|
`data` text NOT NULL,
|
|
`searchable_text` text DEFAULT '' NOT NULL,
|
|
`status` text NOT NULL,
|
|
`model_id` text,
|
|
`model_snapshot` text,
|
|
`trace_id` text,
|
|
`stats` text,
|
|
`runtime_resume_token` text,
|
|
`created_at` integer NOT NULL,
|
|
`updated_at` integer NOT NULL,
|
|
FOREIGN KEY (`session_id`) REFERENCES `agent_session`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
FOREIGN KEY (`model_id`) REFERENCES `user_model`(`id`) ON UPDATE no action ON DELETE set null,
|
|
CONSTRAINT "agent_session_message_role_check" CHECK("__new_agent_session_message"."role" IN ('user', 'assistant', 'system')),
|
|
CONSTRAINT "agent_session_message_status_check" CHECK("__new_agent_session_message"."status" IN ('pending', 'success', 'error', 'paused'))
|
|
);
|
|
--> statement-breakpoint
|
|
DROP TABLE `agent_session_message`;--> statement-breakpoint
|
|
ALTER TABLE `__new_agent_session_message` RENAME TO `agent_session_message`;--> statement-breakpoint
|
|
CREATE INDEX `agent_session_message_session_created_id_idx` ON `agent_session_message` (`session_id`,`created_at`,`id`);--> statement-breakpoint
|
|
ALTER TABLE `assistant` ADD `order_key` text DEFAULT '' NOT NULL;--> statement-breakpoint
|
|
CREATE INDEX `assistant_order_key_idx` ON `assistant` (`order_key`);--> statement-breakpoint
|
|
CREATE INDEX `message_status_idx` ON `message` (`status`);--> statement-breakpoint
|
|
CREATE INDEX `agent_session_message_status_idx` ON `agent_session_message` (`status`); |