Skip to content

Comments

feat: v0.9.4 — Multi‑Tool Image Jobs, Fail‑Fast Worker, and Plugin‑Agnostic Results Panel#215

Open
rogermt wants to merge 11 commits intomainfrom
v0.9.0
Open

feat: v0.9.4 — Multi‑Tool Image Jobs, Fail‑Fast Worker, and Plugin‑Agnostic Results Panel#215
rogermt wants to merge 11 commits intomainfrom
v0.9.0

Conversation

@rogermt
Copy link
Owner

@rogermt rogermt commented Feb 23, 2026

PR Title (v0.9.4)

v0.9.4 — Multi‑Tool Image Jobs, Fail‑Fast Worker, and Plugin‑Agnostic Results Panel


PR Description (v0.9.4)

Summary

This release introduces multi‑tool image job execution to the platform, updates the worker to support fail‑fast sequential tool execution, and removes all legacy soccer‑specific UI logic from the ResultsPanel. The UI now renders plugin‑agnostic JSON output, ensuring consistent behavior across all plugins.


Key Changes

1. Multi‑Tool Image Job Support

  • The /v1/image/submit endpoint now accepts multiple tool= parameters.
  • Backend converts these into:
    • job_type = "image_multi"
    • tool_list = ["toolA", "toolB", ...]
  • Single‑tool jobs remain unchanged (job_type = "image").

2. Worker: Sequential Multi‑Tool Execution (Fail‑Fast)

  • Worker now loops through tool_list in order.
  • If any tool fails, the job is immediately marked failed.
  • If all tools succeed, results are aggregated into:
{
  "plugin_id": "plugin",
  "tools": {
    "toolA": {...},
    "toolB": {...}
  }
}
  • Single‑tool output format remains unchanged:
{ "results": {...} }

3. ResultsPanel Cleanup (Plugin‑Agnostic)

  • Removed all legacy soccer‑specific UI logic:
    • bounding box extractors
    • player extractors
    • radar view
    • pitch view
    • auto‑renderers
  • ResultsPanel now displays raw JSON only, for both single‑tool and multi‑tool jobs.
  • Fixes the white canvas issue by ensuring all JSON is wrapped in the themed code block.

4. No Changes Required for Plugins

  • Plugins continue to expose tools via plugin.tools.
  • No manifest changes.
  • No schema changes beyond storing tool_list.

Why This Matters

This PR completes the architectural foundation for multi‑tool workflows.
It restores plugin‑agnostic behavior in the UI, eliminates legacy assumptions, and ensures consistent, predictable output formats across all job types.

This is the final step before v1.0.0’s unified output format proposal.


Testing

  • Added fail‑fast worker tests for multi‑tool execution.
  • Verified multi‑tool JSON output structure.
  • Confirmed UI renders multi‑tool results correctly.
  • Confirmed no soccer‑specific UI logic remains.
  • Confirmed white‑canvas regression is resolved.

Migration Notes

  • No breaking changes for existing plugins.
  • Frontend must pass multiple tool= params to enable multi‑tool mode.
  • Single‑tool behavior is fully preserved.

If you want, I can also generate:

  • A v0.9.4 changelog
  • A v0.9.4 → v1.0.0 migration guide
  • A commit message for the merge

Just say the word.

Roger MT and others added 10 commits February 22, 2026 22:15
…port

- Make Job.tool nullable for multi-tool jobs
- Add Job.tool_list column (JSON-encoded list of tools)
- Add tool, tool_list, job_type fields to JobResultsResponse schema
- Update /v1/jobs/{job_id} endpoint to return new fields
- Add 11 TDD tests for model and schema changes

Backward compatible: single-tool jobs continue to work unchanged.
- Change tool parameter from str to List[str] to accept multiple tools
- Validate all tools exist in plugin.tools
- Validate all tools support image input
- Create job_type='image_multi' for multi-tool submissions
- Store tool_list as JSON-encoded list
- Add 6 TDD tests for multi-tool submission

