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.
Files changed (51) hide show
  1. package/README.md +5 -5
  2. package/dist/acp-bridge.d.ts +9 -2
  3. package/dist/acp-bridge.js +93 -35
  4. package/dist/acp-bridge.js.map +1 -1
  5. package/dist/agent-status.d.ts +26 -0
  6. package/dist/agent-status.js +33 -0
  7. package/dist/agent-status.js.map +1 -0
  8. package/dist/coerce.d.ts +17 -0
  9. package/dist/coerce.js +35 -0
  10. package/dist/coerce.js.map +1 -0
  11. package/dist/command-definition-validation.d.ts +30 -0
  12. package/dist/command-definition-validation.js +187 -0
  13. package/dist/command-definition-validation.js.map +1 -0
  14. package/dist/command-registry.d.ts +61 -0
  15. package/dist/command-registry.js +132 -28
  16. package/dist/command-registry.js.map +1 -1
  17. package/dist/commands.d.ts +10 -1
  18. package/dist/commands.js +121 -22
  19. package/dist/commands.js.map +1 -1
  20. package/dist/constants.d.ts +2 -1
  21. package/dist/constants.js +6 -1
  22. package/dist/constants.js.map +1 -1
  23. package/dist/escalation.d.ts +1 -1
  24. package/dist/escalation.js +10 -10
  25. package/dist/escalation.js.map +1 -1
  26. package/dist/events.d.ts +23 -0
  27. package/dist/events.js +28 -0
  28. package/dist/events.js.map +1 -0
  29. package/dist/formatters.js +87 -42
  30. package/dist/formatters.js.map +1 -1
  31. package/dist/manifest.js +27 -0
  32. package/dist/manifest.js.map +1 -1
  33. package/dist/media-pipeline.js +15 -5
  34. package/dist/media-pipeline.js.map +1 -1
  35. package/dist/runtime-token.d.ts +10 -3
  36. package/dist/runtime-token.js +18 -8
  37. package/dist/runtime-token.js.map +1 -1
  38. package/dist/secret-ref-validation.d.ts +29 -1
  39. package/dist/secret-ref-validation.js +33 -1
  40. package/dist/secret-ref-validation.js.map +1 -1
  41. package/dist/telegram-api.js +9 -1
  42. package/dist/telegram-api.js.map +1 -1
  43. package/dist/ui/index.js +90 -36
  44. package/dist/ui/index.js.map +1 -1
  45. package/dist/watch-registry.d.ts +1 -1
  46. package/dist/watch-registry.js +18 -16
  47. package/dist/watch-registry.js.map +1 -1
  48. package/dist/worker.d.ts +2 -1
  49. package/dist/worker.js +747 -435
  50. package/dist/worker.js.map +1 -1
  51. package/package.json +9 -5
@@ -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>;
@@ -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 definition;
94
+ let parsed;
82
95
  try {
83
- definition = JSON.parse(jsonStr);
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
- if (!definition.name || !definition.steps || !Array.isArray(definition.steps)) {
90
- await sendMessage(ctx, token, chatId, "Command definition must have 'name' and 'steps' fields.", { messageThreadId });
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 ?? "No 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
- await ctx.metrics.write(METRIC_NAMES.commandsExecuted, 1);
158
- const results = [];
159
- for (const step of cmd.steps) {
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
- const approvalId = `cmd_approval_${Date.now()}`;
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: `cmd_approve_${approvalId}` },
245
- { text: "Reject", callback_data: `cmd_reject_${approvalId}` },
276
+ { text: "Approve", callback_data: `${APPROVE_PREFIX}${approvalId}` },
277
+ { text: "Reject", callback_data: `${REJECT_PREFIX}${approvalId}` },
246
278
  ],
247
279
  ],
248
280
  });
249
- // Store approval state - workflow will be continued by callback handler
250
- await ctx.state.set({ scopeKind: "instance", stateKey: `cmd_approval_${approvalId}` }, { status: "pending", createdAt: Date.now() });
251
- return "awaiting_approval";
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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"}