hub-launch 1.9.0 → 1.10.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.
Files changed (48) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +64 -17
  3. package/dist/commands/init.d.ts.map +1 -1
  4. package/dist/commands/init.js +11 -8
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/commands/launch.d.ts.map +1 -1
  7. package/dist/commands/launch.js +22 -0
  8. package/dist/commands/launch.js.map +1 -1
  9. package/dist/commands/logs.d.ts +27 -2
  10. package/dist/commands/logs.d.ts.map +1 -1
  11. package/dist/commands/logs.js +35 -2
  12. package/dist/commands/logs.js.map +1 -1
  13. package/dist/commands/merge.d.ts.map +1 -1
  14. package/dist/commands/merge.js +25 -8
  15. package/dist/commands/merge.js.map +1 -1
  16. package/dist/commands/schedule.d.ts +7 -0
  17. package/dist/commands/schedule.d.ts.map +1 -0
  18. package/dist/commands/{execute.js → schedule.js} +17 -9
  19. package/dist/commands/schedule.js.map +1 -0
  20. package/dist/commands/upload.js +1 -1
  21. package/dist/commands/upload.js.map +1 -1
  22. package/dist/config/command-names.d.ts +1 -1
  23. package/dist/config/command-names.js +1 -1
  24. package/dist/config/command-names.js.map +1 -1
  25. package/dist/index.js +2 -2
  26. package/dist/index.js.map +1 -1
  27. package/dist/services/api/HulaApiClient.d.ts +7 -0
  28. package/dist/services/api/HulaApiClient.d.ts.map +1 -1
  29. package/dist/services/api/HulaApiClient.js +8 -0
  30. package/dist/services/api/HulaApiClient.js.map +1 -1
  31. package/dist/services/git/FilePublishService.d.ts +1 -1
  32. package/dist/services/git/FilePublishService.js +1 -1
  33. package/dist/templates/scripts/hula-launch-run.sh +14 -7
  34. package/dist/templates/scripts/hula-merge-remote.sh +24 -4
  35. package/dist/templates/scripts/{hula-execute-manage.sh → hula-schedule-manage.sh} +13 -13
  36. package/dist/templates/scripts/{hula-execute-run.sh → hula-schedule-run.sh} +8 -8
  37. package/dist/templates/skill-creation-instructions.md +12 -12
  38. package/dist/templates/skills/hula-launch/SKILL.md +15 -2
  39. package/dist/templates/skills/hula-merge/SKILL.md +35 -3
  40. package/dist/templates/skills/{hula-execute → hula-schedule}/SKILL.md +21 -21
  41. package/dist/types/config.schema.d.ts +3 -0
  42. package/dist/types/config.schema.d.ts.map +1 -1
  43. package/dist/types/config.schema.js +1 -0
  44. package/dist/types/config.schema.js.map +1 -1
  45. package/package.json +5 -2
  46. package/dist/commands/execute.d.ts +0 -7
  47. package/dist/commands/execute.d.ts.map +0 -1
  48. package/dist/commands/execute.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
2
  # hula-launch-run.sh — Step 4 of the hula.launch workflow
3
- # Usage: bash .github/scripts/hula-launch-run.sh <plan-path> <branch-name> [--handoff <username>]
3
+ # Usage: bash .github/scripts/hula-launch-run.sh <plan-path> <branch-name> [--handoff <username>] [--test]
4
4
  #
5
5
  # Performs: hula launch (which handles plan upload automatically)
6
6
  # Outputs structured JSON to stdout; all other output goes to stderr.
