Skip to content

Commit c951349

Browse files
committed
perf: start up
1 parent 2341d80 commit c951349

3 files changed

Lines changed: 8 additions & 11 deletions

File tree

‎docs/MIGRATION_STATUS.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Runtime 仍只依赖 `ports.Store`/`ports.Tx` 抽象。默认 adapter 通过组
1616
| 范围 | 状态 | 实现语义 |
1717
|---|---|---|
1818
| Component | 完成 | 与 Koko 相同的 Terminal registration、AccessKey 校验和心跳契约;component type 为 `kael` |
19-
| Model | 完成 | 从 TerminalConfig 读取并在每次 Run 前刷新 `CHAT_AI_ENABLED/PROVIDER/BASE_URL/API_KEY/PROXY/MODEL`;仅 `CHAT_AI_ENABLED` 控制功能启停,本地配置不保存模型 Secret |
19+
| Model | 完成 | 从 TerminalConfig 读取并在每次 Run 前刷新 `CHAT_AI_ENABLED/PROVIDER/BASE_URL/API_KEY/PROXY/MODEL`;禁用或未完成配置不阻止 Kael 启动,仅拒绝 Run,本地配置不保存模型 Secret |
2020
| Store port | 完成 | Runtime 只依赖通用 Store/Tx 接口;默认由 Core 保存 opaque Journal,Kael 不直接使用数据库;本地 JSONL 为可选回退 |
2121
| 直接数据库依赖 | 已移除 | 无 DSN、GORM、MySQL/PostgreSQL driver、migration 或领域 ORM 标签 |
2222
| Conversation/Message/Run | 完成 | 历史、终态和幂等索引持久化;重启时未完成 Run 收敛为 `interrupted`,不会自动重放模型或工具 |
@@ -41,7 +41,7 @@ Kael 的管理员 stats API 仍接受 `days=1..365`(默认 30),保留 flat
4141

4242
- 配置文件和环境变量统一使用 Koko 风格的平铺大写键;核心键为 `CORE_HOST`、`BOOTSTRAP_TOKEN`、`NAME`、`BIND_HOST`、`HTTPD_PORT`、`HTTP_REQUEST_TIMEOUT`、`IGNORE_VERIFY_CERTS` 和 `RUNTIME_STORE`,不再维护嵌套配置及同义别名。
4343
- AccessKey 默认保存在 `data/keys/.access_key`,权限为 `0600`;已有 Key 会先通过 Core profile 校验,未注册或已失效时使用 BootstrapToken 注册。
44-
- 模型配置只来自 TerminalConfig,启动和每次 Run 执行前刷新;仅 `CHAT_AI_ENABLED` 控制功能启停,`CHAT_AI_METHOD`、`CHAT_AI_EMBED_URL` 及 Lina iframe/embed 分支已删除。Core 不可用、Chat AI 被禁用或模型端点不完整时 fail closed。
44+
- 模型配置只来自 TerminalConfig,并在每次 Run 执行前刷新;仅 `CHAT_AI_ENABLED` 控制功能启停,`CHAT_AI_METHOD`、`CHAT_AI_EMBED_URL` 及 Lina iframe/embed 分支已删除。Chat AI 被禁用或模型端点不完整时 Kael 进程保持健康、Run fail closed;Core 组件注册或持久化不可用时仍 fail closed。
4545
- 所有 `/kael/api/v1` 用户请求继续要求旧 `chat_ai.use_chatai` 权限(superuser 除外)。Platform Gateway 默认且必须启用,因为 Lina 默认 `general` 依赖它;显式关闭或缺少有效 `PLATFORM_DELEGATION_KEY` 时 Kael 在监听端口前失败,不能出现 ready 但默认会话固定返回 503 的部署。Kael 的 delegation key/ID/issuer/audience 必须分别匹配 Core 对应 `CHAT_AI_*` 配置,其中 secret 去除首尾空白后至少 32 字符;仓库和镜像不提供可工作的默认共享密钥。
4646
- Platform Gateway 默认允许 `GET/POST/PUT/PATCH`,不默认允许 `DELETE`。`general` 使用与当前 JumpServer 源码默认 `CHAT_AI_ALLOWED_OPERATION_IDS` 等价的编译期固定范围;它不会读取生产环境对 operation IDs、allowed/blocked paths/tags 或 method policies 的自定义配置。切流前必须比较现网策略,任何差异都要显式评审并收窄。asset/session_audit/ops 继续叠加各自更窄范围,management 仅管理员可用。所有范围再叠加 method allowlist、敏感路径拒绝、OpenAPI 静态 required-permissions 全量检查;动态权限或缺少权限元数据的 operation 一律不可搜索、不可调用。
4747
- Run 创建时固化 admin flags 与 permission 列表供异步搜索和选择保持同一授权可见性;Core 在实际 delegated request 上仍按当前用户状态和权限实时复核,权限撤销后不能凭旧 Run 快照执行。

