pilot-workers 0.5.0__tar.gz → 0.5.2__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.
- {pilot_workers-0.5.0/src/pilot_workers.egg-info → pilot_workers-0.5.2}/PKG-INFO +22 -17
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/README.md +21 -16
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/pyproject.toml +1 -1
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/cli/dispatch.py +295 -60
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/cli/fanout.py +98 -10
- pilot_workers-0.5.2/src/pilot_workers/cli/install.py +1488 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/cli/main.py +21 -12
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/cli/run.py +54 -6
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/cli/status.py +129 -21
- pilot_workers-0.5.2/src/pilot_workers/credentials.py +113 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/data/providers/README.md +5 -2
- pilot_workers-0.5.2/src/pilot_workers/data/templates/code.md +25 -0
- pilot_workers-0.5.2/src/pilot_workers/data/templates/explore.md +9 -0
- pilot_workers-0.5.2/src/pilot_workers/data/templates/review.md +17 -0
- pilot_workers-0.5.2/src/pilot_workers/data/templates/test.md +9 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/fmt_events.py +47 -17
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/integrations/claude-host/skills/pilot-workers/SKILL.md +106 -48
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/integrations/codex-host/skills/pilot-workers/SKILL.md +89 -41
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/maintain.py +130 -20
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/policy.py +142 -12
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/prompts/common.md +23 -2
- pilot_workers-0.5.2/src/pilot_workers/prompts/review.md +108 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/providers.py +66 -9
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/runners/base.py +68 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/runners/opencode_runner.py +152 -24
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/runtime.py +322 -22
- pilot_workers-0.5.2/src/pilot_workers/taskguard.py +184 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2/src/pilot_workers.egg-info}/PKG-INFO +22 -17
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers.egg-info/SOURCES.txt +16 -1
- pilot_workers-0.5.2/tests/test_child_env_hygiene.py +82 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/tests/test_cli_main.py +37 -1
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/tests/test_dispatch.py +159 -4
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/tests/test_fanout.py +91 -1
- pilot_workers-0.5.2/tests/test_fmt_events.py +71 -0
- pilot_workers-0.5.2/tests/test_global_key.py +477 -0
- pilot_workers-0.5.2/tests/test_install.py +1143 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/tests/test_integrations.py +12 -3
- pilot_workers-0.5.2/tests/test_isolation_guard.py +114 -0
- pilot_workers-0.5.2/tests/test_lock_takeover.py +148 -0
- pilot_workers-0.5.2/tests/test_maintain.py +897 -0
- pilot_workers-0.5.2/tests/test_manifest_locking.py +170 -0
- pilot_workers-0.5.2/tests/test_policy.py +657 -0
- pilot_workers-0.5.2/tests/test_preflight.py +267 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/tests/test_providers.py +109 -0
- pilot_workers-0.5.2/tests/test_result_extract.py +420 -0
- pilot_workers-0.5.2/tests/test_runner_seams.py +209 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/tests/test_sandbox.py +211 -0
- pilot_workers-0.5.2/tests/test_self_description.py +318 -0
- pilot_workers-0.5.2/tests/test_skill_generation.py +1179 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/tests/test_status.py +3 -3
- pilot_workers-0.5.2/tests/test_status_config.py +276 -0
- pilot_workers-0.5.2/tests/test_task_guards.py +690 -0
- pilot_workers-0.5.2/tests/test_version_cache.py +364 -0
- pilot_workers-0.5.2/tests/test_worker_prompts.py +275 -0
- pilot_workers-0.5.0/src/pilot_workers/cli/install.py +0 -458
- pilot_workers-0.5.0/src/pilot_workers/credentials.py +0 -88
- pilot_workers-0.5.0/src/pilot_workers/data/templates/code.md +0 -28
- pilot_workers-0.5.0/src/pilot_workers/data/templates/explore.md +0 -17
- pilot_workers-0.5.0/src/pilot_workers/data/templates/review.md +0 -18
- pilot_workers-0.5.0/src/pilot_workers/data/templates/test.md +0 -17
- pilot_workers-0.5.0/src/pilot_workers/prompts/review.md +0 -17
- pilot_workers-0.5.0/tests/test_install.py +0 -420
- pilot_workers-0.5.0/tests/test_maintain.py +0 -277
- pilot_workers-0.5.0/tests/test_policy.py +0 -253
- pilot_workers-0.5.0/tests/test_result_extract.py +0 -163
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/LICENSE +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/setup.cfg +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/__init__.py +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/__main__.py +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/cli/__init__.py +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/data/permissions/README.md +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/data/permissions/relaxed.yaml +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/data/permissions/strict.yaml +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/data/providers/ds.yaml +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/data/providers/glm.yaml +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/data/providers/kimi-k3.yaml +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/integrations/README.md +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/prompts/code.md +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/prompts/explore.md +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/prompts/test.md +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/runners/__init__.py +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers/scripts/install_runtime.sh +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers.egg-info/dependency_links.txt +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers.egg-info/entry_points.txt +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers.egg-info/requires.txt +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/src/pilot_workers.egg-info/top_level.txt +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/tests/test_credentials.py +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/tests/test_fanout_watchdog.py +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/tests/test_opencode_runner.py +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/tests/test_render_unified.py +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/tests/test_run_cli.py +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/tests/test_runner_cache.py +0 -0
- {pilot_workers-0.5.0 → pilot_workers-0.5.2}/tests/test_runtime.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pilot-workers
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.2
|
|
4
4
|
Summary: Dispatch bounded tasks to isolated LLM workers (GLM, Kimi, and more)
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -26,7 +26,7 @@ Dispatch bounded tasks to isolated LLM workers. Your main AI agent (Claude, Code
|
|
|
26
26
|
- **Pluggable runners**: the runner adapter layer (`Runner` ABC) abstracts engine-specific details. Currently ships with OpenCode; designed for future alternatives.
|
|
27
27
|
- **Observable**: two-line JSON contract (`started` + structured `verdict` carrying `parse_state`, a per-mode `result`, and `final_text_path`) for AI planners; human-readable `latest.log` for `tail -f`.
|
|
28
28
|
- **Per-run sandboxes**: every dispatch runs inside its own isolated XDG tree (`providers/<key>/runs/<run_id>/`) with a zero-copy symlink to the canonical credential and a shared per-provider cache; resume (`--session` + `--run-id`) reuses the original sandbox.
|
|
29
|
-
- **Host-level playbook**: one `pilot-workers` playbook skill per host (Claude Code or Codex).
|
|
29
|
+
- **Host-level playbook**: one `pilot-workers` playbook skill per host (Claude Code or Codex). A host's skill exists only where at least one provider is configured for it, and its worker table is generated from that host's own configuration — a host never learns about a provider you did not give it.
|
|
30
30
|
|
|
31
31
|
## Install
|
|
32
32
|
|
|
@@ -40,14 +40,16 @@ pip install pilot-workers
|
|
|
40
40
|
# 1. Install the worker runtime
|
|
41
41
|
pilot-workers install runner opencode
|
|
42
42
|
|
|
43
|
-
# 2.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
pilot-workers
|
|
43
|
+
# 2. Make a provider available to a host, and set its API key while you are
|
|
44
|
+
# there (interactive, key never displayed). The key belongs to the PROVIDER,
|
|
45
|
+
# so it is configured once and every host uses it.
|
|
46
|
+
pilot-workers install glm on claude --global-key
|
|
47
|
+
pilot-workers install kimi-k3 on claude for code --global-key # ...and route code -> kimi-k3
|
|
48
|
+
pilot-workers install ds on codex for explore --global-key
|
|
47
49
|
|
|
48
|
-
# 3.
|
|
49
|
-
pilot-workers install claude #
|
|
50
|
-
pilot-workers install codex
|
|
50
|
+
# 3. (optional) Refresh a host's deployed skill in place
|
|
51
|
+
pilot-workers install claude # idempotent sync; deploys nothing if no provider is configured
|
|
52
|
+
pilot-workers install codex
|
|
51
53
|
pilot-workers install all # both hosts
|
|
52
54
|
|
|
53
55
|
# 4. Check everything is ready
|
|
@@ -72,16 +74,19 @@ pilot-workers <subcommand> [args]
|
|
|
72
74
|
dispatch Deterministic wrapper around run (two-line JSON: started + verdict).
|
|
73
75
|
fanout Dispatch several jobs concurrently; stdout = one JSON array of verdicts.
|
|
74
76
|
template Print the task template for a mode (code|explore|test|review).
|
|
75
|
-
install
|
|
76
|
-
install <host
|
|
77
|
+
install Configure a worker for a host, or deploy/refresh a host's skill.
|
|
78
|
+
install <provider> on <host> [for <mode>] [--global-key]
|
|
79
|
+
install <host|all> [--target <dir>]
|
|
77
80
|
install runner <name>
|
|
78
|
-
uninstall Remove host
|
|
81
|
+
uninstall Remove a worker from a host, an assignment, a key, or a whole host.
|
|
82
|
+
uninstall <provider> on <host>
|
|
83
|
+
uninstall for <mode> on <host>
|
|
84
|
+
uninstall key <provider>
|
|
79
85
|
uninstall <host|all>
|
|
80
86
|
uninstall runner <name>
|
|
81
87
|
status Show provider credentials, host installs, and runner state.
|
|
82
88
|
status [--json]
|
|
83
89
|
status <host>
|
|
84
|
-
credentials Configure isolated worker credentials.
|
|
85
90
|
maintain Worker log, run-sandbox, and worktree lifecycle tools.
|
|
86
91
|
maintain logs --older-than-days N
|
|
87
92
|
maintain runs --older-than-days N [--keep M]
|
|
@@ -108,9 +113,9 @@ output_tokens: 8192
|
|
|
108
113
|
# notes: ... # optional, surfaced by `pilot-workers status`
|
|
109
114
|
```
|
|
110
115
|
|
|
111
|
-
Then `pilot-workers
|
|
116
|
+
Then `pilot-workers install my-model on claude --global-key` (or `codex`) to set its API key and deploy/refresh that host's playbook skill.
|
|
112
117
|
|
|
113
|
-
Reserved keys (cannot be used as provider key): `runner`, `all`, `on`, `claude`, `codex`.
|
|
118
|
+
Reserved keys (cannot be used as provider key): `runner`, `all`, `on`, `for`, `key`, `claude`, `codex`.
|
|
114
119
|
|
|
115
120
|
## Host integration
|
|
116
121
|
|
|
@@ -119,7 +124,7 @@ The **host** is whatever AI agent acts as the planner. Each host ships ONE `pilo
|
|
|
119
124
|
- **`claude-host/skills/pilot-workers/`**: playbook skill for Claude Code (installed to `~/.claude/skills/pilot-workers/`)
|
|
120
125
|
- **`codex-host/skills/pilot-workers/`**: the same playbook skill for Codex (installed to `$CODEX_HOME/skills/pilot-workers/`)
|
|
121
126
|
|
|
122
|
-
`pilot-workers install <host>` copies the skill into the host's skill directory;
|
|
127
|
+
`pilot-workers install <provider> on <host>` copies the skill into the host's skill directory and regenerates its worker table from that host's configuration; the doctrine itself carries no engine-specific knowledge. Removing the last provider deletes the skill, so a host with nothing configured has none and the planner does the work itself. (The v0.4.0 12-agents + 8-commands matrix is gone.)
|
|
123
128
|
|
|
124
129
|
Adding a new host: create `integrations/<name>-host/skills/pilot-workers/`, put whatever config your host needs, point it at `pilot-workers dispatch`. See `integrations/README.md`.
|
|
125
130
|
|
|
@@ -131,7 +136,7 @@ See [CLAUDE.md](CLAUDE.md) for the current architecture, module reference, and c
|
|
|
131
136
|
|
|
132
137
|
```bash
|
|
133
138
|
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
|
|
134
|
-
.venv/bin/pytest #
|
|
139
|
+
.venv/bin/pytest # the whole suite, offline
|
|
135
140
|
```
|
|
136
141
|
|
|
137
142
|
## License
|
|
@@ -11,7 +11,7 @@ Dispatch bounded tasks to isolated LLM workers. Your main AI agent (Claude, Code
|
|
|
11
11
|
- **Pluggable runners**: the runner adapter layer (`Runner` ABC) abstracts engine-specific details. Currently ships with OpenCode; designed for future alternatives.
|
|
12
12
|
- **Observable**: two-line JSON contract (`started` + structured `verdict` carrying `parse_state`, a per-mode `result`, and `final_text_path`) for AI planners; human-readable `latest.log` for `tail -f`.
|
|
13
13
|
- **Per-run sandboxes**: every dispatch runs inside its own isolated XDG tree (`providers/<key>/runs/<run_id>/`) with a zero-copy symlink to the canonical credential and a shared per-provider cache; resume (`--session` + `--run-id`) reuses the original sandbox.
|
|
14
|
-
- **Host-level playbook**: one `pilot-workers` playbook skill per host (Claude Code or Codex).
|
|
14
|
+
- **Host-level playbook**: one `pilot-workers` playbook skill per host (Claude Code or Codex). A host's skill exists only where at least one provider is configured for it, and its worker table is generated from that host's own configuration — a host never learns about a provider you did not give it.
|
|
15
15
|
|
|
16
16
|
## Install
|
|
17
17
|
|
|
@@ -25,14 +25,16 @@ pip install pilot-workers
|
|
|
25
25
|
# 1. Install the worker runtime
|
|
26
26
|
pilot-workers install runner opencode
|
|
27
27
|
|
|
28
|
-
# 2.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
pilot-workers
|
|
28
|
+
# 2. Make a provider available to a host, and set its API key while you are
|
|
29
|
+
# there (interactive, key never displayed). The key belongs to the PROVIDER,
|
|
30
|
+
# so it is configured once and every host uses it.
|
|
31
|
+
pilot-workers install glm on claude --global-key
|
|
32
|
+
pilot-workers install kimi-k3 on claude for code --global-key # ...and route code -> kimi-k3
|
|
33
|
+
pilot-workers install ds on codex for explore --global-key
|
|
32
34
|
|
|
33
|
-
# 3.
|
|
34
|
-
pilot-workers install claude #
|
|
35
|
-
pilot-workers install codex
|
|
35
|
+
# 3. (optional) Refresh a host's deployed skill in place
|
|
36
|
+
pilot-workers install claude # idempotent sync; deploys nothing if no provider is configured
|
|
37
|
+
pilot-workers install codex
|
|
36
38
|
pilot-workers install all # both hosts
|
|
37
39
|
|
|
38
40
|
# 4. Check everything is ready
|
|
@@ -57,16 +59,19 @@ pilot-workers <subcommand> [args]
|
|
|
57
59
|
dispatch Deterministic wrapper around run (two-line JSON: started + verdict).
|
|
58
60
|
fanout Dispatch several jobs concurrently; stdout = one JSON array of verdicts.
|
|
59
61
|
template Print the task template for a mode (code|explore|test|review).
|
|
60
|
-
install
|
|
61
|
-
install <host
|
|
62
|
+
install Configure a worker for a host, or deploy/refresh a host's skill.
|
|
63
|
+
install <provider> on <host> [for <mode>] [--global-key]
|
|
64
|
+
install <host|all> [--target <dir>]
|
|
62
65
|
install runner <name>
|
|
63
|
-
uninstall Remove host
|
|
66
|
+
uninstall Remove a worker from a host, an assignment, a key, or a whole host.
|
|
67
|
+
uninstall <provider> on <host>
|
|
68
|
+
uninstall for <mode> on <host>
|
|
69
|
+
uninstall key <provider>
|
|
64
70
|
uninstall <host|all>
|
|
65
71
|
uninstall runner <name>
|
|
66
72
|
status Show provider credentials, host installs, and runner state.
|
|
67
73
|
status [--json]
|
|
68
74
|
status <host>
|
|
69
|
-
credentials Configure isolated worker credentials.
|
|
70
75
|
maintain Worker log, run-sandbox, and worktree lifecycle tools.
|
|
71
76
|
maintain logs --older-than-days N
|
|
72
77
|
maintain runs --older-than-days N [--keep M]
|
|
@@ -93,9 +98,9 @@ output_tokens: 8192
|
|
|
93
98
|
# notes: ... # optional, surfaced by `pilot-workers status`
|
|
94
99
|
```
|
|
95
100
|
|
|
96
|
-
Then `pilot-workers
|
|
101
|
+
Then `pilot-workers install my-model on claude --global-key` (or `codex`) to set its API key and deploy/refresh that host's playbook skill.
|
|
97
102
|
|
|
98
|
-
Reserved keys (cannot be used as provider key): `runner`, `all`, `on`, `claude`, `codex`.
|
|
103
|
+
Reserved keys (cannot be used as provider key): `runner`, `all`, `on`, `for`, `key`, `claude`, `codex`.
|
|
99
104
|
|
|
100
105
|
## Host integration
|
|
101
106
|
|
|
@@ -104,7 +109,7 @@ The **host** is whatever AI agent acts as the planner. Each host ships ONE `pilo
|
|
|
104
109
|
- **`claude-host/skills/pilot-workers/`**: playbook skill for Claude Code (installed to `~/.claude/skills/pilot-workers/`)
|
|
105
110
|
- **`codex-host/skills/pilot-workers/`**: the same playbook skill for Codex (installed to `$CODEX_HOME/skills/pilot-workers/`)
|
|
106
111
|
|
|
107
|
-
`pilot-workers install <host>` copies the skill into the host's skill directory;
|
|
112
|
+
`pilot-workers install <provider> on <host>` copies the skill into the host's skill directory and regenerates its worker table from that host's configuration; the doctrine itself carries no engine-specific knowledge. Removing the last provider deletes the skill, so a host with nothing configured has none and the planner does the work itself. (The v0.4.0 12-agents + 8-commands matrix is gone.)
|
|
108
113
|
|
|
109
114
|
Adding a new host: create `integrations/<name>-host/skills/pilot-workers/`, put whatever config your host needs, point it at `pilot-workers dispatch`. See `integrations/README.md`.
|
|
110
115
|
|
|
@@ -116,7 +121,7 @@ See [CLAUDE.md](CLAUDE.md) for the current architecture, module reference, and c
|
|
|
116
121
|
|
|
117
122
|
```bash
|
|
118
123
|
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
|
|
119
|
-
.venv/bin/pytest #
|
|
124
|
+
.venv/bin/pytest # the whole suite, offline
|
|
120
125
|
```
|
|
121
126
|
|
|
122
127
|
## License
|