paperclip-plugin-telegram 0.7.1 → 0.8.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/README.md +5 -5
- package/dist/acp-bridge.d.ts +9 -2
- package/dist/acp-bridge.js +93 -35
- package/dist/acp-bridge.js.map +1 -1
- package/dist/agent-status.d.ts +26 -0
- package/dist/agent-status.js +33 -0
- package/dist/agent-status.js.map +1 -0
- package/dist/coerce.d.ts +17 -0
- package/dist/coerce.js +35 -0
- package/dist/coerce.js.map +1 -0
- package/dist/command-definition-validation.d.ts +30 -0
- package/dist/command-definition-validation.js +187 -0
- package/dist/command-definition-validation.js.map +1 -0
- package/dist/command-registry.d.ts +61 -0
- package/dist/command-registry.js +132 -28
- package/dist/command-registry.js.map +1 -1
- package/dist/commands.d.ts +10 -1
- package/dist/commands.js +121 -22
- package/dist/commands.js.map +1 -1
- package/dist/constants.d.ts +2 -1
- package/dist/constants.js +6 -1
- package/dist/constants.js.map +1 -1
- package/dist/escalation.d.ts +1 -1
- package/dist/escalation.js +10 -10
- package/dist/escalation.js.map +1 -1
- package/dist/events.d.ts +23 -0
- package/dist/events.js +28 -0
- package/dist/events.js.map +1 -0
- package/dist/formatters.js +87 -42
- package/dist/formatters.js.map +1 -1
- package/dist/manifest.js +27 -0
- package/dist/manifest.js.map +1 -1
- package/dist/media-pipeline.js +15 -5
- package/dist/media-pipeline.js.map +1 -1
- package/dist/runtime-token.d.ts +10 -3
- package/dist/runtime-token.js +18 -8
- package/dist/runtime-token.js.map +1 -1
- package/dist/secret-ref-validation.d.ts +29 -1
- package/dist/secret-ref-validation.js +33 -1
- package/dist/secret-ref-validation.js.map +1 -1
- package/dist/telegram-api.js +9 -1
- package/dist/telegram-api.js.map +1 -1
- package/dist/ui/index.js +90 -36
- package/dist/ui/index.js.map +1 -1
- package/dist/watch-registry.d.ts +1 -1
- package/dist/watch-registry.js +18 -16
- package/dist/watch-registry.js.map +1 -1
- package/dist/worker.d.ts +2 -1
- package/dist/worker.js +747 -435
- package/dist/worker.js.map +1 -1
- package/package.json +9 -5
package/dist/coerce.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event and tool payloads arrive as `Record<string, unknown>` off the wire.
|
|
3
|
+
* `String(payload.field)` on such a value silently renders "[object Object]"
|
|
4
|
+
* into a Telegram message when the field turns out to be an object rather
|
|
5
|
+
* than a primitive. `str()` is the one place that decision gets made: coerce
|
|
6
|
+
* primitives, fall back (and optionally log) for anything else.
|
|
7
|
+
*/
|
|
8
|
+
export interface CoerceLogger {
|
|
9
|
+
warn(message: string, meta?: Record<string, unknown>): void;
|
|
10
|
+
}
|
|
11
|
+
export declare function str(value: unknown, fallback?: string, logger?: CoerceLogger): string;
|
|
12
|
+
/**
|
|
13
|
+
* For values caught from a `try`/`catch`, not JSON payload fields: an `Error`
|
|
14
|
+
* carries a message worth keeping even though its static type here is
|
|
15
|
+
* `unknown`, so it is special-cased ahead of the generic primitive-only rule.
|
|
16
|
+
*/
|
|
17
|
+
export declare function errorMessage(err: unknown, fallback?: string): string;
|
package/dist/coerce.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event and tool payloads arrive as `Record<string, unknown>` off the wire.
|
|
3
|
+
* `String(payload.field)` on such a value silently renders "[object Object]"
|
|
4
|
+
* into a Telegram message when the field turns out to be an object rather
|
|
5
|
+
* than a primitive. `str()` is the one place that decision gets made: coerce
|
|
6
|
+
* primitives, fall back (and optionally log) for anything else.
|
|
7
|
+
*/
|
|
8
|
+
export function str(value, fallback = "", logger) {
|
|
9
|
+
if (value === null || value === undefined)
|
|
10
|
+
return fallback;
|
|
11
|
+
switch (typeof value) {
|
|
12
|
+
case "string":
|
|
13
|
+
return value;
|
|
14
|
+
case "number":
|
|
15
|
+
case "bigint":
|
|
16
|
+
case "boolean":
|
|
17
|
+
return String(value);
|
|
18
|
+
default:
|
|
19
|
+
logger?.warn("Expected a primitive value but received a non-primitive; using fallback", {
|
|
20
|
+
type: typeof value,
|
|
21
|
+
});
|
|
22
|
+
return fallback;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* For values caught from a `try`/`catch`, not JSON payload fields: an `Error`
|
|
27
|
+
* carries a message worth keeping even though its static type here is
|
|
28
|
+
* `unknown`, so it is special-cased ahead of the generic primitive-only rule.
|
|
29
|
+
*/
|
|
30
|
+
export function errorMessage(err, fallback = "unknown error") {
|
|
31
|
+
if (err instanceof Error)
|
|
32
|
+
return err.message;
|
|
33
|
+
return str(err, fallback);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=coerce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coerce.js","sourceRoot":"","sources":["../src/coerce.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,UAAU,GAAG,CAAC,KAAc,EAAE,QAAQ,GAAG,EAAE,EAAE,MAAqB;IACtE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC3D,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB;YACE,MAAM,EAAE,IAAI,CAAC,yEAAyE,EAAE;gBACtF,IAAI,EAAE,OAAO,KAAK;aACnB,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY,EAAE,QAAQ,GAAG,eAAe;IACnE,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,OAAO,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { WorkflowStep } from "./command-registry.js";
|
|
2
|
+
/**
|
|
3
|
+
* `JSON.parse` returns `any`, so a `/commands import` payload that parses
|
|
4
|
+
* cleanly but doesn't match the declared shape (e.g. `{"hello": 1}`) would
|
|
5
|
+
* otherwise sail through as a `CustomCommand` with `name`/`steps` undefined —
|
|
6
|
+
* failing later, inside `executeWorkflow`, with no link back to the bad
|
|
7
|
+
* import. This module is the one place that shape gets checked before a
|
|
8
|
+
* parsed value is trusted as a command definition.
|
|
9
|
+
*/
|
|
10
|
+
export type ImportedCommandDefinition = {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
steps: WorkflowStep[];
|
|
14
|
+
};
|
|
15
|
+
export type CommandDefinitionValidation = {
|
|
16
|
+
ok: true;
|
|
17
|
+
definition: ImportedCommandDefinition;
|
|
18
|
+
} | {
|
|
19
|
+
ok: false;
|
|
20
|
+
error: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Validates a `JSON.parse`d value against the `CustomCommand` shape before
|
|
24
|
+
* anything downstream (storage, then `executeWorkflow`) trusts it. Every
|
|
25
|
+
* `steps[]` entry is checked against its declared `type`'s required fields,
|
|
26
|
+
* not just the `id`/`type` pair — a `send_message` step missing `text`, or an
|
|
27
|
+
* `http_request` step with a non-string `body`, is rejected here rather than
|
|
28
|
+
* failing mid-run with no link back to the import.
|
|
29
|
+
*/
|
|
30
|
+
export declare function validateCommandDefinition(parsed: unknown): CommandDefinitionValidation;
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
const VALID_STEP_TYPES = [
|
|
2
|
+
"fetch_issue",
|
|
3
|
+
"invoke_agent",
|
|
4
|
+
"http_request",
|
|
5
|
+
"send_message",
|
|
6
|
+
"create_issue",
|
|
7
|
+
"wait_approval",
|
|
8
|
+
"set_state",
|
|
9
|
+
];
|
|
10
|
+
const HTTP_METHODS = ["GET", "POST", "PUT", "DELETE"];
|
|
11
|
+
const NAME_PATTERN = /^[a-zA-Z0-9_]{1,32}$/;
|
|
12
|
+
const MAX_INTERPOLATED_LENGTH = 40;
|
|
13
|
+
/**
|
|
14
|
+
* A step `id`/`type` reaches error-message interpolation before any length
|
|
15
|
+
* check, so an oversized value (e.g. a multi-KB `id`) can push a reply past
|
|
16
|
+
* Telegram's 4096-char limit. `sendMessage` swallows that rejection, leaving
|
|
17
|
+
* the user with silence instead of the error this validation exists to show.
|
|
18
|
+
*/
|
|
19
|
+
function truncateForDisplay(value) {
|
|
20
|
+
return value.length > MAX_INTERPOLATED_LENGTH
|
|
21
|
+
? `${value.slice(0, MAX_INTERPOLATED_LENGTH)}…`
|
|
22
|
+
: value;
|
|
23
|
+
}
|
|
24
|
+
function isRecord(value) {
|
|
25
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
26
|
+
}
|
|
27
|
+
function isNonEmptyString(value) {
|
|
28
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
29
|
+
}
|
|
30
|
+
function isStringRecord(value) {
|
|
31
|
+
return isRecord(value) && Object.values(value).every((v) => typeof v === "string");
|
|
32
|
+
}
|
|
33
|
+
function isStepType(value) {
|
|
34
|
+
return VALID_STEP_TYPES.includes(value);
|
|
35
|
+
}
|
|
36
|
+
function validateStep(value, index) {
|
|
37
|
+
const position = `Step ${index + 1}`;
|
|
38
|
+
if (!isRecord(value)) {
|
|
39
|
+
return { ok: false, error: `${position} must be an object.` };
|
|
40
|
+
}
|
|
41
|
+
const id = value.id;
|
|
42
|
+
if (!isNonEmptyString(id)) {
|
|
43
|
+
return { ok: false, error: `${position} must have an 'id' field.` };
|
|
44
|
+
}
|
|
45
|
+
const label = `${position} ('${truncateForDisplay(id)}')`;
|
|
46
|
+
const type = value.type;
|
|
47
|
+
if (!isNonEmptyString(type)) {
|
|
48
|
+
return { ok: false, error: `${label} must have a 'type' field.` };
|
|
49
|
+
}
|
|
50
|
+
if (!isStepType(type)) {
|
|
51
|
+
return { ok: false, error: `Invalid step type: '${truncateForDisplay(type)}' (${label}). Valid: ${VALID_STEP_TYPES.join(", ")}` };
|
|
52
|
+
}
|
|
53
|
+
const name = typeof value.name === "string" ? value.name : undefined;
|
|
54
|
+
const base = { id, name };
|
|
55
|
+
const missing = (field) => ({
|
|
56
|
+
ok: false,
|
|
57
|
+
error: `${label} of type '${type}' must have a '${field}' field.`,
|
|
58
|
+
});
|
|
59
|
+
const badType = (field, expected) => ({
|
|
60
|
+
ok: false,
|
|
61
|
+
error: `${label} of type '${type}': '${field}' must be ${expected}.`,
|
|
62
|
+
});
|
|
63
|
+
switch (type) {
|
|
64
|
+
case "fetch_issue": {
|
|
65
|
+
if (!isNonEmptyString(value.issueId))
|
|
66
|
+
return missing("issueId");
|
|
67
|
+
return { ok: true, step: { ...base, type, issueId: value.issueId } };
|
|
68
|
+
}
|
|
69
|
+
case "invoke_agent": {
|
|
70
|
+
if (!isNonEmptyString(value.agentId))
|
|
71
|
+
return missing("agentId");
|
|
72
|
+
if (!isNonEmptyString(value.prompt))
|
|
73
|
+
return missing("prompt");
|
|
74
|
+
return { ok: true, step: { ...base, type, agentId: value.agentId, prompt: value.prompt } };
|
|
75
|
+
}
|
|
76
|
+
case "http_request": {
|
|
77
|
+
if (!isNonEmptyString(value.url))
|
|
78
|
+
return missing("url");
|
|
79
|
+
const method = value.method;
|
|
80
|
+
if (!HTTP_METHODS.includes(method)) {
|
|
81
|
+
return badType("method", `one of ${HTTP_METHODS.join(", ")}`);
|
|
82
|
+
}
|
|
83
|
+
if (value.headers !== undefined && !isStringRecord(value.headers)) {
|
|
84
|
+
return badType("headers", "an object of string values");
|
|
85
|
+
}
|
|
86
|
+
if (value.body !== undefined && typeof value.body !== "string") {
|
|
87
|
+
return badType("body", "a string");
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
ok: true,
|
|
91
|
+
step: {
|
|
92
|
+
...base,
|
|
93
|
+
type,
|
|
94
|
+
url: value.url,
|
|
95
|
+
method: method,
|
|
96
|
+
headers: value.headers,
|
|
97
|
+
body: value.body,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
case "send_message": {
|
|
102
|
+
if (!isNonEmptyString(value.text))
|
|
103
|
+
return missing("text");
|
|
104
|
+
return { ok: true, step: { ...base, type, text: value.text } };
|
|
105
|
+
}
|
|
106
|
+
case "create_issue": {
|
|
107
|
+
if (!isNonEmptyString(value.title))
|
|
108
|
+
return missing("title");
|
|
109
|
+
if (value.description !== undefined && typeof value.description !== "string") {
|
|
110
|
+
return badType("description", "a string");
|
|
111
|
+
}
|
|
112
|
+
if (value.projectId !== undefined && typeof value.projectId !== "string") {
|
|
113
|
+
return badType("projectId", "a string");
|
|
114
|
+
}
|
|
115
|
+
if (value.assigneeAgentId !== undefined && typeof value.assigneeAgentId !== "string") {
|
|
116
|
+
return badType("assigneeAgentId", "a string");
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
ok: true,
|
|
120
|
+
step: {
|
|
121
|
+
...base,
|
|
122
|
+
type,
|
|
123
|
+
title: value.title,
|
|
124
|
+
description: value.description,
|
|
125
|
+
projectId: value.projectId,
|
|
126
|
+
assigneeAgentId: value.assigneeAgentId,
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
case "wait_approval": {
|
|
131
|
+
if (!isNonEmptyString(value.prompt))
|
|
132
|
+
return missing("prompt");
|
|
133
|
+
if (value.timeoutMs !== undefined && typeof value.timeoutMs !== "number") {
|
|
134
|
+
return badType("timeoutMs", "a number");
|
|
135
|
+
}
|
|
136
|
+
return { ok: true, step: { ...base, type, prompt: value.prompt, timeoutMs: value.timeoutMs } };
|
|
137
|
+
}
|
|
138
|
+
case "set_state": {
|
|
139
|
+
if (!isNonEmptyString(value.key))
|
|
140
|
+
return missing("key");
|
|
141
|
+
if (typeof value.value !== "string")
|
|
142
|
+
return missing("value");
|
|
143
|
+
return { ok: true, step: { ...base, type, key: value.key, value: value.value } };
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Validates a `JSON.parse`d value against the `CustomCommand` shape before
|
|
149
|
+
* anything downstream (storage, then `executeWorkflow`) trusts it. Every
|
|
150
|
+
* `steps[]` entry is checked against its declared `type`'s required fields,
|
|
151
|
+
* not just the `id`/`type` pair — a `send_message` step missing `text`, or an
|
|
152
|
+
* `http_request` step with a non-string `body`, is rejected here rather than
|
|
153
|
+
* failing mid-run with no link back to the import.
|
|
154
|
+
*/
|
|
155
|
+
export function validateCommandDefinition(parsed) {
|
|
156
|
+
if (!isRecord(parsed)) {
|
|
157
|
+
return { ok: false, error: "Command definition must be a JSON object with 'name' and 'steps' fields." };
|
|
158
|
+
}
|
|
159
|
+
if (!isNonEmptyString(parsed.name)) {
|
|
160
|
+
return { ok: false, error: "Command definition must have a 'name' field." };
|
|
161
|
+
}
|
|
162
|
+
if (!NAME_PATTERN.test(parsed.name)) {
|
|
163
|
+
return { ok: false, error: "Command definition 'name' must match ^[a-zA-Z0-9_]{1,32}$ (letters, numbers, underscores only, max 32 chars, no whitespace)." };
|
|
164
|
+
}
|
|
165
|
+
if (parsed.description !== undefined && typeof parsed.description !== "string") {
|
|
166
|
+
return { ok: false, error: "Command definition 'description' must be a string." };
|
|
167
|
+
}
|
|
168
|
+
if (!Array.isArray(parsed.steps)) {
|
|
169
|
+
return { ok: false, error: "Command definition must have a 'steps' array field." };
|
|
170
|
+
}
|
|
171
|
+
const steps = [];
|
|
172
|
+
for (let i = 0; i < parsed.steps.length; i++) {
|
|
173
|
+
const result = validateStep(parsed.steps[i], i);
|
|
174
|
+
if (!result.ok)
|
|
175
|
+
return { ok: false, error: result.error };
|
|
176
|
+
steps.push(result.step);
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
ok: true,
|
|
180
|
+
definition: {
|
|
181
|
+
name: parsed.name,
|
|
182
|
+
description: typeof parsed.description === "string" ? parsed.description : "No description",
|
|
183
|
+
steps,
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=command-definition-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-definition-validation.js","sourceRoot":"","sources":["../src/command-definition-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,64 @@
|
|
|
1
1
|
import type { PluginContext } from "@paperclipai/plugin-sdk";
|
|
2
|
+
export type WorkflowStepBase = {
|
|
3
|
+
id: string;
|
|
4
|
+
name?: string;
|
|
5
|
+
};
|
|
6
|
+
export type FetchIssueStep = WorkflowStepBase & {
|
|
7
|
+
type: "fetch_issue";
|
|
8
|
+
issueId: string;
|
|
9
|
+
};
|
|
10
|
+
export type InvokeAgentStep = WorkflowStepBase & {
|
|
11
|
+
type: "invoke_agent";
|
|
12
|
+
agentId: string;
|
|
13
|
+
prompt: string;
|
|
14
|
+
};
|
|
15
|
+
export type HttpRequestStep = WorkflowStepBase & {
|
|
16
|
+
type: "http_request";
|
|
17
|
+
url: string;
|
|
18
|
+
method: "GET" | "POST" | "PUT" | "DELETE";
|
|
19
|
+
headers?: Record<string, string>;
|
|
20
|
+
body?: string;
|
|
21
|
+
};
|
|
22
|
+
export type SendMessageStep = WorkflowStepBase & {
|
|
23
|
+
type: "send_message";
|
|
24
|
+
text: string;
|
|
25
|
+
};
|
|
26
|
+
export type CreateIssueStep = WorkflowStepBase & {
|
|
27
|
+
type: "create_issue";
|
|
28
|
+
title: string;
|
|
29
|
+
description?: string;
|
|
30
|
+
projectId?: string;
|
|
31
|
+
assigneeAgentId?: string;
|
|
32
|
+
};
|
|
33
|
+
export type WaitApprovalStep = WorkflowStepBase & {
|
|
34
|
+
type: "wait_approval";
|
|
35
|
+
prompt: string;
|
|
36
|
+
timeoutMs?: number;
|
|
37
|
+
};
|
|
38
|
+
export type SetStateStep = WorkflowStepBase & {
|
|
39
|
+
type: "set_state";
|
|
40
|
+
key: string;
|
|
41
|
+
value: string;
|
|
42
|
+
};
|
|
43
|
+
export type WorkflowStep = FetchIssueStep | InvokeAgentStep | HttpRequestStep | SendMessageStep | CreateIssueStep | WaitApprovalStep | SetStateStep;
|
|
44
|
+
export type CustomCommand = {
|
|
45
|
+
name: string;
|
|
46
|
+
description: string;
|
|
47
|
+
steps: WorkflowStep[];
|
|
48
|
+
createdBy: string;
|
|
49
|
+
createdAt: string;
|
|
50
|
+
};
|
|
2
51
|
export declare function handleCommandsCommand(ctx: PluginContext, token: string, chatId: string, args: string, messageThreadId?: number, companyId?: string): Promise<void>;
|
|
3
52
|
export declare function tryCustomCommand(ctx: PluginContext, token: string, chatId: string, command: string, argsStr: string, messageThreadId?: number, companyId?: string): Promise<boolean>;
|
|
53
|
+
/** True for the two callbacks a wait_approval step's buttons send back. */
|
|
54
|
+
export declare function isWorkflowApprovalCallback(data: string): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Resume or abandon a workflow parked at an approval gate.
|
|
57
|
+
*
|
|
58
|
+
* The parked state is deleted before the remaining steps run. That ordering is
|
|
59
|
+
* the point: it makes a second press of the same button a no-op instead of
|
|
60
|
+
* running the tail of the workflow twice. Telegram leaves the buttons on screen
|
|
61
|
+
* and re-delivers callbacks it considers unacknowledged, so a double press is
|
|
62
|
+
* the expected case, not the unlucky one.
|
|
63
|
+
*/
|
|
64
|
+
export declare function resolveWorkflowApprovalCallback(ctx: PluginContext, token: string, data: string, callbackQueryId: string, actor: string, messageId?: number): Promise<void>;
|
package/dist/command-registry.js
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
|
-
import { sendMessage, escapeMarkdownV2, sendChatAction } from "./telegram-api.js";
|
|
1
|
+
import { sendMessage, escapeMarkdownV2, sendChatAction, answerCallbackQuery, editMessage } from "./telegram-api.js";
|
|
2
2
|
import { METRIC_NAMES } from "./constants.js";
|
|
3
|
+
import { validateCommandDefinition } from "./command-definition-validation.js";
|
|
4
|
+
/**
|
|
5
|
+
* Returned by a `wait_approval` step to tell executeWorkflow to stop and park.
|
|
6
|
+
* Carries the approval id so the continuation is stored under the same key the
|
|
7
|
+
* buttons will send back.
|
|
8
|
+
*/
|
|
9
|
+
const AWAITING_APPROVAL_PREFIX = "__awaiting_approval__:";
|
|
10
|
+
/** Callback data prefixes for the two buttons a wait_approval step sends. */
|
|
11
|
+
const APPROVE_PREFIX = "cmd_approve_";
|
|
12
|
+
const REJECT_PREFIX = "cmd_reject_";
|
|
13
|
+
function approvalStateKey(approvalId) {
|
|
14
|
+
return `cmd_approval_${approvalId}`;
|
|
15
|
+
}
|
|
3
16
|
// --- Built-in commands ---
|
|
4
17
|
const BUILTIN_COMMANDS = new Set([
|
|
5
18
|
"status", "issues", "agents", "approve", "help",
|
|
@@ -78,41 +91,31 @@ async function importCommand(ctx, token, chatId, jsonStr, messageThreadId, compa
|
|
|
78
91
|
await sendMessage(ctx, token, chatId, "Usage: /commands import <json-definition>", { messageThreadId });
|
|
79
92
|
return;
|
|
80
93
|
}
|
|
81
|
-
let
|
|
94
|
+
let parsed;
|
|
82
95
|
try {
|
|
83
|
-
|
|
96
|
+
parsed = JSON.parse(jsonStr);
|
|
84
97
|
}
|
|
85
98
|
catch {
|
|
86
99
|
await sendMessage(ctx, token, chatId, "Invalid JSON. Please provide a valid command definition.", { messageThreadId });
|
|
87
100
|
return;
|
|
88
101
|
}
|
|
89
|
-
|
|
90
|
-
|
|
102
|
+
const validation = validateCommandDefinition(parsed);
|
|
103
|
+
if (!validation.ok) {
|
|
104
|
+
await sendMessage(ctx, token, chatId, validation.error, { messageThreadId });
|
|
91
105
|
return;
|
|
92
106
|
}
|
|
107
|
+
const definition = validation.definition;
|
|
93
108
|
if (BUILTIN_COMMANDS.has(definition.name)) {
|
|
94
109
|
await sendMessage(ctx, token, chatId, `Cannot override built-in command: /${definition.name}`, { messageThreadId });
|
|
95
110
|
return;
|
|
96
111
|
}
|
|
97
|
-
// Validate steps
|
|
98
|
-
for (const step of definition.steps) {
|
|
99
|
-
if (!step.type || !step.id) {
|
|
100
|
-
await sendMessage(ctx, token, chatId, "Each step must have 'type' and 'id' fields.", { messageThreadId });
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
const validTypes = ["fetch_issue", "invoke_agent", "http_request", "send_message", "create_issue", "wait_approval", "set_state"];
|
|
104
|
-
if (!validTypes.includes(step.type)) {
|
|
105
|
-
await sendMessage(ctx, token, chatId, `Invalid step type: ${step.type}. Valid: ${validTypes.join(", ")}`, { messageThreadId });
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
112
|
const resolvedCompanyId = companyId ?? chatId;
|
|
110
113
|
const commands = await getCommandRegistry(ctx, resolvedCompanyId);
|
|
111
114
|
// Replace existing or add new
|
|
112
115
|
const existingIdx = commands.findIndex((c) => c.name === definition.name);
|
|
113
116
|
const newCmd = {
|
|
114
117
|
name: definition.name,
|
|
115
|
-
description: definition.description
|
|
118
|
+
description: definition.description,
|
|
116
119
|
steps: definition.steps,
|
|
117
120
|
createdBy: `telegram:${chatId}`,
|
|
118
121
|
createdAt: new Date().toISOString(),
|
|
@@ -152,13 +155,39 @@ async function runCommand(ctx, token, chatId, name, args, messageThreadId, compa
|
|
|
152
155
|
await executeWorkflow(ctx, token, chatId, cmd, args, messageThreadId, resolvedCompanyId);
|
|
153
156
|
}
|
|
154
157
|
// --- Workflow executor ---
|
|
155
|
-
async function executeWorkflow(ctx, token, chatId, cmd, args, messageThreadId, companyId) {
|
|
158
|
+
async function executeWorkflow(ctx, token, chatId, cmd, args, messageThreadId, companyId, startIndex = 0, priorResults = []) {
|
|
156
159
|
await sendChatAction(ctx, token, chatId);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
+
if (startIndex === 0) {
|
|
161
|
+
await ctx.metrics.write(METRIC_NAMES.commandsExecuted, 1);
|
|
162
|
+
}
|
|
163
|
+
const results = [...priorResults];
|
|
164
|
+
for (let index = startIndex; index < cmd.steps.length; index++) {
|
|
165
|
+
const step = cmd.steps[index];
|
|
160
166
|
try {
|
|
161
167
|
const result = await executeStep(ctx, token, chatId, step, args, results, messageThreadId, companyId);
|
|
168
|
+
// An approval gate stops the run here. Continuing would execute the very
|
|
169
|
+
// steps the gate exists to hold back — which is what this used to do,
|
|
170
|
+
// making the Approve button decorative.
|
|
171
|
+
if (typeof result === "string" && result.startsWith(AWAITING_APPROVAL_PREFIX)) {
|
|
172
|
+
const approvalId = result.slice(AWAITING_APPROVAL_PREFIX.length);
|
|
173
|
+
const parked = {
|
|
174
|
+
commandName: cmd.name,
|
|
175
|
+
args,
|
|
176
|
+
results,
|
|
177
|
+
nextStepIndex: index + 1,
|
|
178
|
+
chatId,
|
|
179
|
+
messageThreadId,
|
|
180
|
+
companyId,
|
|
181
|
+
createdAt: Date.now(),
|
|
182
|
+
};
|
|
183
|
+
await ctx.state.set({ scopeKind: "instance", stateKey: approvalStateKey(approvalId) }, parked);
|
|
184
|
+
ctx.logger.info("Workflow parked awaiting approval", {
|
|
185
|
+
command: cmd.name,
|
|
186
|
+
stepId: step.id,
|
|
187
|
+
approvalId,
|
|
188
|
+
});
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
162
191
|
results.push({ stepId: step.id, result: result ?? "" });
|
|
163
192
|
}
|
|
164
193
|
catch (err) {
|
|
@@ -236,20 +265,35 @@ async function executeStep(ctx, token, chatId, step, args, prevResults, messageT
|
|
|
236
265
|
}
|
|
237
266
|
case "wait_approval": {
|
|
238
267
|
const prompt = interpolate(step.prompt);
|
|
239
|
-
|
|
268
|
+
// Unique per step within a run: Date.now() alone collides when two steps
|
|
269
|
+
// park in the same millisecond, and a collision would resume the wrong
|
|
270
|
+
// continuation.
|
|
271
|
+
const approvalId = `${Date.now()}_${step.id}`;
|
|
240
272
|
await sendMessage(ctx, token, chatId, prompt, {
|
|
241
273
|
messageThreadId,
|
|
242
274
|
inlineKeyboard: [
|
|
243
275
|
[
|
|
244
|
-
{ text: "Approve", callback_data:
|
|
245
|
-
{ text: "Reject", callback_data:
|
|
276
|
+
{ text: "Approve", callback_data: `${APPROVE_PREFIX}${approvalId}` },
|
|
277
|
+
{ text: "Reject", callback_data: `${REJECT_PREFIX}${approvalId}` },
|
|
246
278
|
],
|
|
247
279
|
],
|
|
248
280
|
});
|
|
249
|
-
//
|
|
250
|
-
|
|
251
|
-
|
|
281
|
+
// executeWorkflow stores the continuation under this id and stops. The
|
|
282
|
+
// state is written there rather than here because only the loop knows
|
|
283
|
+
// which step comes next.
|
|
284
|
+
return `${AWAITING_APPROVAL_PREFIX}${approvalId}`;
|
|
252
285
|
}
|
|
286
|
+
// NOTE: there is deliberately no "choice" step that blocks inline.
|
|
287
|
+
//
|
|
288
|
+
// A step that asks the user to pick and *awaits* the answer cannot work
|
|
289
|
+
// here: updates are processed strictly sequentially, so a workflow that
|
|
290
|
+
// blocks on a button press blocks the loop that would deliver it. The
|
|
291
|
+
// press can never arrive and the run stalls until it times out.
|
|
292
|
+
//
|
|
293
|
+
// `wait_approval` is how such a step has to be built instead: send the
|
|
294
|
+
// buttons, persist the continuation, return, and let the callback handler
|
|
295
|
+
// resume the run. A `choice` step can be added the same way — park the
|
|
296
|
+
// context keyed by an id and resolve it in resolveWorkflowApprovalCallback.
|
|
253
297
|
case "set_state": {
|
|
254
298
|
const key = interpolate(step.key);
|
|
255
299
|
const value = interpolate(step.value);
|
|
@@ -260,6 +304,66 @@ async function executeStep(ctx, token, chatId, step, args, prevResults, messageT
|
|
|
260
304
|
return null;
|
|
261
305
|
}
|
|
262
306
|
}
|
|
307
|
+
// --- Approval callbacks ---
|
|
308
|
+
/** True for the two callbacks a wait_approval step's buttons send back. */
|
|
309
|
+
export function isWorkflowApprovalCallback(data) {
|
|
310
|
+
return data.startsWith(APPROVE_PREFIX) || data.startsWith(REJECT_PREFIX);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Resume or abandon a workflow parked at an approval gate.
|
|
314
|
+
*
|
|
315
|
+
* The parked state is deleted before the remaining steps run. That ordering is
|
|
316
|
+
* the point: it makes a second press of the same button a no-op instead of
|
|
317
|
+
* running the tail of the workflow twice. Telegram leaves the buttons on screen
|
|
318
|
+
* and re-delivers callbacks it considers unacknowledged, so a double press is
|
|
319
|
+
* the expected case, not the unlucky one.
|
|
320
|
+
*/
|
|
321
|
+
export async function resolveWorkflowApprovalCallback(ctx, token, data, callbackQueryId, actor, messageId) {
|
|
322
|
+
const approved = data.startsWith(APPROVE_PREFIX);
|
|
323
|
+
const approvalId = data.slice((approved ? APPROVE_PREFIX : REJECT_PREFIX).length);
|
|
324
|
+
const stateKey = approvalStateKey(approvalId);
|
|
325
|
+
const parked = await ctx.state.get({
|
|
326
|
+
scopeKind: "instance",
|
|
327
|
+
stateKey,
|
|
328
|
+
});
|
|
329
|
+
if (!parked || parked.resolved) {
|
|
330
|
+
// Already decided, or from a build before the continuation was persisted.
|
|
331
|
+
// Saying so beats silence, which would read as the button doing nothing.
|
|
332
|
+
await answerCallbackQuery(ctx, token, callbackQueryId, "This approval is no longer pending.");
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
await ctx.state.set({ scopeKind: "instance", stateKey }, { ...parked, resolved: true });
|
|
336
|
+
if (!approved) {
|
|
337
|
+
await answerCallbackQuery(ctx, token, callbackQueryId, "Rejected");
|
|
338
|
+
if (messageId) {
|
|
339
|
+
await editMessage(ctx, token, parked.chatId, messageId, `Rejected by ${actor}. The workflow stopped here.`);
|
|
340
|
+
}
|
|
341
|
+
ctx.logger.info("Workflow rejected at approval gate", {
|
|
342
|
+
command: parked.commandName,
|
|
343
|
+
approvalId,
|
|
344
|
+
actor,
|
|
345
|
+
});
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
await answerCallbackQuery(ctx, token, callbackQueryId, "Approved");
|
|
349
|
+
if (messageId) {
|
|
350
|
+
const edited = await editMessage(ctx, token, parked.chatId, messageId, `Approved by ${actor}. Continuing.`);
|
|
351
|
+
if (!edited) {
|
|
352
|
+
ctx.logger.error("editMessage after approval failed", {
|
|
353
|
+
chatId: parked.chatId,
|
|
354
|
+
messageId,
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
const commands = await getCommandRegistry(ctx, parked.companyId);
|
|
359
|
+
const cmd = commands.find((c) => c.name === parked.commandName);
|
|
360
|
+
if (!cmd) {
|
|
361
|
+
// The command was edited or deleted while the approval sat pending.
|
|
362
|
+
await sendMessage(ctx, token, parked.chatId, `Approved, but /${parked.commandName} no longer exists — nothing to continue.`, { messageThreadId: parked.messageThreadId });
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
await executeWorkflow(ctx, token, parked.chatId, cmd, parked.args, parked.messageThreadId, parked.companyId, parked.nextStepIndex, parked.results);
|
|
366
|
+
}
|
|
263
367
|
// --- State helpers ---
|
|
264
368
|
async function getCommandRegistry(ctx, companyId) {
|
|
265
369
|
const commands = await ctx.state.get({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-registry.js","sourceRoot":"","sources":["../src/command-registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"command-registry.js","sourceRoot":"","sources":["../src/command-registry.ts"],"names":[],"mappings":"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"}
|