worker: separate subworkers from workspace workers

This commit is contained in:
2026-08-05 03:36:59 +09:00
parent 50726e4cf3
commit ba009c0a20
35 changed files with 747 additions and 261 deletions
+2 -1
View File
@@ -25,7 +25,8 @@ feature = {
task = { enabled = true; };
memory = { enabled = true; };
web = { enabled = true; };
workers = { enabled = true; };
sub_worker = { enabled = true; };
worker = { enabled = false; };
objective = { enabled = true; };
ticket = { enabled = true; authoring = true; thread = true; };
};
+2 -1
View File
@@ -7,7 +7,8 @@ import "./base.dcdl" // {
task = { enabled = true; };
memory = { enabled = true; };
web = { enabled = true; };
workers = { enabled = false; };
sub_worker = { enabled = false; };
worker = { enabled = false; };
ticket = { enabled = true; thread = true; };
};
}
+2 -1
View File
@@ -7,7 +7,8 @@ import "./base.dcdl" // {
task = { enabled = true; };
memory = { enabled = true; };
web = { enabled = true; };
workers = { enabled = true; };
sub_worker = { enabled = true; };
worker = { enabled = false; };
ticket = { enabled = true; authoring = true; thread = true; };
};
}
+2 -1
View File
@@ -7,7 +7,8 @@ import "./base.dcdl" // {
task = { enabled = true; };
memory = { enabled = true; };
web = { enabled = true; };
workers = { enabled = false; };
sub_worker = { enabled = false; };
worker = { enabled = false; };
ticket = { enabled = true; authoring = true; thread = true; intake = true; };
};
}
+2 -1
View File
@@ -7,7 +7,8 @@ import "./base.dcdl" // {
task = { enabled = false; };
memory = { enabled = true; staging = true; };
web = { enabled = false; };
workers = { enabled = false; };
sub_worker = { enabled = false; };
worker = { enabled = false; };
objective = { enabled = false; };
ticket = { enabled = false; thread = false; };
};
+2 -1
View File
@@ -7,7 +7,8 @@ import "./base.dcdl" // {
task = { enabled = true; };
memory = { enabled = true; };
web = { enabled = true; };
workers = { enabled = false; };
sub_worker = { enabled = false; };
worker = { enabled = true; };
manage_workdir = { enabled = true; };
ticket = { enabled = true; thread = true; orchestration_control = true; };
};
+2 -1
View File
@@ -7,7 +7,8 @@ import "./base.dcdl" // {
task = { enabled = true; };
memory = { enabled = true; };
web = { enabled = true; };
workers = { enabled = false; };
sub_worker = { enabled = false; };
worker = { enabled = false; };
ticket = { enabled = true; thread = true; };
};
}
@@ -1,11 +1,11 @@
---
## Worker orchestration
## SubWorker orchestration
When Worker-management tools are available, spawned Worker notifications are background signals for the parent to handle at a natural stopping point. Do not ignore routine follow-up, but do not interrupt the current user request unnecessarily.
When SubWorker-management tools are available, SubWorker notifications are background signals for the parent Worker to handle at a natural stopping point. Do not ignore routine follow-up, but do not interrupt the current user request unnecessarily.
The parent does not need to keep a turn open or call tools solely to wait for a notification. Do not use `sleep` or polling loops just to wait for Worker output; if there is no useful immediate work, return control and handle the child when notified or when the user next asks.
The parent Worker does not need to keep a turn open or call tools solely to wait for a notification. Do not use `sleep` or polling loops just to wait for SubWorker output; if there is no useful immediate work, return control and handle the SubWorker when notified or when the user next asks.
Before treating delegated work as complete, read the child output and inspect concrete evidence such as worktree state, diff, and test results. Notifications are hints, not proof of completion.
Before treating delegated SubWorker work as complete, read the SubWorker output and inspect concrete evidence such as worktree state, diff, and test results. Notifications are hints, not proof of completion.
Peer Workers made visible by reciprocal metadata registration are not spawned children. Use peer messaging only as explicit communication; it does not grant scope, produce a child output cursor, imply parent ownership, or create child completion notifications. Peer sends require a live peer and do not auto-restore stopped peers.
+3 -3
View File
@@ -53,12 +53,12 @@ worker_orchestration_guidance_section = "{% include \"$yoi/common/worker-orchest
ticket_event_companion_notice = "{% include \"$yoi/worker/ticket_event_companion_notice\" %}"
spawn_worker_tool_description = """\
Spawn a new Worker process to work on a delegated task. The spawner's write scope is reduced by the scope passed here; the spawned Worker receives its own socket and starts running `task` immediately. The spawned Worker outlives the spawner's current turn and can be contacted again through its socket path.
sub_worker_spawn_tool_description = """\
Spawn a new SubWorker process to split context for a delegated task. The parent Worker's write scope is reduced by the scope passed here; the SubWorker receives its own socket and starts running `task` immediately. The SubWorker outlives the parent Worker's current turn and can be contacted again through its socket path.
Optional `cwd`: when provided, it is the child process/tool default working directory only. It must be an absolute existing directory covered by the child's delegated readable scope, and it does not change workspace/Profile/memory/Ticket roots or grant authority.
Profile selection: `profile` may be omitted or set to `default` to use the effective child default profile, set to `inherit` to derive reusable child configuration from this Worker, or set to one of the registry selectors below. Raw/path profile selectors are not accepted by SpawnWorker. `scope` is always the only delegated filesystem capability; profile scope is replaced by the explicit SpawnWorker scope.
Profile selection: `profile` may be omitted or set to `default` to use the effective child default profile, set to `inherit` to derive reusable child configuration from this Worker, or set to one of the registry selectors below. Raw/path profile selectors are not accepted by SubWorkerSpawn. `scope` is always the only delegated filesystem capability; profile scope is replaced by the explicit SubWorkerSpawn scope.
Default profile: {{ default_profile }}
Special selector: inherit — derive reusable model/worker/tool policy from the spawner while replacing worker.name and scope.