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,140 @@
|
|
|
1
|
+
import { logger } from '../utils/logger.js';
|
|
2
|
+
import { IssueService } from '../services/github/IssueService.js';
|
|
3
|
+
import { TrackingService } from '../services/tracking/TrackingService.js';
|
|
4
|
+
import { TrackingAdapterFactory } from '../services/tracking/TrackingAdapterFactory.js';
|
|
5
|
+
import { getGhUsername, getRepoInfo } from '../utils/github-cli.js';
|
|
6
|
+
import { STATUS } from '../types/common.schema.js';
|
|
7
|
+
import { multiSelect, selectPriority, UserCancelledError, } from '../utils/prompts.js';
|
|
8
|
+
/**
|
|
9
|
+
* Track command - Add existing GitHub issues to tracking
|
|
10
|
+
*/
|
|
11
|
+
export function trackCommand(program, config) {
|
|
12
|
+
program
|
|
13
|
+
.command('track [issueNumber]')
|
|
14
|
+
.description('Add existing GitHub issues to tracking')
|
|
15
|
+
.action(async (issueNumber) => {
|
|
16
|
+
try {
|
|
17
|
+
await executeTrack(config, issueNumber);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
if (error instanceof UserCancelledError) {
|
|
21
|
+
logger.info('\nCancelled.');
|
|
22
|
+
process.exit(0);
|
|
23
|
+
}
|
|
24
|
+
logger.error('Failed to track issue:');
|
|
25
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
async function executeTrack(config, issueNumberArg) {
|
|
31
|
+
logger.section('Add Issues to Tracking');
|
|
32
|
+
// Initialize services
|
|
33
|
+
const issueService = new IssueService();
|
|
34
|
+
const trackingService = new TrackingService(TrackingAdapterFactory.create(config));
|
|
35
|
+
if (issueNumberArg) {
|
|
36
|
+
// Track specific issue
|
|
37
|
+
const issueNumber = parseInt(issueNumberArg, 10);
|
|
38
|
+
if (isNaN(issueNumber)) {
|
|
39
|
+
throw new Error(`Invalid issue number: ${issueNumberArg}`);
|
|
40
|
+
}
|
|
41
|
+
await trackSingleIssue(issueService, trackingService, issueNumber, config);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
// Track user's issues interactively
|
|
45
|
+
await trackUserIssues(issueService, trackingService, config);
|
|
46
|
+
}
|
|
47
|
+
logger.blank();
|
|
48
|
+
logger.success('✨ Issues tracked successfully!');
|
|
49
|
+
logger.blank();
|
|
50
|
+
}
|
|
51
|
+
async function trackSingleIssue(issueService, trackingService, issueNumber, config) {
|
|
52
|
+
// Check if already tracked
|
|
53
|
+
const exists = await trackingService.exists(issueNumber);
|
|
54
|
+
if (exists) {
|
|
55
|
+
logger.warning(`Issue #${issueNumber} is already tracked`);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// Get issue details
|
|
59
|
+
logger.info(`Fetching issue #${issueNumber}...`);
|
|
60
|
+
const issue = await issueService.get(issueNumber);
|
|
61
|
+
// Get repository info
|
|
62
|
+
const repo = await getRepoInfo();
|
|
63
|
+
// Select priority
|
|
64
|
+
const priorityLevels = config.priorityLevels ?? [
|
|
65
|
+
{ name: 'Critical', emoji: '🔴', color: 'red' },
|
|
66
|
+
{ name: 'High', emoji: '🟠', color: 'orange' },
|
|
67
|
+
{ name: 'Medium', emoji: '🟡', color: 'yellow' },
|
|
68
|
+
{ name: 'Low', emoji: '🟢', color: 'green' },
|
|
69
|
+
{ name: 'Minimal', emoji: '⚪', color: 'gray' },
|
|
70
|
+
];
|
|
71
|
+
const priority = await selectPriority('Select priority for this issue:', priorityLevels);
|
|
72
|
+
// Create tracked issue
|
|
73
|
+
const trackedIssue = {
|
|
74
|
+
name: `${repo.owner}/${repo.name}#${issue.number}`,
|
|
75
|
+
trackingName: issue.title,
|
|
76
|
+
number: issue.number,
|
|
77
|
+
trackingStatus: STATUS.UNASSIGNED,
|
|
78
|
+
priority,
|
|
79
|
+
projectOwner: repo.owner,
|
|
80
|
+
projectName: repo.name,
|
|
81
|
+
createdAt: issue.createdAt,
|
|
82
|
+
updatedAt: issue.updatedAt,
|
|
83
|
+
assignees: issue.assignees,
|
|
84
|
+
};
|
|
85
|
+
await trackingService.add(trackedIssue);
|
|
86
|
+
}
|
|
87
|
+
async function trackUserIssues(issueService, trackingService, _config) {
|
|
88
|
+
// Get current username
|
|
89
|
+
const username = await getGhUsername();
|
|
90
|
+
logger.info(`Fetching your issues...`);
|
|
91
|
+
// Get user's issues
|
|
92
|
+
const userIssues = await issueService.listUserIssues(username);
|
|
93
|
+
if (userIssues.length === 0) {
|
|
94
|
+
logger.info('No open issues found for your account.');
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Filter out already tracked issues
|
|
98
|
+
const trackedIssues = await trackingService.getAll();
|
|
99
|
+
const trackedNumbers = new Set(trackedIssues.map((i) => i.number));
|
|
100
|
+
const untrackedIssues = userIssues.filter((i) => !trackedNumbers.has(i.number));
|
|
101
|
+
if (untrackedIssues.length === 0) {
|
|
102
|
+
logger.info('All your issues are already tracked.');
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
logger.success(`Found ${untrackedIssues.length} untracked issue(s)`);
|
|
106
|
+
logger.blank();
|
|
107
|
+
// Show issues and let user select which to track
|
|
108
|
+
const choices = untrackedIssues.map((issue, index) => ({
|
|
109
|
+
name: `${index + 1}. #${issue.number}: ${issue.title}`,
|
|
110
|
+
value: issue.number.toString(),
|
|
111
|
+
}));
|
|
112
|
+
const selectedNumbers = await multiSelect('Select issues to track:', choices);
|
|
113
|
+
if (selectedNumbers.length === 0) {
|
|
114
|
+
logger.info('No issues selected.');
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
// Track selected issues
|
|
118
|
+
const repo = await getRepoInfo();
|
|
119
|
+
for (const numStr of selectedNumbers) {
|
|
120
|
+
const issueNumber = parseInt(numStr, 10);
|
|
121
|
+
const issue = untrackedIssues.find((i) => i.number === issueNumber);
|
|
122
|
+
if (!issue)
|
|
123
|
+
continue;
|
|
124
|
+
const trackedIssue = {
|
|
125
|
+
name: `${repo.owner}/${repo.name}#${issue.number}`,
|
|
126
|
+
trackingName: issue.title,
|
|
127
|
+
number: issue.number,
|
|
128
|
+
trackingStatus: STATUS.UNASSIGNED,
|
|
129
|
+
priority: 'Medium',
|
|
130
|
+
projectOwner: repo.owner,
|
|
131
|
+
projectName: repo.name,
|
|
132
|
+
createdAt: issue.createdAt,
|
|
133
|
+
updatedAt: issue.updatedAt,
|
|
134
|
+
assignees: issue.assignees,
|
|
135
|
+
};
|
|
136
|
+
await trackingService.add(trackedIssue);
|
|
137
|
+
}
|
|
138
|
+
logger.success(`Tracked ${selectedNumbers.length} issue(s)`);
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=track.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track.js","sourceRoot":"","sources":["../../src/commands/track.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import type { Config } from '../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Upload command - Upload a plan to the target branch using a temporary worktree.
|
|
5
|
+
*
|
|
6
|
+
* Flow:
|
|
7
|
+
* 1. Determine which plan file to upload (latest or user-specified)
|
|
8
|
+
* 2. Read plan file content into memory
|
|
9
|
+
* 3. Create a temporary worktree from origin/main
|
|
10
|
+
* 4. Copy plan file into the worktree at the same relative path
|
|
11
|
+
* 5. Stage + auto-commit the plan file in the worktree
|
|
12
|
+
* 6. Push from the worktree
|
|
13
|
+
* 7. Remove the worktree
|
|
14
|
+
* 8. Plan file remains untouched in the main working tree
|
|
15
|
+
*/
|
|
16
|
+
export declare function uploadCommand(program: Command, config: Config): void;
|
|
17
|
+
/**
|
|
18
|
+
* Execute upload command
|
|
19
|
+
*/
|
|
20
|
+
export declare function executeUpload(config: Config, planPath?: string): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=upload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKhD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAepE;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CA2Hf"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { basename, dirname, join, resolve, isAbsolute } from 'path';
|
|
2
|
+
import { readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
3
|
+
import { PlanService } from '../services/plan/PlanService.js';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
import { WorktreeService } from '../services/git/WorktreeService.js';
|
|
6
|
+
import { getRepoInfo } from '../utils/github-cli.js';
|
|
7
|
+
import { getRepoRoot } from '../utils/shell.js';
|
|
8
|
+
/**
|
|
9
|
+
* Upload command - Upload a plan to the target branch using a temporary worktree.
|
|
10
|
+
*
|
|
11
|
+
* Flow:
|
|
12
|
+
* 1. Determine which plan file to upload (latest or user-specified)
|
|
13
|
+
* 2. Read plan file content into memory
|
|
14
|
+
* 3. Create a temporary worktree from origin/main
|
|
15
|
+
* 4. Copy plan file into the worktree at the same relative path
|
|
16
|
+
* 5. Stage + auto-commit the plan file in the worktree
|
|
17
|
+
* 6. Push from the worktree
|
|
18
|
+
* 7. Remove the worktree
|
|
19
|
+
* 8. Plan file remains untouched in the main working tree
|
|
20
|
+
*/
|
|
21
|
+
export function uploadCommand(program, config) {
|
|
22
|
+
program
|
|
23
|
+
.command('upload [planPath]', { hidden: true })
|
|
24
|
+
.description('Upload plan to origin (target branch configurable via uploadBranch, default: main)')
|
|
25
|
+
.action(async (planPath) => {
|
|
26
|
+
try {
|
|
27
|
+
await executeUpload(config, planPath);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
logger.error('Failed to upload plan:');
|
|
31
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Execute upload command
|
|
38
|
+
*/
|
|
39
|
+
export async function executeUpload(config, planPath) {
|
|
40
|
+
const planService = new PlanService(config.planPath);
|
|
41
|
+
const targetBranch = config.uploadBranch ?? 'main';
|
|
42
|
+
const rawBasePath = config.worktreeBasePath ?? '.hula-worktrees';
|
|
43
|
+
const repoRoot = await getRepoRoot();
|
|
44
|
+
const worktreeBasePath = isAbsolute(rawBasePath) ? rawBasePath : resolve(repoRoot, rawBasePath);
|
|
45
|
+
// Validate targetBranch to prevent command injection in git push refspec
|
|
46
|
+
if (targetBranch.includes(';') ||
|
|
47
|
+
targetBranch.includes('|') ||
|
|
48
|
+
targetBranch.includes('&') ||
|
|
49
|
+
targetBranch.includes('$') ||
|
|
50
|
+
targetBranch.includes('`') ||
|
|
51
|
+
targetBranch.includes('\\') ||
|
|
52
|
+
targetBranch.includes('\n') ||
|
|
53
|
+
targetBranch.includes('\r') ||
|
|
54
|
+
targetBranch.includes('\0') ||
|
|
55
|
+
targetBranch.trim() === '') {
|
|
56
|
+
logger.error(`Invalid uploadBranch value in config: "${targetBranch}"`);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
// Step 1: Determine which plan to upload
|
|
60
|
+
let targetPlan = null;
|
|
61
|
+
if (planPath) {
|
|
62
|
+
targetPlan = { path: planPath, name: basename(planPath, '.md') };
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
const latestPlan = await planService.getLatestPlan();
|
|
66
|
+
if (latestPlan) {
|
|
67
|
+
targetPlan = {
|
|
68
|
+
path: latestPlan.path,
|
|
69
|
+
name: latestPlan.filename.replace('.md', ''),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (!targetPlan) {
|
|
74
|
+
logger.error('No plan found to upload');
|
|
75
|
+
logger.info('Run /hula-plan first to create a plan, or specify a path.');
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
logger.section('Upload Plan');
|
|
79
|
+
logger.info(`Plan: ${targetPlan.path}`);
|
|
80
|
+
logger.info(`Target branch: ${targetBranch}`);
|
|
81
|
+
// Step 2: Read plan file content into memory
|
|
82
|
+
const relativePath = planService.getRelativePath(targetPlan.path);
|
|
83
|
+
const planContent = readFileSync(targetPlan.path, 'utf-8');
|
|
84
|
+
logger.debug('Plan file content read into memory');
|
|
85
|
+
// Step 3: Get repo info and create worktree service
|
|
86
|
+
const repoInfo = await getRepoInfo();
|
|
87
|
+
const worktreeService = new WorktreeService({
|
|
88
|
+
basePath: worktreeBasePath,
|
|
89
|
+
repoName: repoInfo.name,
|
|
90
|
+
});
|
|
91
|
+
// Use a timestamp-based identifier to avoid collisions between concurrent uploads
|
|
92
|
+
const identifier = `${Date.now()}`;
|
|
93
|
+
const worktreePath = worktreeService.getWorktreeDir('upload', identifier);
|
|
94
|
+
logger.info('Creating temporary upload worktree...');
|
|
95
|
+
let worktreeCreated = false;
|
|
96
|
+
try {
|
|
97
|
+
// Step 4: Create a temporary worktree off origin/main (detached HEAD)
|
|
98
|
+
await worktreeService.createWorktreeAt(worktreePath, `origin/${targetBranch}`, true);
|
|
99
|
+
worktreeCreated = true;
|
|
100
|
+
// Step 5: Copy plan file into the worktree at the same relative path
|
|
101
|
+
logger.info('Writing plan file to upload worktree...');
|
|
102
|
+
const worktreePlanPath = join(worktreePath, relativePath);
|
|
103
|
+
mkdirSync(dirname(worktreePlanPath), { recursive: true });
|
|
104
|
+
writeFileSync(worktreePlanPath, planContent, 'utf-8');
|
|
105
|
+
// Step 6: Stage and commit in the worktree
|
|
106
|
+
logger.info('Committing plan file in upload worktree...');
|
|
107
|
+
const hasChanges = await worktreeService.hasChangesAt(worktreePath);
|
|
108
|
+
if (hasChanges) {
|
|
109
|
+
await worktreeService.commitChangesAt(worktreePath, 'chore: upload plan via hula');
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
logger.info('Plan already up-to-date, proceeding to push...');
|
|
113
|
+
}
|
|
114
|
+
// Step 7: Push from worktree
|
|
115
|
+
const spinner = logger.spinner(`Pushing to origin/${targetBranch}...`);
|
|
116
|
+
try {
|
|
117
|
+
// For a detached HEAD worktree we push HEAD directly to the target branch
|
|
118
|
+
await worktreeService.pushAt(worktreePath, `HEAD:${targetBranch}`);
|
|
119
|
+
spinner.stop();
|
|
120
|
+
logger.success(`Plan uploaded to origin/${targetBranch}`);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
spinner.stop();
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
// Step 8: Always remove the temporary worktree
|
|
129
|
+
if (worktreeCreated) {
|
|
130
|
+
logger.info('Cleaning up upload worktree...');
|
|
131
|
+
try {
|
|
132
|
+
await worktreeService.removeWorktreeAt(worktreePath);
|
|
133
|
+
logger.debug('Upload worktree removed');
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
logger.warning(`Failed to remove upload worktree at ${worktreePath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
137
|
+
logger.info(`You can manually remove it with: git worktree remove "${worktreePath}" --force`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Plan file remains untouched in the main working tree
|
|
142
|
+
// Note: the file will be cleaned up later by launch/create after success
|
|
143
|
+
logger.debug('Plan file preserved in main working tree');
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/commands/upload.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
|
+
* View command - View tracked issues with status and plan files
|
|
5
|
+
*/
|
|
6
|
+
export declare function viewCommand(program: Command, config: Config): void;
|
|
7
|
+
//# sourceMappingURL=view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/commands/view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,KAAK,EAAE,MAAM,EAA+B,MAAM,mBAAmB,CAAC;AAG7E;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAelE"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { logger } from '../utils/logger.js';
|
|
2
|
+
import { TrackingService } from '../services/tracking/TrackingService.js';
|
|
3
|
+
import { TrackingAdapterFactory } from '../services/tracking/TrackingAdapterFactory.js';
|
|
4
|
+
import { STATUS } from '../types/common.schema.js';
|
|
5
|
+
/**
|
|
6
|
+
* View command - View tracked issues with status and plan files
|
|
7
|
+
*/
|
|
8
|
+
export function viewCommand(program, config) {
|
|
9
|
+
program
|
|
10
|
+
.command('view')
|
|
11
|
+
.description('View tracked issues with status and plan files')
|
|
12
|
+
.option('--status <status>', 'Filter by status')
|
|
13
|
+
.option('--priority <priority>', 'Filter by priority')
|
|
14
|
+
.action(async (options) => {
|
|
15
|
+
try {
|
|
16
|
+
await executeView(config, options);
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
logger.error('Failed to view issues:');
|
|
20
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
async function executeView(config, options) {
|
|
26
|
+
logger.section('Tracked Issues');
|
|
27
|
+
// Initialize tracking service
|
|
28
|
+
const trackingService = new TrackingService(TrackingAdapterFactory.create(config));
|
|
29
|
+
// Get all tracked issues
|
|
30
|
+
let issues = await trackingService.getAll();
|
|
31
|
+
if (issues.length === 0) {
|
|
32
|
+
logger.info('No tracked issues found.');
|
|
33
|
+
logger.blank();
|
|
34
|
+
logger.info("Use 'hublaunch track' to add issues to tracking.");
|
|
35
|
+
logger.blank();
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// Apply filters
|
|
39
|
+
if (options.status) {
|
|
40
|
+
issues = issues.filter((i) => i.trackingStatus === options.status);
|
|
41
|
+
}
|
|
42
|
+
if (options.priority) {
|
|
43
|
+
issues = issues.filter((i) => i.priority === options.priority);
|
|
44
|
+
}
|
|
45
|
+
// Sort issues based on config
|
|
46
|
+
const sortConfig = config.issueSortOrder ?? {
|
|
47
|
+
sortBy: 'created',
|
|
48
|
+
direction: 'desc',
|
|
49
|
+
groupBy: 'priority',
|
|
50
|
+
};
|
|
51
|
+
issues = trackingService.sortIssues(issues, sortConfig.sortBy, sortConfig.direction);
|
|
52
|
+
// Group by priority or status if configured
|
|
53
|
+
if (sortConfig.groupBy === 'priority') {
|
|
54
|
+
displayGroupedByPriority(issues, config);
|
|
55
|
+
}
|
|
56
|
+
else if (sortConfig.groupBy === 'status') {
|
|
57
|
+
displayGroupedByStatus(issues);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
displayIssuesList(issues);
|
|
61
|
+
}
|
|
62
|
+
// Display standalone jobs (those without a GitHub issue number)
|
|
63
|
+
// Standalone-task UI was removed when the local schema dropped the
|
|
64
|
+
// job* fields (see CHANGELOG: Plan/Project/Task rename).
|
|
65
|
+
logger.blank();
|
|
66
|
+
logger.info(`Total: ${issues.length} plan(s)`);
|
|
67
|
+
logger.blank();
|
|
68
|
+
}
|
|
69
|
+
function displayGroupedByPriority(issues, config) {
|
|
70
|
+
const priorityLevels = config.priorityLevels ?? [
|
|
71
|
+
{ name: 'Critical', emoji: '🔴', color: 'red' },
|
|
72
|
+
{ name: 'High', emoji: '🟠', color: 'orange' },
|
|
73
|
+
{ name: 'Medium', emoji: '🟡', color: 'yellow' },
|
|
74
|
+
{ name: 'Low', emoji: '🟢', color: 'green' },
|
|
75
|
+
{ name: 'Minimal', emoji: '⚪', color: 'gray' },
|
|
76
|
+
];
|
|
77
|
+
for (const level of priorityLevels) {
|
|
78
|
+
const priorityIssues = issues.filter((i) => i.priority === level.name);
|
|
79
|
+
if (priorityIssues.length === 0)
|
|
80
|
+
continue;
|
|
81
|
+
logger.blank();
|
|
82
|
+
logger.priority(level.name, level.emoji, `${level.name} Priority (${priorityIssues.length})`);
|
|
83
|
+
logger.blank();
|
|
84
|
+
for (const issue of priorityIssues) {
|
|
85
|
+
displayIssue(issue);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function displayGroupedByStatus(issues) {
|
|
90
|
+
const statuses = [
|
|
91
|
+
STATUS.UNASSIGNED,
|
|
92
|
+
STATUS.INITIAL_WAITING,
|
|
93
|
+
STATUS.WAITING,
|
|
94
|
+
STATUS.READY,
|
|
95
|
+
];
|
|
96
|
+
for (const status of statuses) {
|
|
97
|
+
const statusIssues = issues.filter((i) => i.trackingStatus === status);
|
|
98
|
+
if (statusIssues.length === 0)
|
|
99
|
+
continue;
|
|
100
|
+
logger.blank();
|
|
101
|
+
logger.issue(status, `${status.toUpperCase()} (${statusIssues.length})`);
|
|
102
|
+
logger.blank();
|
|
103
|
+
for (const issue of statusIssues) {
|
|
104
|
+
displayIssue(issue);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function displayIssuesList(issues) {
|
|
109
|
+
logger.blank();
|
|
110
|
+
for (const issue of issues) {
|
|
111
|
+
displayIssue(issue);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Display standalone jobs (ralph-run jobs without a GitHub issue)
|
|
116
|
+
* @deprecated removed with the Plan/Project/Task rename; the server no
|
|
117
|
+
* longer surfaces per-task status to the list endpoint, and the local
|
|
118
|
+
* schema dropped the `job*` fields. Kept as a stub to avoid widening
|
|
119
|
+
* this diff; can be deleted in a follow-up.
|
|
120
|
+
*/
|
|
121
|
+
function displayStandaloneJobs(_jobs) {
|
|
122
|
+
// intentionally empty
|
|
123
|
+
}
|
|
124
|
+
void displayStandaloneJobs;
|
|
125
|
+
function displayIssue(issue) {
|
|
126
|
+
const issueNumber = issue.number ? `#${issue.number} ` : '';
|
|
127
|
+
logger.log(` ${issueNumber}${issue.name}`);
|
|
128
|
+
logger.log(` Status: ${issue.trackingStatus} | Priority: ${issue.priority}`);
|
|
129
|
+
if (issue.assignees && issue.assignees.length > 0) {
|
|
130
|
+
logger.log(` Assignees: ${issue.assignees.join(', ')}`);
|
|
131
|
+
}
|
|
132
|
+
if (issue.prNumber) {
|
|
133
|
+
logger.log(` PR: #${issue.prNumber}`);
|
|
134
|
+
}
|
|
135
|
+
if (issue.planPath) {
|
|
136
|
+
logger.log(` Plan: ${issue.planPath}`);
|
|
137
|
+
}
|
|
138
|
+
logger.blank();
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Format job status as an emoji indicator
|
|
142
|
+
* @deprecated stub kept after the Plan/Project/Task rename dropped
|
|
143
|
+
* `job*` fields. Will be removed in a follow-up.
|
|
144
|
+
*/
|
|
145
|
+
function formatJobIndicator(_status) {
|
|
146
|
+
return '';
|
|
147
|
+
}
|
|
148
|
+
void formatJobIndicator;
|
|
149
|
+
/**
|
|
150
|
+
* Format ISO datetime to a shorter display (currently unused; kept
|
|
151
|
+
* as a small helper for future re-introduction of formatted display).
|
|
152
|
+
*/
|
|
153
|
+
function _formatTime(isoString) {
|
|
154
|
+
try {
|
|
155
|
+
const date = new Date(isoString);
|
|
156
|
+
return date.toLocaleString('en-US', {
|
|
157
|
+
month: 'short',
|
|
158
|
+
day: 'numeric',
|
|
159
|
+
hour: '2-digit',
|
|
160
|
+
minute: '2-digit',
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return isoString;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
void _formatTime;
|
|
168
|
+
//# sourceMappingURL=view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/commands/view.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
|
+
* Watch command - Monitor PR for Copilot completion and test results
|
|
5
|
+
*/
|
|
6
|
+
export declare function watchCommand(program: Command, config: Config): void;
|
|
7
|
+
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAMhD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA8BnE"}
|