@generacy-ai/generacy 0.0.0-preview-20260304013206

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 (244) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +207 -0
  3. package/bin/generacy.js +11 -0
  4. package/dist/agency/index.d.ts +68 -0
  5. package/dist/agency/index.d.ts.map +1 -0
  6. package/dist/agency/index.js +28 -0
  7. package/dist/agency/index.js.map +1 -0
  8. package/dist/agency/network.d.ts +41 -0
  9. package/dist/agency/network.d.ts.map +1 -0
  10. package/dist/agency/network.js +133 -0
  11. package/dist/agency/network.js.map +1 -0
  12. package/dist/agency/subprocess.d.ts +58 -0
  13. package/dist/agency/subprocess.d.ts.map +1 -0
  14. package/dist/agency/subprocess.js +216 -0
  15. package/dist/agency/subprocess.js.map +1 -0
  16. package/dist/cli/commands/agent.d.ts +10 -0
  17. package/dist/cli/commands/agent.d.ts.map +1 -0
  18. package/dist/cli/commands/agent.js +216 -0
  19. package/dist/cli/commands/agent.js.map +1 -0
  20. package/dist/cli/commands/doctor/checks/agency-mcp.d.ts +3 -0
  21. package/dist/cli/commands/doctor/checks/agency-mcp.d.ts.map +1 -0
  22. package/dist/cli/commands/doctor/checks/agency-mcp.js +51 -0
  23. package/dist/cli/commands/doctor/checks/agency-mcp.js.map +1 -0
  24. package/dist/cli/commands/doctor/checks/anthropic-key.d.ts +3 -0
  25. package/dist/cli/commands/doctor/checks/anthropic-key.d.ts.map +1 -0
  26. package/dist/cli/commands/doctor/checks/anthropic-key.js +68 -0
  27. package/dist/cli/commands/doctor/checks/anthropic-key.js.map +1 -0
  28. package/dist/cli/commands/doctor/checks/config.d.ts +3 -0
  29. package/dist/cli/commands/doctor/checks/config.d.ts.map +1 -0
  30. package/dist/cli/commands/doctor/checks/config.js +81 -0
  31. package/dist/cli/commands/doctor/checks/config.js.map +1 -0
  32. package/dist/cli/commands/doctor/checks/devcontainer.d.ts +3 -0
  33. package/dist/cli/commands/doctor/checks/devcontainer.d.ts.map +1 -0
  34. package/dist/cli/commands/doctor/checks/devcontainer.js +58 -0
  35. package/dist/cli/commands/doctor/checks/devcontainer.js.map +1 -0
  36. package/dist/cli/commands/doctor/checks/docker.d.ts +3 -0
  37. package/dist/cli/commands/doctor/checks/docker.d.ts.map +1 -0
  38. package/dist/cli/commands/doctor/checks/docker.js +71 -0
  39. package/dist/cli/commands/doctor/checks/docker.js.map +1 -0
  40. package/dist/cli/commands/doctor/checks/env-file.d.ts +3 -0
  41. package/dist/cli/commands/doctor/checks/env-file.d.ts.map +1 -0
  42. package/dist/cli/commands/doctor/checks/env-file.js +56 -0
  43. package/dist/cli/commands/doctor/checks/env-file.js.map +1 -0
  44. package/dist/cli/commands/doctor/checks/github-token.d.ts +3 -0
  45. package/dist/cli/commands/doctor/checks/github-token.d.ts.map +1 -0
  46. package/dist/cli/commands/doctor/checks/github-token.js +99 -0
  47. package/dist/cli/commands/doctor/checks/github-token.js.map +1 -0
  48. package/dist/cli/commands/doctor/checks/npm-packages.d.ts +3 -0
  49. package/dist/cli/commands/doctor/checks/npm-packages.d.ts.map +1 -0
  50. package/dist/cli/commands/doctor/checks/npm-packages.js +117 -0
  51. package/dist/cli/commands/doctor/checks/npm-packages.js.map +1 -0
  52. package/dist/cli/commands/doctor/formatter.d.ts +27 -0
  53. package/dist/cli/commands/doctor/formatter.d.ts.map +1 -0
  54. package/dist/cli/commands/doctor/formatter.js +162 -0
  55. package/dist/cli/commands/doctor/formatter.js.map +1 -0
  56. package/dist/cli/commands/doctor/index.d.ts +5 -0
  57. package/dist/cli/commands/doctor/index.d.ts.map +1 -0
  58. package/dist/cli/commands/doctor/index.js +8 -0
  59. package/dist/cli/commands/doctor/index.js.map +1 -0
  60. package/dist/cli/commands/doctor/registry.d.ts +48 -0
  61. package/dist/cli/commands/doctor/registry.d.ts.map +1 -0
  62. package/dist/cli/commands/doctor/registry.js +166 -0
  63. package/dist/cli/commands/doctor/registry.js.map +1 -0
  64. package/dist/cli/commands/doctor/runner.d.ts +14 -0
  65. package/dist/cli/commands/doctor/runner.d.ts.map +1 -0
  66. package/dist/cli/commands/doctor/runner.js +257 -0
  67. package/dist/cli/commands/doctor/runner.js.map +1 -0
  68. package/dist/cli/commands/doctor/types.d.ts +87 -0
  69. package/dist/cli/commands/doctor/types.d.ts.map +1 -0
  70. package/dist/cli/commands/doctor/types.js +2 -0
  71. package/dist/cli/commands/doctor/types.js.map +1 -0
  72. package/dist/cli/commands/doctor.d.ts +12 -0
  73. package/dist/cli/commands/doctor.d.ts.map +1 -0
  74. package/dist/cli/commands/doctor.js +97 -0
  75. package/dist/cli/commands/doctor.js.map +1 -0
  76. package/dist/cli/commands/init/conflicts.d.ts +36 -0
  77. package/dist/cli/commands/init/conflicts.d.ts.map +1 -0
  78. package/dist/cli/commands/init/conflicts.js +165 -0
  79. package/dist/cli/commands/init/conflicts.js.map +1 -0
  80. package/dist/cli/commands/init/github.d.ts +32 -0
  81. package/dist/cli/commands/init/github.d.ts.map +1 -0
  82. package/dist/cli/commands/init/github.js +161 -0
  83. package/dist/cli/commands/init/github.js.map +1 -0
  84. package/dist/cli/commands/init/index.d.ts +21 -0
  85. package/dist/cli/commands/init/index.d.ts.map +1 -0
  86. package/dist/cli/commands/init/index.js +175 -0
  87. package/dist/cli/commands/init/index.js.map +1 -0
  88. package/dist/cli/commands/init/prompts.d.ts +15 -0
  89. package/dist/cli/commands/init/prompts.d.ts.map +1 -0
  90. package/dist/cli/commands/init/prompts.js +281 -0
  91. package/dist/cli/commands/init/prompts.js.map +1 -0
  92. package/dist/cli/commands/init/repo-utils.d.ts +32 -0
  93. package/dist/cli/commands/init/repo-utils.d.ts.map +1 -0
  94. package/dist/cli/commands/init/repo-utils.js +112 -0
  95. package/dist/cli/commands/init/repo-utils.js.map +1 -0
  96. package/dist/cli/commands/init/resolver.d.ts +20 -0
  97. package/dist/cli/commands/init/resolver.d.ts.map +1 -0
  98. package/dist/cli/commands/init/resolver.js +273 -0
  99. package/dist/cli/commands/init/resolver.js.map +1 -0
  100. package/dist/cli/commands/init/summary.d.ts +21 -0
  101. package/dist/cli/commands/init/summary.d.ts.map +1 -0
  102. package/dist/cli/commands/init/summary.js +100 -0
  103. package/dist/cli/commands/init/summary.js.map +1 -0
  104. package/dist/cli/commands/init/types.d.ts +53 -0
  105. package/dist/cli/commands/init/types.d.ts.map +1 -0
  106. package/dist/cli/commands/init/types.js +2 -0
  107. package/dist/cli/commands/init/types.js.map +1 -0
  108. package/dist/cli/commands/init/writer.d.ts +22 -0
  109. package/dist/cli/commands/init/writer.d.ts.map +1 -0
  110. package/dist/cli/commands/init/writer.js +96 -0
  111. package/dist/cli/commands/init/writer.js.map +1 -0
  112. package/dist/cli/commands/orchestrator.d.ts +11 -0
  113. package/dist/cli/commands/orchestrator.d.ts.map +1 -0
  114. package/dist/cli/commands/orchestrator.js +291 -0
  115. package/dist/cli/commands/orchestrator.js.map +1 -0
  116. package/dist/cli/commands/run.d.ts +10 -0
  117. package/dist/cli/commands/run.d.ts.map +1 -0
  118. package/dist/cli/commands/run.js +167 -0
  119. package/dist/cli/commands/run.js.map +1 -0
  120. package/dist/cli/commands/setup/auth.d.ts +11 -0
  121. package/dist/cli/commands/setup/auth.d.ts.map +1 -0
  122. package/dist/cli/commands/setup/auth.js +108 -0
  123. package/dist/cli/commands/setup/auth.js.map +1 -0
  124. package/dist/cli/commands/setup/build.d.ts +11 -0
  125. package/dist/cli/commands/setup/build.d.ts.map +1 -0
  126. package/dist/cli/commands/setup/build.js +212 -0
  127. package/dist/cli/commands/setup/build.js.map +1 -0
  128. package/dist/cli/commands/setup/services.d.ts +11 -0
  129. package/dist/cli/commands/setup/services.d.ts.map +1 -0
  130. package/dist/cli/commands/setup/services.js +294 -0
  131. package/dist/cli/commands/setup/services.js.map +1 -0
  132. package/dist/cli/commands/setup/workspace.d.ts +11 -0
  133. package/dist/cli/commands/setup/workspace.d.ts.map +1 -0
  134. package/dist/cli/commands/setup/workspace.js +215 -0
  135. package/dist/cli/commands/setup/workspace.js.map +1 -0
  136. package/dist/cli/commands/setup.d.ts +7 -0
  137. package/dist/cli/commands/setup.d.ts.map +1 -0
  138. package/dist/cli/commands/setup.js +19 -0
  139. package/dist/cli/commands/setup.js.map +1 -0
  140. package/dist/cli/commands/validate.d.ts +10 -0
  141. package/dist/cli/commands/validate.d.ts.map +1 -0
  142. package/dist/cli/commands/validate.js +164 -0
  143. package/dist/cli/commands/validate.js.map +1 -0
  144. package/dist/cli/commands/worker.d.ts +10 -0
  145. package/dist/cli/commands/worker.d.ts.map +1 -0
  146. package/dist/cli/commands/worker.js +224 -0
  147. package/dist/cli/commands/worker.js.map +1 -0
  148. package/dist/cli/index.d.ts +14 -0
  149. package/dist/cli/index.d.ts.map +1 -0
  150. package/dist/cli/index.js +68 -0
  151. package/dist/cli/index.js.map +1 -0
  152. package/dist/cli/utils/config.d.ts +49 -0
  153. package/dist/cli/utils/config.d.ts.map +1 -0
  154. package/dist/cli/utils/config.js +110 -0
  155. package/dist/cli/utils/config.js.map +1 -0
  156. package/dist/cli/utils/exec.d.ts +39 -0
  157. package/dist/cli/utils/exec.d.ts.map +1 -0
  158. package/dist/cli/utils/exec.js +68 -0
  159. package/dist/cli/utils/exec.js.map +1 -0
  160. package/dist/cli/utils/logger.d.ts +47 -0
  161. package/dist/cli/utils/logger.d.ts.map +1 -0
  162. package/dist/cli/utils/logger.js +97 -0
  163. package/dist/cli/utils/logger.js.map +1 -0
  164. package/dist/config/index.d.ts +10 -0
  165. package/dist/config/index.d.ts.map +1 -0
  166. package/dist/config/index.js +13 -0
  167. package/dist/config/index.js.map +1 -0
  168. package/dist/config/loader.d.ts +104 -0
  169. package/dist/config/loader.d.ts.map +1 -0
  170. package/dist/config/loader.js +266 -0
  171. package/dist/config/loader.js.map +1 -0
  172. package/dist/config/schema.d.ts +304 -0
  173. package/dist/config/schema.d.ts.map +1 -0
  174. package/dist/config/schema.js +160 -0
  175. package/dist/config/schema.js.map +1 -0
  176. package/dist/config/validator.d.ts +60 -0
  177. package/dist/config/validator.d.ts.map +1 -0
  178. package/dist/config/validator.js +112 -0
  179. package/dist/config/validator.js.map +1 -0
  180. package/dist/health/server.d.ts +47 -0
  181. package/dist/health/server.d.ts.map +1 -0
  182. package/dist/health/server.js +92 -0
  183. package/dist/health/server.js.map +1 -0
  184. package/dist/index.d.ts +21 -0
  185. package/dist/index.d.ts.map +1 -0
  186. package/dist/index.js +22 -0
  187. package/dist/index.js.map +1 -0
  188. package/dist/orchestrator/async-event-queue.d.ts +28 -0
  189. package/dist/orchestrator/async-event-queue.d.ts.map +1 -0
  190. package/dist/orchestrator/async-event-queue.js +57 -0
  191. package/dist/orchestrator/async-event-queue.js.map +1 -0
  192. package/dist/orchestrator/client.d.ts +110 -0
  193. package/dist/orchestrator/client.d.ts.map +1 -0
  194. package/dist/orchestrator/client.js +288 -0
  195. package/dist/orchestrator/client.js.map +1 -0
  196. package/dist/orchestrator/event-bus.d.ts +195 -0
  197. package/dist/orchestrator/event-bus.d.ts.map +1 -0
  198. package/dist/orchestrator/event-bus.js +557 -0
  199. package/dist/orchestrator/event-bus.js.map +1 -0
  200. package/dist/orchestrator/heartbeat.d.ts +71 -0
  201. package/dist/orchestrator/heartbeat.d.ts.map +1 -0
  202. package/dist/orchestrator/heartbeat.js +116 -0
  203. package/dist/orchestrator/heartbeat.js.map +1 -0
  204. package/dist/orchestrator/index.d.ts +25 -0
  205. package/dist/orchestrator/index.d.ts.map +1 -0
  206. package/dist/orchestrator/index.js +15 -0
  207. package/dist/orchestrator/index.js.map +1 -0
  208. package/dist/orchestrator/job-handler.d.ts +109 -0
  209. package/dist/orchestrator/job-handler.d.ts.map +1 -0
  210. package/dist/orchestrator/job-handler.js +612 -0
  211. package/dist/orchestrator/job-handler.js.map +1 -0
  212. package/dist/orchestrator/job-queue.d.ts +81 -0
  213. package/dist/orchestrator/job-queue.d.ts.map +1 -0
  214. package/dist/orchestrator/job-queue.js +206 -0
  215. package/dist/orchestrator/job-queue.js.map +1 -0
  216. package/dist/orchestrator/label-monitor-bridge.d.ts +25 -0
  217. package/dist/orchestrator/label-monitor-bridge.d.ts.map +1 -0
  218. package/dist/orchestrator/label-monitor-bridge.js +57 -0
  219. package/dist/orchestrator/label-monitor-bridge.js.map +1 -0
  220. package/dist/orchestrator/log-buffer.d.ts +74 -0
  221. package/dist/orchestrator/log-buffer.d.ts.map +1 -0
  222. package/dist/orchestrator/log-buffer.js +104 -0
  223. package/dist/orchestrator/log-buffer.js.map +1 -0
  224. package/dist/orchestrator/redis-job-queue.d.ts +44 -0
  225. package/dist/orchestrator/redis-job-queue.d.ts.map +1 -0
  226. package/dist/orchestrator/redis-job-queue.js +300 -0
  227. package/dist/orchestrator/redis-job-queue.js.map +1 -0
  228. package/dist/orchestrator/router.d.ts +125 -0
  229. package/dist/orchestrator/router.d.ts.map +1 -0
  230. package/dist/orchestrator/router.js +143 -0
  231. package/dist/orchestrator/router.js.map +1 -0
  232. package/dist/orchestrator/server.d.ts +62 -0
  233. package/dist/orchestrator/server.d.ts.map +1 -0
  234. package/dist/orchestrator/server.js +711 -0
  235. package/dist/orchestrator/server.js.map +1 -0
  236. package/dist/orchestrator/types.d.ts +184 -0
  237. package/dist/orchestrator/types.d.ts.map +1 -0
  238. package/dist/orchestrator/types.js +6 -0
  239. package/dist/orchestrator/types.js.map +1 -0
  240. package/dist/orchestrator/worker-registry.d.ts +110 -0
  241. package/dist/orchestrator/worker-registry.d.ts.map +1 -0
  242. package/dist/orchestrator/worker-registry.js +191 -0
  243. package/dist/orchestrator/worker-registry.js.map +1 -0
  244. package/package.json +80 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/cli/commands/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CheckDefinition } from '../types.js';
