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.
Files changed (331) hide show
  1. package/CHANGELOG.md +144 -0
  2. package/README.md +195 -0
  3. package/bin/hublaunch +20 -0
  4. package/dist/commands/checkout.d.ts +7 -0
  5. package/dist/commands/checkout.d.ts.map +1 -0
  6. package/dist/commands/checkout.js +164 -0
  7. package/dist/commands/checkout.js.map +1 -0
  8. package/dist/commands/clean.d.ts +7 -0
  9. package/dist/commands/clean.d.ts.map +1 -0
  10. package/dist/commands/clean.js +206 -0
  11. package/dist/commands/clean.js.map +1 -0
  12. package/dist/commands/close.d.ts +7 -0
  13. package/dist/commands/close.d.ts.map +1 -0
  14. package/dist/commands/close.js +109 -0
  15. package/dist/commands/close.js.map +1 -0
  16. package/dist/commands/create.d.ts +7 -0
  17. package/dist/commands/create.d.ts.map +1 -0
  18. package/dist/commands/create.js +367 -0
  19. package/dist/commands/create.js.map +1 -0
  20. package/dist/commands/diff.d.ts +7 -0
  21. package/dist/commands/diff.d.ts.map +1 -0
  22. package/dist/commands/diff.js +98 -0
  23. package/dist/commands/diff.js.map +1 -0
  24. package/dist/commands/execute.d.ts +7 -0
  25. package/dist/commands/execute.d.ts.map +1 -0
  26. package/dist/commands/execute.js +376 -0
  27. package/dist/commands/execute.js.map +1 -0
  28. package/dist/commands/init.d.ts +8 -0
  29. package/dist/commands/init.d.ts.map +1 -0
  30. package/dist/commands/init.js +1243 -0
  31. package/dist/commands/init.js.map +1 -0
  32. package/dist/commands/interactive.d.ts +12 -0
  33. package/dist/commands/interactive.d.ts.map +1 -0
  34. package/dist/commands/interactive.js +1071 -0
  35. package/dist/commands/interactive.js.map +1 -0
  36. package/dist/commands/launch.d.ts +16 -0
  37. package/dist/commands/launch.d.ts.map +1 -0
  38. package/dist/commands/launch.js +684 -0
  39. package/dist/commands/launch.js.map +1 -0
  40. package/dist/commands/login.d.ts +40 -0
  41. package/dist/commands/login.d.ts.map +1 -0
  42. package/dist/commands/login.js +469 -0
  43. package/dist/commands/login.js.map +1 -0
  44. package/dist/commands/logs.d.ts +22 -0
  45. package/dist/commands/logs.d.ts.map +1 -0
  46. package/dist/commands/logs.js +105 -0
  47. package/dist/commands/logs.js.map +1 -0
  48. package/dist/commands/merge.d.ts +7 -0
  49. package/dist/commands/merge.d.ts.map +1 -0
  50. package/dist/commands/merge.js +240 -0
  51. package/dist/commands/merge.js.map +1 -0
  52. package/dist/commands/preview.d.ts +7 -0
  53. package/dist/commands/preview.d.ts.map +1 -0
  54. package/dist/commands/preview.js +160 -0
  55. package/dist/commands/preview.js.map +1 -0
  56. package/dist/commands/project.d.ts +18 -0
  57. package/dist/commands/project.d.ts.map +1 -0
  58. package/dist/commands/project.js +352 -0
  59. package/dist/commands/project.js.map +1 -0
  60. package/dist/commands/respond.d.ts +7 -0
  61. package/dist/commands/respond.d.ts.map +1 -0
  62. package/dist/commands/respond.js +112 -0
  63. package/dist/commands/respond.js.map +1 -0
  64. package/dist/commands/setPriority.d.ts +7 -0
  65. package/dist/commands/setPriority.d.ts.map +1 -0
  66. package/dist/commands/setPriority.js +112 -0
  67. package/dist/commands/setPriority.js.map +1 -0
  68. package/dist/commands/track.d.ts +7 -0
  69. package/dist/commands/track.d.ts.map +1 -0
  70. package/dist/commands/track.js +140 -0
  71. package/dist/commands/track.js.map +1 -0
  72. package/dist/commands/upload.d.ts +21 -0
  73. package/dist/commands/upload.d.ts.map +1 -0
  74. package/dist/commands/upload.js +145 -0
  75. package/dist/commands/upload.js.map +1 -0
  76. package/dist/commands/view.d.ts +7 -0
  77. package/dist/commands/view.d.ts.map +1 -0
  78. package/dist/commands/view.js +168 -0
  79. package/dist/commands/view.js.map +1 -0
  80. package/dist/commands/watch.d.ts +7 -0
  81. package/dist/commands/watch.d.ts.map +1 -0
  82. package/dist/commands/watch.js +438 -0
  83. package/dist/commands/watch.js.map +1 -0
  84. package/dist/commands/worktree.d.ts +7 -0
  85. package/dist/commands/worktree.d.ts.map +1 -0
  86. package/dist/commands/worktree.js +122 -0
  87. package/dist/commands/worktree.js.map +1 -0
  88. package/dist/config/command-names.d.ts +16 -0
  89. package/dist/config/command-names.d.ts.map +1 -0
  90. package/dist/config/command-names.js +17 -0
  91. package/dist/config/command-names.js.map +1 -0
  92. package/dist/config/constants.d.ts +12 -0
  93. package/dist/config/constants.d.ts.map +1 -0
  94. package/dist/config/constants.js +12 -0
  95. package/dist/config/constants.js.map +1 -0
  96. package/dist/config/index.d.ts +47 -0
  97. package/dist/config/index.d.ts.map +1 -0
  98. package/dist/config/index.js +175 -0
  99. package/dist/config/index.js.map +1 -0
  100. package/dist/index.d.ts +3 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +148 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/services/api/HulaApiClient.d.ts +170 -0
  105. package/dist/services/api/HulaApiClient.d.ts.map +1 -0
  106. package/dist/services/api/HulaApiClient.js +233 -0
  107. package/dist/services/api/HulaApiClient.js.map +1 -0
  108. package/dist/services/diff/DiffService.d.ts +44 -0
  109. package/dist/services/diff/DiffService.d.ts.map +1 -0
  110. package/dist/services/diff/DiffService.js +126 -0
  111. package/dist/services/diff/DiffService.js.map +1 -0
  112. package/dist/services/editor/EditorService.d.ts +53 -0
  113. package/dist/services/editor/EditorService.d.ts.map +1 -0
  114. package/dist/services/editor/EditorService.js +161 -0
  115. package/dist/services/editor/EditorService.js.map +1 -0
  116. package/dist/services/git/GitService.d.ts +124 -0
  117. package/dist/services/git/GitService.d.ts.map +1 -0
  118. package/dist/services/git/GitService.js +423 -0
  119. package/dist/services/git/GitService.js.map +1 -0
  120. package/dist/services/git/WorktreeService.d.ts +144 -0
  121. package/dist/services/git/WorktreeService.d.ts.map +1 -0
  122. package/dist/services/git/WorktreeService.js +505 -0
  123. package/dist/services/git/WorktreeService.js.map +1 -0
  124. package/dist/services/github/ActionsService.d.ts +66 -0
  125. package/dist/services/github/ActionsService.d.ts.map +1 -0
  126. package/dist/services/github/ActionsService.js +114 -0
  127. package/dist/services/github/ActionsService.js.map +1 -0
  128. package/dist/services/github/AssetUploadService.d.ts +103 -0
  129. package/dist/services/github/AssetUploadService.d.ts.map +1 -0
  130. package/dist/services/github/AssetUploadService.js +299 -0
  131. package/dist/services/github/AssetUploadService.js.map +1 -0
  132. package/dist/services/github/BatchCopilotDetectionService.d.ts +58 -0
  133. package/dist/services/github/BatchCopilotDetectionService.d.ts.map +1 -0
  134. package/dist/services/github/BatchCopilotDetectionService.js +321 -0
  135. package/dist/services/github/BatchCopilotDetectionService.js.map +1 -0
  136. package/dist/services/github/CopilotDetectionService.d.ts +40 -0
  137. package/dist/services/github/CopilotDetectionService.d.ts.map +1 -0
  138. package/dist/services/github/CopilotDetectionService.js +280 -0
  139. package/dist/services/github/CopilotDetectionService.js.map +1 -0
  140. package/dist/services/github/CopilotService.d.ts +27 -0
  141. package/dist/services/github/CopilotService.d.ts.map +1 -0
  142. package/dist/services/github/CopilotService.js +249 -0
  143. package/dist/services/github/CopilotService.js.map +1 -0
  144. package/dist/services/github/DeploymentDetectionService.d.ts +38 -0
  145. package/dist/services/github/DeploymentDetectionService.d.ts.map +1 -0
  146. package/dist/services/github/DeploymentDetectionService.js +104 -0
  147. package/dist/services/github/DeploymentDetectionService.js.map +1 -0
  148. package/dist/services/github/GithubAppService.d.ts +40 -0
  149. package/dist/services/github/GithubAppService.d.ts.map +1 -0
  150. package/dist/services/github/GithubAppService.js +187 -0
  151. package/dist/services/github/GithubAppService.js.map +1 -0
  152. package/dist/services/github/IssueService.d.ts +65 -0
  153. package/dist/services/github/IssueService.d.ts.map +1 -0
  154. package/dist/services/github/IssueService.js +231 -0
  155. package/dist/services/github/IssueService.js.map +1 -0
  156. package/dist/services/github/LabelService.d.ts +36 -0
  157. package/dist/services/github/LabelService.d.ts.map +1 -0
  158. package/dist/services/github/LabelService.js +122 -0
  159. package/dist/services/github/LabelService.js.map +1 -0
  160. package/dist/services/github/PRService.d.ts +77 -0
  161. package/dist/services/github/PRService.d.ts.map +1 -0
  162. package/dist/services/github/PRService.js +287 -0
  163. package/dist/services/github/PRService.js.map +1 -0
  164. package/dist/services/github/ProjectService.d.ts +144 -0
  165. package/dist/services/github/ProjectService.d.ts.map +1 -0
  166. package/dist/services/github/ProjectService.js +804 -0
  167. package/dist/services/github/ProjectService.js.map +1 -0
  168. package/dist/services/hooks/HookExecutor.d.ts +66 -0
  169. package/dist/services/hooks/HookExecutor.d.ts.map +1 -0
  170. package/dist/services/hooks/HookExecutor.js +227 -0
  171. package/dist/services/hooks/HookExecutor.js.map +1 -0
  172. package/dist/services/hooks/index.d.ts +2 -0
  173. package/dist/services/hooks/index.d.ts.map +1 -0
  174. package/dist/services/hooks/index.js +2 -0
  175. package/dist/services/hooks/index.js.map +1 -0
  176. package/dist/services/logs/LogFormatterService.d.ts +17 -0
  177. package/dist/services/logs/LogFormatterService.d.ts.map +1 -0
  178. package/dist/services/logs/LogFormatterService.js +35 -0
  179. package/dist/services/logs/LogFormatterService.js.map +1 -0
  180. package/dist/services/logs/TempFileService.d.ts +27 -0
  181. package/dist/services/logs/TempFileService.d.ts.map +1 -0
  182. package/dist/services/logs/TempFileService.js +90 -0
  183. package/dist/services/logs/TempFileService.js.map +1 -0
  184. package/dist/services/logs/index.d.ts +3 -0
  185. package/dist/services/logs/index.d.ts.map +1 -0
  186. package/dist/services/logs/index.js +4 -0
  187. package/dist/services/logs/index.js.map +1 -0
  188. package/dist/services/plan/PlanService.d.ts +70 -0
  189. package/dist/services/plan/PlanService.d.ts.map +1 -0
  190. package/dist/services/plan/PlanService.js +211 -0
  191. package/dist/services/plan/PlanService.js.map +1 -0
  192. package/dist/services/polling/GitHubDirectPollingAdapter.d.ts +16 -0
  193. package/dist/services/polling/GitHubDirectPollingAdapter.d.ts.map +1 -0
  194. package/dist/services/polling/GitHubDirectPollingAdapter.js +87 -0
  195. package/dist/services/polling/GitHubDirectPollingAdapter.js.map +1 -0
  196. package/dist/services/polling/HulaServerPollingAdapter.d.ts +23 -0
  197. package/dist/services/polling/HulaServerPollingAdapter.d.ts.map +1 -0
  198. package/dist/services/polling/HulaServerPollingAdapter.js +78 -0
  199. package/dist/services/polling/HulaServerPollingAdapter.js.map +1 -0
  200. package/dist/services/polling/IStatusPollingAdapter.d.ts +29 -0
  201. package/dist/services/polling/IStatusPollingAdapter.d.ts.map +1 -0
  202. package/dist/services/polling/IStatusPollingAdapter.js +2 -0
  203. package/dist/services/polling/IStatusPollingAdapter.js.map +1 -0
  204. package/dist/services/polling/StatusPollingAdapterFactory.d.ts +14 -0
  205. package/dist/services/polling/StatusPollingAdapterFactory.d.ts.map +1 -0
  206. package/dist/services/polling/StatusPollingAdapterFactory.js +41 -0
  207. package/dist/services/polling/StatusPollingAdapterFactory.js.map +1 -0
  208. package/dist/services/polling/index.d.ts +5 -0
  209. package/dist/services/polling/index.d.ts.map +1 -0
  210. package/dist/services/polling/index.js +5 -0
  211. package/dist/services/polling/index.js.map +1 -0
  212. package/dist/services/preview/PreviewService.d.ts +86 -0
  213. package/dist/services/preview/PreviewService.d.ts.map +1 -0
  214. package/dist/services/preview/PreviewService.js +439 -0
  215. package/dist/services/preview/PreviewService.js.map +1 -0
  216. package/dist/services/tracking/ProjectTrackingAdapter.d.ts +41 -0
  217. package/dist/services/tracking/ProjectTrackingAdapter.d.ts.map +1 -0
  218. package/dist/services/tracking/ProjectTrackingAdapter.js +230 -0
  219. package/dist/services/tracking/ProjectTrackingAdapter.js.map +1 -0
  220. package/dist/services/tracking/RemoteTrackingAdapter.d.ts +62 -0
  221. package/dist/services/tracking/RemoteTrackingAdapter.d.ts.map +1 -0
  222. package/dist/services/tracking/RemoteTrackingAdapter.js +242 -0
  223. package/dist/services/tracking/RemoteTrackingAdapter.js.map +1 -0
  224. package/dist/services/tracking/TrackingAdapterFactory.d.ts +25 -0
  225. package/dist/services/tracking/TrackingAdapterFactory.d.ts.map +1 -0
  226. package/dist/services/tracking/TrackingAdapterFactory.js +55 -0
  227. package/dist/services/tracking/TrackingAdapterFactory.js.map +1 -0
  228. package/dist/services/tracking/TrackingService.d.ts +104 -0
  229. package/dist/services/tracking/TrackingService.d.ts.map +1 -0
  230. package/dist/services/tracking/TrackingService.js +256 -0
  231. package/dist/services/tracking/TrackingService.js.map +1 -0
  232. package/dist/services/tracking/UntrackedIssuesService.d.ts +20 -0
  233. package/dist/services/tracking/UntrackedIssuesService.d.ts.map +1 -0
  234. package/dist/services/tracking/UntrackedIssuesService.js +148 -0
  235. package/dist/services/tracking/UntrackedIssuesService.js.map +1 -0
  236. package/dist/services/tracking/local-file-migration.d.ts +16 -0
  237. package/dist/services/tracking/local-file-migration.d.ts.map +1 -0
  238. package/dist/services/tracking/local-file-migration.js +86 -0
  239. package/dist/services/tracking/local-file-migration.js.map +1 -0
  240. package/dist/templates/planning-instructions.md +752 -0
  241. package/dist/templates/proceed-instructions.md +453 -0
  242. package/dist/templates/scripts/hula-fix-commit.sh +110 -0
  243. package/dist/templates/scripts/hula-fix-setup.sh +145 -0
  244. package/dist/templates/scripts/hula-launch-run.sh +89 -0
  245. package/dist/templates/scripts/hula-merge-local.sh +138 -0
  246. package/dist/templates/scripts/hula-merge-remote.sh +74 -0
  247. package/dist/templates/scripts/hula-read-config.sh +38 -0
  248. package/dist/templates/scripts/hula-verify-gather.sh +135 -0
  249. package/dist/templates/scripts/hula-verify-post.sh +84 -0
  250. package/dist/templates/skills/hula-confirm/SKILL.md +361 -0
  251. package/dist/templates/skills/hula-create/SKILL.md +211 -0
  252. package/dist/templates/skills/hula-fix/SKILL.md +224 -0
  253. package/dist/templates/skills/hula-launch/SKILL.md +159 -0
  254. package/dist/templates/skills/hula-log/SKILL.md +105 -0
  255. package/dist/templates/skills/hula-merge/SKILL.md +387 -0
  256. package/dist/templates/skills/hula-plan/SKILL.md +148 -0
  257. package/dist/templates/skills/hula-upload/SKILL.md +115 -0
  258. package/dist/templates/skills/hula-verify/SKILL.md +754 -0
  259. package/dist/types/common.schema.d.ts +46 -0
  260. package/dist/types/common.schema.d.ts.map +1 -0
  261. package/dist/types/common.schema.js +60 -0
  262. package/dist/types/common.schema.js.map +1 -0
  263. package/dist/types/config.schema.d.ts +443 -0
  264. package/dist/types/config.schema.d.ts.map +1 -0
  265. package/dist/types/config.schema.js +126 -0
  266. package/dist/types/config.schema.js.map +1 -0
  267. package/dist/types/index.d.ts +6 -0
  268. package/dist/types/index.d.ts.map +1 -0
  269. package/dist/types/index.js +7 -0
  270. package/dist/types/index.js.map +1 -0
  271. package/dist/types/issue.schema.d.ts +136 -0
  272. package/dist/types/issue.schema.d.ts.map +1 -0
  273. package/dist/types/issue.schema.js +49 -0
  274. package/dist/types/issue.schema.js.map +1 -0
  275. package/dist/types/pr.schema.d.ts +118 -0
  276. package/dist/types/pr.schema.d.ts.map +1 -0
  277. package/dist/types/pr.schema.js +40 -0
  278. package/dist/types/pr.schema.js.map +1 -0
  279. package/dist/types/tracking.schema.d.ts +340 -0
  280. package/dist/types/tracking.schema.d.ts.map +1 -0
  281. package/dist/types/tracking.schema.js +56 -0
  282. package/dist/types/tracking.schema.js.map +1 -0
  283. package/dist/utils/browser-launcher.d.ts +60 -0
  284. package/dist/utils/browser-launcher.d.ts.map +1 -0
  285. package/dist/utils/browser-launcher.js +263 -0
  286. package/dist/utils/browser-launcher.js.map +1 -0
  287. package/dist/utils/cache.d.ts +44 -0
  288. package/dist/utils/cache.d.ts.map +1 -0
  289. package/dist/utils/cache.js +94 -0
  290. package/dist/utils/cache.js.map +1 -0
  291. package/dist/utils/config-parser.d.ts +16 -0
  292. package/dist/utils/config-parser.d.ts.map +1 -0
  293. package/dist/utils/config-parser.js +210 -0
  294. package/dist/utils/config-parser.js.map +1 -0
  295. package/dist/utils/editor.d.ts +21 -0
  296. package/dist/utils/editor.d.ts.map +1 -0
  297. package/dist/utils/editor.js +213 -0
  298. package/dist/utils/editor.js.map +1 -0
  299. package/dist/utils/git-utils.d.ts +5 -0
  300. package/dist/utils/git-utils.d.ts.map +1 -0
  301. package/dist/utils/git-utils.js +18 -0
  302. package/dist/utils/git-utils.js.map +1 -0
  303. package/dist/utils/github-cli.d.ts +62 -0
  304. package/dist/utils/github-cli.d.ts.map +1 -0
  305. package/dist/utils/github-cli.js +492 -0
  306. package/dist/utils/github-cli.js.map +1 -0
  307. package/dist/utils/logger.d.ts +45 -0
  308. package/dist/utils/logger.d.ts.map +1 -0
  309. package/dist/utils/logger.js +118 -0
  310. package/dist/utils/logger.js.map +1 -0
  311. package/dist/utils/open-url.d.ts +19 -0
  312. package/dist/utils/open-url.d.ts.map +1 -0
  313. package/dist/utils/open-url.js +37 -0
  314. package/dist/utils/open-url.js.map +1 -0
  315. package/dist/utils/project-resolver.d.ts +13 -0
  316. package/dist/utils/project-resolver.d.ts.map +1 -0
  317. package/dist/utils/project-resolver.js +35 -0
  318. package/dist/utils/project-resolver.js.map +1 -0
  319. package/dist/utils/prompts.d.ts +80 -0
  320. package/dist/utils/prompts.d.ts.map +1 -0
  321. package/dist/utils/prompts.js +326 -0
  322. package/dist/utils/prompts.js.map +1 -0
  323. package/dist/utils/shell.d.ts +54 -0
  324. package/dist/utils/shell.d.ts.map +1 -0
  325. package/dist/utils/shell.js +152 -0
  326. package/dist/utils/shell.js.map +1 -0
  327. package/dist/utils/validators.d.ts +32 -0
  328. package/dist/utils/validators.d.ts.map +1 -0
  329. package/dist/utils/validators.js +64 -0
  330. package/dist/utils/validators.js.map +1 -0
  331. package/package.json +73 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectService.js","sourceRoot":"","sources":["../../../src/services/github/ProjectService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Context passed to hook scripts
