hub-launch 1.16.0 → 1.18.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 +14 -0
- package/README.md +102 -2
- package/dist/commands/init.d.ts +61 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +125 -114
- 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 +22 -1
- 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 +206 -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 +91 -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-help/SKILL.md +117 -0
- 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 +32 -33
- 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 +102 -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> [--repo-root <path>]`
|
|
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,CAmFpD"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { runGh } from './lib/exec.js';
|
|
5
|
+
import { emitJson, fail, logStderr, runScript } from './lib/io.js';
|
|
6
|
+
import { resolveRepoRoot } from './lib/read-config.js';
|
|
7
|
+
/**
|
|
8
|
+
* verify-post — Step 8 of the hula.verify workflow.
|
|
9
|
+
* Invoked as: `hula script verify-post -- <pr-number> <report-file> [--repo-root <path>]`
|
|
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
|
+
let repoRootArg = '';
|
|
23
|
+
for (let i = 0; i < args.length; i++) {
|
|
24
|
+
const a = args[i];
|
|
25
|
+
if (a === '--repo-root') {
|
|
26
|
+
repoRootArg = args[++i] ?? '';
|
|
27
|
+
}
|
|
28
|
+
else if (a.startsWith('--repo-root=')) {
|
|
29
|
+
repoRootArg = a.slice('--repo-root='.length);
|
|
30
|
+
}
|
|
31
|
+
else if (/^[0-9]/.test(a)) {
|
|
32
|
+
if (!prNumber)
|
|
33
|
+
prNumber = a;
|
|
34
|
+
else
|
|
35
|
+
fail(1, `Unexpected positional argument: ${a}`);
|
|
36
|
+
}
|
|
37
|
+
else if (!reportFile) {
|
|
38
|
+
reportFile = a;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
fail(1, `Unknown argument: ${a}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (!prNumber) {
|
|
45
|
+
fail(1, 'Usage: hula script verify-post -- <pr-number> <report-file> [--repo-root <path>]');
|
|
46
|
+
}
|
|
47
|
+
if (!reportFile) {
|
|
48
|
+
fail(1, 'Report file path is required as second argument.');
|
|
49
|
+
}
|
|
50
|
+
if (!existsSync(reportFile)) {
|
|
51
|
+
fail(1, `Report file not found: ${reportFile}`);
|
|
52
|
+
}
|
|
53
|
+
// Resolve the repo root and ensure the repo-local tmp directory exists.
|
|
54
|
+
// Done defensively here too (not just in verify-gather) in case verify-post
|
|
55
|
+
// is invoked in isolation without verify-gather having run first.
|
|
56
|
+
const cwd = repoRootArg || undefined;
|
|
57
|
+
const repoRoot = await resolveRepoRoot(cwd);
|
|
58
|
+
const tmpDir = join(repoRoot, '.hublaunch', 'tmp');
|
|
59
|
+
await mkdir(tmpDir, { recursive: true });
|
|
60
|
+
// ── Build comment body with @copilot mention ──────────────────────────
|
|
61
|
+
const commentTmp = join(tmpDir, `hula-verify-comment-${prNumber}.md`);
|
|
62
|
+
const report = await readFile(reportFile, 'utf-8');
|
|
63
|
+
const body = '@copilot Please review this verification report and address any gaps.\n\n' +
|
|
64
|
+
report;
|
|
65
|
+
await writeFile(commentTmp, body, 'utf-8');
|
|
66
|
+
// ── Post comment ──────────────────────────────────────────────────────
|
|
67
|
+
logStderr(`📝 Posting verification report to PR #${prNumber}...`);
|
|
68
|
+
const res = await runGh(['pr', 'comment', prNumber, '--body-file', commentTmp], { cwd });
|
|
69
|
+
if (res.code !== 0) {
|
|
70
|
+
fail(2, `Failed to post comment to PR #${prNumber}. You can copy the report manually.`);
|
|
71
|
+
}
|
|
72
|
+
// Best-effort cleanup of all three repo-local scratch files for this PR:
|
|
73
|
+
// the comment body, the report Claude wrote, and the diff verify-gather
|
|
74
|
+
// wrote. `{ force: true }` so a missing file (e.g. the diff was never
|
|
75
|
+
// fetched, or gather ran under a different --repo-root) is a silent no-op
|
|
76
|
+
// and never turns a successful post into a reported failure.
|
|
77
|
+
const diffFile = join(tmpDir, `hula-verify-diff-${prNumber}.patch`);
|
|
78
|
+
await Promise.all([
|
|
79
|
+
rm(commentTmp, { force: true }),
|
|
80
|
+
rm(reportFile, { force: true }),
|
|
81
|
+
rm(diffFile, { force: true }),
|
|
82
|
+
]);
|
|
83
|
+
// ── Output result ─────────────────────────────────────────────────────
|
|
84
|
+
emitJson({
|
|
85
|
+
status: 'success',
|
|
86
|
+
prNumber: Number(prNumber),
|
|
87
|
+
commentUrl: res.stdout.trim(),
|
|
88
|
+
});
|
|
89
|
+
}, args);
|
|
90
|
+
}
|
|
91
|
+
//# 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,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClE,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;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;;;;;;;;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,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;YACnB,IAAI,CAAC,KAAK,aAAa,EAAE,CAAC;gBACxB,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,CAAC;iBAAM,IAAI,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBACxC,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC/C,CAAC;iBAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5B,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,CACF,CAAC,EACD,kFAAkF,CACnF,CAAC;QACJ,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,wEAAwE;QACxE,4EAA4E;QAC5E,kEAAkE;QAClE,MAAM,GAAG,GAAG,WAAW,IAAI,SAAS,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzC,yEAAyE;QACzE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,uBAAuB,QAAQ,KAAK,CAAC,CAAC;QACtE,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,CACrB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,EACtD,EAAE,GAAG,EAAE,CACR,CAAC;QACF,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACnB,IAAI,CACF,CAAC,EACD,iCAAiC,QAAQ,qCAAqC,CAC/E,CAAC;QACJ,CAAC;QAED,yEAAyE;QACzE,wEAAwE;QACxE,sEAAsE;QACtE,0EAA0E;QAC1E,6DAA6D;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,oBAAoB,QAAQ,QAAQ,CAAC,CAAC;QACpE,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,EAAE,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC/B,EAAE,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC/B,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SAC9B,CAAC,CAAC;QAEH,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`.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hula-help
|
|
3
|
+
description: Interactive onboarding and reference guide for hub-launch. Walks new users through prerequisites, hula login, hula init, and the plan → launch → verify → fix → merge workflow, and looks up any hula command or /hula-* skill. Use when the user is new to hub-launch, unsure what to run next, or asks how a command/skill works.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
argument-hint: "[getting-started|workflow|commands|config|<question>]"
|
|
6
|
+
allowed-tools: Bash Read
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
You are an onboarding guide for hub-launch (the `hula` CLI and its `/hula-*` Agent Skills). Your job is to help a user — often a beginner — understand what hub-launch is, what's already set up in their project, and what to do next, through a short, interactive conversation. Never overwhelm: one focused answer or menu at a time, then wait for the user's next pick.
|
|
10
|
+
|
|
11
|
+
## Golden rules
|
|
12
|
+
|
|
13
|
+
1. **Read live, never guess or embed stale copy.** Always pull current facts from `README.md`, `docs/commands.md`, and (where relevant) `hula <command> --help` in this repo — never rely on memorized text, since it can drift out of date.
|
|
14
|
+
2. **Informational by default.** Explain what to run and why. Only *run* a command yourself under "What you're allowed to run" below.
|
|
15
|
+
3. **One step at a time.** Don't dump the whole README. Answer what was asked, then offer the next logical option.
|
|
16
|
+
4. **Beginner-safe tone.** No unexplained jargon. Define terms the first time you use them (e.g. "a *plan* is a markdown file describing what to build").
|
|
17
|
+
5. **No troubleshooting.** This skill is for getting started and looking things up, not for diagnosing errors or stuck states. If asked to debug something broken, say that's outside what this skill covers and point at the relevant command's own error output instead.
|
|
18
|
+
|
|
19
|
+
## Input
|
|
20
|
+
|
|
21
|
+
$ARGUMENTS
|
|
22
|
+
|
|
23
|
+
- No argument → run the **State Check**, then show the **Topic Menu**.
|
|
24
|
+
- One of `getting-started`, `workflow`, `commands`, `config` → run the **State Check** silently, then skip the menu and go straight to that topic's section below.
|
|
25
|
+
- Anything else (free text) → run the **State Check** silently, then treat it as a free-form question — answer it by reading the relevant doc section(s), same read-live rule applies.
|
|
26
|
+
|
|
27
|
+
## Step 1: State Check (silent, read-only, no confirmation needed)
|
|
28
|
+
|
|
29
|
+
Before responding, gather context. None of these require confirmation — they don't mutate anything:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
test -f .hublaunch/hublaunch.config.js && echo "initialized" || echo "not-initialized"
|
|
33
|
+
git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "no-git"
|
|
34
|
+
hula --version 2>/dev/null
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
If initialized, `Read .hublaunch/hublaunch.config.js` and note (never print the values themselves, only presence/absence):
|
|
38
|
+
- Is `hulaApiKey` (or `anthropicApiKey`/`daytonaApiKey`) present with a non-empty value? → user has likely completed `hula login`.
|
|
39
|
+
- If `.hublaunch/trackedPlans.json` exists, `Read` it — does it have any entries? → user has launched at least one plan before.
|
|
40
|
+
|
|
41
|
+
If any check fails (not a git repo, config unreadable), treat that signal as unknown and continue — don't block on it.
|
|
42
|
+
|
|
43
|
+
Classify into one state:
|
|
44
|
+
- **Fresh** — no `.hublaunch/hublaunch.config.js` → hasn't run `hula init` yet.
|
|
45
|
+
- **Initialized, not logged in** — config exists, no API key set.
|
|
46
|
+
- **Ready, no history** — config + key set, `trackedPlans.json` empty/missing.
|
|
47
|
+
- **Mid-workflow** — tracked plans exist and/or current git branch isn't the default branch.
|
|
48
|
+
|
|
49
|
+
## Step 2: Opening line (tailored, one line, then always show the menu)
|
|
50
|
+
|
|
51
|
+
Pick ONE line matching the state:
|
|
52
|
+
|
|
53
|
+
- Fresh: `👋 Looks like hub-launch isn't initialized in this project yet.`
|
|
54
|
+
- Initialized, not logged in: `👋 hub-launch is initialized, but I don't see login credentials yet.`
|
|
55
|
+
- Ready, no history: `👋 You're set up — haven't launched a plan yet?`
|
|
56
|
+
- Mid-workflow: `👋 Looks like you're mid-workflow on branch \`<branch>\`.`
|
|
57
|
+
|
|
58
|
+
(Skip this step entirely when the user passed an explicit topic argument — go straight to that topic instead.)
|
|
59
|
+
|
|
60
|
+
## Step 3: Topic Menu
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
What do you need help with?
|
|
64
|
+
|
|
65
|
+
1. Getting Started — install, login, init, your first plan → launch → merge cycle
|
|
66
|
+
2. The Core Workflow — what /hula-plan, /hula-launch, /hula-verify, /hula-fix, /hula-merge each do
|
|
67
|
+
3. Commands Reference — look up any hula CLI command or /hula-* skill
|
|
68
|
+
4. Configuration — .hublaunch/hublaunch.config.js basics
|
|
69
|
+
5. Something else — just ask your question
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Wait for a reply (number, keyword, or free text). Do not proceed until the user responds.
|
|
73
|
+
|
|
74
|
+
## Topic: Getting Started
|
|
75
|
+
|
|
76
|
+
Read `README.md`'s "Quick Start" and "Requirements" sections (and the "Core Workflow" intro) live, then walk the user through, in order, only up to where the **State Check** says they already are — skip and say "✅ already done" for steps already satisfied:
|
|
77
|
+
|
|
78
|
+
1. Requirements — Node ≥18, `gh` CLI ≥2.4.0 authenticated (`gh auth login`), Playwright Chromium (`npx playwright install chromium`).
|
|
79
|
+
2. Install — `npm install -g hub-launch` (or `pnpm add -g hub-launch`).
|
|
80
|
+
3. `hula init` — initializes `.hublaunch/hublaunch.config.js`. If State Check showed **Fresh**, offer to run it now (see "What you're allowed to run").
|
|
81
|
+
4. `hula login` — authenticates GitHub + hula-project. If **Initialized, not logged in**, offer to run it now.
|
|
82
|
+
5. First cycle — `/hula-plan <description>` → `/hula-launch <name>` → `/hula-verify` → `/hula-merge`. Point to Topic: The Core Workflow for details on each.
|
|
83
|
+
|
|
84
|
+
## Topic: The Core Workflow
|
|
85
|
+
|
|
86
|
+
Read the "Core Workflow" section of `README.md` live. Explain each step in plain language — one at a time if the user wants depth, or as a compact list if they want the overview:
|
|
87
|
+
|
|
88
|
+
- `/hula-plan <description>` — writes a plan file to `.hublaunch/plans/`, validates it automatically.
|
|
89
|
+
- `/hula-upload` — syncs the plan to `origin/main` (usually automatic as part of `/hula-launch`, rarely needed standalone).
|
|
90
|
+
- `/hula-launch <name>` — creates the GitHub issue, runs the AI coding session in an isolated cloud container, opens a PR.
|
|
91
|
+
- `/hula-verify` — checks the PR against the plan's acceptance criteria.
|
|
92
|
+
- `/hula-fix <instructions>` — addresses gaps found by verify, or anything else you want changed on the PR branch.
|
|
93
|
+
- `/hula-merge` — merges the PR, cleans up, fast-forwards local `main`.
|
|
94
|
+
- Mention `/hula-info`, `/hula-schedule`, `/hula-confirm` as supporting skills, one line each, only if the user wants more than the core cycle.
|
|
95
|
+
|
|
96
|
+
## Topic: Commands Reference
|
|
97
|
+
|
|
98
|
+
Ask (if not already clear from `$ARGUMENTS`) which command or skill they want to know about. Then:
|
|
99
|
+
- For a `hula <x>` CLI command → run `hula <x> --help` and relay the output; also `Read docs/commands.md` for the matching `## \`hula <x>\`` section if more narrative detail would help.
|
|
100
|
+
- For a `/hula-<x>` skill → `Read docs/commands.md` and `README.md` for any matching section. Skills generally aren't documented in `docs/commands.md` (it covers CLI subcommands, not skills) — if there's no match, say so rather than inventing detail, and summarize from the skill's own stated purpose instead.
|
|
101
|
+
|
|
102
|
+
## Topic: Configuration
|
|
103
|
+
|
|
104
|
+
If `.hublaunch/hublaunch.config.js` exists, `Read` it (never print secret values — describe presence/absence only) alongside the relevant `README.md` sections (e.g. "Forwarding environment variables to the container", "Configuring per-step model & iteration overrides"). Explain only the fields the user asks about — don't dump the whole schema unprompted.
|
|
105
|
+
|
|
106
|
+
## What you're allowed to run
|
|
107
|
+
|
|
108
|
+
- **Always allowed, no confirmation needed**: read-only checks — `hula --version`, `git status`, `git rev-parse --abbrev-ref HEAD`, `hula <cmd> --help`, `Read` on any repo file.
|
|
109
|
+
- **Offer, then wait for an explicit yes**: setup commands that change local/remote state — `hula init`, `hula login`. Never run these without an affirmative reply to your offer first.
|
|
110
|
+
- **Never run**: anything from the plan→launch→merge pipeline itself (`/hula-plan`, `/hula-launch`, etc.) — those are the user's own next command to type, not something this skill triggers.
|
|
111
|
+
|
|
112
|
+
## Notes
|
|
113
|
+
|
|
114
|
+
- Never print API key / token values, even partially — only whether a field is set.
|
|
115
|
+
- If `README.md` or `docs/commands.md` can't be read (missing/renamed), say so plainly and fall back to `hula --help` / `hula <cmd> --help` output instead of guessing.
|
|
116
|
+
- Keep every answer short enough to read in a few seconds; offer "want more detail?" rather than front-loading it.
|
|
117
|
+
- This skill does not diagnose errors or stuck workflows — if asked to, say that's outside what it covers.
|
|
@@ -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.)
|