app-server: drop the always-empty GET /jobs route (#6513); fold the changelog into 0.10.2

- app-server: /jobs served core::JobManager, which has no callers outside its own tests, so it always returned an empty list; the route and its ADVERTISED_ROUTES entry are gone and RUNTIME_API.md (en, zh-Hans) points to GET /v1/jobs. The relative .deepseek hook-log fallback was already fixed in the tree. [hook_sinks] stays app-server-only and the limitation is now written beside HookSinksToml. Not done: deleting core::JobManager, JobRecord and RunSource::CoreJob, which cascades into the protocol crate and about fifteen core tests; left for a follow-up.
- CHANGELOG: the Unreleased entries now sit under '## [0.10.2] - 2026-10-10' (founder decision) with an empty Unreleased lane above, which the site's changelog derivation requires; crates/tui/CHANGELOG.md resynced.

Evidence: nextest codewhale-app-server + codewhale-core + codewhale-config: 1107 passed, 0 failed, 1 skipped. Clippy on app-server with CI flags: clean. Web vitest 74 files, 772 passed. check-versions --range-audit-advisory OK; check-contributor-credit clean; sync-changelog --check up to date.

Refs #6513

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
This commit is contained in:
CodeWhale BotandClaude Sonnet 5.5 committed 2026-10-10 16:21:04 -07:00
1 parent be18b0a7bf
commit 8642ccbdc5
6 files changed
+14 -13

No files matched your search

+4 -2
View File
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [0.10.2] - 2026-10-10
- A first launch with no key or route now opens the composer. Codewhale asks
for a provider when you send your first message, keeps the message in the
box, and offers a local model only when a local Ollama server answers. The provider list
@@ -67,8 +69,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
`9b5f9d614ef69702be9944a61e89aeb3df14c047`; the 19 catalog entries are
unchanged, and installed bundles now come from a revision carrying the
reviewed Computer Use and bridge fixes and the MIT license.
## [0.10.2] - 2026-10-08
- `codewhale app-server` no longer serves `GET /jobs`, which was always empty;
background jobs are `GET /v1/jobs` on the Runtime API (#6513).
Codewhale v0.10.2 adds an animated pet view (`/pet on`) and a live Terminal work
dock, and improves recovery, plugin approval and provider reliability. `/undo`
+1 -7
View File
@@ -529,7 +529,7 @@ async fn shutdown_signal() {
/// `RuntimeBridge::stream_turn_events` forwards only `item.delta` and the
/// turn's completion, and there is no decision route, so approval-gated work
/// belongs on the Runtime API (`/v1/threads/*`, `POST /v1/approvals/{id}`).
const ADVERTISED_ROUTES: &[&str] = &["/thread", "/app", "/prompt", "/jobs"];
const ADVERTISED_ROUTES: &[&str] = &["/thread", "/app", "/prompt"];
/// Existing compatibility routes adopted by the canonical host listener.
/// Both callers share the exact existing dispatcher/auth/body-limit routes.
@@ -561,7 +561,6 @@ fn app_router(state: AppState, cors_origins: &[String]) -> Router {
MAX_RUNTIME_IMAGE_BODY_BYTES,
)),
)
.route("/jobs", get(jobs_handler))
.route(
"/v1/chat/completions",
post(chat_completions::chat_completions_handler),
@@ -1186,11 +1185,6 @@ async fn prompt_handler(State(state): State<AppState>, Json(req): Json<PromptReq
}
}
async fn jobs_handler(State(state): State<AppState>) -> Json<AppResponse> {
let runtime = state.runtime.read().await;
Json(runtime.app_status())
}
async fn app_handler(
State(state): State<AppState>,
Json(req): Json<AppRequest>,
+3
View File
@@ -1645,6 +1645,9 @@ mod provider_chain_tests {
pub struct HookSinksToml {
/// Unix domain socket path used by the app-server event sink.
///
/// Known limitation: only `codewhale app-server` reads this table; the
/// TUI and the Runtime API do not dispatch hook events to it.
///
/// When unset, no Unix socket sink is registered. There is deliberately no
/// shared `/tmp` default because socket ownership should be explicit.
#[serde(default)]
+4 -2
View File
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [0.10.2] - 2026-10-10
- A first launch with no key or route now opens the composer. Codewhale asks
for a provider when you send your first message, keeps the message in the
box, and offers a local model only when a local Ollama server answers. The provider list
@@ -67,8 +69,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
`9b5f9d614ef69702be9944a61e89aeb3df14c047`; the 19 catalog entries are
unchanged, and installed bundles now come from a revision carrying the
reviewed Computer Use and bridge fixes and the MIT license.
## [0.10.2] - 2026-10-08
- `codewhale app-server` no longer serves `GET /jobs`, which was always empty;
background jobs are `GET /v1/jobs` on the Runtime API (#6513).
Codewhale v0.10.2 adds an animated pet view (`/pet on`) and a live Terminal work
dock, and improves recovery, plugin approval and provider reliability. `/undo`
+1 -1
View File
@@ -55,7 +55,7 @@ For the read-only record of what a thread or turn did, see
| `codewhale app-server --mobile` | HTTP/SSE on loopback + `/mobile` | Runtime API + local mobile control page |
| `codewhale app-server --stdio` | JSON-RPC 2.0 over stdio | Local SDK / control probe (no listener) |
| `codewhale app-server --socket [--socket-path P]` | JSON-RPC 2.0 over a `0600` unix domain socket | Desktop daemon: multi-client, peer-uid checked, `daemon/attach` claim handshake (macOS/Linux; Windows named pipe reserved, not implemented) |
| `codewhale app-server` | HTTP on `127.0.0.1:8787` | Legacy in-process app-server (`/healthz`, `/thread`, `/app`, `/prompt`, `/jobs`); `/prompt` and `/thread` messages execute real turns via the runtime bridge. There is no direct `/tool` route: tools run only inside Engine turns, under the Engine's tool catalog and approval posture. This legacy server does not surface approvals: its bridge forwards only text deltas and the turn's completion, and it has no decision route, so an approval-gated call waits unanswered. Drive approval-gated work through the Runtime API (`/v1/threads/*` events and `POST /v1/approvals/{approval_id}`) |
| `codewhale app-server` | HTTP on `127.0.0.1:8787` | Legacy in-process app-server (`/healthz`, `/thread`, `/app`, `/prompt`); background jobs are `GET /v1/jobs` on the Runtime API; `/prompt` and `/thread` messages execute real turns via the runtime bridge. There is no direct `/tool` route: tools run only inside Engine turns, under the Engine's tool catalog and approval posture. This legacy server does not surface approvals: its bridge forwards only text deltas and the turn's completion, and it has no decision route, so an approval-gated call waits unanswered. Drive approval-gated work through the Runtime API (`/v1/threads/*` events and `POST /v1/approvals/{approval_id}`) |
| `codewhale serve --http` / `--mobile` | same server as `app-server --http`/`--mobile` | Compatibility aliases |
`app-server --http` and `--mobile` launch the same mature runtime API server
+1 -1
View File
@@ -52,7 +52,7 @@ local supervisor / SDK / automation harness
| `codewhale app-server --mobile` | 回环上的 HTTP/SSE + `/mobile` | 运行时 API + 本地移动端控制页 |
| `codewhale app-server --stdio` | 基于 stdio 的 JSON-RPC 2.0 | 本地 SDK / 控制探针(不监听端口) |
| `codewhale app-server --socket [--socket-path P]` | 基于权限为 `0600` 的 unix 域套接字的 JSON-RPC 2.0 | 桌面守护进程:多客户端、对端 uid 校验、`daemon/attach` 认领握手(macOS/Linux;Windows 命名管道已预留但未实现) |
| `codewhale app-server` | 在 `127.0.0.1:8787` 上的 HTTP | 旧式进程内 app-server(`/healthz`、`/thread`、`/app`、`/prompt`、`/jobs`);`/prompt` 与 `/thread` 消息会通过运行时桥执行真实回合。它没有直接的 `/tool` 路由:工具只在 Engine 回合内部、在 Engine 的工具目录与审批姿态下运行。这个旧式服务器不呈现审批:它的桥只转发文本增量和回合的完成,并且没有决策路由,所以一个受审批门控的调用会一直等不到答复。受审批门控的工作请通过运行时 API 驱动(`/v1/threads/*` 事件与 `POST /v1/approvals/{approval_id}`) |
| `codewhale app-server` | 在 `127.0.0.1:8787` 上的 HTTP | 旧式进程内 app-server(`/healthz`、`/thread`、`/app`、`/prompt`);后台作业请用运行时 API 的 `GET /v1/jobs`;`/prompt` 与 `/thread` 消息会通过运行时桥执行真实回合。它没有直接的 `/tool` 路由:工具只在 Engine 回合内部、在 Engine 的工具目录与审批姿态下运行。这个旧式服务器不呈现审批:它的桥只转发文本增量和回合的完成,并且没有决策路由,所以一个受审批门控的调用会一直等不到答复。受审批门控的工作请通过运行时 API 驱动(`/v1/threads/*` 事件与 `POST /v1/approvals/{approval_id}`) |
| `codewhale serve --http` / `--mobile` | 与 `app-server --http`/`--mobile` 相同的服务器 | 兼容别名 |
`app-server --http` 与 `--mobile` 启动的是历史上经由 `serve --http` 访问的同一个