hub-launch 1.20.0 → 1.22.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 (62) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +69 -14
  3. package/dist/commands/init.d.ts +21 -2
  4. package/dist/commands/init.d.ts.map +1 -1
  5. package/dist/commands/init.js +121 -38
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/launch.d.ts +91 -0
  8. package/dist/commands/launch.d.ts.map +1 -1
  9. package/dist/commands/launch.js +885 -144
  10. package/dist/commands/launch.js.map +1 -1
  11. package/dist/commands/login.d.ts +38 -0
  12. package/dist/commands/login.d.ts.map +1 -1
  13. package/dist/commands/login.js +107 -11
  14. package/dist/commands/login.js.map +1 -1
  15. package/dist/commands/upload.d.ts +9 -2
  16. package/dist/commands/upload.d.ts.map +1 -1
  17. package/dist/commands/upload.js +16 -6
  18. package/dist/commands/upload.js.map +1 -1
  19. package/dist/scripts/launch-run.d.ts +6 -0
  20. package/dist/scripts/launch-run.d.ts.map +1 -1
  21. package/dist/scripts/launch-run.js +70 -9
  22. package/dist/scripts/launch-run.js.map +1 -1
  23. package/dist/services/api/HulaApiClient.d.ts +53 -0
  24. package/dist/services/api/HulaApiClient.d.ts.map +1 -1
  25. package/dist/services/api/HulaApiClient.js +18 -0
  26. package/dist/services/api/HulaApiClient.js.map +1 -1
  27. package/dist/services/git/FilePublishService.d.ts +9 -1
  28. package/dist/services/git/FilePublishService.d.ts.map +1 -1
  29. package/dist/services/git/FilePublishService.js +13 -3
  30. package/dist/services/git/FilePublishService.js.map +1 -1
  31. package/dist/services/git/GitService.d.ts +19 -0
  32. package/dist/services/git/GitService.d.ts.map +1 -1
  33. package/dist/services/git/GitService.js +56 -31
  34. package/dist/services/git/GitService.js.map +1 -1
  35. package/dist/services/git/WorktreeService.d.ts +9 -0
  36. package/dist/services/git/WorktreeService.d.ts.map +1 -1
  37. package/dist/services/git/WorktreeService.js +6 -3
  38. package/dist/services/git/WorktreeService.js.map +1 -1
  39. package/dist/services/group/GroupLaunchService.d.ts +230 -0
  40. package/dist/services/group/GroupLaunchService.d.ts.map +1 -0
  41. package/dist/services/group/GroupLaunchService.js +282 -0
  42. package/dist/services/group/GroupLaunchService.js.map +1 -0
  43. package/dist/templates/skills/hula-help/SKILL.md +1 -1
  44. package/dist/templates/skills/hula-launch/SKILL.md +38 -1
  45. package/dist/templates/skills/hula-schedule/SKILL.md +3 -3
  46. package/dist/utils/config-file-edit.d.ts +23 -0
  47. package/dist/utils/config-file-edit.d.ts.map +1 -0
  48. package/dist/utils/config-file-edit.js +37 -0
  49. package/dist/utils/config-file-edit.js.map +1 -0
  50. package/dist/utils/ephemeral-credentials.d.ts +8 -0
  51. package/dist/utils/ephemeral-credentials.d.ts.map +1 -1
  52. package/dist/utils/ephemeral-credentials.js +2 -1
  53. package/dist/utils/ephemeral-credentials.js.map +1 -1
  54. package/dist/utils/github-cli.d.ts +1 -1
  55. package/dist/utils/github-cli.d.ts.map +1 -1
  56. package/dist/utils/github-cli.js +15 -7
  57. package/dist/utils/github-cli.js.map +1 -1
  58. package/dist/utils/project-resolver.d.ts +1 -1
  59. package/dist/utils/project-resolver.d.ts.map +1 -1
  60. package/dist/utils/project-resolver.js +2 -2
  61. package/dist/utils/project-resolver.js.map +1 -1
  62. package/package.json +1 -1
@@ -7,6 +7,12 @@ import type { Config } from '../types/index.js';
7
7
  * Usage: hula launch --show <name>
8
8
  * Usage: hula launch --logs <name>
9
9
  */
10
+ /**
11
+ * Commander accumulator for the repeatable `--plan <repo>=<path>` option.
12
+ * Each occurrence is parsed as `repoName=relativePath` and merged into the
13
+ * override map. A missing `=` throws a clear error.
14
+ */
15
+ export declare function collectPlanOverrides(value: string, previous: Record<string, string>): Record<string, string>;
10
16
  export declare function launchCommand(program: Command, config: Config): void;
