clud-bug 0.6.34 → 0.7.0-rc.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 (110) hide show
  1. package/bin/clud-bug.js +10 -1353
  2. package/dist/cli/agents-md.d.ts +16 -0
  3. package/dist/cli/agents-md.d.ts.map +1 -0
  4. package/dist/cli/agents-md.js +226 -0
  5. package/dist/cli/agents-md.js.map +1 -0
  6. package/dist/cli/audit.d.ts +13 -0
  7. package/dist/cli/audit.d.ts.map +1 -0
  8. package/dist/cli/audit.js +90 -0
  9. package/dist/cli/audit.js.map +1 -0
  10. package/dist/cli/branch-protection.d.ts +57 -0
  11. package/dist/cli/branch-protection.d.ts.map +1 -0
  12. package/dist/cli/branch-protection.js +118 -0
  13. package/dist/cli/branch-protection.js.map +1 -0
  14. package/dist/cli/edit-workflow.d.ts +18 -0
  15. package/dist/cli/edit-workflow.d.ts.map +1 -0
  16. package/dist/cli/edit-workflow.js +43 -0
  17. package/dist/cli/edit-workflow.js.map +1 -0
  18. package/dist/cli/index.d.ts +8 -0
  19. package/dist/cli/index.d.ts.map +1 -0
  20. package/dist/cli/index.js +18 -0
  21. package/dist/cli/index.js.map +1 -0
  22. package/dist/cli/main.d.ts +3 -0
  23. package/dist/cli/main.d.ts.map +1 -0
  24. package/dist/cli/main.js +1336 -0
  25. package/dist/cli/main.js.map +1 -0
  26. package/dist/cli/skill-usage.d.ts +109 -0
  27. package/dist/cli/skill-usage.d.ts.map +1 -0
  28. package/dist/cli/skill-usage.js +380 -0
  29. package/dist/cli/skill-usage.js.map +1 -0
  30. package/dist/cli/skills.d.ts +56 -0
  31. package/dist/cli/skills.d.ts.map +1 -0
  32. package/dist/cli/skills.js +292 -0
  33. package/dist/cli/skills.js.map +1 -0
  34. package/dist/cli/update.d.ts +29 -0
  35. package/dist/cli/update.d.ts.map +1 -0
  36. package/dist/cli/update.js +186 -0
  37. package/dist/cli/update.js.map +1 -0
  38. package/dist/cli/usage.d.ts +142 -0
  39. package/dist/cli/usage.d.ts.map +1 -0
  40. package/dist/cli/usage.js +348 -0
  41. package/dist/cli/usage.js.map +1 -0
  42. package/dist/core/audit.d.ts +8 -0
  43. package/dist/core/audit.d.ts.map +1 -0
  44. package/dist/core/audit.js +47 -0
  45. package/dist/core/audit.js.map +1 -0
  46. package/dist/core/detect.d.ts +77 -0
  47. package/dist/core/detect.d.ts.map +1 -0
  48. package/dist/core/detect.js +262 -0
  49. package/dist/core/detect.js.map +1 -0
  50. package/dist/core/index.d.ts +11 -0
  51. package/dist/core/index.d.ts.map +1 -0
  52. package/dist/core/index.js +31 -0
  53. package/dist/core/index.js.map +1 -0
  54. package/dist/core/prompt-builder.d.ts +164 -0
  55. package/dist/core/prompt-builder.d.ts.map +1 -0
  56. package/dist/core/prompt-builder.js +419 -0
  57. package/dist/core/prompt-builder.js.map +1 -0
  58. package/dist/core/prompts.d.ts +9 -0
  59. package/dist/core/prompts.d.ts.map +1 -0
  60. package/dist/core/prompts.js +401 -0
  61. package/dist/core/prompts.js.map +1 -0
  62. package/dist/core/render-review.d.ts +6 -0
  63. package/dist/core/render-review.d.ts.map +1 -0
  64. package/dist/core/render-review.js +219 -0
  65. package/dist/core/render-review.js.map +1 -0
  66. package/dist/core/render.d.ts +13 -0
  67. package/dist/core/render.d.ts.map +1 -0
  68. package/dist/core/render.js +80 -0
  69. package/dist/core/render.js.map +1 -0
  70. package/dist/core/review-schema-zod.d.ts +240 -0
  71. package/dist/core/review-schema-zod.d.ts.map +1 -0
  72. package/dist/core/review-schema-zod.js +218 -0
  73. package/dist/core/review-schema-zod.js.map +1 -0
  74. package/dist/core/review-schema.d.ts +42 -0
  75. package/dist/core/review-schema.d.ts.map +1 -0
  76. package/dist/core/review-schema.js +156 -0
  77. package/dist/core/review-schema.js.map +1 -0
  78. package/dist/core/review-writeback.d.ts +139 -0
  79. package/dist/core/review-writeback.d.ts.map +1 -0
  80. package/dist/core/review-writeback.js +313 -0
  81. package/dist/core/review-writeback.js.map +1 -0
  82. package/dist/core/skills.d.ts +122 -0
  83. package/dist/core/skills.d.ts.map +1 -0
  84. package/dist/core/skills.js +636 -0
  85. package/dist/core/skills.js.map +1 -0
  86. package/package.json +30 -4
  87. package/{lib/agents-md.js → src/cli/agents-md.ts} +25 -14
  88. package/{lib/audit.js → src/cli/audit.ts} +37 -44
  89. package/{lib/branch-protection.js → src/cli/branch-protection.ts} +75 -11
  90. package/{lib/edit-workflow.js → src/cli/edit-workflow.ts} +32 -11
  91. package/src/cli/index.ts +101 -0
  92. package/src/cli/main.ts +1376 -0
  93. package/{lib/skill-usage.js → src/cli/skill-usage.ts} +168 -94
  94. package/src/cli/skills.ts +386 -0
  95. package/{lib/update.js → src/cli/update.ts} +68 -27
  96. package/{lib/usage.js → src/cli/usage.ts} +167 -76
  97. package/src/core/audit.ts +53 -0
  98. package/{lib/detect.js → src/core/detect.ts} +100 -47
  99. package/src/core/index.ts +155 -0
  100. package/src/core/prompt-builder.ts +561 -0
  101. package/{lib/prompts.js → src/core/prompts.ts} +16 -2
  102. package/{lib/render-review.js → src/core/render-review.ts} +57 -25
  103. package/{lib/render.js → src/core/render.ts} +36 -10
  104. package/src/core/review-schema-zod.ts +262 -0
  105. package/{lib/review-schema.js → src/core/review-schema.ts} +68 -5
  106. package/src/core/review-writeback.ts +446 -0
  107. package/{lib/skills.js → src/core/skills.ts} +339 -342
  108. package/templates/workflow-py.yml.tmpl +2 -2
  109. package/templates/workflow-ts.yml.tmpl +2 -2
  110. package/templates/workflow.yml.tmpl +17 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clud-bug",
