taskchef 5.12.0 → 6.1.0

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taskchef",
3
- "version": "5.12.0",
3
+ "version": "6.1.0",
4
4
  "description": "Dispatch work from a data-only workspace to visible Codex project tasks.",
5
5
  "author": {
6
6
  "name": "Favo Yang",
@@ -33,6 +33,9 @@
33
33
  "$taskchef-delegate Dispatch this request to the right project.",
34
34
  "$taskchef-report Report on work in the TaskChef task history."
35
35
  ],
36
- "brandColor": "#D97706"
36
+ "brandColor": "#D97706",
37
+ "composerIcon": "./assets/taskchef.svg",
38
+ "logo": "./assets/taskchef.svg",
39
+ "logoDark": "./assets/taskchef-dark.svg"
37
40
  }
38
41
  }
package/BACKLOG.md CHANGED
@@ -40,18 +40,9 @@ clear data model before implementation.
40
40
  - Consider multiple executor threads for one logical assignment if a real
41
41
  workflow requires it.
42
42
 
43
- ## Codex provisional thread lifecycle
44
-
45
- - Track [openai/codex#26861](https://github.com/openai/codex/issues/26861),
46
- where worktree creation can return only a provisional `clientThreadId` or
47
- `pendingWorktreeId` with no supported mapping to the durable `threadId`.
48
- - Prefer an official bounded operation such as
49
- `wait_for_thread(clientThreadId, timeoutMs) -> { status, threadId? }` or
50
- `resolve_client_thread(clientThreadId) -> { status, threadId? }`. Returning a
51
- reserved durable ID from `create_thread`, or emitting a materialization event
52
- containing it, would also close the lifecycle gap.
53
- - Replace bounded exact-marker discovery when Codex exposes one of these APIs.
54
- The initial hook intentionally never links from `session_id`, because Codex
55
- documents that subagent hooks use the parent session ID. Keep exact
56
- correlation verification unless an official contract provides equivalent
57
- guarantees.
43
+ ## Transport-authenticated executor identity
44
+
45
+ - If custom MCP later receives authenticated calling-task metadata, compare it
46
+ with the executor's `link_task` assertion.
47
+ - Keep the current local cooperative trust model until such metadata exists;
48
+ do not reintroduce parent/session identity, hooks, task search, or polling.
package/README.md CHANGED
@@ -32,8 +32,7 @@ Executors report a compact `completed`, `needs_input`, or `failed` result into
32
32
  their existing task entry. When you ask for a report, TaskChef filters old
33
33
  terminal work and checks cheap live metadata once for every selected task.
34
34
  Active or approval-waiting metadata overrides the cache immediately; idle MCP
35
- results are trusted by default, with detailed reads reserved for anomalies. It
36
- never infers completion from hook events.
35
+ results are trusted by default, with detailed reads reserved for anomalies.
37
36
 
38
37
  See [Delegation design](docs/delegation-design.md) for the illustrated workflow,
39
38
  writer boundaries, locking, trust model, freshness rules, and follow-up example.
@@ -52,11 +51,8 @@ codex plugin marketplace add favoyang/codex-plugins
52
51
  codex plugin add taskchef@favoyang-plugins
53
52
  ```
54
53
 
55
- In a new Codex task, run `/hooks`, review the TaskChef hook, and trust it. Codex
56
- skips new or changed plugin hooks until you approve their current definition,
57
- so repeat this review after an update changes the hook. TaskChef uses this hook
58
- to link the marked initial executor prompt and to provide read-only current-turn
59
- identity on later prompts in that same executor. It never writes task outcomes.
54
+ TaskChef installs without lifecycle hooks, hook trust prompts, or reapproval.
55
+ Executors link their own durable Codex task IDs through the local MCP server.
60
56
 
61
57
  ### 2. Bootstrap the dispatcher workspace
62
58
 
@@ -137,15 +133,12 @@ timestamp, and writer. There is no transition-event log.
137
133
 
138
134
  Every delegated instruction begins with a unique
139
135
  `<!-- taskchef_id=<UUID> -->` marker followed by a blank line, an
140
- executor-ownership paragraph, a result-callback paragraph, and the assignment. The
141
- valid HTML comment stays invisible in rendered Markdown.
142
- TaskChef records the marked delegation before executor creation. If creation
143
- does not return a durable thread ID, the dispatcher performs bounded checks at
144
- 10 and 30 seconds and accepts only one recently created task whose structured
145
- initial input contains the exact marker. The initial-prompt hook may wait for
146
- that verified link, but never treats its session ID as executor identity:
147
- subagent hooks can carry the parent session ID. If no unique match appears,
148
- TaskChef leaves the entry unresolved instead of risking a wrong link.
136
+ executor-ownership paragraph, a mandatory self-link paragraph, a result-callback
137
+ paragraph, and the assignment. The valid HTML comment stays invisible in
138
+ rendered Markdown. TaskChef records the marked delegation before executor
139
+ creation and returns immediately. The child calls `link_task` before substantive
140
+ work with its own durable native ID, never the parent/delegator or provisional
141
+ client ID. Failed or interrupted linking remains visibly pending and retryable.
149
142
 
150
143
  ### Ask for a live report
151
144
 
@@ -255,9 +248,8 @@ project metadata that TaskChef used when it delegated the work.
255
248
 
256
249
  ## Important boundaries
257
250
 
258
- - TaskChef is an interactive dispatcher, not a scheduler, daemon, or background
259
- worker. Its single lifecycle hook writes initial executor identity, then only
260
- provides read-only current-turn context on follow-up prompts.
251
+ - TaskChef is an interactive dispatcher, not a scheduler, daemon, hook, or
252
+ background worker. Executors self-link and report their current turn.
261
253
  - Executors are visible Codex tasks. The dispatcher does not supervise them or
262
254
  wait for them to finish.
263
255
  - TaskChef routes only to projects on the same local execution host.
@@ -346,10 +338,11 @@ validates a stable schema, derives durations and summary totals, and writes a
346
338
  timestamped result under the supplied output directory (default:
347
339
  `reports/e2e-benchmarks`). Use `validate <file>` to verify a saved result and
348
340
  `clean [directory]` to remove only prior TaskChef end-to-end result JSON files.
349
- Start from `assets/e2e-benchmark-example.json`; the writer accepts strict
350
- schema fields only and supports stopped workflows after preparation, creation,
351
- or recording failures. The writer stamps `taskchefVersion` from its own package;
352
- saved files retain that version for historical validation.
341
+ Start from `assets/e2e-benchmark-example.json`; the strict schema records the
342
+ record-before-create order, provisional client ID, executor self-link, rejected
343
+ parent identity, needs-input callback, fresh follow-up turn, final result, and
344
+ exact dashboard deep link. The writer stamps `taskchefVersion` from its own
345
+ package; saved files retain that version for historical validation.
353
346
 
354
347
  ### One-time upgrade from an older workspace
355
348
 
@@ -435,14 +428,13 @@ task lines remain readable without an eager rewrite of the JSONL history.
435
428
  `project` value is the exact configured project path:
436
429
 
437
430
  ```sh
438
- printf '%s\n' '{"id":"c0f010ff-84f2-4838-a69d-0ff1f5d721d7","project":"/workspace/payments","title":"Add retry logs","instruction":"<!-- taskchef_id=c0f010ff-84f2-4838-a69d-0ff1f5d721d7 -->\n\nThis task owns the delegated assignment. Execute it in this task; do not re-dispatch it merely because it concerns TaskChef or a configured project. Explicit requests to delegate separate work remain valid.\n\nBefore ending, call the TaskChef report_result MCP tool with completed, needs_input, or failed and a concise summary. Use needs_input only for a semantic decision or information the user must provide; a native approval prompt is live Codex state, not a TaskChef result. Do not include secrets, transcripts, or raw command output.\n\nAdd structured logs for failed retries and test them.","threadId":"019f..."}' |
431
+ printf '%s\n' '{"id":"c0f010ff-84f2-4838-a69d-0ff1f5d721d7","project":"/workspace/payments","title":"Add retry logs","instruction":"<!-- taskchef_id=c0f010ff-84f2-4838-a69d-0ff1f5d721d7 -->\n\nThis task owns the delegated assignment. Execute it in this task; do not re-dispatch it merely because it concerns TaskChef or a configured project. Explicit requests to delegate separate work remain valid.\n\nBefore any other work, read this executor's own durable Codex thread ID from the current task's CODEX_THREAD_ID environment value and call the TaskChef link_task MCP tool with that thread ID and the marked TaskChef task ID. Never use CODEX_SESSION_ID or the parent or delegator thread ID. If linking fails, CODEX_THREAD_ID is unavailable, or the tool is unavailable, report the failure visibly and retry on a later turn; do not guess an identity or continue substantive work while the task is link-pending.\n\nBefore ending, call the TaskChef report_result MCP tool with the marked task ID, this executor's self-linked thread ID, the current turn ID from an exact native read of that same thread, completed, needs_input, or failed, and a concise summary. Never reuse a prior turn ID after a follow-up. Use needs_input only for a semantic decision or information the user must provide; a native approval prompt is live Codex state, not a TaskChef result. Do not include secrets, transcripts, or raw command output.\n\nAdd structured logs for failed retries and test them.","threadId":null}' |
439
432
  taskchef task record --json
440
433
  ```
441
434
 
442
- If a task still has `threadId: null` after bounded resolution, direct manual
443
- recovery may use the CLI operation below after verifying one exact structured
444
- marker match. The same locked atomic logic permits only the one-way transition
445
- from null to one unique thread ID:
435
+ For unresolved records created by TaskChef 5.x or older, direct manual recovery
436
+ may use the CLI operation below after verifying one exact structured marker
437
+ match. Schema 4 self-linking records reject this command:
446
438
 
447
439
  ```sh
448
440
  taskchef task resolve c0f010ff-84f2-4838-a69d-0ff1f5d721d7 \
@@ -489,13 +481,15 @@ Updated: 2026-08-12T10:08:00.000Z
489
481
  Updated by: mcp
490
482
  Task ID: c0f010ff-84f2-4838-a69d-0ff1f5d721d7
491
483
  Thread ID: 019f9d46-f42c-7482-9707-3c107bf241ee
492
- Turn ID: 019f9d47-result-turn
484
+ Turn ID: 019f9d47-f42c-7482-9707-3c107bf241ef
493
485
  Instruction:
494
486
  <!-- taskchef_id=c0f010ff-84f2-4838-a69d-0ff1f5d721d7 -->
495
487
 
496
488
  This task owns the delegated assignment. Execute it in this task; do not re-dispatch it merely because it concerns TaskChef or a configured project. Explicit requests to delegate separate work remain valid.
497
489
 
498
- Before ending, call the TaskChef report_result MCP tool with completed, needs_input, or failed and a concise summary. Use needs_input only for a semantic decision or information the user must provide; a native approval prompt is live Codex state, not a TaskChef result. Do not include secrets, transcripts, or raw command output.
490
+ Before any other work, read this executor's own durable Codex thread ID from the current task's CODEX_THREAD_ID environment value and call the TaskChef link_task MCP tool with that thread ID and the marked TaskChef task ID. Never use CODEX_SESSION_ID or the parent or delegator thread ID. If linking fails, CODEX_THREAD_ID is unavailable, or the tool is unavailable, report the failure visibly and retry on a later turn; do not guess an identity or continue substantive work while the task is link-pending.
491
+
492
+ Before ending, call the TaskChef report_result MCP tool with the marked task ID, this executor's self-linked thread ID, the current turn ID from an exact native read of that same thread, completed, needs_input, or failed, and a concise summary. Never reuse a prior turn ID after a follow-up. Use needs_input only for a semantic decision or information the user must provide; a native approval prompt is live Codex state, not a TaskChef result. Do not include secrets, transcripts, or raw command output.
499
493
 
500
494
  Add structured logs for failed payment retries and test them.
501
495
  ```
@@ -514,16 +508,12 @@ workflow, writer boundaries, and freshness rules are in
514
508
 
515
509
  ## Development and release
516
510
 
517
- This result-callback redesign changes the public
518
- `createAndRecordDelegation` contract from post-creation thread discovery to
519
- record-before-create plus hook resolution. Release it as a new major version.
520
- Library callers migrating from TaskChef 5.x should remove `listThreads`,
521
- `readThread`, checkpoint, and timeout arguments; provide `recordTask` before
522
- creation and optional `resolveRecordedTask` and `reportRecordedResult`
523
- callbacks instead. The old pure thread-inspection exports remain temporarily
524
- available as deprecated compatibility helpers, but TaskChef no longer calls
525
- them. Creation errors expose `taskChefTaskId` and `taskChefResultReporting` so
526
- library callers can recover a record when the failure callback was unavailable.
511
+ This executor self-linking redesign removes post-creation discovery and hooks.
512
+ It requires a major release. Library callers migrating from TaskChef 5.x should
513
+ remove thread-list/read, checkpoint, timeout, and `resolveRecordedTask`
514
+ arguments. Provide `recordTask` before creation and optionally
515
+ `reportRecordedResult` for creation failure. Creation errors expose
516
+ `taskChefTaskId` and `taskChefResultReporting` for bounded recovery.
527
517
 
528
518
  ```sh
529
519
  npm test