@knpkv/codecommit 0.1.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 (233) hide show
  1. package/README.md +216 -0
  2. package/dist/package.json +50 -0
  3. package/dist/src/bin.d.ts +3 -0
  4. package/dist/src/bin.d.ts.map +1 -0
  5. package/dist/src/bin.js +204 -0
  6. package/dist/src/bin.js.map +1 -0
  7. package/dist/src/main.d.ts +2 -0
  8. package/dist/src/main.d.ts.map +1 -0
  9. package/dist/src/main.js +25 -0
  10. package/dist/src/main.js.map +1 -0
  11. package/dist/src/tui/App.d.ts +6 -0
  12. package/dist/src/tui/App.d.ts.map +1 -0
  13. package/dist/src/tui/App.js +40 -0
  14. package/dist/src/tui/App.js.map +1 -0
  15. package/dist/src/tui/Constants.d.ts +11 -0
  16. package/dist/src/tui/Constants.d.ts.map +1 -0
  17. package/dist/src/tui/Constants.js +40 -0
  18. package/dist/src/tui/Constants.js.map +1 -0
  19. package/dist/src/tui/ListBuilder.d.ts +32 -0
  20. package/dist/src/tui/ListBuilder.d.ts.map +1 -0
  21. package/dist/src/tui/ListBuilder.js +145 -0
  22. package/dist/src/tui/ListBuilder.js.map +1 -0
  23. package/dist/src/tui/atoms/actions.d.ts +39 -0
  24. package/dist/src/tui/atoms/actions.d.ts.map +1 -0
  25. package/dist/src/tui/atoms/actions.js +149 -0
  26. package/dist/src/tui/atoms/actions.js.map +1 -0
  27. package/dist/src/tui/atoms/app.d.ts +42 -0
  28. package/dist/src/tui/atoms/app.d.ts.map +1 -0
  29. package/dist/src/tui/atoms/app.js +69 -0
  30. package/dist/src/tui/atoms/app.js.map +1 -0
  31. package/dist/src/tui/atoms/index.d.ts +6 -0
  32. package/dist/src/tui/atoms/index.d.ts.map +1 -0
  33. package/dist/src/tui/atoms/index.js +7 -0
  34. package/dist/src/tui/atoms/index.js.map +1 -0
  35. package/dist/src/tui/atoms/runtime.d.ts +9 -0
  36. package/dist/src/tui/atoms/runtime.d.ts.map +1 -0
  37. package/dist/src/tui/atoms/runtime.js +22 -0
  38. package/dist/src/tui/atoms/runtime.js.map +1 -0
  39. package/dist/src/tui/atoms/ui.d.ts +103 -0
  40. package/dist/src/tui/atoms/ui.d.ts.map +1 -0
  41. package/dist/src/tui/atoms/ui.js +97 -0
  42. package/dist/src/tui/atoms/ui.js.map +1 -0
  43. package/dist/src/tui/components/Badge.d.ts +13 -0
  44. package/dist/src/tui/components/Badge.d.ts.map +1 -0
  45. package/dist/src/tui/components/Badge.js +48 -0
  46. package/dist/src/tui/components/Badge.js.map +1 -0
  47. package/dist/src/tui/components/DetailsView.d.ts +6 -0
  48. package/dist/src/tui/components/DetailsView.d.ts.map +1 -0
  49. package/dist/src/tui/components/DetailsView.js +81 -0
  50. package/dist/src/tui/components/DetailsView.js.map +1 -0
  51. package/dist/src/tui/components/ErrorBoundary.d.ts +20 -0
  52. package/dist/src/tui/components/ErrorBoundary.d.ts.map +1 -0
  53. package/dist/src/tui/components/ErrorBoundary.js +33 -0
  54. package/dist/src/tui/components/ErrorBoundary.js.map +1 -0
  55. package/dist/src/tui/components/Footer.d.ts +6 -0
  56. package/dist/src/tui/components/Footer.d.ts.map +1 -0
  57. package/dist/src/tui/components/Footer.js +29 -0
  58. package/dist/src/tui/components/Footer.js.map +1 -0
  59. package/dist/src/tui/components/Header.d.ts +6 -0
  60. package/dist/src/tui/components/Header.d.ts.map +1 -0
  61. package/dist/src/tui/components/Header.js +58 -0
  62. package/dist/src/tui/components/Header.js.map +1 -0
  63. package/dist/src/tui/components/ListItemRow.d.ts +13 -0
  64. package/dist/src/tui/components/ListItemRow.d.ts.map +1 -0
  65. package/dist/src/tui/components/ListItemRow.js +52 -0
  66. package/dist/src/tui/components/ListItemRow.js.map +1 -0
  67. package/dist/src/tui/components/MainList.d.ts +11 -0
  68. package/dist/src/tui/components/MainList.d.ts.map +1 -0
  69. package/dist/src/tui/components/MainList.js +124 -0
  70. package/dist/src/tui/components/MainList.js.map +1 -0
  71. package/dist/src/tui/components/NotificationsTable.d.ts +12 -0
  72. package/dist/src/tui/components/NotificationsTable.d.ts.map +1 -0
  73. package/dist/src/tui/components/NotificationsTable.js +72 -0
  74. package/dist/src/tui/components/NotificationsTable.js.map +1 -0
  75. package/dist/src/tui/components/QuickFilters.d.ts +6 -0
  76. package/dist/src/tui/components/QuickFilters.d.ts.map +1 -0
  77. package/dist/src/tui/components/QuickFilters.js +74 -0
  78. package/dist/src/tui/components/QuickFilters.js.map +1 -0
  79. package/dist/src/tui/components/SettingsTable.d.ts +12 -0
  80. package/dist/src/tui/components/SettingsTable.d.ts.map +1 -0
  81. package/dist/src/tui/components/SettingsTable.js +62 -0
  82. package/dist/src/tui/components/SettingsTable.js.map +1 -0
  83. package/dist/src/tui/components/Spinner.d.ts +11 -0
  84. package/dist/src/tui/components/Spinner.d.ts.map +1 -0
  85. package/dist/src/tui/components/Spinner.js +24 -0
  86. package/dist/src/tui/components/Spinner.js.map +1 -0
  87. package/dist/src/tui/components/StatusRow.d.ts +11 -0
  88. package/dist/src/tui/components/StatusRow.d.ts.map +1 -0
  89. package/dist/src/tui/components/StatusRow.js +11 -0
  90. package/dist/src/tui/components/StatusRow.js.map +1 -0
  91. package/dist/src/tui/components/Table.d.ts +20 -0
  92. package/dist/src/tui/components/Table.d.ts.map +1 -0
  93. package/dist/src/tui/components/Table.js +38 -0
  94. package/dist/src/tui/components/Table.js.map +1 -0
  95. package/dist/src/tui/components/index.d.ts +14 -0
  96. package/dist/src/tui/components/index.d.ts.map +1 -0
  97. package/dist/src/tui/components/index.js +14 -0
  98. package/dist/src/tui/components/index.js.map +1 -0
  99. package/dist/src/tui/components/mainlist-utils.d.ts +22 -0
  100. package/dist/src/tui/components/mainlist-utils.d.ts.map +1 -0
  101. package/dist/src/tui/components/mainlist-utils.js +71 -0
  102. package/dist/src/tui/components/mainlist-utils.js.map +1 -0
  103. package/dist/src/tui/components/table-utils.d.ts +25 -0
  104. package/dist/src/tui/components/table-utils.d.ts.map +1 -0
  105. package/dist/src/tui/components/table-utils.js +25 -0
  106. package/dist/src/tui/components/table-utils.js.map +1 -0
  107. package/dist/src/tui/context/dialog.d.ts +32 -0
  108. package/dist/src/tui/context/dialog.d.ts.map +1 -0
  109. package/dist/src/tui/context/dialog.js +41 -0
  110. package/dist/src/tui/context/dialog.js.map +1 -0
  111. package/dist/src/tui/context/theme.d.ts +25 -0
  112. package/dist/src/tui/context/theme.d.ts.map +1 -0
  113. package/dist/src/tui/context/theme.js +31 -0
  114. package/dist/src/tui/context/theme.js.map +1 -0
  115. package/dist/src/tui/hooks/index.d.ts +2 -0
  116. package/dist/src/tui/hooks/index.d.ts.map +1 -0
  117. package/dist/src/tui/hooks/index.js +2 -0
  118. package/dist/src/tui/hooks/index.js.map +1 -0
  119. package/dist/src/tui/hooks/useKeyboardNav.d.ts +16 -0
  120. package/dist/src/tui/hooks/useKeyboardNav.d.ts.map +1 -0
  121. package/dist/src/tui/hooks/useKeyboardNav.js +429 -0
  122. package/dist/src/tui/hooks/useKeyboardNav.js.map +1 -0
  123. package/dist/src/tui/hooks/useListNavigation.d.ts +3 -0
  124. package/dist/src/tui/hooks/useListNavigation.d.ts.map +1 -0
  125. package/dist/src/tui/hooks/useListNavigation.js +123 -0
  126. package/dist/src/tui/hooks/useListNavigation.js.map +1 -0
  127. package/dist/src/tui/mocks.d.ts +6 -0
  128. package/dist/src/tui/mocks.d.ts.map +1 -0
  129. package/dist/src/tui/mocks.js +36 -0
  130. package/dist/src/tui/mocks.js.map +1 -0
  131. package/dist/src/tui/theme/Resolver.d.ts +6 -0
  132. package/dist/src/tui/theme/Resolver.d.ts.map +1 -0
  133. package/dist/src/tui/theme/Resolver.js +73 -0
  134. package/dist/src/tui/theme/Resolver.js.map +1 -0
  135. package/dist/src/tui/theme/ThemeRegistry.d.ts +3 -0
  136. package/dist/src/tui/theme/ThemeRegistry.d.ts.map +1 -0
  137. package/dist/src/tui/theme/ThemeRegistry.js +70 -0
  138. package/dist/src/tui/theme/ThemeRegistry.js.map +1 -0
  139. package/dist/src/tui/theme/data/aura.json +69 -0
  140. package/dist/src/tui/theme/data/ayu.json +80 -0
  141. package/dist/src/tui/theme/data/carbonfox.json +248 -0
  142. package/dist/src/tui/theme/data/catppuccin-frappe.json +233 -0
  143. package/dist/src/tui/theme/data/catppuccin-macchiato.json +233 -0
  144. package/dist/src/tui/theme/data/catppuccin.json +112 -0
  145. package/dist/src/tui/theme/data/cobalt2.json +228 -0
  146. package/dist/src/tui/theme/data/cursor.json +249 -0
  147. package/dist/src/tui/theme/data/dracula.json +219 -0
  148. package/dist/src/tui/theme/data/everforest.json +241 -0
  149. package/dist/src/tui/theme/data/flexoki.json +237 -0
  150. package/dist/src/tui/theme/data/github.json +233 -0
  151. package/dist/src/tui/theme/data/gruvbox.json +242 -0
  152. package/dist/src/tui/theme/data/kanagawa.json +77 -0
  153. package/dist/src/tui/theme/data/lucent-orng.json +237 -0
  154. package/dist/src/tui/theme/data/material.json +235 -0
  155. package/dist/src/tui/theme/data/matrix.json +77 -0
  156. package/dist/src/tui/theme/data/mercury.json +245 -0
  157. package/dist/src/tui/theme/data/monokai.json +221 -0
  158. package/dist/src/tui/theme/data/nightowl.json +221 -0
  159. package/dist/src/tui/theme/data/nord.json +223 -0
  160. package/dist/src/tui/theme/data/one-dark.json +84 -0
  161. package/dist/src/tui/theme/data/opencode.json +245 -0
  162. package/dist/src/tui/theme/data/orng.json +249 -0
  163. package/dist/src/tui/theme/data/osaka-jade.json +93 -0
  164. package/dist/src/tui/theme/data/palenight.json +222 -0
  165. package/dist/src/tui/theme/data/rosepine.json +234 -0
  166. package/dist/src/tui/theme/data/solarized.json +223 -0
  167. package/dist/src/tui/theme/data/synthwave84.json +226 -0
  168. package/dist/src/tui/theme/data/tokyonight.json +243 -0
  169. package/dist/src/tui/theme/data/vercel.json +245 -0
  170. package/dist/src/tui/theme/data/vesper.json +218 -0
  171. package/dist/src/tui/theme/data/zenburn.json +223 -0
  172. package/dist/src/tui/theme/default.d.ts +40 -0
  173. package/dist/src/tui/theme/default.d.ts.map +1 -0
  174. package/dist/src/tui/theme/default.js +35 -0
  175. package/dist/src/tui/theme/default.js.map +1 -0
  176. package/dist/src/tui/theme/resolver-utils.d.ts +28 -0
  177. package/dist/src/tui/theme/resolver-utils.d.ts.map +1 -0
  178. package/dist/src/tui/theme/resolver-utils.js +19 -0
  179. package/dist/src/tui/theme/resolver-utils.js.map +1 -0
  180. package/dist/src/tui/theme/themes.d.ts +3 -0
  181. package/dist/src/tui/theme/themes.d.ts.map +1 -0
  182. package/dist/src/tui/theme/themes.js +13 -0
  183. package/dist/src/tui/theme/themes.js.map +1 -0
  184. package/dist/src/tui/ui/Dialog.d.ts +19 -0
  185. package/dist/src/tui/ui/Dialog.d.ts.map +1 -0
  186. package/dist/src/tui/ui/Dialog.js +39 -0
  187. package/dist/src/tui/ui/Dialog.js.map +1 -0
  188. package/dist/src/tui/ui/DialogCommand.d.ts +2 -0
  189. package/dist/src/tui/ui/DialogCommand.d.ts.map +1 -0
  190. package/dist/src/tui/ui/DialogCommand.js +182 -0
  191. package/dist/src/tui/ui/DialogCommand.js.map +1 -0
  192. package/dist/src/tui/ui/DialogCreatePR.d.ts +2 -0
  193. package/dist/src/tui/ui/DialogCreatePR.d.ts.map +1 -0
  194. package/dist/src/tui/ui/DialogCreatePR.js +397 -0
  195. package/dist/src/tui/ui/DialogCreatePR.js.map +1 -0
  196. package/dist/src/tui/ui/DialogHelp.d.ts +6 -0
  197. package/dist/src/tui/ui/DialogHelp.d.ts.map +1 -0
  198. package/dist/src/tui/ui/DialogHelp.js +93 -0
  199. package/dist/src/tui/ui/DialogHelp.js.map +1 -0
  200. package/dist/src/tui/ui/DialogTheme.d.ts +2 -0
  201. package/dist/src/tui/ui/DialogTheme.d.ts.map +1 -0
  202. package/dist/src/tui/ui/DialogTheme.js +124 -0
  203. package/dist/src/tui/ui/DialogTheme.js.map +1 -0
  204. package/dist/src/tui/ui/index.d.ts +6 -0
  205. package/dist/src/tui/ui/index.d.ts.map +1 -0
  206. package/dist/src/tui/ui/index.js +6 -0
  207. package/dist/src/tui/ui/index.js.map +1 -0
  208. package/dist/src/tui/utils/prTemplates.d.ts +19 -0
  209. package/dist/src/tui/utils/prTemplates.d.ts.map +1 -0
  210. package/dist/src/tui/utils/prTemplates.js +46 -0
  211. package/dist/src/tui/utils/prTemplates.js.map +1 -0
  212. package/dist/test/ConfigService.test.d.ts +2 -0
  213. package/dist/test/ConfigService.test.d.ts.map +1 -0
  214. package/dist/test/ConfigService.test.js +40 -0
  215. package/dist/test/ConfigService.test.js.map +1 -0
  216. package/dist/test/ListBuilder.test.d.ts +2 -0
  217. package/dist/test/ListBuilder.test.d.ts.map +1 -0
  218. package/dist/test/ListBuilder.test.js +246 -0
  219. package/dist/test/ListBuilder.test.js.map +1 -0
  220. package/dist/test/MainList.test.d.ts +2 -0
  221. package/dist/test/MainList.test.d.ts.map +1 -0
  222. package/dist/test/MainList.test.js +228 -0
  223. package/dist/test/MainList.test.js.map +1 -0
  224. package/dist/test/Resolver.test.d.ts +2 -0
  225. package/dist/test/Resolver.test.d.ts.map +1 -0
  226. package/dist/test/Resolver.test.js +81 -0
  227. package/dist/test/Resolver.test.js.map +1 -0
  228. package/dist/test/Table.test.d.ts +2 -0
  229. package/dist/test/Table.test.d.ts.map +1 -0
  230. package/dist/test/Table.test.js +100 -0
  231. package/dist/test/Table.test.js.map +1 -0
  232. package/dist/tsconfig.tsbuildinfo +1 -0
  233. package/package.json +50 -0
