brainfile 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/README.md +222 -0
  2. package/dist/__tests__/helpers/v2.d.ts +12 -0
  3. package/dist/__tests__/helpers/v2.d.ts.map +1 -0
  4. package/dist/__tests__/helpers/v2.js +73 -0
  5. package/dist/__tests__/helpers/v2.js.map +1 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +480 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/commands/add.d.ts +34 -0
  11. package/dist/commands/add.d.ts.map +1 -0
  12. package/dist/commands/add.js +255 -0
  13. package/dist/commands/add.js.map +1 -0
  14. package/dist/commands/adr.d.ts +22 -0
  15. package/dist/commands/adr.d.ts.map +1 -0
  16. package/dist/commands/adr.js +195 -0
  17. package/dist/commands/adr.js.map +1 -0
  18. package/dist/commands/archive.d.ts +20 -0
  19. package/dist/commands/archive.d.ts.map +1 -0
  20. package/dist/commands/archive.js +590 -0
  21. package/dist/commands/archive.js.map +1 -0
  22. package/dist/commands/auth.d.ts +26 -0
  23. package/dist/commands/auth.d.ts.map +1 -0
  24. package/dist/commands/auth.js +245 -0
  25. package/dist/commands/auth.js.map +1 -0
  26. package/dist/commands/complete.d.ts +30 -0
  27. package/dist/commands/complete.d.ts.map +1 -0
  28. package/dist/commands/complete.js +267 -0
  29. package/dist/commands/complete.js.map +1 -0
  30. package/dist/commands/config.d.ts +29 -0
  31. package/dist/commands/config.d.ts.map +1 -0
  32. package/dist/commands/config.js +210 -0
  33. package/dist/commands/config.js.map +1 -0
  34. package/dist/commands/contract.d.ts +84 -0
  35. package/dist/commands/contract.d.ts.map +1 -0
  36. package/dist/commands/contract.js +715 -0
  37. package/dist/commands/contract.js.map +1 -0
  38. package/dist/commands/delete.d.ts +8 -0
  39. package/dist/commands/delete.d.ts.map +1 -0
  40. package/dist/commands/delete.js +139 -0
  41. package/dist/commands/delete.js.map +1 -0
  42. package/dist/commands/hooks.d.ts +35 -0
  43. package/dist/commands/hooks.d.ts.map +1 -0
  44. package/dist/commands/hooks.js +324 -0
  45. package/dist/commands/hooks.js.map +1 -0
  46. package/dist/commands/init.d.ts +7 -0
  47. package/dist/commands/init.d.ts.map +1 -0
  48. package/dist/commands/init.js +118 -0
  49. package/dist/commands/init.js.map +1 -0
  50. package/dist/commands/lint.d.ts +16 -0
  51. package/dist/commands/lint.d.ts.map +1 -0
  52. package/dist/commands/lint.js +123 -0
  53. package/dist/commands/lint.js.map +1 -0
  54. package/dist/commands/list.d.ts +20 -0
  55. package/dist/commands/list.d.ts.map +1 -0
  56. package/dist/commands/list.js +175 -0
  57. package/dist/commands/list.js.map +1 -0
  58. package/dist/commands/log.d.ts +52 -0
  59. package/dist/commands/log.d.ts.map +1 -0
  60. package/dist/commands/log.js +246 -0
  61. package/dist/commands/log.js.map +1 -0
  62. package/dist/commands/mcp.d.ts +3 -0
  63. package/dist/commands/mcp.d.ts.map +1 -0
  64. package/dist/commands/mcp.js +96 -0
  65. package/dist/commands/mcp.js.map +1 -0
  66. package/dist/commands/migrate.d.ts +16 -0
  67. package/dist/commands/migrate.d.ts.map +1 -0
  68. package/dist/commands/migrate.js +388 -0
  69. package/dist/commands/migrate.js.map +1 -0
  70. package/dist/commands/move.d.ts +16 -0
  71. package/dist/commands/move.d.ts.map +1 -0
  72. package/dist/commands/move.js +225 -0
  73. package/dist/commands/move.js.map +1 -0
  74. package/dist/commands/patch.d.ts +17 -0
  75. package/dist/commands/patch.d.ts.map +1 -0
  76. package/dist/commands/patch.js +226 -0
  77. package/dist/commands/patch.js.map +1 -0
  78. package/dist/commands/restore.d.ts +8 -0
  79. package/dist/commands/restore.d.ts.map +1 -0
  80. package/dist/commands/restore.js +111 -0
  81. package/dist/commands/restore.js.map +1 -0
  82. package/dist/commands/rules.d.ts +68 -0
  83. package/dist/commands/rules.d.ts.map +1 -0
  84. package/dist/commands/rules.js +322 -0
  85. package/dist/commands/rules.js.map +1 -0
  86. package/dist/commands/schema.d.ts +31 -0
  87. package/dist/commands/schema.d.ts.map +1 -0
  88. package/dist/commands/schema.js +374 -0
  89. package/dist/commands/schema.js.map +1 -0
  90. package/dist/commands/search.d.ts +33 -0
  91. package/dist/commands/search.d.ts.map +1 -0
  92. package/dist/commands/search.js +209 -0
  93. package/dist/commands/search.js.map +1 -0
  94. package/dist/commands/show.d.ts +20 -0
  95. package/dist/commands/show.d.ts.map +1 -0
  96. package/dist/commands/show.js +272 -0
  97. package/dist/commands/show.js.map +1 -0
  98. package/dist/commands/subtask.d.ts +12 -0
  99. package/dist/commands/subtask.d.ts.map +1 -0
  100. package/dist/commands/subtask.js +212 -0
  101. package/dist/commands/subtask.js.map +1 -0
  102. package/dist/commands/template.d.ts +17 -0
  103. package/dist/commands/template.d.ts.map +1 -0
  104. package/dist/commands/template.js +149 -0
  105. package/dist/commands/template.js.map +1 -0
  106. package/dist/commands/tui.d.ts +6 -0
  107. package/dist/commands/tui.d.ts.map +1 -0
  108. package/dist/commands/tui.js +79 -0
  109. package/dist/commands/tui.js.map +1 -0
  110. package/dist/commands/types.d.ts +40 -0
  111. package/dist/commands/types.d.ts.map +1 -0
  112. package/dist/commands/types.js +242 -0
  113. package/dist/commands/types.js.map +1 -0
  114. package/dist/index.d.ts +10 -0
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +29 -0
  117. package/dist/index.js.map +1 -0
  118. package/dist/lib/contractRunner.d.ts +59 -0
  119. package/dist/lib/contractRunner.d.ts.map +1 -0
  120. package/dist/lib/contractRunner.js +511 -0
  121. package/dist/lib/contractRunner.js.map +1 -0
  122. package/dist/mcp/helpers.d.ts +32 -0
  123. package/dist/mcp/helpers.d.ts.map +1 -0
  124. package/dist/mcp/helpers.js +125 -0
  125. package/dist/mcp/helpers.js.map +1 -0
  126. package/dist/mcp/tools/contract.d.ts +25 -0
  127. package/dist/mcp/tools/contract.d.ts.map +1 -0
  128. package/dist/mcp/tools/contract.js +33 -0
  129. package/dist/mcp/tools/contract.js.map +1 -0
  130. package/dist/mcp/tools/contract_tool.d.ts +3 -0
  131. package/dist/mcp/tools/contract_tool.d.ts.map +1 -0
  132. package/dist/mcp/tools/contract_tool.js +328 -0
  133. package/dist/mcp/tools/contract_tool.js.map +1 -0
  134. package/dist/mcp/tools/get_task_tool.d.ts +3 -0
  135. package/dist/mcp/tools/get_task_tool.d.ts.map +1 -0
  136. package/dist/mcp/tools/get_task_tool.js +55 -0
  137. package/dist/mcp/tools/get_task_tool.js.map +1 -0
  138. package/dist/mcp/tools/list_tasks_tool.d.ts +3 -0
  139. package/dist/mcp/tools/list_tasks_tool.d.ts.map +1 -0
  140. package/dist/mcp/tools/list_tasks_tool.js +82 -0
  141. package/dist/mcp/tools/list_tasks_tool.js.map +1 -0
  142. package/dist/mcp/tools/search_tool.d.ts +3 -0
  143. package/dist/mcp/tools/search_tool.d.ts.map +1 -0
  144. package/dist/mcp/tools/search_tool.js +155 -0
  145. package/dist/mcp/tools/search_tool.js.map +1 -0
  146. package/dist/mcp/tools/subtask_tool.d.ts +3 -0
  147. package/dist/mcp/tools/subtask_tool.d.ts.map +1 -0
  148. package/dist/mcp/tools/subtask_tool.js +321 -0
  149. package/dist/mcp/tools/subtask_tool.js.map +1 -0
  150. package/dist/mcp/tools/task_add_tool.d.ts +3 -0
  151. package/dist/mcp/tools/task_add_tool.d.ts.map +1 -0
  152. package/dist/mcp/tools/task_add_tool.js +196 -0
  153. package/dist/mcp/tools/task_add_tool.js.map +1 -0
  154. package/dist/mcp/tools/task_complete_tool.d.ts +3 -0
  155. package/dist/mcp/tools/task_complete_tool.d.ts.map +1 -0
  156. package/dist/mcp/tools/task_complete_tool.js +265 -0
  157. package/dist/mcp/tools/task_complete_tool.js.map +1 -0
  158. package/dist/mcp/tools/task_delete_tool.d.ts +3 -0
  159. package/dist/mcp/tools/task_delete_tool.d.ts.map +1 -0
  160. package/dist/mcp/tools/task_delete_tool.js +87 -0
  161. package/dist/mcp/tools/task_delete_tool.js.map +1 -0
  162. package/dist/mcp/tools/task_move_tool.d.ts +3 -0
  163. package/dist/mcp/tools/task_move_tool.d.ts.map +1 -0
  164. package/dist/mcp/tools/task_move_tool.js +187 -0
  165. package/dist/mcp/tools/task_move_tool.js.map +1 -0
  166. package/dist/mcp/tools/task_patch_tool.d.ts +3 -0
  167. package/dist/mcp/tools/task_patch_tool.d.ts.map +1 -0
  168. package/dist/mcp/tools/task_patch_tool.js +189 -0
  169. package/dist/mcp/tools/task_patch_tool.js.map +1 -0
  170. package/dist/schemas/base.json +159 -0
  171. package/dist/schemas/board.json +290 -0
  172. package/dist/tui/BrainfileTUI.d.ts +4 -0
  173. package/dist/tui/BrainfileTUI.d.ts.map +1 -0
  174. package/dist/tui/BrainfileTUI.js +272 -0
  175. package/dist/tui/BrainfileTUI.js.map +1 -0
  176. package/dist/tui/actions.d.ts +84 -0
  177. package/dist/tui/actions.d.ts.map +1 -0
  178. package/dist/tui/actions.js +1251 -0
  179. package/dist/tui/actions.js.map +1 -0
  180. package/dist/tui/components/ColumnTabs.d.ts +9 -0
  181. package/dist/tui/components/ColumnTabs.d.ts.map +1 -0
  182. package/dist/tui/components/ColumnTabs.js +34 -0
  183. package/dist/tui/components/ColumnTabs.js.map +1 -0
  184. package/dist/tui/components/Header.d.ts +15 -0
  185. package/dist/tui/components/Header.d.ts.map +1 -0
  186. package/dist/tui/components/Header.js +48 -0
  187. package/dist/tui/components/Header.js.map +1 -0
  188. package/dist/tui/components/HelpOverlay.d.ts +9 -0
  189. package/dist/tui/components/HelpOverlay.d.ts.map +1 -0
  190. package/dist/tui/components/HelpOverlay.js +116 -0
  191. package/dist/tui/components/HelpOverlay.js.map +1 -0
  192. package/dist/tui/components/LogsPanel.d.ts +16 -0
  193. package/dist/tui/components/LogsPanel.d.ts.map +1 -0
  194. package/dist/tui/components/LogsPanel.js +115 -0
  195. package/dist/tui/components/LogsPanel.js.map +1 -0
  196. package/dist/tui/components/MainPanelTabs.d.ts +10 -0
  197. package/dist/tui/components/MainPanelTabs.d.ts.map +1 -0
  198. package/dist/tui/components/MainPanelTabs.js +56 -0
  199. package/dist/tui/components/MainPanelTabs.js.map +1 -0
  200. package/dist/tui/components/ManualBorder.d.ts +42 -0
  201. package/dist/tui/components/ManualBorder.d.ts.map +1 -0
  202. package/dist/tui/components/ManualBorder.js +56 -0
  203. package/dist/tui/components/ManualBorder.js.map +1 -0
  204. package/dist/tui/components/Overlays.d.ts +41 -0
  205. package/dist/tui/components/Overlays.d.ts.map +1 -0
  206. package/dist/tui/components/Overlays.js +127 -0
  207. package/dist/tui/components/Overlays.js.map +1 -0
  208. package/dist/tui/components/ProgressBar.d.ts +8 -0
  209. package/dist/tui/components/ProgressBar.d.ts.map +1 -0
  210. package/dist/tui/components/ProgressBar.js +35 -0
  211. package/dist/tui/components/ProgressBar.js.map +1 -0
  212. package/dist/tui/components/RulesPanel.d.ts +25 -0
  213. package/dist/tui/components/RulesPanel.d.ts.map +1 -0
  214. package/dist/tui/components/RulesPanel.js +139 -0
  215. package/dist/tui/components/RulesPanel.js.map +1 -0
  216. package/dist/tui/components/SearchBar.d.ts +8 -0
  217. package/dist/tui/components/SearchBar.d.ts.map +1 -0
  218. package/dist/tui/components/SearchBar.js +38 -0
  219. package/dist/tui/components/SearchBar.js.map +1 -0
  220. package/dist/tui/components/StackedTaskList.d.ts +27 -0
  221. package/dist/tui/components/StackedTaskList.d.ts.map +1 -0
  222. package/dist/tui/components/StackedTaskList.js +120 -0
  223. package/dist/tui/components/StackedTaskList.js.map +1 -0
  224. package/dist/tui/components/StatusBar.d.ts +14 -0
  225. package/dist/tui/components/StatusBar.d.ts.map +1 -0
  226. package/dist/tui/components/StatusBar.js +42 -0
  227. package/dist/tui/components/StatusBar.js.map +1 -0
  228. package/dist/tui/components/TaskCard.d.ts +25 -0
  229. package/dist/tui/components/TaskCard.d.ts.map +1 -0
  230. package/dist/tui/components/TaskCard.js +221 -0
  231. package/dist/tui/components/TaskCard.js.map +1 -0
  232. package/dist/tui/components/TaskCardMeasure.d.ts +31 -0
  233. package/dist/tui/components/TaskCardMeasure.d.ts.map +1 -0
  234. package/dist/tui/components/TaskCardMeasure.js +133 -0
  235. package/dist/tui/components/TaskCardMeasure.js.map +1 -0
  236. package/dist/tui/components/TaskDetail.d.ts +13 -0
  237. package/dist/tui/components/TaskDetail.d.ts.map +1 -0
  238. package/dist/tui/components/TaskDetail.js +64 -0
  239. package/dist/tui/components/TaskDetail.js.map +1 -0
  240. package/dist/tui/components/TaskList.d.ts +12 -0
  241. package/dist/tui/components/TaskList.d.ts.map +1 -0
  242. package/dist/tui/components/TaskList.js +75 -0
  243. package/dist/tui/components/TaskList.js.map +1 -0
  244. package/dist/tui/components/index.d.ts +31 -0
  245. package/dist/tui/components/index.d.ts.map +1 -0
  246. package/dist/tui/components/index.js +43 -0
  247. package/dist/tui/components/index.js.map +1 -0
  248. package/dist/tui/hooks/index.d.ts +3 -0
  249. package/dist/tui/hooks/index.d.ts.map +1 -0
  250. package/dist/tui/hooks/index.js +8 -0
  251. package/dist/tui/hooks/index.js.map +1 -0
  252. package/dist/tui/hooks/useBrainfileLoader.d.ts +5 -0
  253. package/dist/tui/hooks/useBrainfileLoader.d.ts.map +1 -0
  254. package/dist/tui/hooks/useBrainfileLoader.js +237 -0
  255. package/dist/tui/hooks/useBrainfileLoader.js.map +1 -0
  256. package/dist/tui/hooks/useKeyboardNavigation.d.ts +20 -0
  257. package/dist/tui/hooks/useKeyboardNavigation.d.ts.map +1 -0
  258. package/dist/tui/hooks/useKeyboardNavigation.js +806 -0
  259. package/dist/tui/hooks/useKeyboardNavigation.js.map +1 -0
  260. package/dist/tui/index.d.ts +10 -0
  261. package/dist/tui/index.d.ts.map +1 -0
  262. package/dist/tui/index.js +38 -0
  263. package/dist/tui/index.js.map +1 -0
  264. package/dist/tui/theme.d.ts +119 -0
  265. package/dist/tui/theme.d.ts.map +1 -0
  266. package/dist/tui/theme.js +138 -0
  267. package/dist/tui/theme.js.map +1 -0
  268. package/dist/tui/types.d.ts +53 -0
  269. package/dist/tui/types.d.ts.map +1 -0
  270. package/dist/tui/types.js +12 -0
  271. package/dist/tui/types.js.map +1 -0
  272. package/dist/tui/utils.d.ts +24 -0
  273. package/dist/tui/utils.d.ts.map +1 -0
  274. package/dist/tui/utils.js +161 -0
  275. package/dist/tui/utils.js.map +1 -0
  276. package/dist/utils/archive.d.ts +57 -0
  277. package/dist/utils/archive.d.ts.map +1 -0
  278. package/dist/utils/archive.js +304 -0
  279. package/dist/utils/archive.js.map +1 -0
  280. package/dist/utils/auth-store.d.ts +69 -0
  281. package/dist/utils/auth-store.d.ts.map +1 -0
  282. package/dist/utils/auth-store.js +308 -0
  283. package/dist/utils/auth-store.js.map +1 -0
  284. package/dist/utils/board-types.d.ts +13 -0
  285. package/dist/utils/board-types.d.ts.map +1 -0
  286. package/dist/utils/board-types.js +7 -0
  287. package/dist/utils/board-types.js.map +1 -0
  288. package/dist/utils/brainfile-finder.d.ts +12 -0
  289. package/dist/utils/brainfile-finder.d.ts.map +1 -0
  290. package/dist/utils/brainfile-finder.js +69 -0
  291. package/dist/utils/brainfile-finder.js.map +1 -0
  292. package/dist/utils/brainfile-path.d.ts +10 -0
  293. package/dist/utils/brainfile-path.d.ts.map +1 -0
  294. package/dist/utils/brainfile-path.js +88 -0
  295. package/dist/utils/brainfile-path.js.map +1 -0
  296. package/dist/utils/cli-error.d.ts +44 -0
  297. package/dist/utils/cli-error.d.ts.map +1 -0
  298. package/dist/utils/cli-error.js +85 -0
  299. package/dist/utils/cli-error.js.map +1 -0
  300. package/dist/utils/config.d.ts +119 -0
  301. package/dist/utils/config.d.ts.map +1 -0
  302. package/dist/utils/config.js +304 -0
  303. package/dist/utils/config.js.map +1 -0
  304. package/dist/utils/contractSpec.d.ts +13 -0
  305. package/dist/utils/contractSpec.d.ts.map +1 -0
  306. package/dist/utils/contractSpec.js +61 -0
  307. package/dist/utils/contractSpec.js.map +1 -0
  308. package/dist/utils/dot-brainfile.d.ts +9 -0
  309. package/dist/utils/dot-brainfile.d.ts.map +1 -0
  310. package/dist/utils/dot-brainfile.js +74 -0
  311. package/dist/utils/dot-brainfile.js.map +1 -0
  312. package/dist/utils/errorHandler.d.ts +106 -0
  313. package/dist/utils/errorHandler.d.ts.map +1 -0
  314. package/dist/utils/errorHandler.js +223 -0
  315. package/dist/utils/errorHandler.js.map +1 -0
  316. package/dist/utils/git-helper.d.ts +17 -0
  317. package/dist/utils/git-helper.d.ts.map +1 -0
  318. package/dist/utils/git-helper.js +62 -0
  319. package/dist/utils/git-helper.js.map +1 -0
  320. package/dist/utils/github-auth.d.ts +56 -0
  321. package/dist/utils/github-auth.d.ts.map +1 -0
  322. package/dist/utils/github-auth.js +341 -0
  323. package/dist/utils/github-auth.js.map +1 -0
  324. package/dist/utils/hook-parser.d.ts +15 -0
  325. package/dist/utils/hook-parser.d.ts.map +1 -0
  326. package/dist/utils/hook-parser.js +69 -0
  327. package/dist/utils/hook-parser.js.map +1 -0
  328. package/dist/utils/hook-settings.d.ts +27 -0
  329. package/dist/utils/hook-settings.d.ts.map +1 -0
  330. package/dist/utils/hook-settings.js +364 -0
  331. package/dist/utils/hook-settings.js.map +1 -0
  332. package/dist/utils/linear-auth.d.ts +59 -0
  333. package/dist/utils/linear-auth.d.ts.map +1 -0
  334. package/dist/utils/linear-auth.js +295 -0
  335. package/dist/utils/linear-auth.js.map +1 -0
  336. package/dist/utils/logger.d.ts +34 -0
  337. package/dist/utils/logger.d.ts.map +1 -0
  338. package/dist/utils/logger.js +56 -0
  339. package/dist/utils/logger.js.map +1 -0
  340. package/dist/utils/strict-validation.d.ts +8 -0
  341. package/dist/utils/strict-validation.d.ts.map +1 -0
  342. package/dist/utils/strict-validation.js +41 -0
  343. package/dist/utils/strict-validation.js.map +1 -0
  344. package/dist/utils/v2-detect.d.ts +28 -0
  345. package/dist/utils/v2-detect.d.ts.map +1 -0
  346. package/dist/utils/v2-detect.js +112 -0
  347. package/dist/utils/v2-detect.js.map +1 -0
  348. package/dist/utils/v2-only.d.ts +9 -0
  349. package/dist/utils/v2-only.d.ts.map +1 -0
  350. package/dist/utils/v2-only.js +64 -0
  351. package/dist/utils/v2-only.js.map +1 -0
  352. package/dist/utils/workspace-format.d.ts +25 -0
  353. package/dist/utils/workspace-format.d.ts.map +1 -0
  354. package/dist/utils/workspace-format.js +106 -0
  355. package/dist/utils/workspace-format.js.map +1 -0
  356. package/dist/validation/command-lint.d.ts +11 -0
  357. package/dist/validation/command-lint.d.ts.map +1 -0
  358. package/dist/validation/command-lint.js +88 -0
  359. package/dist/validation/command-lint.js.map +1 -0
  360. package/package.json +69 -0