3
+ */
4
+ export interface HookContext {
5
+ issueNumber?: number;
6
+ prNumber?: number;
7
+ deploymentUrl?: string;
8
+ prTitle?: string;
9
+ prUrl?: string;
10
+ targetBranch?: string;
11
+ [key: string]: unknown;
12
+ }
13
+ /**
14
+ * Result from hook execution
15
+ */
16
+ export interface HookResult {
17
+ success: boolean;
18
+ hookPath: string;
19
+ error?: string;
20
+ }
21
+ /**
22
+ * Executes project-specific hooks with proper error handling
23
+ * Hooks are optional and failures don't block main operations
24
+ */
25
+ export declare class HookExecutor {
26
+ private projectRoot;
27
+ constructor(projectRoot?: string);
28
+ /**
29
+ * Check if a hook file uses Playwright and ensure it's available
30
+ * @param hookPath - Path to the hook script (relative to project root)
31
+ * @returns Promise<boolean> - true if Playwright is not needed or is available, false otherwise
32
+ */
33
+ private checkPlaywrightForHook;
34
+ /**
35
+ * Execute a hook script if it exists (synchronous/blocking)
36
+ * @param hookPath - Path to the hook script (relative to project root)
37
+ * @param context - Context object passed to the hook as JSON
38
+ * @returns Promise<boolean> - true if hook executed successfully, false otherwise
39
+ */
40
+ execute(hookPath: string, context?: HookContext): Promise<boolean>;
41
+ /**
42
+ * Execute hook in background (non-blocking)
43
+ * Used for long-running operations like browser automation
44
+ * @param hookPath - Path to the hook script (relative to project root)
45
+ * @param context - Context object passed to the hook as JSON
46
+ */
47
+ executeBackground(hookPath: string, context?: HookContext): Promise<void>;
48
+ /**
49
+ * Kill any running background hook processes
50
+ * Can be called manually to clean up orphaned processes
51
+ */
52
+ static cleanup(): void;
53
+ /**
54
+ * Check if a hook exists
55
+ * @param hookPath - Path to the hook script (relative to project root)
56
+ * @returns boolean - true if hook file exists
57
+ */
58
+ exists(hookPath: string): boolean;
59
+ /**
60
+ * Get the full path of a hook
61
+ * @param hookPath - Path to the hook script (relative to project root)
62
+ * @returns string - Full absolute path to the hook
63
+ */
64
+ getFullPath(hookPath: string): string;
65
+ }
66
+ //# sourceMappingURL=HookExecutor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HookExecutor.d.ts","sourceRoot":"","sources":["../../../src/services/hooks/HookExecutor.ts"],"names":[],"mappings":"AA6DA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA0BD;;;GAGG;AACH,qBAAa,YAAY;IACX,OAAO,CAAC,WAAW;gBAAX,WAAW,GAAE,MAAsB;IAEvD;;;;OAIG;YACW,sBAAsB;IAkBpC;;;;;OAKG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IA8C5E;;;;;OAKG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuDnF;;;OAGG;IACH,MAAM,CAAC,OAAO,IAAI,IAAI;IAItB;;;;OAIG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAQjC;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAGtC"}
@@ -0,0 +1,227 @@
1
+ import { existsSync, readFileSync, writeFileSync, unlinkSync } from 'fs';
2
+ import { resolve, normalize, isAbsolute, join } from 'path';
3
+ import { spawn, execFile } from 'child_process';
4
+ import { promisify } from 'util';
5
+ import { homedir } from 'os';
6
+ import { logger } from '../../utils/logger.js';
7
+ import { requirePlaywright } from '../../utils/browser-launcher.js';
8
+ const execFileAsync = promisify(execFile);
9
+ // PID file location for tracking background hook processes
10
+ const PID_FILE = join(homedir(), '.hublaunch', 'background-hook.pid');
11
+ /**
12
+ * Kill any previously running background hook process
13
+ */
14
+ function killPreviousBackgroundProcess() {
15
+ try {
16
+ if (existsSync(PID_FILE)) {
17
+ const pidData = readFileSync(PID_FILE, 'utf-8').trim();
18
+ const pids = pidData.split('\n').filter(Boolean).map(Number);
19
+ for (const pid of pids) {
20
+ if (pid && !isNaN(pid)) {
21
+ try {
22
+ // Check if process exists and kill it
23
+ process.kill(pid, 0); // Check if process exists
24
+ process.kill(pid, 'SIGTERM'); // Terminate it
25
+ logger.debug(`Killed previous background hook process (PID: ${pid})`);
26
+ }
27
+ catch {
28
+ // Process doesn't exist or we don't have permission - that's fine
29
+ }
30
+ }
31
+ }
32
+ // Remove the PID file
33
+ unlinkSync(PID_FILE);
34
+ }
35
+ }
36
+ catch (error) {
37
+ logger.debug(`Error cleaning up previous process: ${error}`);
38
+ }
39
+ }
40
+ /**
41
+ * Save the PID of a background hook process
42
+ */
43
+ function saveBackgroundPid(pid) {
44
+ try {
45
+ // Ensure .hublaunch directory exists
46
+ const hublaunchDir = join(homedir(), '.hublaunch');
47
+ if (!existsSync(hublaunchDir)) {
48
+ return; // Don't create directory just for PID file
49
+ }
50
+ writeFileSync(PID_FILE, pid.toString(), 'utf-8');
51
+ logger.debug(`Saved background hook PID: ${pid}`);
52
+ }
53
+ catch (error) {
54
+ logger.debug(`Error saving PID: ${error}`);
55
+ }
56
+ }
57
+ /**
58
+ * Validate that a path is safe (within project root, no traversal)
59
+ */
60
+ function isPathSafe(hookPath, projectRoot) {
61
+ // Reject absolute paths
62
+ if (isAbsolute(hookPath)) {
63
+ return false;
64
+ }
65
+ // Normalize and resolve the path
66
+ const normalizedPath = normalize(hookPath);
67
+ // Check for path traversal attempts
68
+ if (normalizedPath.includes('..')) {
69
+ return false;
70
+ }
71
+ // Verify the resolved path is within project root
72
+ const resolvedPath = resolve(projectRoot, normalizedPath);
73
+ const resolvedRoot = resolve(projectRoot);
74
+ return resolvedPath.startsWith(resolvedRoot);
75
+ }
76
+ /**
77
+ * Executes project-specific hooks with proper error handling
78
+ * Hooks are optional and failures don't block main operations
79
+ */
80
+ export class HookExecutor {
81
+ projectRoot;
82
+ constructor(projectRoot = process.cwd()) {
83
+ this.projectRoot = projectRoot;
84
+ }
85
+ /**
86
+ * Check if a hook file uses Playwright and ensure it's available
87
+ * @param hookPath - Path to the hook script (relative to project root)
88
+ * @returns Promise<boolean> - true if Playwright is not needed or is available, false otherwise
89
+ */
90
+ async checkPlaywrightForHook(hookPath) {
91
+ const fullPath = resolve(this.projectRoot, hookPath);
92
+ const hookContent = readFileSync(fullPath, 'utf-8');
93
+ // Check for Playwright imports using regex to match actual import statements
94
+ const playwrightImportPattern = /^.*import.*from\s+['"]playwright['"]/m;
95
+ const playwrightTestImportPattern = /^.*import.*from\s+['"]@playwright\/test['"]/m;
96
+ const usesPlaywright = playwrightImportPattern.test(hookContent) || playwrightTestImportPattern.test(hookContent);
97
+ if (!usesPlaywright) {
98
+ return true; // No Playwright needed, proceed
99
+ }
100
+ return await requirePlaywright({
101
+ featureDescription: `The hook "${hookPath}" requires Chromium for browser automation.`,
102
+ });
103
+ }
104
+ /**
105
+ * Execute a hook script if it exists (synchronous/blocking)
106
+ * @param hookPath - Path to the hook script (relative to project root)
107
+ * @param context - Context object passed to the hook as JSON
108
+ * @returns Promise<boolean> - true if hook executed successfully, false otherwise
109
+ */
110
+ async execute(hookPath, context = {}) {
111
+ // Validate path safety
112
+ if (!isPathSafe(hookPath, this.projectRoot)) {
113
+ logger.error(`Invalid hook path (path traversal detected): ${hookPath}`);
114
+ return false;
115
+ }
116
+ const fullPath = resolve(this.projectRoot, hookPath);
117
+ if (!existsSync(fullPath)) {
118
+ logger.debug(`Hook not found: ${hookPath}`);
119
+ return false;
120
+ }
121
+ // Check if hook uses Playwright and ensure it's available
122
+ const canProceed = await this.checkPlaywrightForHook(hookPath);
123
+ if (!canProceed) {
124
+ logger.warning(`Skipping hook "${hookPath}" - Playwright not available`);
125
+ return false;
126
+ }
127
+ logger.info(`Running hook: ${hookPath}`);
128
+ try {
129
+ // Serialize context as JSON string for passing to script
130
+ const contextJson = JSON.stringify(context);
131
+ // Execute with npx tsx using execFile
132
+ // shell: true is required for Windows to find npx.cmd
133
+ await execFileAsync('npx', ['tsx', fullPath, contextJson], {
134
+ cwd: this.projectRoot,
135
+ shell: true,
136
+ });
137
+ logger.success(`✓ Hook completed: ${hookPath}`);
138
+ return true;
139
+ }
140
+ catch (error) {
141
+ logger.error(`Hook failed: ${hookPath}`);
142
+ logger.error(error instanceof Error ? error.message : String(error));
143
+ // Hooks are optional - don't fail the main operation
144
+ logger.warning('Continuing despite hook failure...');
145
+ return false;
146
+ }
147
+ }
148
+ /**
149
+ * Execute hook in background (non-blocking)
150
+ * Used for long-running operations like browser automation
151
+ * @param hookPath - Path to the hook script (relative to project root)
152
+ * @param context - Context object passed to the hook as JSON
153
+ */
154
+ async executeBackground(hookPath, context = {}) {
155
+ // Validate path safety
156
+ if (!isPathSafe(hookPath, this.projectRoot)) {
157
+ logger.error(`Invalid hook path (path traversal detected): ${hookPath}`);
158
+ return;
159
+ }
160
+ const fullPath = resolve(this.projectRoot, hookPath);
161
+ if (!existsSync(fullPath)) {
162
+ logger.debug(`Hook not found: ${hookPath}`);
163
+ return;
164
+ }
165
+ // Check if hook uses Playwright and ensure it's available
166
+ const canProceed = await this.checkPlaywrightForHook(hookPath);
167
+ if (!canProceed) {
168
+ logger.warning(`Skipping background hook "${hookPath}" - Playwright not available`);
169
+ return;
170
+ }
171
+ // Kill any previously running background hook process to prevent
172
+ // multiple browser instances from accumulating
173
+ killPreviousBackgroundProcess();
174
+ logger.info(`Running hook in background: ${hookPath}`);
175
+ try {
176
+ const contextJson = JSON.stringify(context);
177
+ // Execute in background using spawn
178
+ // shell: true is required for Windows to find npx.cmd
179
+ // but on Unix it causes brace expansion of JSON arguments
180
+ const child = spawn('npx', ['tsx', fullPath, contextJson], {
181
+ detached: true,
182
+ stdio: 'inherit', // Changed from "ignore" to see output
183
+ cwd: this.projectRoot,
184
+ shell: process.platform === 'win32',
185
+ });
186
+ // Save the PID so we can kill it later if needed
187
+ if (child.pid) {
188
+ saveBackgroundPid(child.pid);
189
+ }
190
+ // Detach from parent process
191
+ child.unref();
192
+ logger.success(`✓ Hook started in background: ${hookPath}`);
193
+ }
194
+ catch (error) {
195
+ logger.error(`Failed to start hook: ${hookPath}`);
196
+ logger.debug(error instanceof Error ? error.message : String(error));
197
+ }
198
+ }
199
+ /**
200
+ * Kill any running background hook processes
201
+ * Can be called manually to clean up orphaned processes
202
+ */
203
+ static cleanup() {
204
+ killPreviousBackgroundProcess();
205
+ }
206
+ /**
207
+ * Check if a hook exists
208
+ * @param hookPath - Path to the hook script (relative to project root)
209
+ * @returns boolean - true if hook file exists
210
+ */
211
+ exists(hookPath) {
212
+ if (!isPathSafe(hookPath, this.projectRoot)) {
213
+ return false;
214
+ }
215
+ const fullPath = resolve(this.projectRoot, hookPath);
216
+ return existsSync(fullPath);
217
+ }
218
+ /**
219
+ * Get the full path of a hook
220
+ * @param hookPath - Path to the hook script (relative to project root)
221
+ * @returns string - Full absolute path to the hook
222
+ */
223
+ getFullPath(hookPath) {
224
+ return resolve(this.projectRoot, hookPath);
225
+ }
226
+ }
227
+ //# sourceMappingURL=HookExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HookExecutor.js","sourceRoot":"","sources":["../../../src/services/hooks/HookExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./HookExecutor.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./HookExecutor.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Service for formatting log data for display
3
+ */
4
+ export declare class LogFormatterService {
5
+ /**
6
+ * Format plain text log content with headers and metadata
7
+ *
8
+ * @param content - Raw log content from server
9
+ * @param metadata - Metadata to include in headers (trackingName, lines)
10
+ * @returns Formatted log content with headers and footers
11
+ */
12
+ formatPlainText(content: string, metadata: {
13
+ trackingName: string;
14
+ lines: number;
15
+ }): string;
16
+ }
17
+ //# sourceMappingURL=LogFormatterService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogFormatterService.d.ts","sourceRoot":"","sources":["../../../src/services/logs/LogFormatterService.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,mBAAmB;IAC9B;;;;;;OAMG;IACH,eAAe,CACb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAChD,MAAM;CA0BV"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Service for formatting log data for display
3
+ */
4
+ export class LogFormatterService {
5
+ /**
6
+ * Format plain text log content with headers and metadata
7
+ *
8
+ * @param content - Raw log content from server
9
+ * @param metadata - Metadata to include in headers (trackingName, lines)
10
+ * @returns Formatted log content with headers and footers
11
+ */
12
+ formatPlainText(content, metadata) {
13
+ const lines = [];
14
+ // Header section
15
+ lines.push("═".repeat(80));
16
+ lines.push(`Log Viewer - HULA SERVER`);
17
+ lines.push("═".repeat(80));
18
+ lines.push("");
19
+ lines.push(`Tracking Name: ${metadata.trackingName}`);
20
+ lines.push(`Retrieved: ${new Date().toISOString()}`);
21
+ lines.push(`Lines: last ${metadata.lines}`);
22
+ lines.push("");
23
+ lines.push("─".repeat(80));
24
+ lines.push("");
25
+ // Log content
26
+ lines.push(content);
27
+ // Footer
28
+ lines.push("");
29
+ lines.push("─".repeat(80));
30
+ lines.push("End of logs");
31
+ lines.push("═".repeat(80));
32
+ return lines.join("\n");
33
+ }
34
+ }
35
+ //# sourceMappingURL=LogFormatterService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogFormatterService.js","sourceRoot":"","sources":["../../../src/services/logs/LogFormatterService.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAC9B;;;;;;OAMG;IACH,eAAe,CACb,OAAe,EACf,QAAiD;QAEjD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,iBAAiB;QACjB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,kBAAkB,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,uBAAuB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,cAAc;QACd,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEpB,SAAS;QACT,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE3B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Service for managing temporary log files
3
+ */
4
+ export declare class TempFileService {
5
+ private readonly tempDir;
6
+ constructor(tempDir?: string);
7
+ /**
8
+ * Create a temporary file with the given content
9
+ * @param content - File content
10
+ * @param requestId - Request ID for the filename
11
+ * @returns Path to the created file
12
+ */
13
+ createTempFile(content: string, requestId: string): Promise<string>;
14
+ /**
15
+ * Sanitize a string for use in a filename
16
+ */
17
+ private sanitizeFilename;
18
+ /**
19
+ * Clean up a temporary file
20
+ */
21
+ cleanup(filePath: string): Promise<void>;
22
+ /**
23
+ * Clean up old log files (older than specified hours)
24
+ */
25
+ cleanupOldFiles(maxAgeHours?: number): Promise<number>;
26
+ }
27
+ //# sourceMappingURL=TempFileService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TempFileService.d.ts","sourceRoot":"","sources":["../../../src/services/logs/TempFileService.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,CAAC,EAAE,MAAM;IAI5B;;;;;OAKG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBzE;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9C;;OAEG;IACG,eAAe,CAAC,WAAW,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC;CAiCjE"}
@@ -0,0 +1,90 @@
1
+ import fs from "fs/promises";
2
+ import path from "path";
3
+ import os from "os";
4
+ /**
5
+ * Service for managing temporary log files
6
+ */
7
+ export class TempFileService {
8
+ tempDir;
9
+ constructor(tempDir) {
10
+ this.tempDir = tempDir ?? os.tmpdir();
11
+ }
12
+ /**
13
+ * Create a temporary file with the given content
14
+ * @param content - File content
15
+ * @param requestId - Request ID for the filename
16
+ * @returns Path to the created file
17
+ */
18
+ async createTempFile(content, requestId) {
19
+ const timestamp = Date.now();
20
+ const sanitizedId = this.sanitizeFilename(requestId);
21
+ const filename = `log-${sanitizedId}-${timestamp}.log`;
22
+ const filePath = path.join(this.tempDir, filename);
23
+ await fs.mkdir(this.tempDir, { recursive: true });
24
+ await fs.writeFile(filePath, content, "utf-8");
25
+ // Make file read-only (may not work on all platforms)
26
+ try {
27
+ await fs.chmod(filePath, 0o444);
28
+ }
29
+ catch {
30
+ // Ignore chmod errors on platforms that don't support it
31
+ }
32
+ return filePath;
33
+ }
34
+ /**
35
+ * Sanitize a string for use in a filename
36
+ */
37
+ sanitizeFilename(name) {
38
+ // Remove or replace unsafe characters
39
+ return name
40
+ .replace(/[^a-zA-Z0-9-_]/g, "-")
41
+ .replace(/-+/g, "-")
42
+ .substring(0, 50); // Limit length
43
+ }
44
+ /**
45
+ * Clean up a temporary file
46
+ */
47
+ async cleanup(filePath) {
48
+ try {
49
+ // Remove read-only flag before deleting
50
+ await fs.chmod(filePath, 0o644);
51
+ await fs.unlink(filePath);
52
+ }
53
+ catch {
54
+ // Ignore errors during cleanup
55
+ }
56
+ }
57
+ /**
58
+ * Clean up old log files (older than specified hours)
59
+ */
60
+ async cleanupOldFiles(maxAgeHours = 24) {
61
+ let cleaned = 0;
62
+ const maxAgeMs = maxAgeHours * 60 * 60 * 1000;
63
+ const now = Date.now();
64
+ try {
65
+ const files = await fs.readdir(this.tempDir);
66
+ for (const file of files) {
67
+ if (!file.startsWith("log-") || !file.endsWith(".log")) {
68
+ continue;
69
+ }
70
+ const filePath = path.join(this.tempDir, file);
71
+ try {
72
+ const stats = await fs.stat(filePath);
73
+ const age = now - stats.mtimeMs;
74
+ if (age > maxAgeMs) {
75
+ await this.cleanup(filePath);
76
+ cleaned++;
77
+ }
78
+ }
79
+ catch {
80
+ // Ignore errors for individual files
81
+ }
82
+ }
83
+ }
84
+ catch {
85
+ // Ignore errors during cleanup
86
+ }
87
+ return cleaned;
88
+ }
89
+ }
90
+ //# sourceMappingURL=TempFileService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TempFileService.js","sourceRoot":"","sources":["../../../src/services/logs/TempFileService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./LogFormatterService.js";
2
+ export * from "./TempFileService.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/logs/index.ts"],"names":[],"mappings":"AACA,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Log service exports
2
+ export * from "./LogFormatterService.js";
3
+ export * from "./TempFileService.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/logs/index.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Plan file information
3
+ */
4
+ export interface PlanFile {
5
+ path: string;
6
+ filename: string;
7
+ title: string;
8
+ content: string;
9
+ createdAt: Date;
10
+ size: number;
11
+ }
12
+ /**
13
+ * Parsed plan data
14
+ */
15
+ export interface ParsedPlan {
16
+ title: string;
17
+ body: string;
18
+ metadata: Record<string, string>;
19
+ }
20
+ /**
21
+ * Service for plan file operations
22
+ * Single Responsibility: Plan file management
23
+ */
24
+ export declare class PlanService {
25
+ private planPath;
26
+ constructor(planPath: string);
27
+ /**
28
+ * List all plan files
29
+ */
30
+ listPlans(): Promise<PlanFile[]>;
31
+ /**
32
+ * Select a plan file interactively
33
+ */
34
+ selectPlan(preference: 'alwaysLatest' | 'chooseRecentPlan', maxChoices?: number): Promise<PlanFile>;
35
+ /**
36
+ * Parse a plan file
37
+ */
38
+ parsePlan(filePath: string): Promise<ParsedPlan>;
39
+ /**
40
+ * Get the most recent plan file
41
+ */
42
+ getLatestPlan(): Promise<PlanFile | null>;
43
+ /**
44
+ * Search plans by title or content
45
+ */
46
+ searchPlans(query: string): Promise<PlanFile[]>;
47
+ /**
48
+ * Get plan by filename or path
49
+ * Searches config planPath, then direct path
50
+ */
51
+ getPlanByFilename(filenameOrPath: string): Promise<PlanFile | null>;
52
+ /**
53
+ * Resolve a plan by direct file path (absolute or relative)
54
+ */
55
+ getPlanByDirectPath(filePath: string): Promise<PlanFile | null>;
56
+ /**
57
+ * Get the relative path for a plan (relative to repo root)
58
+ */
59
+ getRelativePath(planPath: string): string;
60
+ /**
61
+ * Check if a plan file exists at the given path
62
+ */
63
+ exists(planPath: string): boolean;
64
+ /**
65
+ * Delete a local plan file (e.g. after it has been uploaded to origin/main)
66
+ * Non-throwing: logs warning on failure, returns success boolean.
67
+ */
68
+ deletePlan(planPath: string): boolean;
69
+ }
70
+ //# sourceMappingURL=PlanService.d.ts.map