taskchef 5.5.1 → 5.6.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.5.1",
3
+ "version": "5.6.0",
4
4
  "description": "Dispatch work from a data-only workspace to visible Codex project tasks.",
5
5
  "author": {
6
6
  "name": "Favo Yang",
package/README.md CHANGED
@@ -95,7 +95,7 @@ TaskChef replies with a link to the new Codex task. Open it to follow progress
95
95
  or give the executor more instructions. The dispatcher is ready for another
96
96
  request immediately.
97
97
 
98
- The plugin's focused local tools prepare and record delegations directly in the
98
+ The plugin's focused MCP tools prepare and record delegations directly in the
99
99
  canonical workspace. They preserve TaskChef's lock and atomic-write guarantees
100
100
  without shell quoting, stdin handling, temporary record files, or a separate
101
101
  command-sandbox permission round trip.
@@ -205,8 +205,11 @@ The plugin has three skills:
205
205
  - `$taskchef-delegate` routes requests and creates executor tasks
206
206
  - `$taskchef-report` reads the task history and reports live executor state once
207
207
 
208
- The CLI underneath these skills manages workspace data. Run it once with `npx`
209
- if you do not want a global installation:
208
+ Normal delegation uses the plugin's bundled MCP tools. The bootstrap and report
209
+ skills continue to call the CLI for deterministic workspace administration,
210
+ task-history reads, and later recovery. The same CLI is also available for
211
+ direct inspection, benchmarking, and manual operations over the shared
212
+ workspace logic. Run it once with `npx` if you do not want a global installation:
210
213
 
211
214
  ```sh
212
215
  npx taskchef help
@@ -218,9 +221,9 @@ For the shorter command used below, install it globally:
218
221
  npm install --global taskchef
219
222
  ```
220
223
 
221
- The npm package provides the data CLI. The Codex plugin provides the skills
222
- that create and inspect executor tasks. From a source checkout, use
223
- `node bin/taskchef.js`.
224
+ The npm package provides the data CLI. The Codex plugin provides the skills and
225
+ focused MCP tools used during delegation; native Codex tools still create and
226
+ inspect executor tasks. From a source checkout, use `node bin/taskchef.js`.
224
227
 
225
228
  ```text
226
229
  taskchef help
@@ -234,7 +237,7 @@ taskchef project remove <name>
234
237
  taskchef dispatch prepare
235
238
  taskchef task record
236
239
  taskchef task resolve <task-id> --thread-id <thread-id>
237
- taskchef task show <task-id>
240
+ taskchef task show <task-id-or-8-character-prefix>
238
241
  taskchef task list
239
242
  taskchef task summary
240
243
  ```
@@ -244,11 +247,14 @@ Workspace resolution is deterministic: `--workspace <path>`, then the
244
247
  current directory is never an implicit workspace. Data commands accept
245
248
  `--json` for machine-readable output. Run `taskchef help` for every option.
246
249
 
247
- `taskchef dispatch prepare --json` performs the read-only preparation used by
248
- the delegation skill in one process: it resolves the canonical workspace,
249
- loads and validates configured projects, and returns a generated task UUID,
250
- preparation timestamp, and exact correlation marker. `task record` accepts one
251
- JSON value only from closed, non-interactive standard input.
250
+ `taskchef dispatch prepare --json` is the CLI equivalent of the MCP
251
+ `prepare_dispatch` operation: it resolves the canonical workspace, loads and
252
+ validates configured projects, and returns a generated task UUID, preparation
253
+ timestamp, and exact correlation marker. Normal delegation calls the MCP tool;
254
+ the CLI command remains useful for diagnostics and benchmarks. `task record`
255
+ accepts one JSON value only from closed, non-interactive standard input and is
256
+ intended for manual recovery or direct CLI use, not the skill's normal
257
+ recording path.
252
258
 
253
259
  For repeatable live delegation measurements, run
254
260
  `npm run benchmark:e2e -- write`. It reads one non-interactive JSON value,
@@ -349,8 +355,11 @@ printf '%s\n' '{"id":"c0f010ff-84f2-4838-a69d-0ff1f5d721d7","project":"/workspac
349
355
  taskchef task record --json
350
356
  ```
351
357
 
352
- If a task has `threadId: null`, Codex can later find its exact marker and pass
353
- the verified durable ID to the CLI. Resolution is atomic and only permits the
358
+ If a task has `threadId: null`, a later Codex workflow can find its exact
359
+ marker and pass the verified durable ID through its prescribed interface. The
360
+ delegate skill uses the MCP `resolve_task` tool during bounded post-creation
361
+ recovery; the report skill and direct manual recovery use the equivalent CLI
362
+ operation below. Both reach the same atomic logic, which permits only the
354
363
  one-way transition from null to one unique thread ID:
355
364
 
356
365
  ```sh
@@ -361,7 +370,7 @@ taskchef task resolve c0f010ff-84f2-4838-a69d-0ff1f5d721d7 \
361
370
  Inspect the task history without querying Codex tasks:
362
371
 
363
372
  ```sh
364
- taskchef task show t1
373
+ taskchef task show c0f010ff
365
374
  taskchef task list
366
375
  taskchef task list --project payments
367
376
  taskchef task list --ascending
@@ -375,7 +384,10 @@ UUID-shaped IDs use their first eight-character section by default; pass
375
384
  with other empty table cells. Tasks are newest-first by default; pass
376
385
  `--ascending` to list them from oldest to newest. ID formatting does not alter
377
386
  the complete values in `--json` output, and the selected order applies to its
378
- `tasks` array.
387
+ `tasks` array. `task show` accepts either the full task ID or the exact
388
+ eight-character task ID printed by the default human-readable list. A short ID
389
+ must identify exactly one recorded task; use `task list --full-id` when a short
390
+ ID is missing or ambiguous.
379
391
 
380
392
  ```text
381
393
  TITLE PROJECT CREATED ID THREAD ID
package/SPEC.md CHANGED
@@ -296,7 +296,10 @@ it was not recorded.
296
296
 
297
297
  The CLI reads persisted history without contacting Codex:
298
298
 
299
- - `task show <id>` returns one entry.
299
+ - `task show <id-or-8-character-prefix>` returns one entry. The short form is
300
+ the exact ID text printed by the default human-readable `task list` output
301
+ and succeeds only when it identifies exactly one recorded task. Missing,
302
+ ambiguous, malformed, and shorter prefixes fail without selecting a task.
300
303
  - `task list` returns entries newest-first by creation time, optionally filtered
301
304
  by historical project name or exact path. `--ascending` returns oldest-first.
302
305
  Human rows include task and thread ID columns, abbreviating UUID-shaped IDs
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taskchef",
3
- "version": "5.5.1",
3
+ "version": "5.6.0",
4
4
  "description": "A non-blocking interactive dispatcher for visible Codex tasks.",
5
5
  "license": "MIT",
6
6
  "author": "Favo Yang",
package/src/cli.js CHANGED
@@ -12,10 +12,11 @@ import {
12
12
  importProjects,
13
13
  initializeWorkspace,
14
14
  listProjects,
15
+ listTasks,
15
16
  prepareDispatch,
16
- readTask,
17
17
  recordTask,
18
18
  removeProject,
19
+ requireSafeId,
19
20
  resolveTask,
20
21
  } from "./workspace.js";
21
22
 
@@ -160,6 +161,39 @@ function displayId(value, fullId) {
160
161
  return uuidSection ? uuidSection[0] : value;
161
162
  }
162
163
 
164
+ async function readTaskForShow(workspace, taskId) {
165
+ const id = requireSafeId(taskId, "taskId");
166
+ const tasks = await listTasks(workspace);
167
+ if (!/^[0-9a-fA-F]{8}$/.test(id)) {
168
+ const exact = tasks.find((task) => task.id === id);
169
+ if (exact) return exact;
170
+ if (id.length < 8) {
171
+ throw new Error(
172
+ `task ID prefix is too short: ${id}; use all 8 characters shown by taskchef task list`,
173
+ );
174
+ }
175
+ if (id.length === 8) {
176
+ throw new Error(
177
+ `malformed task ID prefix: ${id}; use the 8 hexadecimal characters shown by taskchef task list`,
178
+ );
179
+ }
180
+ throw new Error(`task not found: ${id}`);
181
+ }
182
+
183
+ const matches = tasks.filter((task) => displayId(task.id, false) === id);
184
+ if (matches.length === 0) {
185
+ throw new Error(
186
+ `task not found for ID prefix: ${id}; run taskchef task list --full-id to verify the task ID`,
187
+ );
188
+ }
189
+ if (matches.length > 1) {
190
+ throw new Error(
191
+ `task ID prefix is ambiguous: ${id}; run taskchef task list --full-id and pass the full task ID`,
192
+ );
193
+ }
194
+ return matches[0];
195
+ }
196
+
163
197
  async function initialize(args) {
164
198
  validateCommandArgs(args, 2, {
165
199
  values: ["--workspace", "--codex-cli"],
@@ -314,7 +348,7 @@ async function taskResolve(args) {
314
348
 
315
349
  async function taskShow(args) {
316
350
  validateCommandArgs(args, 3, { values: ["--workspace"], switches: ["--json"] });
317
- print(await readTask(workspaceRoot(args), args[2]), args);
351
+ print(await readTaskForShow(workspaceRoot(args), args[2]), args);
318
352
  return 0;
319
353
  }
320
354
 
@@ -367,11 +401,12 @@ Usage:
367
401
  taskchef dispatch prepare [--json] [--workspace <path>]
368
402
  taskchef task record [--json] [--workspace <path>]
369
403
  taskchef task resolve <task-id> --thread-id <thread-id> [--json] [--workspace <path>]
370
- taskchef task show <task-id> [--json] [--workspace <path>]
404
+ taskchef task show <task-id-or-8-character-prefix> [--json] [--workspace <path>]
371
405
  taskchef task list [--project <name-or-path>] [--ascending] [--full-id] [--json] [--workspace <path>]
372
406
  taskchef task summary [--json] [--workspace <path>]
373
407
 
374
408
  Task record reads one JSON value from closed, non-interactive standard input.
409
+ Task show accepts a full task ID or the exact 8-character ID printed by task list.
375
410
  Project import reads a JSON
376
411
  array from a file, or from standard input when the source is '-' or omitted.
377
412
  Workspace resolution precedence is --workspace, TASKCHEF_WORKSPACE, then