3
- "version": "0.6.34",
3
+ "version": "0.7.0-rc.2",
4
4
  "description": "Skill-driven Claude PR review. Ship a brand-voice skill, get brand reviews. Each finding cites the skill that motivated it. CLI installs the workflow + a baseline kit; add more from skills.sh.",
5
5
  "homepage": "https://cludbug.dev",
6
6
  "bugs": "https://github.com/thrillmade/clud-bug/issues",
@@ -23,16 +23,42 @@
23
23
  "bin": "bin/clud-bug.js",
24
24
  "files": [
25
25
  "bin",
26
- "lib",
26
+ "dist",
27
+ "src",
27
28
  "templates",
28
29
  "README.md",
29
30
  "LICENSE"
30
31
  ],
32
+ "exports": {
33
+ ".": {
34
+ "import": "./dist/cli/index.js",
35
+ "types": "./dist/cli/index.d.ts"
36
+ },
37
+ "./core": {
38
+ "import": "./dist/core/index.js",
39
+ "types": "./dist/core/index.d.ts"
40
+ }
41
+ },
42
+ "main": "./dist/cli/index.js",
43
+ "types": "./dist/cli/index.d.ts",
31
44
  "engines": {
32
45
  "node": ">=20"
33
46
  },
34
47
  "scripts": {
35
- "test": "node --test test/*.test.js",
36
- "prepublishOnly": "npm test"
48
+ "build": "tsc -p tsconfig.json",
49
+ "dev": "tsx src/cli/index.ts",
50
+ "test": "vitest run",
51
+ "test:watch": "vitest",
52
+ "test:fixtures": "node scripts/fixture-check.mjs",
53
+ "prepublishOnly": "npm run build && npm test"
54
+ },
55
+ "devDependencies": {
56
+ "@types/node": "^22.0.0",
57
+ "tsx": "^4.19.0",
58
+ "typescript": "^5.5.0",
59
+ "vitest": "^2.1.0"
60
+ },
61
+ "dependencies": {
62
+ "zod": "^4.4.3"
37
63
  }
38
64
  }
@@ -31,6 +31,12 @@ const TOUCH_IF_PRESENT = [
31
31
  '.continuerules',
32
32
  ];
33
33
 