package/README.md ADDED
@@ -0,0 +1,216 @@
1
+ # @knpkv/codecommit
2
+
3
+ CLI and TUI for AWS CodeCommit pull requests.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ pnpm add @knpkv/codecommit
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ### TUI Mode (default)
14
+
15
+ ```bash
16
+ codecommit
17
+ # or
18
+ codecommit tui
19
+ ```
20
+
21
+ ### Web Mode
22
+
23
+ ```bash
24
+ codecommit web [--port 3000] [--hostname 127.0.0.1]
25
+ ```
26
+
27
+ ### Pull Request Commands
28
+
29
+ #### List PRs
30
+
31
+ List pull requests.
32
+
33
+ ```bash
34
+ codecommit pr list [options]
35
+ ```
36
+
37
+ | Option | Alias | Description | Default |
38
+ | ----------- | ----- | ----------------------- | ----------- |
39
+ | `--profile` | `-p` | AWS profile | `default` |
40
+ | `--region` | `-r` | AWS region | `us-east-1` |
41
+ | `--status` | `-s` | PR status (OPEN/CLOSED) | `OPEN` |
42
+ | `--all` | `-a` | Show all PRs | `false` |
43
+ | `--repo` | | Filter by repository | - |
44
+ | `--author` | | Filter by author | - |
45
+ | `--json` | | Output as JSON | `false` |
46
+
47
+ Example:
48
+
49
+ ```bash
50
+ # List open PRs (default)
51
+ codecommit pr list
52
+
53
+ # List closed PRs
54
+ codecommit pr list --status CLOSED
55
+
56
+ # List all PRs (open and closed)
57
+ codecommit pr list --all
58
+
59
+ # Filter by repo
60
+ codecommit pr list --repo my-repo
61
+
62
+ # Filter by author
63
+ codecommit pr list --author andrey
64
+
65
+ # JSON output
66
+ codecommit pr list --json
67
+ ```
68
+
69
+ Output:
70
+
71
+ ```
72
+ Found 3 open PR(s):
73
+
74
+ 123 my-repo
75
+ Add feature X
76
+ feature/x → main
77
+ by alice ✓approved ✓mergeable
78
+
79
+ 124 my-repo
80
+ Fix bug Y
81
+ fix/y → main
82
+ by bob ✗conflicts
83
+ ```
84
+
85
+ With `--all`:
86
+
87
+ ```
88
+ Found 5 all PR(s):
89
+
90
+ 123 [OPEN] my-repo
91
+ Add feature X
92
+ ...
93
+
94
+ 120 [CLOSED] my-repo
95
+ Old feature
96
+ ...
97
+ ```
98
+
99
+ #### Create PR
100
+
101
+ ```bash
102
+ codecommit pr create <repo> <title> -s <source-branch> [options]
103
+ ```
104
+
105
+ | Option | Alias | Description | Default |
106
+ | --------------- | ----- | ------------------ | ----------- |
107
+ | `--source` | `-s` | Source branch | (required) |
108
+ | `--destination` | `-d` | Destination branch | `main` |
109
+ | `--description` | | PR description | - |
110
+ | `--profile` | `-p` | AWS profile | `default` |
111
+ | `--region` | `-r` | AWS region | `us-east-1` |
112
+
113
+ Example:
114
+
115
+ ```bash
116
+ codecommit pr create my-repo "Add feature X" -s feature/x -d main --description "Implements feature X"
117
+ ```
118
+
119
+ #### Export PR Comments
120
+
121
+ Export PR comments as markdown with multi-level thread structure.
122
+
123
+ ```bash
124
+ codecommit pr export <pr-id> <repo> [options]
125
+ ```
126
+
127
+ | Option | Alias | Description | Default |
128
+ | ----------- | ----- | ---------------- | ----------- |
129
+ | `--output` | `-o` | Output file path | stdout |
130
+ | `--profile` | `-p` | AWS profile | `default` |
131
+ | `--region` | `-r` | AWS region | `us-east-1` |
132
+
133
+ Example:
134
+
135
+ ```bash
136
+ # Print to stdout
137
+ codecommit pr export 123 my-repo
138
+
139
+ # Save to file
140
+ codecommit pr export 123 my-repo -o pr-comments.md
141
+ ```
142
+
143
+ Output format:
144
+
145
+ ```markdown
146
+ # RPS-2585: Add CDK destroy buildspec
147
+
148
+ **Repository:** tilapia
149
+ **Branch:** refs/heads/feat/RPS-2585-destroy-buildspec → refs/heads/main
150
+ **Author:** andrey
151
+ **Status:** OPEN
152
+ **AWS Account:** core-code
153
+ **Link:** https://...
154
+
155
+ ## Description
156
+
157
+ Adds buildspec for CDK destroy operation.
158
+
159
+ ## Comments
160
+
161
+ ### src/file.ts
162
+
163
+ - **alice** (2024-01-15T10:00:00Z)
164
+ This needs refactoring
165
+ - **bob** (2024-01-15T11:00:00Z)
166
+ Agreed, will fix
167
+ - **alice** (2024-01-15T12:00:00Z)
168
+ Thanks!
169
+
170
+ ### General comments
171
+
172
+ - **charlie** (2024-01-15T09:00:00Z)
173
+ LGTM overall
174
+ ```
175
+
176
+ #### Update PR
177
+
178
+ Update PR title or description.
179
+
180
+ ```bash
181
+ codecommit pr update <pr-id> [options]
182
+ ```
183
+
184
+ | Option | Alias | Description | Default |
185
+ | --------------- | ----- | ------------------ | ----------- |
186
+ | `--title` | `-t` | New PR title | - |
187
+ | `--description` | `-d` | New PR description | - |
188
+ | `--profile` | `-p` | AWS profile | `default` |
189
+ | `--region` | `-r` | AWS region | `us-east-1` |
190
+
191
+ Example:
192
+
193
+ ```bash
194
+ # Update title
195
+ codecommit pr update 123 -t "New title"
196
+
197
+ # Update description
198
+ codecommit pr update 123 -d "Updated description"
199
+
200
+ # Update both
201
+ codecommit pr update 123 -t "New title" -d "New description"
202
+ ```
203
+
204
+ ## AWS Configuration
205
+
206
+ Uses standard AWS credential chain. Configure via:
207
+
208
+ - Environment variables (`AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`)
209
+ - AWS credentials file (`~/.aws/credentials`)
210
+ - IAM role (when running on AWS)
211
+
212
+ Specify profile with `--profile` or `AWS_PROFILE` env var.
213
+
214
+ ## License
215
+
216
+ MIT
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@knpkv/codecommit",
3
+ "version": "0.1.0",
4
+ "description": "TUI for browsing AWS CodeCommit PRs",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/dts/index.d.ts",
8
+ "bin": {
9
+ "codecommit": "dist/src/bin.js"
10
+ },
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "start": "bun src/bin.ts",
19
+ "start:web": "bun src/bin.ts web",
20
+ "prepack": "tsc -b",
21
+ "build": "tsc -b",
22
+ "check": "tsc -b tsconfig.json",
23
+ "test": "vitest",
24
+ "lint": "eslint \"{src,test}/**/*.{ts,tsx}\"",
25
+ "docgen": "docgen"
26
+ },
27
+ "dependencies": {
28
+ "@effect-atom/atom-react": "latest",
29
+ "@effect/cli": "latest",
30
+ "@effect/platform": "^0.94.2",
31
+ "@effect/platform-bun": "^0.87.1",
32
+ "@effect/platform-node": "latest",
33
+ "@knpkv/codecommit-core": "workspace:*",
34
+ "@knpkv/codecommit-web": "workspace:*",
35
+ "@opentui/core": "https://pkg.pr.new/anomalyco/opentui/@opentui/core@367a94087821b3b5feedd35bbb57df43b10a286e",
36
+ "@opentui/react": "https://pkg.pr.new/anomalyco/opentui/@opentui/react@367a94087821b3b5feedd35bbb57df43b10a286e",
37
+ "effect": "latest",
38
+ "open": "^10.1.0",
39
+ "react": "^19.1.0",
40
+ "tslib": "^2.8.1"
41
+ },
42
+ "devDependencies": {
43
+ "@effect/vitest": "latest",
44
+ "@storybook/react": "^8.6.15",
45
+ "@types/bun": "^1.3.6",
46
+ "@types/node": "latest",
47
+ "@types/react": "^19.1.8",
48
+ "vitest": "latest"
49
+ }
50
+ }
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../src/bin.ts"],"names":[],"mappings":""}
@@ -0,0 +1,204 @@
1
+ #!/usr/bin/env bun
2
+ import { Args, Command, Options } from "@effect/cli";
3
+ import { FileSystem } from "@effect/platform";
4
+ import { BunContext, BunRuntime } from "@effect/platform-bun";
5
+ import { NodeHttpClient } from "@effect/platform-node";
6
+ import { AwsClient, AwsClientConfig } from "@knpkv/codecommit-core";
7
+ import { makeServer } from "@knpkv/codecommit-web";
8
+ import { Console, Effect, Layer, Stream } from "effect";
9
+ import open from "open";
10
+ import pkg from "../package.json";
11
+ // TUI Command
12
+ const tui = Command.make("tui", {}, () => Effect.gen(function* () {
13
+ yield* Effect.promise(() => import("./main.js"));
14
+ }));
15
+ // Web Command
16
+ const web = Command.make("web", {
17
+ port: Options.integer("port").pipe(Options.withDefault(3000)),
18
+ hostname: Options.text("hostname").pipe(Options.withDefault("127.0.0.1"))
19
+ }, ({ hostname, port }) => Effect.gen(function* () {
20
+ yield* Effect.logInfo(`Starting web server at http://${hostname}:${port}`);
21
+ // Open browser
22
+ yield* Effect.promise(() => open(`http://${hostname}:${port}`));
23
+ // Run server with configured port/hostname
24
+ return yield* Layer.launch(makeServer({ port, hostname }));
25
+ }));
26
+ // PR Create Command
27
+ const prCreate = Command.make("create", {
28
+ repo: Args.text({ name: "repository" }).pipe(Args.withDescription("Repository name")),
29
+ title: Args.text({ name: "title" }).pipe(Args.withDescription("PR title")),
30
+ source: Options.text("source").pipe(Options.withAlias("s"), Options.withDescription("Source branch")),
31
+ destination: Options.text("destination").pipe(Options.withAlias("d"), Options.withDescription("Destination branch"), Options.withDefault("main")),
32
+ description: Options.text("description").pipe(Options.withDescription("PR description"), Options.optional),
33
+ profile: Options.text("profile").pipe(Options.withAlias("p"), Options.withDescription("AWS profile"), Options.withDefault("default")),
34
+ region: Options.text("region").pipe(Options.withAlias("r"), Options.withDescription("AWS region"), Options.withDefault("us-east-1"))
35
+ }, ({ description, destination, profile, region, repo, source, title }) => Effect.gen(function* () {
36
+ const aws = yield* AwsClient.AwsClient;
37
+ yield* Console.log(`Creating PR: ${source} -> ${destination} in ${repo}`);
38
+ const prId = yield* aws.createPullRequest({
39
+ account: { profile: profile, region: region },
40
+ repositoryName: repo,
41
+ title,
42
+ ...(description._tag === "Some" && { description: description.value }),
43
+ sourceReference: source,
44
+ destinationReference: destination
45
+ });
46
+ const link = `https://${region}.console.aws.amazon.com/codesuite/codecommit/repositories/${repo}/pull-requests/${prId}?region=${region}`;
47
+ yield* Console.log(`Created PR: ${prId}`);
48
+ yield* Console.log(link);
49
+ }).pipe(Effect.provide(Layer.merge(AwsClient.AwsClientLive, NodeHttpClient.layer)))).pipe(Command.withDescription("Create a pull request"));
50
+ // PR List Command
51
+ const prList = Command.make("list", {
52
+ profile: Options.text("profile").pipe(Options.withAlias("p"), Options.withDescription("AWS profile"), Options.withDefault("default")),
53
+ region: Options.text("region").pipe(Options.withAlias("r"), Options.withDescription("AWS region"), Options.withDefault("us-east-1")),
54
+ status: Options.choice("status", ["OPEN", "CLOSED"]).pipe(Options.withAlias("s"), Options.withDescription("Filter by PR status"), Options.withDefault("OPEN")),
55
+ all: Options.boolean("all").pipe(Options.withAlias("a"), Options.withDescription("Show all PRs (both OPEN and CLOSED)"), Options.withDefault(false)),
56
+ repo: Options.text("repo").pipe(Options.withDescription("Filter by repository name"), Options.optional),
57
+ author: Options.text("author").pipe(Options.withDescription("Filter by author"), Options.optional),
58
+ json: Options.boolean("json").pipe(Options.withDescription("Output as JSON"), Options.withDefault(false))
59
+ }, ({ all, author, json, profile, region, repo, status }) => Effect.gen(function* () {
60
+ const aws = yield* AwsClient.AwsClient;
61
+ const account = { profile: profile, region: region };
62
+ const statusLabel = all ? "all" : status.toLowerCase();
63
+ yield* Console.log(`Fetching ${statusLabel} PRs...`);
64
+ const filterPRs = (prStream) => prStream.pipe(Stream.filter((pr) => {
65
+ if (repo._tag === "Some" && pr.repositoryName !== repo.value)
66
+ return false;
67
+ if (author._tag === "Some" && pr.author !== author.value)
68
+ return false;
69
+ return true;
70
+ }), Stream.runCollect, Effect.map((chunk) => Array.from(chunk)));
71
+ let prs;
72
+ if (all) {
73
+ const [openPrs, closedPrs] = yield* Effect.all([
74
+ filterPRs(aws.getPullRequests(account, { status: "OPEN" })),
75
+ filterPRs(aws.getPullRequests(account, { status: "CLOSED" }))
76
+ ]);
77
+ prs = [...openPrs, ...closedPrs].sort((a, b) => b.lastModifiedDate.getTime() - a.lastModifiedDate.getTime());
78
+ }
79
+ else {
80
+ prs = yield* filterPRs(aws.getPullRequests(account, { status }));
81
+ }
82
+ if (prs.length === 0) {
83
+ yield* Console.log(`No ${statusLabel} PRs found.`);
84
+ return;
85
+ }
86
+ if (json) {
87
+ yield* Console.log(JSON.stringify(prs, null, 2));
88
+ }
89
+ else {
90
+ yield* Console.log(`\nFound ${prs.length} ${statusLabel} PR(s):\n`);
91
+ for (const pr of prs) {
92
+ const prStatus = all ? `[${pr.status}] ` : "";
93
+ const flags = [
94
+ pr.isApproved ? "approved" : "",
95
+ pr.isMergeable ? "mergeable" : "conflicts"
96
+ ].filter(Boolean).join(" ");
97
+ yield* Console.log(`${pr.id} ${prStatus}${pr.repositoryName}`);
98
+ yield* Console.log(` ${pr.title}`);
99
+ yield* Console.log(` ${pr.sourceBranch} -> ${pr.destinationBranch}`);
100
+ yield* Console.log(` by ${pr.author} ${flags}`);
101
+ yield* Console.log("");
102
+ }
103
+ }
104
+ }).pipe(Effect.provide(Layer.merge(AwsClient.AwsClientLive, NodeHttpClient.layer)))).pipe(Command.withDescription("List open pull requests"));
105
+ // Helper to render comment threads as markdown
106
+ const renderThread = (thread, indent = 0) => {
107
+ const prefix = " ".repeat(indent);
108
+ const c = thread.root;
109
+ const header = c.deleted
110
+ ? `${prefix}- ~~[deleted]~~ _${c.author}_ (${c.creationDate.toISOString()})`
111
+ : `${prefix}- **${c.author}** (${c.creationDate.toISOString()})`;
112
+ const content = c.deleted ? "" : `\n${prefix} ${c.content.replace(/\n/g, `\n${prefix} `)}`;
113
+ const replies = thread.replies.map((r) => renderThread(r, indent + 1)).join("\n");
114
+ return `${header}${content}${replies ? `\n${replies}` : ""}`;
115
+ };
116
+ const renderLocation = (loc) => {
117
+ const header = loc.filePath ? `### ${loc.filePath}\n` : "### General comments\n";
118
+ const threads = loc.comments.map((t) => renderThread(t)).join("\n\n");
119
+ return `${header}\n${threads}`;
120
+ };
121
+ // PR Export Command
122
+ const prExport = Command.make("export", {
123
+ prId: Args.text({ name: "pr-id" }).pipe(Args.withDescription("Pull request ID")),
124
+ repo: Args.text({ name: "repository" }).pipe(Args.withDescription("Repository name")),
125
+ output: Options.file("output").pipe(Options.withAlias("o"), Options.withDescription("Output file path"), Options.optional),
126
+ profile: Options.text("profile").pipe(Options.withAlias("p"), Options.withDescription("AWS profile"), Options.withDefault("default")),
127
+ region: Options.text("region").pipe(Options.withAlias("r"), Options.withDescription("AWS region"), Options.withDefault("us-east-1"))
128
+ }, ({ output, prId, profile, region, repo }) => Effect.gen(function* () {
129
+ const aws = yield* AwsClient.AwsClient;
130
+ const fs = yield* FileSystem.FileSystem;
131
+ const account = { profile: profile, region: region };
132
+ yield* Console.log(`Fetching PR ${prId}...`);
133
+ const pr = yield* aws.getPullRequest({ account, pullRequestId: prId });
134
+ yield* Console.log(`Fetching comments...`);
135
+ const locations = yield* aws.getCommentsForPullRequest({
136
+ account,
137
+ pullRequestId: prId,
138
+ repositoryName: repo
139
+ });
140
+ const totalComments = locations.reduce((sum, loc) => {
141
+ const countThreads = (threads) => threads.reduce((s, t) => s + 1 + countThreads(t.replies), 0);
142
+ return sum + countThreads(loc.comments);
143
+ }, 0);
144
+ yield* Console.log(`Found ${totalComments} comment(s) in ${locations.length} location(s)`);
145
+ const link = `https://${region}.console.aws.amazon.com/codesuite/codecommit/repositories/${repo}/pull-requests/${prId}?region=${region}`;
146
+ const markdown = [
147
+ `# ${pr.title}`,
148
+ "",
149
+ `**Repository:** ${repo}`,
150
+ `**Branch:** ${pr.sourceBranch} -> ${pr.destinationBranch}`,
151
+ `**Author:** ${pr.author}`,
152
+ `**Status:** ${pr.status}`,
153
+ `**AWS Account:** ${profile}`,
154
+ `**Link:** ${link}`,
155
+ "",
156
+ ...(pr.description ? ["## Description", "", pr.description, ""] : []),
157
+ "## Comments",
158
+ "",
159
+ ...(locations.length > 0 ? locations.map(renderLocation) : ["_No comments_"])
160
+ ].join("\n");
161
+ if (output._tag === "Some") {
162
+ yield* fs.writeFileString(output.value, markdown);
163
+ yield* Console.log(`Saved to ${output.value}`);
164
+ }
165
+ else {
166
+ yield* Console.log("");
167
+ yield* Console.log(markdown);
168
+ }
169
+ }).pipe(Effect.provide(Layer.merge(AwsClient.AwsClientLive, NodeHttpClient.layer)))).pipe(Command.withDescription("Export PR comments as markdown"));
170
+ // PR Update Command
171
+ const prUpdate = Command.make("update", {
172
+ prId: Args.text({ name: "pr-id" }).pipe(Args.withDescription("Pull request ID")),
173
+ title: Options.text("title").pipe(Options.withAlias("t"), Options.withDescription("New PR title"), Options.optional),
174
+ description: Options.text("description").pipe(Options.withAlias("d"), Options.withDescription("New PR description"), Options.optional),
175
+ profile: Options.text("profile").pipe(Options.withAlias("p"), Options.withDescription("AWS profile"), Options.withDefault("default")),
176
+ region: Options.text("region").pipe(Options.withAlias("r"), Options.withDescription("AWS region"), Options.withDefault("us-east-1"))
177
+ }, ({ description, prId, profile, region, title }) => Effect.gen(function* () {
178
+ const aws = yield* AwsClient.AwsClient;
179
+ const account = { profile: profile, region: region };
180
+ if (title._tag === "None" && description._tag === "None") {
181
+ yield* Console.log("Error: At least one of --title or --description must be provided");
182
+ return;
183
+ }
184
+ if (title._tag === "Some") {
185
+ yield* Console.log(`Updating title...`);
186
+ yield* aws.updatePullRequestTitle({ account, pullRequestId: prId, title: title.value });
187
+ }
188
+ if (description._tag === "Some") {
189
+ yield* Console.log(`Updating description...`);
190
+ yield* aws.updatePullRequestDescription({ account, pullRequestId: prId, description: description.value });
191
+ }
192
+ yield* Console.log(`Updated PR ${prId}`);
193
+ }).pipe(Effect.provide(Layer.merge(AwsClient.AwsClientLive, NodeHttpClient.layer)))).pipe(Command.withDescription("Update PR title or description"));
194
+ // PR Command (parent)
195
+ const pr = Command.make("pr", {}, () => Console.log("Usage: codecommit pr <command>")).pipe(Command.withSubcommands([prList, prCreate, prExport, prUpdate]), Command.withDescription("Pull request commands"));
196
+ const command = Command.make("codecommit", {}, () =>
197
+ // Default to TUI if no subcommand
198
+ Effect.promise(() => import("./main.js"))).pipe(Command.withSubcommands([tui, web, pr]));
199
+ const cli = Command.run(command, {
200
+ name: pkg.name,
201
+ version: pkg.version
202
+ });
203
+ Effect.suspend(() => cli(process.argv)).pipe(Effect.provide(Layer.mergeAll(BunContext.layer, NodeHttpClient.layer, AwsClientConfig.Default)), BunRuntime.runMain);
204
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/bin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx } from "@opentui/react/jsx-runtime";
2
+ import { createCliRenderer } from "@opentui/core";
3
+ import { createRoot } from "@opentui/react";
4
+ import { Deferred, Effect } from "effect";
5
+ import { App } from "./tui/App.js";
6
+ import { cleanup } from "./tui/atoms/app.js";
7
+ const program = Effect.gen(function* () {
8
+ const exitSignal = yield* Deferred.make();
9
+ // Create renderer with automatic cleanup
10
+ const renderer = yield* Effect.acquireRelease(Effect.promise(() => createCliRenderer({
11
+ exitOnCtrlC: false // We handle this ourselves
12
+ })), (renderer) => Effect.sync(() => renderer.destroy()));
13
+ const onQuit = () => {
14
+ // Abort pending HTTP requests
15
+ Effect.runFork(cleanup);
16
+ Effect.runSync(Deferred.succeed(exitSignal, void 0));
17
+ };
18
+ // Mount React app
19
+ const root = createRoot(renderer);
20
+ root.render(_jsx(App, { onQuit: onQuit }));
21
+ // Keep the process alive until quit
22
+ yield* Deferred.await(exitSignal);
23
+ }).pipe(Effect.scoped);
24
+ Effect.runFork(program);
25
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAA;IAE/C,yCAAyC;IACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAC3C,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAClB,iBAAiB,CAAC;QAChB,WAAW,EAAE,KAAK,CAAC,2BAA2B;KAC/C,CAAC,CACH,EACD,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CACpD,CAAA;IAED,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,8BAA8B;QAC9B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACvB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IACtD,CAAC,CAAA;IAED,kBAAkB;IAClB,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IACjC,IAAI,CAAC,MAAM,CAAC,KAAC,GAAG,IAAC,MAAM,EAAE,MAAM,GAAI,CAAC,CAAA;IAEpC,oCAAoC;IACpC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;AACnC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAEtB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ interface AppProps {
2
+ readonly onQuit: () => void;
3
+ }
4
+ export declare function App({ onQuit }: AppProps): import("react").ReactNode;
5
+ export {};
6
+ //# sourceMappingURL=App.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/tui/App.tsx"],"names":[],"mappings":"AAWA,UAAU,QAAQ;IAChB,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAA;CAC5B;AAmDD,wBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,6BAQvC"}
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
2
+ import { Result, useAtomSet, useAtomValue } from "@effect-atom/atom-react";
3
+ import { useEffect } from "react";
4
+ import { createPrAtom, openPrAtom } from "./atoms/actions.js";
5
+ import { refreshAtom } from "./atoms/app.js";
6
+ import { creatingPrAtom, viewAtom } from "./atoms/ui.js";
7
+ import { DetailsView, Footer, Header, MainList, QuickFilters } from "./components/index.js";
8
+ import { DialogProvider } from "./context/dialog.js";
9
+ import { ThemeProvider } from "./context/theme.js";
10
+ import { useKeyboardNav } from "./hooks/useKeyboardNav.js";
11
+ import { DialogRenderer } from "./ui/Dialog.js";
12
+ function AppContent({ onQuit }) {
13
+ const openPr = useAtomSet(openPrAtom);
14
+ const refresh = useAtomSet(refreshAtom);
15
+ const view = useAtomValue(viewAtom);
16
+ const createPrResult = useAtomValue(createPrAtom);
17
+ const setCreatingPr = useAtomSet(creatingPrAtom);
18
+ // Trigger initial refresh
19
+ useEffect(() => {
20
+ refresh();
21
+ }, [refresh]);
22
+ // Clear creating PR state when result comes in
23
+ useEffect(() => {
24
+ if (!Result.isInitial(createPrResult)) {
25
+ setCreatingPr(null);
26
+ }
27
+ }, [createPrResult, setCreatingPr]);
28
+ // Initialize keyboard navigation and global shortcuts
29
+ useKeyboardNav({
30
+ onQuit,
31
+ onOpenInBrowser: (pr) => {
32
+ openPr(pr);
33
+ }
34
+ });
35
+ return (_jsxs("box", { style: { flexDirection: "column", height: "100%", width: "100%" }, children: [_jsx(Header, {}), _jsxs("box", { style: { flexGrow: 1, width: "100%" }, children: [_jsx(MainList, {}), view === "details" && (_jsx("box", { style: { position: "absolute", top: 0, left: 0, width: "100%", height: "100%" }, children: _jsx(DetailsView, {}) }))] }), view === "prs" && _jsx(QuickFilters, {}), _jsx(Footer, {}), _jsx(DialogRenderer, {})] }));
36
+ }
37
+ export function App({ onQuit }) {
38
+ return (_jsx(ThemeProvider, { children: _jsx(DialogProvider, { children: _jsx(AppContent, { onQuit: onQuit }) }) }));
39
+ }
40
+ //# sourceMappingURL=App.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../../src/tui/App.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAM/C,SAAS,UAAU,CAAC,EAAE,MAAM,EAAY;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;IACrC,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAA;IACvC,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IACnC,MAAM,cAAc,GAAG,YAAY,CAAC,YAAY,CAAC,CAAA;IACjD,MAAM,aAAa,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAEhD,0BAA0B;IAC1B,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,EAAE,CAAA;IACX,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAEb,+CAA+C;IAC/C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;YACtC,aAAa,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC;IACH,CAAC,EAAE,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAA;IAEnC,sDAAsD;IACtD,cAAc,CAAC;QACb,MAAM;QACN,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE;YACtB,MAAM,CAAC,EAAE,CAAC,CAAA;QACZ,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,CACL,eAAK,KAAK,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aACpE,KAAC,MAAM,KAAG,EAEV,eAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,aACxC,KAAC,QAAQ,KAAG,EACX,IAAI,KAAK,SAAS,IAAI,CACrB,cAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAClF,KAAC,WAAW,KAAG,GACX,CACP,IACG,EAEL,IAAI,KAAK,KAAK,IAAI,KAAC,YAAY,KAAG,EACnC,KAAC,MAAM,KAAG,EAGV,KAAC,cAAc,KAAG,IACd,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,EAAE,MAAM,EAAY;IACtC,OAAO,CACL,KAAC,aAAa,cACZ,KAAC,cAAc,cACb,KAAC,UAAU,IAAC,MAAM,EAAE,MAAM,GAAI,GACf,GACH,CACjB,CAAA;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare const SPINNER_FRAMES: string[];
2
+ export declare const VIEW_TITLES: Record<string, string>;
3
+ export declare const HINTS: Record<string, string>;
4
+ export declare const COMMON_HELP: string;
5
+ export declare const HELP_CONTENT: {
6
+ prs: string;
7
+ settings: string;
8
+ notifications: string;
9
+ };
10
+ export declare const SETTINGS_LEGEND: string;
11
+ //# sourceMappingURL=Constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Constants.d.ts","sourceRoot":"","sources":["../../../src/tui/Constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,UAAqD,CAAA;AAEhF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAK9C,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMxC,CAAA;AAED,eAAO,MAAM,WAAW,QAIiB,CAAA;AAEzC,eAAO,MAAM,YAAY;;;;CAexB,CAAA;AAED,eAAO,MAAM,eAAe,QAIJ,CAAA"}