Skip to content

feat(kanban): surface task outcomes and blocked context - #29247

Closed
SatoDri wants to merge 2 commits into
NousResearch:mainfrom
SatoDri:feat/kanban-summary-source-pr
Closed

feat(kanban): surface task outcomes and blocked context#29247
SatoDri wants to merge 2 commits into
NousResearch:mainfrom
SatoDri:feat/kanban-summary-source-pr

Conversation

@SatoDri

@SatoDri SatoDri commented May 20, 2026

Copy link
Copy Markdown

Summary

Reopens the Kanban dashboard improvements from #25655 as a fresh branch against current main, without replaying the stale old bundle wholesale.

This updates the selected-task drawer/API so reviewers can see the useful task outcome information first:

  • Adds a summary-tree payload for a selected task and descendants.
  • Surfaces result/handoff text, latest run summary, run metadata, subtask status/progress, and important comments.
  • Adds structured blocked-task context on board/detail/summary-tree payloads: reason, missing info, latest relevant comment, and a comment prompt.
  • Adds artifact availability metadata so unavailable/missing/scratch paths render as explicit empty states instead of misleading open/copy actions.
  • Keeps local artifact opening restricted to backend-derived, user-actionable artifacts; comment-derived paths are context-only and not openable.
  • Updates the current Kanban dashboard bundle carefully rather than reverting it to the old PR's stale state.

Notes on the previous PR feedback

The old PR was closed because its plugins/kanban/dashboard/dist/index.js was stale against current main. This branch starts from current origin/main and ports the behavior onto the current Kanban dashboard code, preserving newer scheduled/review/workflow/orchestration changes.

I looked for a maintained Kanban source file under web/src/plugins/kanban; this bundled dashboard plugin currently ships as a plain non-minified IIFE in plugins/kanban/dashboard/dist, so the frontend changes are applied there while keeping the diff focused.

Test Plan

  • git diff --check -- plugins/kanban/dashboard/plugin_api.py plugins/kanban/dashboard/dist/index.js plugins/kanban/dashboard/dist/style.css tests/plugins/test_kanban_dashboard_plugin.py
  • node --check plugins/kanban/dashboard/dist/index.js
  • $HOME/.hermes/hermes-agent/venv/bin/python -m pytest tests/plugins/test_kanban_dashboard_plugin.py -q -o 'addopts=' — 102 passed
  • $HOME/.hermes/hermes-agent/venv/bin/python -m pytest tests/hermes_cli/test_kanban*.py tests/tools/test_kanban_tools.py -q -o 'addopts=' — 620 passed, 1 skipped
  • npm --prefix web ci
  • npm --prefix web run build

Additional check:

  • pytest tests/plugins -q -o 'addopts=' currently reports 751 passed / 1 failed. The failure is unrelated to this diff: tests/plugins/web/test_web_search_provider_plugins.py::TestBundledPluginsRegister::test_all_seven_plugins_present_in_registry expects seven web search providers, but current plugin discovery includes xai as an eighth provider.

@SatoDri

SatoDri commented May 20, 2026

Copy link
Copy Markdown
Author

@teknium1 I've updated my previous PR as you asked with the UI change on the kanban

@alt-glitch alt-glitch added type/feature New feature or request P3 Low — cosmetic, nice to have comp/plugins Plugin system and bundled plugins labels May 20, 2026
@alt-glitch

Copy link
Copy Markdown
Collaborator

Reopen of closed #29241 and closed #25655 (same feature by same author). Body says it's rebased onto current main. Plugin feature, demoted P3 per plugin-provider-demotion.

Restrict dashboard artifact paths to the task workspace before exposing or checking them, redact launcher exceptions, and add coverage for unsafe paths. Also maps the SatoDri noreply email for contributor attribution.
@SatoDri

SatoDri commented May 20, 2026

Copy link
Copy Markdown
Author

@teknium1 updated following salvage's tests

@teknium1

Copy link
Copy Markdown
Contributor

Thanks for the rework @SatoDri — the summary-tree payload design is solid and the path allow-list on the open endpoint is competently scoped. Closing this one without merging, with reasoning so a resubmission lands cleanly.

Three concerns:

  1. Stale branch reverts an unrelated recent fix. This branch is 567 commits behind main and its diff also reverts fix(chat_completions): strip tool_name from messages for strict providers #28958 (the tool_name strip for strict providers — Moonshot/Kimi reject messages[N].tool_name with HTTP 400). It removes the fix, its test, and the AUTHOR_MAP entry for the original contributor. The PR body says "starts from current origin/main" but the diff shows otherwise. This blocks a clean cherry-pick.

  2. Scope creep relative to the PR title. The body frames this as surfacing task outcomes (a read concern), but the diff also adds POST /tasks/{id}/artifacts/open — a new write endpoint that shells out via open / xdg-open / explorer, plus a regex-based path scraper (_COMMENT_PATH_RE) over free-form comment bodies. Even with the backend-derived-path allow-list, opening local files over HTTP from the dashboard is its own design discussion (auth model, audit logging, opt-in config gate). It shouldn't ride along inside a summary-tree PR.

  3. IIFE-only dashboard frontend with no source. plugins/kanban/dashboard/dist/index.js is hand-edited as a non-minified IIFE with no web/src equivalent. That's fine for the existing plugin's status quo, but bundling 292 LOC of new IIFE alongside backend changes makes future trims and audits expensive. If we keep the IIFE-only model, the bundle deltas should stay minimal.

What we'd merge:

A re-scoped PR onto current main that ships only the summary-tree read endpoint (GET /tasks/{id}/summary-tree with summary/run-metadata/blocked-context/artifact-listing fields) and the dashboard rendering for it. No POST /artifacts/open, no comment-body regex path extraction, no chat_completions/release.py touches. That's a much smaller diff (likely <500 LOC server + a focused bundle delta) and easier to review on its own merits. The open-endpoint design can be a follow-up PR with its own threat model.

Credit for the summary-tree design stays with you on the resubmission.

(Salvage attempt #29274 closed unmerged for the same reasons.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/plugins Plugin system and bundled plugins P3 Low — cosmetic, nice to have type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants