@buoy-design/cli 0.1.0 → 0.1.2

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 (146) hide show
  1. package/dist/commands/audit.d.ts +3 -0
  2. package/dist/commands/audit.d.ts.map +1 -0
  3. package/dist/commands/audit.js +235 -0
  4. package/dist/commands/audit.js.map +1 -0
  5. package/dist/commands/baseline.d.ts +39 -0
  6. package/dist/commands/baseline.d.ts.map +1 -0
  7. package/dist/commands/baseline.js +298 -0
  8. package/dist/commands/baseline.js.map +1 -0
  9. package/dist/commands/check.d.ts +16 -0
  10. package/dist/commands/check.d.ts.map +1 -0
  11. package/dist/commands/check.js +168 -0
  12. package/dist/commands/check.js.map +1 -0
  13. package/dist/commands/ci.d.ts +2 -2
  14. package/dist/commands/ci.d.ts.map +1 -1
  15. package/dist/commands/ci.js +124 -142
  16. package/dist/commands/ci.js.map +1 -1
  17. package/dist/commands/compare.d.ts +3 -0
  18. package/dist/commands/compare.d.ts.map +1 -0
  19. package/dist/commands/compare.js +170 -0
  20. package/dist/commands/compare.js.map +1 -0
  21. package/dist/commands/drift.d.ts +1 -1
  22. package/dist/commands/drift.d.ts.map +1 -1
  23. package/dist/commands/drift.js +79 -121
  24. package/dist/commands/drift.js.map +1 -1
  25. package/dist/commands/explain.d.ts +3 -0
  26. package/dist/commands/explain.d.ts.map +1 -0
  27. package/dist/commands/explain.js +212 -0
  28. package/dist/commands/explain.js.map +1 -0
  29. package/dist/commands/graph.d.ts +3 -0
  30. package/dist/commands/graph.d.ts.map +1 -0
  31. package/dist/commands/graph.js +430 -0
  32. package/dist/commands/graph.js.map +1 -0
  33. package/dist/commands/index.d.ts +14 -8
  34. package/dist/commands/index.d.ts.map +1 -1
  35. package/dist/commands/index.js +14 -8
  36. package/dist/commands/index.js.map +1 -1
  37. package/dist/commands/init.d.ts +1 -1
  38. package/dist/commands/init.d.ts.map +1 -1
  39. package/dist/commands/init.js +404 -237
  40. package/dist/commands/init.js.map +1 -1
  41. package/dist/commands/plugins.d.ts.map +1 -1
  42. package/dist/commands/plugins.js +32 -41
  43. package/dist/commands/plugins.js.map +1 -1
  44. package/dist/commands/scan.d.ts +1 -1
  45. package/dist/commands/scan.d.ts.map +1 -1
  46. package/dist/commands/scan.js +107 -219
  47. package/dist/commands/scan.js.map +1 -1
  48. package/dist/commands/status.d.ts +1 -1
  49. package/dist/commands/status.d.ts.map +1 -1
  50. package/dist/commands/status.js +114 -122
  51. package/dist/commands/status.js.map +1 -1
  52. package/dist/commands/tokens.d.ts +3 -0
  53. package/dist/commands/tokens.d.ts.map +1 -0
  54. package/dist/commands/tokens.js +261 -0
  55. package/dist/commands/tokens.js.map +1 -0
  56. package/dist/config/auto-detect.d.ts +21 -0
  57. package/dist/config/auto-detect.d.ts.map +1 -0
  58. package/dist/config/auto-detect.js +278 -0
  59. package/dist/config/auto-detect.js.map +1 -0
  60. package/dist/config/loader.d.ts.map +1 -1
  61. package/dist/config/loader.js +17 -0
  62. package/dist/config/loader.js.map +1 -1
  63. package/dist/config/schema.d.ts +63 -63
  64. package/dist/config/schema.d.ts.map +1 -1
  65. package/dist/config/schema.js +20 -2
  66. package/dist/config/schema.js.map +1 -1
  67. package/dist/constants.d.ts +36 -0
  68. package/dist/constants.d.ts.map +1 -0
  69. package/dist/constants.js +37 -0
  70. package/dist/constants.js.map +1 -0
  71. package/dist/detect/frameworks.d.ts +11 -2
  72. package/dist/detect/frameworks.d.ts.map +1 -1
  73. package/dist/detect/frameworks.js +78 -78
  74. package/dist/detect/frameworks.js.map +1 -1
  75. package/dist/detect/index.d.ts +1 -0
  76. package/dist/detect/index.d.ts.map +1 -1
  77. package/dist/detect/index.js +3 -0
  78. package/dist/detect/index.js.map +1 -1
  79. package/dist/detect/monorepo-patterns.d.ts +54 -0
  80. package/dist/detect/monorepo-patterns.d.ts.map +1 -0
  81. package/dist/detect/monorepo-patterns.js +209 -0
  82. package/dist/detect/monorepo-patterns.js.map +1 -0
  83. package/dist/detect/project-detector.d.ts +1 -1
  84. package/dist/detect/project-detector.d.ts.map +1 -1
  85. package/dist/detect/project-detector.js +132 -0
  86. package/dist/detect/project-detector.js.map +1 -1
  87. package/dist/explain/agents.d.ts +31 -0
  88. package/dist/explain/agents.d.ts.map +1 -0
  89. package/dist/explain/agents.js +507 -0
  90. package/dist/explain/agents.js.map +1 -0
  91. package/dist/hooks/index.d.ts +26 -0
  92. package/dist/hooks/index.d.ts.map +1 -0
  93. package/dist/hooks/index.js +283 -0
  94. package/dist/hooks/index.js.map +1 -0
  95. package/dist/index.d.ts +3 -3
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +13 -7
  98. package/dist/index.js.map +1 -1
  99. package/dist/integrations/github-formatter.d.ts +55 -0
  100. package/dist/integrations/github-formatter.d.ts.map +1 -0
  101. package/dist/integrations/github-formatter.js +391 -0
  102. package/dist/integrations/github-formatter.js.map +1 -0
  103. package/dist/integrations/github.d.ts +95 -0
  104. package/dist/integrations/github.d.ts.map +1 -0
  105. package/dist/integrations/github.js +281 -0
  106. package/dist/integrations/github.js.map +1 -0
  107. package/dist/integrations/index.d.ts +4 -0
  108. package/dist/integrations/index.d.ts.map +1 -0
  109. package/dist/integrations/index.js +4 -0
  110. package/dist/integrations/index.js.map +1 -0
  111. package/dist/output/formatters.d.ts.map +1 -1
  112. package/dist/output/formatters.js +5 -10
  113. package/dist/output/formatters.js.map +1 -1
  114. package/dist/scan/orchestrator.d.ts +76 -0
  115. package/dist/scan/orchestrator.d.ts.map +1 -0
  116. package/dist/scan/orchestrator.js +247 -0
  117. package/dist/scan/orchestrator.js.map +1 -0
  118. package/dist/services/ai-analysis.d.ts +54 -0
  119. package/dist/services/ai-analysis.d.ts.map +1 -0
  120. package/dist/services/ai-analysis.js +239 -0
  121. package/dist/services/ai-analysis.js.map +1 -0
  122. package/dist/services/drift-analysis.d.ts +77 -0
  123. package/dist/services/drift-analysis.d.ts.map +1 -0
  124. package/dist/services/drift-analysis.js +145 -0
  125. package/dist/services/drift-analysis.js.map +1 -0
  126. package/package.json +17 -5
  127. package/dist/commands/__tests__/ci.test.d.ts +0 -2
  128. package/dist/commands/__tests__/ci.test.d.ts.map +0 -1
  129. package/dist/commands/__tests__/ci.test.js +0 -33
  130. package/dist/commands/__tests__/ci.test.js.map +0 -1
  131. package/dist/commands/bootstrap.d.ts +0 -3
  132. package/dist/commands/bootstrap.d.ts.map +0 -1
  133. package/dist/commands/bootstrap.js +0 -458
  134. package/dist/commands/bootstrap.js.map +0 -1
  135. package/dist/plugins/index.d.ts +0 -3
  136. package/dist/plugins/index.d.ts.map +0 -1
  137. package/dist/plugins/index.js +0 -3
  138. package/dist/plugins/index.js.map +0 -1
  139. package/dist/plugins/loader.d.ts +0 -11
  140. package/dist/plugins/loader.d.ts.map +0 -1
  141. package/dist/plugins/loader.js +0 -77
  142. package/dist/plugins/loader.js.map +0 -1
  143. package/dist/plugins/registry.d.ts +0 -15
  144. package/dist/plugins/registry.d.ts.map +0 -1
  145. package/dist/plugins/registry.js +0 -32
  146. package/dist/plugins/registry.js.map +0 -1
@@ -0,0 +1,283 @@
1
+ // apps/cli/src/hooks/index.ts
2
+ import { existsSync, mkdirSync, writeFileSync, chmodSync, readFileSync, } from "fs";
3
+ import { resolve } from "path";
4
+ /**
5
+ * Pre-commit hook script content
6
+ */
7
+ const PRE_COMMIT_HOOK = `#!/bin/sh
8
+ # Buoy pre-commit hook
9
+ # Auto-generated by 'buoy init --hooks'
10
+ # See: https://buoy.dev/docs/pre-commit
11
+
12
+ # Run buoy check on staged files
13
+ buoy check --staged --fail-on critical
14
+
15
+ # If buoy check fails, prevent the commit
16
+ if [ $? -ne 0 ]; then
17
+ echo ""
18
+ echo "Commit blocked by buoy. Fix drift issues or use --no-verify to bypass."
19
+ exit 1
20
+ fi
21
+ `;
22
+ /**
23
+ * Husky pre-commit hook content (for .husky/pre-commit)
24
+ */
25
+ const HUSKY_PRE_COMMIT_HOOK = `#!/usr/bin/env sh
26
+ . "$(dirname -- "$0")/_/husky.sh"
27
+
28
+ # Run buoy check on staged files
29
+ npx buoy check --staged --fail-on critical
30
+ `;
31
+ /**
32
+ * lint-staged configuration for package.json
33
+ */
34
+ export const LINT_STAGED_CONFIG = {
35
+ "*.{tsx,jsx,ts,js,vue,svelte}": ["buoy check --staged --fail-on critical"],
36
+ };
37
+ /**
38
+ * Pre-commit config YAML content
39
+ */
40
+ const PRE_COMMIT_CONFIG_YAML = `# .pre-commit-config.yaml
41
+ # See: https://pre-commit.com/
42
+
43
+ repos:
44
+ - repo: local
45
+ hooks:
46
+ - id: buoy
47
+ name: buoy drift check
48
+ entry: buoy check --staged --fail-on critical
49
+ language: system
50
+ types: [file]
51
+ files: \\.(tsx|jsx|ts|js|vue|svelte)$
52
+ `;
53
+ /**
54
+ * Detect which hook system is in use
55
+ */
56
+ export function detectHookSystem(projectRoot) {
57
+ // Check for Husky
58
+ if (existsSync(resolve(projectRoot, ".husky"))) {
59
+ return "husky";
60
+ }
61
+ // Check for pre-commit
62
+ if (existsSync(resolve(projectRoot, ".pre-commit-config.yaml"))) {
63
+ return "pre-commit";
64
+ }
65
+ // Check for lint-staged in package.json
66
+ const pkgPath = resolve(projectRoot, "package.json");
67
+ if (existsSync(pkgPath)) {
68
+ try {
69
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
70
+ if (pkg["lint-staged"]) {
71
+ return "lint-staged";
72
+ }
73
+ }
74
+ catch {
75
+ // Ignore parse errors
76
+ }
77
+ }
78
+ // Check for .git directory (can use raw git hooks)
79
+ if (existsSync(resolve(projectRoot, ".git"))) {
80
+ return "git";
81
+ }
82
+ return null;
83
+ }
84
+ /**
85
+ * Setup pre-commit hooks for the project
86
+ */
87
+ export function setupHooks(projectRoot) {
88
+ const hookSystem = detectHookSystem(projectRoot);
89
+ if (!hookSystem) {
90
+ return {
91
+ success: false,
92
+ hookSystem: null,
93
+ message: "No git repository found. Run 'git init' first.",
94
+ };
95
+ }
96
+ switch (hookSystem) {
97
+ case "husky":
98
+ return setupHuskyHook(projectRoot);
99
+ case "pre-commit":
100
+ return setupPreCommitConfig(projectRoot);
101
+ case "lint-staged":
102
+ return setupLintStaged(projectRoot);
103
+ case "git":
104
+ return setupGitHook(projectRoot);
105
+ default:
106
+ return {
107
+ success: false,
108
+ hookSystem,
109
+ message: `Unsupported hook system: ${hookSystem}`,
110
+ };
111
+ }
112
+ }
113
+ /**
114
+ * Setup raw git pre-commit hook
115
+ */
116
+ function setupGitHook(projectRoot) {
117
+ const hooksDir = resolve(projectRoot, ".git", "hooks");
118
+ const hookPath = resolve(hooksDir, "pre-commit");
119
+ // Ensure hooks directory exists
120
+ if (!existsSync(hooksDir)) {
121
+ mkdirSync(hooksDir, { recursive: true });
122
+ }
123
+ // Check if hook already exists
124
+ if (existsSync(hookPath)) {
125
+ const existing = readFileSync(hookPath, "utf-8");
126
+ if (existing.includes("buoy check")) {
127
+ return {
128
+ success: true,
129
+ hookSystem: "git",
130
+ message: "Buoy hook already configured in .git/hooks/pre-commit",
131
+ filePath: hookPath,
132
+ };
133
+ }
134
+ // Append to existing hook
135
+ const updated = existing +
136
+ "\n\n# Added by buoy init --hooks\n" +
137
+ PRE_COMMIT_HOOK.split("\n").slice(4).join("\n");
138
+ writeFileSync(hookPath, updated);
139
+ return {
140
+ success: true,
141
+ hookSystem: "git",
142
+ message: "Added buoy check to existing .git/hooks/pre-commit",
143
+ filePath: hookPath,
144
+ };
145
+ }
146
+ // Write new hook
147
+ writeFileSync(hookPath, PRE_COMMIT_HOOK);
148
+ chmodSync(hookPath, 0o755);
149
+ return {
150
+ success: true,
151
+ hookSystem: "git",
152
+ message: "Created .git/hooks/pre-commit",
153
+ filePath: hookPath,
154
+ };
155
+ }
156
+ /**
157
+ * Setup Husky pre-commit hook
158
+ */
159
+ function setupHuskyHook(projectRoot) {
160
+ const huskyDir = resolve(projectRoot, ".husky");
161
+ const hookPath = resolve(huskyDir, "pre-commit");
162
+ // Check if hook already exists
163
+ if (existsSync(hookPath)) {
164
+ const existing = readFileSync(hookPath, "utf-8");
165
+ if (existing.includes("buoy check")) {
166
+ return {
167
+ success: true,
168
+ hookSystem: "husky",
169
+ message: "Buoy hook already configured in .husky/pre-commit",
170
+ filePath: hookPath,
171
+ };
172
+ }
173
+ // Append buoy check to existing hook
174
+ const updated = existing.trimEnd() +
175
+ "\n\n# Added by buoy init --hooks\nnpx buoy check --staged --fail-on critical\n";
176
+ writeFileSync(hookPath, updated);
177
+ return {
178
+ success: true,
179
+ hookSystem: "husky",
180
+ message: "Added buoy check to existing .husky/pre-commit",
181
+ filePath: hookPath,
182
+ };
183
+ }
184
+ // Create new Husky hook
185
+ writeFileSync(hookPath, HUSKY_PRE_COMMIT_HOOK);
186
+ chmodSync(hookPath, 0o755);
187
+ return {
188
+ success: true,
189
+ hookSystem: "husky",
190
+ message: "Created .husky/pre-commit",
191
+ filePath: hookPath,
192
+ };
193
+ }
194
+ /**
195
+ * Setup pre-commit framework config
196
+ */
197
+ function setupPreCommitConfig(projectRoot) {
198
+ const configPath = resolve(projectRoot, ".pre-commit-config.yaml");
199
+ if (existsSync(configPath)) {
200
+ const existing = readFileSync(configPath, "utf-8");
201
+ if (existing.includes("buoy")) {
202
+ return {
203
+ success: true,
204
+ hookSystem: "pre-commit",
205
+ message: "Buoy hook already configured in .pre-commit-config.yaml",
206
+ filePath: configPath,
207
+ };
208
+ }
209
+ // Need to append to existing config - provide instructions
210
+ return {
211
+ success: false,
212
+ hookSystem: "pre-commit",
213
+ message: `Add buoy hook to your .pre-commit-config.yaml:\n\n - repo: local\n hooks:\n - id: buoy\n name: buoy drift check\n entry: buoy check --staged --fail-on critical\n language: system\n types: [file]\n files: \\.(tsx|jsx|ts|js|vue|svelte)$`,
214
+ filePath: configPath,
215
+ };
216
+ }
217
+ // Create new pre-commit config
218
+ writeFileSync(configPath, PRE_COMMIT_CONFIG_YAML);
219
+ return {
220
+ success: true,
221
+ hookSystem: "pre-commit",
222
+ message: "Created .pre-commit-config.yaml",
223
+ filePath: configPath,
224
+ };
225
+ }
226
+ /**
227
+ * Setup lint-staged configuration
228
+ */
229
+ function setupLintStaged(projectRoot) {
230
+ const pkgPath = resolve(projectRoot, "package.json");
231
+ try {
232
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
233
+ const lintStaged = pkg["lint-staged"] || {};
234
+ // Check if buoy is already configured
235
+ const hasbuoy = Object.values(lintStaged).some((commands) => Array.isArray(commands) &&
236
+ commands.some((cmd) => cmd.includes("buoy")));
237
+ if (hasbuoy) {
238
+ return {
239
+ success: true,
240
+ hookSystem: "lint-staged",
241
+ message: "Buoy already configured in lint-staged",
242
+ filePath: pkgPath,
243
+ };
244
+ }
245
+ // Provide instructions for lint-staged
246
+ return {
247
+ success: false,
248
+ hookSystem: "lint-staged",
249
+ message: `Add buoy to your lint-staged config in package.json:\n\n"lint-staged": {\n "*.{tsx,jsx,ts,js,vue,svelte}": ["buoy check --staged --fail-on critical"]\n}`,
250
+ filePath: pkgPath,
251
+ };
252
+ }
253
+ catch {
254
+ return {
255
+ success: false,
256
+ hookSystem: "lint-staged",
257
+ message: "Failed to read package.json",
258
+ filePath: pkgPath,
259
+ };
260
+ }
261
+ }
262
+ /**
263
+ * Generate a standalone pre-commit hook script for .buoy/hooks/
264
+ */
265
+ export function generateStandaloneHook(projectRoot) {
266
+ const buoyDir = resolve(projectRoot, ".buoy");
267
+ const hooksDir = resolve(buoyDir, "hooks");
268
+ const hookPath = resolve(hooksDir, "pre-commit");
269
+ // Create directories
270
+ if (!existsSync(hooksDir)) {
271
+ mkdirSync(hooksDir, { recursive: true });
272
+ }
273
+ // Write hook script
274
+ writeFileSync(hookPath, PRE_COMMIT_HOOK);
275
+ chmodSync(hookPath, 0o755);
276
+ return {
277
+ success: true,
278
+ hookSystem: "git",
279
+ message: "Created .buoy/hooks/pre-commit",
280
+ filePath: hookPath,
281
+ };
282
+ }
283
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { Command } from 'commander';
1
+ import { Command } from "commander";
2
2
  export declare function createCli(): Command;
