feat: add managed llm summaries and memory timeline
ci / verify (push) Canceled after 0s

This commit is contained in:
Codex Local
2026-08-30 10:51:32 +08:00
parent 47f8a164fa
commit 962dd1a063
22 changed files with 1417 additions and 86 deletions
+22 -8
View File
@@ -14,6 +14,7 @@ import (
"data-terminal-cloud/internal/billing"
"data-terminal-cloud/internal/cache"
"data-terminal-cloud/internal/config"
"data-terminal-cloud/internal/contentmodel"
"data-terminal-cloud/internal/contentpolicy"
"data-terminal-cloud/internal/database"
"data-terminal-cloud/internal/dataexport"
@@ -137,6 +138,21 @@ func Run(ctx context.Context, serviceName string) error {
var opsDeviceService *opsdevice.Service
var memoryToolService *memorytool.Service
var memoryToolSigner *memorytool.TokenSigner
var contentModelService *contentmodel.Service
var contentModelRegistry *contentmodel.Registry
if serviceName == "api" || serviceName == "worker" {
var fallback extraction.Generator = extraction.DeterministicGenerator{}
if cfg.ContentGenerator == "ark" {
fallback, err = extraction.NewArkGenerator(cfg.ArkBaseURL, cfg.ArkAPIKey, cfg.ArkContentModel, cfg.ArkRequestTimeout)
if err != nil {
return fmt.Errorf("create fallback Ark content generator: %w", err)
}
}
contentModelRegistry, err = contentmodel.NewRegistry(databasePool, cfg.ContentModelMasterKey, fallback)
if err != nil {
return fmt.Errorf("create content model registry: %w", err)
}
}
if serviceName == "api" || serviceName == "callbacks" {
diagnosticService, err = diagnostics.NewService(databasePool, idempotency.NewExecutor(databasePool), audit.NewRepository())
if err != nil {
@@ -144,6 +160,10 @@ func Run(ctx context.Context, serviceName string) error {
}
}
if serviceName == "api" {
contentModelService, err = contentmodel.NewService(contentModelRegistry, audit.NewRepository())
if err != nil {
return fmt.Errorf("create content model service: %w", err)
}
memoryToolSigner, err = memorytool.NewTokenSigner([]byte(cfg.MemoryToolSigningSecret))
if err != nil {
return fmt.Errorf("create memory tool signer: %w", err)
@@ -354,14 +374,7 @@ func Run(ctx context.Context, serviceName string) error {
}
outboxWorker.Register("conversation.agent_stop_requested", stopProcessor.Handle)
outboxWorker.Register("conversation.agent_stop_reconcile_requested", stopProcessor.Handle)
var contentGenerator extraction.Generator = extraction.DeterministicGenerator{}
if cfg.ContentGenerator == "ark" {
arkGenerator, generatorErr := extraction.NewArkGenerator(cfg.ArkBaseURL, cfg.ArkAPIKey, cfg.ArkContentModel, cfg.ArkRequestTimeout)
if generatorErr != nil {
return fmt.Errorf("create Ark content generator: %w", generatorErr)
}
contentGenerator = arkGenerator
}
var contentGenerator extraction.Generator = contentModelRegistry
var contentSafety contentpolicy.Classifier = contentpolicy.LocalClassifier{}
if cfg.ContentSafetyProvider == "managed_http" {
managedSafety, safetyErr := contentpolicy.NewManagedClassifier(cfg.ContentSafetyEndpoint, cfg.ContentSafetyAPIKey, cfg.ContentSafetyPolicyRef, cfg.ContentSafetyTimeout)
@@ -476,6 +489,7 @@ func Run(ctx context.Context, serviceName string) error {
DiagnosticService: diagnosticService,
OpsAccessService: opsAccessService,
OpsDeviceService: opsDeviceService,
ContentModelService: contentModelService,
ConversationCreator: conversationCreator,
ConversationActivator: conversationCreator,
DeviceConversationStateReader: conversationCreator,