2
+ export declare const agencyMcpCheck: CheckDefinition;
3
+ //# sourceMappingURL=agency-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agency-mcp.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/agency-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,cAAc,EAAE,eAyD5B,CAAC"}
@@ -0,0 +1,51 @@
1
+ export const agencyMcpCheck = {
2
+ id: 'agency-mcp',
3
+ label: 'Agency MCP',
4
+ category: 'services',
5
+ dependencies: [],
6
+ priority: 'P2',
7
+ async run() {
8
+ const agencyUrl = process.env['AGENCY_URL'];
9
+ if (!agencyUrl || agencyUrl.trim() === '') {
10
+ return {
11
+ status: 'skip',
12
+ message: 'Agency MCP check skipped — AGENCY_URL not set (only needed for network mode)',
13
+ };
14
+ }
15
+ const healthUrl = `${agencyUrl.replace(/\/+$/, '')}/health`;
16
+ let response;
17
+ try {
18
+ response = await fetch(healthUrl, {
19
+ signal: AbortSignal.timeout(5_000),
20
+ });
21
+ }
22
+ catch (error) {
23
+ if (error instanceof DOMException && error.name === 'TimeoutError') {
24
+ return {
25
+ status: 'fail',
26
+ message: 'Agency MCP server request timed out',
27
+ suggestion: `Verify the Agency MCP server is running at ${agencyUrl} and responsive.`,
28
+ };
29
+ }
30
+ return {
31
+ status: 'fail',
32
+ message: 'Failed to connect to Agency MCP server',
33
+ suggestion: `Check that the Agency MCP server is running at ${agencyUrl}. If using Docker, ensure the container is up.`,
34
+ detail: error instanceof Error ? error.message : String(error),
35
+ };
36
+ }
37
+ if (!response.ok) {
38
+ return {
39
+ status: 'fail',
40
+ message: `Agency MCP server returned HTTP ${response.status}`,
41
+ suggestion: `The server at ${agencyUrl} is reachable but returned an error. Check server logs for details.`,
42
+ detail: await response.text().catch(() => ''),
43
+ };
44
+ }
45
+ return {
46
+ status: 'pass',
47
+ message: `Agency MCP server is reachable (${agencyUrl})`,
48
+ };
49
+ },
50
+ };
51
+ //# sourceMappingURL=agency-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agency-mcp.js","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/agency-mcp.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,EAAE,EAAE,YAAY;IAChB,KAAK,EAAE,YAAY;IACnB,QAAQ,EAAE,UAAU;IACpB,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,IAAI;IAEd,KAAK,CAAC,GAAG;QACP,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE5C,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC1C,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EACL,8EAA8E;aACjF,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC;QAE5D,IAAI,QAAkB,CAAC;QAEvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;gBAChC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACnE,OAAO;oBACL,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,qCAAqC;oBAC9C,UAAU,EAAE,8CAA8C,SAAS,kBAAkB;iBACtF,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,wCAAwC;gBACjD,UAAU,EAAE,kDAAkD,SAAS,gDAAgD;gBACvH,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC/D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,mCAAmC,QAAQ,CAAC,MAAM,EAAE;gBAC7D,UAAU,EAAE,iBAAiB,SAAS,qEAAqE;gBAC3G,MAAM,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;aAC9C,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,mCAAmC,SAAS,GAAG;SACzD,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CheckDefinition } from '../types.js';
2
+ export declare const anthropicKeyCheck: CheckDefinition;
3
+ //# sourceMappingURL=anthropic-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-key.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/anthropic-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,iBAAiB,EAAE,eA8E/B,CAAC"}
@@ -0,0 +1,68 @@
1
+ export const anthropicKeyCheck = {
2
+ id: 'anthropic-key',
3
+ label: 'Anthropic API Key',
4
+ category: 'credentials',
5
+ dependencies: ['env-file'],
6
+ priority: 'P1',
7
+ async run(context) {
8
+ if (!context.envVars) {
9
+ return {
10
+ status: 'skip',
11
+ message: 'Skipped — env vars not available',
12
+ };
13
+ }
14
+ const apiKey = context.envVars.ANTHROPIC_API_KEY;
15
+ if (!apiKey || apiKey.trim() === '') {
16
+ return {
17
+ status: 'fail',
18
+ message: 'ANTHROPIC_API_KEY is not set',
19
+ suggestion: 'Add a valid Anthropic API key to `.generacy/generacy.env`. Get one at https://console.anthropic.com/settings/keys',
20
+ };
21
+ }
22
+ let response;
23
+ try {
24
+ response = await fetch('https://api.anthropic.com/v1/models', {
25
+ headers: {
26
+ 'x-api-key': apiKey,
27
+ 'anthropic-version': '2023-06-01',
28
+ },
29
+ signal: AbortSignal.timeout(5_000),
30
+ });
31
+ }
32
+ catch (error) {
33
+ if (error instanceof DOMException && error.name === 'TimeoutError') {
34
+ return {
35
+ status: 'fail',
36
+ message: 'Anthropic API request timed out',
37
+ suggestion: 'Check your network connection or try again later.',
38
+ };
39
+ }
40
+ return {
41
+ status: 'fail',
42
+ message: 'Failed to connect to Anthropic API',
43
+ suggestion: 'Check your network connection. If behind a proxy, ensure HTTPS_PROXY is set.',
44
+ detail: error instanceof Error ? error.message : String(error),
45
+ };
46
+ }
47
+ if (response.status === 401) {
48
+ return {
49
+ status: 'fail',
50
+ message: 'Anthropic API key is invalid',
51
+ suggestion: 'Generate a new API key at https://console.anthropic.com/settings/keys and update `.generacy/generacy.env`.',
52
+ };
53
+ }
54
+ if (!response.ok) {
55
+ return {
56
+ status: 'fail',
57
+ message: `Anthropic API returned HTTP ${response.status}`,
58
+ suggestion: 'Verify your Anthropic API key is valid and try again.',
59
+ detail: await response.text().catch(() => ''),
60
+ };
61
+ }
62
+ return {
63
+ status: 'pass',
64
+ message: 'Anthropic API key is valid',
65
+ };
66
+ },
67
+ };
68
+ //# sourceMappingURL=anthropic-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-key.js","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/anthropic-key.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD,EAAE,EAAE,eAAe;IACnB,KAAK,EAAE,mBAAmB;IAC1B,QAAQ,EAAE,aAAa;IACvB,YAAY,EAAE,CAAC,UAAU,CAAC;IAC1B,QAAQ,EAAE,IAAI;IAEd,KAAK,CAAC,GAAG,CAAC,OAAO;QACf,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,kCAAkC;aAC5C,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;QAEjD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACpC,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,8BAA8B;gBACvC,UAAU,EACR,mHAAmH;aACtH,CAAC;QACJ,CAAC;QAED,IAAI,QAAkB,CAAC;QAEvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,qCAAqC,EAAE;gBAC5D,OAAO,EAAE;oBACP,WAAW,EAAE,MAAM;oBACnB,mBAAmB,EAAE,YAAY;iBAClC;gBACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACnE,OAAO;oBACL,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,iCAAiC;oBAC1C,UAAU,EACR,mDAAmD;iBACtD,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,oCAAoC;gBAC7C,UAAU,EACR,8EAA8E;gBAChF,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC/D,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,8BAA8B;gBACvC,UAAU,EACR,4GAA4G;aAC/G,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,+BAA+B,QAAQ,CAAC,MAAM,EAAE;gBACzD,UAAU,EAAE,uDAAuD;gBACnE,MAAM,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;aAC9C,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,4BAA4B;SACtC,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CheckDefinition } from '../types.js';
2
+ export declare const configCheck: CheckDefinition;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/config.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,WAAW,EAAE,eAyFzB,CAAC"}
@@ -0,0 +1,81 @@
1
+ import { dirname } from 'node:path';
2
+ import { findConfigFile, loadConfig, ConfigNotFoundError, ConfigParseError, ConfigSchemaError, ConfigValidationError, } from '../../../../config/index.js';
3
+ export const configCheck = {
4
+ id: 'config',
5
+ label: 'Config File',
6
+ category: 'config',
7
+ dependencies: [],
8
+ priority: 'P1',
9
+ async run() {
10
+ // Locate the config file
11
+ const configPath = findConfigFile();
12
+ if (!configPath) {
13
+ return {
14
+ status: 'fail',
15
+ message: 'Config file not found',
16
+ suggestion: 'Create .generacy/config.yaml in your project root, or run `generacy init` to generate one',
17
+ };
18
+ }
19
+ // Load and validate the config
20
+ try {
21
+ const config = loadConfig({ configPath });
22
+ // .generacy/config.yaml → .generacy/ → project root
23
+ const projectRoot = dirname(dirname(configPath));
24
+ return {
25
+ status: 'pass',
26
+ message: `Config file is valid (${configPath})`,
27
+ detail: `Project: ${config.project.name} (${config.project.id})`,
28
+ data: {
29
+ configPath,
30
+ projectRoot,
31
+ config,
32
+ },
33
+ };
34
+ }
35
+ catch (error) {
36
+ if (error instanceof ConfigNotFoundError) {
37
+ return {
38
+ status: 'fail',
39
+ message: 'Config file not found',
40
+ suggestion: 'Create .generacy/config.yaml in your project root, or run `generacy init` to generate one',
41
+ detail: error.message,
42
+ };
43
+ }
44
+ if (error instanceof ConfigParseError) {
45
+ return {
46
+ status: 'fail',
47
+ message: `Config file has invalid YAML syntax (${configPath})`,
48
+ suggestion: 'Fix the YAML syntax errors in .generacy/config.yaml — check for incorrect indentation or missing colons',
49
+ detail: error.message,
50
+ };
51
+ }
52
+ if (error instanceof ConfigSchemaError) {
53
+ const fieldErrors = error.errors.errors
54
+ .map((e) => {
55
+ const path = e.path.length > 0 ? e.path.join('.') : 'root';
56
+ return `${path}: ${e.message}`;
57
+ })
58
+ .join('; ');
59
+ return {
60
+ status: 'fail',
61
+ message: `Config file fails schema validation (${configPath})`,
62
+ suggestion: `Fix validation errors: ${fieldErrors}`,
63
+ detail: error.message,
64
+ };
65
+ }
66
+ if (error instanceof ConfigValidationError) {
67
+ return {
68
+ status: 'fail',
69
+ message: `Config file has semantic errors (${configPath})`,
70
+ suggestion: error.message,
71
+ detail: error.conflictingRepos
72
+ ? `Conflicting repos: ${error.conflictingRepos.join(', ')}`
73
+ : undefined,
74
+ };
75
+ }
76
+ // Unexpected error
77
+ throw error;
78
+ }
79
+ },
80
+ };
81
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CheckDefinition } from '../types.js';
2
+ export declare const devcontainerCheck: CheckDefinition;
3
+ //# sourceMappingURL=devcontainer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devcontainer.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/devcontainer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,eAAO,MAAM,iBAAiB,EAAE,eAiE/B,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ const GENERACY_FEATURE_PREFIX = 'ghcr.io/generacy-ai/generacy/generacy';
4
+ export const devcontainerCheck = {
5
+ id: 'devcontainer',
6
+ label: 'Dev Container',
7
+ category: 'system',
8
+ dependencies: [],
9
+ priority: 'P2',
10
+ async run(context) {
11
+ // Resolve project root from context or fall back to CWD
12
+ const root = context.projectRoot ?? process.cwd();
13
+ const devcontainerPath = join(root, '.devcontainer', 'devcontainer.json');
14
+ if (!existsSync(devcontainerPath)) {
15
+ return {
16
+ status: 'fail',
17
+ message: '.devcontainer/devcontainer.json not found',
18
+ suggestion: 'Run `generacy init` to generate dev container configuration',
19
+ detail: `Expected at ${devcontainerPath}`,
20
+ };
21
+ }
22
+ // Read and parse JSON
23
+ let config;
24
+ try {
25
+ const raw = readFileSync(devcontainerPath, 'utf-8');
26
+ config = JSON.parse(raw);
27
+ }
28
+ catch (error) {
29
+ const message = error instanceof Error ? error.message : 'Unknown parse error';
30
+ return {
31
+ status: 'fail',
32
+ message: 'Failed to parse devcontainer.json',
33
+ suggestion: 'Fix JSON syntax errors in .devcontainer/devcontainer.json',
34
+ detail: message,
35
+ };
36
+ }
37
+ // Check for Generacy feature
38
+ const features = config.features;
39
+ if (features != null && typeof features === 'object') {
40
+ const featureKeys = Object.keys(features);
41
+ const hasGeneracyFeature = featureKeys.some((key) => key.startsWith(GENERACY_FEATURE_PREFIX));
42
+ if (hasGeneracyFeature) {
43
+ return {
44
+ status: 'pass',
45
+ message: '.devcontainer/devcontainer.json present with Generacy feature',
46
+ detail: `File: ${devcontainerPath}`,
47
+ };
48
+ }
49
+ }
50
+ return {
51
+ status: 'warn',
52
+ message: '.devcontainer/devcontainer.json exists but missing Generacy feature',
53
+ suggestion: `Add the Generacy dev container feature to .devcontainer/devcontainer.json: "features": { "${GENERACY_FEATURE_PREFIX}": {} }`,
54
+ detail: `File: ${devcontainerPath}`,
55
+ };
56
+ },
57
+ };
58
+ //# sourceMappingURL=devcontainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devcontainer.js","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/devcontainer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,uBAAuB,GAAG,uCAAuC,CAAC;AAExE,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD,EAAE,EAAE,cAAc;IAClB,KAAK,EAAE,eAAe;IACtB,QAAQ,EAAE,QAAQ;IAClB,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,IAAI;IAEd,KAAK,CAAC,GAAG,CAAC,OAAO;QACf,wDAAwD;QACxD,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE,mBAAmB,CAAC,CAAC;QAE1E,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAClC,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,2CAA2C;gBACpD,UAAU,EACR,6DAA6D;gBAC/D,MAAM,EAAE,eAAe,gBAAgB,EAAE;aAC1C,CAAC;QACJ,CAAC;QAED,sBAAsB;QACtB,IAAI,MAA+B,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC;YACjE,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,mCAAmC;gBAC5C,UAAU,EACR,2DAA2D;gBAC7D,MAAM,EAAE,OAAO;aAChB,CAAC;QACJ,CAAC;QAED,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,IAAI,QAAQ,IAAI,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAmC,CAAC,CAAC;YACrE,MAAM,kBAAkB,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAClD,GAAG,CAAC,UAAU,CAAC,uBAAuB,CAAC,CACxC,CAAC;YAEF,IAAI,kBAAkB,EAAE,CAAC;gBACvB,OAAO;oBACL,MAAM,EAAE,MAAM;oBACd,OAAO,EACL,+DAA+D;oBACjE,MAAM,EAAE,SAAS,gBAAgB,EAAE;iBACpC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EACL,qEAAqE;YACvE,UAAU,EAAE,6FAA6F,uBAAuB,SAAS;YACzI,MAAM,EAAE,SAAS,gBAAgB,EAAE;SACpC,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CheckDefinition } from '../types.js';
2
+ export declare const dockerCheck: CheckDefinition;
3
+ //# sourceMappingURL=docker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/docker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAanD,eAAO,MAAM,WAAW,EAAE,eAqEzB,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { execSafe } from '../../../utils/exec.js';
2
+ /**
3
+ * Extract the Docker version string from `docker info` stdout.
4
+ *
5
+ * Looks for a line like "Server Version: 27.0.3" and returns the version,
6
+ * or `null` if not found.
7
+ */
8
+ function parseDockerVersion(stdout) {
9
+ const match = /Server Version:\s*(.+)/i.exec(stdout);
10
+ return match?.[1]?.trim() ?? null;
11
+ }
12
+ export const dockerCheck = {
13
+ id: 'docker',
14
+ label: 'Docker',
15
+ category: 'system',
16
+ dependencies: [],
17
+ priority: 'P1',
18
+ async run() {
19
+ const result = execSafe('docker info');
20
+ if (!result.ok) {
21
+ const combined = `${result.stdout}\n${result.stderr}`.toLowerCase();
22
+ // Docker binary not found
23
+ if (combined.includes('not found') ||
24
+ combined.includes('is not recognized') ||
25
+ combined.includes('no such file')) {
26
+ return {
27
+ status: 'fail',
28
+ message: 'Docker is not installed',
29
+ suggestion: 'Install Docker Desktop from https://docker.com',
30
+ detail: result.stderr || result.stdout,
31
+ };
32
+ }
33
+ // Daemon not running
34
+ if (combined.includes('cannot connect to the docker daemon')) {
35
+ return {
36
+ status: 'fail',
37
+ message: 'Docker daemon is not running',
38
+ suggestion: 'Start Docker Desktop',
39
+ detail: result.stderr || result.stdout,
40
+ };
41
+ }
42
+ // Permission denied
43
+ if (combined.includes('permission denied')) {
44
+ return {
45
+ status: 'fail',
46
+ message: 'Insufficient permissions to access Docker',
47
+ suggestion: 'Add your user to the docker group: sudo usermod -aG docker $USER (then log out and back in)',
48
+ detail: result.stderr || result.stdout,
49
+ };
50
+ }
51
+ // Unknown failure
52
+ return {
53
+ status: 'fail',
54
+ message: 'Docker check failed',
55
+ suggestion: 'Run `docker info` manually to diagnose the issue',
56
+ detail: result.stderr || result.stdout,
57
+ };
58
+ }
59
+ // Success — extract version
60
+ const version = parseDockerVersion(result.stdout);
61
+ const message = version
62
+ ? `Docker daemon is running (v${version})`
63
+ : 'Docker daemon is running';
64
+ return {
65
+ status: 'pass',
66
+ message,
67
+ detail: version ? `Server Version: ${version}` : undefined,
68
+ };
69
+ },
70
+ };
71
+ //# sourceMappingURL=docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/docker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAoB;IAC1C,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,QAAQ;IAClB,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,IAAI;IAEd,KAAK,CAAC,GAAG;QACP,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;QAEvC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;YAEpE,0BAA0B;YAC1B,IACE,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAC9B,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBACtC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EACjC,CAAC;gBACD,OAAO;oBACL,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,yBAAyB;oBAClC,UAAU,EAAE,gDAAgD;oBAC5D,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM;iBACvC,CAAC;YACJ,CAAC;YAED,qBAAqB;YACrB,IAAI,QAAQ,CAAC,QAAQ,CAAC,qCAAqC,CAAC,EAAE,CAAC;gBAC7D,OAAO;oBACL,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,8BAA8B;oBACvC,UAAU,EAAE,sBAAsB;oBAClC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM;iBACvC,CAAC;YACJ,CAAC;YAED,oBAAoB;YACpB,IAAI,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAC3C,OAAO;oBACL,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,2CAA2C;oBACpD,UAAU,EACR,6FAA6F;oBAC/F,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM;iBACvC,CAAC;YACJ,CAAC;YAED,kBAAkB;YAClB,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,qBAAqB;gBAC9B,UAAU,EAAE,kDAAkD;gBAC9D,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM;aACvC,CAAC;QACJ,CAAC;QAED,4BAA4B;QAC5B,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,OAAO;YACrB,CAAC,CAAC,8BAA8B,OAAO,GAAG;YAC1C,CAAC,CAAC,0BAA0B,CAAC;QAE/B,OAAO;YACL,MAAM,EAAE,MAAM;YACd,OAAO;YACP,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS;SAC3D,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CheckDefinition } from '../types.js';
2
+ export declare const envFileCheck: CheckDefinition;
3
+ //# sourceMappingURL=env-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-file.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/env-file.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,eAAO,MAAM,YAAY,EAAE,eA+D1B,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { readFileSync, existsSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { parse as parseDotenv } from 'dotenv';
4
+ const REQUIRED_KEYS = ['GITHUB_TOKEN', 'ANTHROPIC_API_KEY'];
5
+ export const envFileCheck = {
6
+ id: 'env-file',
7
+ label: 'Env File',
8
+ category: 'config',
9
+ dependencies: ['config'],
10
+ priority: 'P1',
11
+ async run(context) {
12
+ if (!context.configPath) {
13
+ return {
14
+ status: 'skip',
15
+ message: 'Skipped — config path not available',
16
+ };
17
+ }
18
+ const envPath = join(dirname(context.configPath), 'generacy.env');
19
+ if (!existsSync(envPath)) {
20
+ return {
21
+ status: 'fail',
22
+ message: `Env file not found (${envPath})`,
23
+ suggestion: 'Run `generacy init` to generate the env file, or create `.generacy/generacy.env` manually with required keys: GITHUB_TOKEN, ANTHROPIC_API_KEY',
24
+ };
25
+ }
26
+ const raw = readFileSync(envPath, 'utf-8');
27
+ const envVars = parseDotenv(Buffer.from(raw));
28
+ const missingKeys = REQUIRED_KEYS.filter((key) => !(key in envVars));
29
+ if (missingKeys.length > 0) {
30
+ return {
31
+ status: 'fail',
32
+ message: `Env file is missing required keys: ${missingKeys.join(', ')}`,
33
+ suggestion: 'Run `generacy init` to generate the env file, or create `.generacy/generacy.env` manually with required keys: GITHUB_TOKEN, ANTHROPIC_API_KEY',
34
+ detail: `File: ${envPath}`,
35
+ data: { envVars },
36
+ };
37
+ }
38
+ const emptyKeys = REQUIRED_KEYS.filter((key) => key in envVars && envVars[key].trim() === '');
39
+ if (emptyKeys.length > 0) {
40
+ return {
41
+ status: 'warn',
42
+ message: `Env file has empty values for: ${emptyKeys.join(', ')}`,
43
+ suggestion: `Set values for ${emptyKeys.join(', ')} in ${envPath}`,
44
+ detail: `File: ${envPath}`,
45
+ data: { envVars },
46
+ };
47
+ }
48
+ return {
49
+ status: 'pass',
50
+ message: `.generacy/generacy.env present with required keys`,
51
+ detail: `File: ${envPath}`,
52
+ data: { envVars },
53
+ };
54
+ },
55
+ };
56
+ //# sourceMappingURL=env-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-file.js","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/env-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG9C,MAAM,aAAa,GAAG,CAAC,cAAc,EAAE,mBAAmB,CAAU,CAAC;AAErE,MAAM,CAAC,MAAM,YAAY,GAAoB;IAC3C,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,QAAQ;IAClB,YAAY,EAAE,CAAC,QAAQ,CAAC;IACxB,QAAQ,EAAE,IAAI;IAEd,KAAK,CAAC,GAAG,CAAC,OAAO;QACf,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,qCAAqC;aAC/C,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC;QAElE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,uBAAuB,OAAO,GAAG;gBAC1C,UAAU,EACR,+IAA+I;aAClJ,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAE9C,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC;QAErE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,sCAAsC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACvE,UAAU,EACR,+IAA+I;gBACjJ,MAAM,EAAE,SAAS,OAAO,EAAE;gBAC1B,IAAI,EAAE,EAAE,OAAO,EAAE;aAClB,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CACpC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,OAAO,IAAI,OAAO,CAAC,GAAG,CAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CACvD,CAAC;QAEF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,kCAAkC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACjE,UAAU,EAAE,kBAAkB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,OAAO,EAAE;gBAClE,MAAM,EAAE,SAAS,OAAO,EAAE;gBAC1B,IAAI,EAAE,EAAE,OAAO,EAAE;aAClB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,mDAAmD;YAC5D,MAAM,EAAE,SAAS,OAAO,EAAE;YAC1B,IAAI,EAAE,EAAE,OAAO,EAAE;SAClB,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CheckDefinition } from '../types.js';
2
+ export declare const githubTokenCheck: CheckDefinition;
3
+ //# sourceMappingURL=github-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-token.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/github-token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,eAAO,MAAM,gBAAgB,EAAE,eAiH9B,CAAC"}
@@ -0,0 +1,99 @@
1
+ const REQUIRED_SCOPES = ['repo', 'workflow'];
2
+ export const githubTokenCheck = {
3
+ id: 'github-token',
4
+ label: 'GitHub Token',
5
+ category: 'credentials',
6
+ dependencies: ['env-file'],
7
+ priority: 'P1',
8
+ async run(context) {
9
+ if (!context.envVars) {
10
+ return {
11
+ status: 'skip',
12
+ message: 'Skipped — env vars not available',
13
+ };
14
+ }
15
+ const token = context.envVars.GITHUB_TOKEN;
16
+ if (!token || token.trim() === '') {
17
+ return {
18
+ status: 'fail',
19
+ message: 'GITHUB_TOKEN is not set',
20
+ suggestion: 'Add a valid GitHub personal access token to `.generacy/generacy.env`. Generate one at https://github.com/settings/tokens with `repo` and `workflow` scopes.',
21
+ };
22
+ }
23
+ let response;
24
+ try {
25
+ response = await fetch('https://api.github.com/user', {
26
+ headers: {
27
+ Authorization: `Bearer ${token}`,
28
+ Accept: 'application/vnd.github+json',
29
+ 'User-Agent': 'generacy-doctor',
30
+ },
31
+ signal: AbortSignal.timeout(5_000),
32
+ });
33
+ }
34
+ catch (error) {
35
+ if (error instanceof DOMException && error.name === 'TimeoutError') {
36
+ return {
37
+ status: 'fail',
38
+ message: 'GitHub API request timed out',
39
+ suggestion: 'Check your network connection or try again later.',
40
+ };
41
+ }
42
+ return {
43
+ status: 'fail',
44
+ message: 'Failed to connect to GitHub API',
45
+ suggestion: 'Check your network connection. If behind a proxy, ensure HTTPS_PROXY is set.',
46
+ detail: error instanceof Error ? error.message : String(error),
47
+ };
48
+ }
49
+ if (response.status === 401) {
50
+ return {
51
+ status: 'fail',
52
+ message: 'GitHub token is invalid',
53
+ suggestion: 'Generate a new personal access token at https://github.com/settings/tokens with `repo` and `workflow` scopes, then update `.generacy/generacy.env`.',
54
+ };
55
+ }
56
+ if (!response.ok) {
57
+ return {
58
+ status: 'fail',
59
+ message: `GitHub API returned HTTP ${response.status}`,
60
+ suggestion: 'Verify your GitHub token is valid and try again.',
61
+ detail: await response.text().catch(() => ''),
62
+ };
63
+ }
64
+ // Check required scopes from X-OAuth-Scopes header
65
+ const scopesHeader = response.headers.get('x-oauth-scopes');
66
+ const grantedScopes = scopesHeader
67
+ ? scopesHeader.split(',').map((s) => s.trim()).filter(Boolean)
68
+ : [];
69
+ const missingScopes = REQUIRED_SCOPES.filter((scope) => !grantedScopes.includes(scope));
70
+ // Fine-grained tokens don't return X-OAuth-Scopes — treat missing header as acceptable
71
+ if (scopesHeader !== null && missingScopes.length > 0) {
72
+ return {
73
+ status: 'warn',
74
+ message: `GitHub token is missing scopes: ${missingScopes.join(', ')}`,
75
+ suggestion: `Update your token at https://github.com/settings/tokens to include: ${missingScopes.join(', ')}`,
76
+ detail: `Granted scopes: ${grantedScopes.join(', ') || '(none)'}`,
77
+ };
78
+ }
79
+ // Extract username for display
80
+ let username = '';
81
+ try {
82
+ const body = (await response.json());
83
+ if (body.login) {
84
+ username = ` (${body.login})`;
85
+ }
86
+ }
87
+ catch {
88
+ // Non-critical — skip username display
89
+ }
90
+ return {
91
+ status: 'pass',
92
+ message: `GitHub token is valid${username}`,
93
+ detail: scopesHeader !== null
94
+ ? `Scopes: ${grantedScopes.join(', ') || '(none)'}`
95
+ : 'Fine-grained token (no classic scopes header)',
96
+ };
97
+ },
98
+ };
99
+ //# sourceMappingURL=github-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-token.js","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/github-token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CheckDefinition } from '../types.js';
2
+ export declare const npmPackagesCheck: CheckDefinition;
3
+ //# sourceMappingURL=npm-packages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-packages.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/doctor/checks/npm-packages.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAwCnD,eAAO,MAAM,gBAAgB,EAAE,eA0F9B,CAAC"}