3
- export { defineConfig } from './config/schema.js';
4
- export type { BuoyConfig } from './config/schema.js';
3
+ export { defineConfig } from "./config/schema.js";
4
+ export type { BuoyConfig } from "./config/schema.js";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,SAAS,IAAI,OAAO,CAmBnC;AAGD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,SAAS,IAAI,OAAO,CAyBnC;AAGD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -1,22 +1,28 @@
1
- import { Command } from 'commander';
2
- import { createInitCommand, createScanCommand, createDriftCommand, createStatusCommand, createBootstrapCommand, createBuildCommand, createPluginsCommand, createCICommand } from './commands/index.js';
1
+ import { Command } from "commander";
2
+ import { createInitCommand, createScanCommand, createDriftCommand, createStatusCommand, createTokensCommand, createBuildCommand, createPluginsCommand, createCICommand, createCheckCommand, createBaselineCommand, createExplainCommand, createCompareCommand, createAuditCommand, createGraphCommand, } from "./commands/index.js";
3
3
  export function createCli() {
4
4
  const program = new Command();
5
5
  program
6
- .name('buoy')
7
- .description('Design drift detection for the AI era')
8
- .version('0.0.1');
6
+ .name("buoy")
7
+ .description("Design drift detection for the AI era")
8
+ .version("0.0.1");
9
9
  // Add commands
10
10
  program.addCommand(createInitCommand());
11
11
  program.addCommand(createScanCommand());
12
12
  program.addCommand(createDriftCommand());
13
13
  program.addCommand(createStatusCommand());
14
- program.addCommand(createBootstrapCommand());
14
+ program.addCommand(createTokensCommand());
15
15
  program.addCommand(createBuildCommand());
16
16
  program.addCommand(createPluginsCommand());
17
17
  program.addCommand(createCICommand());
18
+ program.addCommand(createCheckCommand());
19
+ program.addCommand(createBaselineCommand());
20
+ program.addCommand(createExplainCommand());
21
+ program.addCommand(createCompareCommand());
22
+ program.addCommand(createAuditCommand());
23
+ program.addCommand(createGraphCommand());
18
24
  return program;
19
25
  }
