Sebelumnya loop utama mengeksekusi semua tool call satu-per-satu (sequential for loop). Seperti Claude Code, tool read-only yang independen dalam satu pesan assistant (read/grep/glob/semantic_search dsb.) kini dijalankan konkuren dengan bounded parallelism (max 8), mengurangi latensi per turn secara signifikan untuk beban coding. - feat(registry): tool_is_parallel_safe() — whitelist tool read-only yang aman dijalankan paralel; tool mutating/shell tetap sequential - feat(executor): is_parallel_safe() delegasi ke registry; ToolExecutor trait Default=false (konservatif) - fix(application): execute_tool_calls_in_parallel() — join_all + semaphore bounded 8, hasil dikumpulkan dalam URUTAN panggilan asli (kontrak OpenAI/Anthropic tool-result ordering) - loop utama: batch paralel hanya jika SEMUA tool parallel-safe; jika ada satu tool mutating, jatuh balik ke jalur sequential aman - test: +2 registry test, +2 application test (konkurensi & urutan, fallback batch mutating)
23 lines
639 B
TOML
23 lines
639 B
TOML
[package]
|
|
name = "zesdex-application"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
authors.workspace = true
|
|
|
|
# Application layer — port traits (interfaces), use cases, DTOs.
|
|
# Depends ONLY on domain. Application services orchestrate domain objects
|
|
# through port traits without knowing concrete implementations.
|
|
[dependencies]
|
|
zesdex-domain = { path = "../domain" }
|
|
serde.workspace = true
|
|
serde_json.workspace = true
|
|
chrono.workspace = true
|
|
uuid.workspace = true
|
|
anyhow.workspace = true
|
|
tracing.workspace = true
|
|
tokio.workspace = true
|
|
futures-util.workspace = true
|
|
base64.workspace = true
|
|
sha2.workspace = true
|
|
url.workspace = true
|