better-claude-code
Version:
CLI auxiliary tools for Claude Code
185 lines (179 loc) • 7.29 kB
JavaScript
// src/constants.ts
var APP_NAME = "Better Claude Code";
var APP_CLI_NAME = "bcc";
var APP_NPM_PACKAGE_NAME = "better-claude-code";
var APP_DESCRIPTION = "CLI auxiliary tools for Claude Code";
var FRONTEND_PORT = 5001;
var BACKEND_PORT = 5e3;
var API_PREFIX = "/api";
var SWAGGER_UI_PATH = "/swagger";
var OPENAPI_SPEC_PATH = "/openapi.json";
var createLocalHostLink = (port, sufix) => `http://localhost:${port}${sufix ?? ""}`;
// src/message-patterns.ts
var MESSAGE_PATTERNS = {
FILE_OR_FOLDER_AT: /(^|\s)@([a-zA-Z.][\w\-.]*(?:\/[\w\-./]+)*(?:#L\d+(?:-\d+)?)?)/g,
FILE_OR_FOLDER_SLASH: /\/([\w\-./]+)/g,
TOOL_WITH_PATH: /\[Tool: ([^\]]+)\] (\/[^\s<>,]+)/g,
PATH_PROPERTY: /path: (\/[^\s<>,]+)/g,
PATTERN_PROPERTY: /pattern: "([^"]+)"/g,
TOOL_WITH_QUOTE: /\[Tool: ([^\]]+)\] "([^"]+)"/g,
IMAGE_TAG: /\[Image #(\d+)\]/g,
ULTRATHINK: /ultrathink/gi,
URL: /https?:\/\/[^\s<>,]+/g,
FLAG: /(^|\s)(--[a-z]{2,})/g,
COMMAND_FORMAT: /<command-name>\/?([^<]+)<\/command-name>/,
COMMAND_ARGS: /<command-args>([^<]+)<\/command-args>/,
COMMAND_WORDS: /^(add|update|fix|refactor|improve|create|delete|remove|modify|change|implement|build|test|debug|optimize|enhance|cleanup|migrate|upgrade|downgrade|install|uninstall|configure|setup|deploy|publish|release|merge|rebase|cherry-pick|squash|revert)\s+/i,
SLASH_COMMAND: /^\/[\w-]+/
};
function extractPathsFromText(text) {
const paths = /* @__PURE__ */ new Set();
const slashMatches = text.match(MESSAGE_PATTERNS.FILE_OR_FOLDER_SLASH);
if (slashMatches) {
for (const match of slashMatches) {
paths.add(match);
}
}
const atRegex = new RegExp(MESSAGE_PATTERNS.FILE_OR_FOLDER_AT.source, "g");
const atMatches = text.matchAll(atRegex);
for (const match of atMatches) {
const cleanMatch = match[0].trim().substring(1);
paths.add(cleanMatch);
}
return Array.from(paths);
}
// src/session-count-group.ts
var getSessionCountGroup = (count) => {
if (count <= 10) return "0-10" /* 0-10 */;
if (count <= 50) return "10-50" /* 10-50 */;
if (count <= 200) return "50-200" /* 50-200 */;
if (count <= 500) return "200-500" /* 200-500 */;
return "500+" /* 500+ */;
};
var SESSION_COUNT_GROUP_LABELS = {
"0-10": "0-10 sessions",
"10-50": "10-50 sessions",
"50-200": "50-200 sessions",
"200-500": "200-500 sessions",
"500+": "500+ sessions"
};
var SESSION_COUNT_GROUP_ORDER = [
"500+" /* 500+ */,
"200-500" /* 200-500 */,
"50-200" /* 50-200 */,
"10-50" /* 10-50 */,
"0-10" /* 0-10 */
];
// src/shared-enums.ts
var FolderEntry = /* @__PURE__ */ ((FolderEntry2) => {
FolderEntry2["FILE"] = "file";
FolderEntry2["DIRECTORY"] = "directory";
return FolderEntry2;
})(FolderEntry || {});
var ProjectAction = /* @__PURE__ */ ((ProjectAction2) => {
ProjectAction2["OPEN_FOLDER"] = "openFolder";
ProjectAction2["OPEN_EDITOR"] = "openCodeEditor";
ProjectAction2["OPEN_TERMINAL"] = "openTerminal";
return ProjectAction2;
})(ProjectAction || {});
var MessageSource = /* @__PURE__ */ ((MessageSource2) => {
MessageSource2["USER"] = "user";
MessageSource2["CC"] = "assistant";
return MessageSource2;
})(MessageSource || {});
// src/time-group.ts
var TimeGroup = /* @__PURE__ */ ((TimeGroup2) => {
TimeGroup2["Today"] = "today";
TimeGroup2["Yesterday"] = "yesterday";
TimeGroup2["ThisWeek"] = "this-week";
TimeGroup2["ThisMonth"] = "this-month";
TimeGroup2["LastMonth"] = "last-month";
TimeGroup2["Older"] = "older";
return TimeGroup2;
})(TimeGroup || {});
var TIME_GROUP_ORDER = [
"today" /* Today */,
"yesterday" /* Yesterday */,
"this-week" /* ThisWeek */,
"this-month" /* ThisMonth */,
"last-month" /* LastMonth */,
"older" /* Older */
];
var TIME_GROUP_LABELS = {
["today" /* Today */]: "Today",
["yesterday" /* Yesterday */]: "Yesterday",
["this-week" /* ThisWeek */]: "This Week",
["this-month" /* ThisMonth */]: "This Month",
["last-month" /* LastMonth */]: "Last Month",
["older" /* Older */]: "Older"
};
var getTimeGroup = (timestamp) => {
const today = /* @__PURE__ */ new Date();
today.setHours(0, 0, 0, 0);
const todayStart = today.getTime();
const yesterday = new Date(todayStart);
yesterday.setDate(yesterday.getDate() - 1);
const yesterdayStart = yesterday.getTime();
const weekStart = new Date(todayStart);
weekStart.setDate(weekStart.getDate() - weekStart.getDay());
const thisWeekStart = weekStart.getTime();
const monthStart = new Date(today.getFullYear(), today.getMonth(), 1);
const thisMonthStart = monthStart.getTime();
const lastMonthStart = new Date(today.getFullYear(), today.getMonth() - 1, 1);
const lastMonthEnd = new Date(today.getFullYear(), today.getMonth(), 0, 23, 59, 59, 999);
if (timestamp >= todayStart) return "today" /* Today */;
if (timestamp >= yesterdayStart) return "yesterday" /* Yesterday */;
if (timestamp >= thisWeekStart) return "this-week" /* ThisWeek */;
if (timestamp >= thisMonthStart) return "this-month" /* ThisMonth */;
if (timestamp >= lastMonthStart.getTime() && timestamp <= lastMonthEnd.getTime()) {
return "last-month" /* LastMonth */;
}
return "older" /* Older */;
};
function getGroupDate(groupName) {
const now = /* @__PURE__ */ new Date();
const oneDay = 24 * 60 * 60 * 1e3;
let date;
if (groupName === "today" /* Today */) {
date = now;
} else if (groupName === "yesterday" /* Yesterday */) {
date = new Date(now.getTime() - oneDay);
} else if (groupName === "this-week" /* ThisWeek */) {
const dayOfWeek = now.getDay();
const daysFromMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
date = new Date(now.getTime() - daysFromMonday * oneDay);
} else if (groupName === "this-month" /* ThisMonth */) {
date = new Date(now.getFullYear(), now.getMonth(), 1);
} else if (groupName === "last-month" /* LastMonth */) {
date = new Date(now.getFullYear(), now.getMonth() - 1, 1);
} else {
return "";
}
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, "0");
const day = String(date.getDate()).padStart(2, "0");
return `${year}-${month}-${day}`;
}
// src/token-percentage-group.ts
var getTokenPercentageGroup = (percentage) => {
if (!percentage) return "0-25" /* 0-25 */;
if (percentage <= 25) return "0-25" /* 0-25 */;
if (percentage <= 50) return "25-50" /* 25-50 */;
if (percentage <= 75) return "50-75" /* 50-75 */;
return "75-100" /* 75-100 */;
};
var TOKEN_PERCENTAGE_GROUP_LABELS = {
["0-25" /* 0-25 */]: "0-25%",
["25-50" /* 25-50 */]: "25-50%",
["50-75" /* 50-75 */]: "50-75%",
["75-100" /* 75-100 */]: "75-100%"
};
var TOKEN_PERCENTAGE_GROUP_ORDER = [
"75-100" /* 75-100 */,
"50-75" /* 50-75 */,
"25-50" /* 25-50 */,
"0-25" /* 0-25 */
];
export { API_PREFIX, APP_CLI_NAME, APP_DESCRIPTION, APP_NAME, APP_NPM_PACKAGE_NAME, BACKEND_PORT, FRONTEND_PORT, FolderEntry, MESSAGE_PATTERNS, MessageSource, OPENAPI_SPEC_PATH, ProjectAction, SESSION_COUNT_GROUP_LABELS, SESSION_COUNT_GROUP_ORDER, SWAGGER_UI_PATH, TIME_GROUP_LABELS, TIME_GROUP_ORDER, TOKEN_PERCENTAGE_GROUP_LABELS, TOKEN_PERCENTAGE_GROUP_ORDER, TimeGroup, createLocalHostLink, extractPathsFromText, getGroupDate, getSessionCountGroup, getTimeGroup, getTokenPercentageGroup };
//# sourceMappingURL=index.js.map
//# sourceMappingURL=index.js.map