taskchef 5.2.0 → 5.3.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.2.0",
3
+ "version": "5.3.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
@@ -356,17 +356,21 @@ taskchef task show t1
356
356
  taskchef task list
357
357
  taskchef task list --project payments
358
358
  taskchef task list --ascending
359
+ taskchef task list --full-id
359
360
  taskchef task summary
360
361
  ```
361
362
 
362
- Human-readable task listings put the scannable fields first and the durable ID
363
- last. Values are kept in full and aligned in columns. Tasks are newest-first by
364
- default; pass `--ascending` to list them from oldest to newest. The same order
365
- applies to the `tasks` array in `--json` output.
363
+ Human-readable task listings include both the task ID and Codex thread ID.
364
+ UUID-shaped IDs use their first eight-character section by default; pass
365
+ `--full-id` to show both IDs in full. Null thread IDs appear as `-`, consistent
366
+ with other empty table cells. Tasks are newest-first by default; pass
367
+ `--ascending` to list them from oldest to newest. ID formatting does not alter
368
+ the complete values in `--json` output, and the selected order applies to its
369
+ `tasks` array.
366
370
 
367
371
  ```text
368
- TITLE PROJECT CREATED ID
369
- Add retry logs payments 2026-08-12T10:00:00.000Z c0f010ff-84f2-4838-a69d-0ff1f5d721d7
372
+ TITLE PROJECT CREATED ID THREAD ID
373
+ Add retry logs payments 2026-08-12T10:00:00.000Z c0f010ff 019f9d46
370
374
  ```
371
375
 
372
376
  The complete data contract is in [SPEC.md](SPEC.md). Deferred ideas are in
package/SPEC.md CHANGED
@@ -290,7 +290,10 @@ The CLI reads persisted history without contacting Codex:
290
290
  - `task show <id>` returns one entry.
291
291
  - `task list` returns entries newest-first by creation time, optionally filtered
292
292
  by historical project name or exact path. `--ascending` returns oldest-first.
293
- The selected order applies to both human rows and the JSON `tasks` array.
293
+ Human rows include task and thread ID columns, abbreviating UUID-shaped IDs
294
+ to their first eight-character section unless `--full-id` is passed. Null
295
+ thread IDs display as `-`. ID formatting does not alter JSON values, and the
296
+ selected order applies to both human rows and the JSON `tasks` array.
294
297
  - `task summary` returns the total and per-project counts.
295
298
  - `task resolve <id> --thread-id <thread-id>` atomically fills one nullable
296
299
  thread ID after Codex verifies the exact structured marker match.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taskchef",
3
- "version": "5.2.0",
3
+ "version": "5.3.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
@@ -154,6 +154,12 @@ function sortTasksByCreatedAt(tasks, ascending) {
154
154
  .map(({ task }) => task);
155
155
  }
156
156
 
157
+ function displayId(value, fullId) {
158
+ if (fullId || value === null || value === undefined) return value;
159
+ const uuidSection = String(value).match(/^[0-9a-fA-F]{8}(?=-)/);
160
+ return uuidSection ? uuidSection[0] : value;
161
+ }
162
+
157
163
  async function initialize(args) {
158
164
  validateCommandArgs(args, 2, {
159
165
  values: ["--workspace", "--codex-cli"],
@@ -315,20 +321,22 @@ async function taskShow(args) {
315
321
  async function taskList(args) {
316
322
  validateCommandArgs(args, 2, {
317
323
  values: ["--workspace", "--project"],
318
- switches: ["--ascending", "--json"],
324
+ switches: ["--ascending", "--full-id", "--json"],
319
325
  });
320
326
  const filtered = await filterTasks(workspaceRoot(args), {
321
327
  project: option(args, "--project", null),
322
328
  });
323
329
  const dispatches = sortTasksByCreatedAt(filtered, args.includes("--ascending"));
324
330
  const result = { taskCount: dispatches.length, tasks: dispatches };
331
+ const fullId = args.includes("--full-id");
325
332
  print(result, args, (value) => table(
326
- ["TITLE", "PROJECT", "CREATED", "ID"],
333
+ ["TITLE", "PROJECT", "CREATED", "ID", "THREAD ID"],
327
334
  value.tasks.map((dispatch) => [
328
335
  dispatch.title,
329
336
  dispatch.project?.name,
330
337
  dispatch.createdAt,
331
- dispatch.id,
338
+ displayId(dispatch.id, fullId),
339
+ displayId(dispatch.threadId, fullId),
332
340
  ]),
333
341
  ));
334
342
  return 0;
@@ -360,7 +368,7 @@ Usage:
360
368
  taskchef task record [--json] [--workspace <path>]
361
369
  taskchef task resolve <task-id> --thread-id <thread-id> [--json] [--workspace <path>]
362
370
  taskchef task show <task-id> [--json] [--workspace <path>]
363
- taskchef task list [--project <name-or-path>] [--ascending] [--json] [--workspace <path>]
371
+ taskchef task list [--project <name-or-path>] [--ascending] [--full-id] [--json] [--workspace <path>]
364
372
  taskchef task summary [--json] [--workspace <path>]
365
373
 
366
374
  Task record reads one JSON value from closed, non-interactive standard input.