11
17
  interface LaunchOptions {
12
18
  url?: string;
@@ -34,6 +40,24 @@ interface LaunchOptions {
34
40
  containerDisk?: number;
35
41
  updateNotificationUrl?: string;
36
42
  updateNotificationNameTag?: string;
43
+ /** Parent folder containing sibling repos to fan out over. */
44
+ folder?: string;
45
+ /** Explicit group id (join/retry an existing group). */
46
+ groupId?: string;
47
+ /** Repeatable `--plan <repo>=<path>` overrides, keyed by repo directory name. */
48
+ plan?: Record<string, string>;
49
+ /**
50
+ * `--show-group [id]`: string when an id was given, `true` for the bare flag
51
+ * (resolve the latest local group record), undefined when not passed.
52
+ */
53
+ showGroup?: string | boolean;
54
+ /**
55
+ * `--yes`: skip the group-launch confirmation prompt and allow per-repo plan
56
+ * auto-resolve without a TTY. The /hula-launch skill path runs the CLI as a
57
+ * piped subprocess (never a TTY), so the skill passes this to opt in to the
58
+ * same auto-resolve + roster flow an interactive terminal gets.
59
+ */
60
+ yes?: boolean;
37
61
  }
38
62
  /**
39
63
  * Validate the `--kill` / `--kill-and-relaunch` flag combination.
@@ -51,6 +75,20 @@ export declare function validateKillFlags(options: LaunchOptions): string | null
51
75
  * `--kill` needs only the tracking name; every other mode needs a plan.
52
76
  */
53
77
  export declare function requiresPlanPath(options: LaunchOptions): boolean;
78
+ /**
79
+ * Validate the multi-repo `--folder` / `--group-id` / `--plan` flag matrix.
80
+ *
81
+ * - `--folder` resolves plans per repository, so it is incompatible with a
82
+ * positional `<planPath>` and with the read/resume flags `--show`, `--logs`,
83
+ * `--resume`, `--fix`.
84
+ * - `--plan` (per-repo override) only makes sense with `--folder`.
85
+ * - `--group-id` alone (no `--folder`) is allowed — it attaches a single-repo
86
+ * launch to an existing group.
87
+ * - `--kill --folder` is allowed (cancel-only fan-out).
88
+ *
89
+ * Returns an error message when the combination is invalid, or `null` when OK.
90
+ */
91
+ export declare function validateFolderFlags(options: LaunchOptions, hasPlanPathPositional: boolean): string | null;
54
92
  /**
55
93
  * Derive the request `conflictMode` from the CLI flags (plus an optional explicit
56
94
  * override used when re-invoking after an interactive 409 resolution).
@@ -84,6 +122,59 @@ export declare function resolveSteps(configSteps: Config['steps'], skipRegressio
84
122
  steps?: Record<string, unknown>;
85
123
  error?: string;
86
124
  };
125
+ /**
126
+ * Result of a single-repo launch attempt. In folder (group) mode this is
127
+ * captured per repo so the fan-out can continue past failures and print a
128
+ * summary; in single-repo mode a failure exits the process directly.
129
+ */
130
+ export interface RepoLaunchResult {
131
+ ok: boolean;
132
+ planId?: string;
133
+ status?: number;
134
+ message?: string;
135
+ }
136
+ /**
137
+ * Inputs to {@link buildRalphRunRequestBody}. Every optional field is omitted
138
+ * from the body when absent, keeping non-group / default request bodies
139
+ * byte-identical to the pre-fan-out CLI.
140
+ */
141
+ export interface RalphRunBodyInput {
142
+ issueName: string;
143
+ planPath: string;
144
+ repositoryId: string;
145
+ duration?: number;
146
+ /** From `--launch`; serialized as `ralphPath` for server compatibility. */
147
+ launchPath?: string;
148
+ worktree?: string | boolean;
149
+ resume?: number;
150
+ fix?: string;
151
+ regression?: boolean;
152
+ steps?: Record<string, unknown>;
153
+ test?: boolean;
154
+ conflictMode?: 'killAndRelaunch';
155
+ /** Maps to RalphRunRequest.groupId (hula-server PR #505). */
156
+ groupId?: string;
157
+ verbose?: boolean;
158
+ handoff?: string;
159
+ clientSessionId?: string;
160
+ anthropicApiKey: string;
161
+ containerResources?: {
162
+ cpu: number;
163
+ memory: number;
164
+ disk: number;
165
+ };
166
+ updateNotificationUrl?: string;
167
+ updateNotificationNameTag?: string;
168
+ githubToken?: string;
169
+ envVars?: Record<string, string>;
170
+ }
171
+ /**
172
+ * Assemble the `POST /api/v1/ralph-run` request body from already-resolved
173
+ * inputs. Fields are inserted in a fixed order and only when present, so a
174
+ * launch with no group flag produces a body byte-identical to the pre-fan-out
175
+ * CLI (verified by unit test — AC5).
176
+ */
177
+ export declare function buildRalphRunRequestBody(input: RalphRunBodyInput): Record<string, unknown>;
87
178
  /**
88
179
  * Handle API errors consistently
89
180
  * (exported for reuse by sibling commands, e.g. `hula info`)
@@ -1 +1 @@
1
- {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../src/commands/launch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AA0BhD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAwHpE;AAED,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC;AA2BD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAavE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAEhE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,iBAAiB,GAAG,SAAS,CAI/B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,EAC5B,kBAAkB,EAAE,OAAO,GAAG,SAAS,EACvC,oBAAoB,EAAE,OAAO,GAAG,SAAS,GACxC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAkCrD;AAs6BD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAyBtE;AA+DD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAyCnE"}
1
+ {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../src/commands/launch.ts"],"names":[],"mappings":"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"}