Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion LAUNCH-TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
- [ ] README rewrite
- [ ] Dashboard polish
- [ ] **Improve dashboard** — consolidated agents → subagents → coders tree view
- [ ] **Replace codex backend with codex_mcp (interactive) by default** — keep plain codex only if we want one-shot speed
- [x] ~~**Replace codex backend with MCP (interactive) by default**~~legacy `codex exec` removed, `codex` now uses MCP exclusively.
- [ ] OAuth login flow
- [ ] **Generalize coder wrapper** — support Cursor, Codex, and other coding agents beyond Claude Code

Expand Down
3 changes: 2 additions & 1 deletion lib/solum/agent/coder_registry.ex
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,8 @@ defmodule Solum.Agent.CoderRegistry do
is_number(info.duration_ms) ->
info.duration_ms

info.status in [:running, :waiting, :starting, :stuck] and match?(%DateTime{}, info.started_at) ->
info.status in [:running, :waiting, :starting, :stuck] and
match?(%DateTime{}, info.started_at) ->
started_ms = DateTime.to_unix(info.started_at, :millisecond)
max(now_ms - started_ms, 0)

Expand Down
5 changes: 4 additions & 1 deletion mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,10 @@ defmodule Solum.MixProject do
{:esc, "~> 0.9"},
{:anthropix, "~> 0.6"},
{:term_ui, "~> 1.0.0-rc"},
{:bandit, "~> 1.0"}
{:bandit, "~> 1.0"},
{:telegex,
github: "mikehostetler/telegex", branch: "fix/plug-router-guard", override: true},
{:plug, "~> 1.14"}
]
end
end
2 changes: 1 addition & 1 deletion mix.lock
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@
"slack_elixir": {:hex, :slack_elixir, "1.2.0", "8f8a6aa5d208bc445352d4d0d29bfb8309f4fd956a5b604ea0109e7b94ce7124", [:mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:req, "~> 0.3", [hex: :req, repo: "hexpm", optional: false]}, {:websockex, "~> 0.4.3", [hex: :websockex, repo: "hexpm", optional: false]}], "hexpm", "4c883805de2f0bf0e517bfaea4ed65afe6a1ae46b9d62590aea313b9f509f5f7"},
"splode": {:hex, :splode, "0.3.0", "ff8effecc509a51245df2f864ec78d849248647c37a75886033e3b1a53ca9470", [:mix], [], "hexpm", "73cfd0892d7316d6f2c93e6e8784bd6e137b2aa38443de52fd0a25171d106d81"},
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"},
"telegex": {:hex, :telegex, "1.8.0", "982ef33e9576167189c4980c27ebe927e8b0945d0e8c93c1173ea9482ef78137", [:mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:typed_struct, "~> 0.3.0", [hex: :typed_struct, repo: "hexpm", optional: false]}], "hexpm", "899fdadedc3691faf923e12639247b083f259284b2963e94b265088473c7349b"},
"telegex": {:git, "https://github.com/mikehostetler/telegex.git", "a07f4e180cd5ffb024c76557bb13f9f72c0d61f8", [branch: "fix/plug-router-guard"]},
"telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"},
"telemetry_metrics": {:hex, :telemetry_metrics, "1.1.0", "5bd5f3b5637e0abea0426b947e3ce5dd304f8b3bc6617039e2b5a008adc02f8f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e7b79e8ddfde70adb6db8a6623d1778ec66401f366e9a8f5dd0955c56bc8ce67"},
"telemetry_metrics_prometheus": {:hex, :telemetry_metrics_prometheus, "1.1.0", "1cc23e932c1ef9aa3b91db257ead31ea58d53229d407e059b29bb962c1505a13", [:mix], [{:plug_cowboy, "~> 2.1", [hex: :plug_cowboy, repo: "hexpm", optional: false]}, {:telemetry_metrics_prometheus_core, "~> 1.0", [hex: :telemetry_metrics_prometheus_core, repo: "hexpm", optional: false]}], "hexpm", "d43b3659b3244da44fe0275b717701542365d4519b79d9ce895b9719c1ce4d26"},
Expand Down
4 changes: 2 additions & 2 deletions test/solum/tools/spawn_coder_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ defmodule Solum.Actions.Tools.SpawnCoderTest do
test "rejects Anthropic alias with non-claude backend" do
assert {:error, msg} = SpawnCoder.validate_model_backend("opus", "codex")
assert msg =~ "Invalid model/backend combination"
assert msg =~ "backend 'claude_code'"
assert msg =~ "Use backend 'claude_code' or 'cursor'"
end

test "rejects Anthropic prefixed model with unknown backend (defaults to codex)" do
Expand All @@ -39,7 +39,7 @@ defmodule Solum.Actions.Tools.SpawnCoderTest do

test "allows supported OpenAI models with codex backend" do
assert :ok = SpawnCoder.validate_model_backend("gpt-5.3-codex", "codex")
assert :ok = SpawnCoder.validate_model_backend("openai/gpt-4o", "unknown_backend")
assert :ok = SpawnCoder.validate_model_backend("gpt-4o", "unknown_backend")
assert :ok = SpawnCoder.validate_model_backend("o1", "codex")
assert :ok = SpawnCoder.validate_model_backend("o3-mini", "codex")
end
Expand Down
Loading