20
26
  // Re-export config utilities for user config files
21
- export { defineConfig } from './config/schema.js';
27
+ export { defineConfig } from "./config/schema.js";
22
28
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEvM,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,MAAM,CAAC;SACZ,WAAW,CAAC,uCAAuC,CAAC;SACpD,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,eAAe;IACf,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;IAEtC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mDAAmD;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,MAAM,CAAC;SACZ,WAAW,CAAC,uCAAuC,CAAC;SACpD,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,eAAe;IACf,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAEzC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mDAAmD;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,55 @@
1
+ import type { DriftResult, DriftSignal } from '@buoy-design/core';
2
+ export interface PRContext {
3
+ filesChanged?: string[];
4
+ baseBranch?: string;
5
+ headBranch?: string;
6
+ }
7
+ export declare function formatPRComment(results: DriftResult, _context?: PRContext): string;
8
+ /**
9
+ * Format an inline comment for a specific drift signal (CodeRabbit style)
10
+ */
11
+ export declare function formatInlineComment(signal: {
12
+ type: string;
13
+ severity: 'critical' | 'warning' | 'info';
14
+ message: string;
15
+ component?: string;
16
+ suggestion?: string;
17
+ currentValue?: string;
18
+ expectedValue?: string;
19
+ }, signalId?: string): string;
20
+ /**
21
+ * Format a signal for inline commenting from a DriftSignal
22
+ */
23
+ export declare function formatDriftSignalForInline(drift: DriftSignal, signalId: string): string;
24
+ /**
25
+ * AI Analysis types (imported from ai-analysis service)
26
+ */
27
+ interface DriftAnalysis {
28
+ signal: {
29
+ type: string;
30
+ severity: 'critical' | 'warning' | 'info';
31
+ message: string;
32
+ source: {
33
+ entityName: string;
34
+ location?: string;
35
+ };
36
+ };
37
+ analysis: string;
38
+ isLikelyIntentional: boolean;
39
+ confidence: number;
40
+ suggestedAction: 'fix' | 'approve' | 'discuss';
41
+ relatedHistory: string[];
42
+ }
43
+ interface PRAnalysisSummary {
44
+ overview: string;
45
+ criticalIssues: DriftAnalysis[];
46
+ warnings: DriftAnalysis[];
47
+ recommendations: string[];
48
+ riskLevel: 'low' | 'medium' | 'high';
49
+ }
50
+ /**
51
+ * Format PR comment with AI-powered analysis (CodeRabbit style)
52
+ */
53
+ export declare function formatAIPRComment(analysis: PRAnalysisSummary, results: DriftResult): string;
54
+ export {};
55
+ //# sourceMappingURL=github-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-formatter.d.ts","sourceRoot":"","sources":["../../src/integrations/github-formatter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGlE,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,MAAM,CAmIlF;AA+ED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CA0D5B;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUvF;AAED;;GAEG;AACH,UAAU,aAAa;IACrB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IACxI,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;IAC/C,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACtC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CA4G3F"}