hub-launch 1.0.3
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 +144 -0
- package/README.md +195 -0
- package/bin/hublaunch +20 -0
- package/dist/commands/checkout.d.ts +7 -0
- package/dist/commands/checkout.d.ts.map +1 -0
- package/dist/commands/checkout.js +164 -0
- package/dist/commands/checkout.js.map +1 -0
- package/dist/commands/clean.d.ts +7 -0
- package/dist/commands/clean.d.ts.map +1 -0
- package/dist/commands/clean.js +206 -0
- package/dist/commands/clean.js.map +1 -0
- package/dist/commands/close.d.ts +7 -0
- package/dist/commands/close.d.ts.map +1 -0
- package/dist/commands/close.js +109 -0
- package/dist/commands/close.js.map +1 -0
- package/dist/commands/create.d.ts +7 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +367 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/diff.d.ts +7 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +98 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/execute.d.ts +7 -0
- package/dist/commands/execute.d.ts.map +1 -0
- package/dist/commands/execute.js +376 -0
- package/dist/commands/execute.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +1243 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/interactive.d.ts +12 -0
- package/dist/commands/interactive.d.ts.map +1 -0
- package/dist/commands/interactive.js +1071 -0
- package/dist/commands/interactive.js.map +1 -0
- package/dist/commands/launch.d.ts +16 -0
- package/dist/commands/launch.d.ts.map +1 -0
- package/dist/commands/launch.js +684 -0
- package/dist/commands/launch.js.map +1 -0
- package/dist/commands/login.d.ts +40 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +469 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logs.d.ts +22 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +105 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/merge.d.ts +7 -0
- package/dist/commands/merge.d.ts.map +1 -0
- package/dist/commands/merge.js +240 -0
- package/dist/commands/merge.js.map +1 -0
- package/dist/commands/preview.d.ts +7 -0
- package/dist/commands/preview.d.ts.map +1 -0
- package/dist/commands/preview.js +160 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/project.d.ts +18 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +352 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/respond.d.ts +7 -0
- package/dist/commands/respond.d.ts.map +1 -0
- package/dist/commands/respond.js +112 -0
- package/dist/commands/respond.js.map +1 -0
- package/dist/commands/setPriority.d.ts +7 -0
- package/dist/commands/setPriority.d.ts.map +1 -0
- package/dist/commands/setPriority.js +112 -0
- package/dist/commands/setPriority.js.map +1 -0
- package/dist/commands/track.d.ts +7 -0
- package/dist/commands/track.d.ts.map +1 -0
- package/dist/commands/track.js +140 -0
- package/dist/commands/track.js.map +1 -0
- package/dist/commands/upload.d.ts +21 -0
- package/dist/commands/upload.d.ts.map +1 -0
- package/dist/commands/upload.js +145 -0
- package/dist/commands/upload.js.map +1 -0
- package/dist/commands/view.d.ts +7 -0
- package/dist/commands/view.d.ts.map +1 -0
- package/dist/commands/view.js +168 -0
- package/dist/commands/view.js.map +1 -0
- package/dist/commands/watch.d.ts +7 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +438 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/commands/worktree.d.ts +7 -0
- package/dist/commands/worktree.d.ts.map +1 -0
- package/dist/commands/worktree.js +122 -0
- package/dist/commands/worktree.js.map +1 -0
- package/dist/config/command-names.d.ts +16 -0
- package/dist/config/command-names.d.ts.map +1 -0
- package/dist/config/command-names.js +17 -0
- package/dist/config/command-names.js.map +1 -0
- package/dist/config/constants.d.ts +12 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +12 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/index.d.ts +47 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +175 -0
- package/dist/config/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +148 -0
- package/dist/index.js.map +1 -0
- package/dist/services/api/HulaApiClient.d.ts +170 -0
- package/dist/services/api/HulaApiClient.d.ts.map +1 -0
- package/dist/services/api/HulaApiClient.js +233 -0
- package/dist/services/api/HulaApiClient.js.map +1 -0
- package/dist/services/diff/DiffService.d.ts +44 -0
- package/dist/services/diff/DiffService.d.ts.map +1 -0
- package/dist/services/diff/DiffService.js +126 -0
- package/dist/services/diff/DiffService.js.map +1 -0
- package/dist/services/editor/EditorService.d.ts +53 -0
- package/dist/services/editor/EditorService.d.ts.map +1 -0
- package/dist/services/editor/EditorService.js +161 -0
- package/dist/services/editor/EditorService.js.map +1 -0
- package/dist/services/git/GitService.d.ts +124 -0
- package/dist/services/git/GitService.d.ts.map +1 -0
- package/dist/services/git/GitService.js +423 -0
- package/dist/services/git/GitService.js.map +1 -0
- package/dist/services/git/WorktreeService.d.ts +144 -0
- package/dist/services/git/WorktreeService.d.ts.map +1 -0
- package/dist/services/git/WorktreeService.js +505 -0
- package/dist/services/git/WorktreeService.js.map +1 -0
- package/dist/services/github/ActionsService.d.ts +66 -0
- package/dist/services/github/ActionsService.d.ts.map +1 -0
- package/dist/services/github/ActionsService.js +114 -0
- package/dist/services/github/ActionsService.js.map +1 -0
- package/dist/services/github/AssetUploadService.d.ts +103 -0
- package/dist/services/github/AssetUploadService.d.ts.map +1 -0
- package/dist/services/github/AssetUploadService.js +299 -0
- package/dist/services/github/AssetUploadService.js.map +1 -0
- package/dist/services/github/BatchCopilotDetectionService.d.ts +58 -0
- package/dist/services/github/BatchCopilotDetectionService.d.ts.map +1 -0
- package/dist/services/github/BatchCopilotDetectionService.js +321 -0
- package/dist/services/github/BatchCopilotDetectionService.js.map +1 -0
- package/dist/services/github/CopilotDetectionService.d.ts +40 -0
- package/dist/services/github/CopilotDetectionService.d.ts.map +1 -0
- package/dist/services/github/CopilotDetectionService.js +280 -0
- package/dist/services/github/CopilotDetectionService.js.map +1 -0
- package/dist/services/github/CopilotService.d.ts +27 -0
- package/dist/services/github/CopilotService.d.ts.map +1 -0
- package/dist/services/github/CopilotService.js +249 -0
- package/dist/services/github/CopilotService.js.map +1 -0
- package/dist/services/github/DeploymentDetectionService.d.ts +38 -0
- package/dist/services/github/DeploymentDetectionService.d.ts.map +1 -0
- package/dist/services/github/DeploymentDetectionService.js +104 -0
- package/dist/services/github/DeploymentDetectionService.js.map +1 -0
- package/dist/services/github/GithubAppService.d.ts +40 -0
- package/dist/services/github/GithubAppService.d.ts.map +1 -0
- package/dist/services/github/GithubAppService.js +187 -0
- package/dist/services/github/GithubAppService.js.map +1 -0
- package/dist/services/github/IssueService.d.ts +65 -0
- package/dist/services/github/IssueService.d.ts.map +1 -0
- package/dist/services/github/IssueService.js +231 -0
- package/dist/services/github/IssueService.js.map +1 -0
- package/dist/services/github/LabelService.d.ts +36 -0
- package/dist/services/github/LabelService.d.ts.map +1 -0
- package/dist/services/github/LabelService.js +122 -0
- package/dist/services/github/LabelService.js.map +1 -0
- package/dist/services/github/PRService.d.ts +77 -0
- package/dist/services/github/PRService.d.ts.map +1 -0
- package/dist/services/github/PRService.js +287 -0
- package/dist/services/github/PRService.js.map +1 -0
- package/dist/services/github/ProjectService.d.ts +144 -0
- package/dist/services/github/ProjectService.d.ts.map +1 -0
- package/dist/services/github/ProjectService.js +804 -0
- package/dist/services/github/ProjectService.js.map +1 -0
- package/dist/services/hooks/HookExecutor.d.ts +66 -0
- package/dist/services/hooks/HookExecutor.d.ts.map +1 -0
- package/dist/services/hooks/HookExecutor.js +227 -0
- package/dist/services/hooks/HookExecutor.js.map +1 -0
- package/dist/services/hooks/index.d.ts +2 -0
- package/dist/services/hooks/index.d.ts.map +1 -0
- package/dist/services/hooks/index.js +2 -0
- package/dist/services/hooks/index.js.map +1 -0
- package/dist/services/logs/LogFormatterService.d.ts +17 -0
- package/dist/services/logs/LogFormatterService.d.ts.map +1 -0
- package/dist/services/logs/LogFormatterService.js +35 -0
- package/dist/services/logs/LogFormatterService.js.map +1 -0
- package/dist/services/logs/TempFileService.d.ts +27 -0
- package/dist/services/logs/TempFileService.d.ts.map +1 -0
- package/dist/services/logs/TempFileService.js +90 -0
- package/dist/services/logs/TempFileService.js.map +1 -0
- package/dist/services/logs/index.d.ts +3 -0
- package/dist/services/logs/index.d.ts.map +1 -0
- package/dist/services/logs/index.js +4 -0
- package/dist/services/logs/index.js.map +1 -0
- package/dist/services/plan/PlanService.d.ts +70 -0
- package/dist/services/plan/PlanService.d.ts.map +1 -0
- package/dist/services/plan/PlanService.js +211 -0
- package/dist/services/plan/PlanService.js.map +1 -0
- package/dist/services/polling/GitHubDirectPollingAdapter.d.ts +16 -0
- package/dist/services/polling/GitHubDirectPollingAdapter.d.ts.map +1 -0
- package/dist/services/polling/GitHubDirectPollingAdapter.js +87 -0
- package/dist/services/polling/GitHubDirectPollingAdapter.js.map +1 -0
- package/dist/services/polling/HulaServerPollingAdapter.d.ts +23 -0
- package/dist/services/polling/HulaServerPollingAdapter.d.ts.map +1 -0
- package/dist/services/polling/HulaServerPollingAdapter.js +78 -0
- package/dist/services/polling/HulaServerPollingAdapter.js.map +1 -0
- package/dist/services/polling/IStatusPollingAdapter.d.ts +29 -0
- package/dist/services/polling/IStatusPollingAdapter.d.ts.map +1 -0
- package/dist/services/polling/IStatusPollingAdapter.js +2 -0
- package/dist/services/polling/IStatusPollingAdapter.js.map +1 -0
- package/dist/services/polling/StatusPollingAdapterFactory.d.ts +14 -0
- package/dist/services/polling/StatusPollingAdapterFactory.d.ts.map +1 -0
- package/dist/services/polling/StatusPollingAdapterFactory.js +41 -0
- package/dist/services/polling/StatusPollingAdapterFactory.js.map +1 -0
- package/dist/services/polling/index.d.ts +5 -0
- package/dist/services/polling/index.d.ts.map +1 -0
- package/dist/services/polling/index.js +5 -0
- package/dist/services/polling/index.js.map +1 -0
- package/dist/services/preview/PreviewService.d.ts +86 -0
- package/dist/services/preview/PreviewService.d.ts.map +1 -0
- package/dist/services/preview/PreviewService.js +439 -0
- package/dist/services/preview/PreviewService.js.map +1 -0
- package/dist/services/tracking/ProjectTrackingAdapter.d.ts +41 -0
- package/dist/services/tracking/ProjectTrackingAdapter.d.ts.map +1 -0
- package/dist/services/tracking/ProjectTrackingAdapter.js +230 -0
- package/dist/services/tracking/ProjectTrackingAdapter.js.map +1 -0
- package/dist/services/tracking/RemoteTrackingAdapter.d.ts +62 -0
- package/dist/services/tracking/RemoteTrackingAdapter.d.ts.map +1 -0
- package/dist/services/tracking/RemoteTrackingAdapter.js +242 -0
- package/dist/services/tracking/RemoteTrackingAdapter.js.map +1 -0
- package/dist/services/tracking/TrackingAdapterFactory.d.ts +25 -0
- package/dist/services/tracking/TrackingAdapterFactory.d.ts.map +1 -0
- package/dist/services/tracking/TrackingAdapterFactory.js +55 -0
- package/dist/services/tracking/TrackingAdapterFactory.js.map +1 -0
- package/dist/services/tracking/TrackingService.d.ts +104 -0
- package/dist/services/tracking/TrackingService.d.ts.map +1 -0
- package/dist/services/tracking/TrackingService.js +256 -0
- package/dist/services/tracking/TrackingService.js.map +1 -0
- package/dist/services/tracking/UntrackedIssuesService.d.ts +20 -0
- package/dist/services/tracking/UntrackedIssuesService.d.ts.map +1 -0
- package/dist/services/tracking/UntrackedIssuesService.js +148 -0
- package/dist/services/tracking/UntrackedIssuesService.js.map +1 -0
- package/dist/services/tracking/local-file-migration.d.ts +16 -0
- package/dist/services/tracking/local-file-migration.d.ts.map +1 -0
- package/dist/services/tracking/local-file-migration.js +86 -0
- package/dist/services/tracking/local-file-migration.js.map +1 -0
- package/dist/templates/planning-instructions.md +752 -0
- package/dist/templates/proceed-instructions.md +453 -0
- package/dist/templates/scripts/hula-fix-commit.sh +110 -0
- package/dist/templates/scripts/hula-fix-setup.sh +145 -0
- package/dist/templates/scripts/hula-launch-run.sh +89 -0
- package/dist/templates/scripts/hula-merge-local.sh +138 -0
- package/dist/templates/scripts/hula-merge-remote.sh +74 -0
- package/dist/templates/scripts/hula-read-config.sh +38 -0
- package/dist/templates/scripts/hula-verify-gather.sh +135 -0
- package/dist/templates/scripts/hula-verify-post.sh +84 -0
- package/dist/templates/skills/hula-confirm/SKILL.md +361 -0
- package/dist/templates/skills/hula-create/SKILL.md +211 -0
- package/dist/templates/skills/hula-fix/SKILL.md +224 -0
- package/dist/templates/skills/hula-launch/SKILL.md +159 -0
- package/dist/templates/skills/hula-log/SKILL.md +105 -0
- package/dist/templates/skills/hula-merge/SKILL.md +387 -0
- package/dist/templates/skills/hula-plan/SKILL.md +148 -0
- package/dist/templates/skills/hula-upload/SKILL.md +115 -0
- package/dist/templates/skills/hula-verify/SKILL.md +754 -0
- package/dist/types/common.schema.d.ts +46 -0
- package/dist/types/common.schema.d.ts.map +1 -0
- package/dist/types/common.schema.js +60 -0
- package/dist/types/common.schema.js.map +1 -0
- package/dist/types/config.schema.d.ts +443 -0
- package/dist/types/config.schema.d.ts.map +1 -0
- package/dist/types/config.schema.js +126 -0
- package/dist/types/config.schema.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/issue.schema.d.ts +136 -0
- package/dist/types/issue.schema.d.ts.map +1 -0
- package/dist/types/issue.schema.js +49 -0
- package/dist/types/issue.schema.js.map +1 -0
- package/dist/types/pr.schema.d.ts +118 -0
- package/dist/types/pr.schema.d.ts.map +1 -0
- package/dist/types/pr.schema.js +40 -0
- package/dist/types/pr.schema.js.map +1 -0
- package/dist/types/tracking.schema.d.ts +340 -0
- package/dist/types/tracking.schema.d.ts.map +1 -0
- package/dist/types/tracking.schema.js +56 -0
- package/dist/types/tracking.schema.js.map +1 -0
- package/dist/utils/browser-launcher.d.ts +60 -0
- package/dist/utils/browser-launcher.d.ts.map +1 -0
- package/dist/utils/browser-launcher.js +263 -0
- package/dist/utils/browser-launcher.js.map +1 -0
- package/dist/utils/cache.d.ts +44 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +94 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/config-parser.d.ts +16 -0
- package/dist/utils/config-parser.d.ts.map +1 -0
- package/dist/utils/config-parser.js +210 -0
- package/dist/utils/config-parser.js.map +1 -0
- package/dist/utils/editor.d.ts +21 -0
- package/dist/utils/editor.d.ts.map +1 -0
- package/dist/utils/editor.js +213 -0
- package/dist/utils/editor.js.map +1 -0
- package/dist/utils/git-utils.d.ts +5 -0
- package/dist/utils/git-utils.d.ts.map +1 -0
- package/dist/utils/git-utils.js +18 -0
- package/dist/utils/git-utils.js.map +1 -0
- package/dist/utils/github-cli.d.ts +62 -0
- package/dist/utils/github-cli.d.ts.map +1 -0
- package/dist/utils/github-cli.js +492 -0
- package/dist/utils/github-cli.js.map +1 -0
- package/dist/utils/logger.d.ts +45 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +118 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/open-url.d.ts +19 -0
- package/dist/utils/open-url.d.ts.map +1 -0
- package/dist/utils/open-url.js +37 -0
- package/dist/utils/open-url.js.map +1 -0
- package/dist/utils/project-resolver.d.ts +13 -0
- package/dist/utils/project-resolver.d.ts.map +1 -0
- package/dist/utils/project-resolver.js +35 -0
- package/dist/utils/project-resolver.js.map +1 -0
- package/dist/utils/prompts.d.ts +80 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +326 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/shell.d.ts +54 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +152 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/validators.d.ts +32 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +64 -0
- package/dist/utils/validators.js.map +1 -0
- package/package.json +73 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [1.0.3] - 2026-06-05
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- Bug fixes and stability improvements for the official release.
|
|
15
|
+
|
|
16
|
+
## [1.0.2] - 2026-06-02
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- `hula --version` now reports the correct version from `package.json` instead of a hardcoded value.
|
|
21
|
+
|
|
22
|
+
## [1.0.1] - 2026-06-02
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- npm package now only ships compiled `dist/` output; TypeScript source is no longer included in the tarball.
|
|
27
|
+
|
|
28
|
+
## [1.0.0] - 2026-06-02
|
|
29
|
+
|
|
30
|
+
### Changed — BREAKING
|
|
31
|
+
|
|
32
|
+
- **Slash commands renamed**: `/hula.plan` → `/hula-plan`, `/hula.fix` → `/hula-fix`,
|
|
33
|
+
`/hula.create` → `/hula-create`, `/hula.verify` → `/hula-verify`,
|
|
34
|
+
`/hula.merge` → `/hula-merge`, `/hula.launch` → `/hula-launch`,
|
|
35
|
+
`/hula.upload` → `/hula-upload`, `/hula.log` → `/hula-log`,
|
|
36
|
+
`/hula.confirm` → `/hula-confirm`. The Agent Skills spec (which both
|
|
37
|
+
GitHub Copilot and Claude Code natively support) forbids dots in skill
|
|
38
|
+
names. After running `hula init`, the new names are available; the
|
|
39
|
+
legacy `.github/prompts/*.prompt.md` files are no longer generated and
|
|
40
|
+
can be deleted manually if you have them from a prior install.
|
|
41
|
+
|
|
42
|
+
### Added
|
|
43
|
+
|
|
44
|
+
- **Agent Skills support** — `hula init` now generates skill files in the
|
|
45
|
+
vendor-neutral standard path `.agents/skills/<name>/SKILL.md` and creates
|
|
46
|
+
a `.claude/skills` symlink pointing to `.agents/skills` so that the same
|
|
47
|
+
files are picked up by **both GitHub Copilot (VS Code) and Claude Code**
|
|
48
|
+
(and 30+ other Agent Skills-compatible tools). Spec:
|
|
49
|
+
https://agentskills.io/specification. The `.claude/skills` symlink
|
|
50
|
+
should be committed so all team members get Claude Code support.
|
|
51
|
+
|
|
52
|
+
### Removed
|
|
53
|
+
|
|
54
|
+
- `initializePromptFiles()` and the 9 `src/templates/vscode-*.prompt.md`
|
|
55
|
+
source templates. Their replacements live at
|
|
56
|
+
`src/templates/skills/<name>/SKILL.md`. The old `.github/prompts/`
|
|
57
|
+
directory is no longer generated by `hula init`.
|
|
58
|
+
|
|
59
|
+
### Fixed
|
|
60
|
+
|
|
61
|
+
- `hula upload` command reference corrected to `hula chore upload` in
|
|
62
|
+
templates (`src/templates/scripts/hula-launch-run.sh`,
|
|
63
|
+
`src/templates/vscode-upload-prompt.md`,
|
|
64
|
+
`src/templates/vscode-create-prompt.md`) and documentation
|
|
65
|
+
(`docs/vscode-workflow.md`). Without this fix, the auto-upload step
|
|
66
|
+
inside `/hula.launch` failed with `error: unknown command 'upload'`
|
|
67
|
+
because `upload` is registered under the `chore` subcommand group.
|
|
68
|
+
Users who have already run `hula init` must re-run `hula init`
|
|
69
|
+
(with override confirmation) to update their `.github/` files.
|
|
70
|
+
|
|
71
|
+
### Added
|
|
72
|
+
|
|
73
|
+
- `hula execute` command — drives the new hula-server Execute Pipeline
|
|
74
|
+
(`/api/v1/execute`, introduced in hula-server PR #225). Supports
|
|
75
|
+
built-in actions (`--built-in harden`) and custom action files
|
|
76
|
+
(`--action-path`), one-off runs and recurring cron schedules
|
|
77
|
+
(`--schedule "0 3 * * *"`), plus management subflags
|
|
78
|
+
`--show`, `--list`, `--list-schedules`, `--cancel-schedule`,
|
|
79
|
+
`--run-now`. Replaces the now-removed `/api/v1/harden-run` endpoint.
|
|
80
|
+
- `hula launch` now supports `--update-notification-url <url>` (and the
|
|
81
|
+
`updateNotificationUrl` config field / `HULA_UPDATE_NOTIFICATION_URL`
|
|
82
|
+
env var) to opt into per-task webhook notifications introduced in
|
|
83
|
+
NoStackApp/hula-server PR #183. The server POSTs a single
|
|
84
|
+
notification on every terminal task transition.
|
|
85
|
+
|
|
86
|
+
### Changed
|
|
87
|
+
|
|
88
|
+
- Utility/maintenance commands are now grouped under `hula chore
|
|
89
|
+
<subcommand>` for a cleaner top-level CLI. Affected subcommands:
|
|
90
|
+
`view`, `track`, `clean`, `close`, `checkout`, `setPriority`,
|
|
91
|
+
`diff`, `watch`, `respond`, `preview`, `logs`, `upload`,
|
|
92
|
+
`worktree`, `project`. Top-level commands remaining: `login`,
|
|
93
|
+
`init`, `create`, `merge`, `launch`, `execute`, `ralph`
|
|
94
|
+
(deprecated alias for `launch`).
|
|
95
|
+
|
|
96
|
+
### Changed (BREAKING)
|
|
97
|
+
|
|
98
|
+
- **Plan / Project / Task rename to match hula-project server.**
|
|
99
|
+
Aligns the CLI with hula-project PR #159, which renamed the
|
|
100
|
+
`Repository` model to `Project` and the `Issue` model to `Plan`
|
|
101
|
+
(jobs are now `Tasks` server-side).
|
|
102
|
+
- Server endpoints: `/api/v1/issues*` → `/api/v1/plans*`. Any older
|
|
103
|
+
server is now refused at startup with an `IncompatibleServerError`
|
|
104
|
+
that points operators at this version.
|
|
105
|
+
- Local config: `hulaRepository` → `hulaProject`. The CLI now refuses
|
|
106
|
+
to start if the legacy key is present in `.hublaunch/hublaunch.config.js`.
|
|
107
|
+
- Local tracking file default: `.hublaunch/trackedIssues.json` →
|
|
108
|
+
`.hublaunch/trackedPlans.json`. The CLI auto-renames the legacy
|
|
109
|
+
file the first time it loads config and rewrites the contents to
|
|
110
|
+
schema `version: '3.0'` (renaming `repoOwner`/`repoName` →
|
|
111
|
+
`projectOwner`/`projectName` and dropping per-task `job*` fields).
|
|
112
|
+
- Per-task job-status UI in `hublaunch view` and `hublaunch interactive`
|
|
113
|
+
has been removed. The standalone `/api/v1/ralph-run/<name>/status`
|
|
114
|
+
endpoint and `hublaunch launch --show <name>` continue to work.
|
|
115
|
+
|
|
116
|
+
**Upgrade steps for users:**
|
|
117
|
+
1. Update the hula-project server to a build that includes PR #159
|
|
118
|
+
(any release ≥ 2026.04.28 will do).
|
|
119
|
+
2. Edit `.hublaunch/hublaunch.config.js`: rename `hulaRepository:` to
|
|
120
|
+
`hulaProject:` (same value).
|
|
121
|
+
3. Run any `hublaunch` command. The first run automatically renames
|
|
122
|
+
`trackedIssues.json` → `trackedPlans.json` and migrates its contents.
|
|
123
|
+
|
|
124
|
+
### Fixed
|
|
125
|
+
|
|
126
|
+
- Fixed `hublaunch clean` and `hublaunch close` failing with HTTP 403
|
|
127
|
+
"You do not have access to this resource" for closed issues tracked by
|
|
128
|
+
other users on the same hula-project server. The server now allows any
|
|
129
|
+
authenticated user to untrack a row whose `githubState === 'closed'`,
|
|
130
|
+
with an audit log entry recorded for non-owner deletes. The CLI handles
|
|
131
|
+
403 responses from older servers gracefully — `close` no longer reports
|
|
132
|
+
the close as failed when only the tracking removal step was denied, and
|
|
133
|
+
`clean` no longer prompts users to retry permanently-denied entries.
|
|
134
|
+
- Fixed connection reset errors in long-running background processes (#36)
|
|
135
|
+
- Added retry logic with exponential backoff to `getRepoInfo()` function
|
|
136
|
+
- Added in-memory caching for repository information (5-minute TTL)
|
|
137
|
+
- Enhanced error classification to detect connection reset errors (`ECONNRESET`, `connection reset`, `read tcp`)
|
|
138
|
+
- Improved error messages for network issues during background polling
|
|
139
|
+
|
|
140
|
+
### Improved
|
|
141
|
+
|
|
142
|
+
- Background polling now recovers gracefully from network interruptions
|
|
143
|
+
- Reduced error message spam during transient network failures
|
|
144
|
+
- Added intelligent caching to reduce API calls and survive brief network outages
|
package/README.md
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# hub-launch
|
|
2
|
+
|
|
3
|
+
> **AI coding without the chaos**
|
|
4
|
+
|
|
5
|
+
AI coding agents write great code — but you're still stuck doing the busywork around them: creating issues, wrangling branches, monitoring runs, and cleaning up afterward. That constant context switching can be anything from disruptive to stressful. Anyone who knows how to code would agree that good development requires focus.
|
|
6
|
+
|
|
7
|
+
hub-launch handles all of that by removing most of the interruptions and only requiring you to perform the critical steps of planning and review. Describe what you want to build, and it creates the GitHub issue, runs Claude Code in an isolated Daytona cloud container, and opens the PR for your review. Nothing touches your local machine or your current branch.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
/hula-plan Add password reset support # generates plan, auto-validates
|
|
11
|
+
/hula-launch password-reset-support # creates issue, starts AI session
|
|
12
|
+
# (Claude Code writes the code, runs tests, pushes branch, opens PR)
|
|
13
|
+
/hula-fix # perform any follow-up needed locally in a worktree
|
|
14
|
+
/hula-merge # merge, close issue, restore branch
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
That's the whole fundamental workflow.
|
|
18
|
+
|
|
19
|
+
## Demo
|
|
20
|
+
|
|
21
|
+
<a href="https://www.youtube.com/watch?v=4-YRVB7mQZ8" target="_blank">
|
|
22
|
+
<img src="./docs/assets/demo-preview.svg" alt="Watch hub-launch demo on YouTube" width="100%"/>
|
|
23
|
+
</a>
|
|
24
|
+
|
|
25
|
+
## Why hub-launch?
|
|
26
|
+
|
|
27
|
+
| Without hub-launch | With hub-launch |
|
|
28
|
+
| --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
|
|
29
|
+
| Several steps in the AI cycle, requiring interruptions | complete integration into Github, and many automated validation steps |
|
|
30
|
+
| AI agent runs on your machine, taxing your local resources | ralph-like script on a container in a cloud — zero local overhead |
|
|
31
|
+
| Coding work and progress clutters your workspace | Each issue runs in its own isolated container — safe and clean |
|
|
32
|
+
| frequent switching between tools and sites | Everything orchestrated from your local agent session |
|
|
33
|
+
|
|
34
|
+
## Features
|
|
35
|
+
|
|
36
|
+
- 🤖 **AI-Powered Workflow** — plan → launch → verify → merge skills that are run by your agent
|
|
37
|
+
- 🔄 **Github Integration** — creating issues, hand-off if needed, generating PRs, merging and cleaning up
|
|
38
|
+
- ☁️ **Cloud Container Isolation** — each issue runs in a dedicated cloud container, keeping your branch and environment clean
|
|
39
|
+
- **Configurable** — we use a Ralph script which can be extended with custom lifecycle hooks, and you can configure locally several options
|
|
40
|
+
- 🖥️ **Client Agnostic** — based on skills that can be adapted to most agent harnesses
|
|
41
|
+
- 🔔 **Notifications** - you can configure an endpoint for notifications about progress. For instance, a slack channel.
|
|
42
|
+
- 📋 **Logging** - run `hula-log` for progress in the container. Also pushes several documents within each PR showing logging.
|
|
43
|
+
- 🖥️ **Dashboard** — track all your active plans at [https://www.hublaunch.site/dashboard](https://www.hublaunch.site/dashboard)
|
|
44
|
+
- 🔒 **Safe** - tokens are maintained by you locally in your config file, and on our server securely protected and removed when no longer needed.
|
|
45
|
+
- 🚀 **Two Tiers** — Free and Pro subscriptions; see below for details
|
|
46
|
+
|
|
47
|
+
### Free vs Pro
|
|
48
|
+
|
|
49
|
+
| Feature | Free | Pro |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| Plan generation (`/hula-plan`) | ✅ | ✅ |
|
|
52
|
+
| Issue creation (`hula create` / `/hula-create`) | ✅ | ✅ |
|
|
53
|
+
| Assign issue to GitHub Copilot | ✅ | ✅ |
|
|
54
|
+
| AI-powered full launch (`hula launch` / `/hula-launch`) | ❌ | ✅ |
|
|
55
|
+
| Unlimited plan launches | ❌ | ✅ |
|
|
56
|
+
|
|
57
|
+
`hula launch` is a Pro feature. It runs a full automated pipeline in a cloud container (Claude Code via Daytona), creates a branch, runs tests, and opens a PR — all without touching your local machine.
|
|
58
|
+
|
|
59
|
+
On the Free tier, use `/hula-create` to create a GitHub issue and assign it to GitHub Copilot. Copilot will attempt to implement it directly on GitHub.
|
|
60
|
+
|
|
61
|
+
To upgrade to Pro, visit [https://www.hublaunch.site](https://www.hublaunch.site).
|
|
62
|
+
|
|
63
|
+
## Quick Start
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# 1. Install
|
|
67
|
+
npm install -g hub-launch
|
|
68
|
+
# or with pnpm
|
|
69
|
+
pnpm add -g hub-launch
|
|
70
|
+
|
|
71
|
+
# 2. Initialize in your project
|
|
72
|
+
cd <your-project>
|
|
73
|
+
hula init
|
|
74
|
+
|
|
75
|
+
# 3. Use it
|
|
76
|
+
hula create # create issue from plan
|
|
77
|
+
hula --help
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Core Workflow
|
|
81
|
+
|
|
82
|
+
The primary use case is AI-assisted issue development via the hula-project server:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# 1. Plan the feature
|
|
86
|
+
# Validation runs automatically in the same session after the plan is saved.
|
|
87
|
+
/hula-plan Add password reset support
|
|
88
|
+
|
|
89
|
+
# 2. Upload the plan to origin/main
|
|
90
|
+
# (Optional — /hula-launch runs this automatically if skipped)
|
|
91
|
+
/hula-upload
|
|
92
|
+
|
|
93
|
+
# 3. Launch — creates the issue and starts the AI coding session
|
|
94
|
+
# Includes /hula-upload automatically, so step 2 can be omitted
|
|
95
|
+
/hula-launch password-reset-support
|
|
96
|
+
|
|
97
|
+
# 4. (AI coding agent works on the issue, creates a PR automatically)
|
|
98
|
+
|
|
99
|
+
# 5. Apply any fixes needed on the PR branch
|
|
100
|
+
/hula-fix the email validation is rejecting valid addresses
|
|
101
|
+
|
|
102
|
+
# 6. Verify all acceptance criteria are met
|
|
103
|
+
/hula-verify
|
|
104
|
+
|
|
105
|
+
# 7. Merge and clean up
|
|
106
|
+
# Equivalent to merging the PR manually on GitHub
|
|
107
|
+
/hula-merge
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
> 💡 `/hula-confirm` remains available as a standalone command for re-validating a plan you've edited by hand.
|
|
111
|
+
|
|
112
|
+
Or directly via CLI:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
hula launch password-reset-support .hublaunch/plans/2026-05-07-17:00-password-reset.md
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Commands
|
|
119
|
+
|
|
120
|
+
Top-level commands:
|
|
121
|
+
|
|
122
|
+
| Command | Alias | Description |
|
|
123
|
+
| -------------- | ----- | ---------------------------------------------------------------- |
|
|
124
|
+
| `hula` | `hl` | Main CLI |
|
|
125
|
+
| `hula login` | — | Authenticate with GitHub + hula-project |
|
|
126
|
+
| `hula init` | — | Initialize configuration |
|
|
127
|
+
| `hula create` | — | Create issue from plan file |
|
|
128
|
+
| `hula merge` | — | Merge PR and clean up |
|
|
129
|
+
| `hula launch` | — | Trigger AI coding session on hula-project server |
|
|
130
|
+
| `hula execute` | — | Trigger or schedule an execute-action (e.g. `--built-in harden`) |
|
|
131
|
+
|
|
132
|
+
Run `hula <command> --help` for details, or see the full [Commands Reference](./docs/commands.md).
|
|
133
|
+
|
|
134
|
+
## `hula launch` and Resume
|
|
135
|
+
|
|
136
|
+
`hula launch` submits a job to the hula-project server, which runs an AI coding agent (Claude Code) through a fixed 9-step pipeline:
|
|
137
|
+
|
|
138
|
+
| Step | Description |
|
|
139
|
+
| ---- | ----------------------------------------------------------------------------- |
|
|
140
|
+
| 1 | Change to worktree directory (worktree is created before the pipeline starts) |
|
|
141
|
+
| 2 | Bug review & fix loop (LLM-based review with iterative fixes) |
|
|
142
|
+
| 3 | Commit remaining changes |
|
|
143
|
+
| 4 | TypeScript / lint check (`pnpm check`) |
|
|
144
|
+
| 5 | Production build (`pnpm build`) |
|
|
145
|
+
| 6 | Regression tests |
|
|
146
|
+
| 7 | Push branch to origin |
|
|
147
|
+
| 8 | Merge latest main |
|
|
148
|
+
| 9 | Cleanup & create PR |
|
|
149
|
+
|
|
150
|
+
Use `--resume <step>` to re-run from a specific step after a failure, without re-doing earlier steps:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# Resume from step 4 (skips setup, bug review, and commit)
|
|
154
|
+
hula launch my-issue .hublaunch/plans/my-plan.md --resume 4
|
|
155
|
+
|
|
156
|
+
# Resume from step 7 with fix instructions
|
|
157
|
+
hula launch my-issue .hublaunch/plans/my-plan.md --resume 7 --fix "address build warning in src/utils/shell.ts"
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
> **Note**: `--fix` requires `--resume` and passes instructions to the AI agent for that stage.
|
|
161
|
+
|
|
162
|
+
## Documentation
|
|
163
|
+
|
|
164
|
+
| Document | Description |
|
|
165
|
+
| ---------------------------------------- | ------------------------------------------- |
|
|
166
|
+
| [Commands Reference](./docs/commands.md) | Every CLI command with options and examples |
|
|
167
|
+
|
|
168
|
+
The full documentation index is at [docs/README.md](./docs/README.md).
|
|
169
|
+
|
|
170
|
+
## Requirements
|
|
171
|
+
|
|
172
|
+
- **Node.js** >= 18.0.0
|
|
173
|
+
- **pnpm** (or npm)
|
|
174
|
+
- **GitHub CLI (`gh`)** >= 2.4.0, authenticated via `gh auth login`
|
|
175
|
+
- **Playwright Chromium** — `npx playwright install chromium`
|
|
176
|
+
|
|
177
|
+
## Contributing
|
|
178
|
+
|
|
179
|
+
1. Fork and create a feature branch
|
|
180
|
+
2. Run `pnpm run typecheck`
|
|
181
|
+
3. Submit a pull request
|
|
182
|
+
|
|
183
|
+
See the [Commands Reference](./docs/commands.md) for available commands.
|
|
184
|
+
|
|
185
|
+
## Links
|
|
186
|
+
|
|
187
|
+
- [HubLaunch Website](https://www.hublaunch.site)
|
|
188
|
+
- [Dashboard](https://www.hublaunch.site/dashboard)
|
|
189
|
+
- [GitHub Repository](https://github.com/NoStackApp/hub-launch)
|
|
190
|
+
- [Issue Tracker](https://github.com/NoStackApp/hub-launch/issues)
|
|
191
|
+
- [Documentation](./docs/README.md)
|
|
192
|
+
|
|
193
|
+
## License
|
|
194
|
+
|
|
195
|
+
MIT — see [LICENSE](./LICENSE) for details.
|
package/bin/hublaunch
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# HubLaunch TypeScript CLI wrapper
|
|
4
|
+
# This script runs the compiled TypeScript CLI
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
# Get the directory where this script is located
|
|
9
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
10
|
+
CLI_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
11
|
+
|
|
12
|
+
# Check if dist directory exists
|
|
13
|
+
if [ ! -d "$CLI_DIR/dist" ]; then
|
|
14
|
+
echo "Error: TypeScript CLI not built yet."
|
|
15
|
+
echo "Run: cd $CLI_DIR && npm run build"
|
|
16
|
+
exit 1
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
# Run the TypeScript CLI with node
|
|
20
|
+
exec node "$CLI_DIR/dist/index.js" "$@"
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import type { Config } from "../types/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Checkout command - Checkout tracked issue's PR branch locally
|
|
5
|
+
*/
|
|
6
|
+
export declare function checkoutCommand(program: Command, config: Config): void;
|
|
7
|
+
//# sourceMappingURL=checkout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/commands/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAmBtE"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { logger } from "../utils/logger.js";
|
|
2
|
+
import { PRService } from "../services/github/PRService.js";
|
|
3
|
+
import { GitService } from "../services/git/GitService.js";
|
|
4
|
+
import { TrackingService, } from "../services/tracking/TrackingService.js";
|
|
5
|
+
import { TrackingAdapterFactory } from "../services/tracking/TrackingAdapterFactory.js";
|
|
6
|
+
import { confirm, searchSelect, UserCancelledError } from "../utils/prompts.js";
|
|
7
|
+
/**
|
|
8
|
+
* Checkout command - Checkout tracked issue's PR branch locally
|
|
9
|
+
*/
|
|
10
|
+
export function checkoutCommand(program, config) {
|
|
11
|
+
program
|
|
12
|
+
.command("checkout [issueNumber]")
|
|
13
|
+
.description("Checkout tracked issue's PR branch locally")
|
|
14
|
+
.option("--merge-main", "Merge with main branch after checkout")
|
|
15
|
+
.option("--no-merge-main", "Skip merge with main branch")
|
|
16
|
+
.action(async (issueNumber, options) => {
|
|
17
|
+
try {
|
|
18
|
+
await executeCheckout(config, issueNumber, options);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
if (error instanceof UserCancelledError) {
|
|
22
|
+
logger.info('\nCancelled.');
|
|
23
|
+
process.exit(0);
|
|
24
|
+
}
|
|
25
|
+
logger.error("Failed to checkout PR branch:");
|
|
26
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
async function executeCheckout(config, issueNumberArg, options) {
|
|
32
|
+
logger.section("Checkout PR Branch");
|
|
33
|
+
// Initialize services
|
|
34
|
+
const prService = new PRService();
|
|
35
|
+
const gitService = new GitService();
|
|
36
|
+
const trackingService = new TrackingService(TrackingAdapterFactory.create(config));
|
|
37
|
+
// Check if in git repository
|
|
38
|
+
const isRepo = await gitService.isGitRepo();
|
|
39
|
+
if (!isRepo) {
|
|
40
|
+
throw new Error("Not in a git repository");
|
|
41
|
+
}
|
|
42
|
+
// Get issue number
|
|
43
|
+
let issueNumber;
|
|
44
|
+
if (issueNumberArg) {
|
|
45
|
+
issueNumber = parseInt(issueNumberArg, 10);
|
|
46
|
+
if (isNaN(issueNumber)) {
|
|
47
|
+
throw new Error(`Invalid issue number: ${issueNumberArg}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
// Show tracked issues and let user select
|
|
52
|
+
const trackedIssues = await trackingService.getAll();
|
|
53
|
+
if (trackedIssues.length === 0) {
|
|
54
|
+
throw new Error("No tracked issues found. Run 'hublaunch track' first.");
|
|
55
|
+
}
|
|
56
|
+
const choices = trackedIssues
|
|
57
|
+
.filter((issue) => issue.number !== undefined)
|
|
58
|
+
.map((issue) => ({
|
|
59
|
+
name: `#${issue.number} - ${issue.name}`,
|
|
60
|
+
value: issue.number.toString(),
|
|
61
|
+
}));
|
|
62
|
+
const selected = await searchSelect("Select issue to checkout:", choices);
|
|
63
|
+
issueNumber = parseInt(selected, 10);
|
|
64
|
+
}
|
|
65
|
+
// Get PRs for issue
|
|
66
|
+
logger.info(`Fetching PRs for issue #${issueNumber}...`);
|
|
67
|
+
const prs = await prService.getAllByIssue(issueNumber);
|
|
68
|
+
if (prs.length === 0) {
|
|
69
|
+
throw new Error(`No PRs found for issue #${issueNumber}`);
|
|
70
|
+
}
|
|
71
|
+
// Select PR (prioritize open PRs)
|
|
72
|
+
let prNumber;
|
|
73
|
+
if (prs.length === 1) {
|
|
74
|
+
const firstPR = prs[0];
|
|
75
|
+
if (!firstPR) {
|
|
76
|
+
throw new Error("PR data is invalid");
|
|
77
|
+
}
|
|
78
|
+
prNumber = firstPR.number;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// Prioritize open PRs
|
|
82
|
+
const openPRs = prs.filter((pr) => pr.state === "open");
|
|
83
|
+
if (openPRs.length > 0) {
|
|
84
|
+
const firstOpenPR = openPRs[0];
|
|
85
|
+
if (!firstOpenPR) {
|
|
86
|
+
throw new Error("PR data is invalid");
|
|
87
|
+
}
|
|
88
|
+
prNumber = firstOpenPR.number;
|
|
89
|
+
if (openPRs.length > 1) {
|
|
90
|
+
logger.info(`Found ${openPRs.length} open PRs. Using PR #${prNumber}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
const firstPR = prs[0];
|
|
95
|
+
if (!firstPR) {
|
|
96
|
+
throw new Error("PR data is invalid");
|
|
97
|
+
}
|
|
98
|
+
prNumber = firstPR.number;
|
|
99
|
+
logger.info(`No open PRs found. Using most recent PR #${prNumber}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const pr = prs.find((p) => p.number === prNumber);
|
|
103
|
+
if (!pr) {
|
|
104
|
+
throw new Error(`PR #${prNumber} not found`);
|
|
105
|
+
}
|
|
106
|
+
logger.info(`Selected PR #${prNumber}: ${pr.title}`);
|
|
107
|
+
logger.info(`Branch: ${pr.head.ref}`);
|
|
108
|
+
logger.blank();
|
|
109
|
+
// Check for local changes
|
|
110
|
+
const isClean = await gitService.isClean();
|
|
111
|
+
if (!isClean) {
|
|
112
|
+
logger.warning("You have uncommitted changes in your working directory.");
|
|
113
|
+
const shouldContinue = await confirm("Continue anyway? (changes will be preserved)", false);
|
|
114
|
+
if (!shouldContinue) {
|
|
115
|
+
logger.info("Cancelled.");
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Checkout PR
|
|
120
|
+
logger.info(`Checking out PR #${prNumber}...`);
|
|
121
|
+
try {
|
|
122
|
+
// Use gh CLI to checkout PR (handles remote fetch automatically)
|
|
123
|
+
await prService.checkout(prNumber);
|
|
124
|
+
logger.success(`✓ Successfully checked out PR #${prNumber}`);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
throw new Error(`Failed to checkout PR #${prNumber}: ${error instanceof Error ? error.message : String(error)}`);
|
|
128
|
+
}
|
|
129
|
+
logger.blank();
|
|
130
|
+
// Ask about merging with main
|
|
131
|
+
let shouldMerge = options.mergeMain;
|
|
132
|
+
if (shouldMerge === undefined) {
|
|
133
|
+
shouldMerge = await confirm("Do you want to update this branch with the latest changes from main?", false);
|
|
134
|
+
}
|
|
135
|
+
if (shouldMerge) {
|
|
136
|
+
logger.blank();
|
|
137
|
+
logger.info("Fetching latest changes from main...");
|
|
138
|
+
try {
|
|
139
|
+
await gitService.fetch("origin", "main");
|
|
140
|
+
logger.info("Merging main into current branch...");
|
|
141
|
+
await gitService.merge("origin/main");
|
|
142
|
+
logger.success("✓ Successfully merged main into branch!");
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
logger.blank();
|
|
146
|
+
logger.warning("Warning: Merge conflicts detected");
|
|
147
|
+
logger.warning("Please resolve the conflicts manually and commit the changes");
|
|
148
|
+
logger.blank();
|
|
149
|
+
logger.info("Useful commands:");
|
|
150
|
+
logger.info(" git status # See conflicted files");
|
|
151
|
+
logger.info(" git merge --abort # Abort the merge");
|
|
152
|
+
logger.info(" git add <file> # Stage resolved files");
|
|
153
|
+
logger.info(" git commit # Complete the merge");
|
|
154
|
+
logger.blank();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
logger.info("Skipping merge with main branch");
|
|
159
|
+
}
|
|
160
|
+
logger.blank();
|
|
161
|
+
logger.success("✨ Checkout complete!");
|
|
162
|
+
logger.blank();
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=checkout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../src/commands/checkout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import type { Config } from "../types/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Clean command - Remove closed/merged issues from tracking and clean up browser processes
|
|
5
|
+
*/
|
|
6
|
+
export declare function cleanCommand(program: Command, config: Config): void;
|
|
7
|
+
//# sourceMappingURL=clean.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAOhD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAmBnE"}
|