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.
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +28 -16
- package/SPEC.md +4 -1
- package/package.json +1 -1
- package/src/cli.js +38 -3
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
|
|
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
|
-
|
|
209
|
-
|
|
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
|
-
|
|
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`
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
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
|
|
353
|
-
the verified durable ID
|
|
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
|
|
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
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
|
|
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
|