@padua/cli 1.13.0 → 2.0.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 (272) hide show
  1. package/README.md +164 -11
  2. package/dist/commands/doctor/index.d.ts.map +1 -1
  3. package/dist/commands/doctor/index.js +85 -0
  4. package/dist/commands/doctor/index.js.map +1 -1
  5. package/dist/commands/doctor/mcp-checks.d.ts +36 -0
  6. package/dist/commands/doctor/mcp-checks.d.ts.map +1 -0
  7. package/dist/commands/doctor/mcp-checks.js +235 -0
  8. package/dist/commands/doctor/mcp-checks.js.map +1 -0
  9. package/dist/commands/doctor/mcp-service-checks.d.ts +35 -0
  10. package/dist/commands/doctor/mcp-service-checks.d.ts.map +1 -0
  11. package/dist/commands/doctor/mcp-service-checks.js +146 -0
  12. package/dist/commands/doctor/mcp-service-checks.js.map +1 -0
  13. package/dist/commands/doctor/types.d.ts +4 -1
  14. package/dist/commands/doctor/types.d.ts.map +1 -1
  15. package/dist/commands/doctor/types.js +1 -0
  16. package/dist/commands/doctor/types.js.map +1 -1
  17. package/dist/commands/init/sso-discovery.d.ts.map +1 -1
  18. package/dist/commands/init/sso-discovery.js +1 -0
  19. package/dist/commands/init/sso-discovery.js.map +1 -1
  20. package/dist/commands/login/index.d.ts +1 -1
  21. package/dist/commands/login/index.d.ts.map +1 -1
  22. package/dist/commands/login/index.js +44 -185
  23. package/dist/commands/login/index.js.map +1 -1
  24. package/dist/commands/login/mcp-steps.d.ts +38 -0
  25. package/dist/commands/login/mcp-steps.d.ts.map +1 -0
  26. package/dist/commands/login/mcp-steps.js +176 -0
  27. package/dist/commands/login/mcp-steps.js.map +1 -0
  28. package/dist/commands/login/npmrc.d.ts +10 -0
  29. package/dist/commands/login/npmrc.d.ts.map +1 -1
  30. package/dist/commands/login/npmrc.js +36 -3
  31. package/dist/commands/login/npmrc.js.map +1 -1
  32. package/dist/commands/login/orchestrator.d.ts +9 -0
  33. package/dist/commands/login/orchestrator.d.ts.map +1 -0
  34. package/dist/commands/login/orchestrator.js +251 -0
  35. package/dist/commands/login/orchestrator.js.map +1 -0
  36. package/dist/commands/login/types.d.ts +11 -0
  37. package/dist/commands/login/types.d.ts.map +1 -1
  38. package/dist/commands/login/types.js.map +1 -1
  39. package/dist/commands/status/aws-checks.d.ts +14 -0
  40. package/dist/commands/status/aws-checks.d.ts.map +1 -0
  41. package/dist/commands/status/aws-checks.js +145 -0
  42. package/dist/commands/status/aws-checks.js.map +1 -0
  43. package/dist/commands/status/checks.d.ts +9 -25
  44. package/dist/commands/status/checks.d.ts.map +1 -1
  45. package/dist/commands/status/checks.js +52 -254
  46. package/dist/commands/status/checks.js.map +1 -1
  47. package/dist/commands/status/index.d.ts.map +1 -1
  48. package/dist/commands/status/index.js +53 -1
  49. package/dist/commands/status/index.js.map +1 -1
  50. package/dist/commands/status/mcp-checks.d.ts +35 -0
  51. package/dist/commands/status/mcp-checks.d.ts.map +1 -0
  52. package/dist/commands/status/mcp-checks.js +175 -0
  53. package/dist/commands/status/mcp-checks.js.map +1 -0
  54. package/dist/commands/status/types.d.ts +34 -0
  55. package/dist/commands/status/types.d.ts.map +1 -1
  56. package/dist/mcp/config/index.d.ts +4 -0
  57. package/dist/mcp/config/index.d.ts.map +1 -0
  58. package/dist/mcp/config/index.js +14 -0
  59. package/dist/mcp/config/index.js.map +1 -0
  60. package/dist/mcp/config/loaders.d.ts +45 -0
  61. package/dist/mcp/config/loaders.d.ts.map +1 -0
  62. package/dist/mcp/config/loaders.js +149 -0
  63. package/dist/mcp/config/loaders.js.map +1 -0
  64. package/dist/mcp/config/types.d.ts +234 -0
  65. package/dist/mcp/config/types.d.ts.map +1 -0
  66. package/dist/mcp/config/types.js +45 -0
  67. package/dist/mcp/config/types.js.map +1 -0
  68. package/dist/mcp/daemon/entry-logic.d.ts +28 -0
  69. package/dist/mcp/daemon/entry-logic.d.ts.map +1 -0
  70. package/dist/mcp/daemon/entry-logic.js +82 -0
  71. package/dist/mcp/daemon/entry-logic.js.map +1 -0
  72. package/dist/mcp/daemon/entry.d.ts +8 -0
  73. package/dist/mcp/daemon/entry.d.ts.map +1 -0
  74. package/dist/mcp/daemon/entry.js +34 -0
  75. package/dist/mcp/daemon/entry.js.map +1 -0
  76. package/dist/mcp/daemon/fork.d.ts +21 -0
  77. package/dist/mcp/daemon/fork.d.ts.map +1 -0
  78. package/dist/mcp/daemon/fork.js +188 -0
  79. package/dist/mcp/daemon/fork.js.map +1 -0
  80. package/dist/mcp/daemon/health.d.ts +8 -0
  81. package/dist/mcp/daemon/health.d.ts.map +1 -0
  82. package/dist/mcp/daemon/health.js +50 -0
  83. package/dist/mcp/daemon/health.js.map +1 -0
  84. package/dist/mcp/daemon/index.d.ts +6 -0
  85. package/dist/mcp/daemon/index.d.ts.map +1 -0
  86. package/dist/mcp/daemon/index.js +22 -0
  87. package/dist/mcp/daemon/index.js.map +1 -0
  88. package/dist/mcp/daemon/types.d.ts +63 -0
  89. package/dist/mcp/daemon/types.d.ts.map +1 -0
  90. package/dist/mcp/daemon/types.js +18 -0
  91. package/dist/mcp/daemon/types.js.map +1 -0
  92. package/dist/mcp/errors/index.d.ts +3 -0
  93. package/dist/mcp/errors/index.d.ts.map +1 -0
  94. package/dist/mcp/errors/index.js +13 -0
  95. package/dist/mcp/errors/index.js.map +1 -0
  96. package/dist/mcp/errors/types.d.ts +83 -0
  97. package/dist/mcp/errors/types.d.ts.map +1 -0
  98. package/dist/mcp/errors/types.js +148 -0
  99. package/dist/mcp/errors/types.js.map +1 -0
  100. package/dist/mcp/providers/atlassian/auth.d.ts +34 -0
  101. package/dist/mcp/providers/atlassian/auth.d.ts.map +1 -0
  102. package/dist/mcp/providers/atlassian/auth.js +107 -0
  103. package/dist/mcp/providers/atlassian/auth.js.map +1 -0
  104. package/dist/mcp/providers/atlassian/client.d.ts +15 -0
  105. package/dist/mcp/providers/atlassian/client.d.ts.map +1 -0
  106. package/dist/mcp/providers/atlassian/client.js +38 -0
  107. package/dist/mcp/providers/atlassian/client.js.map +1 -0
  108. package/dist/mcp/providers/atlassian/index.d.ts +6 -0
  109. package/dist/mcp/providers/atlassian/index.d.ts.map +1 -0
  110. package/dist/mcp/providers/atlassian/index.js +11 -0
  111. package/dist/mcp/providers/atlassian/index.js.map +1 -0
  112. package/dist/mcp/providers/atlassian/markdown-to-adf/index.d.ts +17 -0
  113. package/dist/mcp/providers/atlassian/markdown-to-adf/index.d.ts.map +1 -0
  114. package/dist/mcp/providers/atlassian/markdown-to-adf/index.js +29 -0
  115. package/dist/mcp/providers/atlassian/markdown-to-adf/index.js.map +1 -0
  116. package/dist/mcp/providers/atlassian/markdown-to-adf/nodes.d.ts +43 -0
  117. package/dist/mcp/providers/atlassian/markdown-to-adf/nodes.d.ts.map +1 -0
  118. package/dist/mcp/providers/atlassian/markdown-to-adf/nodes.js +101 -0
  119. package/dist/mcp/providers/atlassian/markdown-to-adf/nodes.js.map +1 -0
  120. package/dist/mcp/providers/atlassian/markdown-to-adf/parser.d.ts +14 -0
  121. package/dist/mcp/providers/atlassian/markdown-to-adf/parser.d.ts.map +1 -0
  122. package/dist/mcp/providers/atlassian/markdown-to-adf/parser.js +250 -0
  123. package/dist/mcp/providers/atlassian/markdown-to-adf/parser.js.map +1 -0
  124. package/dist/mcp/providers/atlassian/provider.d.ts +38 -0
  125. package/dist/mcp/providers/atlassian/provider.d.ts.map +1 -0
  126. package/dist/mcp/providers/atlassian/provider.js +101 -0
  127. package/dist/mcp/providers/atlassian/provider.js.map +1 -0
  128. package/dist/mcp/providers/atlassian/resources.d.ts +4 -0
  129. package/dist/mcp/providers/atlassian/resources.d.ts.map +1 -0
  130. package/dist/mcp/providers/atlassian/resources.js +67 -0
  131. package/dist/mcp/providers/atlassian/resources.js.map +1 -0
  132. package/dist/mcp/providers/atlassian/tools/confluence.d.ts +4 -0
  133. package/dist/mcp/providers/atlassian/tools/confluence.d.ts.map +1 -0
  134. package/dist/mcp/providers/atlassian/tools/confluence.js +169 -0
  135. package/dist/mcp/providers/atlassian/tools/confluence.js.map +1 -0
  136. package/dist/mcp/providers/atlassian/tools/jira.d.ts +4 -0
  137. package/dist/mcp/providers/atlassian/tools/jira.d.ts.map +1 -0
  138. package/dist/mcp/providers/atlassian/tools/jira.js +274 -0
  139. package/dist/mcp/providers/atlassian/tools/jira.js.map +1 -0
  140. package/dist/mcp/providers/gitlab/auth.d.ts +10 -0
  141. package/dist/mcp/providers/gitlab/auth.d.ts.map +1 -0
  142. package/dist/mcp/providers/gitlab/auth.js +23 -0
  143. package/dist/mcp/providers/gitlab/auth.js.map +1 -0
  144. package/dist/mcp/providers/gitlab/client.d.ts +23 -0
  145. package/dist/mcp/providers/gitlab/client.d.ts.map +1 -0
  146. package/dist/mcp/providers/gitlab/client.js +17 -0
  147. package/dist/mcp/providers/gitlab/client.js.map +1 -0
  148. package/dist/mcp/providers/gitlab/index.d.ts +5 -0
  149. package/dist/mcp/providers/gitlab/index.d.ts.map +1 -0
  150. package/dist/mcp/providers/gitlab/index.js +10 -0
  151. package/dist/mcp/providers/gitlab/index.js.map +1 -0
  152. package/dist/mcp/providers/gitlab/provider.d.ts +25 -0
  153. package/dist/mcp/providers/gitlab/provider.d.ts.map +1 -0
  154. package/dist/mcp/providers/gitlab/provider.js +48 -0
  155. package/dist/mcp/providers/gitlab/provider.js.map +1 -0
  156. package/dist/mcp/providers/gitlab/resources.d.ts +11 -0
  157. package/dist/mcp/providers/gitlab/resources.d.ts.map +1 -0
  158. package/dist/mcp/providers/gitlab/resources.js +54 -0
  159. package/dist/mcp/providers/gitlab/resources.js.map +1 -0
  160. package/dist/mcp/providers/gitlab/tools/issues.d.ts +4 -0
  161. package/dist/mcp/providers/gitlab/tools/issues.d.ts.map +1 -0
  162. package/dist/mcp/providers/gitlab/tools/issues.js +120 -0
  163. package/dist/mcp/providers/gitlab/tools/issues.js.map +1 -0
  164. package/dist/mcp/providers/gitlab/tools/merge-requests.d.ts +11 -0
  165. package/dist/mcp/providers/gitlab/tools/merge-requests.d.ts.map +1 -0
  166. package/dist/mcp/providers/gitlab/tools/merge-requests.js +282 -0
  167. package/dist/mcp/providers/gitlab/tools/merge-requests.js.map +1 -0
  168. package/dist/mcp/providers/gitlab/tools/pipelines.d.ts +10 -0
  169. package/dist/mcp/providers/gitlab/tools/pipelines.d.ts.map +1 -0
  170. package/dist/mcp/providers/gitlab/tools/pipelines.js +173 -0
  171. package/dist/mcp/providers/gitlab/tools/pipelines.js.map +1 -0
  172. package/dist/mcp/providers/gitlab/tools/repository.d.ts +4 -0
  173. package/dist/mcp/providers/gitlab/tools/repository.d.ts.map +1 -0
  174. package/dist/mcp/providers/gitlab/tools/repository.js +191 -0
  175. package/dist/mcp/providers/gitlab/tools/repository.js.map +1 -0
  176. package/dist/mcp/providers/index.d.ts +4 -0
  177. package/dist/mcp/providers/index.d.ts.map +1 -0
  178. package/dist/mcp/providers/index.js +6 -0
  179. package/dist/mcp/providers/index.js.map +1 -0
  180. package/dist/mcp/providers/registry.d.ts +90 -0
  181. package/dist/mcp/providers/registry.d.ts.map +1 -0
  182. package/dist/mcp/providers/registry.js +128 -0
  183. package/dist/mcp/providers/registry.js.map +1 -0
  184. package/dist/mcp/providers/tool-helpers.d.ts +14 -0
  185. package/dist/mcp/providers/tool-helpers.d.ts.map +1 -0
  186. package/dist/mcp/providers/tool-helpers.js +12 -0
  187. package/dist/mcp/providers/tool-helpers.js.map +1 -0
  188. package/dist/mcp/providers/types.d.ts +80 -0
  189. package/dist/mcp/providers/types.d.ts.map +1 -0
  190. package/dist/mcp/providers/types.js +13 -0
  191. package/dist/mcp/providers/types.js.map +1 -0
  192. package/dist/mcp/server/auth.d.ts +8 -0
  193. package/dist/mcp/server/auth.d.ts.map +1 -0
  194. package/dist/mcp/server/auth.js +36 -0
  195. package/dist/mcp/server/auth.js.map +1 -0
  196. package/dist/mcp/server/health.d.ts +24 -0
  197. package/dist/mcp/server/health.d.ts.map +1 -0
  198. package/dist/mcp/server/health.js +37 -0
  199. package/dist/mcp/server/health.js.map +1 -0
  200. package/dist/mcp/server/index.d.ts +11 -0
  201. package/dist/mcp/server/index.d.ts.map +1 -0
  202. package/dist/mcp/server/index.js +27 -0
  203. package/dist/mcp/server/index.js.map +1 -0
  204. package/dist/mcp/server/logging.d.ts +46 -0
  205. package/dist/mcp/server/logging.d.ts.map +1 -0
  206. package/dist/mcp/server/logging.js +109 -0
  207. package/dist/mcp/server/logging.js.map +1 -0
  208. package/dist/mcp/server/ratelimit.d.ts +3 -0
  209. package/dist/mcp/server/ratelimit.d.ts.map +1 -0
  210. package/dist/mcp/server/ratelimit.js +70 -0
  211. package/dist/mcp/server/ratelimit.js.map +1 -0
  212. package/dist/mcp/server/routes.d.ts +3 -0
  213. package/dist/mcp/server/routes.d.ts.map +1 -0
  214. package/dist/mcp/server/routes.js +8 -0
  215. package/dist/mcp/server/routes.js.map +1 -0
  216. package/dist/mcp/server/server.d.ts +21 -0
  217. package/dist/mcp/server/server.d.ts.map +1 -0
  218. package/dist/mcp/server/server.js +114 -0
  219. package/dist/mcp/server/server.js.map +1 -0
  220. package/dist/mcp/server/validation.d.ts +22 -0
  221. package/dist/mcp/server/validation.d.ts.map +1 -0
  222. package/dist/mcp/server/validation.js +32 -0
  223. package/dist/mcp/server/validation.js.map +1 -0
  224. package/dist/mcp/store/encrypt.d.ts +22 -0
  225. package/dist/mcp/store/encrypt.d.ts.map +1 -0
  226. package/dist/mcp/store/encrypt.js +66 -0
  227. package/dist/mcp/store/encrypt.js.map +1 -0
  228. package/dist/mcp/store/index.d.ts +12 -0
  229. package/dist/mcp/store/index.d.ts.map +1 -0
  230. package/dist/mcp/store/index.js +16 -0
  231. package/dist/mcp/store/index.js.map +1 -0
  232. package/dist/mcp/store/migrate.d.ts +70 -0
  233. package/dist/mcp/store/migrate.d.ts.map +1 -0
  234. package/dist/mcp/store/migrate.js +211 -0
  235. package/dist/mcp/store/migrate.js.map +1 -0
  236. package/dist/mcp/store/null-token-store.d.ts +22 -0
  237. package/dist/mcp/store/null-token-store.d.ts.map +1 -0
  238. package/dist/mcp/store/null-token-store.js +40 -0
  239. package/dist/mcp/store/null-token-store.js.map +1 -0
  240. package/dist/mcp/store/sqlite.d.ts +27 -0
  241. package/dist/mcp/store/sqlite.d.ts.map +1 -0
  242. package/dist/mcp/store/sqlite.js +100 -0
  243. package/dist/mcp/store/sqlite.js.map +1 -0
  244. package/dist/mcp/store/types.d.ts +183 -0
  245. package/dist/mcp/store/types.d.ts.map +1 -0
  246. package/dist/mcp/store/types.js +13 -0
  247. package/dist/mcp/store/types.js.map +1 -0
  248. package/dist/mcp/token/http-client.d.ts +3 -0
  249. package/dist/mcp/token/http-client.d.ts.map +1 -0
  250. package/dist/mcp/token/http-client.js +186 -0
  251. package/dist/mcp/token/http-client.js.map +1 -0
  252. package/dist/mcp/token/index.d.ts +5 -0
  253. package/dist/mcp/token/index.d.ts.map +1 -0
  254. package/dist/mcp/token/index.js +15 -0
  255. package/dist/mcp/token/index.js.map +1 -0
  256. package/dist/mcp/token/manager.d.ts +54 -0
  257. package/dist/mcp/token/manager.d.ts.map +1 -0
  258. package/dist/mcp/token/manager.js +194 -0
  259. package/dist/mcp/token/manager.js.map +1 -0
  260. package/dist/mcp/token/null-token-manager.d.ts +19 -0
  261. package/dist/mcp/token/null-token-manager.d.ts.map +1 -0
  262. package/dist/mcp/token/null-token-manager.js +50 -0
  263. package/dist/mcp/token/null-token-manager.js.map +1 -0
  264. package/dist/mcp/token/oauth.d.ts +44 -0
  265. package/dist/mcp/token/oauth.d.ts.map +1 -0
  266. package/dist/mcp/token/oauth.js +257 -0
  267. package/dist/mcp/token/oauth.js.map +1 -0
  268. package/dist/mcp/token/types.d.ts +81 -0
  269. package/dist/mcp/token/types.d.ts.map +1 -0
  270. package/dist/mcp/token/types.js +6 -0
  271. package/dist/mcp/token/types.js.map +1 -0
  272. package/package.json +10 -3
package/README.md CHANGED
@@ -11,7 +11,7 @@ npm install -g @padua/cli
11
11
  ### Prerequisites
12
12
 
13
13
  **Required:**
14
- - [Node.js](https://nodejs.org/) v18+
14
+ - [Node.js](https://nodejs.org/) v20+
15
15
  - [AWS CLI v2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
16
16
 
17
17
  **Optional:**
@@ -54,6 +54,106 @@ The `init` command will:
54
54
  | | Status | Health check for all authentication services |
55
55
  | | Doctor | Configuration validation and diagnostics with fuzzy profile matching |
56
56
  | **Tunnel** | RDS | Secure tunnels to RDS/Aurora databases via SSM |
57
+ | **MCP** | Server | Built-in MCP server with 49 GitLab and Atlassian tools |
58
+ | | Daemon | Background process management via `padua login` |
59
+ | | Diagnostics | MCP health checks via `padua doctor` |
60
+ | | Migration | Token migration from legacy Go server |
61
+
62
+ ## MCP Server
63
+
64
+ `@padua/cli` v2.0.0 includes a built-in MCP (Model Context Protocol) server that provides 49 tools for GitLab and Atlassian integration, accessible from AI-powered IDEs.
65
+
66
+ ### How It Works
67
+
68
+ Running `padua login` now performs a 7-step authentication flow:
69
+
70
+ 1. **AWS SSO** — Authenticate to AWS
71
+ 2. **S3 Config** — Download MCP provider configuration
72
+ 3. **CodeArtifact** — Configure npm registry
73
+ 4. **ECR** — Configure Docker registry
74
+ 5. **GitLab** — OAuth2 PKCE authentication
75
+ 6. **Atlassian** — OAuth2 authentication
76
+ 7. **MCP Daemon** — Start background server on port 8919
77
+
78
+ The MCP daemon runs as a background process and serves tools via HTTP at `http://127.0.0.1:8919/mcp`.
79
+
80
+ ### Available Tools
81
+
82
+ | Provider | Tools | Examples |
83
+ |----------|-------|---------|
84
+ | **GitLab** (30 tools) | Repository, Issue, Merge Request, Pipeline management | `gitlab_list_projects`, `gitlab_create_merge_request`, `gitlab_get_job_log` |
85
+ | **Atlassian** (19 tools) | Jira issues, Confluence pages, search, transitions | `jira_search_issues`, `jira_create_issue`, `confluence_get_page` |
86
+
87
+ Plus 6 resource templates for direct resource access.
88
+
89
+ ### IDE Configuration
90
+
91
+ **Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json`):
92
+
93
+ ```json
94
+ {
95
+ "mcpServers": {
96
+ "padua": {
97
+ "url": "http://127.0.0.1:8919/mcp"
98
+ }
99
+ }
100
+ }
101
+ ```
102
+
103
+ **Cursor** (`.cursor/mcp.json`):
104
+
105
+ ```json
106
+ {
107
+ "mcpServers": {
108
+ "padua": {
109
+ "url": "http://127.0.0.1:8919/mcp"
110
+ }
111
+ }
112
+ }
113
+ ```
114
+
115
+ ### MCP Diagnostics
116
+
117
+ Run `padua doctor` to check MCP server health:
118
+
119
+ ```bash
120
+ padua doctor
121
+ ```
122
+
123
+ The doctor command now includes MCP-specific checks:
124
+ - Node.js version (>= 20.0.0)
125
+ - MCP provider configuration
126
+ - Token store integrity
127
+ - Encryption key availability
128
+ - Port availability
129
+ - Daemon health
130
+ - GitLab and Atlassian API connectivity
131
+
132
+ ### Token Migration
133
+
134
+ If upgrading from the standalone `padua-mcp` Go server:
135
+
136
+ ```bash
137
+ padua doctor --migrate-tokens
138
+ ```
139
+
140
+ This migrates encrypted tokens from the legacy `padua-mcp` database to the new integrated store.
141
+
142
+ ### Troubleshooting
143
+
144
+ | Issue | Solution |
145
+ |-------|----------|
146
+ | Daemon not starting | Run `padua doctor` for diagnostics |
147
+ | Port 8919 in use | Set `mcp.port` in `~/.padua/padua.config.json` |
148
+ | Token issues | Delete `~/.padua/tokens.db` and run `padua login` |
149
+ | Legacy daemon running | `pkill -f padua-mcp-daemon` |
150
+
151
+ ### Downgrade to 1.x
152
+
153
+ ```bash
154
+ npm install -g @padua/cli@1
155
+ pkill -f padua-mcp-daemon
156
+ ```
57
157
 
58
158
  ## Init Command
59
159
 
@@ -200,19 +300,31 @@ padua login
200
300
  ### Example Output
201
301
 
202
302
  ```
203
- [1/3] AWS SSO ...
204
- ✓ authenticated (profile: development)
205
- [2/3] CodeArtifact (npm) ...
303
+ [1/7] AWS SSO ...
304
+ ✓ authenticated (profile: paduafg-development)
305
+ [2/7] S3 Config ...
306
+ ✓ downloaded
307
+ [3/7] CodeArtifact (npm) ...
206
308
  ✓ configured
207
- [3/3] ECR (Docker) ...
309
+ [4/7] ECR (Docker) ...
208
310
  ✓ configured
311
+ [5/7] GitLab Auth ...
312
+ ✓ authenticated
313
+ [6/7] Atlassian Auth ...
314
+ ✓ authenticated
315
+ [7/7] MCP Daemon ...
316
+ ✓ running (http://127.0.0.1:8919/mcp)
209
317
 
210
318
  === Login Results ===
211
319
  SSO: ✓ OK
320
+ S3 Config: ✓ OK
212
321
  CodeArtifact: ✓ OK
213
322
  ECR: ✓ OK
323
+ GitLab: ✓ OK
324
+ Atlassian: ✓ OK
325
+ MCP Daemon: ✓ OK
214
326
 
215
- Total: 3/3 services authenticated
327
+ Total: 7/7 services authenticated
216
328
  ```
217
329
 
218
330
  ## Configuration
@@ -326,6 +438,9 @@ The doctor command performs comprehensive validation:
326
438
  4. **Prerequisites** - Checks AWS CLI, npm, Docker, Session Manager Plugin installation status and versions
327
439
  5. **Authentication** - Validates SSO, CodeArtifact, and ECR authentication status
328
440
  6. **Installation** - Compares current CLI version with latest published version on npm
441
+ 7. **MCP Server** - Node.js version (>= 20.0.0), MCP provider config, token store integrity, encryption key, port availability, daemon health, GitLab and Atlassian API connectivity
442
+
443
+ Use `--migrate-tokens` to migrate encrypted tokens from a legacy `padua-mcp` Go server database.
329
444
 
330
445
  ### Example Output
331
446
 
@@ -410,7 +525,11 @@ padua profile --select-only # Select and output name only
410
525
 
411
526
  ### Shell Integration (paws)
412
527
 
413
- Add the `paws` function to your shell for quick profile switching:
528
+ `paws` is a shell function that switches AWS profiles by setting `AWS_PROFILE` in your current shell session. All Padua commands (`padua login`, `padua status`, `padua tunnel`) automatically pick up the active profile.
529
+
530
+ #### Installation
531
+
532
+ Run `padua profile --setup` and append the output to your shell profile:
414
533
 
415
534
  ```bash
416
535
  # Bash
@@ -418,15 +537,49 @@ padua profile --setup >> ~/.bashrc && source ~/.bashrc
418
537
 
419
538
  # Zsh
420
539
  padua profile --setup >> ~/.zshrc && source ~/.zshrc
540
+
541
+ # PowerShell
542
+ padua profile --setup | Out-File -Append $PROFILE
543
+ . $PROFILE
421
544
  ```
422
545
 
423
- Then use:
546
+ This installs the `paws` function and tab completion for available profiles.
547
+
548
+ #### Usage
549
+
424
550
  ```bash
425
- paws # Interactive profile selection
426
- paws paduafg-development # Switch to specific profile
551
+ paws # Interactive profile selection (arrow keys)
552
+ paws <profile-name> # Switch to a specific profile directly
553
+ paws clear # Unset all AWS environment variables
427
554
  ```
428
555
 
429
- The `paws` function sets `AWS_PROFILE`, which is automatically picked up by `padua status`, `padua login`, `padua tunnel`, and other commands.
556
+ | Command | Description |
557
+ |---------|-------------|
558
+ | `paws` | Opens an interactive list of available SSO profiles |
559
+ | `paws <name>` | Sets `AWS_PROFILE` to the given profile name |
560
+ | `paws clear` | Unsets `AWS_PROFILE`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_SESSION_TOKEN`, `AWS_DEFAULT_REGION`, `AWS_REGION`, and `AWS_DEFAULT_PROFILE` |
561
+
562
+ #### Tab Completion
563
+
564
+ Tab completion is included automatically with the shell function. Press `Tab` after typing `paws ` to see available profiles and the `clear` subcommand.
565
+
566
+ #### Example Workflow
567
+
568
+ ```bash
569
+ # Switch to development profile
570
+ paws paduafg-development
571
+ # AWS_PROFILE set to: paduafg-development
572
+
573
+ # Login using the active profile
574
+ padua login
575
+
576
+ # Check status
577
+ padua status
578
+
579
+ # Clear profile when done
580
+ paws clear
581
+ # AWS environment variables cleared
582
+ ```
430
583
 
431
584
  ## Tunnel Command
432
585
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAiB,WAAW,EAAE,MAAM,SAAS,CAAC;AAUlF;;GAEG;AACH,eAAO,MAAM,aAAa,SAKH,CAAC;AAExB;;GAEG;AACH,iBAAe,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFjE;AAED;;GAEG;AACH,iBAAS,YAAY,CACnB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAChD,IAAI,CAwCN;AAED;;GAEG;AACH,iBAAS,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA4BlF;AAGD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAiB,WAAW,EAAE,MAAM,SAAS,CAAC;AAsBlF;;GAEG;AACH,eAAO,MAAM,aAAa,SAMH,CAAC;AAExB;;GAEG;AACH,iBAAe,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA+IjE;AAED;;GAEG;AACH,iBAAS,YAAY,CACnB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAChD,IAAI,CAwCN;AAED;;GAEG;AACH,iBAAS,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA4BlF;AAyCD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC"}
@@ -12,10 +12,14 @@ exports.displayCheck = displayCheck;
12
12
  exports.displaySummary = displaySummary;
13
13
  const commander_1 = require("commander");
14
14
  const chalk_1 = __importDefault(require("chalk"));
15
+ const node_path_1 = require("node:path");
16
+ const node_os_1 = require("node:os");
15
17
  const config_1 = require("../login/config");
16
18
  const types_1 = require("../login/types");
17
19
  const types_2 = require("./types");
20
+ const migrate_1 = require("../../mcp/store/migrate");
18
21
  const checks_1 = require("./checks");
22
+ const mcp_checks_1 = require("./mcp-checks");
19
23
  /**
20
24
  * Doctor command definition
21
25
  */
@@ -24,6 +28,7 @@ exports.doctorCommand = new commander_1.Command('doctor')
24
28
  .option('--fix', 'Attempt to auto-fix common issues (not yet implemented)')
25
29
  .option('-v, --verbose', 'Show detailed diagnostic information')
26
30
  .option('--no-color', 'Disable colored output')
31
+ .option('--migrate-tokens', 'Migrate tokens from legacy padua-mcp database')
27
32
  .action(handleDoctor);
28
33
  /**
29
34
  * Main handler for doctor command
@@ -36,6 +41,23 @@ async function handleDoctor(options) {
36
41
  const warning = (text) => noColor ? text : chalk_1.default.yellow(text);
37
42
  const error = (text) => noColor ? text : chalk_1.default.red(text);
38
43
  const dim = (text) => noColor ? text : chalk_1.default.dim(text);
44
+ // --migrate-tokens: run migration and exit without running full doctor checks
45
+ if (options.migrateTokens) {
46
+ const key = process.env.PADUA_DB_ENCRYPTION_KEY;
47
+ if (!key) {
48
+ console.log(error('Error: PADUA_DB_ENCRYPTION_KEY not set'));
49
+ process.exit(1);
50
+ }
51
+ const targetDb = (0, node_path_1.join)((0, node_os_1.homedir)(), '.padua', 'tokens.db');
52
+ const result = (0, migrate_1.migrateFromGo)(key, targetDb);
53
+ if (result.migrated) {
54
+ console.log(success(`Migrated ${result.tokensCount} tokens from legacy database`));
55
+ }
56
+ else {
57
+ console.log(warning(`Migration skipped: ${result.reason}`));
58
+ }
59
+ process.exit(0);
60
+ }
39
61
  console.log('');
40
62
  console.log(title('🏥 Padua CLI Doctor'));
41
63
  console.log('');
@@ -86,6 +108,34 @@ async function handleDoctor(options) {
86
108
  allChecks.push(versionCheck);
87
109
  displayCheck(versionCheck, { noColor, verbose });
88
110
  console.log('');
111
+ // 7. MCP Diagnostics
112
+ console.log(title(types_2.CheckCategory.MCP));
113
+ const mcpNodeCheck = (0, mcp_checks_1.checkNodeVersion)();
114
+ allChecks.push(mcpNodeCheck);
115
+ displayCheck(mcpNodeCheck, { noColor, verbose });
116
+ const mcpConfigCheck = (0, mcp_checks_1.checkMcpConfig)();
117
+ allChecks.push(mcpConfigCheck);
118
+ displayCheck(mcpConfigCheck, { noColor, verbose });
119
+ const mcpTokenStoreCheck = (0, mcp_checks_1.checkTokenStore)();
120
+ allChecks.push(mcpTokenStoreCheck);
121
+ displayCheck(mcpTokenStoreCheck, { noColor, verbose });
122
+ const mcpEncryptionCheck = (0, mcp_checks_1.checkEncryptionKey)();
123
+ allChecks.push(mcpEncryptionCheck);
124
+ displayCheck(mcpEncryptionCheck, { noColor, verbose });
125
+ const mcpPortCheck = await (0, mcp_checks_1.checkMcpPort)();
126
+ allChecks.push(mcpPortCheck);
127
+ displayCheck(mcpPortCheck, { noColor, verbose });
128
+ const mcpDaemonCheck = await (0, mcp_checks_1.checkMcpDaemon)();
129
+ allChecks.push(mcpDaemonCheck);
130
+ displayCheck(mcpDaemonCheck, { noColor, verbose });
131
+ const { gitlabToken, atlassianToken } = readTokensFromStore();
132
+ const gitlabCheck = (0, mcp_checks_1.checkGitLabApi)(gitlabToken);
133
+ allChecks.push(gitlabCheck);
134
+ displayCheck(gitlabCheck, { noColor, verbose });
135
+ const atlassianCheck = (0, mcp_checks_1.checkAtlassianApi)(atlassianToken);
136
+ allChecks.push(atlassianCheck);
137
+ displayCheck(atlassianCheck, { noColor, verbose });
138
+ console.log('');
89
139
  // Calculate summary
90
140
  const result = {
91
141
  checks: allChecks,
@@ -165,4 +215,39 @@ function displaySummary(result, options) {
165
215
  }
166
216
  console.log('');
167
217
  }
218
+ /**
219
+ * Read GitLab and Atlassian token expiry info from the SQLite store.
220
+ * Returns null for any token that cannot be read (missing db, bad key, etc.).
221
+ * This is intentionally non-throwing — doctor must never crash on a bad store.
222
+ */
223
+ function readTokensFromStore() {
224
+ try {
225
+ const { SqliteTokenStore } = require('../../mcp/store/sqlite');
226
+ const { createEncryptor } = require('../../mcp/store/encrypt');
227
+ const storeDb = require('os').homedir() + '/.padua/tokens.db';
228
+ if (!require('fs').existsSync(storeDb)) {
229
+ return { gitlabToken: null, atlassianToken: null };
230
+ }
231
+ const key = process.env.PADUA_DB_ENCRYPTION_KEY;
232
+ if (!key) {
233
+ return { gitlabToken: null, atlassianToken: null };
234
+ }
235
+ const encryptor = createEncryptor(key);
236
+ const store = SqliteTokenStore.create(storeDb, encryptor);
237
+ try {
238
+ const gitlab = store.get('gitlab');
239
+ const atlassian = store.get('atlassian');
240
+ return {
241
+ gitlabToken: gitlab ? { expiresAt: gitlab.expiresAt } : null,
242
+ atlassianToken: atlassian ? { expiresAt: atlassian.expiresAt } : null,
243
+ };
244
+ }
245
+ finally {
246
+ store.close();
247
+ }
248
+ }
249
+ catch {
250
+ return { gitlabToken: null, atlassianToken: null };
251
+ }
252
+ }
168
253
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/doctor/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/doctor/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * MCP infrastructure diagnostic checks for the doctor command.
3
+ *
4
+ * Covers: Node.js version, mcp-providers.json, token store, encryption key,
5
+ * and MCP port availability.
6
+ *
7
+ * All checks are read-only and non-destructive. Each returns a DoctorCheck
8
+ * and must never throw — errors are caught and surfaced as fail/warn results.
9
+ */
10
+ import { DoctorCheck } from './types';
11
+ export { checkMcpDaemon, checkGitLabApi, checkAtlassianApi, TokenInfo, } from './mcp-service-checks';
12
+ /**
13
+ * Check Node.js version meets the >=20.0.0 requirement for MCP features.
14
+ */
15
+ export declare function checkNodeVersion(): DoctorCheck;
16
+ /**
17
+ * Check ~/.padua/mcp-providers.json exists and contains valid JSON.
18
+ */
19
+ export declare function checkMcpConfig(): DoctorCheck;
20
+ /**
21
+ * Check ~/.padua/tokens.db exists and can be opened by better-sqlite3.
22
+ * Missing file is a warn (created on first login); corrupt file is a fail.
23
+ */
24
+ export declare function checkTokenStore(): DoctorCheck;
25
+ /**
26
+ * Check if the AES-256-GCM encryption key source is available.
27
+ * Currently only validates the env var path; keychain integration is future work.
28
+ */
29
+ export declare function checkEncryptionKey(): DoctorCheck;
30
+ /**
31
+ * Check if the MCP port (default 8919) is available or owned by the daemon.
32
+ * Uses net.createServer to probe availability; reads the PID file to
33
+ * determine whether an existing listener is the MCP daemon.
34
+ */
35
+ export declare function checkMcpPort(port?: number): Promise<DoctorCheck>;
36
+ //# sourceMappingURL=mcp-checks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-checks.d.ts","sourceRoot":"","sources":["../../../src/commands/doctor/mcp-checks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,SAAS,GACV,MAAM,sBAAsB,CAAC;AAY9B;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,CAkB9C;AAMD;;GAEG;AACH,wBAAgB,cAAc,IAAI,WAAW,CA0B5C;AAMD;;;GAGG;AACH,wBAAgB,eAAe,IAAI,WAAW,CA6B7C;AAMD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,WAAW,CAiBhD;AAMD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,SAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,CAiD1E"}
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ /**
3
+ * MCP infrastructure diagnostic checks for the doctor command.
4
+ *
5
+ * Covers: Node.js version, mcp-providers.json, token store, encryption key,
6
+ * and MCP port availability.
7
+ *
8
+ * All checks are read-only and non-destructive. Each returns a DoctorCheck
9
+ * and must never throw — errors are caught and surfaced as fail/warn results.
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.checkAtlassianApi = exports.checkGitLabApi = exports.checkMcpDaemon = void 0;
46
+ exports.checkNodeVersion = checkNodeVersion;
47
+ exports.checkMcpConfig = checkMcpConfig;
48
+ exports.checkTokenStore = checkTokenStore;
49
+ exports.checkEncryptionKey = checkEncryptionKey;
50
+ exports.checkMcpPort = checkMcpPort;
51
+ const fs = __importStar(require("fs"));
52
+ const net = __importStar(require("net"));
53
+ const os = __importStar(require("os"));
54
+ const path = __importStar(require("path"));
55
+ // Re-export service checks so callers only import from one module
56
+ var mcp_service_checks_1 = require("./mcp-service-checks");
57
+ Object.defineProperty(exports, "checkMcpDaemon", { enumerable: true, get: function () { return mcp_service_checks_1.checkMcpDaemon; } });
58
+ Object.defineProperty(exports, "checkGitLabApi", { enumerable: true, get: function () { return mcp_service_checks_1.checkGitLabApi; } });
59
+ Object.defineProperty(exports, "checkAtlassianApi", { enumerable: true, get: function () { return mcp_service_checks_1.checkAtlassianApi; } });
60
+ const PADUA_DIR = path.join(os.homedir(), '.padua');
61
+ const MCP_PROVIDERS_PATH = path.join(PADUA_DIR, 'mcp-providers.json');
62
+ const TOKENS_DB_PATH = path.join(PADUA_DIR, 'tokens.db');
63
+ const MCP_PID_FILE = path.join(PADUA_DIR, 'mcp-server.pid');
64
+ const DEFAULT_MCP_PORT = 8919;
65
+ // ---------------------------------------------------------------------------
66
+ // 1. checkNodeVersion
67
+ // ---------------------------------------------------------------------------
68
+ /**
69
+ * Check Node.js version meets the >=20.0.0 requirement for MCP features.
70
+ */
71
+ function checkNodeVersion() {
72
+ const version = process.versions.node;
73
+ const [major] = version.split('.').map(Number);
74
+ if (major >= 20) {
75
+ return {
76
+ name: 'Node.js version',
77
+ status: 'pass',
78
+ message: `Node.js v${version} (>=20.0.0 required)`,
79
+ };
80
+ }
81
+ return {
82
+ name: 'Node.js version',
83
+ status: 'fail',
84
+ message: `Node.js v${version} — version 20+ required for MCP features`,
85
+ suggestion: 'Use nvm: `nvm install 20 && nvm use 20`, then reinstall: `npm install -g @padua/cli`',
86
+ };
87
+ }
88
+ // ---------------------------------------------------------------------------
89
+ // 2. checkMcpConfig
90
+ // ---------------------------------------------------------------------------
91
+ /**
92
+ * Check ~/.padua/mcp-providers.json exists and contains valid JSON.
93
+ */
94
+ function checkMcpConfig() {
95
+ if (!fs.existsSync(MCP_PROVIDERS_PATH)) {
96
+ return {
97
+ name: 'MCP providers config',
98
+ status: 'fail',
99
+ message: 'mcp-providers.json not found',
100
+ suggestion: "Run 'padua login' to download the latest provider config",
101
+ };
102
+ }
103
+ try {
104
+ const content = fs.readFileSync(MCP_PROVIDERS_PATH, 'utf-8');
105
+ JSON.parse(content);
106
+ return {
107
+ name: 'MCP providers config',
108
+ status: 'pass',
109
+ message: 'mcp-providers.json found and valid',
110
+ };
111
+ }
112
+ catch {
113
+ return {
114
+ name: 'MCP providers config',
115
+ status: 'fail',
116
+ message: 'mcp-providers.json contains invalid JSON',
117
+ suggestion: "Run 'padua login' to download the latest provider config",
118
+ };
119
+ }
120
+ }
121
+ // ---------------------------------------------------------------------------
122
+ // 3. checkTokenStore
123
+ // ---------------------------------------------------------------------------
124
+ /**
125
+ * Check ~/.padua/tokens.db exists and can be opened by better-sqlite3.
126
+ * Missing file is a warn (created on first login); corrupt file is a fail.
127
+ */
128
+ function checkTokenStore() {
129
+ if (!fs.existsSync(TOKENS_DB_PATH)) {
130
+ return {
131
+ name: 'Token store',
132
+ status: 'warn',
133
+ message: 'tokens.db not found — will be created on first login',
134
+ suggestion: "Delete ~/.padua/tokens.db and run 'padua login' to recreate",
135
+ };
136
+ }
137
+ try {
138
+ // Dynamic require so the module can be mocked in tests
139
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
140
+ const Database = require('better-sqlite3');
141
+ const db = new Database(TOKENS_DB_PATH, { readonly: true });
142
+ db.close();
143
+ return {
144
+ name: 'Token store',
145
+ status: 'pass',
146
+ message: 'tokens.db exists and schema version correct',
147
+ };
148
+ }
149
+ catch {
150
+ return {
151
+ name: 'Token store',
152
+ status: 'fail',
153
+ message: 'tokens.db exists but cannot be opened',
154
+ suggestion: "Delete ~/.padua/tokens.db and run 'padua login' to recreate",
155
+ };
156
+ }
157
+ }
158
+ // ---------------------------------------------------------------------------
159
+ // 4. checkEncryptionKey
160
+ // ---------------------------------------------------------------------------
161
+ /**
162
+ * Check if the AES-256-GCM encryption key source is available.
163
+ * Currently only validates the env var path; keychain integration is future work.
164
+ */
165
+ function checkEncryptionKey() {
166
+ const keyEnv = process.env.PADUA_DB_ENCRYPTION_KEY;
167
+ if (keyEnv) {
168
+ return {
169
+ name: 'Encryption key',
170
+ status: 'pass',
171
+ message: 'Encryption key available via PADUA_DB_ENCRYPTION_KEY',
172
+ };
173
+ }
174
+ return {
175
+ name: 'Encryption key',
176
+ status: 'warn',
177
+ message: 'PADUA_DB_ENCRYPTION_KEY not set and keychain unavailable — padua login will fail if tokens exist',
178
+ suggestion: 'Set PADUA_DB_ENCRYPTION_KEY or ensure OS keychain is accessible',
179
+ };
180
+ }
181
+ // ---------------------------------------------------------------------------
182
+ // 5. checkMcpPort
183
+ // ---------------------------------------------------------------------------
184
+ /**
185
+ * Check if the MCP port (default 8919) is available or owned by the daemon.
186
+ * Uses net.createServer to probe availability; reads the PID file to
187
+ * determine whether an existing listener is the MCP daemon.
188
+ */
189
+ function checkMcpPort(port = DEFAULT_MCP_PORT) {
190
+ return new Promise((resolve) => {
191
+ const server = net.createServer();
192
+ server.once('listening', () => {
193
+ server.close(() => {
194
+ resolve({
195
+ name: 'MCP port',
196
+ status: 'pass',
197
+ message: `Port ${port} available`,
198
+ });
199
+ });
200
+ });
201
+ server.once('error', (err) => {
202
+ if (err.code !== 'EADDRINUSE') {
203
+ resolve({
204
+ name: 'MCP port',
205
+ status: 'fail',
206
+ message: `Port ${port} check failed: ${err.message}`,
207
+ suggestion: `Configure mcp.port in padua.config.json or stop the process using port ${port}`,
208
+ });
209
+ return;
210
+ }
211
+ if (fs.existsSync(MCP_PID_FILE)) {
212
+ try {
213
+ const pid = parseInt(fs.readFileSync(MCP_PID_FILE, 'utf-8').trim(), 10);
214
+ resolve({
215
+ name: 'MCP port',
216
+ status: 'pass',
217
+ message: `Port ${port} in use by MCP daemon (PID ${pid})`,
218
+ });
219
+ return;
220
+ }
221
+ catch {
222
+ // PID file unreadable — fall through to generic fail
223
+ }
224
+ }
225
+ resolve({
226
+ name: 'MCP port',
227
+ status: 'fail',
228
+ message: `Port ${port} in use by another process`,
229
+ suggestion: `Configure mcp.port in padua.config.json or stop the process using port ${port}`,
230
+ });
231
+ });
232
+ server.listen(port, '127.0.0.1');
233
+ });
234
+ }
235
+ //# sourceMappingURL=mcp-checks.js.map