agent-exec transport d2c63b4a83821a5716997a28174233b1/d6e403e1e778
This commit is contained in:
@@ -48,9 +48,11 @@ func main() {
|
||||
os.Exit(runCapabilities(os.Args[2:]))
|
||||
case "env":
|
||||
os.Exit(runEnv(os.Args[2:]))
|
||||
case "migrate":
|
||||
os.Exit(runMigrate(os.Args[2:]))
|
||||
default:
|
||||
fmt.Fprintf(os.Stderr, "agent-system: 未知子命令 %s\n", os.Args[1])
|
||||
fmt.Fprintln(os.Stderr, "用法:agent-system <serve|version|identity|user|apikey|config|capabilities|env> [参数]")
|
||||
fmt.Fprintln(os.Stderr, "用法:agent-system <serve|version|identity|user|apikey|config|capabilities|env|migrate> [参数]")
|
||||
os.Exit(2)
|
||||
}
|
||||
}
|
||||
@@ -77,6 +79,7 @@ func main() {
|
||||
pgIdleSec := fs.Int("pg-conn-max-idle-sec", 0, "PG 空闲连接回收秒数(0=默认 300)")
|
||||
pgLifetimeSec := fs.Int("pg-conn-max-lifetime-sec", 0, "PG 连接最长生命周期秒数(0=不限)")
|
||||
pgQueryTimeoutSec := fs.Int("pg-query-timeout-sec", 0, "PG statement_timeout 秒数(0=不限;覆盖全部业务查询)")
|
||||
adoptGuard := fs.Bool("adopt-instance-guard", false, "数据库被替换或锁文件被重建后,显式重写 SQLite 活动服务守卫")
|
||||
extension.RegisterCLIFlags(fs)
|
||||
fs.Parse(os.Args[1:])
|
||||
handled, hookErr := extension.RunCLIHooks(extension.Options{
|
||||
@@ -91,6 +94,7 @@ func main() {
|
||||
return
|
||||
}
|
||||
cliSet := visited(fs)
|
||||
delete(cliSet, "adopt-instance-guard")
|
||||
|
||||
resolved, err := config.Load(*cfgFile, os.LookupEnv, config.Config{
|
||||
Addr: *addr, DataDir: *data, PluginsDir: *pluginsDir, Mock: *mock,
|
||||
@@ -141,7 +145,8 @@ func main() {
|
||||
DisableConvCardMirror: extOpt.DisableConvCardMirror,
|
||||
DisableExecTools: extOpt.DisableExecTools, ExecBackend: extOpt.ExecBackend, ExecDepsDir: resolved.ExecDepsDir,
|
||||
ExecWorkspace: resolved.ExecWorkspace, ExecEnvRoot: resolved.ExecEnvRoot,
|
||||
Tier: resolved.Tier,
|
||||
Tier: resolved.Tier,
|
||||
AdoptInstanceGuard: *adoptGuard,
|
||||
PGPool: store.PoolOptions{
|
||||
MaxOpenConn: resolved.PGMaxOpen, MaxIdleConn: resolved.PGMaxIdle,
|
||||
ConnMaxIdleTimeSec: resolved.PGConnMaxIdleSec, ConnMaxLifetimeSec: resolved.PGConnMaxLifetimeSec,
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"agent-system-backend/internal/app"
|
||||
)
|
||||
|
||||
func runMigrate(args []string) int {
|
||||
fs := flag.NewFlagSet("migrate", flag.ExitOnError)
|
||||
data := fs.String("data", "./data", "数据目录(SQLite 档)")
|
||||
dsn := fs.String("dsn", "", "PostgreSQL DSN(空则读 AGENT_SYSTEM_DSN)")
|
||||
adopt := fs.Bool("adopt-instance-guard", false, "数据库被替换或锁文件被重建后,显式重写守卫")
|
||||
_ = fs.Parse(args)
|
||||
storage := *dsn
|
||||
if storage == "" {
|
||||
storage = os.Getenv("AGENT_SYSTEM_DSN")
|
||||
}
|
||||
if err := app.Migrate(app.Options{
|
||||
DataDir: *data,
|
||||
StorageDSN: storage,
|
||||
AdoptInstanceGuard: *adopt,
|
||||
}); err != nil {
|
||||
fmt.Fprintln(os.Stderr, "agent-system:", err)
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
}
|
||||
@@ -300,6 +300,8 @@ var copyOrder = []string{
|
||||
"recovery_proposals", "recovery_proposal_proofs",
|
||||
// v35 分层 Python 环境(无外键;申请与会话绑定要随库迁走)
|
||||
"exec_env_requests", "exec_env_bindings",
|
||||
// U8:活动服务锁的库内标记(无外键;迁移须保留以免目标库丢掉锁根)
|
||||
"instance_guard",
|
||||
}
|
||||
|
||||
const controlDDL = `
|
||||
|
||||
Reference in New Issue
Block a user