jackherd 1.13.0 → 1.15.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 +20 -0
- package/README.md +28 -38
- package/assets/icons/skills.svg +1 -0
- package/dist/config.d.ts +12 -1
- package/dist/config.js +35 -2
- package/dist/plan-format.d.ts +24 -1
- package/dist/plan-format.js +25 -5
- package/docs/plan-contract.md +84 -0
- package/docs/skills-dark.svg +15 -2
- package/docs/skills.svg +15 -2
- package/herdr-plugin/herdr-plugin.toml +1 -1
- package/herdr-plugin/restore-plans.ts +56 -6
- package/install.sh +1 -1
- package/kit/hooks/hooks/merge-guard/board-settings.ts +5 -2
- package/kit/hooks/hooks/merge-guard/pull-request.ts +28 -15
- package/kit/hooks/hooks/merge-guard/run.ts +6 -3
- package/kit/hooks/hooks/merge-guard/settings.ts +12 -1
- package/kit/hooks/hooks/model-log/transcript.ts +4 -7
- package/kit/hooks/hooks/open-question/record.ts +4 -3
- package/kit/hooks/hooks/shared/dialog-answers.ts +7 -3
- package/kit/hooks/hooks/shared/log-vocabulary.ts +13 -0
- package/kit/hooks/hooks/shared/transcript.ts +7 -4
- package/kit/hooks/hooks/task-hint/decision.ts +3 -2
- package/kit/hooks/hooks/task-hint/run.ts +2 -4
- package/kit/rules/rules/kit/pull-requests.md +1 -0
- package/kit/workflow/skills/orchestrate/SKILL.md +24 -10
- package/kit/workflow/skills/orchestrate/handover/index.ts +8 -2
- package/kit/workflow/skills/orchestrate/references/adopt-plan.md +51 -0
- package/kit/workflow/skills/orchestrate/references/events.md +6 -1
- package/kit/workflow/skills/orchestrate/references/plan-commit.md +7 -6
- package/kit/workflow/skills/start/SKILL.md +6 -2
- package/kit/workflow/skills/start/references/missing-commands.md +17 -0
- package/package.json +1 -1
- package/schemas/jackherd.schema.json +43 -0
- package/src/check/command.ts +53 -7
- package/src/check/file-kinds.ts +144 -0
- package/src/check/parallel-report.ts +10 -3
- package/src/check/plan.ts +118 -16
- package/src/check/report.ts +44 -1
- package/src/check/roots.ts +9 -0
- package/src/check/schema.ts +12 -0
- package/src/check/settings.ts +11 -3
- package/src/check/skill-budget-defaults.ts +21 -7
- package/src/check/skill-budgets.ts +49 -19
- package/src/claude/paths.ts +12 -0
- package/src/cli.ts +1 -0
- package/src/config/schema.ts +27 -0
- package/src/context/fill.ts +2 -1
- package/src/context/log-vocabulary.ts +22 -0
- package/src/context/session-log.ts +2 -1
- package/src/lane-prompt/build.ts +10 -5
- package/src/lane-prompt/command.ts +6 -1
- package/src/lane-prompt/input.ts +4 -4
- package/src/lane-prompt/texts.ts +18 -10
- package/src/plan-contract/command.ts +69 -0
- package/src/plan-contract/contract.ts +144 -0
- package/src/plan-format/dependencies.ts +1 -4
- package/src/plan-format/index.ts +4 -0
- package/src/plan-format/lanes.ts +11 -0
- package/src/plan-format/markdown.ts +6 -5
- package/src/plan-format/model-table.ts +27 -0
- package/src/plans/activity-read.ts +98 -0
- package/src/plans/ask-coordinator.ts +20 -11
- package/src/plans/lane-plans.ts +2 -1
- package/src/plans/layout.ts +49 -4
- package/src/plans/live.ts +17 -4
- package/src/plans/plan-panes.ts +25 -5
- package/src/plans/snapshot.ts +18 -8
- package/src/plans/subagents-read.ts +4 -3
- package/src/plans/subagents.ts +2 -1
- package/src/plans/texts.ts +27 -1
- package/src/settled/send.ts +80 -4
- package/src/shared/parse-json.ts +8 -0
- package/src/sync/command.ts +17 -10
- package/src/sync/foreign-skills.ts +40 -0
- package/src/sync/global-kit.ts +31 -21
- package/src/sync/init.ts +2 -2
- package/src/sync/kit-exclude.ts +39 -0
- package/src/sync/plan-file.ts +1 -1
- package/src/sync/render.ts +2 -1
- package/src/sync/report.ts +37 -2
- package/src/sync/sync-result.ts +5 -2
- package/src/sync/sync.ts +13 -5
- package/src/task-signals/claude-signals.ts +6 -5
- package/src/watch/command.ts +88 -18
- package/src/watch/lane-message.ts +1 -1
- package/src/watch/lane-progress.ts +57 -3
- package/src/watch/lane-report.ts +67 -2
- package/src/watch/lane-watch.ts +2 -8
- package/src/watch/plan-missing-read.ts +47 -0
- package/src/watch/plan-missing.ts +43 -0
- package/src/watch/reference-paths.ts +1 -0
- package/src/watch/task-parallel-touched.ts +9 -2
- package/src/watch/texts.ts +8 -0
- package/src/watch/watch-events.ts +7 -0
|
@@ -16,6 +16,7 @@ import { isLaneModels, LANE_MODEL_EVENT, type LaneModelEvent, type LaneModels }
|
|
|
16
16
|
import { isLaneParallels, LANE_PARALLEL_EVENT, type LaneParallelEvent, type LaneParallels } from './lane-parallel'
|
|
17
17
|
import { isStallState, LANE_STALLED_EVENT, type LaneStalledEvent, type StallState } from './lane-stalled'
|
|
18
18
|
import { type LaneSnapshot, type SeenSeqs, seenSeqsOf } from './lane-watch'
|
|
19
|
+
import { isPlanMissingState, PLAN_MISSING_EVENT, type PlanMissingEvent, type PlanMissingState } from './plan-missing'
|
|
19
20
|
import { emptyPreviewState, isPreviewState, PREVIEW_EVENT, type PreviewEvent, type PreviewState } from './previews'
|
|
20
21
|
import { PULL_REQUEST_STATE, type WatchedPullRequest } from './pull-requests'
|
|
21
22
|
import { emptySourceState, isSourceState, SOURCE_EVENT, type SourceEvent, type SourceState } from './sources'
|
|
@@ -60,6 +61,7 @@ export const WATCH_EVENT = {
|
|
|
60
61
|
noTaskSignal: NO_TASK_SIGNAL_EVENT,
|
|
61
62
|
laneStalled: LANE_STALLED_EVENT,
|
|
62
63
|
unlinkedArtifact: UNLINKED_ARTIFACT_EVENT,
|
|
64
|
+
planMissing: PLAN_MISSING_EVENT,
|
|
63
65
|
approval: APPROVAL_EVENT,
|
|
64
66
|
source: SOURCE_EVENT,
|
|
65
67
|
due: APPOINTMENT_EVENT.due,
|
|
@@ -122,6 +124,8 @@ export type WatchState = {
|
|
|
122
124
|
laneStalls: StallState
|
|
123
125
|
/** Per open artifact send no plan or board links: in its grace or already reported as `unlinked artifact`. */
|
|
124
126
|
unlinkedArtifacts: UnlinkedState
|
|
127
|
+
/** Per working lane whose board row links a plan the base ref lacks: the plan last reported as `plan missing on base`. */
|
|
128
|
+
planMissing: PlanMissingState
|
|
125
129
|
/** The ids of the approval requests on disk when they were last read, each reported once while it is open. */
|
|
126
130
|
approvals: string[]
|
|
127
131
|
/** Per configured source of `watch.sources`: the entries seen (`[id, fingerprint]`) and the start of a failure streak. */
|
|
@@ -185,6 +189,7 @@ export type WatchEvent =
|
|
|
185
189
|
| NoTaskSignalEvent
|
|
186
190
|
| LaneStalledEvent
|
|
187
191
|
| UnlinkedArtifactEvent
|
|
192
|
+
| PlanMissingEvent
|
|
188
193
|
| ApprovalEvent
|
|
189
194
|
| SourceEvent
|
|
190
195
|
| AppointmentEvent
|
|
@@ -224,6 +229,7 @@ export const emptyWatchState = (): WatchState => ({
|
|
|
224
229
|
noTaskSignals: {},
|
|
225
230
|
laneStalls: {},
|
|
226
231
|
unlinkedArtifacts: {},
|
|
232
|
+
planMissing: {},
|
|
227
233
|
approvals: [],
|
|
228
234
|
sources: emptySourceState(),
|
|
229
235
|
reportMtimes: {},
|
|
@@ -277,6 +283,7 @@ const isWatchState = (value: Record<string, unknown>): value is WatchState =>
|
|
|
277
283
|
isNoSignalState(value.noTaskSignals) &&
|
|
278
284
|
isStallState(value.laneStalls) &&
|
|
279
285
|
isUnlinkedState(value.unlinkedArtifacts) &&
|
|
286
|
+
isPlanMissingState(value.planMissing) &&
|
|
280
287
|
Array.isArray(value.approvals) &&
|
|
281
288
|
value.approvals.every((id) => typeof id === 'string') &&
|
|
282
289
|
isSourceState(value.sources) &&
|