task-agent 1.0.41__tar.gz → 1.2.1__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.0.41 → task_agent-1.2.1}/.gemini/settings.json +1 -5
- task_agent-1.2.1/.ta/agents/antigravity/meta.toml +12 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/PKG-INFO +7 -2
- {task_agent-1.0.41 → task_agent-1.2.1}/docs/cli/README.md +6 -0
- task_agent-1.2.1/plugins/antigravity/skills/agent-import/SKILL.md +47 -0
- task_agent-1.2.1/plugins/claude-code/skills/agent-import/SKILL.md +47 -0
- task_agent-1.2.1/plugins/codex/.mcp.json +8 -0
- task_agent-1.2.1/plugins/codex/README.md +8 -0
- task_agent-1.2.1/plugins/copilot/.mcp.json +8 -0
- task_agent-1.2.1/plugins/copilot/README.md +8 -0
- task_agent-1.2.1/plugins/grok/.mcp.json +8 -0
- task_agent-1.2.1/plugins/grok/README.md +8 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/pyproject.toml +11 -2
- task_agent-1.2.1/skills/agent-import/SKILL.md +47 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/skills/mission-workflow/SKILL.md +6 -0
- task_agent-1.2.1/src/taskagent/agent_registry.py +77 -0
- task_agent-1.2.1/src/taskagent/chat/__init__.py +23 -0
- task_agent-1.2.1/src/taskagent/chat/config.py +88 -0
- task_agent-1.2.1/src/taskagent/chat/discovery.py +5 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/cli.py +316 -217
- task_agent-1.2.1/src/taskagent/importers/__init__.py +32 -0
- task_agent-1.2.1/src/taskagent/importers/antigravity.py +134 -0
- task_agent-1.2.1/src/taskagent/importers/base.py +53 -0
- task_agent-1.2.1/src/taskagent/importers/claude_code.py +119 -0
- task_agent-1.2.1/src/taskagent/importers/generic.py +100 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/inbox.py +92 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/manager.py +988 -423
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/mcp.py +183 -1
- task_agent-1.2.1/src/taskagent/perf.py +152 -0
- task_agent-1.2.1/src/taskagent/runner.py +186 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_agent_registry.py +23 -0
- task_agent-1.2.1/tests/test_atomic_mutations.py +131 -0
- task_agent-1.2.1/tests/test_chat_config.py +80 -0
- task_agent-1.2.1/tests/test_chat_discovery.py +109 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_cli.py +39 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_cli_windows.py +0 -17
- task_agent-1.2.1/tests/test_importers.py +138 -0
- task_agent-1.2.1/tests/test_inbox_watch.py +70 -0
- task_agent-1.2.1/tests/test_lease.py +83 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_mcp.py +36 -0
- task_agent-1.2.1/tests/test_perf.py +96 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_plugin_antigravity.py +1 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_plugin_claude.py +1 -1
- task_agent-1.2.1/tests/test_runner.py +88 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/uv.lock +425 -2
- task_agent-1.0.41/src/taskagent/agent_registry.py +0 -226
- {task_agent-1.0.41 → task_agent-1.2.1}/.agents/skills/next/SKILL.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/.env +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/.github/workflows/ci.yml +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/.github/workflows/publish.yml +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/.gitignore +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/.mise.toml +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/.pre-commit-config.yaml +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/.python-version +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/.ta/agents/agy-cli/meta.toml +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/.ta/agents/gh/meta.toml +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/.ta/agents/minimal/meta.toml +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/.ta/agents/uat-aws/meta.toml +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/.ta/worker +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/.ta-config.json +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/CLAUDE.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/GEMINI.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/Makefile +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/README.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/agent.env +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/docs/README.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/docs/STATION-MAP.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/docs/architecture/README.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/docs/chats/gemini-conversation-1773283034591.json +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/docs/chats/project-init-to-v0.1.46.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/docs/development/README.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/docs/task-agents.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/docs/workflow/README.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/docs/workflow/trivial_worker_policy.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/opencode.json +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/antigravity/.gemini-plugin/plugin.json +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/antigravity/.mcp.json +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/antigravity/README.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/antigravity/hooks/hooks.json +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/antigravity/hooks/session_start.sh +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/antigravity/rules/task_agent.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/antigravity/scripts/statusline.sh +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/antigravity/skills/README.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/antigravity/skills/complete-task/SKILL.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/antigravity/skills/mission-workflow/SKILL.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/antigravity/skills/next/SKILL.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/antigravity/skills/next-task/SKILL.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/claude-code/.claude-plugin/plugin.json +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/claude-code/.mcp.json +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/claude-code/README.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/claude-code/hooks/hooks.json +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/claude-code/hooks/session_start.sh +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/claude-code/scripts/statusline.sh +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/claude-code/skills/complete-task/SKILL.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/claude-code/skills/mission-workflow/SKILL.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/plugins/claude-code/skills/next-task/SKILL.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/scripts/clean_duplicates.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/scripts/migrate_tasks.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/scripts/recover_dates.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/sidecars/adk-worker/.env.example +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/sidecars/adk-worker/README.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/sidecars/adk-worker/instructions/manager.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/sidecars/adk-worker/instructions/validator.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/sidecars/adk-worker/instructions/worker.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/sidecars/adk-worker/profiles/default.json +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/sidecars/adk-worker/pyproject.toml +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/sidecars/adk-worker/uv.lock +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/sidecars/adk-worker/worker.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/skills/README.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/skills/complete-task/SKILL.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/skills/next/SKILL.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/skills/next-task/SKILL.md +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/__init__.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/__main__.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/agent.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/audit.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/config.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/discovery.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/models/__init__.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/models/issue.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/models/metric.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/plugins/__init__.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/plugins/github.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/store_registry.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/templates.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/src/taskagent/theme.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/test-dir/opencode.json +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/conftest.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/e2e/test_agent_sandboxing.sh +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_agent.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_agy_cli_worker.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_auto_commit.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_discovery.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_github_token.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_inbox.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_manager.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_manager_git.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_metrics.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_migration.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_project_host_root.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_rebind.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_remote_attach.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_remote_create.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_repo_resolve.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_store_registry.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_store_symlink.py +0 -0
- {task_agent-1.0.41 → task_agent-1.2.1}/tests/test_templates.py +0 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
name = "antigravity"
|
|
2
|
+
description = "Antigravity CLI (agy) agent workflow template running agy, claude, or opencode non-interactively"
|
|
3
|
+
|
|
4
|
+
[dotfiles]
|
|
5
|
+
".gitconfig" = { source = "inline", content = """
|
|
6
|
+
[user]
|
|
7
|
+
name = Agent
|
|
8
|
+
email = agent@localhost
|
|
9
|
+
[safe]
|
|
10
|
+
directory = *
|
|
11
|
+
""" }
|
|
12
|
+
".ssh/id_ed25519" = { source = "generate" }
|
|
@@ -1,17 +1,22 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: task-agent
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.1
|
|
4
4
|
Summary: A prioritized, file-based task queue for autonomous agentic workers
|
|
5
5
|
Author-email: Mark Stouffer <1802850+InTEGr8or@users.noreply.github.com>
|
|
6
6
|
License: MIT
|
|
7
7
|
Requires-Python: >=3.12
|
|
8
|
+
Requires-Dist: agent-cli-registry>=0.1.1
|
|
9
|
+
Requires-Dist: boto3>=1.34.0
|
|
8
10
|
Requires-Dist: githubkit>=0.15.5
|
|
11
|
+
Requires-Dist: google-genai>=0.1.0
|
|
9
12
|
Requires-Dist: mcp<2.0.0,>=1.26.0
|
|
10
13
|
Requires-Dist: pydantic>=2.10.6
|
|
11
14
|
Requires-Dist: pyperclip>=1.9.0
|
|
12
15
|
Requires-Dist: python-dotenv>=1.2.2
|
|
16
|
+
Requires-Dist: pyyaml>=6.0
|
|
13
17
|
Requires-Dist: questionary>=2.1.1
|
|
14
18
|
Requires-Dist: rich>=13.9.4
|
|
19
|
+
Requires-Dist: transitions>=0.9.2
|
|
15
20
|
Requires-Dist: verkit>=0.1.4
|
|
16
21
|
Description-Content-Type: text/markdown
|
|
17
22
|
|
|
@@ -82,6 +82,12 @@ Displays and manages the target project's version.
|
|
|
82
82
|
- `promote [major|minor|patch]`: Bumps the project version and syncs lockfiles.
|
|
83
83
|
- `tag`: Tags the current commit with the project version.
|
|
84
84
|
|
|
85
|
+
### `ta perf`
|
|
86
|
+
Manage performance monitoring logging.
|
|
87
|
+
- **Actions**: `status` (default), `on` / `enable`, `off` / `disable`, `log`
|
|
88
|
+
- **Environment Variable**: `TA_PERF_LOG=1` (or `0`)
|
|
89
|
+
- **Notification**: Displays a notice when performance logging is active.
|
|
90
|
+
|
|
85
91
|
### `ta self-up`
|
|
86
92
|
Upgrades the `task-agent` tool itself via `uv`.
|
|
87
93
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-import
|
|
3
|
+
description: >
|
|
4
|
+
Import session tasks and todo items from external AI agent task runners
|
|
5
|
+
(Antigravity CLI, Claude Code, generic task lists) into task-agent as working-task
|
|
6
|
+
documents. Use when the user asks to import tasks, sync agent session state, or
|
|
7
|
+
preserve ephemeral session todos into task-agent.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Agent Import (task-agent)
|
|
11
|
+
|
|
12
|
+
Import tasks from agent-native task runners (such as Antigravity CLI TaskManager, Claude Code Todo/Task state, or generic task lists) directly into `task-agent`.
|
|
13
|
+
|
|
14
|
+
## When to use
|
|
15
|
+
|
|
16
|
+
- User asks to import agent tasks or sync session todo lists
|
|
17
|
+
- Preserving ephemeral agent session todos into durable `task-agent` storage
|
|
18
|
+
- Session start: bringing external agent session tasks into the current `working-task`
|
|
19
|
+
|
|
20
|
+
## When not to use
|
|
21
|
+
|
|
22
|
+
- Manually adding a single new task — use `create_task` / `ta new` instead
|
|
23
|
+
- Completing a task — use `complete_task` / `ta done` instead
|
|
24
|
+
|
|
25
|
+
## Prerequisites
|
|
26
|
+
|
|
27
|
+
- `task-agent` MCP server connected, or shell access to `ta` CLI
|
|
28
|
+
- An active `working-task` set (or pass explicit `--slug <slug>`)
|
|
29
|
+
|
|
30
|
+
## Steps
|
|
31
|
+
|
|
32
|
+
1. **Identify working-task**
|
|
33
|
+
- MCP: `list_active_tasks` or specify `slug`
|
|
34
|
+
- CLI: `ta active`
|
|
35
|
+
2. **Execute Agent Import**
|
|
36
|
+
- MCP: `import_agent_tasks(slug=..., agent_type="...")`
|
|
37
|
+
- CLI: `ta agent import [--slug <slug>] [--agent <type>] [--file <path>]`
|
|
38
|
+
3. **Verify document creation**
|
|
39
|
+
- Check created `imports/{agent}_tasks.json` in working-task directory.
|
|
40
|
+
|
|
41
|
+
## Tool map
|
|
42
|
+
|
|
43
|
+
| Intent | Prefer |
|
|
44
|
+
|--------|--------|
|
|
45
|
+
| Import agent tasks | `import_agent_tasks` / `ta agent import` |
|
|
46
|
+
| Targeted import | `import_agent_tasks(slug="my-slug")` |
|
|
47
|
+
| Custom file import | `ta agent import --file <path>` |
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-import
|
|
3
|
+
description: >
|
|
4
|
+
Import session tasks and todo items from external AI agent task runners
|
|
5
|
+
(Antigravity CLI, Claude Code, generic task lists) into task-agent as working-task
|
|
6
|
+
documents. Use when the user asks to import tasks, sync agent session state, or
|
|
7
|
+
preserve ephemeral session todos into task-agent.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Agent Import (task-agent)
|
|
11
|
+
|
|
12
|
+
Import tasks from agent-native task runners (such as Antigravity CLI TaskManager, Claude Code Todo/Task state, or generic task lists) directly into `task-agent`.
|
|
13
|
+
|
|
14
|
+
## When to use
|
|
15
|
+
|
|
16
|
+
- User asks to import agent tasks or sync session todo lists
|
|
17
|
+
- Preserving ephemeral agent session todos into durable `task-agent` storage
|
|
18
|
+
- Session start: bringing external agent session tasks into the current `working-task`
|
|
19
|
+
|
|
20
|
+
## When not to use
|
|
21
|
+
|
|
22
|
+
- Manually adding a single new task — use `create_task` / `ta new` instead
|
|
23
|
+
- Completing a task — use `complete_task` / `ta done` instead
|
|
24
|
+
|
|
25
|
+
## Prerequisites
|
|
26
|
+
|
|
27
|
+
- `task-agent` MCP server connected, or shell access to `ta` CLI
|
|
28
|
+
- An active `working-task` set (or pass explicit `--slug <slug>`)
|
|
29
|
+
|
|
30
|
+
## Steps
|
|
31
|
+
|
|
32
|
+
1. **Identify working-task**
|
|
33
|
+
- MCP: `list_active_tasks` or specify `slug`
|
|
34
|
+
- CLI: `ta active`
|
|
35
|
+
2. **Execute Agent Import**
|
|
36
|
+
- MCP: `import_agent_tasks(slug=..., agent_type="...")`
|
|
37
|
+
- CLI: `ta agent import [--slug <slug>] [--agent <type>] [--file <path>]`
|
|
38
|
+
3. **Verify document creation**
|
|
39
|
+
- Check created `imports/{agent}_tasks.json` in working-task directory.
|
|
40
|
+
|
|
41
|
+
## Tool map
|
|
42
|
+
|
|
43
|
+
| Intent | Prefer |
|
|
44
|
+
|--------|--------|
|
|
45
|
+
| Import agent tasks | `import_agent_tasks` / `ta agent import` |
|
|
46
|
+
| Targeted import | `import_agent_tasks(slug="my-slug")` |
|
|
47
|
+
| Custom file import | `ta agent import --file <path>` |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "task-agent"
|
|
3
|
-
version = "1.
|
|
3
|
+
version = "1.2.1"
|
|
4
4
|
description = "A prioritized, file-based task queue for autonomous agentic workers"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -17,8 +17,14 @@ dependencies = [
|
|
|
17
17
|
"rich>=13.9.4",
|
|
18
18
|
"githubkit>=0.15.5",
|
|
19
19
|
"verkit>=0.1.4",
|
|
20
|
+
"agent-cli-registry>=0.1.1",
|
|
21
|
+
"transitions>=0.9.2",
|
|
22
|
+
"boto3>=1.34.0",
|
|
23
|
+
"google-genai>=0.1.0",
|
|
24
|
+
"pyyaml>=6.0",
|
|
20
25
|
]
|
|
21
26
|
|
|
27
|
+
|
|
22
28
|
[project.scripts]
|
|
23
29
|
ta = "taskagent.cli:main"
|
|
24
30
|
|
|
@@ -26,6 +32,9 @@ ta = "taskagent.cli:main"
|
|
|
26
32
|
requires = ["hatchling"]
|
|
27
33
|
build-backend = "hatchling.build"
|
|
28
34
|
|
|
35
|
+
[tool.hatch.metadata]
|
|
36
|
+
allow-direct-references = true
|
|
37
|
+
|
|
29
38
|
[tool.hatch.build.targets.wheel]
|
|
30
39
|
packages = ["src/taskagent"]
|
|
31
40
|
artifacts = ["sidecars/"]
|
|
@@ -40,7 +49,7 @@ dev = [
|
|
|
40
49
|
]
|
|
41
50
|
|
|
42
51
|
[tool.bumpversion]
|
|
43
|
-
current_version = "1.0.
|
|
52
|
+
current_version = "1.0.50"
|
|
44
53
|
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
|
|
45
54
|
serialize = ["{major}.{minor}.{patch}"]
|
|
46
55
|
search = "version = \"{current_version}\""
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-import
|
|
3
|
+
description: >
|
|
4
|
+
Import session tasks and todo items from external AI agent task runners
|
|
5
|
+
(Antigravity CLI, Claude Code, generic task lists) into task-agent as working-task
|
|
6
|
+
documents. Use when the user asks to import tasks, sync agent session state, or
|
|
7
|
+
preserve ephemeral session todos into task-agent.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Agent Import (task-agent)
|
|
11
|
+
|
|
12
|
+
Import tasks from agent-native task runners (such as Antigravity CLI TaskManager, Claude Code Todo/Task state, or generic task lists) directly into `task-agent`.
|
|
13
|
+
|
|
14
|
+
## When to use
|
|
15
|
+
|
|
16
|
+
- User asks to import agent tasks or sync session todo lists
|
|
17
|
+
- Preserving ephemeral agent session todos into durable `task-agent` storage
|
|
18
|
+
- Session start: bringing external agent session tasks into the current `working-task`
|
|
19
|
+
|
|
20
|
+
## When not to use
|
|
21
|
+
|
|
22
|
+
- Manually adding a single new task — use `create_task` / `ta new` instead
|
|
23
|
+
- Completing a task — use `complete_task` / `ta done` instead
|
|
24
|
+
|
|
25
|
+
## Prerequisites
|
|
26
|
+
|
|
27
|
+
- `task-agent` MCP server connected, or shell access to `ta` CLI
|
|
28
|
+
- An active `working-task` set (or pass explicit `--slug <slug>`)
|
|
29
|
+
|
|
30
|
+
## Steps
|
|
31
|
+
|
|
32
|
+
1. **Identify working-task**
|
|
33
|
+
- MCP: `list_active_tasks` or specify `slug`
|
|
34
|
+
- CLI: `ta active`
|
|
35
|
+
2. **Execute Agent Import**
|
|
36
|
+
- MCP: `import_agent_tasks(slug=..., agent_type="...")`
|
|
37
|
+
- CLI: `ta agent import [--slug <slug>] [--agent <type>] [--file <path>]`
|
|
38
|
+
3. **Verify document creation**
|
|
39
|
+
- Check created `imports/{agent}_tasks.json` in working-task directory.
|
|
40
|
+
|
|
41
|
+
## Tool map
|
|
42
|
+
|
|
43
|
+
| Intent | Prefer |
|
|
44
|
+
|--------|--------|
|
|
45
|
+
| Import agent tasks | `import_agent_tasks` / `ta agent import` |
|
|
46
|
+
| Targeted import | `import_agent_tasks(slug="my-slug")` |
|
|
47
|
+
| Custom file import | `ta agent import --file <path>` |
|
|
@@ -64,6 +64,12 @@ orient (strategy + active + next)
|
|
|
64
64
|
- Follow **complete-task** skill
|
|
65
65
|
- Report model/tokens/harness when available (cost optimization)
|
|
66
66
|
|
|
67
|
+
### Inter-Agent Inbox Messaging & Watching
|
|
68
|
+
|
|
69
|
+
- **Cross-Repo Messaging**: Send messages to target agent stores via `send_inbox_message(to_repo="target", body="...")` or `ta inbox send --repo target`.
|
|
70
|
+
- **Zero-CPU Inotify Watch**: Use `watch_inbox_mcp` or `ta inbox watch` to block with zero CPU overhead until a message arrives, triggering instant reactive wakeups for collaborative agent workflows.
|
|
71
|
+
- **Acknowledge Receipts**: Always acknowledge processed messages via `ack_inbox(message_id=...)` or `ta inbox ack <id>`.
|
|
72
|
+
|
|
67
73
|
## Anti-patterns
|
|
68
74
|
|
|
69
75
|
| Avoid | Prefer |
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"""Agent CLI Detection Registry for Task Agent.
|
|
2
|
+
|
|
3
|
+
Re-exports core agent definitions from the standalone `agent_registry` package
|
|
4
|
+
while maintaining task-agent specific user plugin configuration helpers.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import json
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import List, Optional
|
|
10
|
+
|
|
11
|
+
from agent_registry import (
|
|
12
|
+
AgentCLIInfo,
|
|
13
|
+
DiscoveredChat,
|
|
14
|
+
discover_agent_chats,
|
|
15
|
+
get_agent_cli_registry,
|
|
16
|
+
inspect_agent_cli,
|
|
17
|
+
inspect_all_agent_clis,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
__all__ = [
|
|
21
|
+
"AgentCLIInfo",
|
|
22
|
+
"DiscoveredChat",
|
|
23
|
+
"get_agent_cli_registry",
|
|
24
|
+
"inspect_agent_cli",
|
|
25
|
+
"inspect_all_agent_clis",
|
|
26
|
+
"discover_agent_chats",
|
|
27
|
+
"get_disabled_agent_plugins",
|
|
28
|
+
"set_agent_plugin_enabled",
|
|
29
|
+
"is_agent_plugin_enabled",
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def get_disabled_agent_plugins() -> List[str]:
|
|
34
|
+
"""Load list of explicitly disabled agent plugins from task-agent user config."""
|
|
35
|
+
config_file = Path.home() / ".config" / "task-agent" / "config.json"
|
|
36
|
+
if config_file.is_file():
|
|
37
|
+
try:
|
|
38
|
+
data = json.loads(config_file.read_text(encoding="utf-8"))
|
|
39
|
+
disabled = data.get("plugins", {}).get("disabled_agents", [])
|
|
40
|
+
if isinstance(disabled, list):
|
|
41
|
+
return [str(item) for item in disabled]
|
|
42
|
+
except Exception:
|
|
43
|
+
pass
|
|
44
|
+
return []
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def set_agent_plugin_enabled(agent_id: str, enabled: bool) -> None:
|
|
48
|
+
"""Enable or disable a specific agent plugin in task-agent user config."""
|
|
49
|
+
config_dir = Path.home() / ".config" / "task-agent"
|
|
50
|
+
config_dir.mkdir(parents=True, exist_ok=True)
|
|
51
|
+
config_file = config_dir / "config.json"
|
|
52
|
+
|
|
53
|
+
data: dict = {}
|
|
54
|
+
if config_file.is_file():
|
|
55
|
+
try:
|
|
56
|
+
data = json.loads(config_file.read_text(encoding="utf-8"))
|
|
57
|
+
except Exception:
|
|
58
|
+
data = {}
|
|
59
|
+
|
|
60
|
+
plugins_cfg = data.setdefault("plugins", {})
|
|
61
|
+
disabled = plugins_cfg.setdefault("disabled_agents", [])
|
|
62
|
+
|
|
63
|
+
if enabled and agent_id in disabled:
|
|
64
|
+
disabled.remove(agent_id)
|
|
65
|
+
elif not enabled and agent_id not in disabled:
|
|
66
|
+
disabled.append(agent_id)
|
|
67
|
+
|
|
68
|
+
config_file.write_text(json.dumps(data, indent=2), encoding="utf-8")
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def is_agent_plugin_enabled(
|
|
72
|
+
agent_id: str, disabled_list: Optional[List[str]] = None
|
|
73
|
+
) -> bool:
|
|
74
|
+
"""Check if an agent plugin is enabled (enabled by default unless explicitly disabled)."""
|
|
75
|
+
if disabled_list is None:
|
|
76
|
+
disabled_list = get_disabled_agent_plugins()
|
|
77
|
+
return agent_id not in disabled_list
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""Chat archival module for task-agent."""
|
|
2
|
+
|
|
3
|
+
from taskagent.chat.config import (
|
|
4
|
+
ChatConfig,
|
|
5
|
+
RetentionConfig,
|
|
6
|
+
S3Config,
|
|
7
|
+
SummarizationConfig,
|
|
8
|
+
load_chat_config,
|
|
9
|
+
)
|
|
10
|
+
from taskagent.chat.discovery import (
|
|
11
|
+
DiscoveredChat,
|
|
12
|
+
discover_agent_chats,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
__all__ = [
|
|
16
|
+
"ChatConfig",
|
|
17
|
+
"DiscoveredChat",
|
|
18
|
+
"RetentionConfig",
|
|
19
|
+
"S3Config",
|
|
20
|
+
"SummarizationConfig",
|
|
21
|
+
"discover_agent_chats",
|
|
22
|
+
"load_chat_config",
|
|
23
|
+
]
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"""Configuration schema and loader for chat archiver."""
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class S3Config(BaseModel):
|
|
10
|
+
"""S3 bucket and prefix configuration for chat archives."""
|
|
11
|
+
|
|
12
|
+
bucket: str = Field(default="chatarch", description="AWS S3 bucket name")
|
|
13
|
+
prefix: str = Field(default="chats/", description="S3 object key prefix")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class RetentionConfig(BaseModel):
|
|
17
|
+
"""Chat retention policy configuration."""
|
|
18
|
+
|
|
19
|
+
days: int = Field(default=20, description="Retention threshold in days")
|
|
20
|
+
keep_count: int = Field(
|
|
21
|
+
default=5,
|
|
22
|
+
alias="keep_recent",
|
|
23
|
+
description="Number of recent chats to keep per workspace",
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
model_config = {
|
|
27
|
+
"populate_by_name": True,
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class SummarizationConfig(BaseModel):
|
|
32
|
+
"""Summarization API configuration."""
|
|
33
|
+
|
|
34
|
+
model: str = Field(
|
|
35
|
+
default="gemini-2.5-flash",
|
|
36
|
+
description="Gemini model used for chat summarization",
|
|
37
|
+
)
|
|
38
|
+
delay: float = Field(
|
|
39
|
+
default=20.0,
|
|
40
|
+
description="Delay in seconds between API calls",
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class ChatConfig(BaseModel):
|
|
45
|
+
"""Complete chat archiver configuration settings."""
|
|
46
|
+
|
|
47
|
+
s3: S3Config = Field(default_factory=S3Config)
|
|
48
|
+
retention: RetentionConfig = Field(default_factory=RetentionConfig)
|
|
49
|
+
summarization: SummarizationConfig = Field(default_factory=SummarizationConfig)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def load_chat_config(config_path: Path | None = None) -> ChatConfig:
|
|
53
|
+
"""Load and parse chat archiver configuration from ~/.config/task-agent/config.json or custom path.
|
|
54
|
+
|
|
55
|
+
Falls back to sensible defaults if the file does not exist, is invalid, or section is omitted.
|
|
56
|
+
"""
|
|
57
|
+
import json
|
|
58
|
+
|
|
59
|
+
if config_path is None:
|
|
60
|
+
config_path = Path.home() / ".config" / "task-agent" / "config.json"
|
|
61
|
+
|
|
62
|
+
if not config_path.is_file():
|
|
63
|
+
return ChatConfig()
|
|
64
|
+
|
|
65
|
+
try:
|
|
66
|
+
data: Any = json.loads(config_path.read_text(encoding="utf-8"))
|
|
67
|
+
except Exception:
|
|
68
|
+
return ChatConfig()
|
|
69
|
+
|
|
70
|
+
if not isinstance(data, dict):
|
|
71
|
+
return ChatConfig()
|
|
72
|
+
|
|
73
|
+
# Support nested 'chat' or 'chat_archiver' section
|
|
74
|
+
chat_data = data.get("chat") or data.get("chat_archiver")
|
|
75
|
+
if isinstance(chat_data, dict):
|
|
76
|
+
try:
|
|
77
|
+
return ChatConfig.model_validate(chat_data)
|
|
78
|
+
except Exception:
|
|
79
|
+
return ChatConfig()
|
|
80
|
+
|
|
81
|
+
# Check if s3, retention, or summarization are in root data
|
|
82
|
+
if any(key in data for key in ("s3", "retention", "summarization")):
|
|
83
|
+
try:
|
|
84
|
+
return ChatConfig.model_validate(data)
|
|
85
|
+
except Exception:
|
|
86
|
+
return ChatConfig()
|
|
87
|
+
|
|
88
|
+
return ChatConfig()
|