@@ -0,0 +1,341 @@
1
+ "use strict";
2
+ /**
3
+ * GitHub Authentication for Brainfile CLI
4
+ *
5
+ * Supports:
6
+ * 1. Piggyback on gh CLI auth (if available)
7
+ * 2. OAuth Device Flow (browser-based, no server needed)
8
+ * 3. Personal Access Token (manual entry)
9
+ *
10
+ * @packageDocumentation
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ var __importDefault = (this && this.__importDefault) || function (mod) {
46
+ return (mod && mod.__esModule) ? mod : { "default": mod };
47
+ };
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.isGitHubAuthenticated = isGitHubAuthenticated;
50
+ exports.getGitHubToken = getGitHubToken;
51
+ exports.authenticateGitHub = authenticateGitHub;
52
+ exports.createGitHubIssue = createGitHubIssue;
53
+ exports.logoutGitHub = logoutGitHub;
54
+ const chalk_1 = __importDefault(require("chalk"));
55
+ const auth_store_1 = require("./auth-store");
56
+ // ============================================================================
57
+ // Constants
58
+ // ============================================================================
59
+ // GitHub OAuth App Client ID for Brainfile
60
+ // This is a public client ID for the device flow - safe to commit
61
+ // TODO: Register a Brainfile OAuth App and replace this
62
+ const GITHUB_CLIENT_ID = process.env.BRAINFILE_GITHUB_CLIENT_ID || 'Ov23liYourClientId';
63
+ const GITHUB_DEVICE_CODE_URL = 'https://github.com/login/device/code';
64
+ const GITHUB_TOKEN_URL = 'https://github.com/login/oauth/access_token';
65
+ const GITHUB_API_URL = 'https://api.github.com';
66
+ // ============================================================================
67
+ // GitHub Auth Functions
68
+ // ============================================================================
69
+ /**
70
+ * Check if GitHub is already authenticated
71
+ */
72
+ async function isGitHubAuthenticated() {
73
+ return await auth_store_1.authStore.isAuthenticated('github');
74
+ }
75
+ /**
76
+ * Get the current GitHub token (from any source)
77
+ */
78
+ async function getGitHubToken() {
79
+ return await auth_store_1.authStore.get('github');
80
+ }
81
+ /**
82
+ * Authenticate with GitHub using the best available method
83
+ *
84
+ * Priority:
85
+ * 1. Use existing gh CLI auth
86
+ * 2. OAuth Device Flow
87
+ * 3. Manual PAT entry
88
+ */
89
+ async function authenticateGitHub(options) {
90
+ const { usePAT, token, silent } = options;
91
+ // If token provided directly, verify and store it
92
+ if (token) {
93
+ return await verifyAndStoreToken(token, silent);
94
+ }
95
+ // If PAT mode requested, prompt for token
96
+ if (usePAT) {
97
+ return { success: false, error: 'PAT mode requires --token flag with token value' };
98
+ }
99
+ // Check if gh CLI is available
100
+ if ((0, auth_store_1.isGitHubCLIAvailable)()) {
101
+ const ghToken = (0, auth_store_1.getGitHubCLIToken)();
102
+ if (ghToken) {
103
+ if (!silent) {
104
+ console.log(chalk_1.default.green('✓') + ' Found existing GitHub CLI authentication');
105
+ }
106
+ // Verify the token and get username
107
+ const user = await getGitHubUser(ghToken);
108
+ if (user) {
109
+ // Store it in our auth store too for consistency
110
+ await auth_store_1.authStore.set('github', ghToken, { username: user.login });
111
+ if (!silent) {
112
+ console.log(chalk_1.default.green('✓') + ` Authenticated as ${chalk_1.default.cyan('@' + user.login)}`);
113
+ }
114
+ return { success: true, username: user.login };
115
+ }
116
+ }
117
+ }
118
+ // Fall back to OAuth Device Flow
119
+ return await deviceFlowAuth(silent);
120
+ }
121
+ /**
122
+ * Verify a token and store it
123
+ */
124
+ async function verifyAndStoreToken(token, silent) {
125
+ const user = await getGitHubUser(token);
126
+ if (!user) {
127
+ return { success: false, error: 'Invalid token or token lacks required permissions' };
128
+ }
129
+ await auth_store_1.authStore.set('github', token, { username: user.login });
130
+ if (!silent) {
131
+ console.log(chalk_1.default.green('✓') + ' Token verified');
132
+ console.log(chalk_1.default.green('✓') + ` Authenticated as ${chalk_1.default.cyan('@' + user.login)}`);
133
+ }
134
+ return { success: true, username: user.login };
135
+ }
136
+ /**
137
+ * OAuth Device Flow authentication
138
+ */
139
+ async function deviceFlowAuth(silent) {
140
+ if (!silent) {
141
+ console.log('');
142
+ console.log('Starting GitHub OAuth authentication...');
143
+ console.log('');
144
+ }
145
+ try {
146
+ // Step 1: Request device code
147
+ const deviceCode = await requestDeviceCode();
148
+ if (!silent) {
149
+ console.log(chalk_1.default.yellow('!') + ` First, copy your one-time code: ${chalk_1.default.bold.cyan(deviceCode.user_code)}`);
150
+ console.log('');
151
+ console.log(`Then visit: ${chalk_1.default.underline(deviceCode.verification_uri)}`);
152
+ console.log('');
153
+ }
154
+ // Try to open browser
155
+ try {
156
+ const open = await Promise.resolve().then(() => __importStar(require('open')));
157
+ await open.default(deviceCode.verification_uri);
158
+ if (!silent) {
159
+ console.log(chalk_1.default.gray('(Opening browser...)'));
160
+ }
161
+ }
162
+ catch {
163
+ // Browser open failed, user will need to manually navigate
164
+ }
165
+ if (!silent) {
166
+ console.log('');
167
+ console.log('Waiting for authentication...');
168
+ }
169
+ // Step 2: Poll for token
170
+ const token = await pollForToken(deviceCode);
171
+ if (!token) {
172
+ return { success: false, error: 'Authentication timed out or was denied' };
173
+ }
174
+ // Step 3: Verify and store
175
+ return await verifyAndStoreToken(token, silent);
176
+ }
177
+ catch (error) {
178
+ return {
179
+ success: false,
180
+ error: error instanceof Error ? error.message : 'Unknown error during authentication',
181
+ };
182
+ }
183
+ }
184
+ /**
185
+ * Request a device code from GitHub
186
+ */
187
+ async function requestDeviceCode() {
188
+ const response = await fetch(GITHUB_DEVICE_CODE_URL, {
189
+ method: 'POST',
190
+ headers: {
191
+ Accept: 'application/json',
192
+ 'Content-Type': 'application/x-www-form-urlencoded',
193
+ },
194
+ body: new URLSearchParams({
195
+ client_id: GITHUB_CLIENT_ID,
196
+ scope: 'repo',
197
+ }),
198
+ });
199
+ if (!response.ok) {
200
+ throw new Error(`Failed to request device code: ${response.status}`);
201
+ }
202
+ return (await response.json());
203
+ }
204
+ /**
205
+ * Poll for the access token after user authorizes
206
+ */
207
+ async function pollForToken(deviceCode) {
208
+ const startTime = Date.now();
209
+ const expiresAt = startTime + deviceCode.expires_in * 1000;
210
+ const interval = Math.max(deviceCode.interval, 5) * 1000; // At least 5 seconds
211
+ while (Date.now() < expiresAt) {
212
+ await sleep(interval);
213
+ const response = await fetch(GITHUB_TOKEN_URL, {
214
+ method: 'POST',
215
+ headers: {
216
+ Accept: 'application/json',
217
+ 'Content-Type': 'application/x-www-form-urlencoded',
218
+ },
219
+ body: new URLSearchParams({
220
+ client_id: GITHUB_CLIENT_ID,
221
+ device_code: deviceCode.device_code,
222
+ grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
223
+ }),
224
+ });
225
+ const data = (await response.json());
226
+ if (data.access_token) {
227
+ return data.access_token;
228
+ }
229
+ if (data.error === 'authorization_pending') {
230
+ // User hasn't authorized yet, keep polling
231
+ continue;
232
+ }
233
+ if (data.error === 'slow_down') {
234
+ // Back off
235
+ await sleep(5000);
236
+ continue;
237
+ }
238
+ if (data.error === 'expired_token') {
239
+ throw new Error('Device code expired. Please try again.');
240
+ }
241
+ if (data.error === 'access_denied') {
242
+ throw new Error('Authorization was denied.');
243
+ }
244
+ if (data.error) {
245
+ throw new Error(data.error_description || data.error);
246
+ }
247
+ }
248
+ return null;
249
+ }
250
+ /**
251
+ * Get the authenticated GitHub user
252
+ */
253
+ async function getGitHubUser(token) {
254
+ try {
255
+ const response = await fetch(`${GITHUB_API_URL}/user`, {
256
+ headers: {
257
+ Authorization: `Bearer ${token}`,
258
+ Accept: 'application/vnd.github.v3+json',
259
+ 'User-Agent': 'brainfile-cli',
260
+ },
261
+ });
262
+ if (!response.ok) {
263
+ return null;
264
+ }
265
+ return (await response.json());
266
+ }
267
+ catch {
268
+ return null;
269
+ }
270
+ }
271
+ /**
272
+ * Create a GitHub Issue
273
+ */
274
+ async function createGitHubIssue(options) {
275
+ const token = await getGitHubToken();
276
+ if (!token) {
277
+ return { success: false, error: 'Not authenticated with GitHub. Run: brainfile auth github' };
278
+ }
279
+ try {
280
+ // Create the issue
281
+ const createResponse = await fetch(`${GITHUB_API_URL}/repos/${options.owner}/${options.repo}/issues`, {
282
+ method: 'POST',
283
+ headers: {
284
+ Authorization: `Bearer ${token}`,
285
+ Accept: 'application/vnd.github.v3+json',
286
+ 'User-Agent': 'brainfile-cli',
287
+ 'Content-Type': 'application/json',
288
+ },
289
+ body: JSON.stringify({
290
+ title: options.title,
291
+ body: options.body,
292
+ labels: options.labels,
293
+ }),
294
+ });
295
+ if (!createResponse.ok) {
296
+ const errorData = await createResponse.json();
297
+ return {
298
+ success: false,
299
+ error: `Failed to create issue: ${errorData.message || createResponse.status}`,
300
+ };
301
+ }
302
+ const issue = (await createResponse.json());
303
+ // Close the issue if requested
304
+ if (options.state === 'closed') {
305
+ await fetch(`${GITHUB_API_URL}/repos/${options.owner}/${options.repo}/issues/${issue.number}`, {
306
+ method: 'PATCH',
307
+ headers: {
308
+ Authorization: `Bearer ${token}`,
309
+ Accept: 'application/vnd.github.v3+json',
310
+ 'User-Agent': 'brainfile-cli',
311
+ 'Content-Type': 'application/json',
312
+ },
313
+ body: JSON.stringify({ state: 'closed' }),
314
+ });
315
+ }
316
+ return {
317
+ success: true,
318
+ issueNumber: issue.number,
319
+ issueUrl: issue.html_url,
320
+ };
321
+ }
322
+ catch (err) {
323
+ return {
324
+ success: false,
325
+ error: err instanceof Error ? err.message : 'Unknown error creating issue',
326
+ };
327
+ }
328
+ }
329
+ /**
330
+ * Logout from GitHub
331
+ */
332
+ async function logoutGitHub() {
333
+ await auth_store_1.authStore.clear('github');
334
+ }
335
+ // ============================================================================
336
+ // Helpers
337
+ // ============================================================================
338
+ function sleep(ms) {
339
+ return new Promise((resolve) => setTimeout(resolve, ms));
340
+ }
341
+ //# sourceMappingURL=github-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-auth.js","sourceRoot":"","sources":["../../src/utils/github-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Parse hook input JSON and extract relevant information
3
+ * Handles different input formats from different tools
4
+ */
5
+ export declare function parseHookInput(input: any): {
6
+ filePath?: string;
7
+ command?: string;
8
+ prompt?: string;
9
+ tool?: 'claude-code' | 'cursor' | 'cline' | 'unknown';
10
+ };
11
+ /**
12
+ * Determine if we should output JSON for Cursor's beforeSubmitPrompt or Cline hooks
13
+ */
14
+ export declare function shouldOutputJSON(input: any): boolean;
15
+ //# sourceMappingURL=hook-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-parser.d.ts","sourceRoot":"","sources":["../../src/utils/hook-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;CACvD,CAsDA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAQpD"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseHookInput = parseHookInput;
4
+ exports.shouldOutputJSON = shouldOutputJSON;
5
+ /**
6
+ * Parse hook input JSON and extract relevant information
7
+ * Handles different input formats from different tools
8
+ */
9
+ function parseHookInput(input) {
10
+ // Handle null or undefined input
11
+ if (!input) {
12
+ return {
13
+ tool: 'unknown'
14
+ };
15
+ }
16
+ // Cline format - check for clineVersion and hookName
17
+ if (input.clineVersion && input.hookName) {
18
+ // Extract file path from postToolUse parameters if available
19
+ let filePath;
20
+ if (input.postToolUse?.parameters?.target_file) {
21
+ filePath = input.postToolUse.parameters.target_file;
22
+ }
23
+ else if (input.postToolUse?.parameters?.file_path) {
24
+ filePath = input.postToolUse.parameters.file_path;
25
+ }
26
+ return {
27
+ filePath,
28
+ prompt: input.userPromptSubmit?.prompt,
29
+ tool: 'cline'
30
+ };
31
+ }
32
+ // Claude Code format
33
+ if (input.tool_input) {
34
+ return {
35
+ filePath: input.tool_input.file_path,
36
+ command: input.tool_input.command,
37
+ tool: 'claude-code'
38
+ };
39
+ }
40
+ // Cursor format
41
+ if (input.file_path) {
42
+ return {
43
+ filePath: input.file_path,
44
+ tool: 'cursor'
45
+ };
46
+ }
47
+ // Prompt-related hooks
48
+ if (input.prompt) {
49
+ return {
50
+ prompt: input.prompt,
51
+ tool: input.hook_event_name ? 'cursor' : 'claude-code'
52
+ };
53
+ }
54
+ return {
55
+ tool: 'unknown'
56
+ };
57
+ }
58
+ /**
59
+ * Determine if we should output JSON for Cursor's beforeSubmitPrompt or Cline hooks
60
+ */
61
+ function shouldOutputJSON(input) {
62
+ // Cline always expects JSON output
63
+ if (input && input.clineVersion && input.hookName) {
64
+ return true;
65
+ }
66
+ // Cursor's beforeSubmitPrompt expects JSON
67
+ return input.hook_event_name === 'beforeSubmitPrompt';
68
+ }
69
+ //# sourceMappingURL=hook-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-parser.js","sourceRoot":"","sources":["../../src/utils/hook-parser.ts"],"names":[],"mappings":";;AAIA,wCA2DC;AAKD,4CAQC;AA5ED;;;GAGG;AACH,SAAgB,cAAc,CAAC,KAAU;IAMvC,iCAAiC;IACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,IAAI,EAAE,SAAS;SAChB,CAAC;IACJ,CAAC;IAED,qDAAqD;IACrD,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACzC,6DAA6D;QAC7D,IAAI,QAA4B,CAAC;QAEjC,IAAI,KAAK,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;YAC/C,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC;QACtD,CAAC;aAAM,IAAI,KAAK,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;YACpD,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC;QACpD,CAAC;QAED,OAAO;YACL,QAAQ;YACR,MAAM,EAAE,KAAK,CAAC,gBAAgB,EAAE,MAAM;YACtC,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;IAED,qBAAqB;IACrB,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO;YACL,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS;YACpC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO;YACjC,IAAI,EAAE,aAAa;SACpB,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO;YACL,QAAQ,EAAE,KAAK,CAAC,SAAS;YACzB,IAAI,EAAE,QAAQ;SACf,CAAC;IACJ,CAAC;IAED,uBAAuB;IACvB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa;SACvD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS;KAChB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,KAAU;IACzC,mCAAmC;IACnC,IAAI,KAAK,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2CAA2C;IAC3C,OAAO,KAAK,CAAC,eAAe,KAAK,oBAAoB,CAAC;AACxD,CAAC"}
@@ -0,0 +1,27 @@
1
+ export type SupportedTool = 'claude-code' | 'cursor' | 'cline';
2
+ export type SettingsScope = 'user' | 'project';
3
+ /**
4
+ * Get settings path for a specific tool and scope
5
+ */
6
+ export declare function getSettingsPath(tool: SupportedTool, scope: SettingsScope): string;
7
+ /**
8
+ * Read tool settings (returns empty object if file doesn't exist)
9
+ */
10
+ export declare function readToolSettings(tool: SupportedTool, scope: SettingsScope): any;
11
+ /**
12
+ * Write tool settings
13
+ */
14
+ export declare function writeToolSettings(tool: SupportedTool, scope: SettingsScope, settings: any): void;
15
+ /**
16
+ * Add brainfile hooks to tool settings
17
+ */
18
+ export declare function installBrainfileHooks(tool: SupportedTool, scope: SettingsScope): void;
19
+ /**
20
+ * Remove brainfile hooks from tool settings
21
+ */
22
+ export declare function uninstallBrainfileHooks(tool: SupportedTool, scope: SettingsScope): void;
23
+ /**
24
+ * Check if brainfile hooks are installed for a tool
25
+ */
26
+ export declare function areBrainfileHooksInstalled(tool: SupportedTool, scope: SettingsScope): boolean;
27
+ //# sourceMappingURL=hook-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-settings.d.ts","sourceRoot":"","sources":["../../src/utils/hook-settings.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC/D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,CAAC;AAO/C;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAuBjF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,GAAG,CAgC/E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI,CAUhG;AAoDD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAqIrF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAyEvF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CA6D7F"}