@joshuafolkken/kit 1.1453.0 → 1.1455.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/.claude/skills/workflow-commands/backlogrun-handoff-report.md +1 -1
- package/.claude/skills/workflow-commands/halfrun.md +2 -1
- package/.claude/skills/workflow-commands/prrun.md +2 -1
- package/CLAUDE.md +1 -1
- package/README.md +2 -9
- package/dist/CLAUDE.md +1 -1
- package/dist/hooks/batch-guard.js +3 -3
- package/dist/hooks/{chunk-EF5GQ6WS.js → chunk-5H4SSDSD.js} +2 -2
- package/dist/hooks/{chunk-Y3GKIKGW.js → chunk-7WQBPLUN.js} +1 -1
- package/dist/hooks/{chunk-LBFYEOXJ.js → chunk-D5QBTOCZ.js} +2 -2
- package/dist/hooks/{chunk-W5ZKGTSY.js → chunk-GPLGZ6IC.js} +1 -1
- package/dist/hooks/{chunk-SHYUQOIS.js → chunk-HFGWYGUV.js} +3 -3
- package/dist/hooks/{chunk-5C7L6FRC.js → chunk-HHI6FO3R.js} +8 -8
- package/dist/hooks/{chunk-MBJYQPEK.js → chunk-LIAFCXL7.js} +1 -1
- package/dist/hooks/{chunk-D3NJXN5M.js → chunk-TBJFTSUY.js} +1 -1
- package/dist/hooks/{chunk-NO4AALP5.js → chunk-WNLVGT7E.js} +2 -2
- package/dist/hooks/codex-hook-adapter.js +9 -9
- package/dist/hooks/duplicate-read-guard.js +4 -4
- package/dist/hooks/format-edited.js +2 -2
- package/dist/hooks/inputs.json +232 -230
- package/dist/hooks/investigation-guard.js +4 -4
- package/dist/hooks/pretool-guard.js +8 -8
- package/dist/hooks/stop-guard.js +61 -8
- package/dist/josh.js +1 -1
- package/package.json +1 -1
- package/prompts/collaboration-workflow/shell-body.md +1 -1
- package/scripts/gh/git-pr-ai-review.ts +12 -1
- package/scripts/gh/git-pr-confirmation.ts +11 -7
- package/scripts/josh/josh-commands-workflow.ts +1 -1
- package/scripts/notify/confirmation-options.ts +59 -0
- package/scripts/notify/notify-opt-in.ts +33 -0
- package/scripts/notify/telegram-notify.ts +25 -8
- package/scripts/notify/telegram-test-logic.ts +33 -1
- package/scripts/notify/telegram-test.ts +4 -2
- package/scripts/rules/shell-body-trigger.ts +3 -2
- package/scripts/rules/stop-rules.ts +2 -1
- package/scripts/run/entry/run-entry-stop.ts +6 -3
- package/scripts/run/run-stop-notify.ts +2 -0
|
@@ -24,6 +24,6 @@ structure and the label translations are `prompts/collaboration-workflow/report-
|
|
|
24
24
|
- One sentence per line, no internal identifiers, every child named by number. **Never omit
|
|
25
25
|
`Remaining`** — it is the one line that tells this report from a completion report
|
|
26
26
|
- Telegram uses the same format and is **sent with `--task-type confirmation`** (`completion` would
|
|
27
|
-
announce an unfinished epic as done)
|
|
27
|
+
announce an unfinished epic as done), `--recommended` naming the resume command
|
|
28
28
|
- **Write it only when the run stops.** While a run carries on past the threshold it writes none; the
|
|
29
29
|
epic progress comment is the record
|
|
@@ -35,7 +35,8 @@ the gate. The direct commands follow for shipping without an agent:
|
|
|
35
35
|
`pnpm josh notify --task-type confirmation --issue-url "<issue-url>" --body=$'halfrun ready for manual
|
|
36
36
|
verification\nNext: prrun #<N> | fullrun #<N>\nWithout an agent: pnpm josh git -y "<title> #<N>" && pnpm josh
|
|
37
37
|
followup "<title> #<N>" --notify-message "Implemented <title>\\nCause: ...\\nFix: ...\\nResult:
|
|
38
|
-
...\\n\\nDetails:\\n- <change1>"'
|
|
38
|
+
...\\n\\nDetails:\\n- <change1>"' --recommended "Verify by hand, then prrun #<N>" --alternative "fullrun
|
|
39
|
+
#<N>"`. The stop report names the same two, in the same order.
|
|
39
40
|
**Invoking `halfrun` is _not_ authorization to commit, push, or merge** — do not run `pnpm josh git -y` or `pnpm josh followup` yourself. If the user comes
|
|
40
41
|
back with fixes, treat each as a new round: implement, re-run `pnpm josh gate`, send another
|
|
41
42
|
`confirmation` Telegram, stop again.
|
|
@@ -27,7 +27,8 @@ Where `fullrun` runs `pnpm josh followup` and merges, `prrun` does three things
|
|
|
27
27
|
follows for finishing without an agent:
|
|
28
28
|
`pnpm josh notify --task-type confirmation --issue-url "<issue-url>" --body=$'prrun ready to
|
|
29
29
|
merge: <pr-url>\nNext: fullrun #<N>\nAfter a manual merge, without an agent: pnpm josh followup
|
|
30
|
-
"<title> #<N>"'
|
|
30
|
+
"<title> #<N>"' --recommended "fullrun #<N>" --alternative "Merge by hand, then pnpm josh
|
|
31
|
+
followup"`. The stop report names the same two, in the same order.
|
|
31
32
|
|
|
32
33
|
**Invoking `prrun` is _not_ authorization to merge** — never run `pnpm josh followup` without
|
|
33
34
|
`--no-merge` in a `prrun`. After a person merges by hand, the same `pnpm josh followup "<title> #<N>"`
|
package/CLAUDE.md
CHANGED
|
@@ -82,5 +82,5 @@ Never start a `kickoff` / `halfrun` / `prrun` / `fullrun` / `backlogrun` workflo
|
|
|
82
82
|
Before pausing **any** run for the user — a command's stop, an upstream-Issue interrupt, a Tier C confirmation — send once per stop (skip when the user asked for the stop this turn):
|
|
83
83
|
|
|
84
84
|
```bash
|
|
85
|
-
pnpm josh notify --task-type confirmation --issue-url "<
|
|
85
|
+
pnpm josh notify --task-type confirmation --issue-url "<url>" --body=$'<reason>' --recommended "<choice>" --alternative "<other>"
|
|
86
86
|
```
|
package/README.md
CHANGED
|
@@ -39,7 +39,7 @@ Next: [tutorial](./docs/tutorial.md)
|
|
|
39
39
|
|
|
40
40
|
#### Your first backlogrun
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
File Issues with `kickoff new`, then run:
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
45
|
pnpm josh backlogrun
|
|
@@ -59,14 +59,7 @@ Next: [tutorial](./docs/tutorial.md#without-github-one-change-checked-locally)
|
|
|
59
59
|
|
|
60
60
|
### Adding kit to an existing project
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
- **Overwritten by `josh sync`:** the managed files, such as `.github/workflows/ci.yml` and `AGENTS.md` ([the list](./docs/sync.md#ai-files-overwritten)).
|
|
64
|
-
- **Permissions:** the Claude Code settings kit writes (with `josh start`, or on `full`) set `bypassPermissions` with `Bash(*)`, guarded by a deny list and a hook ([how to opt out](./docs/init.md#claude-code-permission-mode)).
|
|
65
|
-
- **On GitHub:** `josh start` adds labels, and on an existing `main` an Issue and a setup PR that you merge yourself ([the steps](./docs/init.md#josh-init-or-josh-start)).
|
|
66
|
-
|
|
67
|
-
## Claude Code in a fresh-machine run
|
|
68
|
-
|
|
69
|
-
A `josh fresh:run` scenario that runs Claude Code needs a sign-in saved once with `pnpm josh auth:setup` ([steps](./docs/maintainers/fresh-machine.md#claude-code)).
|
|
62
|
+
Check first: [what kit changes in your project](./docs/how-to/add-kit.md#what-kit-changes-in-your-project)
|
|
70
63
|
|
|
71
64
|
## Docs
|
|
72
65
|
|
package/dist/CLAUDE.md
CHANGED
|
@@ -82,5 +82,5 @@ Never start a `kickoff` / `halfrun` / `prrun` / `fullrun` / `backlogrun` workflo
|
|
|
82
82
|
Before pausing **any** run for the user — a command's stop, an upstream-Issue interrupt, a Tier C confirmation — send once per stop (skip when the user asked for the stop this turn):
|
|
83
83
|
|
|
84
84
|
```bash
|
|
85
|
-
pnpm josh notify --task-type confirmation --issue-url "<
|
|
85
|
+
pnpm josh notify --task-type confirmation --issue-url "<url>" --body=$'<reason>' --recommended "<choice>" --alternative "<other>"
|
|
86
86
|
```
|
|
@@ -9,10 +9,10 @@ import {
|
|
|
9
9
|
load_environment_file,
|
|
10
10
|
notice_refusal_path,
|
|
11
11
|
refusal_path
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-5H4SSDSD.js";
|
|
13
13
|
import "./chunk-UT7YC3N2.js";
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-GPLGZ6IC.js";
|
|
15
|
+
import "./chunk-LIAFCXL7.js";
|
|
16
16
|
import "./chunk-OLMO72ON.js";
|
|
17
17
|
import "./chunk-3C4XRYG6.js";
|
|
18
18
|
import "./chunk-DGT54IH5.js";
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
} from "./chunk-UT7YC3N2.js";
|
|
4
4
|
import {
|
|
5
5
|
hook_decision
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-GPLGZ6IC.js";
|
|
7
7
|
import {
|
|
8
8
|
time_batch_guard
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-LIAFCXL7.js";
|
|
10
10
|
|
|
11
11
|
// scripts/hooks/batch-guard.ts
|
|
12
12
|
import { text } from "node:stream/consumers";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
investigation_reads
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WNLVGT7E.js";
|
|
4
4
|
import {
|
|
5
5
|
lane_guard_policy
|
|
6
6
|
} from "./chunk-UT7YC3N2.js";
|
|
7
7
|
import {
|
|
8
8
|
hook_decision
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-GPLGZ6IC.js";
|
|
10
10
|
|
|
11
11
|
// scripts/delegation/investigation-guard.ts
|
|
12
12
|
import { text } from "node:stream/consumers";
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
investigation_reads
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WNLVGT7E.js";
|
|
4
4
|
import {
|
|
5
5
|
lane_guard_policy
|
|
6
6
|
} from "./chunk-UT7YC3N2.js";
|
|
7
7
|
import {
|
|
8
8
|
hook_decision
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-GPLGZ6IC.js";
|
|
10
10
|
import {
|
|
11
11
|
time_spans
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-LIAFCXL7.js";
|
|
13
13
|
import {
|
|
14
14
|
json_value
|
|
15
15
|
} from "./chunk-3C4XRYG6.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
duplicate_read_outcome
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HFGWYGUV.js";
|
|
4
4
|
import {
|
|
5
5
|
ALREADY_DONE_LABEL,
|
|
6
6
|
CONTEXT_CUT_THRESHOLD,
|
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
session_cite,
|
|
30
30
|
shell_segments,
|
|
31
31
|
tail_commands
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-7WQBPLUN.js";
|
|
33
33
|
import {
|
|
34
34
|
ancestor_directories,
|
|
35
35
|
find_local_bin_upwards,
|
|
@@ -56,19 +56,19 @@ import {
|
|
|
56
56
|
} from "./chunk-CDY4NFQG.js";
|
|
57
57
|
import {
|
|
58
58
|
batch_outcome
|
|
59
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-5H4SSDSD.js";
|
|
60
60
|
import {
|
|
61
61
|
investigation_refusal
|
|
62
|
-
} from "./chunk-
|
|
62
|
+
} from "./chunk-D5QBTOCZ.js";
|
|
63
63
|
import {
|
|
64
64
|
investigation_reads
|
|
65
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-WNLVGT7E.js";
|
|
66
66
|
import {
|
|
67
67
|
lane_guard_policy
|
|
68
68
|
} from "./chunk-UT7YC3N2.js";
|
|
69
69
|
import {
|
|
70
70
|
hook_decision
|
|
71
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-GPLGZ6IC.js";
|
|
72
72
|
import {
|
|
73
73
|
cost_attribute,
|
|
74
74
|
cost_blocks,
|
|
@@ -76,7 +76,7 @@ import {
|
|
|
76
76
|
time_batch_guard,
|
|
77
77
|
time_density_hook,
|
|
78
78
|
time_shell
|
|
79
|
-
} from "./chunk-
|
|
79
|
+
} from "./chunk-LIAFCXL7.js";
|
|
80
80
|
import {
|
|
81
81
|
lane_child_marker
|
|
82
82
|
} from "./chunk-OLMO72ON.js";
|
|
@@ -3190,7 +3190,7 @@ var rule_body_guard = {
|
|
|
3190
3190
|
|
|
3191
3191
|
// scripts/rules/shell-body-trigger.ts
|
|
3192
3192
|
var FIELD_FLAGS = "(?:-f|-F|--field|--raw-field)";
|
|
3193
|
-
var MESSAGE_FLAGS = "(?:--body|--notify-message)";
|
|
3193
|
+
var MESSAGE_FLAGS = "(?:--body|--notify-message|--recommended|--alternative)";
|
|
3194
3194
|
var FIELD_OPENING = String.raw`${FIELD_FLAGS}[\s=]*(?:'?body="|"body=)`;
|
|
3195
3195
|
var MESSAGE_OPENING = String.raw`${MESSAGE_FLAGS}[\s=]+"`;
|
|
3196
3196
|
var NESTED_SUBSTITUTION = String.raw`\$\([^()]*\)`;
|
|
@@ -2136,7 +2136,7 @@ var WORKFLOW_COMMANDS = {
|
|
|
2136
2136
|
description: "Send Telegram notification",
|
|
2137
2137
|
category: "Workflow",
|
|
2138
2138
|
reference: [
|
|
2139
|
-
"[--task-type <type>] [--body <text> | --body-file <path>] [--issue-url <url>] [--pr-url <url>] [--issue-title <text>] [--repo-name <name>]",
|
|
2139
|
+
"[--task-type <type>] [--body <text> | --body-file <path>] [--issue-url <url>] [--pr-url <url>] [--issue-title <text>] [--repo-name <name>] [--recommended <text>] [--alternative <text>]...",
|
|
2140
2140
|
"automation",
|
|
2141
2141
|
["notifications"]
|
|
2142
2142
|
],
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
hook_decision
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-GPLGZ6IC.js";
|
|
4
4
|
import {
|
|
5
5
|
cost_blocks,
|
|
6
6
|
time_batch_guard,
|
|
7
7
|
time_bundle_call,
|
|
8
8
|
time_shell,
|
|
9
9
|
time_spans
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-LIAFCXL7.js";
|
|
11
11
|
import {
|
|
12
12
|
cost_transcript
|
|
13
13
|
} from "./chunk-3C4XRYG6.js";
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import {
|
|
3
3
|
pretool_guard
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-HHI6FO3R.js";
|
|
5
|
+
import "./chunk-HFGWYGUV.js";
|
|
6
6
|
import {
|
|
7
7
|
bounded_pool
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-7WQBPLUN.js";
|
|
9
9
|
import {
|
|
10
10
|
build_envelope,
|
|
11
11
|
compose_context,
|
|
12
12
|
format_edited_payload
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-TBJFTSUY.js";
|
|
14
14
|
import "./chunk-IX6TTTI6.js";
|
|
15
15
|
import "./chunk-Z4XI7CZS.js";
|
|
16
16
|
import "./chunk-CDY4NFQG.js";
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-5H4SSDSD.js";
|
|
18
|
+
import "./chunk-D5QBTOCZ.js";
|
|
19
|
+
import "./chunk-WNLVGT7E.js";
|
|
20
20
|
import "./chunk-UT7YC3N2.js";
|
|
21
21
|
import {
|
|
22
22
|
hook_decision
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-GPLGZ6IC.js";
|
|
24
24
|
import {
|
|
25
25
|
time_density_hook
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-LIAFCXL7.js";
|
|
27
27
|
import "./chunk-OLMO72ON.js";
|
|
28
28
|
import {
|
|
29
29
|
json_value
|
|
@@ -9,11 +9,11 @@ import {
|
|
|
9
9
|
is_enabled,
|
|
10
10
|
notice_refusal_path,
|
|
11
11
|
refusal_path
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-HFGWYGUV.js";
|
|
13
|
+
import "./chunk-WNLVGT7E.js";
|
|
14
14
|
import "./chunk-UT7YC3N2.js";
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-GPLGZ6IC.js";
|
|
16
|
+
import "./chunk-LIAFCXL7.js";
|
|
17
17
|
import "./chunk-OLMO72ON.js";
|
|
18
18
|
import "./chunk-3C4XRYG6.js";
|
|
19
19
|
import "./chunk-DGT54IH5.js";
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import {
|
|
3
3
|
report_no_payload,
|
|
4
4
|
run_hook
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-TBJFTSUY.js";
|
|
6
6
|
import "./chunk-IX6TTTI6.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-LIAFCXL7.js";
|
|
8
8
|
import "./chunk-3C4XRYG6.js";
|
|
9
9
|
import "./chunk-DGT54IH5.js";
|
|
10
10
|
|