feat: phase 2 — am web : dashboard web local + API JSON (contrats --json, 127.0.0.1, tiny_http, frontend embarqué) (closes #54)
release / linux (push) Successful in 14m16s
release / windows (push) Canceled after 0s
release / macos (push) Canceled after 0s

This commit is contained in:
2026-08-18 16:40:15 -04:00
parent 7f4d74f811
commit fa51cdb339
20 changed files with 1392 additions and 40 deletions
+8 -2
View File
@@ -117,6 +117,7 @@ const COMMAND_DESCRIPTIONS: &[(&str, &str)] = &[
("migrate", "export/import a machine transfer bundle (config + state)"),
("playbook", "replay a saved history sequence step by step (am history --save)"),
("lab", "benchmark the same task on several agents (duration, cost, --json)"),
("web", "local read-only web dashboard with charts (issue #54)"),
("plugins", "list the event plugins and test one (JSON contract on stdin/stdout)"),
("shell", "show or switch the system shell"),
("theme", "show or switch the color theme"),
@@ -233,7 +234,7 @@ impl AmCompleter {
"self-update", "self-uninstall", "export", "import", "shell", "theme", "lang",
"tip", "dashboard", "favorite", "unfavorite", "note", "tag", "untag", "tags",
"profile", "man", "models", "catalog", "suggest", "audit",
"service", "schedule", "monitor", "sync", "migrate", "playbook", "lab", "plugins",
"service", "schedule", "monitor", "web", "sync", "migrate", "playbook", "lab", "plugins",
"ls", "dir", "cd", "ps", "where", "get", "help", "version", "exit",
],
config_sub: vec!["show", "path", "edit", "validate", "add"],
@@ -777,7 +778,7 @@ pub fn banner_box(
" lifecycle install · uninstall · update · start · stop · restart · run".to_string(),
));
rows.push(inner(
" manage open · watch · dashboard · favorite · unfavorite · note · tag · untag · tags"
" manage open · watch · dashboard · web · favorite · unfavorite · note · tag · untag · tags"
.to_string(),
));
rows.push(inner(
@@ -1575,6 +1576,10 @@ fn handle_line(
interval: opt_value("--interval").and_then(|v| v.parse().ok()),
json: flag("--json"),
},
"web" => Command::Web(crate::cli::WebArgs {
port: opt_value("--port").and_then(|v| v.parse().ok()),
no_open: flag("--no-open"),
}),
"sync" => Command::Sync {
message: opt_value("--message"),
},
@@ -1894,6 +1899,7 @@ pub fn is_am_command(word: &str) -> bool {
| "service"
| "schedule"
| "monitor"
| "web"
| "sync"
| "migrate"
| "playbook"