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
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Config } from "../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Open editor to compose message
|
|
4
|
+
* Returns message content or null if cancelled
|
|
5
|
+
*/
|
|
6
|
+
export declare function openEditorForMessage(config: Config, initialContent?: string): Promise<string | null>;
|
|
7
|
+
/**
|
|
8
|
+
* Compose message in terminal (multi-line input)
|
|
9
|
+
* User types message directly in terminal, types END on new line to finish
|
|
10
|
+
*
|
|
11
|
+
* @param initialContent - Initial content (default: "@copilot ")
|
|
12
|
+
* @returns Promise<string | null> - Message content or null if cancelled
|
|
13
|
+
*/
|
|
14
|
+
export declare function composeInTerminal(initialContent?: string): Promise<string | null>;
|
|
15
|
+
/**
|
|
16
|
+
* Prompt user to select how they want to compose their message
|
|
17
|
+
*
|
|
18
|
+
* @returns Promise<'editor' | 'terminal' | null> - Selected mode or null if cancelled
|
|
19
|
+
*/
|
|
20
|
+
export declare function selectComposeMode(): Promise<"editor" | "terminal" | null>;
|
|
21
|
+
//# sourceMappingURL=editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/utils/editor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AA0DhD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,cAAc,GAAE,MAAoB,GACnC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+ExB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,cAAc,GAAE,MAAoB,GACnC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyExB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAChD,QAAQ,GAAG,UAAU,GAAG,IAAI,CAC7B,CAkBA"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { writeFileSync, readFileSync, unlinkSync } from "fs";
|
|
2
|
+
import { tmpdir } from "os";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import { execSync } from "child_process";
|
|
5
|
+
/**
|
|
6
|
+
* Get a working editor command
|
|
7
|
+
* Tries multiple editors in priority order until one is found
|
|
8
|
+
*
|
|
9
|
+
* Priority:
|
|
10
|
+
* 1. Configured editor (from config.editorCommand)
|
|
11
|
+
* 2. $VISUAL environment variable
|
|
12
|
+
* 3. $EDITOR environment variable
|
|
13
|
+
* 4. Common editors: code, nano, vim, vi
|
|
14
|
+
*
|
|
15
|
+
* @param config - HubLaunch configuration
|
|
16
|
+
* @returns Promise<string | null> - Editor command or null if none found
|
|
17
|
+
*/
|
|
18
|
+
async function getWorkingEditor(config) {
|
|
19
|
+
const { commandExists } = await import("./shell.js");
|
|
20
|
+
// Build priority list of editor candidates
|
|
21
|
+
const editorCandidates = [];
|
|
22
|
+
// 1. Config setting
|
|
23
|
+
if (config.editorCommand === "vsCode") {
|
|
24
|
+
editorCandidates.push("code");
|
|
25
|
+
}
|
|
26
|
+
else if (config.editorCommand === "cursor") {
|
|
27
|
+
editorCandidates.push("cursor");
|
|
28
|
+
}
|
|
29
|
+
else if (config.editorCommand !== "other") {
|
|
30
|
+
// Handle custom editor commands
|
|
31
|
+
editorCandidates.push(config.editorCommand);
|
|
32
|
+
}
|
|
33
|
+
// 2. Environment variables
|
|
34
|
+
if (process.env.VISUAL) {
|
|
35
|
+
editorCandidates.push(process.env.VISUAL);
|
|
36
|
+
}
|
|
37
|
+
if (process.env.EDITOR) {
|
|
38
|
+
editorCandidates.push(process.env.EDITOR);
|
|
39
|
+
}
|
|
40
|
+
// 3. Common editors as fallbacks
|
|
41
|
+
editorCandidates.push("code", "nano", "vim", "vi");
|
|
42
|
+
// Find first available editor
|
|
43
|
+
for (const editor of editorCandidates) {
|
|
44
|
+
const cmd = editor.trim().split(/\s+/)[0]; // Extract base command (handles "code --wait")
|
|
45
|
+
if (cmd && await commandExists(cmd)) {
|
|
46
|
+
// Add --wait flag for GUI editors that need it
|
|
47
|
+
if ((cmd === "code" || cmd === "cursor") && !editor.includes("--wait")) {
|
|
48
|
+
return `${cmd} --wait`;
|
|
49
|
+
}
|
|
50
|
+
return editor;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Open editor to compose message
|
|
57
|
+
* Returns message content or null if cancelled
|
|
58
|
+
*/
|
|
59
|
+
export async function openEditorForMessage(config, initialContent = "@copilot ") {
|
|
60
|
+
const logger = await import("./logger.js").then((m) => m.logger);
|
|
61
|
+
// Try to get working editor
|
|
62
|
+
const editorCmd = await getWorkingEditor(config);
|
|
63
|
+
if (!editorCmd) {
|
|
64
|
+
// No editor available, offer terminal mode as fallback
|
|
65
|
+
logger.blank();
|
|
66
|
+
logger.warning("No editor found.");
|
|
67
|
+
logger.info("Checked: config, $VISUAL, $EDITOR, code, nano, vim, vi");
|
|
68
|
+
logger.blank();
|
|
69
|
+
const { confirm } = await import("./prompts.js");
|
|
70
|
+
const useTerminal = await confirm("Would you like to use terminal mode instead?", true);
|
|
71
|
+
if (useTerminal) {
|
|
72
|
+
return composeInTerminal(initialContent);
|
|
73
|
+
}
|
|
74
|
+
logger.warning("Message composition cancelled");
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
// Create temp file
|
|
78
|
+
const tempPath = join(tmpdir(), `hublaunch-message-${Date.now()}.txt`);
|
|
79
|
+
writeFileSync(tempPath, initialContent, "utf-8");
|
|
80
|
+
try {
|
|
81
|
+
logger.info(`Opening ${editorCmd.split(" ")[0]} editor...`);
|
|
82
|
+
logger.info("(Save and close the editor when done)");
|
|
83
|
+
logger.blank();
|
|
84
|
+
// Open editor and wait for it to close
|
|
85
|
+
execSync(`${editorCmd} "${tempPath}"`, { stdio: "inherit" });
|
|
86
|
+
// Read file contents
|
|
87
|
+
const content = readFileSync(tempPath, "utf-8").trim();
|
|
88
|
+
// Clean up temp file
|
|
89
|
+
unlinkSync(tempPath);
|
|
90
|
+
// Return null if empty or unchanged
|
|
91
|
+
if (!content || content === initialContent.trim()) {
|
|
92
|
+
logger.warning("Message was empty or unchanged");
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
return content;
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
// Clean up on error
|
|
99
|
+
try {
|
|
100
|
+
unlinkSync(tempPath);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Ignore cleanup errors
|
|
104
|
+
}
|
|
105
|
+
logger.error(`Editor failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
106
|
+
// Offer terminal mode as fallback on error
|
|
107
|
+
const { confirm } = await import("./prompts.js");
|
|
108
|
+
const useTerminal = await confirm("Would you like to use terminal mode instead?", true);
|
|
109
|
+
if (useTerminal) {
|
|
110
|
+
return composeInTerminal(initialContent);
|
|
111
|
+
}
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Compose message in terminal (multi-line input)
|
|
117
|
+
* User types message directly in terminal, types END on new line to finish
|
|
118
|
+
*
|
|
119
|
+
* @param initialContent - Initial content (default: "@copilot ")
|
|
120
|
+
* @returns Promise<string | null> - Message content or null if cancelled
|
|
121
|
+
*/
|
|
122
|
+
export async function composeInTerminal(initialContent = "@copilot ") {
|
|
123
|
+
const { logger } = await import("./logger.js");
|
|
124
|
+
const readline = await import("readline");
|
|
125
|
+
logger.blank();
|
|
126
|
+
logger.info("📝 Terminal Input Mode");
|
|
127
|
+
logger.info("Type your message below. When done, type END on a new line.");
|
|
128
|
+
logger.blank();
|
|
129
|
+
logger.info(initialContent);
|
|
130
|
+
const rl = readline.createInterface({
|
|
131
|
+
input: process.stdin,
|
|
132
|
+
output: process.stdout,
|
|
133
|
+
prompt: "",
|
|
134
|
+
});
|
|
135
|
+
return new Promise((resolve) => {
|
|
136
|
+
const lines = [];
|
|
137
|
+
let resolved = false;
|
|
138
|
+
// Define handlers as named functions for proper cleanup
|
|
139
|
+
const lineHandler = (line) => {
|
|
140
|
+
if (line.trim() === "END") {
|
|
141
|
+
resolved = true;
|
|
142
|
+
// Clean up listeners before closing
|
|
143
|
+
cleanup();
|
|
144
|
+
if (lines.length === 0) {
|
|
145
|
+
// Empty message
|
|
146
|
+
resolve(null);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// Combine initial content with user input
|
|
150
|
+
const message = initialContent + lines.join("\n");
|
|
151
|
+
resolve(message.trim());
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
lines.push(line);
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
const closeHandler = () => {
|
|
159
|
+
// If closed without END (via Ctrl+C or EOF), treat as cancel
|
|
160
|
+
if (!resolved) {
|
|
161
|
+
resolved = true;
|
|
162
|
+
cleanup();
|
|
163
|
+
resolve(null);
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
// Attach listeners
|
|
167
|
+
rl.on("line", lineHandler);
|
|
168
|
+
rl.once("close", closeHandler); // Use once since we only need this to fire once
|
|
169
|
+
// Cleanup function to remove listeners and close interface
|
|
170
|
+
function cleanup() {
|
|
171
|
+
try {
|
|
172
|
+
rl.removeListener("line", lineHandler);
|
|
173
|
+
rl.removeListener("close", closeHandler);
|
|
174
|
+
// Attempt to close interface - will fail silently if already closed
|
|
175
|
+
// This prevents ERR_USE_AFTER_CLOSE when user presses Ctrl+C
|
|
176
|
+
try {
|
|
177
|
+
rl.close();
|
|
178
|
+
}
|
|
179
|
+
catch (closeError) {
|
|
180
|
+
// Interface was already closed (e.g., by Ctrl+C), this is expected
|
|
181
|
+
logger.debug(`Readline interface already closed: ${closeError}`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
// Log cleanup errors in debug mode, but don't propagate
|
|
186
|
+
logger.debug(`Error during readline cleanup: ${error}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Prompt user to select how they want to compose their message
|
|
193
|
+
*
|
|
194
|
+
* @returns Promise<'editor' | 'terminal' | null> - Selected mode or null if cancelled
|
|
195
|
+
*/
|
|
196
|
+
export async function selectComposeMode() {
|
|
197
|
+
const { select } = await import("./prompts.js");
|
|
198
|
+
const choice = await select("How would you like to compose your message?", [
|
|
199
|
+
"Editor",
|
|
200
|
+
"Terminal multi-line",
|
|
201
|
+
"Cancel",
|
|
202
|
+
]);
|
|
203
|
+
switch (choice) {
|
|
204
|
+
case "Editor":
|
|
205
|
+
return "editor";
|
|
206
|
+
case "Terminal multi-line":
|
|
207
|
+
return "terminal";
|
|
208
|
+
case "Cancel":
|
|
209
|
+
default:
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/utils/editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-utils.d.ts","sourceRoot":"","sources":["../../src/utils/git-utils.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAsB,WAAW,CAC/B,SAAS,GAAE,MAAsB,GAChC,OAAO,CAAC,MAAM,CAAC,CAajB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { existsSync } from "fs";
|
|
2
|
+
import { dirname, join } from "path";
|
|
3
|
+
/**
|
|
4
|
+
* Find the Git repository root by walking up the directory tree
|
|
5
|
+
*/
|
|
6
|
+
export async function findGitRoot(startPath = process.cwd()) {
|
|
7
|
+
let currentPath = startPath;
|
|
8
|
+
// Walk up the directory tree until we find .git or reach the root
|
|
9
|
+
while (currentPath !== dirname(currentPath)) {
|
|
10
|
+
if (existsSync(join(currentPath, ".git"))) {
|
|
11
|
+
return currentPath;
|
|
12
|
+
}
|
|
13
|
+
currentPath = dirname(currentPath);
|
|
14
|
+
}
|
|
15
|
+
// If no .git found, use current working directory
|
|
16
|
+
return process.cwd();
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=git-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../../src/utils/git-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,YAAoB,OAAO,CAAC,GAAG,EAAE;IAEjC,IAAI,WAAW,GAAG,SAAS,CAAC;IAE5B,kEAAkE;IAClE,OAAO,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;YAC1C,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAED,kDAAkD;IAClD,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if GitHub CLI is installed
|
|
3
|
+
*/
|
|
4
|
+
export declare function checkGhCli(): Promise<boolean>;
|
|
5
|
+
/**
|
|
6
|
+
* Check if authenticated with GitHub CLI
|
|
7
|
+
* Automatically attempts to refresh expired tokens before prompting re-login
|
|
8
|
+
*/
|
|
9
|
+
export declare function checkGhAuth(): Promise<boolean>;
|
|
10
|
+
/**
|
|
11
|
+
* Validate all GitHub CLI requirements
|
|
12
|
+
*/
|
|
13
|
+
export declare function validateGhCli(): Promise<boolean>;
|
|
14
|
+
/**
|
|
15
|
+
* Get GitHub CLI version
|
|
16
|
+
* Returns version string like "2.40.1" or null if unable to determine
|
|
17
|
+
*/
|
|
18
|
+
export declare function getGhVersion(): Promise<string | null>;
|
|
19
|
+
/**
|
|
20
|
+
* Check if GitHub CLI version meets minimum requirement
|
|
21
|
+
* @param minVersion - Minimum required version (e.g., "2.4.0")
|
|
22
|
+
* @returns true if version is sufficient, false otherwise
|
|
23
|
+
*/
|
|
24
|
+
export declare function checkGhVersion(minVersion?: string): Promise<boolean>;
|
|
25
|
+
/**
|
|
26
|
+
* Run a GitHub CLI command
|
|
27
|
+
*/
|
|
28
|
+
export declare function runGh(args: string[], options?: {
|
|
29
|
+
silent?: boolean;
|
|
30
|
+
}): Promise<string>;
|
|
31
|
+
/**
|
|
32
|
+
* Run GitHub CLI API command and parse JSON response with retry logic
|
|
33
|
+
*
|
|
34
|
+
* For POST and PATCH requests with fields, we always use JSON input via stdin
|
|
35
|
+
* (`--input -`) to avoid shell escaping issues. This ensures that body content
|
|
36
|
+
* containing special characters (backticks, parentheses, quotes, etc.) is handled
|
|
37
|
+
* correctly without shell interpretation.
|
|
38
|
+
*/
|
|
39
|
+
export declare function ghApi<T = unknown>(endpoint: string, options?: {
|
|
40
|
+
method?: string;
|
|
41
|
+
fields?: Record<string, string | string[]>;
|
|
42
|
+
skipRetry?: boolean;
|
|
43
|
+
}): Promise<T>;
|
|
44
|
+
/**
|
|
45
|
+
* Get current GitHub username
|
|
46
|
+
*/
|
|
47
|
+
export declare function getGhUsername(): Promise<string>;
|
|
48
|
+
/**
|
|
49
|
+
* Get repository information with retry logic and caching
|
|
50
|
+
*/
|
|
51
|
+
export declare function getRepoInfo(): Promise<{
|
|
52
|
+
owner: string;
|
|
53
|
+
name: string;
|
|
54
|
+
}>;
|
|
55
|
+
/**
|
|
56
|
+
* GraphQL query helper with retry logic
|
|
57
|
+
*/
|
|
58
|
+
export declare function ghGraphQL<T = unknown>(query: string, variables?: Record<string, string | number>, options?: {
|
|
59
|
+
suppressErrors?: boolean;
|
|
60
|
+
skipRetry?: boolean;
|
|
61
|
+
}): Promise<T>;
|
|
62
|
+
//# sourceMappingURL=github-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-cli.d.ts","sourceRoot":"","sources":["../../src/utils/github-cli.ts"],"names":[],"mappings":"AAmFA;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAQnD;AAED;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CA2CpD;AAgFD;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAQtD;AAED;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW3D;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,UAAU,GAAE,MAAgB,GAC3B,OAAO,CAAC,OAAO,CAAC,CAyDlB;AAED;;GAEG;AACH,wBAAsB,KAAK,CACzB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;;;;;GAOG;AACH,wBAAsB,KAAK,CAAC,CAAC,GAAG,OAAO,EACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;CAChB,GACL,OAAO,CAAC,CAAC,CAAC,CAmDZ;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAGrD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAqH5E;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,CAAC,GAAG,OAAO,EACzC,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAM,EAC/C,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9D,OAAO,CAAC,CAAC,CAAC,CA+DZ"}
|