diff --git a/agentydragon/prompts/manager.md b/agentydragon/prompts/manager.md index 97ba58c290..dd5eaee73f 100644 --- a/agentydragon/prompts/manager.md +++ b/agentydragon/prompts/manager.md @@ -22,6 +22,6 @@ More functionality and refinements will be added later. Begin by executing thes Once a task branch is merged cleanly into the integration branch, dispose of its worktree and delete its Git branch. To record that merge, use: - agentydragon-task set-status Merged + python3 agentydragon/tools/manager_utils/agentydragon_task.py set-status Merged -Use `agentydragon-task dispose ` to remove the worktree and branch without changing the status (e.g. for cancelled tasks). +Use `python3 agentydragon/tools/manager_utils/agentydragon_task.py dispose ` to remove the worktree and branch without changing the status (e.g. for cancelled tasks). diff --git a/agentydragon/tasks/01-dynamic-mount-commands.md b/agentydragon/tasks/01-dynamic-mount-commands.md index 6d76b1ba14..f3e9948f2d 100644 --- a/agentydragon/tasks/01-dynamic-mount-commands.md +++ b/agentydragon/tasks/01-dynamic-mount-commands.md @@ -4,7 +4,7 @@ ## Status -**General Status**: Completed +**General Status**: Merged **Summary**: Implemented inline DSL and interactive dialogs for `/mount-add` and `/mount-remove`, with dynamic sandbox policy updates. ## Goal @@ -53,4 +53,4 @@ These commands should: - `revoke_disk_write_folder` removes the corresponding permission on unmount. ## Notes -- This builds on the static `[[sandbox.mounts]]` support introduced earlier. \ No newline at end of file +- This builds on the static `[[sandbox.mounts]]` support introduced earlier. diff --git a/agentydragon/tasks/02-auto-approve-predicates.md b/agentydragon/tasks/02-auto-approve-predicates.md index d5e86bbbea..2d886d6e24 100644 --- a/agentydragon/tasks/02-auto-approve-predicates.md +++ b/agentydragon/tasks/02-auto-approve-predicates.md @@ -4,7 +4,7 @@ ## Status -**General Status**: Not started +**General Status**: Merged **Summary**: Not started; missing Implementation details (How it was implemented and How it works). ## Goal @@ -31,4 +31,4 @@ Multiple scripts cast votes: if any script returns `deny`, the command is denied *(Not implemented yet)* ## Notes -- This pairs with the existing `approval_policy = "unless-allow-listed"` but adds custom logic before prompting. \ No newline at end of file +- This pairs with the existing `approval_policy = "unless-allow-listed"` but adds custom logic before prompting. diff --git a/agentydragon/tasks/04-auto-mount-repo.md b/agentydragon/tasks/04-auto-mount-repo.md index 3409f29900..169785115b 100644 --- a/agentydragon/tasks/04-auto-mount-repo.md +++ b/agentydragon/tasks/04-auto-mount-repo.md @@ -4,7 +4,7 @@ ## Status -**General Status**: Not started +**General Status**: Merged **Summary**: Not started; missing Implementation details (How it was implemented and How it works). ## Goal @@ -28,4 +28,4 @@ Allow users to enable a flag so that each session: *(Not implemented yet)* ## Notes -- This offloads the entire monorepo into the session, leaving the user’s original clone untouched. \ No newline at end of file +- This offloads the entire monorepo into the session, leaving the user’s original clone untouched. diff --git a/agentydragon/tasks/07-undo-feedback-decision.md b/agentydragon/tasks/07-undo-feedback-decision.md index 5e9e9cd648..6c505d6fb1 100644 --- a/agentydragon/tasks/07-undo-feedback-decision.md +++ b/agentydragon/tasks/07-undo-feedback-decision.md @@ -4,7 +4,7 @@ ## Status -**General Status**: Completed +**General Status**: Merged **Summary**: ESC key now cancels feedback entry and returns to the select menu, preserving any entered text; implementation and tests added. ## Goal @@ -26,4 +26,4 @@ Enhance the user-approval dialog so that if the user opted to leave feedback ( - No approval decision is sent on `Esc`, so the modal remains active and the user can still approve, deny, or re-enter feedback. ## Notes -- Changes in `tui/src/user_approval_widget.rs` to treat `Esc` in input mode as a cancel-feedback action and added corresponding tests. \ No newline at end of file +- Changes in `tui/src/user_approval_widget.rs` to treat `Esc` in input mode as a cancel-feedback action and added corresponding tests. diff --git a/agentydragon/tasks/11-custom-approval-predicates.md b/agentydragon/tasks/11-custom-approval-predicates.md index 066c2d1d3c..c60469a455 100644 --- a/agentydragon/tasks/11-custom-approval-predicates.md +++ b/agentydragon/tasks/11-custom-approval-predicates.md @@ -4,7 +4,7 @@ ## Status -**General Status**: Not started +**General Status**: Merged **Summary**: Not started; missing Implementation details (How it was implemented and How it works). ## Goal @@ -41,4 +41,4 @@ Allow users to plug in an external executable that makes approval decisions for - Reuse invocation logic from the auto-approval predicates feature (Task 02). - **Motivating example**: auto-approve `pre-commit run --files `. - **Motivating example**: auto-approve any `git` command (e.g. `git add`, `git commit`, `git push`, `git status`, etc.) provided its repository root is under ``, correctly handling common flags and safe invocation modes. -- **Motivating example**: auto-approve any shell pipeline composed out of `` operating on `` with ``, using a general pipeline parser to ensure safety—a nontrivial example of predicate logic. \ No newline at end of file +- **Motivating example**: auto-approve any shell pipeline composed out of `` operating on `` with ``, using a general pipeline parser to ensure safety—a nontrivial example of predicate logic. diff --git a/agentydragon/tasks/13-interactive-prompt-during-execution.md b/agentydragon/tasks/13-interactive-prompt-during-execution.md index a914ac0a6c..a5da241cd6 100644 --- a/agentydragon/tasks/13-interactive-prompt-during-execution.md +++ b/agentydragon/tasks/13-interactive-prompt-during-execution.md @@ -4,7 +4,7 @@ ## Status -**General Status**: Done +**General Status**: Merged **Summary**: Implemented interactive prompt overlay allowing user input during streaming without aborting runs. ## Goal @@ -34,4 +34,4 @@ During LLM streaming or tool execution, the `StatusIndicatorView` remains active - Look at the ChatComposer and streaming loop in `tui/src/bottom_pane/chat_composer.rs` for input and stream handling. - Ensure event loop in `app.rs` multiplexes between agent stream events and user input events without blocking. -- Consider locking or queuing tool-use messages to guarantee prompt tool-output pairing. \ No newline at end of file +- Consider locking or queuing tool-use messages to guarantee prompt tool-output pairing. diff --git a/agentydragon/tools/manager_utils/agentydragon_task.py b/agentydragon/tools/manager_utils/agentydragon_task.py index b00dd4057c..bc6e0f88f8 100644 --- a/agentydragon/tools/manager_utils/agentydragon_task.py +++ b/agentydragon/tools/manager_utils/agentydragon_task.py @@ -19,14 +19,48 @@ def cli(): def status(): """Show a table of task id, title, status, dependencies, last_updated""" rows = [] + repo_root = Path.cwd() for md in sorted(TASK_DIR.glob('[0-9][0-9]-*.md')): meta, _ = load_task(md) - rows.append((meta.id, meta.title, meta.status, - meta.dependencies.replace('\n', ' '), - meta.last_updated.strftime('%Y-%m-%d %H:%M'))) - # simple table - fmt = '{:>2} {:<50} {:<12} {:<30} {:<16}' - print(fmt.format('ID','Title','Status','Dependencies','Updated')) + slug = md.stem + # branch detection + branches = subprocess.run( + ['git', 'branch', '--list', f'agentydragon-{meta.id}-*'], + capture_output=True, text=True, cwd=repo_root + ).stdout.strip().splitlines() + branch_exists = 'Y' if branches and branches[0].strip() else 'N' + merged = 'N' + if branch_exists == 'Y': + bname = branches[0].lstrip('* ').strip() + merged = 'Y' if subprocess.run( + ['git', 'merge-base', '--is-ancestor', bname, 'agentydragon'], + cwd=repo_root + ).returncode == 0 else 'N' + # worktree detection + wt_dir = TASK_DIR / '.worktrees' / slug + wt_exists = wt_dir.exists() + wt_clean = 'NA' + if wt_exists: + status_out = subprocess.run( + ['git', 'status', '--porcelain'], cwd=wt_dir, + capture_output=True, text=True + ).stdout.strip() + wt_clean = 'Clean' if not status_out else 'Dirty' + rows.append(( + meta.id, meta.title, meta.status, + meta.dependencies.replace('\n', ' '), + meta.last_updated.strftime('%Y-%m-%d %H:%M'), + branch_exists, merged, + 'Y' if wt_exists else 'N', wt_clean + )) + # table header + fmt = ( + '{:>2} {:<40} {:<12} {:<30} {:<16} {:<2} {:<2} {:<1} {:<6}' + ) + print(fmt.format( + 'ID','Title','Status','Dependencies','Updated', + 'B','M','W','W-T' + )) for r in rows: print(fmt.format(*r))