feat: expand secure assistant workflows

Harden runtime execution and add local knowledge, Smart Heartbeat, usage visibility, responsive product surfaces, and cross-platform packaging support.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
This commit is contained in:
lofyer
2026-08-02 10:04:59 +08:00
co-authored by factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
parent 6ef1795b81
commit b3fdf96962
82 changed files with 17608 additions and 825 deletions
+27 -2
View File
@@ -21,7 +21,9 @@ import { registerIpcHandlers } from './ipc'
import { KnowledgeService } from './knowledge/knowledge-service'
import { AssistantDatabase } from './assistant/assistant-database'
import { createModelGraphExtractor } from './knowledge/model-extractor'
import { OllamaEmbeddingClient } from './knowledge/ollama-embedding-client'
import { RuntimeSettingsStore } from './runtime-settings-store'
import type { ResolvedRuntimeSettings } from './runtime-settings-store'
import { ToolApprovalBroker } from './tool-approval-broker'
import {
createMainWindow,
@@ -36,6 +38,9 @@ import type {
} from './agent/continue-host-adapter'
const shortcut = 'CommandOrControl+Shift+Space'
if (process.platform === 'win32') {
app.setAppUserModelId('live.digiman.goodbuddy')
}
const hasSingleInstanceLock = app.requestSingleInstanceLock()
if (!hasSingleInstanceLock) {
@@ -50,6 +55,17 @@ let runtime: AgentRuntimeController | undefined
let knowledgeService: KnowledgeService | undefined
let assistantDatabase: AssistantDatabase | undefined
function createEmbeddingProvider(
settings: ResolvedRuntimeSettings
): OllamaEmbeddingClient | undefined {
return settings.knowledgeEmbeddingEnabled
? new OllamaEmbeddingClient({
url: settings.knowledgeEmbeddingBaseUrl,
model: settings.knowledgeEmbeddingModel
})
: undefined
}
const launchContinueHost: ContinueHostLauncher = (
entryPath,
args,
@@ -167,8 +183,6 @@ if (hasSingleInstanceLock) {
})
void app.whenReady().then(async () => {
app.setAppUserModelId('live.digiman.goodbuddy')
session.defaultSession.setPermissionRequestHandler(
(webContents, permission, callback, details) => {
const mediaTypes =
@@ -229,6 +243,11 @@ if (hasSingleInstanceLock) {
extractStructured: createModelGraphExtractor(settingsStore)
})
await knowledgeService.initialize()
void knowledgeService
.setEmbeddingProvider(
createEmbeddingProvider(await settingsStore.getResolvedSettings())
)
.catch(() => undefined)
assistantDatabase = new AssistantDatabase(
join(app.getPath('userData'), 'assistant.sqlite')
)
@@ -291,6 +310,12 @@ if (hasSingleInstanceLock) {
approvalBroker,
bundledRuntimePaths,
async () => {
const settings = await settingsStore.getResolvedSettings()
if (knowledgeService) {
void knowledgeService
.setEmbeddingProvider(createEmbeddingProvider(settings))
.catch(() => undefined)
}
if (runtime) {
await runtime.replace(
await createConfiguredRuntime()