Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
da3d5c8
WL-0MS1W8Y1L0059AKP: Create work item selection list Herdr plugin
Jul 26, 2026
b47214a
WL-0MS1W8Y1L0059AKP: Fix relative paths in herdr-plugin.toml
Jul 26, 2026
767a77c
WL-0MS1W8Y1L0059AKP: Fix wl CLI response parsing in fetcher
Jul 27, 2026
fa02fba
WL-0MS31PYPP0006M8P: Icon system, stage colouring & group separators
Jul 27, 2026
0a80e54
WL-0MS31Q7FD00710B7: Chord shortcut system & dynamic help bar
Jul 27, 2026
63c17fe
WL-0MS31WX9C008FIQR: Full scrollable detail view
Jul 27, 2026
ac76444
WL-0MS31X52O0061C79: Auto-refresh & auto-sync
Jul 27, 2026
59e3fee
WL-0MS31XU8V005HOAL: Hierarchical navigation & selection widget
Jul 27, 2026
41334c4
WL-0MS31YASI009GJG0: Total count, error handling & polish
Jul 27, 2026
fdf289d
WL-0MS31Y2OQ000RMGL: Settings system & config persistence
Jul 27, 2026
bec3ce5
fix: enter opens detail view instead of expand on wl items with child…
Jul 27, 2026
c8fc8e4
fix: enter enters detail view instead of exiting TUI
Jul 27, 2026
89fdba4
fix: detail view line wrapping and terminal width detection
Jul 27, 2026
141925a
fix: clear screen before each render to prevent leftover content
Jul 27, 2026
b704809
fix: show chord help hints in TUI footer
Jul 28, 2026
5ec08bb
fix: execute chord commands instead of exiting TUI
Jul 28, 2026
f6f8f34
fix: remove / key filter, use f-* chords as sole filter method
Jul 28, 2026
9c43b8c
feat: stage-aware shortcut hints in footer (port from Pi TUI)
Jul 28, 2026
1c74d33
fix: simplify footer to show only shortcut hints
Jul 28, 2026
0180996
fix: align Herdr stage icons with main project
Jul 28, 2026
a36f62d
feat(herdr): add audit result display to detail view
Jul 28, 2026
3696d97
feat(herdr): add stdout output infrastructure for resolved chord comm…
Jul 28, 2026
ae9a95e
feat(herdr): wire agent workflow and audit commands in dispatchChordC…
Jul 28, 2026
11634db
test(herdr): add targeted tests for !!wl text-insertion command families
Jul 28, 2026
a268af2
fix(herdr): allow 'r' chord leader to override refresh action
Jul 28, 2026
6b98e67
fix(herdr): remove legacy r->refresh mapping in list mode
Jul 28, 2026
5cc3485
refactor(herdr): standardize shortcut entries on 'chord' field
Jul 28, 2026
6b46a58
WL-0MS4OOLEF003L0VL: Fix duplicate children when expanding parent wit…
Jul 28, 2026
e5eaeb4
docs(herdr): document audit result fields in README and code comments
Jul 28, 2026
16db345
feat(herdr): wrap-around navigation and flat-count bounds for expande…
Jul 28, 2026
e3a59ad
feat(herdr): add 13 missing text-insertion shortcuts (WL-0MS4FHW29005…
Jul 28, 2026
6abf50d
fix(herdr): single-key shortcuts execute immediately, not via chord m…
Jul 28, 2026
f602717
fix(herdr): call cleanup() before executing shortcut commands (WL-0MS…
Jul 28, 2026
0292e0f
fix(herdr): wrap shortcut execution in try/catch for error logging (W…
Jul 28, 2026
331e2c6
fix(herdr): keep TUI alive after shortcut commands (WL-0MS4FHW290053SH4)
Jul 29, 2026
7fd9557
feat(herdr): add navigation stack for hierarchical browsing (WL-0MS4F…
Jul 29, 2026
ec560f7
feat(herdr): add auto-sync periodic background wl sync (WL-0MS4FIUYS0…
Jul 29, 2026
90dd776
feat(herdr): add total actionable count display in header (WL-0MS4FIE…
Jul 29, 2026
6444e4e
feat(herdr): dispatch agent commands to new pi agent pane (WL-0MS5CDI…
Jul 29, 2026
9fef2b4
feat(herdr): add GitHub issue number display in detail view (WL-0MS4F…
Jul 29, 2026
d637c9b
feat(herdr): add browseItemCount and showHelpText settings (WL-0MS4FJ…
Jul 29, 2026
cc6a302
feat(herdr): add background wl sync for auto-refresh (WL-0MS3ANB04006…
Jul 29, 2026
6c4891a
fix(herdr): properly detect worklog root when installed from worktree
Jul 29, 2026
60d40b1
fix(herdr): align icon prefix in selection list and remove spaces bet…
Jul 29, 2026
6ae5ecf
fix(herdr): reserve expand-icon slot for consistent alignment
Jul 29, 2026
684aa14
fix(herdr): remove child count from icon prefix and fix emoji display…
Jul 29, 2026
29385b2
feat(herdr): open worklist in new tab with prefix+l key
Jul 29, 2026
4ae95fc
feat(herdr): form input dialog for unknown identifiers in chord commands
Jul 29, 2026
a327e14
fix(herdr): preserve selection by ID after list reorder from status c…
Jul 29, 2026
a779d71
fix(herdr): strip bang prefix from commands before sending to Herdr
Jul 29, 2026
6e1f440
fix(herdr): add error feedback in chord-complete handler when command…
Jul 29, 2026
f281152
SA-0MS6B5ESG0056GZJ: Prevent unintended stage advancement from --audi…
Jul 29, 2026
6af154d
WL-0MS68V35Y002RZRA: Remove legacy wlCount setting from Herdr plugin
Jul 29, 2026
1fc0332
feat(herdr): operate from Herdr tab working directory, not ContextHub
Jul 29, 2026
3919716
WL-0MS6MOXNQ005B9IC: Metadata in work-item detail views now rendered …
Jul 29, 2026
6af49cb
fix(herdr): restore walk-up behavior in findWorklogRoot()
Jul 29, 2026
3d2547a
fix(herdr): pass --cwd to plugin pane open for correct tab CWD
Jul 30, 2026
e11b2a5
revert(open.sh): remove --cwd query that caused reentrancy crashes
Jul 30, 2026
99e048c
fix(open.sh): pass --cwd $PWD to plugin pane open
Jul 30, 2026
7886dc4
fix(audit_runner): treat status=deleted children as exempt
Jul 30, 2026
5ffd891
fix(toggle.sh): close stale pane and re-open to ensure correct CWD
Jul 30, 2026
7e4b04e
feat: Add --worklog-dir global option for explicit path override
Jul 30, 2026
0f7d727
fix(herdr): use herdr pane current for --cwd instead of $PWD
Jul 30, 2026
b51969c
fix(herdr): capture focused pane CWD via herdr pane current for --cwd
Jul 30, 2026
6db17f0
fix(herdr): don't crash when no .worklog/ found in current directory
Jul 30, 2026
33ba60d
fix(herdr): use HERDR_PANE_ID for CWD instead of pane current
Jul 30, 2026
4300a70
debug(herdr): add debug logging to trace CWD resolution
Jul 30, 2026
2acba7b
Extract shared Herdr plugin scripts into packages/herdr/shared/
Jul 30, 2026
78c9921
Fix permissions: make shared scripts executable
Jul 30, 2026
6b3aaf7
fix(herdr): add CWD resolution directly to open.sh
Jul 30, 2026
88b0563
Add Herdr agent state protocol specification document
Jul 30, 2026
412c74d
fix(herdr): pass resolved CWD via --env instead of --cwd
Jul 30, 2026
7c9fbe0
fix(herdr): chdir to resolved CWD instead of broken --worklog-dir
Jul 30, 2026
557ab9b
Fix 12 pre-existing test failures and lint issues blocking release (W…
Jul 31, 2026
b5673f5
fix(herdr): re-apply --worklog-dir integration instead of process.chd…
Jul 31, 2026
5265ff6
Ignore nested .worklog worktree dirs anywhere in tree (WL-0MS8SR11A00…
Jul 31, 2026
8d600ff
Update TUI tutorial docs with current chord-based shortcuts (WL-0MS4F…
Jul 31, 2026
d6006e1
Fix flaky github-push CLI test timeouts (WL-0MS8SR11A0020B0W)
Jul 31, 2026
d4ea83b
WL-0MS8W5LTW006YZ4B: Smart selection — always show critical + complet…
Jul 31, 2026
a658da5
WL-0MS94VAII00054L9: Exclude stage=done items from default selection …
Jul 31, 2026
7e7a297
Add missing chord-dispatch and help-line tests for new shortcuts (WL-…
Jul 31, 2026
9e62c2f
chore: ignore SQLite WAL/SHM sidecar files for worklog DBs (WL-0MS7MF…
Jul 31, 2026
d090e5a
Fix navigation stack never pushed in production (WL-0MS98T99J009MR66)
Jul 31, 2026
5c79329
chore: remove stale implement state file from repo root (WL-0MS7MFILJ…
Jul 31, 2026
92cc5a6
feat(herdr): run !/!! prefixed commands visibly in a new herdr pane (…
Jul 31, 2026
e1c8a10
fix(herdr): restore !! prefixes so a-y (audit approve) runs visibly i…
Jul 31, 2026
1e68a35
Add scrollOffset restoration test for navigation stack (WL-0MS98T99J0…
Jul 31, 2026
b53c488
feat: hide child work items from top-level selection lists (WL-0MS964…
Jul 31, 2026
4e95ad2
fix(herdr): remove duplicate 'join' import breaking plugin build (WL-…
Jul 31, 2026
525bfdf
Fix flaky child_process mocking breaking runWl and mock-timeout tests…
Jul 31, 2026
84a7e33
Document nav-stack back hint and correct TUI drill-down docs (WL-0MS4…
Jul 31, 2026
0f610d4
feat(herdr): keep command-output pane open after successful !/!! comm…
Jul 31, 2026
fa00b87
fix(herdr): keep command-output pane open by keeping wrapper process …
Jul 31, 2026
a47c1ca
WL-0MS8SVY7P0094K6D: Implementation complete
Aug 1, 2026
6261be8
Correct AGENTS.md references example in skill-path-conventions doc (W…
Aug 1, 2026
c8c0ab7
Fix audit findings across 5 release items and the cli-utils-markdown …
Aug 1, 2026
c05c271
Add fetchActionableCount tests covering fetch, missing count, and err…
Aug 1, 2026
3a7be1a
Apply showHelpText hot-reload, README settings/GitHub-issue docs (WL-…
Aug 1, 2026
44d0f4e
Add sync status indicator, graceful error surfacing, and manual sync …
Aug 1, 2026
8c3012b
Execute plain commands in tab CWD, empty state when uninitialized, un…
Aug 1, 2026
11ba827
Pass --worklog-dir to background wl sync (WL-0MS6LS2TF007AV63)
Aug 1, 2026
4d21d83
Sync CHANGELOG.md with main history (v1.0.4) plus unreleased entries …
Aug 1, 2026
e048914
Bump version to v1.0.5
Aug 1, 2026
872f11e
Update CHANGELOG.md for v1.0.5
Aug 1, 2026
555a9ea
Merge origin/dev into main (automated, CHANGELOG resolved)
Aug 1, 2026
1169bb4
Guard herdr plugin main() to entry-point execution only (WL-0MS9TGA4X…
Aug 1, 2026
2ee570d
Merge remote-tracking branch 'origin/dev' into release/dev-to-main-20…
Aug 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,15 @@ Worklog Specific Ignores
# Ignore Worklog directory by default
.worklog/*

# Ignore nested Worklog worktree directories anywhere in the tree
**/.worklog/

!.worklog/config.yaml

# SQLite runtime sidecar files (WAL/SHM) for worklog DBs
worklog.db-shm
worklog.db-wal

# opencode temporary files and directories
.opencode/
.tmp
Expand Down
6 changes: 3 additions & 3 deletions .implement_state.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"work_item_id": "WL-0MRSGMTYU009OZCF",
"worktree_path": "/home/rgardler/projects/ContextHub/.worklog/worktrees/wl-WL-0MRSGMTYU009OZCF-add-audit-file-to-wl-audit-set-for-file",
"work_item_id": "WL-0MS8SVY7P0094K6D",
"worktree_path": "/home/rgardler/projects/ContextHub/.worklog/worktrees/wl-WL-0MS8SVY7P0094K6D-fix-skills-and-commands-must-run-in-corr",
"repo_root": "/home/rgardler/projects/ContextHub",
"parent_branch": "dev",
"commit_msg": "",
"started_at": "2026-07-21T18:30:22Z"
"started_at": "2026-08-01T01:17:51Z"
}
6 changes: 3 additions & 3 deletions .pi/skills/heartbeat/scripts/heartbeat.py
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ def run_wl(args):
json.JSONDecodeError: If wl output is not valid JSON.
"""
cmd = ['wl'] + args
result = subprocess.run(cmd, capture_output=True, text=True)
result = subprocess.run(cmd, capture_output=True, text=True, check=False)
if result.returncode != 0:
raise RuntimeError(
f"wl command failed: {' '.join(cmd)}\n"
Expand Down Expand Up @@ -145,7 +145,7 @@ def check_queue():
]
try:
pi_result = subprocess.run(
pi_cmd, capture_output=True, text=True, timeout=600
pi_cmd, capture_output=True, text=True, timeout=600, check=False
)
if pi_result.returncode != 0:
return (
Expand Down Expand Up @@ -191,7 +191,7 @@ def parse_args():

def main():
"""Entry point for command-line invocation."""
args = parse_args()
parse_args()
result = check_queue()
print(result)
if result.startswith('Heartbeat error'):
Expand Down
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# Changelog

## Unreleased
### Features
- Show total actionable count in browse list title ("top N of M") with auto-refresh (WL-0MS4FIEN40037GB9)
- Smart selection: always show critical and completed/in_review items in TUI lists (WL-0MS8W5LTW006YZ4B)
- Hide child work items from top-level selection lists; drill down via Tab (WL-0MS964SIA0057ABR)
- Navigation stack for hierarchical browsing in Herdr plugin (WL-0MS4FI763006105Y)
- Missing text-insertion shortcuts: i/r/u-p-*/u-s/u-t/x-c/x-d/a-a/a-y/a-r chords (WL-0MS4FHW290053SH4)
- Auto-sync: periodic background wl sync (WL-0MS4FIUYS001K08K)
- Run !/!! prefixed commands visibly in a new herdr pane; keep output pane open (WL-0MS7MFILJ0079283, WL-0MS9HIUE0002JAKQ)
- Total actionable count display in detail view with GitHub issue number (WL-0MS4FIM8T001XAVF)
- Rich settings: browseItemCount and showHelpText toggle (WL-0MS4FJ2TX009V7V5)
- Skills and commands run in correct project directory (WL-0MS8SVY7P0094K6D)

## v1.0.4 (2026-07-26)
### Features
- Add periodic request scheduling to pi worklog plugin (WL-0MRHYQU1S009DJ9B)
Expand Down
15 changes: 10 additions & 5 deletions CLI.md
Original file line number Diff line number Diff line change
Expand Up @@ -446,11 +446,13 @@ Suggest the next work item(s) to work on. Non-actionable items (deleted, complet

#### Hierarchy-aware selection

`wl next` is hierarchy-aware: it returns **parent items** instead of descending into their children. For example, if an epic has open child tasks, `wl next` returns the epic itself — not one of its children. This surfaces the high-level unit of work for you to claim, after which you can work on its sub-tasks.
`wl next` is strictly root-only: it returns **parent items** only and never returns an item with a `parentId` set. For example, if an epic has open child tasks, `wl next` returns the epic itself — never one of its children. This surfaces the high-level unit of work for you to claim, after which you can work on its sub-tasks (reachable via `wl list --parent <id>` or drill-down in the TUIs).

Leaf items (items without children, or whose children are all completed) continue to be returned normally. Items whose parent is completed, deleted, or otherwise absent from the candidate pool are promoted to root level (orphan promotion) and compete on their own merit.
Leaf items (items without children, or whose children are all completed) continue to be returned normally. **Orphan promotion is removed** — children whose parent is completed, deleted, or otherwise absent from the candidate pool are hidden entirely and are NOT promoted to root level. Such children remain reachable via `wl list --parent <id>`, `wl show`, and search.

Items whose parent (or ancestor) has status `in-progress` are **not** promoted — the entire in-progress subtree is skipped from `wl next` recommendations. This includes critical-priority children: they are only surfaced when their parent is not a valid (open, non-completed, non-deleted, non-in-progress) candidate.
Items whose parent (or ancestor) has status `in-progress` are **not** returned — the entire in-progress subtree is skipped from `wl next` recommendations. This includes critical-priority children.

In blocker-surfacing and critical-escalation paths, child blockers are never returned directly: a child blocker whose parent is a selectable actionable root is surfaced as that parent instead, and a child blocker whose parent is not selectable is hidden entirely (returning null with a clear reason when no other work is available).

In batch mode (`-n <count>`), children of returned parents are also excluded from subsequent results, ensuring the batch never contains items from the same subtree.

Expand All @@ -471,13 +473,13 @@ When multiple candidate items exist, `wl next` ranks them using the following cr
3. **Blocked penalty** — items with active dependency blockers are excluded by default (see `--include-blocked`).
4. **Tie-breakers** — sort_index, then age (older items first) break remaining ties.

Items with `status: 'blocked'` that have `critical` priority trigger a special escalation path: their direct blockers are surfaced immediately, bypassing the general ranking logic. Blocked `critical` items that are children of an open parent are still escalated — the parent item's blockers will be surfaced if the critical child is in its tree.
Items with `status: 'blocked'` that have `critical` priority trigger a special escalation path: their direct blockers are surfaced immediately, bypassing the general ranking logic. Blocked `critical` items that are children of an open parent are still escalated — the parent item's blockers will be surfaced if the critical child is in its tree. Child blockers are never returned directly (see "Hierarchy-aware selection" above).

#### Backward compatibility

The `--include-blocked` flag behavior is unchanged. The ranking boost only affects ordering among candidates that are already considered (i.e., unblocked items by default).

The JSON output schema is unchanged — only the selection behavior differs: parent items are now returned instead of children.
The JSON output schema is unchanged — only the selection behavior differs: only root items (parents) are now returned instead of children.

Options:

Expand Down Expand Up @@ -603,6 +605,7 @@ Options:
`-s, --status <status>` (optional)
`-p, --priority <priority>` (optional)
`--parent <id>` — Filter by parent ID (direct children only) (optional).
`--root-only` — Show only root-level items (items with no parent). Mutually exclusive with `--parent` (optional).
`--tags <tags>` (optional)
`-a, --assignee <assignee>` (optional)
`-n, --number <n>` (optional) — Limit the number of items returned
Expand All @@ -621,6 +624,8 @@ wl list -s open -p high
wl list -s open,in-progress # status is open OR in-progress
wl list --status open,completed,blocked
wl list -s open,in-progress --stage in_review # status AND stage filters
wl list --root-only # root items only (no parents)
wl list --root-only -p critical
wl search "signup"
wl -F concise list -s in-progress
wl --json list -s open --tags backlog
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ For freeze triage and profiling details (including `TUI_CHORD_DEBUG`, `strace`,

### Install the Pi Worklog browse extension

The repository includes a Pi extension that adds a Worklog browse flow (`/wl` and `Ctrl+Shift+B`) which lists the next 5 recommended work items (`wl next -n 5`) and previews the selected item in a widget above the editor as selection changes (`title <id>`, `Priority/Stage/Status`, `Risk/Effort`, and the first 7 description lines). Pressing Enter on a selected item opens a focused scrollable detail view backed by `wl show <id> --format markdown`, with keyboard navigation support for Up/Down, PageUp/PageDown, Space, `g` (top), `G` (bottom), and `Esc` (close).
The repository includes a Pi extension that adds a Worklog browse flow (`/wl` and `Ctrl+Shift+B`) which lists the next 5 recommended work items (`wl next -n 5`) and previews the selected item in a widget above the editor as selection changes (`title <id>`, `Priority/Stage/Status`, `Risk/Effort`, and the first 7 description lines). The top-level list is root-only: child work items are hidden and only appear under their parent via Tab drill-down (children are reachable through `wl list --parent <id>`). Pressing Enter on a selected item opens a focused scrollable detail view backed by `wl show <id> --format markdown`, with keyboard navigation support for Up/Down, PageUp/PageDown, Space, `g` (top), `G` (bottom), and `Esc` (close).

Install it globally by creating a symlink under `~/.pi/agent/extensions`:

Expand Down
2 changes: 1 addition & 1 deletion TUI.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ The TUI is implemented as a Pi extension located in `packages/tui/`:

### Browse & Select

On launch, the TUI shows a list of recommended next work items. Navigate with
On launch, the TUI shows a list of recommended next work items (root items only — child work items are hidden and appear only under their parent via drill-down). Navigate with
Up/Down arrows, press Enter to see full details, or use shortcut keys:

- **i** — insert `implement <id>` into the editor
Expand Down
28 changes: 21 additions & 7 deletions docs/icons-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -453,18 +453,32 @@ WL_NO_ICONS=1 wl list --format full

### Output Examples

**CLI (TTY) with icons:**
**CLI (TTY) with icons (normal format):**
```
ID: TEST-1
Title: Set up CI pipeline
Status: 🟢 Open [OPEN] · Stage: In Progress | Priority: 🚨 critical [CRIT]
| Field | Value |
| --------- | ----- |
| ID | TEST-1 |
| Title | Set up CI pipeline |
| Status | 🟢 Open [OPEN] · Stage: In Progress \| Priority: 🚨 critical [CRIT] |
| SortIndex | 100 |
| Risk | — |
| Effort | — |

Description: A test item for audit formatting
```

**CLI with icons disabled:**
```
ID: TEST-1
Title: Set up CI pipeline
Status: [OPEN] · Stage: In Progress | Priority: critical
| Field | Value |
| --------- | ----- |
| ID | TEST-1 |
| Title | Set up CI pipeline |
| Status | [OPEN] · Stage: In Progress \| Priority: critical |
| SortIndex | 100 |
| Risk | — |
| Effort | — |

Description: A test item for audit formatting
```

**TUI list:**
Expand Down
6 changes: 3 additions & 3 deletions docs/skill-path-conventions.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,11 @@ working directory the agent was in when the skill was loaded.

### AGENTS.md References

The global AGENTS.md at `~/.pi/agent/AGENTS.md` uses `skills/<name>/...`
prefixes since it lives one directory above the `skills/` directory:
The global AGENTS.md at `~/.pi/agent/AGENTS.md` uses absolute
`/home/rgardler/.pi/agent/skills/<name>/SKILL.md` paths in markdown links:

```
resources/skills/ship/SKILL.md # ~/.pi/agent/AGENTS.md → ~/.pi/agent/skills/ship/SKILL.md
[ship skill](/home/rgardler/.pi/agent/skills/ship/SKILL.md) # from ~/.pi/agent/AGENTS.md
```

### Backward Compatibility
Expand Down
35 changes: 22 additions & 13 deletions docs/tutorials/04-using-the-tui.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,34 +162,43 @@ When OpenCode is active, the response appears in a bottom pane:

## Step 6a: Pi Extension Browse Shortcuts

When using the Pi agent with the Worklog browse extension (launched via `piman`), you can quickly insert commands into the editor using keyboard shortcuts. These shortcuts are **config-driven** — defined in `packages/tui/extensions/shortcuts.json` and dispatched dynamically by the shortcut registry, so they can be extended or customized without editing source code.
When using the Pi agent with the Worklog browse extension (launched via `piman`), you can quickly insert commands into the editor using keyboard shortcuts. These shortcuts are **config-driven** — defined in `packages/tui/extensions/Worklog/shortcuts.json` and dispatched dynamically by the shortcut registry, so they can be extended or customized without editing source code.

### Browse List View Shortcuts

In the browse selection list (when you see a list of work items), press one of the following keys to insert a command for the selected item:

| Key | Command Inserted |
|-----|------------------|
| `i` | `implement <selected-id>` |
| `p` | `plan <selected-id>` |
| `n` | `intake <selected-id>` |
| `c` | `create <description>` |
| `a` | `audit <selected-id>` |

The command text is inserted into the Pi editor (without a trailing newline), allowing you to review or edit it before pressing Enter to submit.
| Key | Command Inserted | Stage filter |
|-----|------------------|-------------|
| `c` | `/intake` (create new item) | — |
| `n` | `/intake <id>` | `idea` |
| `p` | `/plan <id>` | `intake_complete` |
| `i` | `/skill:implement <id>` | `intake_complete`, `plan_complete`, `in_progress` |
| `s` | search | — |
| `r` | producer-review toggle | — |
| `f i` / `f n` / `f p` / `f r` | stage filters (idea / intake / plan / in_review) | — |
| `u p l/m/h/c` | update priority (low/medium/high/critical) | — |
| `u s` | update stage/status | — |
| `u t` | update title | — |
| `x c` / `x d` | close / delete | — |
| `a a` / `a y` / `a r` | audit (automatic / approve / reject) | `in_review` |

The command text is inserted into the Pi editor (without a trailing newline), allowing you to review or edit it before pressing Enter to submit. Chords (multi-key shortcuts like `u p h`) are entered by pressing each key in sequence.

### Detail View Shortcuts

In the detail scrollable view (when viewing a single work item), the same shortcuts work identically: press `i`, `p`, `n`, or `a` to insert the corresponding command for the currently displayed work item. The detail view also clears its preview widget before closing the modal, giving you a clean editor to work in.
In the detail scrollable view (when viewing a single work item), the same shortcuts work identically: press `i`, `p`, `n`, `c`, `s`, or `r` (plus the `u`, `x`, `a`, and `f` chords) to insert the corresponding command for the currently displayed work item. The detail view also clears its preview widget before closing the modal, giving you a clean editor to work in.

When viewing details, a shortcut hint line appears at the bottom of the rendered content showing available keys for the current work item's stage (same formatting and filtering as the selection list hints). When a chord leader key (e.g., `u`) is pressed, the hint line updates to show available chord completions. The hint line respects the `showHelpText` setting and can be hidden via `/wl settings`.

### How It Works

Each shortcut is defined as a JSON object with:
- `key`: The single-character key (e.g., `"i"`)
- `command`: The template string to insert (e.g., `"implement <id>"`)
- `key` (or `chord`): The single-character key or chord sequence (e.g., `"i"` or `["u", "p", "h"]`)
- `command`: The template string to insert (e.g., `/skill:implement <id>`)
- `view`: Which view(s) the shortcut applies to (`"list"`, `"detail"`, or `"both"`)
- `label` / `description`: Human-readable metadata shown in the help-line hints
- `stages` (optional): Restricts the shortcut to items in the listed stages (e.g., audit chords only appear for `in_review` items)

The `shortcutRegistry` loads `shortcuts.json` at extension init time and dispatches matched shortcuts in both the browse list and detail view handlers. Navigation keys (`Up`, `Down`, `Enter`, `Escape`, `PageUp`, `PageDown`, `G`) remain functional in both views.

Expand Down
6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
{
"name": "worklog",
"version": "1.0.4",
"version": "1.0.5",
"description": "A simple experimental issue tracker for AI agents",
"main": "dist/index.js",
"type": "module",
"workspaces": ["packages/shared"],
"workspaces": [
"packages/shared"
],
"bin": {
"worklog": "./dist/cli.js",
"wl": "./dist/cli.js"
Expand Down
Loading
Loading