fix(agent): subagent patuhi tool-calling contract + truncation char-safe

Hasil audit alur AI agent round 3 (fokus correctness & latent crash).

- fix(subagent): engine.rs sebelumnya mengeksekusi tool lalu push
  ChatMessage::tool hasil TANPA mendahuluinya dengan pesan assistant yang
  mendeklarasikan tool_calls → history malformed ([..., tool, tool,
  assistant(text)]). Kontrak OpenAI/Anthropic mensyaratkan pesan assistant
  (berisi tool_calls) sebelum hasil tool. Kini push response_msg
  (assistant + tool_calls + content) sebelum eksekusi, dan hapus push
  assistant content-only di akhir (agar tidak duplikat). Loop utama sudah
  benar; subagent kini selaras.
- fix(utils): &content[..1500] / &content[..1000] di build_rich_context
  dan &diff[..5000] di auto/engine.rs bisa panic saat indeks byte jatuh di
  tengah karakter multi-byte UTF-8 (emoji/CJK/panah). Tambah helper
  truncate_chars() yang memotong per karakter (char-safe) dan pakai di
  3 titik tersebut.
- test: +4 unit test truncate_chars (ASCII, potong, multibyte no-panic,
  emoji).

Catatan audit: subagent/auto (auto-review) & build_rich_context adalah dead
code (spawn_background_review & build_rich_context tidak pernah dipanggil).
Auto-review jangan diaktifkan asal (parser format teks rapuh + tanpa
verifikasi pasca-fix) — dilaporkan, bukan dicolokkan.
This commit is contained in:
asepharyana
2026-08-28 11:43:42 +07:00
parent 20ce81a6be
commit e982cbeb04
4 changed files with 71 additions and 20 deletions
Generated
+11 -11
View File
@@ -4862,7 +4862,7 @@ dependencies = [
[[package]]
name = "zesdex-api"
version = "1.19.5"
version = "1.19.6"
dependencies = [
"anyhow",
"argon2",
@@ -4885,7 +4885,7 @@ dependencies = [
[[package]]
name = "zesdex-application"
version = "1.19.5"
version = "1.19.6"
dependencies = [
"anyhow",
"base64",
@@ -4903,7 +4903,7 @@ dependencies = [
[[package]]
name = "zesdex-bootstrap"
version = "1.19.5"
version = "1.19.6"
dependencies = [
"anyhow",
"chrono",
@@ -4920,7 +4920,7 @@ dependencies = [
[[package]]
name = "zesdex-daemon"
version = "1.19.5"
version = "1.19.6"
dependencies = [
"anyhow",
"base64",
@@ -4944,7 +4944,7 @@ dependencies = [
[[package]]
name = "zesdex-domain"
version = "1.19.5"
version = "1.19.6"
dependencies = [
"anyhow",
"base64",
@@ -4960,7 +4960,7 @@ dependencies = [
[[package]]
name = "zesdex-gateway"
version = "1.19.5"
version = "1.19.6"
dependencies = [
"anyhow",
"axum",
@@ -4987,7 +4987,7 @@ dependencies = [
[[package]]
name = "zesdex-grpc"
version = "1.19.5"
version = "1.19.6"
dependencies = [
"anyhow",
"axum",
@@ -5004,7 +5004,7 @@ dependencies = [
[[package]]
name = "zesdex-infrastructure"
version = "1.19.5"
version = "1.19.6"
dependencies = [
"anyhow",
"argon2",
@@ -5052,7 +5052,7 @@ dependencies = [
[[package]]
name = "zesdex-tui"
version = "1.19.5"
version = "1.19.6"
dependencies = [
"anyhow",
"base64",
@@ -5078,7 +5078,7 @@ dependencies = [
[[package]]
name = "zesdex-web"
version = "1.19.5"
version = "1.19.6"
dependencies = [
"anyhow",
"axum",
@@ -5098,7 +5098,7 @@ dependencies = [
[[package]]
name = "zesdex-ws"
version = "1.19.5"
version = "1.19.6"
dependencies = [
"anyhow",
"axum",