hub-launch 1.16.0 → 1.17.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 +6 -0
- package/README.md +101 -2
- package/dist/commands/init.d.ts +55 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +93 -103
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/instructions.d.ts +17 -0
- package/dist/commands/instructions.d.ts.map +1 -0
- package/dist/commands/instructions.js +51 -0
- package/dist/commands/instructions.js.map +1 -0
- package/dist/commands/launch.d.ts +21 -0
- package/dist/commands/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +61 -0
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/script.d.ts +28 -0
- package/dist/commands/script.d.ts.map +1 -0
- package/dist/commands/script.js +69 -0
- package/dist/commands/script.js.map +1 -0
- package/dist/commands/session-hook.d.ts +26 -0
- package/dist/commands/session-hook.d.ts.map +1 -0
- package/dist/commands/session-hook.js +146 -0
- package/dist/commands/session-hook.js.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -1
- package/dist/scripts/fix-commit.d.ts +2 -0
- package/dist/scripts/fix-commit.d.ts.map +1 -0
- package/dist/scripts/fix-commit.js +125 -0
- package/dist/scripts/fix-commit.js.map +1 -0
- package/dist/scripts/fix-setup.d.ts +2 -0
- package/dist/scripts/fix-setup.d.ts.map +1 -0
- package/dist/scripts/fix-setup.js +161 -0
- package/dist/scripts/fix-setup.js.map +1 -0
- package/dist/scripts/launch-run.d.ts +14 -0
- package/dist/scripts/launch-run.d.ts.map +1 -0
- package/dist/scripts/launch-run.js +117 -0
- package/dist/scripts/launch-run.js.map +1 -0
- package/dist/scripts/lib/exec.d.ts +48 -0
- package/dist/scripts/lib/exec.d.ts.map +1 -0
- package/dist/scripts/lib/exec.js +61 -0
- package/dist/scripts/lib/exec.js.map +1 -0
- package/dist/scripts/lib/io.d.ts +48 -0
- package/dist/scripts/lib/io.d.ts.map +1 -0
- package/dist/scripts/lib/io.js +72 -0
- package/dist/scripts/lib/io.js.map +1 -0
- package/dist/scripts/lib/read-config.d.ts +26 -0
- package/dist/scripts/lib/read-config.d.ts.map +1 -0
- package/dist/scripts/lib/read-config.js +65 -0
- package/dist/scripts/lib/read-config.js.map +1 -0
- package/dist/scripts/merge-local.d.ts +2 -0
- package/dist/scripts/merge-local.d.ts.map +1 -0
- package/dist/scripts/merge-local.js +146 -0
- package/dist/scripts/merge-local.js.map +1 -0
- package/dist/scripts/merge-remote.d.ts +12 -0
- package/dist/scripts/merge-remote.d.ts.map +1 -0
- package/dist/scripts/merge-remote.js +71 -0
- package/dist/scripts/merge-remote.js.map +1 -0
- package/dist/scripts/schedule-manage.d.ts +2 -0
- package/dist/scripts/schedule-manage.d.ts.map +1 -0
- package/dist/scripts/schedule-manage.js +151 -0
- package/dist/scripts/schedule-manage.js.map +1 -0
- package/dist/scripts/schedule-run.d.ts +2 -0
- package/dist/scripts/schedule-run.d.ts.map +1 -0
- package/dist/scripts/schedule-run.js +146 -0
- package/dist/scripts/schedule-run.js.map +1 -0
- package/dist/scripts/verify-gather.d.ts +2 -0
- package/dist/scripts/verify-gather.d.ts.map +1 -0
- package/dist/scripts/verify-gather.js +210 -0
- package/dist/scripts/verify-gather.js.map +1 -0
- package/dist/scripts/verify-post.d.ts +12 -0
- package/dist/scripts/verify-post.d.ts.map +1 -0
- package/dist/scripts/verify-post.js +72 -0
- package/dist/scripts/verify-post.js.map +1 -0
- package/dist/templates/planning-instructions.md +7 -7
- package/dist/templates/skill-creation-instructions.md +2 -2
- package/dist/templates/skills/hula-confirm/SKILL.md +3 -3
- package/dist/templates/skills/hula-fix/SKILL.md +3 -3
- package/dist/templates/skills/hula-launch/SKILL.md +14 -8
- package/dist/templates/skills/hula-merge/SKILL.md +2 -2
- package/dist/templates/skills/hula-plan/SKILL.md +5 -5
- package/dist/templates/skills/hula-schedule/SKILL.md +16 -16
- package/dist/templates/skills/hula-verify/SKILL.md +2 -2
- package/dist/types/config.schema.d.ts +235 -0
- package/dist/types/config.schema.d.ts.map +1 -1
- package/dist/types/config.schema.js +66 -0
- package/dist/types/config.schema.js.map +1 -1
- package/dist/utils/client-session.d.ts +2 -2
- package/dist/utils/client-session.js +2 -2
- package/package.json +6 -5
- package/scripts/postinstall.mjs +101 -0
- package/dist/templates/scripts/hula-fix-commit.sh +0 -114
- package/dist/templates/scripts/hula-fix-setup.sh +0 -152
- package/dist/templates/scripts/hula-launch-run.sh +0 -140
- package/dist/templates/scripts/hula-merge-local.sh +0 -138
- package/dist/templates/scripts/hula-merge-remote.sh +0 -94
- package/dist/templates/scripts/hula-read-config.sh +0 -38
- package/dist/templates/scripts/hula-schedule-manage.sh +0 -159
- package/dist/templates/scripts/hula-schedule-run.sh +0 -148
- package/dist/templates/scripts/hula-session-hook.sh +0 -68
- package/dist/templates/scripts/hula-verify-gather.sh +0 -135
- package/dist/templates/scripts/hula-verify-post.sh +0 -84
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* verify-post — Step 8 of the hula.verify workflow.
|
|
3
|
+
* Invoked as: `hula script verify-post -- <pr-number> <report-file>`
|
|
4
|
+
*
|
|
5
|
+
* Posts a verification report as a PR comment mentioning @copilot.
|
|
6
|
+
* Emits structured JSON to stdout; all other output goes to stderr.
|
|
7
|
+
* Exit codes: 0=success, 1=user error, 2=tool error.
|
|
8
|
+
*
|
|
9
|
+
* Node port of `hula-verify-post.sh` (cross-platform: no bash, no jq).
|
|
10
|
+
*/
|
|
11
|
+
export declare function main(args: string[]): Promise<number>;
|
|
12
|
+
//# sourceMappingURL=verify-post.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-post.d.ts","sourceRoot":"","sources":["../../src/scripts/verify-post.ts"],"names":[],"mappings":"AAOA;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA2DpD"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { readFile, rm, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { runGh } from './lib/exec.js';
|
|
6
|
+
import { emitJson, fail, logStderr, runScript } from './lib/io.js';
|
|
7
|
+
/**
|
|
8
|
+
* verify-post — Step 8 of the hula.verify workflow.
|
|
9
|
+
* Invoked as: `hula script verify-post -- <pr-number> <report-file>`
|
|
10
|
+
*
|
|
11
|
+
* Posts a verification report as a PR comment mentioning @copilot.
|
|
12
|
+
* Emits structured JSON to stdout; all other output goes to stderr.
|
|
13
|
+
* Exit codes: 0=success, 1=user error, 2=tool error.
|
|
14
|
+
*
|
|
15
|
+
* Node port of `hula-verify-post.sh` (cross-platform: no bash, no jq).
|
|
16
|
+
*/
|
|
17
|
+
export function main(args) {
|
|
18
|
+
return runScript(async () => {
|
|
19
|
+
// ── argument parsing ──────────────────────────────────────────────────
|
|
20
|
+
let prNumber = '';
|
|
21
|
+
let reportFile = '';
|
|
22
|
+
for (const a of args) {
|
|
23
|
+
if (/^[0-9]/.test(a)) {
|
|
24
|
+
if (!prNumber)
|
|
25
|
+
prNumber = a;
|
|
26
|
+
else
|
|
27
|
+
fail(1, `Unexpected positional argument: ${a}`);
|
|
28
|
+
}
|
|
29
|
+
else if (!reportFile) {
|
|
30
|
+
reportFile = a;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
fail(1, `Unknown argument: ${a}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (!prNumber) {
|
|
37
|
+
fail(1, 'Usage: hula script verify-post -- <pr-number> <report-file>');
|
|
38
|
+
}
|
|
39
|
+
if (!reportFile) {
|
|
40
|
+
fail(1, 'Report file path is required as second argument.');
|
|
41
|
+
}
|
|
42
|
+
if (!existsSync(reportFile)) {
|
|
43
|
+
fail(1, `Report file not found: ${reportFile}`);
|
|
44
|
+
}
|
|
45
|
+
// ── Build comment body with @copilot mention ──────────────────────────
|
|
46
|
+
const commentTmp = join(tmpdir(), `hula-verify-comment-${prNumber}.md`);
|
|
47
|
+
const report = await readFile(reportFile, 'utf-8');
|
|
48
|
+
const body = '@copilot Please review this verification report and address any gaps.\n\n' +
|
|
49
|
+
report;
|
|
50
|
+
await writeFile(commentTmp, body, 'utf-8');
|
|
51
|
+
// ── Post comment ──────────────────────────────────────────────────────
|
|
52
|
+
logStderr(`📝 Posting verification report to PR #${prNumber}...`);
|
|
53
|
+
const res = await runGh([
|
|
54
|
+
'pr',
|
|
55
|
+
'comment',
|
|
56
|
+
prNumber,
|
|
57
|
+
'--body-file',
|
|
58
|
+
commentTmp,
|
|
59
|
+
]);
|
|
60
|
+
if (res.code !== 0) {
|
|
61
|
+
fail(2, `Failed to post comment to PR #${prNumber}. You can copy the report manually.`);
|
|
62
|
+
}
|
|
63
|
+
await rm(commentTmp, { force: true });
|
|
64
|
+
// ── Output result ─────────────────────────────────────────────────────
|
|
65
|
+
emitJson({
|
|
66
|
+
status: 'success',
|
|
67
|
+
prNumber: Number(prNumber),
|
|
68
|
+
commentUrl: res.stdout.trim(),
|
|
69
|
+
});
|
|
70
|
+
}, args);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=verify-post.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-post.js","sourceRoot":"","sources":["../../src/scripts/verify-post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEnE;;;;;;;;;GASG;AACH,MAAM,UAAU,IAAI,CAAC,IAAc;IACjC,OAAO,SAAS,CAAC,KAAK,IAAI,EAAE;QAC1B,yEAAyE;QACzE,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,IAAI,CAAC,QAAQ;oBAAE,QAAQ,GAAG,CAAC,CAAC;;oBACvB,IAAI,CAAC,CAAC,EAAE,mCAAmC,CAAC,EAAE,CAAC,CAAC;YACvD,CAAC;iBAAM,IAAI,CAAC,UAAU,EAAE,CAAC;gBACvB,UAAU,GAAG,CAAC,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,CAAC,EAAE,6DAA6D,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,CAAC,EAAE,kDAAkD,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC,EAAE,0BAA0B,UAAU,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,yEAAyE;QACzE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,uBAAuB,QAAQ,KAAK,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,IAAI,GACR,2EAA2E;YAC3E,MAAM,CAAC;QACT,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAE3C,yEAAyE;QACzE,SAAS,CAAC,yCAAyC,QAAQ,KAAK,CAAC,CAAC;QAClE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC;YACtB,IAAI;YACJ,SAAS;YACT,QAAQ;YACR,aAAa;YACb,UAAU;SACX,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACnB,IAAI,CACF,CAAC,EACD,iCAAiC,QAAQ,qCAAqC,CAC/E,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtC,yEAAyE;QACzE,QAAQ,CAAC;YACP,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;YAC1B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;SAC9B,CAAC,CAAC;IACL,CAAC,EAAE,IAAI,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -54,13 +54,13 @@ This means:
|
|
|
54
54
|
- Inform the user that the plan has been created
|
|
55
55
|
- **Immediately proceed** to the confirmation/validation workflow
|
|
56
56
|
- Do NOT wait for the user to type `/hula-confirm` — continue in the same session
|
|
57
|
-
- Read
|
|
57
|
+
- Read `hula instructions proceed` and execute validation against the saved plan
|
|
58
58
|
- Skip the file-location confirmation step (the path is already known from this session)
|
|
59
59
|
|
|
60
60
|
**PHASE 6: INLINE VALIDATION (replaces separate /hula-confirm)**
|
|
61
61
|
|
|
62
62
|
- Validation runs automatically after the plan file is saved
|
|
63
|
-
- Execute the full `proceed
|
|
63
|
+
- Execute the full `hula instructions proceed` validation workflow inline
|
|
64
64
|
- The MCQ validation questions (if any) are asked in this same session
|
|
65
65
|
- Plan is updated with improvements before handing off to the user
|
|
66
66
|
- `/hula-confirm` remains available as a standalone command for re-validation at any time
|
|
@@ -237,10 +237,10 @@ After generating and saving the draft plan file (following Phase 6 below), infor
|
|
|
237
237
|
|
|
238
238
|
1. **Inform the user** that the plan has been created
|
|
239
239
|
2. **Announce auto-continue**: State that validation is starting now (no user action needed)
|
|
240
|
-
3. **Execute validation inline**: Read
|
|
240
|
+
3. **Execute validation inline**: Read `hula instructions proceed` and run the full validation workflow against the plan file you just saved
|
|
241
241
|
4. **Skip the file-location guard**: The plan path is already known from this session — do not ask "Is this correct?"
|
|
242
242
|
5. **Carry forward context**: Use everything learned during planning to resolve validation questions where possible
|
|
243
|
-
6. **Offer the launch**: After validation completes, follow the "Launch Offer" section of
|
|
243
|
+
6. **Offer the launch**: After validation completes, follow the "Launch Offer" section of `hula instructions proceed` — determine the issue name, ask the launch question, and on an affirmative reply execute the `/hula-launch` workflow. Never launch without an affirmative reply.
|
|
244
244
|
|
|
245
245
|
**Output format after saving the plan file:**
|
|
246
246
|
|
|
@@ -252,7 +252,7 @@ After generating and saving the draft plan file (following Phase 6 below), infor
|
|
|
252
252
|
📋 **Proceeding to validation now…**
|
|
253
253
|
```
|
|
254
254
|
|
|
255
|
-
Then continue immediately by reading
|
|
255
|
+
Then continue immediately by reading `hula instructions proceed` and executing the validation workflow against the saved plan path. Begin at Step 2 (Comprehensive Validation Analysis) — skip Step 1 (file location) because the path is already known.
|
|
256
256
|
|
|
257
257
|
**Recovery fallback:** If inline validation cannot complete (context window limit, tool error, interrupted session), print:
|
|
258
258
|
|
|
@@ -292,7 +292,7 @@ After successfully saving the plan, output the handoff message from Phase 5 abov
|
|
|
292
292
|
📋 **Proceeding to validation now…**
|
|
293
293
|
```
|
|
294
294
|
|
|
295
|
-
Then immediately continue with the inline validation workflow described in Phase 5 (read
|
|
295
|
+
Then immediately continue with the inline validation workflow described in Phase 5 (read `hula instructions proceed` and execute it against the saved plan path, starting from Step 2 and skipping the file-location confirmation).
|
|
296
296
|
|
|
297
297
|
The HTML comment allows the system to reference the plan file for further operations.
|
|
298
298
|
|
|
@@ -701,7 +701,7 @@ src/
|
|
|
701
701
|
- Phase 3: Create DRAFT plan
|
|
702
702
|
- Phase 4: Save the plan file immediately
|
|
703
703
|
- Phase 5: Auto-continue to validation in the same session
|
|
704
|
-
- Phase 6: Inline validation (replaces separate `/hula-confirm`; the standalone command remains available) — ends with the Launch Offer (see
|
|
704
|
+
- Phase 6: Inline validation (replaces separate `/hula-confirm`; the standalone command remains available) — ends with the Launch Offer (see `hula instructions proceed`)
|
|
705
705
|
|
|
706
706
|
4. **PLAN FOR AI IMPLEMENTATION**: The plan must be self-contained
|
|
707
707
|
|
|
@@ -88,7 +88,7 @@ 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
|
-
|
|
91
|
+
hula script schedule-manage -- --publish-skill .hublaunch/skills/<filename>
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
Parse the single JSON object it prints:
|
|
@@ -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
|
-
|
|
106
|
+
hula script schedule-run -- --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.
|
|
@@ -10,9 +10,9 @@ You are an expert plan validator for the HubLaunch project, specializing in ensu
|
|
|
10
10
|
|
|
11
11
|
## Instructions
|
|
12
12
|
|
|
13
|
-
Read the detailed confirmation guidelines
|
|
13
|
+
Read the detailed confirmation guidelines by running:
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
`hula instructions proceed`
|
|
16
16
|
|
|
17
17
|
Follow those instructions carefully to validate and enhance implementation plans.
|
|
18
18
|
|
|
@@ -296,7 +296,7 @@ After updating the plan:
|
|
|
296
296
|
🚀 Are you ready to launch? (Unless you tell me otherwise, I'll use the issue name `<issueName>`.)
|
|
297
297
|
```
|
|
298
298
|
|
|
299
|
-
Then follow the **Launch Offer** section of
|
|
299
|
+
Then follow the **Launch Offer** section of `hula instructions proceed`: resolve `<issueName>`, ask the launch question, and on an affirmative reply execute the `/hula-launch` workflow with `<issueName> <planPath>` (plus any `--handoff`/`--test` flags). Never launch without an affirmative reply; on a negative or deferring reply, print the fallback message and stop.
|
|
300
300
|
|
|
301
301
|
## Important Guidelines
|
|
302
302
|
|
|
@@ -68,7 +68,7 @@ Stop execution here. Do not proceed.
|
|
|
68
68
|
Run the setup script — it handles issue lookup, validation, worktree creation, and session file writing in one terminal approval:
|
|
69
69
|
|
|
70
70
|
```bash
|
|
71
|
-
|
|
71
|
+
hula script fix-setup -- <issue-number>
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
The script outputs JSON with `status`, `issueTitle`, `prBranch`, `worktreePath`, and `sessionFile`.
|
|
@@ -111,7 +111,7 @@ Switch your working context:
|
|
|
111
111
|
cd <worktreePath>
|
|
112
112
|
```
|
|
113
113
|
|
|
114
|
-
Where `<worktreePath>` is the path returned by `hula
|
|
114
|
+
Where `<worktreePath>` is the path returned by `hula script fix-setup` in Step 2.
|
|
115
115
|
|
|
116
116
|
Apply fixes using the edit tool, making sure file paths are relative to (or inside) the worktree directory.
|
|
117
117
|
|
|
@@ -133,7 +133,7 @@ Progress display:
|
|
|
133
133
|
Generate a commit message based on the issue number, files changed, and nature of changes, then run the commit script (one terminal approval):
|
|
134
134
|
|
|
135
135
|
```bash
|
|
136
|
-
|
|
136
|
+
hula script fix-commit -- <issue-number> "fix(#42): <generated-message>"
|
|
137
137
|
```
|
|
138
138
|
|
|
139
139
|
The script outputs JSON with `status`, `commitMessage`, and `filesChanged`.
|
|
@@ -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>] [--handoff <username>] [--test] [--kill] [--kill-and-relaunch]
|
|
5
|
+
argument-hint: <branch-name> [<plan-path>] [--handoff <username>] [--test] [--skip-regression] [--kill] [--kill-and-relaunch]
|
|
6
6
|
allowed-tools: Bash Read
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -15,6 +15,7 @@ From `$ARGUMENTS`:
|
|
|
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
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).
|
|
18
|
+
- **--skip-regression** (optional): the bare flag `--skip-regression`, anywhere in `$ARGUMENTS`. Force-skips the regression-tests pipeline step for this one launch (overrides any `steps.regression.skip` config default).
|
|
18
19
|
- **--kill** (optional): the bare flag `--kill`, anywhere in `$ARGUMENTS`. Stops the in-flight task for this branch name **without** relaunching. A plan path is **not** required with `--kill` — the branch name alone is enough.
|
|
19
20
|
- **--kill-and-relaunch** (optional): the bare flag `--kill-and-relaunch`, anywhere in `$ARGUMENTS`. Cancels the in-flight task, resets stale state, and launches a fresh task (needs a plan path, like a normal launch).
|
|
20
21
|
|
|
@@ -47,34 +48,39 @@ With the values known, run exactly one Bash command.
|
|
|
47
48
|
|
|
48
49
|
Without handoff:
|
|
49
50
|
```bash
|
|
50
|
-
|
|
51
|
+
hula script launch-run -- <plan-path> <branch-name>
|
|
51
52
|
```
|
|
52
53
|
|
|
53
54
|
With handoff:
|
|
54
55
|
```bash
|
|
55
|
-
|
|
56
|
+
hula script launch-run -- <plan-path> <branch-name> --handoff <username>
|
|
56
57
|
```
|
|
57
58
|
|
|
58
59
|
With test mode:
|
|
59
60
|
```bash
|
|
60
|
-
|
|
61
|
+
hula script launch-run -- <plan-path> <branch-name> --test
|
|
61
62
|
```
|
|
62
63
|
|
|
63
64
|
With handoff + test mode:
|
|
64
65
|
```bash
|
|
65
|
-
|
|
66
|
+
hula script launch-run -- <plan-path> <branch-name> --handoff <username> --test
|
|
66
67
|
```
|
|
67
68
|
|
|
68
|
-
|
|
69
|
+
With skip-regression:
|
|
70
|
+
```bash
|
|
71
|
+
hula script launch-run -- <plan-path> <branch-name> --skip-regression
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Append `--test` whenever the user passed it; it composes with `--handoff`. Append `--skip-regression` whenever the user passed it; it composes with `--handoff` and `--test` too.
|
|
69
75
|
|
|
70
76
|
**Stop the in-flight task without relaunching (`--kill`)** — pass only the branch name (no plan path):
|
|
71
77
|
```bash
|
|
72
|
-
|
|
78
|
+
hula script launch-run -- <branch-name> --kill
|
|
73
79
|
```
|
|
74
80
|
|
|
75
81
|
**Kill the in-flight task and relaunch fresh (`--kill-and-relaunch`)** — needs a plan path, like a normal launch, and composes with `--handoff`/`--test`:
|
|
76
82
|
```bash
|
|
77
|
-
|
|
83
|
+
hula script launch-run -- <plan-path> <branch-name> --kill-and-relaunch
|
|
78
84
|
```
|
|
79
85
|
|
|
80
86
|
## Step 3: Show the result
|
|
@@ -130,7 +130,7 @@ Suggested test command: npm test
|
|
|
130
130
|
Generate a commit message based on the issue number, files changed, and nature of changes, then run the local-merge script — it handles commit, push, merge, worktree removal, and session cleanup in one terminal approval:
|
|
131
131
|
|
|
132
132
|
```bash
|
|
133
|
-
|
|
133
|
+
hula script merge-local -- <issue-number> "<worktreePath>" "fix(#42): <generated-message>"
|
|
134
134
|
```
|
|
135
135
|
|
|
136
136
|
The script outputs JSON with `status`, `committed`, `filesChanged`, `worktreeRemoved`, and `sessionCleaned`.
|
|
@@ -209,7 +209,7 @@ Follow this path when no local fix session/worktree exists. This is the common p
|
|
|
209
209
|
Run the remote-merge script — it merges the PR directly on GitHub and cleans up any stale session file in one terminal approval:
|
|
210
210
|
|
|
211
211
|
```bash
|
|
212
|
-
|
|
212
|
+
hula script merge-remote -- <issue-number>
|
|
213
213
|
```
|
|
214
214
|
|
|
215
215
|
The script outputs JSON with `status`, `issueNumber`, `sessionCleaned`, and `localUpdated`.
|
|
@@ -10,9 +10,9 @@ You are an expert technical planner for the HubLaunch project.
|
|
|
10
10
|
|
|
11
11
|
## Instructions
|
|
12
12
|
|
|
13
|
-
Read the detailed planning guidelines
|
|
13
|
+
Read the detailed planning guidelines by running:
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
`hula instructions planning`
|
|
16
16
|
|
|
17
17
|
Follow those instructions carefully to generate a comprehensive implementation plan.
|
|
18
18
|
|
|
@@ -23,7 +23,7 @@ The user will describe a feature or issue. Your job is to:
|
|
|
23
23
|
1. **ASK CLARIFYING QUESTIONS FIRST** - Do not immediately generate a plan
|
|
24
24
|
2. Understand the requirements through questions and answers
|
|
25
25
|
3. Analyze the existing codebase context
|
|
26
|
-
4. Generate a structured plan following the template
|
|
26
|
+
4. Generate a structured plan following the template from `hula instructions planning`
|
|
27
27
|
5. Include specific file paths, code suggestions, and actionable steps
|
|
28
28
|
6. Consider testing, documentation, and edge cases
|
|
29
29
|
|
|
@@ -133,7 +133,7 @@ The plan should be immediately actionable by a developer familiar with the codeb
|
|
|
133
133
|
|
|
134
134
|
Now proceed directly to plan validation **without waiting for the user**. The plan file was just created in this session — the path is already known.
|
|
135
135
|
|
|
136
|
-
Read
|
|
136
|
+
Read `hula instructions proceed` and execute the full validation workflow against the plan at `<path>` (substitute `<path>` with the actual plan file path you just created, e.g. `.hublaunch/plans/2025-12-29-14:30-feature-name.md`).
|
|
137
137
|
|
|
138
138
|
**Important adjustments for inline execution:**
|
|
139
139
|
|
|
@@ -144,6 +144,6 @@ Read `.hublaunch/proceed-instructions.md` and execute the full validation workfl
|
|
|
144
144
|
> ⚠️ Auto-validation could not complete. Run `/hula-confirm <path>` to resume.
|
|
145
145
|
|
|
146
146
|
where `<path>` is the plan file path.
|
|
147
|
-
- **Finish with the Launch Offer** — after validation completes, execute the "Launch Offer" section of
|
|
147
|
+
- **Finish with the Launch Offer** — after validation completes, execute the "Launch Offer" section of `hula instructions proceed` (issue-name resolution, the launch question, and launching on an affirmative reply). Never launch without an affirmative reply.
|
|
148
148
|
|
|
149
149
|
**Note:** The plan is saved locally. When you run `/hula-launch`, the plan is automatically synced to `origin/main` before the GitHub issue is created and the implementation begins — no separate upload step needed. Because validation ends with the Launch Offer, an affirmative reply runs the `/hula-launch` workflow for the user automatically; they can also decline and run `/hula-launch` themselves later. `/hula-confirm` remains available as a standalone command for re-validation at any time.
|
|
@@ -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
|
-
|
|
79
|
+
hula script schedule-run -- --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
|
-
|
|
85
|
+
hula script schedule-run -- --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
|
|
@@ -95,14 +95,14 @@ report the result (see **Reporting run/schedule results**).
|
|
|
95
95
|
|
|
96
96
|
The user described what they want done but did not supply an existing action.
|
|
97
97
|
|
|
98
|
-
**Read
|
|
98
|
+
**Read `hula instructions skill-creation` and follow it exactly.** In
|
|
99
99
|
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
|
-
`
|
|
103
|
+
`hula script schedule-manage -- --publish-skill <path>` (abort if
|
|
104
104
|
that returns `status:"error"`), then run/schedule it with
|
|
105
|
-
`
|
|
105
|
+
`hula script schedule-run -- --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
|
-
|
|
117
|
-
|
|
116
|
+
hula script schedule-manage -- --list
|
|
117
|
+
hula script schedule-manage -- --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
|
-
|
|
126
|
+
hula script schedule-manage -- --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
|
-
|
|
134
|
+
hula script schedule-manage -- --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
|
-
|
|
143
|
+
hula script schedule-manage -- --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
|
-
|
|
149
|
+
hula script schedule-manage -- --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
|
-
|
|
155
|
+
hula script schedule-manage -- --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
|
-
|
|
170
|
+
hula script schedule-manage -- --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
|
-
|
|
183
|
+
hula script schedule-manage -- --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
|
-
|
|
190
|
-
|
|
189
|
+
hula script schedule-manage -- --cancel-schedule <old-id>
|
|
190
|
+
hula script schedule-run -- --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.)
|
|
@@ -72,7 +72,7 @@ Stop execution here. Do not proceed.
|
|
|
72
72
|
Run the gather script — it fetches issue details, finds the linked PR, and downloads file changes and diff in one terminal approval:
|
|
73
73
|
|
|
74
74
|
```bash
|
|
75
|
-
|
|
75
|
+
hula script verify-gather -- <issue-number>
|
|
76
76
|
```
|
|
77
77
|
|
|
78
78
|
The script outputs JSON with `status`, `issueTitle`, `issueState`, `issueUrl`, `prNumber`, `prTitle`, `prUrl`, `prState`, `prBranch`, `prIsDraft`, `diffFile`, `filesChanged`, and `lines`.
|
|
@@ -295,7 +295,7 @@ Wait for user response.
|
|
|
295
295
|
Save the verification report to a temporary file, then run the post script (one terminal approval):
|
|
296
296
|
|
|
297
297
|
```bash
|
|
298
|
-
|
|
298
|
+
hula script verify-post -- <pr-number> /tmp/hula-verify-report-<pr-number>.md
|
|
299
299
|
```
|
|
300
300
|
|
|
301
301
|
The script outputs JSON with `status`, `prNumber`, and `commentUrl`.
|