34
+ export interface RenderBlockOptions {
35
+ version?: string | undefined;
36
+ strictMode?: boolean | undefined;
37
+ skillRelPath?: string | undefined;
38
+ }
39
+
34
40
  // Render the clud-bug block. Bundled here rather than in a template file so
35
41
  // updates ship with the CLI itself.
36
42
  //
@@ -52,7 +58,7 @@ const TOUCH_IF_PRESENT = [
52
58
  // path `.claude/skills/...`), render the LOCAL repo path. Otherwise the
53
59
  // link is dead in the publisher repo (this used to require a manual fix
54
60
  // every v0.6.* propagation cycle on agent-skills).
55
- export function renderBlock({ version, strictMode, skillRelPath } = {}) {
61
+ export function renderBlock({ version, strictMode, skillRelPath }: RenderBlockOptions = {}): string {
56
62
  const versionLine = version ? `_Installed at clud-bug v${version}._` : '';
57
63
  const strictNote = strictMode === true
58
64
  ? '**on** in this repo (workflow check fails on critical findings)'
@@ -85,7 +91,7 @@ ${END_MARKER}`;
85
91
  // in the working tree, the AGENTS.md link should point there, not at the
86
92
  // consumer-install `.claude/skills/...` path that doesn't exist in the
87
93
  // publisher repo.
88
- export async function detectSkillRelPath(cwd) {
94
+ export async function detectSkillRelPath(cwd: string): Promise<string> {
89
95
  const publisherPath = 'skills/clud-bug-collaboration/SKILL.md';
90
96
  const consumerPath = '.claude/skills/clud-bug-collaboration/SKILL.md';
91
97
  if (await fileExists(join(cwd, publisherPath))) return publisherPath;
@@ -94,7 +100,7 @@ export async function detectSkillRelPath(cwd) {
94
100
 
95
101
  // Replace an existing clud-bug block in `content`, OR append if absent.
96
102
  // Idempotent: running multiple times leaves a single block.
97
- export function upsertBlock(content, block) {
103
+ export function upsertBlock(content: string, block: string): string {
98
104
  const startRe = new RegExp(escapeRe(START_MARKER));
99
105
  const endRe = new RegExp(escapeRe(END_MARKER));
100
106
  if (startRe.test(content) && endRe.test(content)) {
@@ -113,7 +119,7 @@ export function upsertBlock(content, block) {
113
119
  // Matches at start-of-line (a literal `@AGENTS.md` mentioned in prose
114
120
  // won't fire; only the import directive does). Allows trailing space
115
121
  // (some editors trim it; some don't) and optional newline terminator.
116
- export function hasAgentsMdImport(content) {
122
+ export function hasAgentsMdImport(content: unknown): boolean {
117
123
  if (typeof content !== 'string') return false;
118
124
  return /^@AGENTS\.md\s*$/m.test(content);
119
125
  }
@@ -125,7 +131,7 @@ export function hasAgentsMdImport(content) {
125
131
  //
126
132
  // Returns the cleaned content. If no block exists, returns content
127
133
  // unchanged. Idempotent.
128
- export function removeBlock(content) {
134
+ export function removeBlock(content: string): string {
129
135
  if (typeof content !== 'string') return content;
130
136
  // Strip the block. Match \n+ before the marker so we also eat the
131
137
  // preceding blank line — otherwise we'd leave a "stub line + blank
@@ -136,25 +142,30 @@ export function removeBlock(content) {
136
142
  return content.replace(re, '');
137
143
  }
138
144
 
139
- function escapeRe(s) {
145
+ function escapeRe(s: string): string {
140
146
  return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
141
147
  }
142
148
 
149
+ export interface ApplyToRepoResult {
150
+ touched: string[];
151
+ created: string[];
152
+ }
153
+
143
154
  // Touches all relevant agent-instruction files in `cwd`.
144
155
  // Creates AGENTS.md if it doesn't exist (it's the canonical home).
145
156
  // Updates other files only if they already exist (don't proliferate stubs;
146
157
  // logmind or the user owns those creation decisions).
147
158
  //
148
159
  // Returns { touched: string[], created: string[] } for the caller to log.
149
- export async function applyToRepo(cwd, blockOpts = {}) {
160
+ export async function applyToRepo(cwd: string, blockOpts: RenderBlockOptions = {}): Promise<ApplyToRepoResult> {
150
161
  // v0.6.25 / gotcha #2: detect publisher repo + render local skill path.
151
162
  // Pre-v0.6.25 always rendered the consumer install path → broke
152
163
  // agent-skills' check-links every propagation cycle. Detection runs
153
164
  // before block render so the path is correct from the first write.
154
165
  const skillRelPath = blockOpts.skillRelPath ?? await detectSkillRelPath(cwd);
155
166
  const block = renderBlock({ ...blockOpts, skillRelPath });
156
- const touched = [];
157
- const created = [];
167
+ const touched: string[] = [];
168
+ const created: string[] = [];
158
169
 
159
170
  for (const path of ALWAYS_TOUCH) {
160
171
  const full = join(cwd, path);
@@ -181,8 +192,8 @@ export async function applyToRepo(cwd, blockOpts = {}) {
181
192
  // .cursor/rules/*.md — append to every file that exists.
182
193
  const cursorRulesDir = join(cwd, '.cursor', 'rules');
183
194
  if (await fileExists(cursorRulesDir)) {
184
- let entries = [];
185
- try { entries = await readdir(cursorRulesDir); } catch {}
195
+ let entries: string[] = [];
196
+ try { entries = await readdir(cursorRulesDir); } catch { /* dir missing or unreadable */ }
186
197
  for (const name of entries) {
187
198
  if (!name.endsWith('.md')) continue;
188
199
  const full = join(cursorRulesDir, name);
@@ -206,11 +217,11 @@ export async function applyToRepo(cwd, blockOpts = {}) {
206
217
  //
207
218
  // AGENTS.md itself is NOT routed through here — it always gets the
208
219
  // block (it's the canonical source).
209
- function nextContentFor(prior, block) {
220
+ function nextContentFor(prior: string, block: string): string {
210
221
  return hasAgentsMdImport(prior) ? removeBlock(prior) : upsertBlock(prior, block);
211
222
  }
212
223
 
213
- function seedFile(name) {
224
+ function seedFile(name: string): string {
214
225
  // When AGENTS.md doesn't exist (no logmind, no prior tooling), seed with a
215
226
  // minimal canonical header so the clud-bug block has context.
216
227
  if (name === 'AGENTS.md') {
@@ -225,6 +236,6 @@ Claude Code, Cline, Continue, Aider, ...) read it directly.
225
236
  return '';
226
237
  }
227
238
 
228
- async function fileExists(path) {
239
+ async function fileExists(path: string): Promise<boolean> {
229
240
  try { await stat(path); return true; } catch { return false; }
230
241
  }
@@ -1,37 +1,55 @@
1
+ // CLI audit helpers — these shell out to git and walk the working tree.
2
+ //
3
+ // Split from lib/audit.js during the v0.7.0 TS migration. Pure helpers
4
+ // (durationToGitSince, renderAuditHeader) live in src/core/audit.ts so the
5
+ // App-side (clud-bug-app) can consume them without dragging child_process
6
+ // in. computeAuditFileSet stays CLI-only — it is only meaningful when run
7
+ // in a checked-out repo.
8
+
1
9
  import { spawnSync } from 'node:child_process';
10
+ import { durationToGitSince } from '../core/audit.js';
2
11
 
3
- // Convert a duration like "7d", "2w", "1mo", "3mo", "1y" to a git --since arg.
4
- // Returns null if the input is empty/undefined; throws on malformed input.
5
- export function durationToGitSince(input) {
6
- if (!input) return null;
7
- const m = String(input).trim().match(/^(\d+)\s*(d|w|mo|m|y)$/i);
8
- if (!m) {
9
- throw new Error(`Unrecognized duration "${input}". Examples: 7d, 2w, 1mo, 1y.`);
10
- }
11
- const n = Number(m[1]);
12
- const unit = m[2].toLowerCase();
13
- const map = { d: 'day', w: 'week', mo: 'month', m: 'month', y: 'year' };
14
- return `${n} ${map[unit]}${n === 1 ? '' : 's'} ago`;
12
+ export interface GitLinesOptions {
13
+ // `cwd?: string | undefined` (vs `cwd?: string`) is required by
14
+ // exactOptionalPropertyTypes: true — callers freely pass an inline
15
+ // object that may have `cwd` typed as `string | undefined`.
16
+ cwd?: string | undefined;
17
+ allowFail?: boolean | undefined;
15
18
  }
16
19
 
17
20
  // Run a git command, return stdout lines split by \n. Throws on non-zero exit
18
21
  // unless { allowFail: true }, in which case returns [].
19
- export function gitLines(args, opts = {}) {
22
+ // Note: under noUncheckedIndexedAccess: true, array element reads are typed
23
+ // `string | undefined`. The return type stays `string[]` (we filter falsy
24
+ // strings out), but callers indexing into the result must keep that in mind.
25
+ export function gitLines(args: string[], opts: GitLinesOptions = {}): string[] {
20
26
  const r = spawnSync('git', args, { encoding: 'utf8', cwd: opts.cwd || process.cwd() });
21
27
  if (r.status !== 0) {
22
28
  if (opts.allowFail) return [];
23
- throw new Error(`git ${args.join(' ')} failed (${r.status}): ${r.stderr.trim()}`);
29
+ // spawnSync with encoding:'utf8' makes stderr `string | null`; the null
30
+ // path only happens when the child can't be spawned at all (a different
31
+ // error path). When status is non-zero we have stderr.
32
+ const stderr = (r.stderr ?? '').toString().trim();
33
+ throw new Error(`git ${args.join(' ')} failed (${r.status}): ${stderr}`);
24
34
  }
25
- return r.stdout.split('\n').filter(Boolean);
35
+ const stdout = (r.stdout ?? '').toString();
36
+ return stdout.split('\n').filter(Boolean);
37
+ }
38
+
39
+ export interface AuditFileSetOptions {
40
+ since?: string | null;
41
+ changedIn?: string | null;
42
+ scopes?: string[];
43
+ cwd?: string;
26
44
  }
27
45
 
28
46
  // Returns the file set the audit should consider, in repo-relative paths.
29
47
  // Filters: optional --since (git date), optional --changed-in (duration string),
30
48
  // optional --scope globs (one or more, repeatable).
31
- export function computeAuditFileSet({ since, changedIn, scopes = [], cwd } = {}) {
49
+ export function computeAuditFileSet({ since, changedIn, scopes = [], cwd }: AuditFileSetOptions = {}): string[] {
32
50
  const sinceArg = since || (changedIn ? durationToGitSince(changedIn) : null);
33
51
 
34
- let files;
52
+ let files: string[];
35
53
  if (sinceArg) {
36
54
  // Files touched in any commit within the window.
37
55
  files = [...new Set(gitLines(['log', `--since=${sinceArg}`, '--name-only', '--pretty=format:'], { cwd }))];
@@ -57,7 +75,7 @@ export function computeAuditFileSet({ since, changedIn, scopes = [], cwd } = {})
57
75
 
58
76
  // Minimal glob → RegExp. Supports **, *, ?. Anchors at both ends so that
59
77
  // 'src/**/*.ts' matches 'src/lib/foo.ts' but not 'app/src/lib/foo.ts'.
60
- function globToRegex(glob) {
78
+ function globToRegex(glob: string): RegExp {
61
79
  let rx = '';
62
80
  let i = 0;
63
81
  while (i < glob.length) {
@@ -74,7 +92,7 @@ function globToRegex(glob) {
74
92
  } else if (ch === '?') {
75
93
  rx += '[^/]';
76
94
  i++;
77
- } else if (/[.+^$|()\[\]{}\\]/.test(ch)) {
95
+ } else if (ch !== undefined && /[.+^$|()\[\]{}\\]/.test(ch)) {
78
96
  rx += '\\' + ch;
79
97
  i++;
80
98
  } else {
@@ -84,28 +102,3 @@ function globToRegex(glob) {
84
102
  }
85
103
  return new RegExp(`^${rx}$`);
86
104
  }
87
-
88
- // Render the audit report's initial markdown body. The Action's Claude run
89
- // will append findings under a "## Findings" section after this header.
90
- export function renderAuditHeader({ date, scopeLabel, files }) {
91
- const head = `# 🐛 Clud Bug audit — ${date}
92
-
93
- A scheduled walk through the habitat. Scope: ${scopeLabel}.
94
- Files surveyed: **${files.length}**.
95
-
96
- <details>
97
- <summary>File manifest (${files.length})</summary>
98
-
99
- \`\`\`
100
- ${files.join('\n')}
101
- \`\`\`
102
-
103
- </details>
104
-
105
- ---
106
-
107
- ## Findings
108
-
109
- `;
110
- return head;
111
- }
@@ -21,35 +21,70 @@
21
21
 
22
22
  import { spawn } from 'node:child_process';
23
23
 
24
+ export interface GhResult {
25
+ code: number | null;
26
+ stdout: string;
27
+ stderr: string;
28
+ }
29
+
30
+ export interface GhOptions {
31
+ stdin?: string | undefined;
32
+ }
33
+
34
+ // Pluggable invoker shape — the CLI uses `defaultGh`, tests pass a mock.
35
+ export type GhInvoker = (args: string[], opts?: GhOptions) => Promise<GhResult>;
36
+
24
37
  // Default `gh` invoker: spawns `gh <args>` and resolves with
25
38
  // { code, stdout, stderr }. Tests pass a function with the same shape.
26
- function defaultGh(args, { stdin } = {}) {
27
- return new Promise((resolve, reject) => {
39
+ function defaultGh(args: string[], opts: GhOptions = {}): Promise<GhResult> {
40
+ const { stdin } = opts;
41
+ return new Promise<GhResult>((resolve, reject) => {
28
42
  const child = spawn('gh', args, { stdio: ['pipe', 'pipe', 'pipe'] });
29
43
  let stdout = '';
30
44
  let stderr = '';
31
- child.stdout.on('data', (d) => { stdout += d; });
32
- child.stderr.on('data', (d) => { stderr += d; });
45
+ // Under strict typing, spawn() can return null for stdio pipes when
46
+ // stdio is configured to ignore the stream. We requested 'pipe' for
47
+ // all three so the streams are guaranteed; the `!` non-null asserts
48
+ // make this explicit and keep the runtime semantics identical.
49
+ child.stdout!.on('data', (d: Buffer | string) => { stdout += d; });
50
+ child.stderr!.on('data', (d: Buffer | string) => { stderr += d; });
33
51
  child.on('error', reject);
34
52
  child.on('close', (code) => resolve({ code, stdout, stderr }));
35
- if (stdin) child.stdin.end(stdin);
36
- else child.stdin.end();
53
+ if (stdin) child.stdin!.end(stdin);
54
+ else child.stdin!.end();
37
55
  });
38
56
  }
39
57
 
58
+ export interface DetectRepoOptions {
59
+ gh?: GhInvoker | undefined;
60
+ }
61
+
62
+ export interface DetectedRepo {
63
+ owner: string;
64
+ repo: string;
65
+ }
66
+
40
67
  // Returns { owner, repo } from the local git remote. Uses
41
68
  // `gh repo view --json owner,name` so it doesn't depend on parsing URLs.
42
- export async function detectRepo({ gh = defaultGh } = {}) {
69
+ export async function detectRepo({ gh = defaultGh }: DetectRepoOptions = {}): Promise<DetectedRepo> {
43
70
  const { code, stdout, stderr } = await gh(['repo', 'view', '--json', 'owner,name']);
44
71
  if (code !== 0) {
45
72
  throw new Error(`gh repo view failed (${code}): ${stderr.trim() || '(no stderr)'}`);
46
73
  }
47
- const parsed = JSON.parse(stdout);
74
+ const parsed = JSON.parse(stdout) as { owner: { login: string }; name: string };
48
75
  return { owner: parsed.owner.login, repo: parsed.name };
49
76
  }
50
77
 
78
+ export interface DetectDefaultBranchOptions {
79
+ owner: string;
80
+ repo: string;
81
+ gh?: GhInvoker | undefined;
82
+ }
83
+
51
84
  // Returns the default branch name (e.g. "main", "master", "trunk").
52
- export async function detectDefaultBranch({ owner, repo, gh = defaultGh } = {}) {
85
+ export async function detectDefaultBranch(
86
+ { owner, repo, gh = defaultGh }: DetectDefaultBranchOptions,
87
+ ): Promise<string> {
53
88
  const { code, stdout, stderr } = await gh(['api', `repos/${owner}/${repo}`, '--jq', '.default_branch']);
54
89
  if (code !== 0) {
55
90
  throw new Error(`Could not read default_branch for ${owner}/${repo}: ${stderr.trim() || stdout.trim()}`);
@@ -57,6 +92,20 @@ export async function detectDefaultBranch({ owner, repo, gh = defaultGh } = {})
57
92
  return stdout.trim();
58
93
  }
59
94
 
95
+ export type ProtectionState =
96
+ | { state: 'enabled' }
97
+ | { state: 'disabled' }
98
+ | { state: 'no-protection' }
99
+ | { state: 'forbidden' }
100
+ | { state: 'unknown'; reason: string };
101
+
102
+ export interface GetProtectionStateOptions {
103
+ owner: string;
104
+ repo: string;
105
+ branch: string;
106
+ gh?: GhInvoker | undefined;
107
+ }
108
+
60
109
  // Inspects the current required_conversation_resolution state. Returns
61
110
  // one of:
62
111
  // { state: 'enabled' }
@@ -68,7 +117,9 @@ export async function detectDefaultBranch({ owner, repo, gh = defaultGh } = {})
68
117
  // The reason this returns a discriminated union rather than throwing is
69
118
  // that runInit decides what to do based on the state: each value above
70
119
  // has a different user-facing message and follow-up action.
71
- export async function getProtectionState({ owner, repo, branch, gh = defaultGh } = {}) {
120
+ export async function getProtectionState(
121
+ { owner, repo, branch, gh = defaultGh }: GetProtectionStateOptions,
122
+ ): Promise<ProtectionState> {
72
123
  const { code, stdout, stderr } = await gh([
73
124
  'api',
74
125
  `repos/${owner}/${repo}/branches/${branch}/protection`,
@@ -89,11 +140,24 @@ export async function getProtectionState({ owner, repo, branch, gh = defaultGh }
89
140
  return { state: 'unknown', reason: stderr.trim() || stdout.trim() || `gh exited ${code}` };
90
141
  }
91
142
 
143
+ export interface EnableConversationResolutionOptions {
144
+ owner: string;
145
+ repo: string;
146
+ branch: string;
147
+ gh?: GhInvoker | undefined;
148
+ }
149
+
150
+ export type EnableResult =
151
+ | { ok: true }
152
+ | { ok: false; state: 'no-protection' | 'forbidden' | 'unknown'; reason: string };
153
+
92
154
  // Enables the single flag via the dedicated endpoint. Doesn't touch any
93
155
  // other protection settings. Returns { ok: true } on success or
94
156
  // { ok: false, state, reason } using the same state taxonomy as
95
157
  // getProtectionState() so callers can produce a consistent message.
96
- export async function enableConversationResolution({ owner, repo, branch, gh = defaultGh } = {}) {
158
+ export async function enableConversationResolution(
159
+ { owner, repo, branch, gh = defaultGh }: EnableConversationResolutionOptions,
160
+ ): Promise<EnableResult> {
97
161
  const { code, stdout, stderr } = await gh([
98
162
  'api', '-X', 'POST',
99
163
  `repos/${owner}/${repo}/branches/${branch}/protection/required_conversation_resolution`,
@@ -7,41 +7,62 @@ import { spawnSync } from 'node:child_process';
7
7
  // so claude-code-action's workflow-self-mod guard doesn't bundle them
8
8
  // with other reviewable work.
9
9
 
10
- export function getPendingWorkflowEdits(cwd = process.cwd()) {
10
+ export interface PendingWorkflowEdits {
11
+ allWorkflow: boolean;
12
+ files: string[];
13
+ nonWorkflow: string[];
14
+ }
15
+
16
+ export function getPendingWorkflowEdits(cwd: string = process.cwd()): PendingWorkflowEdits {
11
17
  // --untracked-files=all so new files in new directories are reported as
12
18
  // individual paths instead of being collapsed to the parent dir (default
13
19
  // 'normal' mode would emit '.github/' for a brand-new clud-bug-review.yml).
14
20
  const r = spawnSync('git', ['status', '--porcelain', '--untracked-files=all'], { cwd, encoding: 'utf8' });
15
21
  if (r.status !== 0) {
16
- throw new Error(`git status failed: ${r.stderr.trim()}`);
22
+ // r.stderr is `string | null` under strict; safe to coalesce to '' for the
23
+ // error message — null here means the child failed to spawn entirely.
24
+ throw new Error(`git status failed: ${(r.stderr ?? '').trim()}`);
17
25
  }
18
- const lines = r.stdout.split('\n').filter(Boolean);
26
+ const stdout = r.stdout ?? '';
27
+ const lines = stdout.split('\n').filter(Boolean);
19
28
  if (lines.length === 0) return { allWorkflow: true, files: [], nonWorkflow: [] };
20
29
 
21
- const files = [];
22
- const nonWorkflow = [];
30
+ const files: string[] = [];
31
+ const nonWorkflow: string[] = [];
23
32
  for (const line of lines) {
24
33
  // porcelain format: XY <space> <path> ; rename: XY old -> new
25
- const path = line.slice(3).split(' -> ').pop().trim();
34
+ // .pop() on a non-empty split always yields a string here, but
35
+ // noUncheckedIndexedAccess makes TS pessimistic — coalesce + trim.
36
+ const path = (line.slice(3).split(' -> ').pop() ?? '').trim();
26
37
  files.push(path);
27
38
  if (!isWorkflowFile(path)) nonWorkflow.push(path);
28
39
  }
29
40
  return { allWorkflow: nonWorkflow.length === 0, files, nonWorkflow };
30
41
  }
31
42
 
32
- export function isWorkflowFile(path) {
43
+ export function isWorkflowFile(path: string): boolean {
33
44
  return /^\.github\/workflows\/clud-bug-.*\.ya?ml$/.test(path);
34
45
  }
35
46
 
36
- export function makeBranchName(date = new Date()) {
47
+ export function makeBranchName(date: Date = new Date()): string {
37
48
  const stamp = date.toISOString().replace(/[:.]/g, '-').slice(0, 19);
38
49
  return `clud-bug/edit-workflow-${stamp}`;
39
50
  }
40
51
 
41
- export function git(cwd, args, opts = {}) {
52
+ export interface GitOptions {
53
+ allowFail?: boolean | undefined;
54
+ }
55
+
56
+ export interface GitResult {
57
+ ok: boolean;
58
+ stdout: string;
59
+ stderr: string;
60
+ }
61
+
62
+ export function git(cwd: string, args: string[], opts: GitOptions = {}): GitResult {
42
63
  const r = spawnSync('git', args, { cwd, encoding: 'utf8' });
43
64
  if (r.status !== 0 && !opts.allowFail) {
44
- throw new Error(`git ${args.join(' ')} failed (${r.status}): ${r.stderr.trim()}`);
65
+ throw new Error(`git ${args.join(' ')} failed (${r.status}): ${(r.stderr ?? '').trim()}`);
45
66
  }
46
- return { ok: r.status === 0, stdout: r.stdout.trim(), stderr: r.stderr.trim() };
67
+ return { ok: r.status === 0, stdout: (r.stdout ?? '').trim(), stderr: (r.stderr ?? '').trim() };
47
68
  }
@@ -0,0 +1,101 @@
1
+ // Public API surface for `clud-bug` CLI helpers (consumed via the package's
2
+ // `.` exports map → `dist/cli/index.js`).
3
+ //
4
+ // Each line re-exports one CLI module's public symbols. Modules are
5
+ // added incrementally as the v0.7.0 TypeScript migration converts each
6
+ // lib/* JS file.
7
+
8
+ // The top-level dispatcher main() lives in main.ts; bin/clud-bug.js
9
+ // imports it through this barrel and runs it. Keeping main() out of
10
+ // this file avoids accidental side effects when consumers
11
+ // `import { ... } from 'clud-bug'`.
12
+ export { main } from './main.js';
13
+
14
+ export {
15
+ detectRepo,
16
+ detectDefaultBranch,
17
+ getProtectionState,
18
+ enableConversationResolution,
19
+ type GhResult,
20
+ type GhOptions,
21
+ type GhInvoker,
22
+ type DetectRepoOptions,
23
+ type DetectedRepo,
24
+ type DetectDefaultBranchOptions,
25
+ type ProtectionState,
26
+ type GetProtectionStateOptions,
27
+ type EnableConversationResolutionOptions,
28
+ type EnableResult,
29
+ } from './branch-protection.js';
30
+
31
+ export {
32
+ getPendingWorkflowEdits,
33
+ isWorkflowFile,
34
+ makeBranchName,
35
+ git,
36
+ type PendingWorkflowEdits,
37
+ type GitOptions,
38
+ type GitResult,
39
+ } from './edit-workflow.js';
40
+
41
+ export {
42
+ renderBlock,
43
+ detectSkillRelPath,
44
+ upsertBlock,
45
+ hasAgentsMdImport,
46
+ removeBlock,
47
+ applyToRepo,
48
+ type RenderBlockOptions,
49
+ type ApplyToRepoResult,
50
+ } from './agents-md.js';
51
+
52
+ export {
53
+ computeSkillUsageDelta,
54
+ mergeSkillUsage,
55
+ assessSkillHealth,
56
+ formatHealthDashboard,
57
+ DEFAULT_GH_RUNNER,
58
+ fetchUsageArtifacts,
59
+ aggregateUsageStream,
60
+ type SkillDelta,
61
+ type SkillUsageEntry,
62
+ type SkillDeltaMap,
63
+ type SkillUsageMap,
64
+ type SkillHealthStatus,
65
+ type SkillHealthRow,
66
+ type GhRunResult,
67
+ type GhRunner,
68
+ type FetchUsageArtifactsOptions,
69
+ type UsageArtifactRecord,
70
+ } from './skill-usage.js';
71
+
72
+ export {
73
+ PRICING,
74
+ computeReviewCost,
75
+ costPerLOC,
76
+ cacheHitRate,
77
+ extractTokensFromLog,
78
+ rollup,
79
+ formatRollup,
80
+ type ModelPricing,
81
+ type TokenCounts,
82
+ type CostParts,
83
+ type ReviewCost,
84
+ type ExtractedTokens,
85
+ type ReviewRecord,
86
+ type RollupGroupStats,
87
+ type RollupTotal,
88
+ type RollupTrend,
89
+ type RollupOutlier,
90
+ type UnknownModelReview,
91
+ type Rollup,
92
+ type FormatRollupOptions,
93
+ } from './usage.js';
94
+
95
+ export {
96
+ runUpdate,
97
+ type RunUpdateOptions,
98
+ type UpdateChangeRecord,
99
+ type UpdateSkippedRecord,
100
+ type RunUpdateResult,
101
+ } from './update.js';