feat: Go模块路径迁移 + Docker生产部署适配 + ethend Docker兼容

- 所有Go模块路径从 github.com/yourname/cyrene-ai 迁移到 git.yeij.top/AskaEth/Cyrene
- 5个Go Dockerfile添加 GOPROXY=https://goproxy.cn,direct 解决国内构建问题
- ai-core go.mod 添加 pkg/plugins replace 指令
- Caddyfile 简化为 http:// 通配 + handle 保留 /api 前缀
- ethend Dockerfile 适配 (npm install + 仅 COPY package.json)
- ethend 新增 RUNNING_IN_DOCKER 环境变量,健康检查改用Docker服务名
- ethend 数据库状态检查支持Docker hostname (postgres/redis/qdrant/minio)
- process-manager 新增 CONTAINER_SVC_MAP + Docker模式自动检测
- 统一 docker-compose.dev.db.yml 卷名 (pg_data/redis_data/qdrant_data/minio_data)
- docker-compose.yml ethend服务挂载docker.sock + 端口变量化
- 清理 .env 统一后的残留文件与提示信息

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-30 13:43:22 +08:00
parent d164ff1207
commit 71f0a1abdb
122 changed files with 377 additions and 325 deletions
@@ -11,15 +11,15 @@ import (
"sync"
"time"
ctxbuild "github.com/yourname/cyrene-ai/ai-core/internal/context"
"github.com/yourname/cyrene-ai/ai-core/internal/llm"
"github.com/yourname/cyrene-ai/ai-core/internal/memory"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"github.com/yourname/cyrene-ai/ai-core/internal/persona"
"github.com/yourname/cyrene-ai/ai-core/internal/tools"
ctxbuild "git.yeij.top/AskaEth/Cyrene/ai-core/internal/context"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/llm"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/memory"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/persona"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/tools"
plgManager "github.com/yourname/cyrene-ai/pkg/plugins/manager"
plgSDK "github.com/yourname/cyrene-ai/pkg/plugins/sdk"
plgManager "git.yeij.top/AskaEth/Cyrene/pkg/plugins/manager"
plgSDK "git.yeij.top/AskaEth/Cyrene/pkg/plugins/sdk"
)
// PendingThought 待推送的后台思考
@@ -1,7 +1,7 @@
package bus
import (
"github.com/yourname/cyrene-ai/pkg/logger"
"git.yeij.top/AskaEth/Cyrene/pkg/logger"
"sync"
"time"
)
+1 -1
View File
@@ -1,7 +1,7 @@
package bus
import (
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
"time"
)
+4 -4
View File
@@ -9,10 +9,10 @@ import (
_ "github.com/lib/pq"
"github.com/yourname/cyrene-ai/ai-core/internal/memory"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"github.com/yourname/cyrene-ai/ai-core/internal/persona"
"github.com/yourname/cyrene-ai/pkg/logger"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/memory"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/persona"
"git.yeij.top/AskaEth/Cyrene/pkg/logger"
)
// IoTDeviceSummary IoT设备摘要接口(避免循环依赖)
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"context"
"io"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
)
// Adapter LLM适配器接口
+2 -2
View File
@@ -12,8 +12,8 @@ import (
"strings"
"time"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"github.com/yourname/cyrene-ai/pkg/logger"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/pkg/logger"
)
// OpenAIConfig OpenAI适配器配置
+1 -1
View File
@@ -6,7 +6,7 @@ import (
"sync"
"time"
"github.com/yourname/cyrene-ai/ai-core/internal/config"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/config"
)
// ModelPurpose identifies the kind of LLM task.
+2 -2
View File
@@ -6,11 +6,11 @@ import (
"encoding/json"
"fmt"
"io"
"github.com/yourname/cyrene-ai/pkg/logger"
"git.yeij.top/AskaEth/Cyrene/pkg/logger"
"net/http"
"time"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
)
// Client 记忆服务 HTTP 客户端
+2 -2
View File
@@ -4,10 +4,10 @@ import (
"context"
"encoding/json"
"fmt"
"github.com/yourname/cyrene-ai/pkg/logger"
"git.yeij.top/AskaEth/Cyrene/pkg/logger"
"strings"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
)
// Extractor 记忆提取器 —— 从对话中提取结构化记忆
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"fmt"
"strings"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
)
// MemoryEntry 记忆条目别名(避免与model包冲突)
+2 -2
View File
@@ -4,11 +4,11 @@ import (
"context"
"database/sql"
"fmt"
"github.com/yourname/cyrene-ai/pkg/logger"
"git.yeij.top/AskaEth/Cyrene/pkg/logger"
"sync"
"time"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
_ "github.com/lib/pq"
)
@@ -4,11 +4,11 @@ import (
"context"
"encoding/json"
"fmt"
"github.com/yourname/cyrene-ai/pkg/logger"
"git.yeij.top/AskaEth/Cyrene/pkg/logger"
"strings"
"github.com/yourname/cyrene-ai/ai-core/internal/llm"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/llm"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
)
// IntentAnalyzer 意图分析器
@@ -3,23 +3,23 @@ package orchestrator
import (
"context"
"fmt"
"github.com/yourname/cyrene-ai/pkg/logger"
"git.yeij.top/AskaEth/Cyrene/pkg/logger"
"strings"
"sync"
"time"
"github.com/yourname/cyrene-ai/ai-core/internal/cache"
ctxbuild "github.com/yourname/cyrene-ai/ai-core/internal/context"
"github.com/yourname/cyrene-ai/ai-core/internal/llm"
"github.com/yourname/cyrene-ai/ai-core/internal/memory"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"github.com/yourname/cyrene-ai/ai-core/internal/persona"
"github.com/yourname/cyrene-ai/ai-core/internal/subsession"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/cache"
ctxbuild "git.yeij.top/AskaEth/Cyrene/ai-core/internal/context"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/llm"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/memory"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/persona"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/subsession"
"github.com/yourname/cyrene-ai/ai-core/internal/bus"
"github.com/yourname/cyrene-ai/ai-core/internal/scheduler"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/bus"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/scheduler"
plgManager "github.com/yourname/cyrene-ai/pkg/plugins/manager"
plgManager "git.yeij.top/AskaEth/Cyrene/pkg/plugins/manager"
)
// Orchestrator 对话编排器 v2.0
@@ -3,7 +3,7 @@ package orchestrator
import (
"testing"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
)
func TestParseReviewMessages(t *testing.T) {
@@ -4,7 +4,7 @@ import (
"regexp"
"strings"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
)
// codeBlockPattern matches fenced code blocks: ```lang\n...\n```
@@ -7,11 +7,11 @@ import (
"strings"
"time"
"github.com/yourname/cyrene-ai/ai-core/internal/llm"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"github.com/yourname/cyrene-ai/pkg/logger"
plgManager "github.com/yourname/cyrene-ai/pkg/plugins/manager"
plgSDK "github.com/yourname/cyrene-ai/pkg/plugins/sdk"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/llm"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/pkg/logger"
plgManager "git.yeij.top/AskaEth/Cyrene/pkg/plugins/manager"
plgSDK "git.yeij.top/AskaEth/Cyrene/pkg/plugins/sdk"
)
// Synthesizer 主会话综合器
@@ -3,12 +3,12 @@ package subsession
import (
"context"
"fmt"
"github.com/yourname/cyrene-ai/pkg/logger"
"git.yeij.top/AskaEth/Cyrene/pkg/logger"
"time"
"github.com/yourname/cyrene-ai/ai-core/internal/llm"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"github.com/yourname/cyrene-ai/ai-core/internal/persona"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/llm"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/persona"
)
// GeneralProvider 通用对话子会话提供者
@@ -3,13 +3,13 @@ package subsession
import (
"context"
"fmt"
"github.com/yourname/cyrene-ai/pkg/logger"
"git.yeij.top/AskaEth/Cyrene/pkg/logger"
"strings"
"time"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"github.com/yourname/cyrene-ai/ai-core/internal/persona"
"github.com/yourname/cyrene-ai/ai-core/internal/tools"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/persona"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/tools"
)
// IoTDeviceProvider IoT 设备查询接口
@@ -5,9 +5,9 @@ import (
"fmt"
"time"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"github.com/yourname/cyrene-ai/ai-core/internal/rag"
"github.com/yourname/cyrene-ai/pkg/logger"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/rag"
"git.yeij.top/AskaEth/Cyrene/pkg/logger"
)
// KnowledgeProvider searches the knowledge base for relevant information.
@@ -4,12 +4,12 @@ import (
"context"
"crypto/rand"
"fmt"
"github.com/yourname/cyrene-ai/pkg/logger"
"git.yeij.top/AskaEth/Cyrene/pkg/logger"
"sync"
"github.com/yourname/cyrene-ai/ai-core/internal/bus"
"github.com/yourname/cyrene-ai/ai-core/internal/llm"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/bus"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/llm"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
)
// Manager 子会话管理器
@@ -7,10 +7,10 @@ import (
"strings"
"time"
"github.com/yourname/cyrene-ai/ai-core/internal/llm"
"github.com/yourname/cyrene-ai/ai-core/internal/memory"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"github.com/yourname/cyrene-ai/pkg/logger"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/llm"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/memory"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/pkg/logger"
)
// MemoryRetriever 记忆检索接口
@@ -4,9 +4,9 @@ import (
"context"
"time"
"github.com/yourname/cyrene-ai/ai-core/internal/llm"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"github.com/yourname/cyrene-ai/ai-core/internal/persona"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/llm"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/persona"
)
// Provider 子会话提供者接口
@@ -3,12 +3,12 @@ package subsession
import (
"context"
"fmt"
"github.com/yourname/cyrene-ai/pkg/logger"
"git.yeij.top/AskaEth/Cyrene/pkg/logger"
"regexp"
"strings"
"time"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
)
// ReviewProvider 最终审查子会话提供者
@@ -6,7 +6,7 @@ import (
"fmt"
"time"
"github.com/yourname/cyrene-ai/ai-core/internal/host"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/host"
)
// HostExecTool allows the AI to execute commands in a sandboxed environment.
+1 -1
View File
@@ -6,7 +6,7 @@ import (
"encoding/json"
"fmt"
"io"
"github.com/yourname/cyrene-ai/pkg/logger"
"git.yeij.top/AskaEth/Cyrene/pkg/logger"
"net/http"
"os"
"sync"
@@ -5,7 +5,7 @@ import (
"encoding/json"
"fmt"
"github.com/yourname/cyrene-ai/ai-core/internal/rag"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/rag"
)
// KnowledgeSearchTool searches the knowledge base.
@@ -6,7 +6,7 @@ import (
"fmt"
"time"
"github.com/yourname/cyrene-ai/ai-core/internal/host"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/host"
)
// OSExecTool allows the AI to execute arbitrary commands in a full OS
@@ -6,7 +6,7 @@ import (
"strings"
"testing"
"github.com/yourname/cyrene-ai/ai-core/internal/host"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/host"
)
func TestOSExecToolWSL(t *testing.T) {
@@ -5,8 +5,8 @@ import (
"os"
"testing"
"github.com/yourname/cyrene-ai/ai-core/internal/host"
"github.com/yourname/cyrene-ai/ai-core/internal/rag"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/host"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/rag"
)
func TestHostExecToolDefinition(t *testing.T) {
+1 -1
View File
@@ -7,7 +7,7 @@ import (
"sync"
"time"
"github.com/yourname/cyrene-ai/pkg/logger"
"git.yeij.top/AskaEth/Cyrene/pkg/logger"
)
// ToolDefinition 工具定义(用于 LLM function calling
@@ -9,8 +9,8 @@ import (
"path/filepath"
"strings"
"github.com/yourname/cyrene-ai/ai-core/internal/llm"
"github.com/yourname/cyrene-ai/ai-core/internal/model"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/llm"
"git.yeij.top/AskaEth/Cyrene/ai-core/internal/model"
)
// VisionTool enables image understanding via multimodal LLM.