@phuetz/code-buddy 0.1.25 → 0.1.26
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.md +1049 -741
- package/dist/agent/codebuddy-agent.d.ts +5 -0
- package/dist/agent/codebuddy-agent.js +46 -1
- package/dist/agent/codebuddy-agent.js.map +1 -1
- package/dist/agent/execution/agent-executor.d.ts +12 -0
- package/dist/agent/execution/agent-executor.js +147 -6
- package/dist/agent/execution/agent-executor.js.map +1 -1
- package/dist/agent/lessons-tracker.d.ts +50 -0
- package/dist/agent/lessons-tracker.js +234 -0
- package/dist/agent/lessons-tracker.js.map +1 -0
- package/dist/agent/message-queue.d.ts +39 -2
- package/dist/agent/message-queue.js +67 -2
- package/dist/agent/message-queue.js.map +1 -1
- package/dist/agent/middleware/index.d.ts +1 -0
- package/dist/agent/middleware/index.js +1 -0
- package/dist/agent/middleware/index.js.map +1 -1
- package/dist/agent/middleware/workflow-guard.d.ts +21 -0
- package/dist/agent/middleware/workflow-guard.js +94 -0
- package/dist/agent/middleware/workflow-guard.js.map +1 -0
- package/dist/agent/repo-profiler.d.ts +61 -0
- package/dist/agent/repo-profiler.js +295 -0
- package/dist/agent/repo-profiler.js.map +1 -0
- package/dist/agent/response-constraint.d.ts +61 -0
- package/dist/agent/response-constraint.js +91 -0
- package/dist/agent/response-constraint.js.map +1 -0
- package/dist/agent/todo-tracker.d.ts +67 -0
- package/dist/agent/todo-tracker.js +245 -0
- package/dist/agent/todo-tracker.js.map +1 -0
- package/dist/agent/tool-handler.d.ts +11 -0
- package/dist/agent/tool-handler.js +79 -1
- package/dist/agent/tool-handler.js.map +1 -1
- package/dist/agent/types.d.ts +20 -2
- package/dist/agent/wide-research.d.ts +93 -0
- package/dist/agent/wide-research.js +232 -0
- package/dist/agent/wide-research.js.map +1 -0
- package/dist/channels/index.d.ts +2 -0
- package/dist/channels/index.js +2 -0
- package/dist/channels/index.js.map +1 -1
- package/dist/channels/pro/callback-router.d.ts +54 -0
- package/dist/channels/pro/callback-router.js +178 -0
- package/dist/channels/pro/callback-router.js.map +1 -0
- package/dist/channels/pro/ci-watcher.d.ts +86 -0
- package/dist/channels/pro/ci-watcher.js +343 -0
- package/dist/channels/pro/ci-watcher.js.map +1 -0
- package/dist/channels/pro/diff-first.d.ts +63 -0
- package/dist/channels/pro/diff-first.js +187 -0
- package/dist/channels/pro/diff-first.js.map +1 -0
- package/dist/channels/pro/enhanced-commands.d.ts +83 -0
- package/dist/channels/pro/enhanced-commands.js +218 -0
- package/dist/channels/pro/enhanced-commands.js.map +1 -0
- package/dist/channels/pro/index.d.ts +19 -0
- package/dist/channels/pro/index.js +21 -0
- package/dist/channels/pro/index.js.map +1 -0
- package/dist/channels/pro/pro-features.d.ts +79 -0
- package/dist/channels/pro/pro-features.js +203 -0
- package/dist/channels/pro/pro-features.js.map +1 -0
- package/dist/channels/pro/run-commands.d.ts +59 -0
- package/dist/channels/pro/run-commands.js +122 -0
- package/dist/channels/pro/run-commands.js.map +1 -0
- package/dist/channels/pro/run-tracker.d.ts +74 -0
- package/dist/channels/pro/run-tracker.js +252 -0
- package/dist/channels/pro/run-tracker.js.map +1 -0
- package/dist/channels/pro/scoped-auth.d.ts +97 -0
- package/dist/channels/pro/scoped-auth.js +340 -0
- package/dist/channels/pro/scoped-auth.js.map +1 -0
- package/dist/channels/pro/text-formatter.d.ts +27 -0
- package/dist/channels/pro/text-formatter.js +269 -0
- package/dist/channels/pro/text-formatter.js.map +1 -0
- package/dist/channels/pro/types.d.ts +242 -0
- package/dist/channels/pro/types.js +14 -0
- package/dist/channels/pro/types.js.map +1 -0
- package/dist/channels/streaming-policy.d.ts +66 -0
- package/dist/channels/streaming-policy.js +266 -0
- package/dist/channels/streaming-policy.js.map +1 -0
- package/dist/channels/telegram/ci-watcher.d.ts +5 -0
- package/dist/channels/telegram/ci-watcher.js +5 -0
- package/dist/channels/telegram/ci-watcher.js.map +1 -0
- package/dist/channels/telegram/client.d.ts +28 -0
- package/dist/channels/telegram/client.js +147 -1
- package/dist/channels/telegram/client.js.map +1 -1
- package/dist/channels/telegram/diff-first.d.ts +5 -0
- package/dist/channels/telegram/diff-first.js +5 -0
- package/dist/channels/telegram/diff-first.js.map +1 -0
- package/dist/channels/telegram/enhanced-commands.d.ts +6 -0
- package/dist/channels/telegram/enhanced-commands.js +6 -0
- package/dist/channels/telegram/enhanced-commands.js.map +1 -0
- package/dist/channels/telegram/index.d.ts +6 -0
- package/dist/channels/telegram/index.js +6 -0
- package/dist/channels/telegram/index.js.map +1 -1
- package/dist/channels/telegram/pro-formatter.d.ts +30 -0
- package/dist/channels/telegram/pro-formatter.js +276 -0
- package/dist/channels/telegram/pro-formatter.js.map +1 -0
- package/dist/channels/telegram/run-commands.d.ts +5 -0
- package/dist/channels/telegram/run-commands.js +6 -0
- package/dist/channels/telegram/run-commands.js.map +1 -0
- package/dist/channels/telegram/run-tracker.d.ts +5 -0
- package/dist/channels/telegram/run-tracker.js +5 -0
- package/dist/channels/telegram/run-tracker.js.map +1 -0
- package/dist/channels/telegram/scoped-auth.d.ts +6 -0
- package/dist/channels/telegram/scoped-auth.js +5 -0
- package/dist/channels/telegram/scoped-auth.js.map +1 -0
- package/dist/channels/telegram/types.d.ts +34 -0
- package/dist/codebuddy/client.js +14 -1
- package/dist/codebuddy/client.js.map +1 -1
- package/dist/commands/dev/index.d.ts +12 -0
- package/dist/commands/dev/index.js +231 -0
- package/dist/commands/dev/index.js.map +1 -0
- package/dist/commands/dev/workflows.d.ts +31 -0
- package/dist/commands/dev/workflows.js +214 -0
- package/dist/commands/dev/workflows.js.map +1 -0
- package/dist/commands/execpolicy.d.ts +17 -0
- package/dist/commands/execpolicy.js +155 -0
- package/dist/commands/execpolicy.js.map +1 -0
- package/dist/commands/knowledge.d.ts +13 -0
- package/dist/commands/knowledge.js +142 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/lessons.d.ts +11 -0
- package/dist/commands/lessons.js +129 -0
- package/dist/commands/lessons.js.map +1 -0
- package/dist/commands/pairing.d.ts +14 -0
- package/dist/commands/pairing.js +132 -0
- package/dist/commands/pairing.js.map +1 -0
- package/dist/commands/research/index.d.ts +13 -0
- package/dist/commands/research/index.js +91 -0
- package/dist/commands/research/index.js.map +1 -0
- package/dist/commands/run-cli/index.d.ts +11 -0
- package/dist/commands/run-cli/index.js +49 -0
- package/dist/commands/run-cli/index.js.map +1 -0
- package/dist/commands/todos.d.ts +9 -0
- package/dist/commands/todos.js +119 -0
- package/dist/commands/todos.js.map +1 -0
- package/dist/config/toml-config.d.ts +21 -0
- package/dist/config/toml-config.js +15 -0
- package/dist/config/toml-config.js.map +1 -1
- package/dist/context/enhanced-compression.js +12 -1
- package/dist/context/enhanced-compression.js.map +1 -1
- package/dist/context/observation-variator.d.ts +44 -0
- package/dist/context/observation-variator.js +83 -0
- package/dist/context/observation-variator.js.map +1 -0
- package/dist/context/precompaction-flush.d.ts +40 -0
- package/dist/context/precompaction-flush.js +134 -0
- package/dist/context/precompaction-flush.js.map +1 -0
- package/dist/context/restorable-compression.d.ts +80 -0
- package/dist/context/restorable-compression.js +228 -0
- package/dist/context/restorable-compression.js.map +1 -0
- package/dist/daemon/daily-reset.d.ts +77 -0
- package/dist/daemon/daily-reset.js +175 -0
- package/dist/daemon/daily-reset.js.map +1 -0
- package/dist/daemon/index.d.ts +1 -0
- package/dist/daemon/index.js +1 -0
- package/dist/daemon/index.js.map +1 -1
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -1
- package/dist/knowledge/knowledge-manager.d.ts +77 -0
- package/dist/knowledge/knowledge-manager.js +244 -0
- package/dist/knowledge/knowledge-manager.js.map +1 -0
- package/dist/observability/run-store.d.ts +133 -0
- package/dist/observability/run-store.js +419 -0
- package/dist/observability/run-store.js.map +1 -0
- package/dist/observability/run-viewer.d.ts +33 -0
- package/dist/observability/run-viewer.js +254 -0
- package/dist/observability/run-viewer.js.map +1 -0
- package/dist/optimization/cache-breakpoints.d.ts +52 -0
- package/dist/optimization/cache-breakpoints.js +97 -0
- package/dist/optimization/cache-breakpoints.js.map +1 -0
- package/dist/persistence/session-store.d.ts +3 -1
- package/dist/persistence/session-store.js +1 -1
- package/dist/persistence/session-store.js.map +1 -1
- package/dist/prompts/system-base.js +51 -7
- package/dist/prompts/system-base.js.map +1 -1
- package/dist/prompts/variation-injector.d.ts +55 -0
- package/dist/prompts/variation-injector.js +171 -0
- package/dist/prompts/variation-injector.js.map +1 -0
- package/dist/prompts/workflow-rules.d.ts +10 -0
- package/dist/prompts/workflow-rules.js +79 -0
- package/dist/prompts/workflow-rules.js.map +1 -0
- package/dist/sandbox/execpolicy.d.ts +45 -0
- package/dist/sandbox/execpolicy.js +80 -0
- package/dist/sandbox/execpolicy.js.map +1 -1
- package/dist/sandbox/os-sandbox.d.ts +25 -0
- package/dist/sandbox/os-sandbox.js +73 -0
- package/dist/sandbox/os-sandbox.js.map +1 -1
- package/dist/security/security-audit.d.ts +10 -0
- package/dist/security/security-audit.js +116 -0
- package/dist/security/security-audit.js.map +1 -1
- package/dist/security/shell-env-policy.d.ts +45 -0
- package/dist/security/shell-env-policy.js +141 -0
- package/dist/security/shell-env-policy.js.map +1 -0
- package/dist/security/ssrf-guard.d.ts +61 -0
- package/dist/security/ssrf-guard.js +382 -0
- package/dist/security/ssrf-guard.js.map +1 -0
- package/dist/security/write-policy.d.ts +57 -0
- package/dist/security/write-policy.js +117 -0
- package/dist/security/write-policy.js.map +1 -0
- package/dist/services/prompt-builder.js +37 -0
- package/dist/services/prompt-builder.js.map +1 -1
- package/dist/themes/theme-schema.d.ts +10 -10
- package/dist/tools/ask-human-tool.d.ts +62 -0
- package/dist/tools/ask-human-tool.js +112 -0
- package/dist/tools/ask-human-tool.js.map +1 -0
- package/dist/tools/bash/bash-tool.d.ts +15 -0
- package/dist/tools/bash/bash-tool.js +62 -0
- package/dist/tools/bash/bash-tool.js.map +1 -1
- package/dist/tools/bash/command-validator.d.ts +1 -0
- package/dist/tools/bash/command-validator.js +5 -0
- package/dist/tools/bash/command-validator.js.map +1 -1
- package/dist/tools/create-skill-tool.d.ts +87 -0
- package/dist/tools/create-skill-tool.js +142 -0
- package/dist/tools/create-skill-tool.js.map +1 -0
- package/dist/tools/fetch-tool.js +5 -3
- package/dist/tools/fetch-tool.js.map +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +1 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/plan-tool.d.ts +22 -0
- package/dist/tools/plan-tool.js +128 -0
- package/dist/tools/plan-tool.js.map +1 -0
- package/dist/tools/registry/attention-tools.d.ts +32 -0
- package/dist/tools/registry/attention-tools.js +225 -0
- package/dist/tools/registry/attention-tools.js.map +1 -0
- package/dist/tools/registry/index.d.ts +9 -1
- package/dist/tools/registry/index.js +30 -2
- package/dist/tools/registry/index.js.map +1 -1
- package/dist/tools/registry/knowledge-tools.d.ts +46 -0
- package/dist/tools/registry/knowledge-tools.js +293 -0
- package/dist/tools/registry/knowledge-tools.js.map +1 -0
- package/dist/tools/registry/lessons-tools.d.ts +48 -0
- package/dist/tools/registry/lessons-tools.js +359 -0
- package/dist/tools/registry/lessons-tools.js.map +1 -0
- package/dist/tools/registry/plan-tools.d.ts +2 -0
- package/dist/tools/registry/plan-tools.js +7 -0
- package/dist/tools/registry/plan-tools.js.map +1 -0
- package/dist/tools/registry/script-tools.d.ts +2 -0
- package/dist/tools/registry/script-tools.js +7 -0
- package/dist/tools/registry/script-tools.js.map +1 -0
- package/dist/tools/registry/tool-aliases.d.ts +44 -0
- package/dist/tools/registry/tool-aliases.js +130 -0
- package/dist/tools/registry/tool-aliases.js.map +1 -0
- package/dist/tools/run-script-tool.d.ts +13 -0
- package/dist/tools/run-script-tool.js +146 -0
- package/dist/tools/run-script-tool.js.map +1 -0
- package/dist/tools/web-search.d.ts +25 -0
- package/dist/tools/web-search.js +68 -6
- package/dist/tools/web-search.js.map +1 -1
- package/dist/utils/config-validation/schema.d.ts +2 -2
- package/dist/utils/debug-logger.d.ts +1 -1
- package/dist/utils/stable-json.d.ts +27 -0
- package/dist/utils/stable-json.js +50 -0
- package/dist/utils/stable-json.js.map +1 -0
- package/dist/webhooks/webhook-manager.d.ts +7 -0
- package/dist/webhooks/webhook-manager.js +29 -0
- package/dist/webhooks/webhook-manager.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pro Features - Shared Types
|
|
3
|
+
*
|
|
4
|
+
* Channel-agnostic type definitions for all pro features:
|
|
5
|
+
* scoped auth, diff-first, run tracker, run commands, enhanced commands, CI watcher.
|
|
6
|
+
*/
|
|
7
|
+
/** Permission scope tiers (ordered by privilege) */
|
|
8
|
+
export type AuthScope = 'read-only' | 'write-patch' | 'run-tests' | 'deploy';
|
|
9
|
+
/** Scope privilege order for comparison */
|
|
10
|
+
export declare const SCOPE_LEVEL: Record<AuthScope, number>;
|
|
11
|
+
/** Authorization decision returned by scope checks */
|
|
12
|
+
export interface AuthDecision {
|
|
13
|
+
allowed: boolean;
|
|
14
|
+
reason?: string;
|
|
15
|
+
requiredScope?: AuthScope;
|
|
16
|
+
userScopes?: AuthScope[];
|
|
17
|
+
}
|
|
18
|
+
/** Scoped permission entry for a user */
|
|
19
|
+
export interface ScopedPermission {
|
|
20
|
+
userId: string;
|
|
21
|
+
scopes: AuthScope[];
|
|
22
|
+
repos: string[];
|
|
23
|
+
folders: string[];
|
|
24
|
+
denyCommands: string[];
|
|
25
|
+
expiresAt?: string;
|
|
26
|
+
grantedAt: string;
|
|
27
|
+
grantedBy?: string;
|
|
28
|
+
}
|
|
29
|
+
/** Secret handle - maps a friendly name to an env var, never exposed to LLM */
|
|
30
|
+
export interface SecretHandle {
|
|
31
|
+
handle: string;
|
|
32
|
+
envVar: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
addedAt: string;
|
|
35
|
+
}
|
|
36
|
+
/** Pending double-confirmation entry */
|
|
37
|
+
export interface PendingConfirm {
|
|
38
|
+
id: string;
|
|
39
|
+
userId: string;
|
|
40
|
+
operation: string;
|
|
41
|
+
details?: string;
|
|
42
|
+
createdAt: number;
|
|
43
|
+
expiresAt: number;
|
|
44
|
+
}
|
|
45
|
+
/** Temporary full access grant */
|
|
46
|
+
export interface TemporaryAccess {
|
|
47
|
+
userId: string;
|
|
48
|
+
grantedAt: number;
|
|
49
|
+
expiresAt: number;
|
|
50
|
+
grantedBy?: string;
|
|
51
|
+
}
|
|
52
|
+
/** Context for scope checks */
|
|
53
|
+
export interface ScopeCheckContext {
|
|
54
|
+
repo?: string;
|
|
55
|
+
folder?: string;
|
|
56
|
+
command?: string;
|
|
57
|
+
}
|
|
58
|
+
/** Configuration for diff-first mode */
|
|
59
|
+
export interface DiffFirstConfig {
|
|
60
|
+
enabled: boolean;
|
|
61
|
+
planFirst: boolean;
|
|
62
|
+
maxDiffLines: number;
|
|
63
|
+
autoApplyThreshold: number;
|
|
64
|
+
}
|
|
65
|
+
/** Summary of changes to a single file */
|
|
66
|
+
export interface FileDiffSummary {
|
|
67
|
+
path: string;
|
|
68
|
+
action: 'create' | 'modify' | 'delete' | 'rename';
|
|
69
|
+
linesAdded: number;
|
|
70
|
+
linesRemoved: number;
|
|
71
|
+
excerpt: string;
|
|
72
|
+
}
|
|
73
|
+
/** A pending diff awaiting user approval */
|
|
74
|
+
export interface PendingDiff {
|
|
75
|
+
id: string;
|
|
76
|
+
chatId: string;
|
|
77
|
+
userId: string;
|
|
78
|
+
messageId?: string;
|
|
79
|
+
turnId: number;
|
|
80
|
+
diffs: FileDiffSummary[];
|
|
81
|
+
plan?: string;
|
|
82
|
+
status: 'pending' | 'applied' | 'cancelled' | 'expired';
|
|
83
|
+
createdAt: number;
|
|
84
|
+
expiresAt: number;
|
|
85
|
+
fullDiff?: string;
|
|
86
|
+
}
|
|
87
|
+
/** Result of applying a diff */
|
|
88
|
+
export interface ApplyResult {
|
|
89
|
+
success: boolean;
|
|
90
|
+
filesApplied: number;
|
|
91
|
+
error?: string;
|
|
92
|
+
}
|
|
93
|
+
/** Status of a run */
|
|
94
|
+
export type RunStatus = 'running' | 'completed' | 'failed' | 'cancelled' | 'rolled_back';
|
|
95
|
+
/** A single step in a run */
|
|
96
|
+
export interface RunStep {
|
|
97
|
+
stepId: string;
|
|
98
|
+
toolName: string;
|
|
99
|
+
args: Record<string, unknown>;
|
|
100
|
+
result?: string;
|
|
101
|
+
success?: boolean;
|
|
102
|
+
startedAt: number;
|
|
103
|
+
endedAt?: number;
|
|
104
|
+
turnId?: number;
|
|
105
|
+
filesChanged?: string[];
|
|
106
|
+
}
|
|
107
|
+
/** An artifact produced by a run */
|
|
108
|
+
export interface RunArtifact {
|
|
109
|
+
type: 'file' | 'diff' | 'test-result' | 'pr' | 'commit';
|
|
110
|
+
path?: string;
|
|
111
|
+
ref?: string;
|
|
112
|
+
description: string;
|
|
113
|
+
}
|
|
114
|
+
/** A complete run record */
|
|
115
|
+
export interface RunRecord {
|
|
116
|
+
id: string;
|
|
117
|
+
sessionId: string;
|
|
118
|
+
objective: string;
|
|
119
|
+
status: RunStatus;
|
|
120
|
+
steps: RunStep[];
|
|
121
|
+
artifacts: RunArtifact[];
|
|
122
|
+
tokenCount: number;
|
|
123
|
+
totalCost: number;
|
|
124
|
+
startedAt: number;
|
|
125
|
+
endedAt?: number;
|
|
126
|
+
chatId?: string;
|
|
127
|
+
userId?: string;
|
|
128
|
+
}
|
|
129
|
+
/** CI alert types */
|
|
130
|
+
export type CIAlertType = 'build-failure' | 'flaky-test' | 'pr-review' | 'vulnerable-deps' | 'deploy-failure';
|
|
131
|
+
/** CI provider types */
|
|
132
|
+
export type CIProviderType = 'github-actions' | 'gitlab-ci' | 'jenkins' | 'custom-webhook';
|
|
133
|
+
/** CI provider configuration */
|
|
134
|
+
export interface CIProvider {
|
|
135
|
+
type: CIProviderType;
|
|
136
|
+
repoUrl: string;
|
|
137
|
+
apiTokenHandle?: string;
|
|
138
|
+
label?: string;
|
|
139
|
+
}
|
|
140
|
+
/** CI watcher configuration */
|
|
141
|
+
export interface CIWatchConfig {
|
|
142
|
+
enabled: boolean;
|
|
143
|
+
chatId: string;
|
|
144
|
+
providers: CIProvider[];
|
|
145
|
+
alertOn: CIAlertType[];
|
|
146
|
+
mutedPatterns: string[];
|
|
147
|
+
}
|
|
148
|
+
/** A CI event parsed from a webhook payload */
|
|
149
|
+
export interface CIEvent {
|
|
150
|
+
id: string;
|
|
151
|
+
type: CIAlertType;
|
|
152
|
+
provider: CIProviderType;
|
|
153
|
+
repo: string;
|
|
154
|
+
branch: string;
|
|
155
|
+
title: string;
|
|
156
|
+
details: string;
|
|
157
|
+
logUrl?: string;
|
|
158
|
+
severity: 'info' | 'warning' | 'error' | 'critical';
|
|
159
|
+
commit?: string;
|
|
160
|
+
workflow?: string;
|
|
161
|
+
timestamp: number;
|
|
162
|
+
}
|
|
163
|
+
/** A pinned context item */
|
|
164
|
+
export interface ContextPin {
|
|
165
|
+
id: string;
|
|
166
|
+
content: string;
|
|
167
|
+
pinnedBy: string;
|
|
168
|
+
chatId: string;
|
|
169
|
+
timestamp: number;
|
|
170
|
+
tags: string[];
|
|
171
|
+
}
|
|
172
|
+
/** Structured repo info returned by handleRepo */
|
|
173
|
+
export interface RepoInfo {
|
|
174
|
+
remote: string;
|
|
175
|
+
branch: string;
|
|
176
|
+
commitCount: string;
|
|
177
|
+
lastCommit: string;
|
|
178
|
+
recentCommits: string;
|
|
179
|
+
openPRs?: string;
|
|
180
|
+
}
|
|
181
|
+
/** Structured branch info returned by handleBranch */
|
|
182
|
+
export interface BranchInfo {
|
|
183
|
+
branch: string;
|
|
184
|
+
mainBranch: string;
|
|
185
|
+
diffStat?: string;
|
|
186
|
+
commitsAhead: string;
|
|
187
|
+
commitsBehind: string;
|
|
188
|
+
}
|
|
189
|
+
/** Structured PR info for a single PR */
|
|
190
|
+
export interface PRInfo {
|
|
191
|
+
number: string;
|
|
192
|
+
title: string;
|
|
193
|
+
state: string;
|
|
194
|
+
author: string;
|
|
195
|
+
additions: number;
|
|
196
|
+
deletions: number;
|
|
197
|
+
changedFiles: number;
|
|
198
|
+
body: string;
|
|
199
|
+
url?: string;
|
|
200
|
+
}
|
|
201
|
+
/** Summary for PR list */
|
|
202
|
+
export interface PRSummary {
|
|
203
|
+
number: number;
|
|
204
|
+
title: string;
|
|
205
|
+
author: string;
|
|
206
|
+
}
|
|
207
|
+
/** Generic message button */
|
|
208
|
+
export interface MessageButton {
|
|
209
|
+
text: string;
|
|
210
|
+
type: 'url' | 'callback';
|
|
211
|
+
url?: string;
|
|
212
|
+
data?: string;
|
|
213
|
+
}
|
|
214
|
+
/** Formatted message ready for channel delivery */
|
|
215
|
+
export interface ProFormattedMessage {
|
|
216
|
+
text: string;
|
|
217
|
+
buttons?: MessageButton[];
|
|
218
|
+
parseMode?: string;
|
|
219
|
+
}
|
|
220
|
+
/** Command list entry */
|
|
221
|
+
export interface CommandEntry {
|
|
222
|
+
command: string;
|
|
223
|
+
description: string;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Channel-specific formatter interface.
|
|
227
|
+
* Each channel provides its own implementation (or uses the default TextProFormatter).
|
|
228
|
+
*/
|
|
229
|
+
export interface ChannelProFormatter {
|
|
230
|
+
formatDiffMessage(pending: PendingDiff): ProFormattedMessage;
|
|
231
|
+
formatFullDiff(pending: PendingDiff): string;
|
|
232
|
+
formatPlanMessage(plan: string, filesTouched: string[], commands: string[]): ProFormattedMessage;
|
|
233
|
+
formatRunsList(runs: RunRecord[]): ProFormattedMessage;
|
|
234
|
+
formatRunTimeline(run: RunRecord): ProFormattedMessage;
|
|
235
|
+
formatRunDetail(run: RunRecord, testSteps: RunStep[], commitRefs: string[]): ProFormattedMessage;
|
|
236
|
+
formatCIAlert(event: CIEvent, analysis?: string): ProFormattedMessage;
|
|
237
|
+
formatRepoInfo(info: RepoInfo): ProFormattedMessage;
|
|
238
|
+
formatBranchInfo(info: BranchInfo): ProFormattedMessage;
|
|
239
|
+
formatPRInfo(pr: PRInfo): ProFormattedMessage;
|
|
240
|
+
formatPRList(prs: PRSummary[]): ProFormattedMessage;
|
|
241
|
+
getCommandList(): CommandEntry[];
|
|
242
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pro Features - Shared Types
|
|
3
|
+
*
|
|
4
|
+
* Channel-agnostic type definitions for all pro features:
|
|
5
|
+
* scoped auth, diff-first, run tracker, run commands, enhanced commands, CI watcher.
|
|
6
|
+
*/
|
|
7
|
+
/** Scope privilege order for comparison */
|
|
8
|
+
export const SCOPE_LEVEL = {
|
|
9
|
+
'read-only': 0,
|
|
10
|
+
'write-patch': 1,
|
|
11
|
+
'run-tests': 2,
|
|
12
|
+
'deploy': 3,
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/channels/pro/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,2CAA2C;AAC3C,MAAM,CAAC,MAAM,WAAW,GAA8B;IACpD,WAAW,EAAE,CAAC;IACd,aAAa,EAAE,CAAC;IAChB,WAAW,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC;CACZ,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-Channel Streaming Policies — OpenClaw-inspired channel adaptation
|
|
3
|
+
*
|
|
4
|
+
* Different messaging channels have different UX constraints:
|
|
5
|
+
* - Telegram: 4096-char message limit, supports MarkdownV2, rate-limited
|
|
6
|
+
* - Discord: 2000-char message limit, embed cards, fast rate limit
|
|
7
|
+
* - Slack: mrkdwn format, blocks API, real-time socket mode
|
|
8
|
+
* - WhatsApp: plain text only, 65536 char limit, no streaming
|
|
9
|
+
* - Matrix: rich HTML, threading, no hard length limit
|
|
10
|
+
* - WebChat: no limits, full streaming, HTML/markdown
|
|
11
|
+
*
|
|
12
|
+
* This module lets each channel adapter declare its streaming preferences
|
|
13
|
+
* independently of the agent, without touching agent-executor.
|
|
14
|
+
*/
|
|
15
|
+
/** How the channel receives content from the agent */
|
|
16
|
+
export type StreamingMode = 'char' | 'line' | 'sentence' | 'paragraph' | 'full';
|
|
17
|
+
/** Formatting style the channel natively supports */
|
|
18
|
+
export type ChannelFormat = 'markdown' | 'markdownv2' | 'mrkdwn' | 'html' | 'plain';
|
|
19
|
+
export interface ChannelStreamingPolicy {
|
|
20
|
+
/** Channel identifier (e.g. 'telegram', 'discord', 'slack') */
|
|
21
|
+
channelId: string;
|
|
22
|
+
/** How content should be chunked before sending */
|
|
23
|
+
mode: StreamingMode;
|
|
24
|
+
/** Maximum characters per message/chunk (0 = unlimited) */
|
|
25
|
+
maxChunkSize: number;
|
|
26
|
+
/** Delay between chunks to avoid rate-limit (ms) */
|
|
27
|
+
chunkDelayMs: number;
|
|
28
|
+
/** Native format the channel understands */
|
|
29
|
+
format: ChannelFormat;
|
|
30
|
+
/** Strip code block fences for channels that don't render them */
|
|
31
|
+
stripCodeBlocks: boolean;
|
|
32
|
+
/** Truncate middle of very long outputs with ellipsis */
|
|
33
|
+
truncateLong: boolean;
|
|
34
|
+
/** Maximum total output length before truncation (0 = unlimited) */
|
|
35
|
+
maxTotalLength: number;
|
|
36
|
+
/** Whether the channel supports editing previously sent messages */
|
|
37
|
+
supportsEdits: boolean;
|
|
38
|
+
/** Whether to show a typing indicator while streaming */
|
|
39
|
+
showTypingIndicator: boolean;
|
|
40
|
+
}
|
|
41
|
+
/** Set a custom streaming policy for a channel (overrides built-in defaults). */
|
|
42
|
+
export declare function setChannelPolicy(channelId: string, policy: Partial<ChannelStreamingPolicy>): void;
|
|
43
|
+
/**
|
|
44
|
+
* Get the effective streaming policy for a channel.
|
|
45
|
+
* Priority: custom registry > built-in defaults > base defaults.
|
|
46
|
+
*/
|
|
47
|
+
export declare function getChannelPolicy(channelId: string): ChannelStreamingPolicy;
|
|
48
|
+
/** Remove a custom policy override (falls back to built-in defaults). */
|
|
49
|
+
export declare function clearChannelPolicy(channelId: string): void;
|
|
50
|
+
/** List all registered channel IDs (custom + built-in). */
|
|
51
|
+
export declare function listChannels(): string[];
|
|
52
|
+
export declare class StreamingChunker {
|
|
53
|
+
private buffer;
|
|
54
|
+
private totalEmitted;
|
|
55
|
+
private policy;
|
|
56
|
+
private onChunk;
|
|
57
|
+
constructor(channelId: string, onChunk: (chunk: string) => Promise<void>, overrides?: Partial<ChannelStreamingPolicy>);
|
|
58
|
+
/** Feed a streaming token/char from the agent into the chunker. */
|
|
59
|
+
write(token: string): Promise<void>;
|
|
60
|
+
/** Call when the agent stream ends to flush remaining buffer. */
|
|
61
|
+
flush(): Promise<void>;
|
|
62
|
+
private _emit;
|
|
63
|
+
private _sendOne;
|
|
64
|
+
getPolicy(): ChannelStreamingPolicy;
|
|
65
|
+
getBytesEmitted(): number;
|
|
66
|
+
}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-Channel Streaming Policies — OpenClaw-inspired channel adaptation
|
|
3
|
+
*
|
|
4
|
+
* Different messaging channels have different UX constraints:
|
|
5
|
+
* - Telegram: 4096-char message limit, supports MarkdownV2, rate-limited
|
|
6
|
+
* - Discord: 2000-char message limit, embed cards, fast rate limit
|
|
7
|
+
* - Slack: mrkdwn format, blocks API, real-time socket mode
|
|
8
|
+
* - WhatsApp: plain text only, 65536 char limit, no streaming
|
|
9
|
+
* - Matrix: rich HTML, threading, no hard length limit
|
|
10
|
+
* - WebChat: no limits, full streaming, HTML/markdown
|
|
11
|
+
*
|
|
12
|
+
* This module lets each channel adapter declare its streaming preferences
|
|
13
|
+
* independently of the agent, without touching agent-executor.
|
|
14
|
+
*/
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// Built-in channel defaults
|
|
17
|
+
// ============================================================================
|
|
18
|
+
const CHANNEL_DEFAULTS = {
|
|
19
|
+
telegram: {
|
|
20
|
+
mode: 'paragraph',
|
|
21
|
+
maxChunkSize: 4000,
|
|
22
|
+
chunkDelayMs: 300,
|
|
23
|
+
format: 'markdownv2',
|
|
24
|
+
stripCodeBlocks: false,
|
|
25
|
+
truncateLong: true,
|
|
26
|
+
maxTotalLength: 16000,
|
|
27
|
+
supportsEdits: true,
|
|
28
|
+
showTypingIndicator: true,
|
|
29
|
+
},
|
|
30
|
+
discord: {
|
|
31
|
+
mode: 'paragraph',
|
|
32
|
+
maxChunkSize: 1900,
|
|
33
|
+
chunkDelayMs: 200,
|
|
34
|
+
format: 'markdown',
|
|
35
|
+
stripCodeBlocks: false,
|
|
36
|
+
truncateLong: true,
|
|
37
|
+
maxTotalLength: 8000,
|
|
38
|
+
supportsEdits: true,
|
|
39
|
+
showTypingIndicator: true,
|
|
40
|
+
},
|
|
41
|
+
slack: {
|
|
42
|
+
mode: 'sentence',
|
|
43
|
+
maxChunkSize: 3000,
|
|
44
|
+
chunkDelayMs: 500,
|
|
45
|
+
format: 'mrkdwn',
|
|
46
|
+
stripCodeBlocks: false,
|
|
47
|
+
truncateLong: true,
|
|
48
|
+
maxTotalLength: 12000,
|
|
49
|
+
supportsEdits: true,
|
|
50
|
+
showTypingIndicator: true,
|
|
51
|
+
},
|
|
52
|
+
whatsapp: {
|
|
53
|
+
mode: 'full',
|
|
54
|
+
maxChunkSize: 60000,
|
|
55
|
+
chunkDelayMs: 0,
|
|
56
|
+
format: 'plain',
|
|
57
|
+
stripCodeBlocks: true,
|
|
58
|
+
truncateLong: false,
|
|
59
|
+
maxTotalLength: 0,
|
|
60
|
+
supportsEdits: false,
|
|
61
|
+
showTypingIndicator: true,
|
|
62
|
+
},
|
|
63
|
+
signal: {
|
|
64
|
+
mode: 'full',
|
|
65
|
+
maxChunkSize: 0,
|
|
66
|
+
chunkDelayMs: 0,
|
|
67
|
+
format: 'plain',
|
|
68
|
+
stripCodeBlocks: true,
|
|
69
|
+
truncateLong: false,
|
|
70
|
+
maxTotalLength: 0,
|
|
71
|
+
supportsEdits: false,
|
|
72
|
+
showTypingIndicator: false,
|
|
73
|
+
},
|
|
74
|
+
matrix: {
|
|
75
|
+
mode: 'paragraph',
|
|
76
|
+
maxChunkSize: 0,
|
|
77
|
+
chunkDelayMs: 100,
|
|
78
|
+
format: 'html',
|
|
79
|
+
stripCodeBlocks: false,
|
|
80
|
+
truncateLong: false,
|
|
81
|
+
maxTotalLength: 0,
|
|
82
|
+
supportsEdits: true,
|
|
83
|
+
showTypingIndicator: true,
|
|
84
|
+
},
|
|
85
|
+
webchat: {
|
|
86
|
+
mode: 'char',
|
|
87
|
+
maxChunkSize: 0,
|
|
88
|
+
chunkDelayMs: 0,
|
|
89
|
+
format: 'markdown',
|
|
90
|
+
stripCodeBlocks: false,
|
|
91
|
+
truncateLong: false,
|
|
92
|
+
maxTotalLength: 0,
|
|
93
|
+
supportsEdits: true,
|
|
94
|
+
showTypingIndicator: false,
|
|
95
|
+
},
|
|
96
|
+
teams: {
|
|
97
|
+
mode: 'full',
|
|
98
|
+
maxChunkSize: 25000,
|
|
99
|
+
chunkDelayMs: 200,
|
|
100
|
+
format: 'markdown',
|
|
101
|
+
stripCodeBlocks: false,
|
|
102
|
+
truncateLong: true,
|
|
103
|
+
maxTotalLength: 25000,
|
|
104
|
+
supportsEdits: false,
|
|
105
|
+
showTypingIndicator: true,
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
const BASE_DEFAULTS = {
|
|
109
|
+
channelId: 'unknown',
|
|
110
|
+
mode: 'full',
|
|
111
|
+
maxChunkSize: 0,
|
|
112
|
+
chunkDelayMs: 0,
|
|
113
|
+
format: 'plain',
|
|
114
|
+
stripCodeBlocks: false,
|
|
115
|
+
truncateLong: false,
|
|
116
|
+
maxTotalLength: 0,
|
|
117
|
+
supportsEdits: false,
|
|
118
|
+
showTypingIndicator: false,
|
|
119
|
+
};
|
|
120
|
+
// ============================================================================
|
|
121
|
+
// Policy registry
|
|
122
|
+
// ============================================================================
|
|
123
|
+
const _registry = new Map();
|
|
124
|
+
/** Set a custom streaming policy for a channel (overrides built-in defaults). */
|
|
125
|
+
export function setChannelPolicy(channelId, policy) {
|
|
126
|
+
const existing = getChannelPolicy(channelId);
|
|
127
|
+
_registry.set(channelId, { ...existing, ...policy, channelId });
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get the effective streaming policy for a channel.
|
|
131
|
+
* Priority: custom registry > built-in defaults > base defaults.
|
|
132
|
+
*/
|
|
133
|
+
export function getChannelPolicy(channelId) {
|
|
134
|
+
if (_registry.has(channelId)) {
|
|
135
|
+
return _registry.get(channelId);
|
|
136
|
+
}
|
|
137
|
+
const builtin = CHANNEL_DEFAULTS[channelId.toLowerCase()];
|
|
138
|
+
if (builtin) {
|
|
139
|
+
return { ...BASE_DEFAULTS, ...builtin, channelId };
|
|
140
|
+
}
|
|
141
|
+
return { ...BASE_DEFAULTS, channelId };
|
|
142
|
+
}
|
|
143
|
+
/** Remove a custom policy override (falls back to built-in defaults). */
|
|
144
|
+
export function clearChannelPolicy(channelId) {
|
|
145
|
+
_registry.delete(channelId);
|
|
146
|
+
}
|
|
147
|
+
/** List all registered channel IDs (custom + built-in). */
|
|
148
|
+
export function listChannels() {
|
|
149
|
+
const custom = Array.from(_registry.keys());
|
|
150
|
+
const builtin = Object.keys(CHANNEL_DEFAULTS);
|
|
151
|
+
return [...new Set([...custom, ...builtin])];
|
|
152
|
+
}
|
|
153
|
+
// ============================================================================
|
|
154
|
+
// StreamingChunker — splits agent output per channel policy
|
|
155
|
+
// ============================================================================
|
|
156
|
+
export class StreamingChunker {
|
|
157
|
+
buffer = '';
|
|
158
|
+
totalEmitted = 0;
|
|
159
|
+
policy;
|
|
160
|
+
onChunk;
|
|
161
|
+
constructor(channelId, onChunk, overrides) {
|
|
162
|
+
this.policy = overrides
|
|
163
|
+
? { ...getChannelPolicy(channelId), ...overrides }
|
|
164
|
+
: getChannelPolicy(channelId);
|
|
165
|
+
this.onChunk = onChunk;
|
|
166
|
+
}
|
|
167
|
+
/** Feed a streaming token/char from the agent into the chunker. */
|
|
168
|
+
async write(token) {
|
|
169
|
+
if (this.policy.mode === 'char') {
|
|
170
|
+
await this._emit(token);
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
this.buffer += token;
|
|
174
|
+
if (this.policy.mode === 'line') {
|
|
175
|
+
const lines = this.buffer.split('\n');
|
|
176
|
+
// Keep last (possibly incomplete) line in buffer
|
|
177
|
+
this.buffer = lines.pop() ?? '';
|
|
178
|
+
for (const line of lines) {
|
|
179
|
+
await this._emit(line + '\n');
|
|
180
|
+
}
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (this.policy.mode === 'sentence') {
|
|
184
|
+
const sentenceEnd = /[.!?]\s/g;
|
|
185
|
+
let lastIdx = 0;
|
|
186
|
+
let m;
|
|
187
|
+
while ((m = sentenceEnd.exec(this.buffer)) !== null) {
|
|
188
|
+
lastIdx = m.index + m[0].length;
|
|
189
|
+
}
|
|
190
|
+
if (lastIdx > 0) {
|
|
191
|
+
const chunk = this.buffer.slice(0, lastIdx);
|
|
192
|
+
this.buffer = this.buffer.slice(lastIdx);
|
|
193
|
+
await this._emit(chunk);
|
|
194
|
+
}
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
if (this.policy.mode === 'paragraph') {
|
|
198
|
+
const paraBreak = /\n\n+/g;
|
|
199
|
+
let lastIdx = 0;
|
|
200
|
+
let m;
|
|
201
|
+
while ((m = paraBreak.exec(this.buffer)) !== null) {
|
|
202
|
+
lastIdx = m.index + m[0].length;
|
|
203
|
+
}
|
|
204
|
+
if (lastIdx > 0) {
|
|
205
|
+
const chunk = this.buffer.slice(0, lastIdx);
|
|
206
|
+
this.buffer = this.buffer.slice(lastIdx);
|
|
207
|
+
await this._emit(chunk);
|
|
208
|
+
}
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
// 'full' mode: buffer everything, emit on flush()
|
|
212
|
+
}
|
|
213
|
+
/** Call when the agent stream ends to flush remaining buffer. */
|
|
214
|
+
async flush() {
|
|
215
|
+
if (this.buffer.length > 0) {
|
|
216
|
+
await this._emit(this.buffer);
|
|
217
|
+
this.buffer = '';
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
async _emit(text) {
|
|
221
|
+
if (!text)
|
|
222
|
+
return;
|
|
223
|
+
let content = text;
|
|
224
|
+
// Strip code block fences if channel doesn't support them
|
|
225
|
+
if (this.policy.stripCodeBlocks) {
|
|
226
|
+
content = content.replace(/```[\w]*\n?/g, '').replace(/```/g, '');
|
|
227
|
+
}
|
|
228
|
+
// Apply maxTotalLength truncation
|
|
229
|
+
if (this.policy.maxTotalLength > 0) {
|
|
230
|
+
const remaining = this.policy.maxTotalLength - this.totalEmitted;
|
|
231
|
+
if (remaining <= 0)
|
|
232
|
+
return;
|
|
233
|
+
if (content.length > remaining) {
|
|
234
|
+
content = content.slice(0, remaining) + '\n…[truncated]';
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// Split into maxChunkSize chunks if needed
|
|
238
|
+
if (this.policy.maxChunkSize > 0 && content.length > this.policy.maxChunkSize) {
|
|
239
|
+
let offset = 0;
|
|
240
|
+
while (offset < content.length) {
|
|
241
|
+
const slice = content.slice(offset, offset + this.policy.maxChunkSize);
|
|
242
|
+
await this._sendOne(slice);
|
|
243
|
+
offset += this.policy.maxChunkSize;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
await this._sendOne(content);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
async _sendOne(chunk) {
|
|
251
|
+
if (!chunk)
|
|
252
|
+
return;
|
|
253
|
+
this.totalEmitted += chunk.length;
|
|
254
|
+
if (this.policy.chunkDelayMs > 0) {
|
|
255
|
+
await new Promise(r => setTimeout(r, this.policy.chunkDelayMs));
|
|
256
|
+
}
|
|
257
|
+
await this.onChunk(chunk);
|
|
258
|
+
}
|
|
259
|
+
getPolicy() {
|
|
260
|
+
return { ...this.policy };
|
|
261
|
+
}
|
|
262
|
+
getBytesEmitted() {
|
|
263
|
+
return this.totalEmitted;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=streaming-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming-policy.js","sourceRoot":"","sources":["../../src/channels/streaming-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-watcher.js","sourceRoot":"","sources":["../../../src/channels/telegram/ci-watcher.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import type { TelegramConfig, TelegramUpdate } from './types.js';
|
|
8
8
|
import type { OutboundMessage, DeliveryResult, MessageButton } from '../index.js';
|
|
9
9
|
import { BaseChannel } from '../index.js';
|
|
10
|
+
import type { ProFeatures } from '../pro/pro-features.js';
|
|
10
11
|
/**
|
|
11
12
|
* Telegram channel implementation
|
|
12
13
|
*/
|
|
@@ -17,9 +18,18 @@ export declare class TelegramChannel extends BaseChannel {
|
|
|
17
18
|
private botInfo;
|
|
18
19
|
private reconnectionManager;
|
|
19
20
|
private consecutiveErrors;
|
|
21
|
+
private _pro?;
|
|
20
22
|
constructor(config: TelegramConfig);
|
|
21
23
|
private get telegramConfig();
|
|
22
24
|
private get apiUrl();
|
|
25
|
+
/** Lazy getter for ProFeatures bundle with TelegramProFormatter */
|
|
26
|
+
get pro(): ProFeatures;
|
|
27
|
+
get scopedAuth(): import("./scoped-auth.js").ScopedAuthManager;
|
|
28
|
+
get diffFirst(): import("./diff-first.js").DiffFirstManager;
|
|
29
|
+
get runTracker(): import("./run-tracker.js").RunTracker;
|
|
30
|
+
get runCommands(): import("./run-commands.js").TelegramRunCommands;
|
|
31
|
+
get enhancedCommands(): import("./enhanced-commands.js").TelegramEnhancedCommands;
|
|
32
|
+
get ciWatcher(): import("./ci-watcher.js").CIWatcher;
|
|
23
33
|
/**
|
|
24
34
|
* Make API request to Telegram
|
|
25
35
|
*/
|
|
@@ -72,6 +82,24 @@ export declare class TelegramChannel extends BaseChannel {
|
|
|
72
82
|
* Handle callback query (button press)
|
|
73
83
|
*/
|
|
74
84
|
private handleCallbackQuery;
|
|
85
|
+
/**
|
|
86
|
+
* Route enhanced slash commands via ProFeatures
|
|
87
|
+
*/
|
|
88
|
+
private routeEnhancedCommand;
|
|
89
|
+
/**
|
|
90
|
+
* Route pro feature callback queries via ProFeatures
|
|
91
|
+
*/
|
|
92
|
+
private routeProCallback;
|
|
93
|
+
/**
|
|
94
|
+
* Send a diff preview message
|
|
95
|
+
*/
|
|
96
|
+
sendDiffPreview(chatId: string, userId: string, turnId: number, diffs: Array<{
|
|
97
|
+
path: string;
|
|
98
|
+
action: 'create' | 'modify' | 'delete' | 'rename';
|
|
99
|
+
linesAdded: number;
|
|
100
|
+
linesRemoved: number;
|
|
101
|
+
excerpt: string;
|
|
102
|
+
}>, plan?: string, fullDiff?: string): Promise<void>;
|
|
75
103
|
/**
|
|
76
104
|
* Convert Telegram message to InboundMessage
|
|
77
105
|
*/
|