jackherd 1.9.0 → 1.11.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/CHANGELOG.md +49 -0
- package/INSTALL.md +1 -1
- package/README.md +65 -32
- package/dist/{chunk-MCP4XJQH.js → chunk-RMMXD4G5.js} +18 -6
- package/dist/config.d.ts +99 -4
- package/dist/config.js +105 -29
- package/dist/plan-format.d.ts +51 -6
- package/dist/plan-format.js +49 -7
- package/docs/workflow-dark.svg +67 -63
- package/docs/workflow.svg +67 -63
- package/herdr-plugin/herdr-plugin.toml +1 -1
- package/install.sh +1 -1
- package/kit/hooks/ask-rules.json +15 -0
- package/kit/hooks/hooks/ask-hint/decision.ts +82 -14
- package/kit/hooks/hooks/ask-hint/index.ts +15 -19
- package/kit/hooks/hooks/ask-hint/settings.ts +3 -18
- package/kit/hooks/hooks/git-guard/decision.ts +50 -102
- package/kit/hooks/hooks/merge-guard/always-ask.ts +63 -0
- package/kit/hooks/hooks/merge-guard/{plan-approval-settings.ts → board-settings.ts} +21 -67
- package/kit/hooks/hooks/merge-guard/check-free.ts +20 -0
- package/kit/hooks/hooks/merge-guard/decision.ts +127 -187
- package/kit/hooks/hooks/merge-guard/index.ts +6 -3
- package/kit/hooks/hooks/merge-guard/lane-plan.ts +79 -0
- package/kit/hooks/hooks/merge-guard/run.ts +59 -54
- package/kit/hooks/hooks/merge-guard/settings.ts +13 -1
- package/kit/hooks/hooks/merge-guard/standing-approval.ts +142 -0
- package/kit/hooks/hooks/open-question/index.ts +26 -0
- package/kit/hooks/hooks/open-question/record.ts +135 -0
- package/kit/hooks/hooks/open-question/run.ts +57 -0
- package/kit/hooks/hooks/open-question/store.ts +39 -0
- package/kit/hooks/hooks/sent-file/store.ts +3 -12
- package/kit/hooks/hooks/shared/config.ts +7 -0
- package/kit/hooks/hooks/shared/dialog-answers.ts +9 -9
- package/kit/hooks/hooks/shared/files.ts +7 -0
- package/kit/hooks/hooks/shared/lane.ts +1 -1
- package/kit/hooks/hooks/shared/newest-verdict.ts +10 -0
- package/kit/hooks/hooks/shared/private-directory.ts +56 -9
- package/kit/hooks/hooks/shared/program-position.ts +2 -75
- package/kit/hooks/hooks/shared/shell-aliases.ts +1 -71
- package/kit/hooks/hooks/{ask-hint → shared}/transcript.ts +37 -6
- package/kit/hooks/hooks/{merge-guard → shared}/xargs-program.ts +10 -8
- package/kit/hooks/hooks/task-hint/decision.ts +49 -0
- package/kit/hooks/hooks/task-hint/index.ts +79 -0
- package/kit/hooks/hooks/task-hint/run.ts +62 -0
- package/kit/hooks/hooks/task-hint/store.ts +51 -0
- package/kit/hooks/hooks.json +13 -5
- package/kit/review/agents/skill-review.md +34 -0
- package/kit/review/skills/pre-commit/SKILL.md +1 -1
- package/kit/rules/rules/kit/pull-requests.md +2 -0
- package/kit/workflow/skills/follow/SKILL.md +3 -10
- package/kit/workflow/skills/implement/SKILL.md +8 -6
- package/kit/workflow/skills/orchestrate/SKILL.md +218 -433
- package/kit/workflow/skills/orchestrate/handover/decision.ts +43 -8
- package/kit/workflow/skills/orchestrate/handover/index.ts +32 -4
- package/kit/workflow/skills/orchestrate/handover/standing-approval.ts +84 -0
- package/kit/workflow/skills/orchestrate/references/acceptance.md +15 -0
- package/kit/workflow/skills/orchestrate/references/close-lane.md +17 -0
- package/kit/workflow/skills/orchestrate/references/coordinator-handover.md +43 -17
- package/kit/workflow/skills/orchestrate/references/draft-review.md +19 -0
- package/kit/workflow/skills/orchestrate/references/events.md +86 -0
- package/kit/workflow/skills/orchestrate/references/herd.md +6 -6
- package/kit/workflow/skills/orchestrate/references/lane-handover.md +18 -0
- package/kit/workflow/skills/orchestrate/references/lane-session.md +25 -0
- package/kit/workflow/skills/orchestrate/references/lane-setup.md +37 -0
- package/kit/workflow/skills/orchestrate/references/plan-commit.md +22 -10
- package/kit/workflow/skills/orchestrate/references/sensitive-input.md +5 -7
- package/kit/workflow/skills/plan/SKILL.md +6 -5
- package/kit/workflow/skills/plan/references/template-English.md +4 -4
- package/kit/workflow/skills/plan/references/template-German.md +4 -4
- package/package.json +3 -1
- package/recipes/README.md +2 -1
- package/recipes/sources.md +5 -1
- package/schemas/jackherd.schema.json +139 -5
- package/src/check/agent-text-reviewers.ts +23 -0
- package/src/check/command.ts +2 -0
- package/src/check/plan-structure-check.ts +49 -2
- package/src/check/plan.ts +8 -1
- package/src/check/schema.ts +9 -0
- package/src/check/skill-budget-defaults.ts +55 -0
- package/src/check/skill-budgets.ts +185 -0
- package/src/cli.ts +2 -0
- package/src/config/auto-window.ts +8 -0
- package/src/config/link-kinds.ts +7 -1
- package/src/config/schema.ts +82 -25
- package/src/config/tones.ts +27 -0
- package/src/lane/close-board.ts +106 -0
- package/src/lane/close-check.ts +183 -0
- package/src/lane/close-command-line.ts +11 -0
- package/src/lane/close-command.ts +217 -0
- package/src/lane/close-options.ts +43 -0
- package/src/lane/close-survey.ts +83 -0
- package/src/lane/close.ts +141 -0
- package/src/lane/command.ts +13 -0
- package/src/lane-prompt/additions.ts +14 -0
- package/src/lane-prompt/build.ts +74 -0
- package/src/lane-prompt/command.ts +93 -0
- package/src/lane-prompt/input.ts +157 -0
- package/src/lane-prompt/options.ts +70 -0
- package/src/lane-prompt/texts.ts +101 -0
- package/src/mermaid/command.ts +36 -0
- package/src/mermaid/problems.ts +48 -0
- package/src/plan-format/clock.ts +8 -0
- package/src/plan-format/dependencies.ts +9 -6
- package/src/plan-format/index.ts +1 -0
- package/src/plan-format/short-names.ts +71 -0
- package/src/plan-format/waiting.ts +22 -4
- package/src/plans/appointment-rows.ts +83 -0
- package/src/plans/ask-coordinator.ts +111 -0
- package/src/plans/ask-target.ts +36 -0
- package/src/plans/board-close.ts +85 -0
- package/src/plans/child-stop.ts +51 -0
- package/src/plans/closable-records.ts +34 -0
- package/src/plans/command.ts +3 -2
- package/src/plans/fetch.ts +26 -3
- package/src/plans/frame.ts +5 -12
- package/src/plans/git.ts +54 -5
- package/src/plans/groomed.ts +27 -0
- package/src/plans/herd-claim.ts +173 -0
- package/src/plans/herd-memory.ts +36 -25
- package/src/plans/lane-plans.ts +44 -13
- package/src/plans/lane-summary.ts +253 -45
- package/src/plans/layout-phase.ts +36 -11
- package/src/plans/layout-summary.ts +89 -18
- package/src/plans/layout.ts +502 -98
- package/src/plans/link-chips.ts +23 -4
- package/src/plans/live.ts +178 -23
- package/src/plans/next-rows.ts +44 -0
- package/src/plans/phase-ids.ts +8 -0
- package/src/plans/phase-source.ts +15 -0
- package/src/plans/plan-cache.ts +28 -0
- package/src/plans/plan-heads.ts +54 -0
- package/src/plans/planned.ts +22 -0
- package/src/plans/pull-requests.ts +17 -2
- package/src/plans/question-records.ts +48 -0
- package/src/plans/questions-read.ts +13 -0
- package/src/plans/read-cache.ts +8 -0
- package/src/plans/record-id.ts +4 -0
- package/src/plans/restart-decision.ts +13 -4
- package/src/plans/row-actions.ts +52 -0
- package/src/plans/row-focus.ts +148 -0
- package/src/plans/row-targets.ts +7 -0
- package/src/plans/selection.ts +111 -18
- package/src/plans/sent-files-read.ts +6 -15
- package/src/plans/sent-files.ts +7 -14
- package/src/plans/settings.ts +12 -1
- package/src/plans/signalled-phase.ts +42 -0
- package/src/plans/signals-read.ts +12 -4
- package/src/plans/snapshot.ts +162 -81
- package/src/plans/source-asked.ts +19 -0
- package/src/plans/source-prefix.ts +17 -0
- package/src/plans/source-rows.ts +188 -0
- package/src/plans/sprint-export.ts +11 -11
- package/src/plans/sprint-page.ts +5 -5
- package/src/plans/subagent-phases.ts +95 -0
- package/src/plans/subagent-tasks.ts +51 -0
- package/src/plans/subagents-read.ts +66 -17
- package/src/plans/subagents.ts +64 -6
- package/src/plans/supervisor.ts +14 -4
- package/src/plans/symbols.ts +3 -0
- package/src/plans/task-name.ts +34 -0
- package/src/plans/texts.ts +48 -6
- package/src/plans/tones.ts +30 -0
- package/src/plans/view.ts +25 -11
- package/src/plans/waiting-click.ts +295 -35
- package/src/plans/waiting-records.ts +39 -0
- package/src/plans/waiting-window.ts +8 -0
- package/src/preview/command.ts +25 -3
- package/src/shared/private-location.ts +89 -0
- package/src/shared/stat-cache.ts +48 -0
- package/src/sync/kit-source.ts +29 -10
- package/src/sync/kit.ts +2 -0
- package/src/sync/manifest.ts +2 -0
- package/src/sync/plan-ask-rules.ts +94 -0
- package/src/sync/plan-hooks.ts +2 -0
- package/src/sync/render.ts +3 -3
- package/src/sync/settings-hooks.ts +4 -1
- package/src/sync/sync-plan.ts +1 -0
- package/src/sync/sync.ts +24 -3
- package/src/task-signals/claude-read.ts +27 -10
- package/src/terminal/text.ts +16 -3
- package/src/terminal/types.ts +4 -0
- package/src/version/skill-diff.ts +46 -0
- package/src/vocabulary/index.ts +26 -6
- package/src/waiting/command.ts +22 -7
- package/src/watch/appointments.ts +1 -2
- package/src/watch/asking-lanes.ts +40 -0
- package/src/watch/base-tip.ts +11 -0
- package/src/watch/command.ts +330 -105
- package/src/watch/heartbeat-progress.ts +6 -18
- package/src/watch/kit-update.ts +28 -9
- package/src/watch/lane-name.ts +6 -0
- package/src/watch/lane-progress.ts +40 -8
- package/src/watch/lane-report-file.ts +20 -5
- package/src/watch/lane-report.ts +32 -4
- package/src/watch/lane-sources.ts +31 -3
- package/src/watch/main-checkout.ts +34 -0
- package/src/watch/plan-badges-read.ts +22 -9
- package/src/watch/plan-badges.ts +10 -2
- package/src/watch/pull-requests.ts +6 -2
- package/src/watch/reference-paths.ts +87 -0
- package/src/watch/report-questions.ts +4 -3
- package/src/watch/running-subagents.ts +43 -0
- package/src/watch/skill-change.ts +124 -32
- package/src/watch/source-change.ts +48 -0
- package/src/watch/source-entries.ts +55 -0
- package/src/watch/source-fields.ts +1 -0
- package/src/watch/source-statuses.ts +60 -0
- package/src/watch/source-tickets.ts +21 -1
- package/src/watch/sources.ts +47 -4
- package/src/watch/stream-output.ts +4 -3
- package/src/watch/task-parallel-auto.ts +208 -0
- package/src/watch/task-parallel-data-paths.ts +46 -0
- package/src/watch/task-parallel-input.ts +5 -15
- package/src/watch/task-parallel-read.ts +3 -1
- package/src/watch/task-parallel.ts +36 -7
- package/src/watch/task-signal-missing.ts +69 -0
- package/src/watch/task-signal-read.ts +29 -0
- package/src/watch/texts.ts +10 -0
- package/src/watch/update-available.ts +6 -3
- package/src/watch/watch-events.ts +23 -0
- package/src/watch/watcher-lock.ts +25 -29
- package/kit/hooks/hooks/merge-guard/plan-approval-record.ts +0 -23
- package/kit/hooks/hooks/merge-guard/plan-approval-sources.ts +0 -196
- package/kit/hooks/hooks/merge-guard/plan-approval.ts +0 -168
- package/kit/hooks/hooks/merge-guard/plan-growth.ts +0 -40
- package/kit/hooks/hooks/merge-guard/plan-pointers.ts +0 -194
- package/kit/hooks/hooks/shared/command-text-runners.ts +0 -71
- package/kit/hooks/hooks/shared/plan-open-phases.ts +0 -114
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,55 @@
|
|
|
2
2
|
|
|
3
3
|
What changed for people who use jackherd, newest first.
|
|
4
4
|
|
|
5
|
+
## 1.11.0
|
|
6
|
+
|
|
7
|
+
- **The herd lists your sources.** A `watch.sources` entry that is no ticket gets a row in a `Sources` block: when it last ran, since when it fails (red mark), its newest report (amber mark while it is under a day old); a click opens the report's URL. `/jh-follow` and `recipes/sources.md` say how.
|
|
8
|
+
- **The colours of the herd are configurable.** `plans.tones` names the tone of each role (`waiting`, `new`, `running`, `resting`) from amber, teal, grey, red, green, blue and magenta; a source may carry its own `tone` for its new reports. The defaults are the colours it had.
|
|
9
|
+
- **A row from a source says which one.** `watch.sources[].label` (at most 40 characters, one line; without it the source's name) is put before a "Waiting for you" row whose `Origin` cell names the source, as `<label>: <row>`.
|
|
10
|
+
- **"Waiting for you" rows have `[done]`, the appointments have `[done]`, `[run]` and `[move]`.** `[done]` closes the row (the board's status cell, a sent file's record), `[run]` asks the coordinator to run the appointment now, `[move]` to ask you for a new time.
|
|
11
|
+
- **New blocks and cells in the herd.** `Next` shows the board's next section; a resting lane says `waits on: …` or `after: …`; `groomed 3d ago` beside the clock (amber from eight days) from the board-grooming appointment; `planned` shows the next phase per plan, with `stale?` once its plan file has not changed on the base branch for 14 days.
|
|
12
|
+
- **`jh mermaid <file>` checks the diagrams of a pull request text.** An edge label between dashes (`-- text -->`) or a pipe label without quotes makes GitHub show `Lexical error` instead of the diagram; the command exits 1 with the line. The pull request rule now says to write `-->|"label"|` and to run it before `gh pr create` or `gh pr edit`.
|
|
13
|
+
- **A report that says "Keine offenen." asks nothing.** The watcher no longer counts it as a question, and a bold or listed "None." does not either.
|
|
14
|
+
- **A note in the write set no longer widens it to the whole repository.** A backticked config key such as `watch.sources[].label` in the `Writes` cell of a plan's dependency table is no path, so `jh lane prompt` lists only the real folders.
|
|
15
|
+
- **One colour rule for the buttons.** The buttons no longer wear the colour of the row's mark: amber and bold in "Waiting for you", the normal foreground colour in the other blocks, dim only where nothing is left to do (an entry that says `↑ asked`).
|
|
16
|
+
- **A source with several entries opens on a click.** The `Sources` block shows one folded row per source (amber only for a new entry that no row of "Waiting for you" asks about); opened, it lists up to five entries with title, count (`map.count`, new) and time, then `+<n> more`. A click on an entry opens its `url`, `[ask]` asks the coordinator to look at exactly that entry, and an entry that "Waiting for you" already asks about is dim and says `↑ asked`. The watcher keeps the last 20 entries of such a source.
|
|
17
|
+
- **A question put off twice stays one open question.** The `open-question` hook writes no second record while one with the same text is still open, so asking it again with `[ask]` and answering "later" again leaves a single row.
|
|
18
|
+
- **A click folds the ticked tasks again.** The listed ticked tasks of a phase get a line `▾ <n> ticked · click or a folds them` above them; before, only `a` closed the list that a click had opened. The key hint and the legend name both.
|
|
19
|
+
- **`jh lane prompt` keeps your additions and names no contested phase.** What you write below the marker line at the end of the prompt file stays through every new writing, `--handover` included. A phase that two open rows of the board name comes into neither prompt; the command prints it and a lane left with nothing is refused.
|
|
20
|
+
- **The row under the mouse or the arrows is marked, everywhere.** Any clickable row of the herd (lane, phase, ticked line, `waiting`, `planned`, and the rows of `Waiting for you`, `Next`, `Appointments` and `Sources`) gets a light background and a `❯` in front, and its buttons turn bold; the background joins the text and its buttons across the full width. The herd now asks the terminal for mouse movement and redraws only when the row under the mouse changes. `↑↓` also walks the rows of the blocks on top; enter on one asks, opens or expands it, and never presses `[done]` or `[run]`. The legend names it.
|
|
21
|
+
- **Links are bracket buttons, and the mouse bolds only the one it is on.** The links under a lane (`[↗ #<n>] [📄 Plan] [✦ title]`) lose the grey background and read like `[ask]`: a square bracket means a click does something. `… checks` stays plain text, amber and dark red badges stay badges. An artifact link shows its title (the link text, the bold label before it, else the text of its line) instead of "Artifact". With the mouse over a row only the bracket under it turns bold; with the arrows the whole row is the unit. A line of links is marked by the mouse, not walked by the arrows.
|
|
22
|
+
- **The README follows a source from the command to your answer.** A short section with a diagram: source, watcher, coordinator, "Waiting for you", you.
|
|
23
|
+
|
|
24
|
+
## 1.10.0
|
|
25
|
+
|
|
26
|
+
- **`jh sync` writes the ask rules the merge guard left behind.** A project sync adds `permissions.ask` rules for `gh run rerun` and the `gh api` writes that merge, write a file, dispatch or rerun a workflow, or move a ref; it records them in the lock, removes one only when the kit drops it and only if a kit shipped it, and leaves your own rules alone. Claude Code applies a matching ask rule even when a hook answers `allow`.
|
|
27
|
+
- **A standing approval replaces the plan approval.** The coordinator asks once per plan with an end time, at most 24 hours ahead; until then the merge guard lets the plan's lane pull requests merge on green checks, except workflows, migrations, env files and the guards' own files (hooks, settings, the jackherd config, git hooks). It lives in that chat only: after a hand-over the new chat asks again. The plan approval, its hook and its pointers under `.jackherd/approvals/plans/` are gone.
|
|
28
|
+
- **`guard.planApproval` is now `guard.alwaysAsk` and `guard.requiredChecks`.** The old key is still read until 2.0.0, so your config keeps working.
|
|
29
|
+
- **A lane that works without reporting its task is noticed.** A new `PostToolUse` hook `task-hint` reminds a lane once per task to run `jh task start` (off with `hints.taskSignal: false`); the watcher reports `lane <name> no task signal (P<n>)` once per lane and phase after `watch.taskSignalMinutes` (default 10) of work. The herd takes the current phase from the lane's newest reported task, else from its branch name, and a phase with a signal never reads `next`.
|
|
30
|
+
- **The herd and the watcher read ticked boxes from open pull requests.** A phase whose pull request ticks it further shows that count, not the one from the base branch; `jh lane prompt` reads the plan from the lane's worktree and leaves out a phase finished in either copy. Pull request heads are fetched into `refs/jackherd/pr/<n>`, apart from your branches.
|
|
31
|
+
- **`jh lane close <lane> [--dry-run]` closes a finished lane in one run.** It first checks that nothing is lost and lists every reason it refuses: the board does not name the lane, its branch has no merged pull request whose merge commit holds the same tree, the worktree holds anything beyond `node_modules`, the `.worktreeinclude` files and known build output, the hand-over directory is not empty, an agent still works in it, or the command runs inside it. Then it exits the agent, checks again, removes the worktree (never forced) and the herdr workspace, deletes the branch at the checked head and marks the board rows with a history row. `--dry-run` only checks. `jh sync` adds ask rules, so Claude Code asks before every call, `--dry-run` included. The watcher's `plan finished` line names the dry run, and the orchestrate skill shrinks its closing steps to the command.
|
|
32
|
+
- **The herd shows a lane's subagents on their task.** A lane's own review ran as a subagent the herd never listed. Now the subagents of the lane's worktree count in the heartbeat, a review sits on the gate item that names its type (or shows `▶ Subagent: <description>`), and a subagent whose description starts with an open task's short name sits on that task. `task-hint` also reminds of the task signal when a subagent starts. An opened task shows its short name once.
|
|
33
|
+
- **The watcher reminds you when the main checkout is out of date.** While it lags behind `origin/<base>` or has another branch or a detached head checked out, every report and heartbeat carries a line (`main checkout behind origin/<base> by <n> (git merge --ff-only origin/<base>)`, `main checkout on <branch>, not <base>`). A watcher run from source ends with `kit updated … (source changed)` when its sources change, so the herd restarts on the new code.
|
|
34
|
+
- **A question from a working lane is reported at once.** A lane waiting on background subagents ends no turn, so its question waited for them. The watcher now reports a changed questions section of a working lane as `report … questions: <n>`, once per change and not again after a restart. The `open-question` hook treats "noch nicht" and "not yet" as putting a question off.
|
|
35
|
+
- **A source keeps its interval over a restart of the watcher.** Each `watch.sources` entry remembers when it last ran, so a restart no longer runs every source at once.
|
|
36
|
+
|
|
37
|
+
- **No mandatory rule is lost when a skill gets shorter.** The kit's own test holds the 67 rules the coordinator and the lanes must follow and finds each in its skill or in a reference the skill links, so a cut that drops one turns red.
|
|
38
|
+
- **`jh check` measures what an agent loads, in words.** Every installed kit skill, reference, agent and always-loaded kit rule, each project supplement (`.claude/project/<skill>.md`, 800 words) and each skill of your own (2000 words) is counted against a word budget: a warning above it, an error above it plus 10 %. Set your own under `check.skillBudgets` in `.jackherd/config.json`, by path or glob; a key joining two paths with ` + ` budgets what loads together. The kit's test reads the same budgets, which now sit at the measured size plus at most 10 %, and every budget names a file the kit ships.
|
|
39
|
+
- **A rare watcher line names the file that handles it.** A rare event ends in `· read <skill directory>/references/<file>`, so the coordinator reads that procedure when it is needed instead of carrying it in every session; a kit update reports changed, new and deleted references like the skill. The heartbeat names the tick count of every working lane and its running subagents (`P12 7/12, 3 subagents`).
|
|
40
|
+
- **The herd shows what waits for you and the board's appointments as blocks of their own.** `Waiting for you` lists the board's open questions, the files sent to you and the dialog questions you left open (a new stop hook `open-question` records them); a click sends the coordinator a fixed line with the question's id. `Appointments` lists the open rows of the board's appointments section. Both fold together. A lane row shows the task's short name, a running reviewer makes its phase active, finished phases read `done P1–P2` beside `next P4–P5`, and the clock is `HH:MM`. One herd runs per terminal: a new one stops the older on the same tty (Linux). The herd reads session logs and plans through a cache and redraws only a changed frame.
|
|
41
|
+
- **`jh lane prompt <lane>` writes a lane's first prompt** from its board row and the plan's dependency table, in the plan's language (`--board`, `--out`, `--handover` for a restart). It tells the lane its phases, its write set, that it may tick its own tasks, and that code and tests go through Write and Edit, never a here-document in Bash.
|
|
42
|
+
- **The orchestrate skill is about a third shorter.** The coordinator loads about 7400 words instead of 11400; rare steps (setting up and closing a lane, the rare events, a draft for review, an acceptance, a lane's hand-over) moved to references under `references/` that name their section and trigger. Sections and step numbers stay.
|
|
43
|
+
- **Every file jackherd keeps outside the repository lies in a private directory it checks first.** The board page, `jh preview`'s page, the watcher's lock and state, skill diffs and the herd's lane memory go below `$XDG_RUNTIME_DIR` (when it is the user's own and closed to others) or `<tmp>/jackherd-<uid>`, written through a temporary file. The herd reads the watcher's files only from a private directory and only regular files.
|
|
44
|
+
- **The implement, plan and follow skills are shorter, and every task has a short name.** A plan task starts with `- [ ] **Name**: …`, at most 40 characters; the plan templates use it, and the herd shows it. `/follow` reads the rules every recipe follows from the recipe index.
|
|
45
|
+
- **`skill-review` reviews changed agent texts.** `jh check` routes a change to Markdown under `skills/`, `agents/`, `rules/`, `.claude/project/` and to `CLAUDE.md`/`AGENTS.md` to the new kit agent, which judges it against `writing-for-agents.md`: no-op, the same rule twice, the wrong rung, a late trigger, a negation, an open step. `jh check` warns about a new plan task without a short name or with one over 40 characters, and about a phase title over 50.
|
|
46
|
+
- **The coordinator may start parallel tasks without asking, inside a window you set.** `watch.parallelTasks.auto: { "since": "<date>", "until": "<date>" }`, at most seven days, off by default. Inside it, a `parallel tasks` proposal ends in `· auto until <day>` when every limit holds: running work in the lane, at most two extra subagents, cost under `watch.parallelTasks.maxTokens`, no path that always asks (nor a migration or env file below a written directory), read from the plan at the base branch. Otherwise it ends in `· asks: <limit>` and the coordinator asks as before. The end of the window is reported once.
|
|
47
|
+
- **The merge guard and the git guard read only the parsed script.** They count a command at a program position (past options, chains, subshells, substitutions, `env`/`sudo`/`xargs`, `sh -c`, `eval`, aliases and functions), and no longer search interpreter code, here-document data or quoted text for command words, which caused most of their false alarms. A call that only reads passes (`--help`, `gh … view`, `gh … list`), and a script the parser cannot read asks only when `gh` stands where a command starts. Deliberately accepted: `subprocess.run(['gh', 'pr', 'merge', …])` in an interpreter no longer asks.
|
|
48
|
+
- **The merge guard guards only `gh pr merge` and `gh workflow run` by default.** `gh run rerun` and the `gh api` writes left `guard.commands`; `jh sync` now writes them as ask rules (first entry above).
|
|
49
|
+
- **`merge.withoutChecks` no longer merges a file on a path that always asks** (workflows, migrations, lockfiles, env files, agent instructions, `guard.alwaysAsk`), besides `package.json` and changelogs.
|
|
50
|
+
- **A coordinator hand-over carries your standing approvals.** The hand-over script takes `--board <board> --approval "<line> <DD.MM.> <HH:MM>"` and quotes that board row word for word into the new chat's first input, so a commit you already approved is not refused there. It refuses a row without your dated mark, an end the row does not name, and an approval that has ended.
|
|
51
|
+
- **npm finds jackherd under `plan-driven` and `multi-agent` too**, beside `orchestration` and the other keywords.
|
|
52
|
+
- **The README says what jackherd adds to Claude Code** after a check against the code and the Claude Code docs, recommends herdr and names who it is for. `INSTALL.md` lists all eleven project hooks, and `/orchestrate` sends migrations and writes against a shared environment to you every time.
|
|
53
|
+
|
|
5
54
|
## 1.9.0
|
|
6
55
|
|
|
7
56
|
- **An open lane in the herd takes fewer lines, and a red pull request says what failed where.** A failed test hangs under its check as `└ ✗ <package> · <test>`, the package read from the log (the monorepo task header, else the test file), the test path dim with `›`; a cut name unfolds on a click and folds on the next. The pull request title stays on one line, a lane's only link chip moves onto its session line, and the finished phases are ranges (`✓ P1–P7, P10–P15`). The label column (SESSION, PR, NOW, NEXT, LATER, DONE, LINKS) is gone: the tree lines and each row's mark (`⎇`, `↗`, `▶`/`▷`, `✓`) say what it is, and every row under a lane gains the 9 columns the labels took. Each running phase is a branch of its own, and the other open phases share one line, `next P18–P25` (ranges, the other plans by name after them). A reported task in other words still finds its plan task, and a lane that reports a task shows no guessed `▷`. The progress column is calmer: no `◐`, the `🥣` cell on a folded lane only from `warn`, and a hidden cell keeps its width, so no bar moves; the checkbox count stands on every lane line. A folded lane's title line in a narrow pane starts in the column of the lane's name, where an open lane's branches start too. A click on a for-you row now also lands right while `now:` lines stand above it.
|
package/INSTALL.md
CHANGED
|
@@ -54,7 +54,7 @@ When `init` creates a new config, it asks:
|
|
|
54
54
|
| Use it when | the team shares the kit through the repository | the repository must stay untouched, not even untracked files |
|
|
55
55
|
| Lives in | the project's `.claude/` | `~/.claude/` |
|
|
56
56
|
| Skill names | `/plan`, `/implement`, `/orchestrate`, … | `/jh-plan`, `/jh-implement`, `/jh-orchestrate`, … |
|
|
57
|
-
| Hooks | `git-guard`, `watch-guard`, `merge-guard`, `approval-gate`, `ask-hint`, `format-on-edit` | none; `init --global` offers only a `SessionStart` update notice |
|
|
57
|
+
| Hooks | `git-guard`, `watch-guard`, `merge-guard`, `approval-gate`, `model-gate`, `model-log`, `ask-hint`, `open-question`, `sent-file`, `format-on-edit` | none; `init --global` offers only a `SessionStart` update notice |
|
|
58
58
|
| Config | `.jackherd/config.json` | `~/.jackherd/config.json`, used where a repository has none |
|
|
59
59
|
| Update | `jh sync` | `jh update` |
|
|
60
60
|
|
package/README.md
CHANGED
|
@@ -7,27 +7,33 @@
|
|
|
7
7
|
|
|
8
8
|
# Your agents write code. Jack keeps the work moving.
|
|
9
9
|
|
|
10
|
-
**Let AI do the work. Stay in control.** jackherd
|
|
10
|
+
**Let AI do the work. Stay in control.** jackherd orchestrates your coding agents, alone or as a team. You plan once, in your repository; Jack, the coordinator, runs it in parallel lanes.
|
|
11
|
+
|
|
12
|
+
He settles the small questions himself and asks only what needs you. What's running, blocked or waiting for you sits on one screen.
|
|
13
|
+
|
|
14
|
+
For developers who'd rather make the calls than babysit their agents.
|
|
15
|
+
|
|
16
|
+
**We recommend [herdr](https://herdr.dev), a terminal for coding agents:** Jack, the lanes and the watcher run there; without it, one Claude Code session plans and builds, with independent phases as parallel subagents.
|
|
11
17
|
|
|
12
18
|
Install with one command, run `/jh-start` in a repository, and it offers your first plan: [Quickstart](#quickstart).<br><img width="1" height="8" alt="" src="https://unpkg.com/jackherd/assets/icons/space.svg?v=2">
|
|
13
19
|
|
|
14
20
|
<p>
|
|
15
21
|
<img src="https://unpkg.com/jackherd/docs/workflow-dark.svg" width="720" alt="jackherd in herdr: a lane hits a question, Jack asks you as a choice, you pick, and the lane works on while the herd view counts its progress.">
|
|
16
22
|
<br>
|
|
17
|
-
<sub>
|
|
23
|
+
<sub>Jack and parallel lanes in herdr (recommended).</sub><br><img width="1" height="8" alt="" src="https://unpkg.com/jackherd/assets/icons/space.svg?v=2">
|
|
18
24
|
</p>
|
|
19
25
|
|
|
20
|
-
<p><img src="https://unpkg.com/jackherd/assets/icons/decide.svg?v=2" width="24" height="34" align="middle" alt=""> <b>You
|
|
26
|
+
<p><img src="https://unpkg.com/jackherd/assets/icons/decide.svg?v=2" width="24" height="34" align="middle" alt=""> <b>You make the calls that matter.</b><br>Jack answers what the plan or a rule already settles and records each answer on the board, where you can check it. The rest reaches you as a short choice. Approve a plan once, and its pull requests merge on green checks, except on paths you marked to always ask.</p>
|
|
21
27
|
|
|
22
|
-
<p><img src="https://unpkg.com/jackherd/assets/icons/
|
|
28
|
+
<p><img src="https://unpkg.com/jackherd/assets/icons/bark.svg?v=2" width="24" height="34" align="middle" alt=""> <b>Jack barks when something moves.</b><br>One view of the whole herd: each lane's progress, pull request and checks, and on top whatever waits for your answer. In herdr it also shows what each agent is doing and every new review comment. You stop hopping between terminals and holding the state in your head.</p>
|
|
23
29
|
|
|
24
|
-
<p><img src="https://unpkg.com/jackherd/assets/icons/
|
|
30
|
+
<p><img src="https://unpkg.com/jackherd/assets/icons/ear.svg?v=2" width="24" height="34" align="middle" alt=""> <b>Jack listens, on GitHub and beyond.</b><br>A review comment, from a teammate or a bot, goes to its lane, which fixes it with a test and answers in the thread; a judgement call comes to you. <code>/jh-follow</code> follows any tool with a CLI or an API, with recipes for Jira, Linear, Sentry and status pages as a head start, and Jack reports changes. Runs in herdr.</p>
|
|
25
31
|
|
|
26
|
-
<p><img src="https://unpkg.com/jackherd/assets/icons/
|
|
32
|
+
<p><img src="https://unpkg.com/jackherd/assets/icons/lanes.svg?v=2" width="24" height="34" align="middle" alt=""> <b>Parallel where it pays.</b><br>The plan says what each phase writes and waits for, and jackherd works out what can run side by side: independent phases as subagents in one session, bigger ones in a lane of their own in herdr, with its own branch and worktree. Where more could run in parallel at little cost, Jack suggests it. He keeps the merge order and has the others rebase after each merge.</p>
|
|
27
33
|
|
|
28
|
-
<p><img src="https://unpkg.com/jackherd/assets/icons/plan.svg?v=2" width="24" height="34" align="middle" alt=""> <b>One workflow
|
|
34
|
+
<p><img src="https://unpkg.com/jackherd/assets/icons/plan.svg?v=2" width="24" height="34" align="middle" alt=""> <b>One workflow, solo or team.</b><br>Plans, boards and Jack's decisions live in your repository, so everyone sees what was planned, what was settled and what comes next, and workflow changes go through your usual review. <code>jh init</code> adds the skills, rules and guard hooks through Claude Code's own project settings.</p>
|
|
29
35
|
|
|
30
|
-
<p><img src="https://unpkg.com/jackherd/assets/icons/bowl.svg?v=2" width="24" height="34" align="middle" alt=""> <b>
|
|
36
|
+
<p><img src="https://unpkg.com/jackherd/assets/icons/bowl.svg?v=2" width="24" height="34" align="middle" alt=""> <b>Pick up where you left off.</b><br>The ticked-off plan and the board carry the state, not the chat. A lane whose context runs high continues in a fresh chat at the end of its phase; Jack hands himself over the same way.</p>
|
|
31
37
|
|
|
32
38
|
## Quickstart
|
|
33
39
|
|
|
@@ -40,7 +46,7 @@ Install with one command, run `/jh-start` in a repository, and it offers your fi
|
|
|
40
46
|
Already in a coding agent? Paste this instead:
|
|
41
47
|
|
|
42
48
|
```text
|
|
43
|
-
Install jackherd by following https://unpkg.com/jackherd/INSTALL.md. Ask me the setup questions it lists; herdr is
|
|
49
|
+
Install jackherd by following https://unpkg.com/jackherd/INSTALL.md. Ask me the setup questions it lists; herdr is recommended, not required.
|
|
44
50
|
```
|
|
45
51
|
2. **Start Claude Code in a repository.**
|
|
46
52
|
|
|
@@ -57,7 +63,7 @@ Install with one command, run `/jh-start` in a repository, and it offers your fi
|
|
|
57
63
|
```text
|
|
58
64
|
/jh-implement docs/plans/<plan>.md phase 1
|
|
59
65
|
```
|
|
60
|
-
5. **Run phases in parallel with herdr (
|
|
66
|
+
5. **Run phases in parallel with herdr (recommended).** Lanes, the full herd view, review-comment fixes and ticket reports need it. In Claude Code inside herdr, hand Jack the board:
|
|
61
67
|
|
|
62
68
|
```text
|
|
63
69
|
/jh-orchestrate docs/plans/board-<name>/board.md
|
|
@@ -65,6 +71,21 @@ Install with one command, run `/jh-start` in a repository, and it offers your fi
|
|
|
65
71
|
|
|
66
72
|
By hand (Bun 1.3+): `bun add -g jackherd` or `npm install -g jackherd`, then `jh init --global` for yourself, or `jh init` in a repository to give your team the same skills and guard hooks. → [INSTALL.md](https://unpkg.com/jackherd/INSTALL.md)
|
|
67
73
|
|
|
74
|
+
## Follow anything outside GitHub
|
|
75
|
+
|
|
76
|
+
`/jh-follow` turns a ticket, an error log or a status page into something Jack acts on. It writes the source to `watch.sources` after a dry run and your yes; from then on a change takes this path:
|
|
77
|
+
|
|
78
|
+
```mermaid
|
|
79
|
+
flowchart LR
|
|
80
|
+
source["Source<br/>ticket, error log, status page"] -->|"new or changed entry"| watcher["jh watch"]
|
|
81
|
+
watcher -->|"=== source … report"| coordinator["Jack"]
|
|
82
|
+
coordinator -->|"board row, origin = source"| waiting["Waiting for you<br/>Error log · Checkout: …"]
|
|
83
|
+
waiting -->|"[ask]"| coordinator
|
|
84
|
+
coordinator -->|"asks you, then a lane works it"| you["You"]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
The herd lists each source that is no ticket in a `Sources` block (when it ran, since when it fails, its newest report, a click opens it), and a row that came from a source starts with its `label`. Details and every field: [recipes](https://unpkg.com/jackherd/recipes/sources.md).
|
|
88
|
+
|
|
68
89
|
## In detail
|
|
69
90
|
|
|
70
91
|
<details>
|
|
@@ -76,27 +97,25 @@ By hand (Bun 1.3+): `bun add -g jackherd` or `npm install -g jackherd`, then `jh
|
|
|
76
97
|
| --- | --- | --- |
|
|
77
98
|
| Starting a ready phase in a lane | Commits, push and pull request, once per pull request | Writing lane code himself |
|
|
78
99
|
| Answering what the plan or a rule settles, on record in the board | Every other decision a lane raises | Merging a pull request on a path that always asks, without asking you |
|
|
79
|
-
| Merging a pull
|
|
80
|
-
|
|
|
81
|
-
| Handing a
|
|
100
|
+
| Merging a plan's pull requests on green checks for a while | A standing approval, until a time you pick | Storing a permission on your behalf |
|
|
101
|
+
| Having the lanes rebase after a merge | Migrations and writes against a shared environment | |
|
|
102
|
+
| Handing a lane over to a fresh chat at the end of a phase, once its context runs high | Closing a lane | |
|
|
82
103
|
|
|
83
104
|
</details>
|
|
84
105
|
|
|
85
106
|
<details>
|
|
86
107
|
<summary><b>Guarded commands and merges</b></summary>
|
|
87
108
|
|
|
88
|
-
|
|
109
|
+
A project install adds two hooks to Claude Code's [permission rules](https://code.claude.com/docs/en/permissions):
|
|
89
110
|
|
|
90
|
-
|
|
111
|
+
- **`merge-guard`** asks before `gh pr merge` and `gh workflow run`, also behind options, a chain or `sh -c`. Calls that only read pass.
|
|
112
|
+
- **`git-guard`** refuses hidden commits and pushes (`git -C … push`), pushes to the base branch, force pushes without lease, skipped hooks and hard resets.
|
|
91
113
|
|
|
92
|
-
|
|
93
|
-
{
|
|
94
|
-
"guard": { "planApproval": { "exceptPaths": ["src/billing/**", "src/auth/**"] } },
|
|
95
|
-
"merge": { "withoutChecks": ["docs/**/*.md"] }
|
|
96
|
-
}
|
|
97
|
-
```
|
|
114
|
+
`jh sync` also adds ask rules for check reruns and `gh api` writes.
|
|
98
115
|
|
|
99
|
-
|
|
116
|
+
A merge passes without a question on green checks after self-merge, or under a standing approval: one plan's lanes until a time you pick, at most 24 hours; workflows, migrations, env files and the guards' own files still ask. A pull request whose files all match `merge.withoutChecks`, such as docs only, skips question and checks, unless a file lies on a path that always asks.
|
|
117
|
+
|
|
118
|
+
The guards catch mistakes, not intent; for that, use branch protection. The hooks need Bun; a global install ships none.
|
|
100
119
|
|
|
101
120
|
</details>
|
|
102
121
|
|
|
@@ -115,8 +134,8 @@ A **plan** is Markdown with phases, checkbox tasks, a model and a review gate pe
|
|
|
115
134
|
| `/jh-implement` | builds and tests one phase and ticks it off; independent phases run as parallel subagents |
|
|
116
135
|
| `/jh-orchestrate` | runs a board's lanes in herdr, as Jack |
|
|
117
136
|
| `/jh-pre-commit` | runs `jh check` and the reviewers, proposes the commit message and asks before committing |
|
|
118
|
-
| `/jh-follow` | follows a ticket
|
|
119
|
-
| `/jh-diagnose` | turns a bug into a failing command,
|
|
137
|
+
| `/jh-follow` | follows something outside GitHub: a ticket, error logs, a status page |
|
|
138
|
+
| `/jh-diagnose` | turns a bug into a failing command, fixes it with a regression test |
|
|
120
139
|
|
|
121
140
|
The global install names the skills with a `jh-` prefix; a project install uses none, unless the project already has skills of the same names.
|
|
122
141
|
|
|
@@ -125,26 +144,33 @@ The global install names the skills with a `jh-` prefix; a project install uses
|
|
|
125
144
|
<details>
|
|
126
145
|
<summary><b>Which model runs each phase</b></summary>
|
|
127
146
|
|
|
128
|
-
Each phase in the plan names its model: the planning model (Opus by default) where a mistake is expensive, such as data, security or a migration, and the cheaper implementation model (Sonnet by default) for everything else. `/jh-implement` and Jack start each phase on its model
|
|
147
|
+
Each phase in the plan names its model: the planning model (Opus by default) where a mistake is expensive, such as data, security or a migration, and the cheaper implementation model (Sonnet by default) for everything else. `/jh-implement` and Jack start each phase on its model. In a project install, a hook stops a phase's subagent started on a weaker one, and the watcher tells Jack about a lane that runs on one. Set the models per role under `models` in the config.
|
|
129
148
|
|
|
130
149
|
</details>
|
|
131
150
|
|
|
132
151
|
<details>
|
|
133
|
-
<summary><b>The watcher and
|
|
152
|
+
<summary><b>The watcher and sources outside GitHub</b></summary>
|
|
134
153
|
|
|
135
|
-
Jack doesn't watch the terminals himself. `jh watch`, which he starts, wakes him when a lane is blocked or done, a check turns red, a pull request gets feedback, a lane's context fills up
|
|
154
|
+
Jack doesn't watch the terminals himself. `jh watch`, which he starts, wakes him when a lane is blocked or done, a check turns red, a pull request gets feedback, a lane's context fills up, a lane waits for an approval or works for ten minutes without reporting its task; deploys and previews too, when configured.
|
|
136
155
|
|
|
137
|
-
`/jh-follow PROJ-123` adds a ticket, an issue
|
|
156
|
+
`/jh-follow PROJ-123` adds anything a command can print as JSON: a ticket, an issue, error logs, a status page. It checks the tool and its login, shows you a dry run and writes the source to `watch.sources` after your yes. A token stays in the environment, read by a small Bun script, never in an argument. Each source runs on its own interval, kept across a restart of the watcher. The [recipes](https://unpkg.com/jackherd/recipes/README.md) cover Jira, Linear, GitHub issues and Projects, Sentry and status pages. The reports need herdr; a source can be set up and dry-run without it.
|
|
138
157
|
|
|
139
158
|
</details>
|
|
140
159
|
|
|
141
160
|
<details>
|
|
142
161
|
<summary><b>The herd view</b></summary>
|
|
143
162
|
|
|
144
|
-
`jh herd` shows every lane of a board:
|
|
163
|
+
`jh herd` shows every lane of a board: plan progress, pull request and checks, and with herdr agent state and context fill. It changes nothing in your repository.
|
|
164
|
+
|
|
165
|
+
On top, **Waiting for you** lists what needs your answer: a file or Artifact sent to you (`📎`) and open questions from the board or a session's dialog (`?`). **Appointments** below it shows the dated rows of the board's appointments section. A click folds either block.
|
|
145
166
|
|
|
146
167
|
```text
|
|
147
168
|
🐾 Board 01 11:38
|
|
169
|
+
▾ Waiting for you · 2 ──────────────────────────────────────────────────────────
|
|
170
|
+
▌ 📎 search-box-mockup.html
|
|
171
|
+
▌ ? Ship the fee change before Friday? [ask]
|
|
172
|
+
▾ Appointments · 1 ─────────────────────────────────────────────────────────────
|
|
173
|
+
▌ ◷ Mo 09:00 Release 1.4 to production
|
|
148
174
|
────────────────────────────────────────────────────────────────────────────────
|
|
149
175
|
▾ ◆ search-ui blocked ██████░░░░ 6/9
|
|
150
176
|
├─ Search box docs ⎇ feat/search-ui ↑1 ±4 🥣 62 %
|
|
@@ -164,7 +190,7 @@ Jack doesn't watch the terminals himself. `jh watch`, which he starts, wakes him
|
|
|
164
190
|
────────────────────────────────────────────────────────────────────────────────
|
|
165
191
|
· no agent (1) docs-site 1/3
|
|
166
192
|
────────────────────────────────────────────────────────────────────────────────
|
|
167
|
-
↑↓ select →← open a
|
|
193
|
+
↑↓ select →← open a/click ticked tasks s html q quit ? help
|
|
168
194
|
```
|
|
169
195
|
|
|
170
196
|
</details>
|
|
@@ -180,22 +206,29 @@ Jack doesn't watch the terminals himself. `jh watch`, which he starts, wakes him
|
|
|
180
206
|
| `jh check` | types, lint and tests of what you touched, plus the plan and board checks (`--skip-slow`, `--parallel <plan>`) |
|
|
181
207
|
| `jh herd` | the live view (`--once`, `--lane <name>`) |
|
|
182
208
|
| `jh watch` | the watcher Jack runs |
|
|
209
|
+
| `jh lane prompt <lane>` | writes a lane's first prompt from its board row and its plan (`--out`, `--handover`); your additions below the marker line at its end stay |
|
|
210
|
+
| `jh lane close <lane>` | removes a finished lane: agent, worktree, herdr workspace and branch, and marks the board; first checks that nothing is lost, and refuses with every reason; `--dry-run` only checks. Claude Code asks before each call |
|
|
183
211
|
| `jh preview <file>` | renders a Markdown file through the GitHub API into a preview in GitHub and npm style |
|
|
184
212
|
| `jh waiting` | the files and Artifacts sent to you that you have not answered yet (`close <id>…` or `close --all` once you have) |
|
|
185
213
|
| `jh context` | how full an agent's context is, as JSON |
|
|
186
214
|
| `jh config` | the commands and the base branch the repository uses |
|
|
187
215
|
|
|
188
|
-
Without a global install, run them as `bunx jackherd <command>`. The config is `.jackherd/config.json` in a project and `~/.jackherd/config.json` globally, checked against [one schema](https://unpkg.com/jackherd/schemas/jackherd.schema.json) your editor completes. What usually needs setting:
|
|
216
|
+
Without a global install, run them as `bunx jackherd <command>`. The config is `.jackherd/config.json` in a project and `~/.jackherd/config.json` globally, checked against [one schema](https://unpkg.com/jackherd/schemas/jackherd.schema.json), which your editor completes in the project config. What usually needs setting:
|
|
189
217
|
|
|
190
218
|
```json
|
|
191
219
|
{
|
|
192
220
|
"responseLanguage": "de",
|
|
193
221
|
"terminal": { "adapter": "herdr" },
|
|
194
222
|
"lanes": { "copy": ["apps/web/.env"] },
|
|
195
|
-
"check": {
|
|
223
|
+
"check": {
|
|
224
|
+
"reviewerRoutes": [{ "reviewer": "jh-uncle-bob", "globs": ["src/**/*.ts"], "why": "Code" }],
|
|
225
|
+
"skillBudgets": { ".claude/skills/release/SKILL.md": 1200 }
|
|
226
|
+
}
|
|
196
227
|
}
|
|
197
228
|
```
|
|
198
229
|
|
|
230
|
+
`jh check` counts the words of every skill, agent and always-loaded rule an agent reads, and warns above its budget; `check.skillBudgets` sets your own, by path or glob. `watch.parallelTasks.auto` (`since`, `until`, at most seven days) lets Jack start up to two extra subagents in a running lane without asking, under the cost limit and away from paths that always ask; he switches it on only after asking you.
|
|
231
|
+
|
|
199
232
|
</details>
|
|
200
233
|
|
|
201
234
|
<details>
|
|
@@ -19,9 +19,13 @@ var SELF_MERGE_LABEL = {
|
|
|
19
19
|
[PLAN_LANGUAGE.en]: "Approve, and merge it yourself after green checks",
|
|
20
20
|
[PLAN_LANGUAGE.de]: "Freigeben, und nach gr\xFCnen Checks selbst mergen"
|
|
21
21
|
};
|
|
22
|
-
var
|
|
23
|
-
[PLAN_LANGUAGE.en]: { approve: "Approve
|
|
24
|
-
[PLAN_LANGUAGE.de]: { approve: "
|
|
22
|
+
var STANDING_APPROVAL_TEXTS = {
|
|
23
|
+
[PLAN_LANGUAGE.en]: { approve: "Approve standing", until: "until" },
|
|
24
|
+
[PLAN_LANGUAGE.de]: { approve: "Stehend freigeben", until: "bis" }
|
|
25
|
+
};
|
|
26
|
+
var LANE_PROMPT_OPENING = {
|
|
27
|
+
[PLAN_LANGUAGE.en]: "You are the lane",
|
|
28
|
+
[PLAN_LANGUAGE.de]: "Du bist die Spur"
|
|
25
29
|
};
|
|
26
30
|
var APPROVAL_REASONS = {
|
|
27
31
|
pending: "Approval pending with the coordinator; retry the same call once it is approved.",
|
|
@@ -36,15 +40,21 @@ var APPOINTMENT_VOCABULARY = {
|
|
|
36
40
|
heading: "Termine",
|
|
37
41
|
columns: { when: "Wann", action: "Aktion", origin: "Herkunft", status: "Stand" },
|
|
38
42
|
statusAlso: ["Status"],
|
|
39
|
-
open: ["offen"]
|
|
43
|
+
open: ["offen"],
|
|
44
|
+
grooming: "board-pflege"
|
|
40
45
|
},
|
|
41
46
|
[PLAN_LANGUAGE.en]: {
|
|
42
47
|
heading: "Appointments",
|
|
43
48
|
columns: { when: "When", action: "Action", origin: "Origin", status: "Status" },
|
|
44
49
|
statusAlso: [],
|
|
45
|
-
open: ["open"]
|
|
50
|
+
open: ["open"],
|
|
51
|
+
grooming: "board grooming"
|
|
46
52
|
}
|
|
47
53
|
};
|
|
54
|
+
var NEXT_VOCABULARY = {
|
|
55
|
+
[PLAN_LANGUAGE.de]: { heading: "Als N\xE4chstes" },
|
|
56
|
+
[PLAN_LANGUAGE.en]: { heading: "Next" }
|
|
57
|
+
};
|
|
48
58
|
var WAITING_VOCABULARY = {
|
|
49
59
|
[PLAN_LANGUAGE.de]: {
|
|
50
60
|
heading: "Wartet auf dich",
|
|
@@ -156,9 +166,11 @@ export {
|
|
|
156
166
|
RESPONSE_ADDRESS,
|
|
157
167
|
ADDRESS_FORM,
|
|
158
168
|
SELF_MERGE_LABEL,
|
|
159
|
-
|
|
169
|
+
STANDING_APPROVAL_TEXTS,
|
|
170
|
+
LANE_PROMPT_OPENING,
|
|
160
171
|
APPROVAL_TEXTS,
|
|
161
172
|
APPOINTMENT_VOCABULARY,
|
|
173
|
+
NEXT_VOCABULARY,
|
|
162
174
|
WAITING_VOCABULARY,
|
|
163
175
|
isPlanLanguage,
|
|
164
176
|
PLAN_STATUS,
|
package/dist/config.d.ts
CHANGED
|
@@ -34,11 +34,22 @@ declare const sourceSchema: z.ZodObject<{
|
|
|
34
34
|
body: z.ZodOptional<z.ZodString>;
|
|
35
35
|
author: z.ZodOptional<z.ZodString>;
|
|
36
36
|
status: z.ZodOptional<z.ZodString>;
|
|
37
|
+
count: z.ZodOptional<z.ZodString>;
|
|
37
38
|
}, z.core.$catchall<z.ZodString>>;
|
|
38
39
|
ignoreAuthors: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
39
40
|
reportLimit: z.ZodDefault<z.ZodNumber>;
|
|
41
|
+
label: z.ZodOptional<z.ZodString>;
|
|
40
42
|
lane: z.ZodOptional<z.ZodString>;
|
|
41
43
|
ticket: z.ZodOptional<z.ZodBoolean>;
|
|
44
|
+
tone: z.ZodOptional<z.ZodEnum<{
|
|
45
|
+
amber: "amber";
|
|
46
|
+
teal: "teal";
|
|
47
|
+
grey: "grey";
|
|
48
|
+
red: "red";
|
|
49
|
+
green: "green";
|
|
50
|
+
blue: "blue";
|
|
51
|
+
magenta: "magenta";
|
|
52
|
+
}>>;
|
|
42
53
|
reportOn: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
43
54
|
}, z.core.$strict>;
|
|
44
55
|
declare const jackherdConfigSchema: z.ZodObject<{
|
|
@@ -110,6 +121,44 @@ declare const jackherdConfigSchema: z.ZodObject<{
|
|
|
110
121
|
alertTokens: z.ZodDefault<z.ZodNumber>;
|
|
111
122
|
}, z.core.$strict>>;
|
|
112
123
|
}, z.core.$strict>>;
|
|
124
|
+
tones: z.ZodPrefault<z.ZodObject<{
|
|
125
|
+
waiting: z.ZodDefault<z.ZodEnum<{
|
|
126
|
+
amber: "amber";
|
|
127
|
+
teal: "teal";
|
|
128
|
+
grey: "grey";
|
|
129
|
+
red: "red";
|
|
130
|
+
green: "green";
|
|
131
|
+
blue: "blue";
|
|
132
|
+
magenta: "magenta";
|
|
133
|
+
}>>;
|
|
134
|
+
new: z.ZodDefault<z.ZodEnum<{
|
|
135
|
+
amber: "amber";
|
|
136
|
+
teal: "teal";
|
|
137
|
+
grey: "grey";
|
|
138
|
+
red: "red";
|
|
139
|
+
green: "green";
|
|
140
|
+
blue: "blue";
|
|
141
|
+
magenta: "magenta";
|
|
142
|
+
}>>;
|
|
143
|
+
running: z.ZodDefault<z.ZodEnum<{
|
|
144
|
+
amber: "amber";
|
|
145
|
+
teal: "teal";
|
|
146
|
+
grey: "grey";
|
|
147
|
+
red: "red";
|
|
148
|
+
green: "green";
|
|
149
|
+
blue: "blue";
|
|
150
|
+
magenta: "magenta";
|
|
151
|
+
}>>;
|
|
152
|
+
resting: z.ZodDefault<z.ZodEnum<{
|
|
153
|
+
amber: "amber";
|
|
154
|
+
teal: "teal";
|
|
155
|
+
grey: "grey";
|
|
156
|
+
red: "red";
|
|
157
|
+
green: "green";
|
|
158
|
+
blue: "blue";
|
|
159
|
+
magenta: "magenta";
|
|
160
|
+
}>>;
|
|
161
|
+
}, z.core.$strict>>;
|
|
113
162
|
}, z.core.$strict>>;
|
|
114
163
|
watch: z.ZodPrefault<z.ZodObject<{
|
|
115
164
|
deploy: z.ZodOptional<z.ZodObject<{
|
|
@@ -125,7 +174,12 @@ declare const jackherdConfigSchema: z.ZodObject<{
|
|
|
125
174
|
}, z.core.$strict>>;
|
|
126
175
|
parallelTasks: z.ZodPrefault<z.ZodObject<{
|
|
127
176
|
maxTokens: z.ZodDefault<z.ZodNumber>;
|
|
177
|
+
auto: z.ZodOptional<z.ZodObject<{
|
|
178
|
+
since: z.ZodISODate;
|
|
179
|
+
until: z.ZodISODate;
|
|
180
|
+
}, z.core.$strict>>;
|
|
128
181
|
}, z.core.$strict>>;
|
|
182
|
+
taskSignalMinutes: z.ZodDefault<z.ZodNumber>;
|
|
129
183
|
previews: z.ZodOptional<z.ZodObject<{
|
|
130
184
|
deployments: z.ZodDefault<z.ZodBoolean>;
|
|
131
185
|
authors: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
@@ -144,15 +198,26 @@ declare const jackherdConfigSchema: z.ZodObject<{
|
|
|
144
198
|
body: z.ZodOptional<z.ZodString>;
|
|
145
199
|
author: z.ZodOptional<z.ZodString>;
|
|
146
200
|
status: z.ZodOptional<z.ZodString>;
|
|
201
|
+
count: z.ZodOptional<z.ZodString>;
|
|
147
202
|
}, z.core.$catchall<z.ZodString>>;
|
|
148
203
|
ignoreAuthors: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
149
204
|
reportLimit: z.ZodDefault<z.ZodNumber>;
|
|
205
|
+
label: z.ZodOptional<z.ZodString>;
|
|
150
206
|
lane: z.ZodOptional<z.ZodString>;
|
|
151
207
|
ticket: z.ZodOptional<z.ZodBoolean>;
|
|
208
|
+
tone: z.ZodOptional<z.ZodEnum<{
|
|
209
|
+
amber: "amber";
|
|
210
|
+
teal: "teal";
|
|
211
|
+
grey: "grey";
|
|
212
|
+
red: "red";
|
|
213
|
+
green: "green";
|
|
214
|
+
blue: "blue";
|
|
215
|
+
magenta: "magenta";
|
|
216
|
+
}>>;
|
|
152
217
|
reportOn: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
153
218
|
}, z.core.$strict>>>;
|
|
154
219
|
}, z.core.$strict>>;
|
|
155
|
-
guard: z.ZodPrefault<z.ZodObject<{
|
|
220
|
+
guard: z.ZodPrefault<z.ZodPipe<z.ZodObject<{
|
|
156
221
|
commands: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
157
222
|
selfMerge: z.ZodPrefault<z.ZodObject<{
|
|
158
223
|
offer: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -161,16 +226,45 @@ declare const jackherdConfigSchema: z.ZodObject<{
|
|
|
161
226
|
approvals: z.ZodPrefault<z.ZodObject<{
|
|
162
227
|
waitMinutes: z.ZodDefault<z.ZodNumber>;
|
|
163
228
|
}, z.core.$strict>>;
|
|
164
|
-
|
|
165
|
-
|
|
229
|
+
alwaysAsk: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
230
|
+
requiredChecks: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
231
|
+
planApproval: z.ZodOptional<z.ZodObject<{
|
|
232
|
+
exceptPaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
166
233
|
requiredChecks: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
167
234
|
}, z.core.$strict>>;
|
|
168
|
-
}, z.core.$strict
|
|
235
|
+
}, z.core.$strict>, z.ZodTransform<{
|
|
236
|
+
requiredChecks?: string[] | undefined;
|
|
237
|
+
alwaysAsk: string[];
|
|
238
|
+
commands: string[];
|
|
239
|
+
selfMerge: {
|
|
240
|
+
offer: boolean;
|
|
241
|
+
approvalMinutes: number;
|
|
242
|
+
};
|
|
243
|
+
approvals: {
|
|
244
|
+
waitMinutes: number;
|
|
245
|
+
};
|
|
246
|
+
}, {
|
|
247
|
+
commands: string[];
|
|
248
|
+
selfMerge: {
|
|
249
|
+
offer: boolean;
|
|
250
|
+
approvalMinutes: number;
|
|
251
|
+
};
|
|
252
|
+
approvals: {
|
|
253
|
+
waitMinutes: number;
|
|
254
|
+
};
|
|
255
|
+
alwaysAsk: string[];
|
|
256
|
+
requiredChecks?: string[] | undefined;
|
|
257
|
+
planApproval?: {
|
|
258
|
+
exceptPaths?: string[] | undefined;
|
|
259
|
+
requiredChecks?: string[] | undefined;
|
|
260
|
+
} | undefined;
|
|
261
|
+
}>>>;
|
|
169
262
|
merge: z.ZodPrefault<z.ZodObject<{
|
|
170
263
|
withoutChecks: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
171
264
|
}, z.core.$strict>>;
|
|
172
265
|
hints: z.ZodPrefault<z.ZodObject<{
|
|
173
266
|
askUserQuestion: z.ZodDefault<z.ZodBoolean>;
|
|
267
|
+
taskSignal: z.ZodDefault<z.ZodBoolean>;
|
|
174
268
|
}, z.core.$strict>>;
|
|
175
269
|
check: z.ZodOptional<z.ZodObject<{
|
|
176
270
|
lintFilesCommand: z.ZodDefault<z.ZodString>;
|
|
@@ -194,6 +288,7 @@ declare const jackherdConfigSchema: z.ZodObject<{
|
|
|
194
288
|
exclude: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
195
289
|
reviewer: z.ZodDefault<z.ZodString>;
|
|
196
290
|
}, z.core.$strict>>;
|
|
291
|
+
skillBudgets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
197
292
|
looseTests: z.ZodDefault<z.ZodBoolean>;
|
|
198
293
|
}, z.core.$strict>>;
|
|
199
294
|
}, z.core.$strict>;
|