Backward compatible: single-tool submissions still create job_type='image'
- Detect job_type='image_multi' and parse tool_list
- Execute tools sequentially via run_plugin_tool()
- Aggregate results into {plugin_id, tools: {...}} format
- Fail-fast: one tool failure fails entire job
- Single-tool jobs continue to use {results: {...}} format
- Add 5 TDD tests for multi-tool worker execution

Backward compatible: single-tool image/video jobs unchanged
- Add tool_list and job_type fields to Job interface
- Update submitImage() to accept string | string[] for tools
- Append multiple tools as separate query parameters

Backward compatible: single tool string still works
- App.tsx: Pass all selected tools to submitImage (not just first)
- ResultsPanel.tsx: Detect multi-tool results and use ImageMultiToolResults
- ResultsPanel.tsx: Display job_type and tool_list in job info
- ResultsPanel.tsx: Support both job.results and job.result (backward compat)

Multi-tool jobs now display results grouped by tool name
…ltOverlay - v0.9.4 multi-tool agnostic

CHANGES:
- ResultsPanel: Remove extractBoundingBoxes/extractPlayerPositions, show raw JSON only
- ResultOverlay: Remove team colors, pitch lines, radar, ball markers, toggles - generic boxes only
- VideoTracker: Remove overlay toggles UI, use simple drawDetections signature
- Tests: Updated to match new plugin-agnostic behavior (25 tests passing)

VERIFIED:
- npm run type-check: PASS
- npm run lint: PASS
- npm run test ResultsPanel.test.tsx ResultOverlay.test.tsx: 25/25 PASS

This implements the v0.9.4 multi-tool architecture requirements where
ResultsPanel and ResultOverlay are plugin-agnostic with no soccer-specific logic.

Amp-Thread-ID: https://ampcode.com/threads/T-019c87df-d1af-766e-818e-c992370c690b
Co-authored-by: Amp <amp@ampcode.com>
…lock styling

ISSUE: Multi-tool results showed white background (backgroundColor: '#fff')
causing white canvas appearance while single-tool showed styled JSON.

FIX:
- Replace hardcoded white (#fff, #f5f5f5) with var(--bg-primary)
- Use same codeBlockStyle from ResultsPanel (branded colors, monospace)
- Remove tool-specific rendering (yolo-tracker section was empty)
- Consistent typography with ResultsPanel

RESULT: Multi-tool and single-tool results now use identical styling.
No more white canvas in multi-tool mode.

Amp-Thread-ID: https://ampcode.com/threads/T-019c87df-d1af-766e-818e-c992370c690b
Co-authored-by: Amp <amp@ampcode.com>
ISSUE: ImageMultiToolResults and JobResults had hardcoded tool names
('ocr', 'yolo-tracker') making them not plugin-agnostic for v0.9.4.

CHANGES:
- ImageMultiToolResults: Remove tool-specific parsing, show generic JSON only
- JobResults: Remove OCR/detection parsing, show generic JSON only
- Both now use same codeBlockStyle as ResultsPanel (var(--bg-primary))
- Removed tool name conditionals - all tools get same treatment

TESTS UPDATED:
- JobResults.test.tsx: 7/7 passing (now checks JSON rendering)
- ImageMultiToolResults.test.tsx: 7/7 passing (generic JSON tests)

RESULT: Web-UI is now fully plugin-agnostic. No hardcoded tool names or
special rendering logic. All results display as branded JSON blocks.

Amp-Thread-ID: https://ampcode.com/threads/T-019c87df-d1af-766e-818e-c992370c690b
Co-authored-by: Amp <amp@ampcode.com>
@rogermt rogermt added the enhancement New feature or request label Feb 23, 2026
…s.test.tsx

Changed 'as any' to proper type cast using Parameters<typeof JobResults>[0]
to satisfy eslint no-explicit-any rule.

Amp-Thread-ID: https://ampcode.com/threads/T-019c87df-d1af-766e-818e-c992370c690b
Co-authored-by: Amp <amp@ampcode.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant