ccbot 1.2.0 → 1.2.1
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/dist/channel/telegram/telegram-channel.d.ts +18 -0
- package/dist/channel/telegram/telegram-channel.js +148 -0
- package/dist/channel/telegram/telegram-channel.js.map +1 -0
- package/dist/channel/telegram/telegram-sender.d.ts +2 -0
- package/dist/channel/telegram/telegram-sender.js +72 -0
- package/dist/channel/telegram/telegram-sender.js.map +1 -0
- package/dist/channel/types.d.ts +20 -0
- package/dist/channel/types.js +2 -0
- package/dist/channel/types.js.map +1 -0
- package/dist/commands/help.js +1 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/setup.js +10 -19
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/uninstall.js +3 -3
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.js +69 -20
- package/dist/commands/update.js.map +1 -0
- package/dist/config-manager.d.ts +5 -2
- package/dist/config-manager.js +32 -15
- package/dist/config-manager.js.map +1 -0
- package/dist/hook/hook-handler.d.ts +3 -7
- package/dist/hook/hook-handler.js +28 -110
- package/dist/hook/hook-handler.js.map +1 -0
- package/dist/hook/hook-installer.d.ts +0 -3
- package/dist/hook/hook-installer.js +28 -26
- package/dist/hook/hook-installer.js.map +1 -0
- package/dist/hook/hook-server.js +13 -14
- package/dist/hook/hook-server.js.map +1 -0
- package/dist/i18n/index.js +1 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/locales/en.js +18 -12
- package/dist/i18n/locales/en.js.map +1 -0
- package/dist/i18n/locales/vi.js +18 -12
- package/dist/i18n/locales/vi.js.map +1 -0
- package/dist/i18n/locales/zh.js +18 -12
- package/dist/i18n/locales/zh.js.map +1 -0
- package/dist/i18n/types.d.ts +9 -4
- package/dist/i18n/types.js +1 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/index.js +14 -15
- package/dist/index.js.map +1 -0
- package/dist/monitor/git-collector.d.ts +2 -0
- package/dist/monitor/git-collector.js +88 -0
- package/dist/monitor/git-collector.js.map +1 -0
- package/dist/monitor/transcript-parser.js +6 -11
- package/dist/monitor/transcript-parser.js.map +1 -0
- package/dist/utils/constants.d.ts +21 -0
- package/dist/utils/constants.js +21 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/install-detection.js +6 -5
- package/dist/utils/install-detection.js.map +1 -0
- package/dist/utils/log.d.ts +1 -1
- package/dist/utils/log.js +11 -2
- package/dist/utils/log.js.map +1 -0
- package/dist/utils/paths.d.ts +16 -0
- package/dist/utils/paths.js +39 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/response-store.d.ts +4 -2
- package/dist/utils/response-store.js +34 -18
- package/dist/utils/response-store.js.map +1 -0
- package/dist/utils/tunnel.js +5 -3
- package/dist/utils/tunnel.js.map +1 -0
- package/package.json +29 -12
package/dist/i18n/locales/vi.js
CHANGED
|
@@ -4,11 +4,11 @@ export const vi = {
|
|
|
4
4
|
shuttingDown: "đang tắt...",
|
|
5
5
|
telegramStarted: "telegram bot đã khởi động",
|
|
6
6
|
commandsRegistered: "đã đăng ký commands",
|
|
7
|
-
commandsRegisterFailed: "đăng ký commands thất bại
|
|
7
|
+
commandsRegisterFailed: "đăng ký commands thất bại",
|
|
8
8
|
menuButtonRegistered: "đã đăng ký mini app menu button",
|
|
9
|
-
menuButtonFailed: "đăng ký menu button thất bại
|
|
9
|
+
menuButtonFailed: "đăng ký menu button thất bại",
|
|
10
10
|
noChatId: "chưa có chat ID — chạy 'ccbot setup' hoặc gửi /start cho bot",
|
|
11
|
-
notificationFailed: "gửi notification thất bại
|
|
11
|
+
notificationFailed: "gửi notification thất bại",
|
|
12
12
|
registeredChatId: "đã đăng ký chat ID {chatId}",
|
|
13
13
|
unauthorizedUser: "user không có quyền {userId} ({username})",
|
|
14
14
|
ready: "✅ *ccbot* đã sẵn sàng\\.\n\nBạn sẽ nhận notification khi Claude Code hoàn thành response\\.",
|
|
@@ -20,6 +20,8 @@ export const vi = {
|
|
|
20
20
|
},
|
|
21
21
|
viewDetails: "📱 Xem chi tiết",
|
|
22
22
|
dashboard: "📱 Bảng điều khiển",
|
|
23
|
+
sendFailed: "gửi thất bại, dùng fallback",
|
|
24
|
+
sendFallbackFailed: "fallback cũng thất bại",
|
|
23
25
|
},
|
|
24
26
|
setup: {
|
|
25
27
|
intro: "🤖 ccbot setup",
|
|
@@ -54,13 +56,19 @@ export const vi = {
|
|
|
54
56
|
intro: "📦 ccbot cập nhật",
|
|
55
57
|
npxAlreadyLatest: "Cài qua npx — luôn dùng bản mới nhất, không cần cập nhật.",
|
|
56
58
|
npxDone: "Đã là phiên bản mới nhất",
|
|
59
|
+
checking: "Đang kiểm tra phiên bản...",
|
|
60
|
+
alreadyLatestNpm: "Đã là phiên bản mới nhất (v{version})",
|
|
61
|
+
alreadyLatestGit: "Đã là phiên bản mới nhất (commit {hash})",
|
|
62
|
+
updatingNpm: "Đang cập nhật qua {pm} (v{from} → v{to})...",
|
|
57
63
|
updating: "Đang cập nhật qua {pm}...",
|
|
58
|
-
updateSuccess: "Cập nhật thành công",
|
|
64
|
+
updateSuccess: "Cập nhật thành công (v{from} → v{to})",
|
|
59
65
|
updateComplete: "Hoàn tất cập nhật",
|
|
60
66
|
updateFailed: "Cập nhật thất bại",
|
|
67
|
+
noUpdateNeeded: "✨ Không cần cập nhật",
|
|
61
68
|
updateManualGlobal: "Thử thủ công: {cmd}",
|
|
62
69
|
pulling: "Đang pull code mới nhất...",
|
|
63
70
|
pulled: "Đã pull code mới nhất",
|
|
71
|
+
pulledGit: "Đã pull code mới nhất ({from} → {to})",
|
|
64
72
|
installingDeps: "Đang cài dependencies...",
|
|
65
73
|
depsInstalled: "Đã cài dependencies",
|
|
66
74
|
building: "Đang build...",
|
|
@@ -83,20 +91,20 @@ export const vi = {
|
|
|
83
91
|
serverListening: "hook server đang lắng nghe tại localhost:{port}",
|
|
84
92
|
invalidPayload: "payload stop event không hợp lệ — thiếu trường bắt buộc",
|
|
85
93
|
stopEventReceived: "nhận stop event cho session {sessionId} tại {cwd}",
|
|
86
|
-
transcriptFailed: "parse transcript thất bại
|
|
87
|
-
notificationFailed: "gửi notification thất bại
|
|
94
|
+
transcriptFailed: "parse transcript thất bại",
|
|
95
|
+
notificationFailed: "gửi notification thất bại",
|
|
88
96
|
},
|
|
89
97
|
tunnel: {
|
|
90
98
|
installing: "đang cài đặt cloudflared binary...",
|
|
91
99
|
installed: "đã cài đặt cloudflared binary",
|
|
92
100
|
started: "🌐 URL công khai: {url}",
|
|
93
|
-
failed: "⚠️ tunnel thất bại, chỉ dùng localhost
|
|
101
|
+
failed: "⚠️ tunnel thất bại, chỉ dùng localhost",
|
|
94
102
|
disconnected: "⚠️ tunnel bị ngắt, đang kết nối lại...",
|
|
95
103
|
exited: "tunnel process đã thoát (code {code})",
|
|
104
|
+
timeout: "tunnel connection timeout ({seconds}s)",
|
|
96
105
|
},
|
|
97
106
|
config: {
|
|
98
107
|
notFound: "không tìm thấy config — chạy 'ccbot setup' trước",
|
|
99
|
-
readError: "đọc config: {error}",
|
|
100
108
|
mustBeObject: "config phải là một JSON object",
|
|
101
109
|
invalidToken: "telegram_bot_token phải là string chứa ':' — chạy 'ccbot setup'",
|
|
102
110
|
invalidUserId: "user_id phải là số nguyên — chạy 'ccbot setup'",
|
|
@@ -104,11 +112,8 @@ export const vi = {
|
|
|
104
112
|
invalidSecret: "hook_secret chỉ được chứa ký tự hex (a-f, 0-9)",
|
|
105
113
|
invalidHookPort: "hook port không hợp lệ: {port} (phải từ 1-65535)",
|
|
106
114
|
hookAlreadyInstalled: "ccbot hook đã được cài rồi",
|
|
107
|
-
readSettingsError: "đọc settings: {error}",
|
|
108
115
|
},
|
|
109
116
|
notification: {
|
|
110
|
-
title: "🤖 *Claude Code Response*",
|
|
111
|
-
changes: "📂 *Thay đổi:*",
|
|
112
117
|
tokens: "token",
|
|
113
118
|
cache: "cache",
|
|
114
119
|
cacheRead: "đọc",
|
|
@@ -116,6 +121,7 @@ export const vi = {
|
|
|
116
121
|
},
|
|
117
122
|
common: {
|
|
118
123
|
unknownCommand: "lệnh không xác định: {command}",
|
|
119
|
-
setupFailed: "setup thất bại
|
|
124
|
+
setupFailed: "setup thất bại",
|
|
120
125
|
},
|
|
121
126
|
};
|
|
127
|
+
//# sourceMappingURL=vi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vi.js","sourceRoot":"","sources":["../../../src/i18n/locales/vi.ts"],"names":[],"mappings":"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"}
|
package/dist/i18n/locales/zh.js
CHANGED
|
@@ -4,11 +4,11 @@ export const zh = {
|
|
|
4
4
|
shuttingDown: "正在关闭...",
|
|
5
5
|
telegramStarted: "telegram bot 已启动",
|
|
6
6
|
commandsRegistered: "命令已注册",
|
|
7
|
-
commandsRegisterFailed: "
|
|
7
|
+
commandsRegisterFailed: "注册命令失败",
|
|
8
8
|
menuButtonRegistered: "小程序菜单按钮已注册",
|
|
9
|
-
menuButtonFailed: "
|
|
9
|
+
menuButtonFailed: "注册菜单按钮失败",
|
|
10
10
|
noChatId: "尚无聊天ID — 运行 'ccbot setup' 或向机器人发送 /start",
|
|
11
|
-
notificationFailed: "
|
|
11
|
+
notificationFailed: "发送通知失败",
|
|
12
12
|
registeredChatId: "已注册聊天ID {chatId}",
|
|
13
13
|
unauthorizedUser: "未授权用户 {userId} ({username})",
|
|
14
14
|
ready: "✅ *ccbot* 已就绪\\.\n\n当Claude Code完成响应时,您将收到通知\\.",
|
|
@@ -20,6 +20,8 @@ export const zh = {
|
|
|
20
20
|
},
|
|
21
21
|
viewDetails: "📱 查看详情",
|
|
22
22
|
dashboard: "📱 控制台",
|
|
23
|
+
sendFailed: "发送失败,使用备用方式",
|
|
24
|
+
sendFallbackFailed: "备用方式也失败",
|
|
23
25
|
},
|
|
24
26
|
setup: {
|
|
25
27
|
intro: "🤖 ccbot 设置",
|
|
@@ -54,13 +56,19 @@ export const zh = {
|
|
|
54
56
|
intro: "📦 ccbot 更新",
|
|
55
57
|
npxAlreadyLatest: "通过 npx 安装 — 始终使用最新版本,无需更新。",
|
|
56
58
|
npxDone: "已是最新版本",
|
|
59
|
+
checking: "正在检查版本...",
|
|
60
|
+
alreadyLatestNpm: "已是最新版本 (v{version})",
|
|
61
|
+
alreadyLatestGit: "已是最新版本 (commit {hash})",
|
|
62
|
+
updatingNpm: "正在通过 {pm} 更新 (v{from} → v{to})...",
|
|
57
63
|
updating: "正在通过 {pm} 更新...",
|
|
58
|
-
updateSuccess: "更新成功",
|
|
64
|
+
updateSuccess: "更新成功 (v{from} → v{to})",
|
|
59
65
|
updateComplete: "更新完成",
|
|
60
66
|
updateFailed: "更新失败",
|
|
67
|
+
noUpdateNeeded: "✨ 无需更新",
|
|
61
68
|
updateManualGlobal: "请手动尝试: {cmd}",
|
|
62
69
|
pulling: "正在拉取最新代码...",
|
|
63
70
|
pulled: "已拉取最新代码",
|
|
71
|
+
pulledGit: "已拉取最新代码 ({from} → {to})",
|
|
64
72
|
installingDeps: "正在安装依赖...",
|
|
65
73
|
depsInstalled: "依赖已安装",
|
|
66
74
|
building: "正在构建...",
|
|
@@ -83,20 +91,20 @@ export const zh = {
|
|
|
83
91
|
serverListening: "hook 服务器正在监听 localhost:{port}",
|
|
84
92
|
invalidPayload: "无效的 stop event 负载 — 缺少必要字段",
|
|
85
93
|
stopEventReceived: "收到 session {sessionId} 的 stop event,位于 {cwd}",
|
|
86
|
-
transcriptFailed: "解析 transcript
|
|
87
|
-
notificationFailed: "
|
|
94
|
+
transcriptFailed: "解析 transcript 失败",
|
|
95
|
+
notificationFailed: "发送通知失败",
|
|
88
96
|
},
|
|
89
97
|
tunnel: {
|
|
90
98
|
installing: "正在安装 cloudflared 二进制文件...",
|
|
91
99
|
installed: "cloudflared 二进制文件已安装",
|
|
92
100
|
started: "🌐 公共 URL: {url}",
|
|
93
|
-
failed: "⚠️ 隧道失败,仅使用 localhost
|
|
101
|
+
failed: "⚠️ 隧道失败,仅使用 localhost",
|
|
94
102
|
disconnected: "⚠️ 隧道断开连接,正在重新连接...",
|
|
95
103
|
exited: "隧道进程已退出 (代码 {code})",
|
|
104
|
+
timeout: "隧道连接超时 ({seconds}秒)",
|
|
96
105
|
},
|
|
97
106
|
config: {
|
|
98
107
|
notFound: "未找到配置 — 请先运行 'ccbot setup'",
|
|
99
|
-
readError: "读取配置: {error}",
|
|
100
108
|
mustBeObject: "配置必须是 JSON 对象",
|
|
101
109
|
invalidToken: "telegram_bot_token 必须是包含 ':' 的字符串 — 运行 'ccbot setup'",
|
|
102
110
|
invalidUserId: "user_id 必须是整数 — 运行 'ccbot setup'",
|
|
@@ -104,11 +112,8 @@ export const zh = {
|
|
|
104
112
|
invalidSecret: "hook_secret 只能包含十六进制字符 (a-f, 0-9)",
|
|
105
113
|
invalidHookPort: "无效的 hook 端口: {port}(必须为 1-65535)",
|
|
106
114
|
hookAlreadyInstalled: "ccbot hook 已安装",
|
|
107
|
-
readSettingsError: "读取设置: {error}",
|
|
108
115
|
},
|
|
109
116
|
notification: {
|
|
110
|
-
title: "🤖 *Claude Code 响应*",
|
|
111
|
-
changes: "📂 *变更:*",
|
|
112
117
|
tokens: "tokens",
|
|
113
118
|
cache: "cache",
|
|
114
119
|
cacheRead: "读取",
|
|
@@ -116,6 +121,7 @@ export const zh = {
|
|
|
116
121
|
},
|
|
117
122
|
common: {
|
|
118
123
|
unknownCommand: "未知命令: {command}",
|
|
119
|
-
setupFailed: "setup
|
|
124
|
+
setupFailed: "setup 失败",
|
|
120
125
|
},
|
|
121
126
|
};
|
|
127
|
+
//# sourceMappingURL=zh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zh.js","sourceRoot":"","sources":["../../../src/i18n/locales/zh.ts"],"names":[],"mappings":"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"}
|
package/dist/i18n/types.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ export interface TranslationKeys {
|
|
|
20
20
|
};
|
|
21
21
|
viewDetails: string;
|
|
22
22
|
dashboard: string;
|
|
23
|
+
sendFailed: string;
|
|
24
|
+
sendFallbackFailed: string;
|
|
23
25
|
};
|
|
24
26
|
setup: {
|
|
25
27
|
intro: string;
|
|
@@ -54,13 +56,19 @@ export interface TranslationKeys {
|
|
|
54
56
|
intro: string;
|
|
55
57
|
npxAlreadyLatest: string;
|
|
56
58
|
npxDone: string;
|
|
59
|
+
checking: string;
|
|
60
|
+
alreadyLatestNpm: string;
|
|
61
|
+
alreadyLatestGit: string;
|
|
62
|
+
updatingNpm: string;
|
|
57
63
|
updating: string;
|
|
58
64
|
updateSuccess: string;
|
|
59
65
|
updateComplete: string;
|
|
60
66
|
updateFailed: string;
|
|
67
|
+
noUpdateNeeded: string;
|
|
61
68
|
updateManualGlobal: string;
|
|
62
69
|
pulling: string;
|
|
63
70
|
pulled: string;
|
|
71
|
+
pulledGit: string;
|
|
64
72
|
installingDeps: string;
|
|
65
73
|
depsInstalled: string;
|
|
66
74
|
building: string;
|
|
@@ -93,10 +101,10 @@ export interface TranslationKeys {
|
|
|
93
101
|
failed: string;
|
|
94
102
|
disconnected: string;
|
|
95
103
|
exited: string;
|
|
104
|
+
timeout: string;
|
|
96
105
|
};
|
|
97
106
|
config: {
|
|
98
107
|
notFound: string;
|
|
99
|
-
readError: string;
|
|
100
108
|
mustBeObject: string;
|
|
101
109
|
invalidToken: string;
|
|
102
110
|
invalidUserId: string;
|
|
@@ -104,11 +112,8 @@ export interface TranslationKeys {
|
|
|
104
112
|
invalidSecret: string;
|
|
105
113
|
invalidHookPort: string;
|
|
106
114
|
hookAlreadyInstalled: string;
|
|
107
|
-
readSettingsError: string;
|
|
108
115
|
};
|
|
109
116
|
notification: {
|
|
110
|
-
title: string;
|
|
111
|
-
changes: string;
|
|
112
117
|
tokens: string;
|
|
113
118
|
cache: string;
|
|
114
119
|
cacheRead: string;
|
package/dist/i18n/types.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/i18n/types.ts"],"names":[],"mappings":""}
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { ConfigManager } from "./config-manager.js";
|
|
3
|
-
import {
|
|
3
|
+
import { TelegramChannel } from "./channel/telegram/telegram-channel.js";
|
|
4
4
|
import { HookServer } from "./hook/hook-server.js";
|
|
5
5
|
import { HookHandler } from "./hook/hook-handler.js";
|
|
6
6
|
import { runSetup } from "./commands/setup.js";
|
|
7
7
|
import { runUpdate } from "./commands/update.js";
|
|
8
8
|
import { runUninstall } from "./commands/uninstall.js";
|
|
9
9
|
import { runHelp } from "./commands/help.js";
|
|
10
|
-
import { formatError } from "./utils/error-utils.js";
|
|
11
10
|
import { CliCommand } from "./utils/constants.js";
|
|
12
11
|
import { t } from "./i18n/index.js";
|
|
13
12
|
import { TunnelManager } from "./utils/tunnel.js";
|
|
@@ -31,16 +30,16 @@ async function startBot() {
|
|
|
31
30
|
log(t("tunnel.started", { url: tunnelUrl }));
|
|
32
31
|
}
|
|
33
32
|
catch (err) {
|
|
34
|
-
|
|
33
|
+
logError(t("tunnel.failed"), err);
|
|
35
34
|
}
|
|
36
|
-
const
|
|
37
|
-
const handler = new HookHandler(
|
|
35
|
+
const channel = new TelegramChannel(cfg, tunnelUrl);
|
|
36
|
+
const handler = new HookHandler(channel, cfg.hook_port, tunnelManager);
|
|
38
37
|
hookServer.setHandler(handler);
|
|
39
|
-
await
|
|
38
|
+
await channel.initialize();
|
|
40
39
|
const shutdown = async () => {
|
|
41
40
|
log(t("bot.shuttingDown"));
|
|
42
41
|
tunnelManager.stop();
|
|
43
|
-
await
|
|
42
|
+
await channel.shutdown();
|
|
44
43
|
await hookServer.stop();
|
|
45
44
|
process.exit(0);
|
|
46
45
|
};
|
|
@@ -48,11 +47,16 @@ async function startBot() {
|
|
|
48
47
|
process.on("SIGTERM", shutdown);
|
|
49
48
|
}
|
|
50
49
|
function handleSubcommand(args) {
|
|
51
|
-
|
|
50
|
+
try {
|
|
51
|
+
ConfigManager.load();
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// config not yet created, subcommands handle this
|
|
55
|
+
}
|
|
52
56
|
switch (args[0]) {
|
|
53
57
|
case CliCommand.Setup:
|
|
54
58
|
runSetup().catch((err) => {
|
|
55
|
-
logError(t("common.setupFailed",
|
|
59
|
+
logError(t("common.setupFailed"), err);
|
|
56
60
|
process.exit(1);
|
|
57
61
|
});
|
|
58
62
|
break;
|
|
@@ -73,9 +77,4 @@ function handleSubcommand(args) {
|
|
|
73
77
|
process.exit(1);
|
|
74
78
|
}
|
|
75
79
|
}
|
|
76
|
-
|
|
77
|
-
try {
|
|
78
|
-
ConfigManager.load();
|
|
79
|
-
}
|
|
80
|
-
catch { }
|
|
81
|
-
}
|
|
80
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { GitChangeStatus, GIT_TIMEOUT_MS } from "../utils/constants.js";
|
|
3
|
+
export function collectGitChanges(cwd) {
|
|
4
|
+
try {
|
|
5
|
+
const diffOutput = execSync("git diff --name-status HEAD", {
|
|
6
|
+
cwd,
|
|
7
|
+
encoding: "utf-8",
|
|
8
|
+
timeout: GIT_TIMEOUT_MS,
|
|
9
|
+
});
|
|
10
|
+
const changes = parseGitDiffOutput(diffOutput);
|
|
11
|
+
try {
|
|
12
|
+
const untrackedOutput = execSync("git ls-files --others --exclude-standard", {
|
|
13
|
+
cwd,
|
|
14
|
+
encoding: "utf-8",
|
|
15
|
+
timeout: GIT_TIMEOUT_MS,
|
|
16
|
+
});
|
|
17
|
+
for (const file of untrackedOutput.trim().split("\n")) {
|
|
18
|
+
if (file)
|
|
19
|
+
changes.push({ file, status: GitChangeStatus.Added });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// untracked files collection is optional
|
|
24
|
+
}
|
|
25
|
+
return changes;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
try {
|
|
29
|
+
const porcelainOutput = execSync("git status --porcelain", {
|
|
30
|
+
cwd,
|
|
31
|
+
encoding: "utf-8",
|
|
32
|
+
timeout: GIT_TIMEOUT_MS,
|
|
33
|
+
});
|
|
34
|
+
return parsePorcelainOutput(porcelainOutput);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function parseGitDiffOutput(output) {
|
|
42
|
+
const changes = [];
|
|
43
|
+
for (const line of output.trim().split("\n")) {
|
|
44
|
+
if (!line)
|
|
45
|
+
continue;
|
|
46
|
+
const parts = line.split("\t");
|
|
47
|
+
if (parts.length < 2)
|
|
48
|
+
continue;
|
|
49
|
+
const statusCode = parts[0];
|
|
50
|
+
const filePath = parts[1];
|
|
51
|
+
if (!statusCode || !filePath)
|
|
52
|
+
continue;
|
|
53
|
+
let status = GitChangeStatus.Modified;
|
|
54
|
+
if (statusCode.startsWith("A"))
|
|
55
|
+
status = GitChangeStatus.Added;
|
|
56
|
+
else if (statusCode.startsWith("D"))
|
|
57
|
+
status = GitChangeStatus.Deleted;
|
|
58
|
+
else if (statusCode.startsWith("R"))
|
|
59
|
+
status = GitChangeStatus.Renamed;
|
|
60
|
+
changes.push({ file: filePath, status });
|
|
61
|
+
}
|
|
62
|
+
return changes;
|
|
63
|
+
}
|
|
64
|
+
function parsePorcelainOutput(output) {
|
|
65
|
+
const changes = [];
|
|
66
|
+
for (const line of output.trim().split("\n")) {
|
|
67
|
+
if (line.length < 4)
|
|
68
|
+
continue;
|
|
69
|
+
const statusCode = line.slice(0, 2).trim();
|
|
70
|
+
const file = line.slice(3).trim();
|
|
71
|
+
let status = GitChangeStatus.Modified;
|
|
72
|
+
switch (statusCode) {
|
|
73
|
+
case "??":
|
|
74
|
+
case "A":
|
|
75
|
+
status = GitChangeStatus.Added;
|
|
76
|
+
break;
|
|
77
|
+
case "D":
|
|
78
|
+
status = GitChangeStatus.Deleted;
|
|
79
|
+
break;
|
|
80
|
+
case "R":
|
|
81
|
+
status = GitChangeStatus.Renamed;
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
changes.push({ file, status });
|
|
85
|
+
}
|
|
86
|
+
return changes;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=git-collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-collector.js","sourceRoot":"","sources":["../../src/monitor/git-collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
|
-
import {
|
|
2
|
+
import { expandHome } from "../utils/paths.js";
|
|
3
3
|
export function parseTranscript(transcriptPath) {
|
|
4
4
|
const expandedPath = expandHome(transcriptPath);
|
|
5
5
|
const raw = readFileSync(expandedPath, "utf-8");
|
|
@@ -24,11 +24,11 @@ export function parseTranscript(transcriptPath) {
|
|
|
24
24
|
continue;
|
|
25
25
|
}
|
|
26
26
|
if (entry.timestamp) {
|
|
27
|
-
const
|
|
28
|
-
if (!isNaN(
|
|
27
|
+
const entryDate = new Date(entry.timestamp);
|
|
28
|
+
if (!isNaN(entryDate.getTime())) {
|
|
29
29
|
if (!firstTimestamp)
|
|
30
|
-
firstTimestamp =
|
|
31
|
-
lastTimestamp =
|
|
30
|
+
firstTimestamp = entryDate;
|
|
31
|
+
lastTimestamp = entryDate;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
totalCost += entry.costUSD ?? 0;
|
|
@@ -74,9 +74,4 @@ function extractTextFromContent(parts) {
|
|
|
74
74
|
.map((p) => p.text)
|
|
75
75
|
.join("\n");
|
|
76
76
|
}
|
|
77
|
-
|
|
78
|
-
if (path.startsWith("~/")) {
|
|
79
|
-
return homedir() + path.slice(1);
|
|
80
|
-
}
|
|
81
|
-
return path;
|
|
82
|
-
}
|
|
77
|
+
//# sourceMappingURL=transcript-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-parser.js","sourceRoot":"","sources":["../../src/monitor/transcript-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA0C/C,MAAM,UAAU,eAAe,CAAC,cAAsB;IACpD,MAAM,YAAY,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE9B,IAAI,iBAAiB,GAAG,EAAE,CAAC;IAC3B,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,cAAc,GAAgB,IAAI,CAAC;IACvC,IAAI,aAAa,GAAgB,IAAI,CAAC;IACtC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAE3B,IAAI,KAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,cAAc;oBAAE,cAAc,GAAG,SAAS,CAAC;gBAChD,aAAa,GAAG,SAAS,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,SAAS,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QAEhC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAC9C,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;YAC1B,IAAI,GAAG,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC9B,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;gBACrC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjE,MAAM,IAAI,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;gBAClD,IAAI,IAAI,EAAE,CAAC;oBACT,iBAAiB,GAAG,IAAI,CAAC;gBAC3B,CAAC;gBAED,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBACd,WAAW,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;oBAC3C,YAAY,IAAI,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;oBAC7C,mBAAmB,IAAI,GAAG,CAAC,KAAK,CAAC,2BAA2B,IAAI,CAAC,CAAC;oBAClE,eAAe,IAAI,GAAG,CAAC,KAAK,CAAC,uBAAuB,IAAI,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,cAAc,IAAI,aAAa,EAAE,CAAC;QACpC,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,YAAY,GAAG,iBAAiB,IAAI,WAAW,CAAC;IAEtD,OAAO;QACL,oBAAoB,EAAE,YAAY;QAClC,UAAU;QACV,YAAY,EAAE,SAAS;QACvB,WAAW;QACX,YAAY;QACZ,mBAAmB;QACnB,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAoB;IAClD,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC;SAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAK,CAAC;SACnB,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
|
|
@@ -20,4 +20,25 @@ export declare const CliCommand: {
|
|
|
20
20
|
readonly HelpShort: "-h";
|
|
21
21
|
};
|
|
22
22
|
export type CliCommand = (typeof CliCommand)[keyof typeof CliCommand];
|
|
23
|
+
export declare const PackageManager: {
|
|
24
|
+
readonly Npm: "npm";
|
|
25
|
+
readonly Pnpm: "pnpm";
|
|
26
|
+
readonly Yarn: "yarn";
|
|
27
|
+
readonly Bun: "bun";
|
|
28
|
+
};
|
|
29
|
+
export type PackageManager = (typeof PackageManager)[keyof typeof PackageManager];
|
|
30
|
+
export declare const ApiRoute: {
|
|
31
|
+
readonly HookStop: "/hook/stop";
|
|
32
|
+
readonly ResponseData: "/api/responses/:id";
|
|
33
|
+
readonly Health: "/health";
|
|
34
|
+
};
|
|
35
|
+
export declare const DEFAULT_HOOK_PORT = 9377;
|
|
36
|
+
export declare const TUNNEL_TIMEOUT_MS = 30000;
|
|
37
|
+
export declare const TRANSCRIPT_SETTLE_DELAY_MS = 500;
|
|
38
|
+
export declare const MAX_STORED_RESPONSES = 100;
|
|
39
|
+
export declare const RESPONSE_EXPIRE_MS: number;
|
|
40
|
+
export declare const DEFAULT_FALLBACK_DURATION_MS = 1000;
|
|
41
|
+
export declare const SPLIT_LOOKBACK_RANGE = 200;
|
|
42
|
+
export declare const MAX_GIT_SEARCH_DEPTH = 5;
|
|
43
|
+
export declare const GIT_TIMEOUT_MS = 10000;
|
|
23
44
|
export declare const MINI_APP_BASE_URL = "https://palooza-kaida.github.io/ccbot";
|
package/dist/utils/constants.js
CHANGED
|
@@ -17,4 +17,25 @@ export const CliCommand = {
|
|
|
17
17
|
HelpFlag: "--help",
|
|
18
18
|
HelpShort: "-h",
|
|
19
19
|
};
|
|
20
|
+
export const PackageManager = {
|
|
21
|
+
Npm: "npm",
|
|
22
|
+
Pnpm: "pnpm",
|
|
23
|
+
Yarn: "yarn",
|
|
24
|
+
Bun: "bun",
|
|
25
|
+
};
|
|
26
|
+
export const ApiRoute = {
|
|
27
|
+
HookStop: "/hook/stop",
|
|
28
|
+
ResponseData: "/api/responses/:id",
|
|
29
|
+
Health: "/health",
|
|
30
|
+
};
|
|
31
|
+
export const DEFAULT_HOOK_PORT = 9377;
|
|
32
|
+
export const TUNNEL_TIMEOUT_MS = 30_000;
|
|
33
|
+
export const TRANSCRIPT_SETTLE_DELAY_MS = 500;
|
|
34
|
+
export const MAX_STORED_RESPONSES = 100;
|
|
35
|
+
export const RESPONSE_EXPIRE_MS = 24 * 60 * 60 * 1000;
|
|
36
|
+
export const DEFAULT_FALLBACK_DURATION_MS = 1000;
|
|
37
|
+
export const SPLIT_LOOKBACK_RANGE = 200;
|
|
38
|
+
export const MAX_GIT_SEARCH_DEPTH = 5;
|
|
39
|
+
export const GIT_TIMEOUT_MS = 10_000;
|
|
20
40
|
export const MINI_APP_BASE_URL = "https://palooza-kaida.github.io/ccbot";
|
|
41
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACV,CAAC;AAIX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,WAAW;IACrB,GAAG,EAAE,KAAK;CACF,CAAC;AAIX,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,IAAI;CACP,CAAC;AAIX,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;CACF,CAAC;AAIX,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,QAAQ,EAAE,YAAY;IACtB,YAAY,EAAE,oBAAoB;IAClC,MAAM,EAAE,SAAS;CACT,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACxC,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACtD,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AACjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACxC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AAErC,MAAM,CAAC,MAAM,iBAAiB,GAAG,uCAAuC,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import { join, dirname } from "node:path";
|
|
3
|
-
import { InstallMethod } from "./constants.js";
|
|
3
|
+
import { InstallMethod, MAX_GIT_SEARCH_DEPTH } from "./constants.js";
|
|
4
4
|
export function detectInstallMethod() {
|
|
5
|
-
const
|
|
6
|
-
if (
|
|
5
|
+
const scriptPath = process.argv[1] ?? "";
|
|
6
|
+
if (scriptPath.includes("npx") || scriptPath.includes(".npm/_npx")) {
|
|
7
7
|
return InstallMethod.Npx;
|
|
8
8
|
}
|
|
9
|
-
const scriptDir = dirname(
|
|
9
|
+
const scriptDir = dirname(scriptPath);
|
|
10
10
|
if (isGitRepo(scriptDir)) {
|
|
11
11
|
return InstallMethod.GitClone;
|
|
12
12
|
}
|
|
@@ -25,7 +25,7 @@ export function detectCliPrefix() {
|
|
|
25
25
|
}
|
|
26
26
|
export function getGitRepoRoot(dir) {
|
|
27
27
|
let current = dir;
|
|
28
|
-
for (let i = 0; i <
|
|
28
|
+
for (let i = 0; i < MAX_GIT_SEARCH_DEPTH; i++) {
|
|
29
29
|
if (existsSync(join(current, ".git"))) {
|
|
30
30
|
return current;
|
|
31
31
|
}
|
|
@@ -39,3 +39,4 @@ export function getGitRepoRoot(dir) {
|
|
|
39
39
|
function isGitRepo(dir) {
|
|
40
40
|
return getGitRepoRoot(dir) !== null;
|
|
41
41
|
}
|
|
42
|
+
//# sourceMappingURL=install-detection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-detection.js","sourceRoot":"","sources":["../../src/utils/install-detection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGrE,MAAM,UAAU,mBAAmB;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEzC,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACnE,OAAO,aAAa,CAAC,GAAG,CAAC;IAC3B,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QACzB,OAAO,aAAa,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED,OAAO,aAAa,CAAC,MAAM,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACrC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,aAAa,CAAC,GAAG;YACpB,OAAO,WAAW,CAAC;QACrB,KAAK,aAAa,CAAC,QAAQ;YACzB,OAAO,oBAAoB,CAAC;QAC9B;YACE,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,OAAO,GAAG,GAAG,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAoB,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;YACtC,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,OAAO;YAAE,MAAM;QAC9B,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,cAAc,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;AACtC,CAAC"}
|
package/dist/utils/log.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare function log(...args: unknown[]): void;
|
|
2
|
-
export declare function logError(
|
|
2
|
+
export declare function logError(message: string, err?: unknown): void;
|
package/dist/utils/log.js
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
function timestamp() {
|
|
2
2
|
return `[${new Date().toLocaleString()}]`;
|
|
3
3
|
}
|
|
4
|
+
function formatError(err) {
|
|
5
|
+
return err instanceof Error ? err.message : String(err);
|
|
6
|
+
}
|
|
4
7
|
export function log(...args) {
|
|
5
8
|
console.log(timestamp(), ...args);
|
|
6
9
|
}
|
|
7
|
-
export function logError(
|
|
8
|
-
|
|
10
|
+
export function logError(message, err) {
|
|
11
|
+
if (err !== undefined) {
|
|
12
|
+
console.error(timestamp(), message, formatError(err));
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
console.error(timestamp(), message);
|
|
16
|
+
}
|
|
9
17
|
}
|
|
18
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/utils/log.ts"],"names":[],"mappings":"AAAA,SAAS,SAAS;IAChB,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,GAAG,CAAC;AAC5C,CAAC;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,GAAG,IAAe;IACpC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,GAAa;IACrD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const paths: {
|
|
2
|
+
readonly projectRoot: string;
|
|
3
|
+
readonly publicDir: string;
|
|
4
|
+
readonly packageJson: string;
|
|
5
|
+
readonly ccbotDir: string;
|
|
6
|
+
readonly configFile: string;
|
|
7
|
+
readonly stateFile: string;
|
|
8
|
+
readonly hooksDir: string;
|
|
9
|
+
readonly hookScript: string;
|
|
10
|
+
readonly responsesDir: string;
|
|
11
|
+
readonly claudeDir: string;
|
|
12
|
+
readonly claudeSettings: string;
|
|
13
|
+
};
|
|
14
|
+
export declare function getPackageVersion(): string;
|
|
15
|
+
export declare function expandHome(filepath: string): string;
|
|
16
|
+
export declare function extractProjectName(cwd: string): string;
|