feat: enhance local knowledge retrieval

This commit is contained in:
lofyer
2026-08-12 21:45:47 +08:00
parent e0e5a8c1b3
commit 111f487e20
65 changed files with 13517 additions and 1155 deletions
+16 -10
View File
@@ -1,6 +1,9 @@
import { randomUUID } from 'node:crypto'
import { DatabaseSync } from 'node:sqlite'
import { expertCreateSchema } from '../../shared/assistant-contracts'
import {
expertCreateSchema,
normalizeInteractiveWorkMode
} from '../../shared/assistant-contracts'
import type {
AssistantArtifact,
AssistantExpert,
@@ -17,6 +20,7 @@ import type {
HeartbeatCreateInput,
HeartbeatSummaryOutput,
HeartbeatUpdateInput,
LegacyWorkMode,
MemoryCreateInput,
ModelUsageCallInput,
ProjectChannel,
@@ -70,7 +74,7 @@ type ProjectRow = {
name: string
description: string
root_path: string
default_work_mode: ProjectCreateInput['defaultWorkMode']
default_work_mode: LegacyWorkMode
runtime_selection_json: string | null
kind: AssistantProject['kind']
channel: ProjectChannel | null
@@ -363,7 +367,9 @@ function toProject(row: ProjectRow): AssistantProject {
name: row.name,
description: row.description,
rootPath: row.root_path,
defaultWorkMode: row.default_work_mode,
defaultWorkMode: normalizeInteractiveWorkMode(
row.default_work_mode
),
runtimeSelection:
row.kind === 'channel'
? parseRuntimeSelection(row.runtime_selection_json) ?? {
@@ -487,7 +493,7 @@ function toSchedule(row: ScheduleRow): AssistantSchedule {
const template = JSON.parse(row.task_template_json) as {
title: string
prompt: string
workMode: AssistantSchedule['workMode']
workMode: LegacyWorkMode
}
const recurrence = JSON.parse(row.recurrence_json) as {
type: AssistantSchedule['recurrence']
@@ -497,7 +503,7 @@ function toSchedule(row: ScheduleRow): AssistantSchedule {
projectId: row.project_id ?? undefined,
title: template.title,
prompt: template.prompt,
workMode: template.workMode,
workMode: 'ask',
recurrence: recurrence.type,
nextRunAt: row.next_run_at,
enabled: row.enabled === 1,
@@ -2392,7 +2398,7 @@ export class AssistantDatabase {
routingMode?: AssistantTask['routingMode']
title: string
instructions: string
workMode: 'ask' | 'plan' | 'execute'
workMode: 'ask' | 'execute'
origin?: AssistantTask['origin']
status?: 'queued' | 'running'
visible?: boolean
@@ -3808,7 +3814,7 @@ export class AssistantDatabase {
instructions, origin, status, priority, work_mode,
progress, created_at, started_at, completed_at, error)
VALUES (?, ?, NULL, NULL, ?, ?, 'assistant', 'paused', 0,
'plan', NULL, ?, NULL, NULL, NULL)`
'ask', NULL, ?, NULL, NULL, NULL)`
)
for (const task of output.followUpTasks) {
const taskId = randomUUID()
@@ -4298,7 +4304,7 @@ export class AssistantDatabase {
description TEXT NOT NULL DEFAULT '',
root_path TEXT NOT NULL DEFAULT '',
default_work_mode TEXT NOT NULL
CHECK(default_work_mode IN ('ask', 'plan', 'execute')),
CHECK(default_work_mode IN ('ask', 'execute')),
runtime_selection_json TEXT,
status TEXT NOT NULL CHECK(status IN ('active', 'archived')),
created_at TEXT NOT NULL,
@@ -4309,7 +4315,7 @@ export class AssistantDatabase {
project_id TEXT REFERENCES projects(id) ON DELETE SET NULL,
runtime_selection_json TEXT,
work_mode TEXT NOT NULL DEFAULT 'ask'
CHECK(work_mode IN ('ask', 'plan', 'execute')),
CHECK(work_mode IN ('ask', 'execute')),
title TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'active'
CHECK(status IN ('active', 'archived')),
@@ -4343,7 +4349,7 @@ export class AssistantDatabase {
'completed', 'failed', 'cancelled', 'interrupted')),
priority INTEGER NOT NULL DEFAULT 0,
work_mode TEXT NOT NULL DEFAULT 'execute'
CHECK(work_mode IN ('ask', 'plan', 'execute')),
CHECK(work_mode IN ('ask', 'execute')),
progress REAL,
created_at TEXT NOT NULL,
started_at TEXT,