task-agent 1.3.8__tar.gz → 1.3.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {task_agent-1.3.8 → task_agent-1.3.10}/PKG-INFO +2 -2
- {task_agent-1.3.8 → task_agent-1.3.10}/docs/cli/README.md +6 -2
- {task_agent-1.3.8/plugins/claude-code → task_agent-1.3.10/plugins/antigravity}/skills/complete-task/SKILL.md +8 -0
- {task_agent-1.3.8 → task_agent-1.3.10/plugins/claude-code}/skills/complete-task/SKILL.md +8 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/pyproject.toml +2 -2
- {task_agent-1.3.8/plugins/antigravity → task_agent-1.3.10}/skills/complete-task/SKILL.md +8 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/cli.py +78 -5
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/manager.py +416 -22
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/mcp.py +32 -1
- task_agent-1.3.10/tests/test_manager_git.py +571 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_mcp.py +27 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/uv.lock +5 -5
- task_agent-1.3.8/tests/test_manager_git.py +0 -253
- {task_agent-1.3.8 → task_agent-1.3.10}/.agents/skills/next/SKILL.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/.gemini/settings.json +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/.github/workflows/ci.yml +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/.github/workflows/publish.yml +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/.gitignore +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/.mise.toml +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/.pre-commit-config.yaml +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/.python-version +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/.ta/agents/agy-cli/meta.toml +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/.ta/agents/antigravity/meta.toml +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/.ta/agents/gh/meta.toml +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/.ta/agents/minimal/meta.toml +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/.ta/agents/uat-aws/meta.toml +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/.ta/worker +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/.ta-config.json +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/CLAUDE.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/GEMINI.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/Makefile +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/README.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/agent.env +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/docs/README.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/docs/STATION-MAP.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/docs/architecture/README.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/docs/chats/gemini-conversation-1773283034591.json +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/docs/chats/project-init-to-v0.1.46.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/docs/development/README.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/docs/task-agents.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/docs/workflow/README.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/docs/workflow/trivial_worker_policy.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/opencode.json +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/antigravity/.gemini-plugin/plugin.json +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/antigravity/.mcp.json +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/antigravity/README.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/antigravity/hooks/hooks.json +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/antigravity/hooks/session_start.sh +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/antigravity/rules/task_agent.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/antigravity/scripts/statusline.sh +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/antigravity/skills/README.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/antigravity/skills/agent-import/SKILL.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/antigravity/skills/mission-workflow/SKILL.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/antigravity/skills/next/SKILL.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/antigravity/skills/next-task/SKILL.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/claude-code/.claude-plugin/plugin.json +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/claude-code/.mcp.json +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/claude-code/README.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/claude-code/hooks/hooks.json +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/claude-code/hooks/session_start.sh +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/claude-code/scripts/statusline.sh +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/claude-code/skills/agent-import/SKILL.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/claude-code/skills/mission-workflow/SKILL.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/claude-code/skills/next-task/SKILL.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/codex/.mcp.json +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/codex/README.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/copilot/.mcp.json +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/copilot/README.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/grok/.mcp.json +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/plugins/grok/README.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/scripts/clean_duplicates.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/scripts/migrate_tasks.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/scripts/recover_dates.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/sidecars/adk-worker/.env.example +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/sidecars/adk-worker/README.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/sidecars/adk-worker/instructions/manager.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/sidecars/adk-worker/instructions/validator.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/sidecars/adk-worker/instructions/worker.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/sidecars/adk-worker/profiles/default.json +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/sidecars/adk-worker/pyproject.toml +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/sidecars/adk-worker/uv.lock +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/sidecars/adk-worker/worker.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/sidecars/keet-bridge/README.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/sidecars/keet-bridge/bridge.js +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/sidecars/keet-bridge/package-lock.json +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/sidecars/keet-bridge/package.json +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/sidecars/keet-bridge/run.sh +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/sidecars/keet-bridge/test-e2e.js +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/sidecars/matrix-bridge/README.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/sidecars/matrix-bridge/matrix_bridge.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/skills/README.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/skills/agent-import/SKILL.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/skills/mission-workflow/SKILL.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/skills/next/SKILL.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/skills/next-task/SKILL.md +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/__init__.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/__main__.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/agent.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/agent_registry.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/audit.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/chat/__init__.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/chat/config.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/chat/discovery.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/chat/last_used.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/config.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/discovery.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/importers/__init__.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/importers/antigravity.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/importers/base.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/importers/claude_code.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/importers/generic.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/inbox.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/models/__init__.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/models/issue.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/models/metric.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/perf.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/plugins/__init__.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/plugins/github.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/runner.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/store_registry.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/templates.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/src/taskagent/theme.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/test-dir/opencode.json +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/conftest.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/e2e/test_agent_sandboxing.sh +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_agent.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_agent_registry.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_agy_cli_worker.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_atomic_mutations.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_auto_commit.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_chat_config.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_chat_discovery.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_chat_last_used.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_cli.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_cli_windows.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_discovery.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_github_token.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_importers.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_inbox.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_inbox_watch.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_lease.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_manager.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_metrics.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_migration.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_perf.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_plugin_antigravity.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_plugin_claude.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_project_host_root.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_rebind.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_remote_attach.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_remote_create.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_repo_resolve.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_runner.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_store_registry.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_store_symlink.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_templates.py +0 -0
- {task_agent-1.3.8 → task_agent-1.3.10}/tests/test_yazi.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: task-agent
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.10
|
|
4
4
|
Summary: A prioritized, file-based task queue for autonomous agentic workers
|
|
5
5
|
Project-URL: Homepage, https://github.com/InTEGr8or/task-agent
|
|
6
6
|
Project-URL: Repository, https://github.com/InTEGr8or/task-agent.git
|
|
@@ -28,7 +28,7 @@ Requires-Dist: pyyaml>=6.0
|
|
|
28
28
|
Requires-Dist: questionary>=2.1.1
|
|
29
29
|
Requires-Dist: rich>=13.9.4
|
|
30
30
|
Requires-Dist: transitions>=0.9.2
|
|
31
|
-
Requires-Dist: verkit>=0.
|
|
31
|
+
Requires-Dist: verkit>=0.2.0
|
|
32
32
|
Description-Content-Type: text/markdown
|
|
33
33
|
|
|
34
34
|
# Task Agent 🤖
|
|
@@ -53,12 +53,16 @@ Prints a fast, lightweight one-liner for shell prompt integration (e.g. bash, zs
|
|
|
53
53
|
Marks a task as completed.
|
|
54
54
|
- **Flags**:
|
|
55
55
|
- `-m`, `--message`: Custom git commit message.
|
|
56
|
+
- `--code-repo`: Checkout to commit (path or moniker) when the edits are not in the task store's host.
|
|
57
|
+
- `--path`: File to commit. Repeat for several files. All paths must be in one git repository.
|
|
58
|
+
- `--sweep-host`: `git add .` in the bound host checkout. Can include unrelated pending work in that host.
|
|
59
|
+
- `--cached-only`: Commit only what is already staged.
|
|
56
60
|
- `--no-commit`: Skip the automatic git commit.
|
|
61
|
+
- **Code commits follow the task's repo.** If that repo is not the one your shell is in, `ta done` commits there. It does not `git add .` the shell's repo. `--path` is a partial commit: a relative path is read in the task repo, and an absolute path can partial-commit `pwd` instead. Repeat `--path` for several files in the same git repo.
|
|
57
62
|
- **Process**:
|
|
58
63
|
1. Moves the file to `completed/{year}/`.
|
|
59
|
-
2. Commits
|
|
64
|
+
2. Commits the partitioned checkout when one was named, or the task worktree.
|
|
60
65
|
3. Appends the resulting commit hash to the task file.
|
|
61
|
-
4. Increments the project patch version (if `pyproject.toml` or `package.json` is present).
|
|
62
66
|
|
|
63
67
|
### `ta promote <slug>`
|
|
64
68
|
Moves a task from `draft/` to `pending/`.
|
|
@@ -41,6 +41,14 @@ are actually satisfied.
|
|
|
41
41
|
3. **Complete via task-agent (required)**
|
|
42
42
|
- MCP: `complete_task` with `name` + `solution` (and optional commit `message`)
|
|
43
43
|
- CLI: `ta done <slug>` (with project flags as needed)
|
|
44
|
+
- **Commit in the task's repo.** If `repo` is a different checkout from
|
|
45
|
+
the session `pwd`, the code commit goes there, not into `pwd`.
|
|
46
|
+
- **Partial commits.** Pass `paths` to stage only those files. Relative
|
|
47
|
+
paths resolve in the task repo when it is not `pwd` (a small fix in the
|
|
48
|
+
other repo, no new session). Absolute paths partial-commit `pwd` or any
|
|
49
|
+
other checkout they point at. All paths in one call must share one git
|
|
50
|
+
repo. `sweep_host` commits the whole cwd repo and can pick up unrelated
|
|
51
|
+
files.
|
|
44
52
|
4. **Self-report cost metrics when known** (cost optimization)
|
|
45
53
|
- Model name / version, provider
|
|
46
54
|
- Agent harness (e.g. `claude-code`, `antigravity`, `grok`, `opencode`)
|
|
@@ -41,6 +41,14 @@ are actually satisfied.
|
|
|
41
41
|
3. **Complete via task-agent (required)**
|
|
42
42
|
- MCP: `complete_task` with `name` + `solution` (and optional commit `message`)
|
|
43
43
|
- CLI: `ta done <slug>` (with project flags as needed)
|
|
44
|
+
- **Commit in the task's repo.** If `repo` is a different checkout from
|
|
45
|
+
the session `pwd`, the code commit goes there, not into `pwd`.
|
|
46
|
+
- **Partial commits.** Pass `paths` to stage only those files. Relative
|
|
47
|
+
paths resolve in the task repo when it is not `pwd` (a small fix in the
|
|
48
|
+
other repo, no new session). Absolute paths partial-commit `pwd` or any
|
|
49
|
+
other checkout they point at. All paths in one call must share one git
|
|
50
|
+
repo. `sweep_host` commits the whole cwd repo and can pick up unrelated
|
|
51
|
+
files.
|
|
44
52
|
4. **Self-report cost metrics when known** (cost optimization)
|
|
45
53
|
- Model name / version, provider
|
|
46
54
|
- Agent harness (e.g. `claude-code`, `antigravity`, `grok`, `opencode`)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "task-agent"
|
|
3
|
-
version = "1.3.
|
|
3
|
+
version = "1.3.10"
|
|
4
4
|
description = "A prioritized, file-based task queue for autonomous agentic workers"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -38,7 +38,7 @@ dependencies = [
|
|
|
38
38
|
"questionary>=2.1.1",
|
|
39
39
|
"rich>=13.9.4",
|
|
40
40
|
"githubkit>=0.15.5",
|
|
41
|
-
"verkit>=0.
|
|
41
|
+
"verkit>=0.2.0",
|
|
42
42
|
"multi-agent-registry>=0.1.0",
|
|
43
43
|
"transitions>=0.9.2",
|
|
44
44
|
"boto3>=1.34.0",
|
|
@@ -41,6 +41,14 @@ are actually satisfied.
|
|
|
41
41
|
3. **Complete via task-agent (required)**
|
|
42
42
|
- MCP: `complete_task` with `name` + `solution` (and optional commit `message`)
|
|
43
43
|
- CLI: `ta done <slug>` (with project flags as needed)
|
|
44
|
+
- **Commit in the task's repo.** If `repo` is a different checkout from
|
|
45
|
+
the session `pwd`, the code commit goes there, not into `pwd`.
|
|
46
|
+
- **Partial commits.** Pass `paths` to stage only those files. Relative
|
|
47
|
+
paths resolve in the task repo when it is not `pwd` (a small fix in the
|
|
48
|
+
other repo, no new session). Absolute paths partial-commit `pwd` or any
|
|
49
|
+
other checkout they point at. All paths in one call must share one git
|
|
50
|
+
repo. `sweep_host` commits the whole cwd repo and can pick up unrelated
|
|
51
|
+
files.
|
|
44
52
|
4. **Self-report cost metrics when known** (cost optimization)
|
|
45
53
|
- Model name / version, provider
|
|
46
54
|
- Agent harness (e.g. `claude-code`, `antigravity`, `grok`, `opencode`)
|
|
@@ -1670,6 +1670,9 @@ def cmd_done(
|
|
|
1670
1670
|
no_verify: bool = True,
|
|
1671
1671
|
metrics: Optional[SubtaskMetric] = None,
|
|
1672
1672
|
cached_only: bool = False,
|
|
1673
|
+
code_repo: Optional[str] = None,
|
|
1674
|
+
code_paths: Optional[list] = None,
|
|
1675
|
+
sweep_host: bool = False,
|
|
1673
1676
|
):
|
|
1674
1677
|
"""Mark an issue as done."""
|
|
1675
1678
|
if not slug:
|
|
@@ -1680,7 +1683,16 @@ def cmd_done(
|
|
|
1680
1683
|
)
|
|
1681
1684
|
sys.exit(1)
|
|
1682
1685
|
|
|
1683
|
-
|
|
1686
|
+
lookup_root = manager.code_root
|
|
1687
|
+
if code_repo:
|
|
1688
|
+
try:
|
|
1689
|
+
lookup_root = manager._resolve_code_repo_root(code_repo)
|
|
1690
|
+
except Exception:
|
|
1691
|
+
pass
|
|
1692
|
+
worktree_path = manager._issue_worktree(slug, lookup_root) if lookup_root else None
|
|
1693
|
+
if worktree_path is None:
|
|
1694
|
+
worktree_path = find_worktree_path_for_slug(slug)
|
|
1695
|
+
git_cwd = str(lookup_root) if lookup_root else None
|
|
1684
1696
|
abs_worktree = (
|
|
1685
1697
|
worktree_path.resolve() if worktree_path and worktree_path.exists() else None
|
|
1686
1698
|
)
|
|
@@ -1701,6 +1713,9 @@ def cmd_done(
|
|
|
1701
1713
|
no_verify=no_verify,
|
|
1702
1714
|
metrics=metrics,
|
|
1703
1715
|
cached_only=cached_only,
|
|
1716
|
+
code_repo=code_repo,
|
|
1717
|
+
code_paths=code_paths,
|
|
1718
|
+
sweep_host=sweep_host,
|
|
1704
1719
|
)
|
|
1705
1720
|
console.print(
|
|
1706
1721
|
f"[bold green]Issue '{issue.slug}' marked as done and "
|
|
@@ -1708,6 +1723,10 @@ def cmd_done(
|
|
|
1708
1723
|
)
|
|
1709
1724
|
if commit_hash:
|
|
1710
1725
|
console.print(f"Commit: {commit_hash}")
|
|
1726
|
+
note = getattr(manager, "last_code_commit_note", "")
|
|
1727
|
+
if note:
|
|
1728
|
+
style = "yellow" if commit_hash == "no_code_commit" else "dim"
|
|
1729
|
+
console.print(f"[{style}]{note}[/{style}]")
|
|
1711
1730
|
|
|
1712
1731
|
# Releases are explicit — do not auto-amend/bump on done (that rewrote
|
|
1713
1732
|
# history and orphaned tags). Hint when a project version file exists.
|
|
@@ -1742,8 +1761,18 @@ def cmd_done(
|
|
|
1742
1761
|
console.print(f"[blue]Cleaning up git worktree for '{slug}'...[/blue]")
|
|
1743
1762
|
try:
|
|
1744
1763
|
# Remove worktree
|
|
1764
|
+
remove_cmd = ["git", "worktree", "remove", str(worktree_path)]
|
|
1765
|
+
if git_cwd:
|
|
1766
|
+
remove_cmd = [
|
|
1767
|
+
"git",
|
|
1768
|
+
"-C",
|
|
1769
|
+
git_cwd,
|
|
1770
|
+
"worktree",
|
|
1771
|
+
"remove",
|
|
1772
|
+
str(worktree_path),
|
|
1773
|
+
]
|
|
1745
1774
|
subprocess.run(
|
|
1746
|
-
|
|
1775
|
+
remove_cmd,
|
|
1747
1776
|
check=True,
|
|
1748
1777
|
capture_output=True,
|
|
1749
1778
|
text=True,
|
|
@@ -1755,8 +1784,11 @@ def cmd_done(
|
|
|
1755
1784
|
# Delete branch
|
|
1756
1785
|
branch_name = f"issue/{slug}"
|
|
1757
1786
|
console.print(f"[blue]Deleting local branch '{branch_name}'...[/blue]")
|
|
1787
|
+
delete_cmd = ["git", "branch", "-d", branch_name]
|
|
1788
|
+
if git_cwd:
|
|
1789
|
+
delete_cmd = ["git", "-C", git_cwd, "branch", "-d", branch_name]
|
|
1758
1790
|
subprocess.run(
|
|
1759
|
-
|
|
1791
|
+
delete_cmd,
|
|
1760
1792
|
check=True,
|
|
1761
1793
|
capture_output=True,
|
|
1762
1794
|
text=True,
|
|
@@ -1775,15 +1807,27 @@ def cmd_done(
|
|
|
1775
1807
|
# If worktree doesn't exist, we still try to delete the branch if it exists
|
|
1776
1808
|
branch_name = f"issue/{slug}"
|
|
1777
1809
|
try:
|
|
1810
|
+
show_cmd = ["git", "show-ref", "--verify", f"refs/heads/{branch_name}"]
|
|
1811
|
+
delete_cmd = ["git", "branch", "-d", branch_name]
|
|
1812
|
+
if git_cwd:
|
|
1813
|
+
show_cmd = [
|
|
1814
|
+
"git",
|
|
1815
|
+
"-C",
|
|
1816
|
+
git_cwd,
|
|
1817
|
+
"show-ref",
|
|
1818
|
+
"--verify",
|
|
1819
|
+
f"refs/heads/{branch_name}",
|
|
1820
|
+
]
|
|
1821
|
+
delete_cmd = ["git", "-C", git_cwd, "branch", "-d", branch_name]
|
|
1778
1822
|
result = subprocess.run(
|
|
1779
|
-
|
|
1823
|
+
show_cmd,
|
|
1780
1824
|
capture_output=True,
|
|
1781
1825
|
text=True,
|
|
1782
1826
|
)
|
|
1783
1827
|
if result.returncode == 0:
|
|
1784
1828
|
console.print(f"[blue]Deleting local branch '{branch_name}'...[/blue]")
|
|
1785
1829
|
subprocess.run(
|
|
1786
|
-
|
|
1830
|
+
delete_cmd,
|
|
1787
1831
|
check=True,
|
|
1788
1832
|
capture_output=True,
|
|
1789
1833
|
text=True,
|
|
@@ -7061,6 +7105,32 @@ TA_STRATEGY_COOLDOWN_HOURS environment variable.
|
|
|
7061
7105
|
"files, so one agent's `done` doesn't sweep up the other's changes"
|
|
7062
7106
|
),
|
|
7063
7107
|
)
|
|
7108
|
+
done_parser.add_argument(
|
|
7109
|
+
"--code-repo",
|
|
7110
|
+
default=None,
|
|
7111
|
+
help=(
|
|
7112
|
+
"Checkout to commit code into (path or registered moniker). "
|
|
7113
|
+
"Use when the edits are not in this task store's host repo."
|
|
7114
|
+
),
|
|
7115
|
+
)
|
|
7116
|
+
done_parser.add_argument(
|
|
7117
|
+
"--path",
|
|
7118
|
+
action="append",
|
|
7119
|
+
dest="code_paths",
|
|
7120
|
+
default=None,
|
|
7121
|
+
help=(
|
|
7122
|
+
"File to include in the code commit. Repeat for several files. "
|
|
7123
|
+
"All paths must be in the same git repository. Nothing else is staged."
|
|
7124
|
+
),
|
|
7125
|
+
)
|
|
7126
|
+
done_parser.add_argument(
|
|
7127
|
+
"--sweep-host",
|
|
7128
|
+
action="store_true",
|
|
7129
|
+
help=(
|
|
7130
|
+
"git add . in the bound host checkout. Can pick up unrelated "
|
|
7131
|
+
"pending work in that host. Other checkouts are not touched."
|
|
7132
|
+
),
|
|
7133
|
+
)
|
|
7064
7134
|
done_parser.add_argument(
|
|
7065
7135
|
"--hooks",
|
|
7066
7136
|
dest="no_verify",
|
|
@@ -7468,6 +7538,9 @@ TA_STRATEGY_COOLDOWN_HOURS environment variable.
|
|
|
7468
7538
|
args.no_verify,
|
|
7469
7539
|
metrics=done_metrics,
|
|
7470
7540
|
cached_only=getattr(args, "cached_only", False),
|
|
7541
|
+
code_repo=getattr(args, "code_repo", None),
|
|
7542
|
+
code_paths=getattr(args, "code_paths", None),
|
|
7543
|
+
sweep_host=getattr(args, "sweep_host", False),
|
|
7471
7544
|
)
|
|
7472
7545
|
elif args.command == "delete":
|
|
7473
7546
|
cmd_soft_delete(console, manager, args.slug)
|