@@ -36,6 +36,7 @@ die() {
36
36
  PLAN_PATH=''
37
37
  BRANCH_NAME=''
38
38
  HANDOFF=''
39
+ TEST=''
39
40
 
40
41
  while [[ $# -gt 0 ]]; do
41
42
  case "$1" in
@@ -43,6 +44,8 @@ while [[ $# -gt 0 ]]; do
43
44
  HANDOFF="$2"; shift 2 ;;
44
45
  --handoff=*)
45
46
  HANDOFF="${1#--handoff=}"; shift ;;
47
+ --test)
48
+ TEST=1; shift ;;
46
49
  *)
47
50
  if [[ -z "$PLAN_PATH" ]]; then
48
51
  PLAN_PATH="$1"
@@ -56,7 +59,7 @@ while [[ $# -gt 0 ]]; do
56
59
  done
57
60
 
58
61
  if [[ -z "$PLAN_PATH" || -z "$BRANCH_NAME" ]]; then
59
- die 1 "Usage: bash .github/scripts/hula-launch-run.sh <plan-path> <branch-name> [--handoff <username>]"
62
+ die 1 "Usage: bash .github/scripts/hula-launch-run.sh <plan-path> <branch-name> [--handoff <username>] [--test]"
60
63
  fi
61
64
 
62
65
  # Reject paths with directory traversal sequences
@@ -68,13 +71,17 @@ fi
68
71
 
69
72
  printf '🚀 Launching issue from plan: %s\n' "$PLAN_PATH" >&2
70
73
 
74
+ # Build the launch invocation as an args array so --handoff and --test compose
75
+ # without combinatorial if/else branching.
76
+ LAUNCH_ARGS=("$BRANCH_NAME" "$PLAN_PATH")
71
77
  if [[ -n "$HANDOFF" ]]; then
72
- LAUNCH_OUTPUT=$(hula launch "$BRANCH_NAME" "$PLAN_PATH" --handoff "$HANDOFF" 2>&1) \
73
- || die 2 "Launch failed: $LAUNCH_OUTPUT"
74
- else
75
- LAUNCH_OUTPUT=$(hula launch "$BRANCH_NAME" "$PLAN_PATH" 2>&1) \
76
- || die 2 "Launch failed: $LAUNCH_OUTPUT"
78
+ LAUNCH_ARGS+=(--handoff "$HANDOFF")
77
79
  fi
80
+ if [[ -n "$TEST" ]]; then
81
+ LAUNCH_ARGS+=(--test)
82
+ fi
83
+ LAUNCH_OUTPUT=$(hula launch "${LAUNCH_ARGS[@]}" 2>&1) \
84
+ || die 2 "Launch failed: $LAUNCH_OUTPUT"
78
85
 
79
86
  # Extract issue number from CLI output (e.g. "Created issue #42" or "issue #42")
80
87
  ISSUE_NUMBER=$(printf '%s' "$LAUNCH_OUTPUT" | grep -oE '#[0-9]+' | head -1 | tr -d '#') || true
@@ -48,8 +48,27 @@ fi
48
48
 
49
49
  printf '🔀 Merging PR for issue #%s (remote-only)...\n' "$ISSUE_NUMBER" >&2
50
50
 
51
- hula merge "$ISSUE_NUMBER" 2>&1 >&2 \
52
- || die 2 "Failed to merge PR for issue #${ISSUE_NUMBER}. Check the PR on GitHub."
51
+ # Capture the CLI output so we can detect whether the local default branch was
52
+ # fast-forwarded, while still surfacing it live to the user (on stderr stdout
53
+ # is reserved for the structured JSON result).
54
+ set +e
55
+ MERGE_OUTPUT=$(hula merge "$ISSUE_NUMBER" 2>&1)
56
+ MERGE_EXIT=$?
57
+ set -e
58
+
59
+ printf '%s\n' "$MERGE_OUTPUT" >&2
60
+
61
+ if [[ $MERGE_EXIT -ne 0 ]]; then
62
+ die 2 "Failed to merge PR for issue #${ISSUE_NUMBER}. Check the PR on GitHub."
63
+ fi
64
+
65
+ # Detect whether `hula merge` actually fast-forwarded the local default branch.
66
+ # The CLI prints "✓ Local <branch> fast-forwarded to origin/<branch>" on success
67
+ # and a specific warning (with remediation) on each skip/failure mode.
68
+ LOCAL_UPDATED=false
69
+ if printf '%s' "$MERGE_OUTPUT" | grep -q "Local.*fast-forwarded"; then
70
+ LOCAL_UPDATED=true
71
+ fi
53
72
 
54
73
  # ── Step B2: Clean up stale session file (if applicable) ─────────────────────
55
74
 
@@ -69,6 +88,7 @@ fi
69
88
 
70
89
  # ── Output result ─────────────────────────────────────────────────────────────
71
90
 
72
- printf '{"status":"success","issueNumber":%s,"sessionCleaned":%s}\n' \
91
+ printf '{"status":"success","issueNumber":%s,"sessionCleaned":%s,"localUpdated":%s}\n' \
73
92
  "$ISSUE_NUMBER" \
74
- "$([ "$SESSION_CLEANED" == true ] && echo 'true' || echo 'false')"
93
+ "$([ "$SESSION_CLEANED" == true ] && echo 'true' || echo 'false')" \
94
+ "$([ "$LOCAL_UPDATED" == true ] && echo 'true' || echo 'false')"
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env bash
2
- # hula-execute-manage.sh — management surface for the /hula-execute skill
2
+ # hula-schedule-manage.sh — management surface for the /hula-schedule skill
3
3
  # Usage (exactly one action per call):
4
- # bash .github/scripts/hula-execute-manage.sh --list
5
- # bash .github/scripts/hula-execute-manage.sh --list-schedules
6
- # bash .github/scripts/hula-execute-manage.sh --show <runId>
7
- # bash .github/scripts/hula-execute-manage.sh --run-now <scheduleId>
8
- # bash .github/scripts/hula-execute-manage.sh --cancel-schedule <scheduleId>
9
- # bash .github/scripts/hula-execute-manage.sh --publish-skill <repo-relative-path>
10
- # bash .github/scripts/hula-execute-manage.sh --delete-skill <repo-relative-path>
4
+ # bash .github/scripts/hula-schedule-manage.sh --list
5
+ # bash .github/scripts/hula-schedule-manage.sh --list-schedules
6
+ # bash .github/scripts/hula-schedule-manage.sh --show <runId>
7
+ # bash .github/scripts/hula-schedule-manage.sh --run-now <scheduleId>
8
+ # bash .github/scripts/hula-schedule-manage.sh --cancel-schedule <scheduleId>
9
+ # bash .github/scripts/hula-schedule-manage.sh --publish-skill <repo-relative-path>
10
+ # bash .github/scripts/hula-schedule-manage.sh --delete-skill <repo-relative-path>
11
11
  #
12
- # Each invocation maps to the corresponding `hula execute …` call, captures its
12
+ # Each invocation maps to the corresponding `hula schedule …` call, captures its
13
13
  # output, and emits a single structured JSON object to stdout; all other output
14
14
  # goes to stderr.
15
15
  #
@@ -99,7 +99,7 @@ while [[ $# -gt 0 ]]; do
99
99
  done
100
100
 
101
101
  if [[ -z "$ACTION" ]]; then
102
- die 1 "Usage: bash .github/scripts/hula-execute-manage.sh (--list | --list-schedules | --show <id> | --run-now <id> | --cancel-schedule <id> | --publish-skill <path> | --delete-skill <path>)"
102
+ die 1 "Usage: bash .github/scripts/hula-schedule-manage.sh (--list | --list-schedules | --show <id> | --run-now <id> | --cancel-schedule <id> | --publish-skill <path> | --delete-skill <path>)"
103
103
  fi
104
104
 
105
105
  # Actions that require an argument.
@@ -113,7 +113,7 @@ case "$ACTION" in
113
113
  publish-skill|delete-skill) validate_skill_path "$ARG" ;;
114
114
  esac
115
115
 
116
- # ── Build and run the hula execute invocation ────────────────────────────────
116
+ # ── Build and run the hula schedule invocation ────────────────────────────────
117
117
 
118
118
  CLI_ARGS=()
119
119
  case "$ACTION" in
@@ -126,9 +126,9 @@ case "$ACTION" in
126
126
  delete-skill) CLI_ARGS=(--delete-skill "$ARG") ;;
127
127
  esac
128
128
 
129
- printf '⚙️ hula execute --%s...\n' "$ACTION" >&2
129
+ printf '⚙️ hula schedule --%s...\n' "$ACTION" >&2
130
130
 
131
- OUTPUT=$(hula execute "${CLI_ARGS[@]}" 2>&1) || die 2 "Management action failed: $OUTPUT"
131
+ OUTPUT=$(hula schedule "${CLI_ARGS[@]}" 2>&1) || die 2 "Management action failed: $OUTPUT"
132
132
 
133
133
  SAFE_OUTPUT=$(json_escape "$OUTPUT")
134
134
 
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env bash
2
- # hula-execute-run.sh — runs the hula.execute workflow for the /hula-execute skill
2
+ # hula-schedule-run.sh — runs the hula schedule workflow for the /hula-schedule skill
3
3
  # Usage:
4
- # bash .github/scripts/hula-execute-run.sh \
4
+ # bash .github/scripts/hula-schedule-run.sh \
5
5
  # (--built-in <name> | --action-path <path>) \
6
6
  # [--entry-point <path>] [--outcome-type <pr|plan|feedback>] [--schedule "<cron>"] \
7
7
  # [--pr-policy <always|skip-if-open|close-previous>] [--update-notification-url <url>]
8
8
  #
9
- # Performs: hula execute (one-off run, or a recurring schedule when --schedule is given).
9
+ # Performs: hula schedule (one-off run, or a recurring schedule when --schedule is given).
10
10
  # Outputs a single structured JSON object to stdout; all other output goes to stderr.
11
11
  #
12
12
  # JSON contract (stdout):
@@ -79,7 +79,7 @@ if [[ -n "$BUILT_IN" && -n "$ACTION_PATH" ]]; then
79
79
  die 1 "Provide either --built-in or --action-path, not both."
80
80
  fi
81
81
  if [[ -z "$BUILT_IN" && -z "$ACTION_PATH" ]]; then
82
- die 1 "Usage: bash .github/scripts/hula-execute-run.sh (--built-in <name> | --action-path <path>) [--entry-point <path>] [--outcome-type <pr|plan|feedback>] [--schedule \"<cron>\"] [--pr-policy <always|skip-if-open|close-previous>]"
82
+ die 1 "Usage: bash .github/scripts/hula-schedule-run.sh (--built-in <name> | --action-path <path>) [--entry-point <path>] [--outcome-type <pr|plan|feedback>] [--schedule \"<cron>\"] [--pr-policy <always|skip-if-open|close-previous>]"
83
83
  fi
84
84
 
85
85
  # Reject directory-traversal in --action-path, except for https:// URLs.
@@ -89,7 +89,7 @@ if [[ -n "$ACTION_PATH" ]] && [[ "$ACTION_PATH" != https://* ]]; then
89
89
  fi
90
90
  fi
91
91
 
92
- # ── Run hula execute ─────────────────────────────────────────────────────────
92
+ # ── Run hula schedule ─────────────────────────────────────────────────────────
93
93
 
94
94
  ARGS=()
95
95
  if [[ -n "$BUILT_IN" ]]; then
@@ -104,12 +104,12 @@ fi
104
104
  [[ -n "$UPDATE_NOTIFICATION_URL" ]] && ARGS+=(--update-notification-url "$UPDATE_NOTIFICATION_URL")
105
105
 
106
106
  if [[ -n "$SCHEDULE" ]]; then
107
- printf '⏰ Scheduling execute-action (%s)...\n' "$SCHEDULE" >&2
107
+ printf '⏰ Scheduling action (%s)...\n' "$SCHEDULE" >&2
108
108
  else
109
- printf '🚀 Running execute-action...\n' >&2
109
+ printf '🚀 Running action...\n' >&2
110
110
  fi
111
111
 
112
- OUTPUT=$(hula execute "${ARGS[@]}" 2>&1) || die 2 "Execute failed: $OUTPUT"
112
+ OUTPUT=$(hula schedule "${ARGS[@]}" 2>&1) || die 2 "Execute failed: $OUTPUT"
113
113
 
114
114
  # ── Parse identifiers from the human-readable CLI output ─────────────────────
115
115
  # Parsing is intentionally tolerant: a missing identifier becomes an empty
@@ -1,8 +1,8 @@
1
- # Execute Skill Creation Instructions
1
+ # Schedule Skill Creation Instructions
2
2
 
3
3
  These instructions drive the **create-from-description** mode of the
4
- `/hula-execute` skill: turning a plain-language description into a published
5
- action file that `hula execute` can run or schedule.
4
+ `/hula-schedule` skill: turning a plain-language description into a published
5
+ action file that `hula schedule` can run or schedule.
6
6
 
7
7
  The action file is plain instruction markdown that the hula-project server reads
8
8
  from `origin/<uploadBranch>` (default `main`) at run time. It is **not** an Agent
@@ -10,7 +10,7 @@ Skill and is never registered as a slash command — it lives under
10
10
  `.hublaunch/skills/`.
11
11
 
12
12
  Follow these steps in order. Do **not** skip the question step, and do **not**
13
- run `hula execute` before the file is successfully published.
13
+ run `hula schedule` before the file is successfully published.
14
14
 
15
15
  ## Step 1: Ask clarifying questions first (then STOP)
16
16
 
@@ -88,13 +88,13 @@ branch at run time (and re-reads it on every scheduled fire). The file MUST be o
88
88
  the branch before the run, so publish it first:
89
89
 
90
90
  ```bash
91
- bash .github/scripts/hula-execute-manage.sh --publish-skill .hublaunch/skills/<filename>
91
+ bash .github/scripts/hula-schedule-manage.sh --publish-skill .hublaunch/skills/<filename>
92
92
  ```
93
93
 
94
94
  Parse the single JSON object it prints:
95
95
 
96
96
  - If `status` is `"error"`: display `❌ <message>` and **STOP**. Do **not** run
97
- `hula execute` — the file is not on the branch, so the run would fail.
97
+ `hula schedule` — the file is not on the branch, so the run would fail.
98
98
  - If `status` is `"success"`: continue to Step 7.
99
99
 
100
100
  ## Step 7: Run or schedule the action
@@ -103,7 +103,7 @@ Only after a successful publish, invoke the run wrapper with `--action-path`
103
103
  pointing at the committed file:
104
104
 
105
105
  ```bash
106
- bash .github/scripts/hula-execute-run.sh --action-path .hublaunch/skills/<filename> [--entry-point <path>] [--outcome-type <type>] [--schedule "<cron>"]
106
+ bash .github/scripts/hula-schedule-run.sh --action-path .hublaunch/skills/<filename> [--entry-point <path>] [--outcome-type <type>] [--schedule "<cron>"]
107
107
  ```
108
108
 
109
109
  Pass only the flags you resolved. Quote the cron expression.
@@ -116,10 +116,10 @@ Parse the run wrapper's JSON (same contract as the normal run flow) and report:
116
116
  published to `origin/<uploadBranch>`.
117
117
  - The **run or schedule result**:
118
118
  - One-off run → the Run ID and PR link (if any), plus
119
- `hula execute --show <runId>` to check status.
119
+ `hula schedule --show <runId>` to check status.
120
120
  - Schedule → the Schedule ID and cron expression, plus a note that you can
121
- manage it with `/hula-execute list`, `/hula-execute run now <id>`,
122
- `/hula-execute cancel <id>`, or `/hula-execute update <id> …`.
121
+ manage it with `/hula-schedule list`, `/hula-schedule run now <id>`,
122
+ `/hula-schedule cancel <id>`, or `/hula-schedule update <id> …`.
123
123
 
124
124
  Example success report:
125
125
 
@@ -130,7 +130,7 @@ Example success report:
130
130
  🔖 **Schedule ID**: sch_abc123
131
131
  ⏰ **Cron**: 0 3 * * * (every day at 3:00 AM)
132
132
 
133
- Manage it with: /hula-execute list · /hula-execute run now sch_abc123 · /hula-execute cancel sch_abc123
133
+ Manage it with: /hula-schedule list · /hula-schedule run now sch_abc123 · /hula-schedule cancel sch_abc123
134
134
  ```
135
135
 
136
136
  ## Notes
@@ -139,4 +139,4 @@ Manage it with: /hula-execute list · /hula-execute run now sch_abc123 · /hula-
139
139
  - The action file is committed to `origin/<uploadBranch>` via a temporary
140
140
  worktree — the user's current branch and working tree are never touched.
141
141
  - If the publish succeeds but the run fails, the file remains on the branch; the
142
- user can re-run it later with `/hula-execute .hublaunch/skills/<filename>`.
142
+ user can re-run it later with `/hula-schedule .hublaunch/skills/<filename>`.
@@ -2,7 +2,7 @@
2
2
  name: hula-launch
3
3
  description: Launch a GitHub issue from the current plan. Use when the user asks to launch or assign the plan to a remote agent.
4
4
  disable-model-invocation: true
5
- argument-hint: <branch-name> [<plan-path>]
5
+ argument-hint: <branch-name> [<plan-path>] [--handoff <username>] [--test]
6
6
  allowed-tools: Bash Read
7
7
  ---
8
8
 
@@ -14,10 +14,11 @@ From `$ARGUMENTS`:
14
14
  - **Branch name** (required): the first word (e.g., `feature-auth`).
15
15
  - **Plan path** (optional): the second word, if present (e.g., `.hublaunch/plans/2026-06-10-14:00-feature-auth.md`).
16
16
  - **--handoff** (optional): a `--handoff <username>` flag anywhere in `$ARGUMENTS`.
17
+ - **--test** (optional): the bare flag `--test`, anywhere in `$ARGUMENTS`. Sets test mode (server uses a mock Claude — fast E2E run; a real PR is still created).
17
18
 
18
19
  If no branch name is provided, stop with:
19
20
  ```
20
- ❌ Branch name required. Usage: /hula-launch <branch-name> [<plan-path>] [--handoff <username>]
21
+ ❌ Branch name required. Usage: /hula-launch <branch-name> [<plan-path>] [--handoff <username>] [--test]
21
22
  ```
22
23
 
23
24
  If no plan path was given in `$ARGUMENTS`, look in the current chat history for the HTML comment:
@@ -45,6 +46,18 @@ With handoff:
45
46
  bash .github/scripts/hula-launch-run.sh <plan-path> <branch-name> --handoff <username>
46
47
  ```
47
48
 
49
+ With test mode:
50
+ ```bash
51
+ bash .github/scripts/hula-launch-run.sh <plan-path> <branch-name> --test
52
+ ```
53
+
54
+ With handoff + test mode:
55
+ ```bash
56
+ bash .github/scripts/hula-launch-run.sh <plan-path> <branch-name> --handoff <username> --test
57
+ ```
58
+
59
+ Append `--test` whenever the user passed it; it composes with `--handoff`.
60
+
48
61
  ## Step 3: Show the result
49
62
 
50
63
  Parse the JSON output from the script:
@@ -212,16 +212,42 @@ Run the remote-merge script — it merges the PR directly on GitHub and cleans u
212
212
  bash .github/scripts/hula-merge-remote.sh <issue-number>
213
213
  ```
214
214
 
215
- The script outputs JSON with `status`, `issueNumber`, and `sessionCleaned`.
215
+ The script outputs JSON with `status`, `issueNumber`, `sessionCleaned`, and `localUpdated`.
216
+
217
+ The script captures the `hula merge` CLI output and streams it to your terminal,
218
+ so the **specific reason and remediation** for any skipped local update appears
219
+ above the JSON line. Read it — that's the source of truth for what happened.
216
220
 
217
221
  Parse the JSON output:
218
222
  - If `status` is `"error"`, display the `message` and stop.
219
- - If `status` is `"success"`, proceed to Step B2.
223
+ - If `status` is `"success"`, proceed through the display below, then Step B2a.
220
224
 
221
225
  Display:
222
226
  - If `sessionCleaned` is `true`: `🧹 Cleaned up stale session file`
227
+ - Based on the `localUpdated` field:
228
+ - If `localUpdated` is `true`:
229
+ ```
230
+ ✓ Local main updated to latest origin
231
+ ```
232
+ - If `localUpdated` is `false`:
233
+ ```
234
+ ⚠️ Could not update local main (uncommitted changes, different branch, or git config issue)
235
+ See the output above for the specific reason and how to fix it.
236
+ ```
237
+
238
+ ### Step B2a: About Local Main Update
239
+
240
+ The local main branch may not be fast-forwarded after the remote merge if:
223
241
 
224
- ### Step B2: Delete Local Branch (if applicable)
242
+ - Your project root has uncommitted changes (skipped to avoid disrupting your work)
243
+ - Your project root is checked out on a different branch (not the default)
244
+ - The git repository has a non-standard/multi-worktree configuration
245
+ - `git pull --ff-only` could not fast-forward (e.g. network issue or diverged history)
246
+
247
+ This is non-critical — the PR is already merged on GitHub. When skipped, the CLI
248
+ output above shows the exact reason and the command to run to fix it.
249
+
250
+ ### Step B2b: Delete Local Branch (if applicable)
225
251
 
226
252
  Check whether the branch exists locally:
227
253
 
@@ -252,6 +278,9 @@ Display: `ℹ️ No local branch to clean up`
252
278
 
253
279
  ### Step B3: Success Summary
254
280
 
281
+ Tailor the summary to what actually happened — in particular, the local main
282
+ line depends on the `localUpdated` field from Step B1.
283
+
255
284
  ```
256
285
  ✨ Merge completed successfully!
257
286
 
@@ -259,6 +288,8 @@ Summary:
259
288
  - Merged PR for issue #42 on GitHub ✅
260
289
  - Closed issue #42 ✅
261
290
  - Deleted local branch: <prBranch> ✅ (or: No local branch to clean up)
291
+ - [IF localUpdated == true] Local main updated to latest origin ✅
292
+ - [IF localUpdated == false] ⚠️ Local main was NOT updated — see the reason above.
262
293
 
263
294
  No local worktree was involved — PR was merged directly on GitHub.
264
295
  ```
@@ -381,6 +412,7 @@ On failure, the worktree is preserved so you can:
381
412
  - ✅ Path B: PR merged directly on GitHub without any local branch/worktree operations
382
413
  - ✅ Path B: Stale session files cleaned up if present
383
414
  - ✅ Path B: Local branch deleted if it existed locally
415
+ - ✅ Path B: Local main update status reported accurately (updated, or skipped with reason)
384
416
  - ✅ PR merged successfully (both paths)
385
417
  - ✅ Issue closed automatically (both paths)
386
418
  - ✅ Main working tree never modified (both paths)
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: hula-execute
2
+ name: hula-schedule
3
3
  description: Run, schedule, create, or manage execute-actions on the hula-project server. Use to run a built-in action (e.g. harden) or custom action file, author a new action from a plain description, or list/show/run-now/cancel/update runs and schedules.
4
4
  disable-model-invocation: true
5
5
  argument-hint: <action | description | list | show <id> | run now <id> | cancel <id> | update ...> [on <entry-point>] [outcome pr|plan|feedback] [schedule <when>] [pr-policy always|skip-if-open|close-previous]
@@ -7,7 +7,7 @@ allowed-tools: Bash Read Write Edit
7
7
  ---
8
8
 
9
9
  You are an expert HubLaunch workflow assistant. You turn the user's free-form
10
- request into the right `hula execute` operation — running or scheduling an
10
+ request into the right `hula schedule` operation — running or scheduling an
11
11
  action, authoring a new action file from a description, or managing existing
12
12
  runs and schedules — running everything through wrapper scripts and confirming
13
13
  any cron expression before sending it.
@@ -66,7 +66,7 @@ guess between "run an existing action" and "create a new one". Likewise, if an
66
66
 
67
67
  - If neither a built-in name nor an action path can be determined, stop with:
68
68
  ```
69
- ❌ Action required. Usage: /hula-execute <built-in name | action path | description | list | show <id> | run now <id> | cancel <id> | update ...>
69
+ ❌ Action required. Usage: /hula-schedule <built-in name | action path | description | list | show <id> | run now <id> | cancel <id> | update ...>
70
70
  ```
71
71
  - If BOTH a built-in name and an action path are detected, stop and ask which
72
72
  one they intend (the CLI rejects both).
@@ -76,13 +76,13 @@ guess between "run an existing action" and "create a new one". Likewise, if an
76
76
  Run exactly one Bash command. Use `--built-in` OR `--action-path`, never both:
77
77
 
78
78
  ```bash
79
- bash .github/scripts/hula-execute-run.sh --built-in <name> [--entry-point <path>] [--outcome-type <type>] [--schedule "<cron>"] [--pr-policy <always|skip-if-open|close-previous>]
79
+ bash .github/scripts/hula-schedule-run.sh --built-in <name> [--entry-point <path>] [--outcome-type <type>] [--schedule "<cron>"] [--pr-policy <always|skip-if-open|close-previous>]
80
80
  ```
81
81
 
82
82
  or, for a custom action file:
83
83
 
84
84
  ```bash
85
- bash .github/scripts/hula-execute-run.sh --action-path <path> [--entry-point <path>] [--outcome-type <type>] [--schedule "<cron>"] [--pr-policy <always|skip-if-open|close-previous>]
85
+ bash .github/scripts/hula-schedule-run.sh --action-path <path> [--entry-point <path>] [--outcome-type <type>] [--schedule "<cron>"] [--pr-policy <always|skip-if-open|close-previous>]
86
86
  ```
87
87
 
88
88
  Pass only the flags you resolved. Quote the cron expression. Only include
@@ -100,9 +100,9 @@ summary it has you: ask clarifying questions first (then STOP), confirm the
100
100
  action name, resolve+confirm any cron, write a free-form instruction markdown
101
101
  file to `.hublaunch/skills/<YYYY-MM-DD-HH:MM-slug>.md`, **publish it to
102
102
  origin/main BEFORE running** via
103
- `bash .github/scripts/hula-execute-manage.sh --publish-skill <path>` (abort if
103
+ `bash .github/scripts/hula-schedule-manage.sh --publish-skill <path>` (abort if
104
104
  that returns `status:"error"`), then run/schedule it with
105
- `bash .github/scripts/hula-execute-run.sh --action-path <path> …`, and report the
105
+ `bash .github/scripts/hula-schedule-run.sh --action-path <path> …`, and report the
106
106
  created file path plus the run/schedule result.
107
107
 
108
108
  ---
@@ -113,8 +113,8 @@ Run via the management wrapper:
113
113
 
114
114
  - `list` (no qualifier) → show **both** recent runs and active schedules:
115
115
  ```bash
116
- bash .github/scripts/hula-execute-manage.sh --list
117
- bash .github/scripts/hula-execute-manage.sh --list-schedules
116
+ bash .github/scripts/hula-schedule-manage.sh --list
117
+ bash .github/scripts/hula-schedule-manage.sh --list-schedules
118
118
  ```
119
119
  - "list runs" → only `--list`. "list schedules" → only `--list-schedules`.
120
120
 
@@ -123,7 +123,7 @@ Display the `cliOutput` from each result.
123
123
  ## Mode: show
124
124
 
125
125
  ```bash
126
- bash .github/scripts/hula-execute-manage.sh --show <runId>
126
+ bash .github/scripts/hula-schedule-manage.sh --show <runId>
127
127
  ```
128
128
 
129
129
  Display the `cliOutput`.
@@ -131,7 +131,7 @@ Display the `cliOutput`.
131
131
  ## Mode: run-now
132
132
 
133
133
  ```bash
134
- bash .github/scripts/hula-execute-manage.sh --run-now <scheduleId>
134
+ bash .github/scripts/hula-schedule-manage.sh --run-now <scheduleId>
135
135
  ```
136
136
 
137
137
  Report the new run id (`runId`) from the JSON, falling back to `cliOutput`.
@@ -140,19 +140,19 @@ Report the new run id (`runId`) from the JSON, falling back to `cliOutput`.
140
140
 
141
141
  1. Cancel the schedule:
142
142
  ```bash
143
- bash .github/scripts/hula-execute-manage.sh --cancel-schedule <scheduleId>
143
+ bash .github/scripts/hula-schedule-manage.sh --cancel-schedule <scheduleId>
144
144
  ```
145
145
  2. If the cancelled schedule referenced an `actionPath` under
146
146
  `.hublaunch/skills/`, **ask the user whether to also delete that file.**
147
147
  3. If they opt in, FIRST verify no other active schedule still uses it:
148
148
  ```bash
149
- bash .github/scripts/hula-execute-manage.sh --list-schedules
149
+ bash .github/scripts/hula-schedule-manage.sh --list-schedules
150
150
  ```
151
151
  - If another active schedule references the same `actionPath`, **refuse** and
152
152
  report which schedule id(s) still use it. Leave the file on the branch.
153
153
  - Otherwise delete it:
154
154
  ```bash
155
- bash .github/scripts/hula-execute-manage.sh --delete-skill <actionPath>
155
+ bash .github/scripts/hula-schedule-manage.sh --delete-skill <actionPath>
156
156
  ```
157
157
 
158
158
  ## Mode: update-skill-file
@@ -167,7 +167,7 @@ schedule.
167
167
  it with `Write` for a large change), keeping the free-form template format.
168
168
  3. Re-publish it:
169
169
  ```bash
170
- bash .github/scripts/hula-execute-manage.sh --publish-skill <actionPath>
170
+ bash .github/scripts/hula-schedule-manage.sh --publish-skill <actionPath>
171
171
  ```
172
172
  4. No schedule change is needed. Inform the user that the **next scheduled run
173
173
  will use the updated content** (the server re-reads the file on every fire).
@@ -180,14 +180,14 @@ update-schedule endpoint, so cancel + recreate on the same action:
180
180
  1. Read the existing schedule's `actionPath` (or `builtIn`), `entryPoint`, and
181
181
  `outcomeType` via:
182
182
  ```bash
183
- bash .github/scripts/hula-execute-manage.sh --list-schedules
183
+ bash .github/scripts/hula-schedule-manage.sh --list-schedules
184
184
  ```
185
185
  2. Resolve the new cron and **confirm the readback** (see Cron table).
186
186
  3. Cancel the old schedule, then recreate with the new cron on the **same**
187
187
  action:
188
188
  ```bash
189
- bash .github/scripts/hula-execute-manage.sh --cancel-schedule <old-id>
190
- bash .github/scripts/hula-execute-run.sh --action-path <same-path> [--entry-point <path>] [--outcome-type <type>] --schedule "<new-cron>"
189
+ bash .github/scripts/hula-schedule-manage.sh --cancel-schedule <old-id>
190
+ bash .github/scripts/hula-schedule-run.sh --action-path <same-path> [--entry-point <path>] [--outcome-type <type>] --schedule "<new-cron>"
191
191
  ```
192
192
  (Use `--built-in <name>` instead of `--action-path` if the schedule used a
193
193
  built-in.)
@@ -241,7 +241,7 @@ display `❌ <message>` and stop.
241
241
  🔖 **Run ID**: <runId>
242
242
  🔗 **PR**: <prUrl> (omit this line if prUrl is empty)
243
243
 
244
- Check status with: /hula-execute show <runId>
244
+ Check status with: /hula-schedule show <runId>
245
245
  ```
246
246
  - schedule (`kind:"schedule"`):
247
247
  ```
@@ -250,7 +250,7 @@ display `❌ <message>` and stop.
250
250
  🔖 **Schedule ID**: <scheduleId>
251
251
  ⏰ **Cron**: <cronExpr>
252
252
 
253
- Manage with: /hula-execute list · /hula-execute run now <scheduleId> · /hula-execute cancel <scheduleId>
253
+ Manage with: /hula-schedule list · /hula-schedule run now <scheduleId> · /hula-schedule cancel <scheduleId>
254
254
  ```
255
255
 
256
256
  If an identifier is empty, fall back to showing the `cliOutput` field.
@@ -263,5 +263,5 @@ If an identifier is empty, fall back to showing the `cliOutput` field.
263
263
  - Do NOT echo secrets.
264
264
  - Generated action files live under `.hublaunch/skills/` and are committed to
265
265
  `origin/main` via a temporary worktree — never on the user's current branch.
266
- - Never run `hula execute` before a `--publish-skill` succeeds.
266
+ - Never run `hula schedule` before a `--publish-skill` succeeds.
267
267
  - Slack/webhook notifications are sent automatically when `updateNotificationUrl` is configured in `.hublaunch/hublaunch.config.js` — no extra flag needed in the skill. The CLI reads it from config on every run and forwards it to the server.
@@ -158,6 +158,7 @@ export declare const ConfigSchema: z.ZodObject<{
158
158
  disk?: number | undefined;
159
159
  }>>;
160
160
  updateNotificationUrl: z.ZodOptional<z.ZodString>;
161
+ updateNotificationNameTag: z.ZodOptional<z.ZodString>;
161
162
  commandAliases: z.ZodOptional<z.ZodObject<{
162
163
  primary: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
163
164
  shortcuts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -328,6 +329,7 @@ export declare const ConfigSchema: z.ZodObject<{
328
329
  disk?: number | undefined;
329
330
  } | undefined;
330
331
  updateNotificationUrl?: string | undefined;
332
+ updateNotificationNameTag?: string | undefined;
331
333
  commandAliases?: {
332
334
  primary: string[];
333
335
  shortcuts?: Record<string, string> | undefined;
@@ -400,6 +402,7 @@ export declare const ConfigSchema: z.ZodObject<{
400
402
  disk?: number | undefined;
401
403
  } | undefined;
402
404
  updateNotificationUrl?: string | undefined;
405
+ updateNotificationNameTag?: string | undefined;
403
406
  commandAliases?: {
404
407
  primary?: string[] | undefined;
405
408
  shortcuts?: Record<string, string> | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../src/types/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,QAAA,MAAM,uBAAuB;;;;;;;;;EAK3B,CAAC;AAEH,QAAA,MAAM,iBAAiB;;;;;;;;;EAGrB,CAAC;AAEH,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGlB,CAAC;AAEH,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;EAOf,CAAC;AAGH,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYrB,CAAC;AAGH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC9E,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAClE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC5D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AACtD,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAGlE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkGvB,CAAC;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAGlD,eAAO,MAAM,cAAc,EAAE,MAe5B,CAAC"}
1
+ {"version":3,"file":"config.schema.d.ts","sourceRoot":"","sources":["../../src/types/config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,QAAA,MAAM,uBAAuB;;;;;;;;;EAK3B,CAAC;AAEH,QAAA,MAAM,iBAAiB;;;;;;;;;EAGrB,CAAC;AAEH,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGlB,CAAC;AAEH,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;EAOf,CAAC;AAGH,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYrB,CAAC;AAGH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC9E,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAClE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC5D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AACtD,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAGlE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmGvB,CAAC;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAGlD,eAAO,MAAM,cAAc,EAAE,MAe5B,CAAC"}
@@ -78,6 +78,7 @@ export const ConfigSchema = z.object({
78
78
  })
79
79
  .optional(),
80
80
  updateNotificationUrl: z.string().optional(),
81
+ updateNotificationNameTag: z.string().optional(),
81
82
  // Command aliases
82
83
  commandAliases: z
83
84
  .object({
@@ -1 +1 @@
1
- {"version":3,"file":"config.schema.js","sourceRoot":"","sources":["../../src/types/config.schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.schema.js","sourceRoot":"","sources":["../../src/types/config.schema.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hub-launch",
3
- "version": "1.9.0",
3
+ "version": "1.10.0",
4
4
  "description": "GitHub Issue and PR automation CLI tool with plugin/hook system for project-specific customizations",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -24,6 +24,8 @@
24
24
  "dev": "tsx src/index.ts",
25
25
  "debug": "tsx --inspect-brk src/index.ts",
26
26
  "typecheck": "tsc --noEmit",
27
+ "test": "vitest run",
28
+ "test:watch": "vitest",
27
29
  "test:scripts": "bats src/templates/scripts/__tests__/*.test.sh",
28
30
  "regression": "tsc --noEmit && tsc && shx chmod +x dist/index.js && npm run copy-templates",
29
31
  "clean": "shx rm -rf dist",
@@ -66,7 +68,8 @@
66
68
  "bats": "^1.11.0",
67
69
  "shx": "^0.4.0",
68
70
  "tsx": "^4.20.6",
69
- "typescript": "^5.3.3"
71
+ "typescript": "^5.3.3",
72
+ "vitest": "^3.2.4"
70
73
  },
71
74
  "engines": {
72
75
  "node": ">=18.0.0"