bb-cc-lite 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +62 -0
- package/assets/statusline-demo.gif +0 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +208 -0
- package/dist/cli.js.map +1 -0
- package/dist/doctor.d.ts +15 -0
- package/dist/doctor.js +116 -0
- package/dist/doctor.js.map +1 -0
- package/dist/hooks.d.ts +14 -0
- package/dist/hooks.js +127 -0
- package/dist/hooks.js.map +1 -0
- package/dist/paths.d.ts +8 -0
- package/dist/paths.js +32 -0
- package/dist/paths.js.map +1 -0
- package/dist/pricing.d.ts +14 -0
- package/dist/pricing.js +111 -0
- package/dist/pricing.js.map +1 -0
- package/dist/renderer.d.ts +2 -0
- package/dist/renderer.js +71 -0
- package/dist/renderer.js.map +1 -0
- package/dist/settings.d.ts +40 -0
- package/dist/settings.js +430 -0
- package/dist/settings.js.map +1 -0
- package/dist/signals.d.ts +6 -0
- package/dist/signals.js +245 -0
- package/dist/signals.js.map +1 -0
- package/dist/status-input.d.ts +8 -0
- package/dist/status-input.js +208 -0
- package/dist/status-input.js.map +1 -0
- package/dist/store.d.ts +12 -0
- package/dist/store.js +111 -0
- package/dist/store.js.map +1 -0
- package/dist/transcript.d.ts +6 -0
- package/dist/transcript.js +231 -0
- package/dist/transcript.js.map +1 -0
- package/dist/types.d.ts +85 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { TokenUsage } from "./types.js";
|
|
2
|
+
export interface ModelPrice {
|
|
3
|
+
inputCostPerToken?: number;
|
|
4
|
+
outputCostPerToken?: number;
|
|
5
|
+
cacheCreationInputTokenCost?: number;
|
|
6
|
+
cacheReadInputTokenCost?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface PricingTable {
|
|
9
|
+
fetchedAt?: string;
|
|
10
|
+
models: Record<string, ModelPrice>;
|
|
11
|
+
}
|
|
12
|
+
export declare function loadPricing(cachePath?: string): Promise<PricingTable>;
|
|
13
|
+
export declare function refreshPricing(cachePath?: string): Promise<PricingTable>;
|
|
14
|
+
export declare function estimateCostUsd(modelId: string | undefined, usage: TokenUsage, pricing: PricingTable): number | undefined;
|
package/dist/pricing.js
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { chmod, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
import { pricingCachePath } from "./paths.js";
|
|
4
|
+
const FALLBACK_PRICING = {
|
|
5
|
+
fetchedAt: "bundled",
|
|
6
|
+
models: {
|
|
7
|
+
"claude-3-5-sonnet": {
|
|
8
|
+
inputCostPerToken: 3 / 1_000_000,
|
|
9
|
+
outputCostPerToken: 15 / 1_000_000,
|
|
10
|
+
cacheCreationInputTokenCost: 3.75 / 1_000_000,
|
|
11
|
+
cacheReadInputTokenCost: 0.3 / 1_000_000
|
|
12
|
+
},
|
|
13
|
+
"claude-3-7-sonnet": {
|
|
14
|
+
inputCostPerToken: 3 / 1_000_000,
|
|
15
|
+
outputCostPerToken: 15 / 1_000_000,
|
|
16
|
+
cacheCreationInputTokenCost: 3.75 / 1_000_000,
|
|
17
|
+
cacheReadInputTokenCost: 0.3 / 1_000_000
|
|
18
|
+
},
|
|
19
|
+
"claude-sonnet-4": {
|
|
20
|
+
inputCostPerToken: 3 / 1_000_000,
|
|
21
|
+
outputCostPerToken: 15 / 1_000_000,
|
|
22
|
+
cacheCreationInputTokenCost: 3.75 / 1_000_000,
|
|
23
|
+
cacheReadInputTokenCost: 0.3 / 1_000_000
|
|
24
|
+
},
|
|
25
|
+
"claude-opus-4": {
|
|
26
|
+
inputCostPerToken: 15 / 1_000_000,
|
|
27
|
+
outputCostPerToken: 75 / 1_000_000,
|
|
28
|
+
cacheCreationInputTokenCost: 18.75 / 1_000_000,
|
|
29
|
+
cacheReadInputTokenCost: 1.5 / 1_000_000
|
|
30
|
+
},
|
|
31
|
+
"claude-3-opus": {
|
|
32
|
+
inputCostPerToken: 15 / 1_000_000,
|
|
33
|
+
outputCostPerToken: 75 / 1_000_000,
|
|
34
|
+
cacheCreationInputTokenCost: 18.75 / 1_000_000,
|
|
35
|
+
cacheReadInputTokenCost: 1.5 / 1_000_000
|
|
36
|
+
},
|
|
37
|
+
"claude-3-haiku": {
|
|
38
|
+
inputCostPerToken: 0.25 / 1_000_000,
|
|
39
|
+
outputCostPerToken: 1.25 / 1_000_000,
|
|
40
|
+
cacheCreationInputTokenCost: 0.3 / 1_000_000,
|
|
41
|
+
cacheReadInputTokenCost: 0.03 / 1_000_000
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const LITELLM_PRICING_URL = "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json";
|
|
46
|
+
export async function loadPricing(cachePath = pricingCachePath()) {
|
|
47
|
+
try {
|
|
48
|
+
const parsed = JSON.parse(await readFile(cachePath, "utf8"));
|
|
49
|
+
if (parsed.models && typeof parsed.models === "object") {
|
|
50
|
+
return parsed;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Fall back to bundled prices.
|
|
55
|
+
}
|
|
56
|
+
return FALLBACK_PRICING;
|
|
57
|
+
}
|
|
58
|
+
export async function refreshPricing(cachePath = pricingCachePath()) {
|
|
59
|
+
const response = await fetch(LITELLM_PRICING_URL);
|
|
60
|
+
if (!response.ok) {
|
|
61
|
+
throw new Error(`LiteLLM pricing fetch failed: HTTP ${response.status}`);
|
|
62
|
+
}
|
|
63
|
+
const raw = (await response.json());
|
|
64
|
+
const models = {};
|
|
65
|
+
for (const [model, value] of Object.entries(raw)) {
|
|
66
|
+
models[model] = {
|
|
67
|
+
inputCostPerToken: numberValue(value.input_cost_per_token),
|
|
68
|
+
outputCostPerToken: numberValue(value.output_cost_per_token),
|
|
69
|
+
cacheCreationInputTokenCost: numberValue(value.cache_creation_input_token_cost),
|
|
70
|
+
cacheReadInputTokenCost: numberValue(value.cache_read_input_token_cost)
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const table = { fetchedAt: new Date().toISOString(), models };
|
|
74
|
+
await mkdir(dirname(cachePath), { recursive: true, mode: 0o700 });
|
|
75
|
+
await writeFile(cachePath, `${JSON.stringify(table, null, 2)}\n`, { encoding: "utf8", mode: 0o600 });
|
|
76
|
+
await chmod(cachePath, 0o600);
|
|
77
|
+
return table;
|
|
78
|
+
}
|
|
79
|
+
export function estimateCostUsd(modelId, usage, pricing) {
|
|
80
|
+
if (!modelId) {
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
const price = findModelPrice(modelId, pricing);
|
|
84
|
+
if (!price) {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
const input = usage.inputTokens || 0;
|
|
88
|
+
const output = usage.outputTokens || 0;
|
|
89
|
+
const cacheCreation = usage.cacheCreationInputTokens || 0;
|
|
90
|
+
const cacheRead = usage.cacheReadInputTokens || 0;
|
|
91
|
+
const total = input * (price.inputCostPerToken || 0) +
|
|
92
|
+
output * (price.outputCostPerToken || 0) +
|
|
93
|
+
cacheCreation * (price.cacheCreationInputTokenCost || price.inputCostPerToken || 0) +
|
|
94
|
+
cacheRead * (price.cacheReadInputTokenCost || 0);
|
|
95
|
+
return total > 0 ? total : undefined;
|
|
96
|
+
}
|
|
97
|
+
function findModelPrice(modelId, pricing) {
|
|
98
|
+
const normalized = modelId.toLowerCase();
|
|
99
|
+
if (pricing.models[modelId]) {
|
|
100
|
+
return pricing.models[modelId];
|
|
101
|
+
}
|
|
102
|
+
const exact = Object.entries(pricing.models).find(([key]) => normalized === key.toLowerCase());
|
|
103
|
+
if (exact) {
|
|
104
|
+
return exact[1];
|
|
105
|
+
}
|
|
106
|
+
return Object.entries(pricing.models).find(([key]) => normalized.includes(key.toLowerCase()))?.[1];
|
|
107
|
+
}
|
|
108
|
+
function numberValue(value) {
|
|
109
|
+
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=pricing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
|
package/dist/renderer.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
const DEFAULT_WIDTH = 120;
|
|
2
|
+
const RESET = "\u001b[0m";
|
|
3
|
+
const COLORS = {
|
|
4
|
+
Healthy: "\u001b[32m",
|
|
5
|
+
Careful: "\u001b[33m",
|
|
6
|
+
Stop: "\u001b[1;31m"
|
|
7
|
+
};
|
|
8
|
+
export function renderStatusLine(decision, width) {
|
|
9
|
+
const terminalWidth = Math.max(20, Math.floor(width || DEFAULT_WIDTH));
|
|
10
|
+
const candidates = decision.state === "Stop" ? stopCandidates(decision) : defaultCandidates(decision);
|
|
11
|
+
for (const candidate of candidates.map(joinParts)) {
|
|
12
|
+
if (visibleLength(candidate) <= terminalWidth) {
|
|
13
|
+
return colorizeState(candidate, decision.state);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return colorizeState(truncate(joinParts(candidates.at(-1) || [`bb: ${decision.state}`]), terminalWidth), decision.state);
|
|
17
|
+
}
|
|
18
|
+
function defaultCandidates(decision) {
|
|
19
|
+
const evidence = decision.evidence.map((item) => item.label);
|
|
20
|
+
return [
|
|
21
|
+
[`bb: ${decision.state}`, ...evidence, decision.action],
|
|
22
|
+
[`bb: ${decision.state}`, decision.primaryEvidence, decision.action],
|
|
23
|
+
[`bb: ${decision.state}`, decision.action]
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
function stopCandidates(decision) {
|
|
27
|
+
const costEvidence = decision.evidence.filter((item) => item.detail).map((item) => item.label);
|
|
28
|
+
const fullWhy = decision.impact && decision.impact !== decision.primaryEvidence
|
|
29
|
+
? `why: ${decision.primaryEvidence}; ${decision.impact}`
|
|
30
|
+
: `why: ${decision.primaryEvidence}`;
|
|
31
|
+
const shortWhy = `why: ${decision.primaryEvidence}`;
|
|
32
|
+
const action = `do: ${decision.action}`;
|
|
33
|
+
return [
|
|
34
|
+
[`bb: ${decision.state}`, fullWhy, ...costEvidence, action],
|
|
35
|
+
[`bb: ${decision.state}`, shortWhy, action],
|
|
36
|
+
[`bb: ${decision.state}`, shortWhy]
|
|
37
|
+
];
|
|
38
|
+
}
|
|
39
|
+
function joinParts(parts) {
|
|
40
|
+
return parts.filter(Boolean).map(sanitizeLinePart).join(" | ");
|
|
41
|
+
}
|
|
42
|
+
function visibleLength(value) {
|
|
43
|
+
// ANSI escape stripping is needed before width checks.
|
|
44
|
+
// eslint-disable-next-line no-control-regex
|
|
45
|
+
return value.replace(/\u001b\[[0-9;]*m/gu, "").length;
|
|
46
|
+
}
|
|
47
|
+
function truncate(value, width) {
|
|
48
|
+
if (visibleLength(value) <= width) {
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
if (width <= 3) {
|
|
52
|
+
return value.slice(0, width);
|
|
53
|
+
}
|
|
54
|
+
return `${value.slice(0, width - 3).trimEnd()}...`;
|
|
55
|
+
}
|
|
56
|
+
function sanitizeLinePart(value) {
|
|
57
|
+
// Collapse control characters before joining statusline segments.
|
|
58
|
+
// eslint-disable-next-line no-control-regex
|
|
59
|
+
return value.replace(/[\u0000-\u001f\u007f]+/gu, " ").replace(/\s+/gu, " ").trim();
|
|
60
|
+
}
|
|
61
|
+
function colorizeState(value, state) {
|
|
62
|
+
if (process.env.NO_COLOR || process.env.BB_CC_LITE_COLOR === "0") {
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
const prefix = `bb: ${state}`;
|
|
66
|
+
if (!value.startsWith(prefix)) {
|
|
67
|
+
return value;
|
|
68
|
+
}
|
|
69
|
+
return `${COLORS[state]}${prefix}${RESET}${value.slice(prefix.length)}`;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,KAAK,GAAG,WAAW,CAAC;AAC1B,MAAM,MAAM,GAAsC;IAChD,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,IAAI,EAAE,cAAc;CACrB,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,QAAkB,EAAE,KAAc;IACjE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAEtG,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAClD,IAAI,aAAa,CAAC,SAAS,CAAC,IAAI,aAAa,EAAE,CAAC;YAC9C,OAAO,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3H,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAkB;IAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,OAAO;QACL,CAAC,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,GAAG,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC;QACvD,CAAC,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC;QACpE,CAAC,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,QAAkB;IACxC,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/F,MAAM,OAAO,GACX,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,eAAe;QAC7D,CAAC,CAAC,QAAQ,QAAQ,CAAC,eAAe,KAAK,QAAQ,CAAC,MAAM,EAAE;QACxD,CAAC,CAAC,QAAQ,QAAQ,CAAC,eAAe,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,QAAQ,QAAQ,CAAC,eAAe,EAAE,CAAC;IACpD,MAAM,MAAM,GAAG,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC;IACxC,OAAO;QACL,CAAC,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,MAAM,CAAC;QAC3D,CAAC,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC;QAC3C,CAAC,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAe;IAChC,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,uDAAuD;IACvD,4CAA4C;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;AACxD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,KAAa;IAC5C,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC;AACrD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,kEAAkE;IAClE,4CAA4C;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACrF,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,KAAwB;IAC5D,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,GAAG,EAAE,CAAC;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,KAAK,EAAE,CAAC;IAC9B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export type SettingsScope = "local" | "project" | "user";
|
|
2
|
+
export interface SettingsTarget {
|
|
3
|
+
scope: SettingsScope;
|
|
4
|
+
settingsPath: string;
|
|
5
|
+
projectDir: string;
|
|
6
|
+
homeDir: string;
|
|
7
|
+
}
|
|
8
|
+
export interface InstallOptions {
|
|
9
|
+
scope?: SettingsScope;
|
|
10
|
+
projectDir?: string;
|
|
11
|
+
homeDir?: string;
|
|
12
|
+
replace?: boolean;
|
|
13
|
+
cliFilePath?: string;
|
|
14
|
+
hooks?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface UninstallOptions {
|
|
17
|
+
scope?: SettingsScope;
|
|
18
|
+
projectDir?: string;
|
|
19
|
+
homeDir?: string;
|
|
20
|
+
force?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface InstallResult {
|
|
23
|
+
status: "installed" | "updated" | "skipped";
|
|
24
|
+
target: SettingsTarget;
|
|
25
|
+
message: string;
|
|
26
|
+
command?: string;
|
|
27
|
+
backupId?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface UninstallResult {
|
|
30
|
+
status: "restored" | "removed" | "skipped" | "refused";
|
|
31
|
+
target: SettingsTarget;
|
|
32
|
+
message: string;
|
|
33
|
+
}
|
|
34
|
+
export declare function resolveSettingsTarget(options?: InstallOptions | UninstallOptions): SettingsTarget;
|
|
35
|
+
export declare function installStatusLine(options?: InstallOptions): Promise<InstallResult>;
|
|
36
|
+
export declare function uninstallStatusLine(options?: UninstallOptions): Promise<UninstallResult>;
|
|
37
|
+
export declare function readStatusLine(scope: SettingsScope, projectDir?: string, homeDir?: string): Promise<unknown>;
|
|
38
|
+
export declare function readHooks(scope: SettingsScope, projectDir?: string, homeDir?: string): Promise<unknown>;
|
|
39
|
+
export declare function isBbStatusLine(value: unknown): boolean;
|
|
40
|
+
export declare function hasBbHooks(existingHooks: unknown, homeDir: string): boolean;
|