ccpoke 1.4.2 → 1.5.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/README.en.md +26 -11
- package/README.md +26 -11
- package/dist/agent/agent-handler.d.ts +12 -0
- package/dist/agent/agent-handler.js +49 -0
- package/dist/agent/agent-handler.js.map +1 -0
- package/dist/agent/agent-registry.d.ts +9 -0
- package/dist/agent/agent-registry.js +24 -0
- package/dist/agent/agent-registry.js.map +1 -0
- package/dist/{hook/hook-installer.d.ts → agent/claude-code/claude-code-installer.d.ts} +2 -2
- package/dist/agent/claude-code/claude-code-installer.js +82 -0
- package/dist/agent/claude-code/claude-code-installer.js.map +1 -0
- package/dist/{monitor/transcript-parser.d.ts → agent/claude-code/claude-code-parser.d.ts} +6 -0
- package/dist/{monitor/transcript-parser.js → agent/claude-code/claude-code-parser.js} +10 -2
- package/dist/agent/claude-code/claude-code-parser.js.map +1 -0
- package/dist/agent/claude-code/claude-code-provider.d.ts +12 -0
- package/dist/agent/claude-code/claude-code-provider.js +72 -0
- package/dist/agent/claude-code/claude-code-provider.js.map +1 -0
- package/dist/agent/cursor/cursor-installer.d.ts +9 -0
- package/dist/agent/cursor/cursor-installer.js +89 -0
- package/dist/agent/cursor/cursor-installer.js.map +1 -0
- package/dist/agent/cursor/cursor-parser.d.ts +19 -0
- package/dist/agent/cursor/cursor-parser.js +61 -0
- package/dist/agent/cursor/cursor-parser.js.map +1 -0
- package/dist/agent/cursor/cursor-provider.d.ts +12 -0
- package/dist/agent/cursor/cursor-provider.js +72 -0
- package/dist/agent/cursor/cursor-provider.js.map +1 -0
- package/dist/agent/types.d.ts +27 -0
- package/dist/agent/types.js +11 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/channel/telegram/telegram-channel.js +7 -90
- package/dist/channel/telegram/telegram-channel.js.map +1 -1
- package/dist/channel/types.d.ts +2 -0
- package/dist/commands/setup.js +83 -19
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/uninstall.js +12 -9
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/config-manager.d.ts +2 -1
- package/dist/config-manager.js +21 -17
- package/dist/config-manager.js.map +1 -1
- package/dist/i18n/index.d.ts +7 -2
- package/dist/i18n/index.js +10 -5
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/locales/en.js +11 -0
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/vi.js +11 -0
- package/dist/i18n/locales/vi.js.map +1 -1
- package/dist/i18n/locales/zh.js +11 -0
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/types.d.ts +11 -0
- package/dist/index.js +28 -8
- package/dist/index.js.map +1 -1
- package/dist/{hook/hook-server.d.ts → server/api-server.d.ts} +3 -3
- package/dist/{hook/hook-server.js → server/api-server.js} +6 -4
- package/dist/server/api-server.js.map +1 -0
- package/dist/utils/git-collector.js.map +1 -0
- package/dist/utils/markdown.d.ts +4 -0
- package/dist/utils/markdown.js +47 -0
- package/dist/utils/markdown.js.map +1 -0
- package/dist/utils/paths.d.ts +4 -1
- package/dist/utils/paths.js +5 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/response-store.d.ts +2 -0
- package/dist/utils/response-store.js.map +1 -1
- package/dist/utils/stats-format.d.ts +3 -0
- package/dist/utils/stats-format.js +44 -0
- package/dist/utils/stats-format.js.map +1 -0
- package/package.json +4 -1
- package/dist/hook/hook-handler.d.ts +0 -10
- package/dist/hook/hook-handler.js +0 -76
- package/dist/hook/hook-handler.js.map +0 -1
- package/dist/hook/hook-installer.js +0 -110
- package/dist/hook/hook-installer.js.map +0 -1
- package/dist/hook/hook-server.js.map +0 -1
- package/dist/hook/response-store.d.ts +0 -8
- package/dist/hook/response-store.js +0 -18
- package/dist/monitor/git-collector.js.map +0 -1
- package/dist/monitor/transcript-parser.js.map +0 -1
- package/dist/setup.d.ts +0 -1
- package/dist/setup.js +0 -130
- package/dist/telegram/bot.d.ts +0 -20
- package/dist/telegram/bot.js +0 -130
- package/dist/telegram/message-formatter.d.ts +0 -18
- package/dist/telegram/message-formatter.js +0 -56
- package/dist/telegram/message-sender.d.ts +0 -2
- package/dist/telegram/message-sender.js +0 -76
- package/dist/utils/error-utils.d.ts +0 -1
- package/dist/utils/error-utils.js +0 -3
- /package/dist/{monitor → utils}/git-collector.d.ts +0 -0
- /package/dist/{monitor → utils}/git-collector.js +0 -0
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { GitChangeStatus } from "../utils/constants.js";
|
|
2
|
-
export interface GitChange {
|
|
3
|
-
file: string;
|
|
4
|
-
status: GitChangeStatus;
|
|
5
|
-
}
|
|
6
|
-
export interface NotificationData {
|
|
7
|
-
projectName: string;
|
|
8
|
-
responseSummary: string;
|
|
9
|
-
durationMs: number;
|
|
10
|
-
gitChanges: GitChange[];
|
|
11
|
-
inputTokens: number;
|
|
12
|
-
outputTokens: number;
|
|
13
|
-
cacheCreationTokens: number;
|
|
14
|
-
cacheReadTokens: number;
|
|
15
|
-
}
|
|
16
|
-
export declare function formatNotification(data: NotificationData): string;
|
|
17
|
-
export declare function escapeHtml(text: string): string;
|
|
18
|
-
export declare function extractProjectName(cwd: string): string;
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { basename } from "node:path";
|
|
2
|
-
import { GitChangeStatus } from "../utils/constants.js";
|
|
3
|
-
import { t } from "../i18n/index.js";
|
|
4
|
-
export function formatNotification(data) {
|
|
5
|
-
const parts = [];
|
|
6
|
-
let header = `<b>${escapeHtml(data.projectName)}</b>`;
|
|
7
|
-
if (data.durationMs > 0) {
|
|
8
|
-
header += ` — ${escapeHtml(formatDuration(data.durationMs))}`;
|
|
9
|
-
}
|
|
10
|
-
parts.push(header);
|
|
11
|
-
if (data.inputTokens > 0 || data.outputTokens > 0) {
|
|
12
|
-
parts.push(`${t("notification.tokens")}: ${formatTokenCount(data.inputTokens)} → ${formatTokenCount(data.outputTokens)}`);
|
|
13
|
-
}
|
|
14
|
-
if (data.cacheReadTokens > 0 || data.cacheCreationTokens > 0) {
|
|
15
|
-
const cacheParts = [];
|
|
16
|
-
if (data.cacheReadTokens > 0)
|
|
17
|
-
cacheParts.push(`${formatTokenCount(data.cacheReadTokens)} ${t("notification.cacheRead")}`);
|
|
18
|
-
if (data.cacheCreationTokens > 0)
|
|
19
|
-
cacheParts.push(`${formatTokenCount(data.cacheCreationTokens)} ${t("notification.cacheWrite")}`);
|
|
20
|
-
parts.push(`${t("notification.cache")}: ${cacheParts.join(", ")}`);
|
|
21
|
-
}
|
|
22
|
-
return parts.join("\n");
|
|
23
|
-
}
|
|
24
|
-
export function escapeHtml(text) {
|
|
25
|
-
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
26
|
-
}
|
|
27
|
-
function formatDuration(ms) {
|
|
28
|
-
const totalSeconds = Math.floor(ms / 1000);
|
|
29
|
-
if (totalSeconds < 60)
|
|
30
|
-
return `${totalSeconds}s`;
|
|
31
|
-
const minutes = Math.floor(totalSeconds / 60);
|
|
32
|
-
const seconds = totalSeconds % 60;
|
|
33
|
-
return `${minutes}m${seconds}s`;
|
|
34
|
-
}
|
|
35
|
-
function formatTokenCount(tokens) {
|
|
36
|
-
if (tokens >= 1_000_000)
|
|
37
|
-
return `${(tokens / 1_000_000).toFixed(1)}M`;
|
|
38
|
-
if (tokens >= 1_000)
|
|
39
|
-
return `${(tokens / 1_000).toFixed(1)}k`;
|
|
40
|
-
return `${tokens}`;
|
|
41
|
-
}
|
|
42
|
-
function gitChangeEmoji(status) {
|
|
43
|
-
switch (status) {
|
|
44
|
-
case GitChangeStatus.Added:
|
|
45
|
-
return "➕";
|
|
46
|
-
case GitChangeStatus.Deleted:
|
|
47
|
-
return "❌";
|
|
48
|
-
case GitChangeStatus.Renamed:
|
|
49
|
-
return "📝";
|
|
50
|
-
default:
|
|
51
|
-
return "✏️";
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
export function extractProjectName(cwd) {
|
|
55
|
-
return basename(cwd);
|
|
56
|
-
}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { t } from "../i18n/index.js";
|
|
2
|
-
import { log } from "../utils/log.js";
|
|
3
|
-
const TELEGRAM_MAX_MESSAGE_LENGTH = 4096;
|
|
4
|
-
const PAGINATION_FOOTER_RESERVE = 30;
|
|
5
|
-
export async function sendMessage(bot, chatId, text, responseUrl) {
|
|
6
|
-
const pages = splitMessage(text, TELEGRAM_MAX_MESSAGE_LENGTH - PAGINATION_FOOTER_RESERVE);
|
|
7
|
-
for (let i = 0; i < pages.length; i++) {
|
|
8
|
-
let content = pages[i];
|
|
9
|
-
if (pages.length > 1) {
|
|
10
|
-
content = `${content}\n\n<i>[${i + 1}/${pages.length}]</i>`;
|
|
11
|
-
}
|
|
12
|
-
const isLastPage = i === pages.length - 1;
|
|
13
|
-
const opts = { parse_mode: "HTML" };
|
|
14
|
-
if (isLastPage && responseUrl) {
|
|
15
|
-
const buttonText = t("bot.viewDetails");
|
|
16
|
-
opts.reply_markup = {
|
|
17
|
-
inline_keyboard: [[
|
|
18
|
-
responseUrl.startsWith("https://")
|
|
19
|
-
? { text: buttonText, web_app: { url: responseUrl } }
|
|
20
|
-
: { text: buttonText, url: responseUrl },
|
|
21
|
-
]],
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
try {
|
|
25
|
-
await bot.sendMessage(chatId, content, opts);
|
|
26
|
-
}
|
|
27
|
-
catch (err) {
|
|
28
|
-
log(`HTML send failed, falling back. Error: ${err instanceof Error ? err.message : err}`);
|
|
29
|
-
const fallbackOpts = {};
|
|
30
|
-
if (isLastPage && responseUrl) {
|
|
31
|
-
const buttonText = t("bot.viewDetails");
|
|
32
|
-
fallbackOpts.reply_markup = {
|
|
33
|
-
inline_keyboard: [[
|
|
34
|
-
responseUrl.startsWith("https://")
|
|
35
|
-
? { text: buttonText, web_app: { url: responseUrl } }
|
|
36
|
-
: { text: buttonText, url: responseUrl },
|
|
37
|
-
]],
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
try {
|
|
41
|
-
await bot.sendMessage(chatId, pages[i], fallbackOpts);
|
|
42
|
-
}
|
|
43
|
-
catch (err2) {
|
|
44
|
-
log(`fallback also failed. Error: ${err2 instanceof Error ? err2.message : err2}`);
|
|
45
|
-
await bot.sendMessage(chatId, pages[i]);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
function splitMessage(text, maxLen) {
|
|
51
|
-
if (text.length <= maxLen)
|
|
52
|
-
return [text];
|
|
53
|
-
const pages = [];
|
|
54
|
-
let remaining = text;
|
|
55
|
-
while (remaining.length > 0) {
|
|
56
|
-
if (remaining.length <= maxLen) {
|
|
57
|
-
pages.push(remaining);
|
|
58
|
-
break;
|
|
59
|
-
}
|
|
60
|
-
const splitAt = findSplitPoint(remaining, maxLen);
|
|
61
|
-
pages.push(remaining.slice(0, splitAt));
|
|
62
|
-
remaining = remaining.slice(splitAt);
|
|
63
|
-
}
|
|
64
|
-
return pages;
|
|
65
|
-
}
|
|
66
|
-
function findSplitPoint(text, maxLen) {
|
|
67
|
-
for (let i = maxLen; i > maxLen - 200 && i > 0; i--) {
|
|
68
|
-
if (text[i] === "\n" && text[i - 1] !== "\\")
|
|
69
|
-
return i + 1;
|
|
70
|
-
}
|
|
71
|
-
for (let i = maxLen; i > maxLen - 200 && i > 0; i--) {
|
|
72
|
-
if (text[i] === " " && text[i - 1] !== "\\")
|
|
73
|
-
return i + 1;
|
|
74
|
-
}
|
|
75
|
-
return maxLen;
|
|
76
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function formatError(err: unknown): string;
|
|
File without changes
|
|
File without changes
|