‎docs/adr/0007-codex-harness.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Luna bootstrap 必须收到 `agent_engine=codex`、`agent_protocol_version=1`。
2121

2222
## 模型与运行环境
2323

24-
Core TerminalConfig 仍是模型凭据唯一来源;启动及每次 Run 执行前读取配置,正在执行的 turn 不热切模型。`CHAT_AI_BASE_URL` 必须支持 Responses API。DeepSeek 旧 Chat Completions 路径明确拒绝,其它兼容端点由实际 Responses 请求验证,不提供隐式降级。模型密钥只进入子进程环境,不写入参数、配置文件或前端。
24+
Core TerminalConfig 仍是模型凭据唯一来源;每次 Run 执行前读取配置,正在执行的 turn 不热切模型。Chat AI 未启用或模型端点未配置时 Kael 仍可启动并保持健康,仅拒绝 Run;管理员在 Core 页面保存有效配置后无需重启 Kael。`CHAT_AI_BASE_URL` 必须支持 Responses API。DeepSeek 旧 Chat Completions 路径明确拒绝,其它兼容端点由实际 Responses 请求验证,不提供隐式降级。模型密钥只进入子进程环境,不写入参数、配置文件或前端。
2525

2626
每个活动 Panel 的进程使用独立私有 HOME/CODEX_HOME 和空工作目录,不继承用户 Codex 登录、插件、MCP 配置或应用 Secret。线程 `environments=[]`,禁用 shell、unified exec、Code Mode host、浏览器、computer use、联网搜索和 subagents。真实业务操作只能经过注册能力;内置计划、问询、技能目录等辅助工具不等于远程资产执行能力。未集成的问询表单返回空答案,不替用户决定,要求 Agent 在普通聊天中提问;未知 host request 失败关闭。stderr 不直接进入业务错误或日志。
2727

‎internal/runtime/harness.go‎

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -101,21 +101,18 @@ func NewHarness(ctx context.Context, binary, root string, loader model.ConfigLoa
101101
if err != nil || !compatibleCodexVersion(string(version)) {
102102
return nil, fmt.Errorf("Kael requires codex-cli %s or newer", CodexMinimumVersion)
103103
}
104-
config, err := loader(ctx)
105-
if err != nil {
106-
return nil, err
107-
}
108-
if err = validateConfig(config); err != nil {
109-
return nil, err
110-
}
111104
if err = os.MkdirAll(root, 0700); err != nil {
112105
return nil, err
113106
}
114107
directory, err := os.MkdirTemp(root, "instance-")
115108
if err != nil {
116109
return nil, err
117110
}
118-
h := &Harness{binary: resolved, root: directory, loader: loader, info: configInfo(config), sessions: map[string]*harnessSession{}, stop: make(chan struct{})}
111+
// TerminalConfig is runtime configuration, not a process dependency. Core
112+
// may intentionally keep Chat AI disabled until an administrator configures
113+
// the model in the UI. Load and validate it in Execute so Kael stays healthy
114+
// and picks up the first valid configuration without a restart.
115+
h := &Harness{binary: resolved, root: directory, loader: loader, info: configInfo(model.Config{}), sessions: map[string]*harnessSession{}, stop: make(chan struct{})}
119116
go h.reap()
120117
return h, nil
121118
}

0 commit comments

Comments
 (0)