opencode-plugin-teleprompt 0.2.1 → 0.2.2

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 CHANGED
@@ -8,6 +8,8 @@ TUI-scoped OpenCode plugin that binds a Telegram channel to one active OpenCode
8
8
  - **Direct Slash Commands**: Run administrative commands like `/status`, `/queue`, `/dc` or `/approve <id>` directly in the Telegram channel.
9
9
  - **Backward Compatibility**: Fully supports old `/tp <prompt>` and `/tp:<command>` syntax out of the box.
10
10
  - **Relays Permission Prompts**: Directly relays OpenCode permission requests and accepts direct `/approve`, `/approve-always`, and `/deny` replies.
11
+ - **Inline Keyboards For Approvals**: Permission prompts arrive as Telegram messages with `Approve once` / `Approve always` / `Deny` buttons — no typing required.
12
+ - **Relays OpenCode Questions**: When the agent asks the user a question (via the OpenCode `question` tool), teleprompt posts it to Telegram with inline option buttons (single-choice direct, multi-choice with toggle+confirm). Tap to reply, or fall back to `/qreply`/`/qreject` text commands.
11
13
  - **Lease-based Owner Semantics**: Keeps single-owner bridge semantics across multiple OpenCode consoles.
12
14
  - **Instant Ctrl+C Exit**: Stops event streams and cleans up instantly, ensuring no exit lags when shutting down OpenCode.
13
15
 
@@ -90,10 +92,12 @@ OpenCode installs npm plugins automatically at startup.
90
92
  - `/model smart` (or `/tp:model smart`)
91
93
  - `/model max` (or `/tp:model max`)
92
94
  - `/model <provider>/<model>`
93
- - `/approve <request_id>`
94
- - `/approve-always <request_id>`
95
- - `/deny <request_id>`
96
- - `/status`
95
+ - `/approve <request_id>`
96
+ - `/approve-always <request_id>`
97
+ - `/deny <request_id>`
98
+ - `/qreply <request_id>` (then `<index>:<label1>|<label2>` lines for each question)
99
+ - `/qreject <request_id>`
100
+ - `/status`
97
101
  - `/dc` (or `/tp:dc`)
98
102
 
99
103
  During remote runs, teleprompt posts lifecycle updates (`accepted`, `queued`, `running`, `waiting-permission`, `completed`, `failed`) and result summaries are sent as replies to the originating Telegram message for clear correlation.
@@ -133,10 +137,21 @@ During remote runs, teleprompt posts lifecycle updates (`accepted`, `queued`, `r
133
137
  - `accepted` -> `running` -> `completed`
134
138
  - summary arrives as reply to the same Telegram message
135
139
  5. Trigger a permissioned action prompt and verify:
136
- - plugin posts permission request with `request_id`
137
- - `/approve <request_id>` (or `/deny <request_id>`) is applied immediately
138
- 6. Send `/interrupt` during a long run and confirm graceful stop.
139
- 7. Send `/dc` and confirm disconnect/unlock behavior.
140
+ - plugin posts a permission request message with `Approve once`,
141
+ `Approve always`, and `Deny` inline buttons
142
+ - tapping a button (or typing `/approve <request_id>` / `/deny <request_id>`)
143
+ applies the reply via the OpenCode SDK and removes the buttons
144
+ 6. Trigger an OpenCode question (e.g. "what's the goal?") and verify:
145
+ - plugin posts a `waiting-question` notice and the question with
146
+ inline option buttons
147
+ - single-choice: tapping an option button replies via
148
+ `client.question.reply` and removes the buttons
149
+ - multi-choice: toggling options marks them with ✅ and a `Confirm`
150
+ button finalizes the reply with all selected labels
151
+ - text fallback: `/qreply <request_id>` with one
152
+ `<index>:<label1>|<label2>` line per question
153
+ 7. Send `/interrupt` during a long run and confirm graceful stop.
154
+ 8. Send `/dc` and confirm disconnect/unlock behavior.
140
155
 
141
156
  ## Command Reference
142
157
 
@@ -172,6 +187,11 @@ During remote runs, teleprompt posts lifecycle updates (`accepted`, `queued`, `r
172
187
  - `/approve <request_id>`: Approve a pending permission request once.
173
188
  - `/approve-always <request_id>`: Approve a pending permission request and persist approval behavior when supported.
174
189
  - `/deny <request_id>`: Reject a pending permission request.
190
+ - `/qreply <request_id>`: Answer an OpenCode question. Follow with one line per
191
+ question in the form `<index>:<label1>|<label2>`. Only known option labels
192
+ are accepted; unknown labels are dropped. As a fallback to the inline
193
+ keyboard buttons, you can also use this for single-choice questions.
194
+ - `/qreject <request_id>`: Reject an OpenCode question without answering it.
175
195
  - `/status`: Show bridge status from Telegram.
176
196
  - `/dc`: Disconnect teleprompt from Telegram and unbind the current session.
177
197
 
@@ -1,3 +1,4 @@
1
+ import type { QuestionInfo } from "../types.js";
1
2
  type EventHandlers = {
2
3
  onAssistantCompleted: (sessionID: string, assistantMessageID: string, parentUserMessageID: string) => Promise<void>;
3
4
  onPermissionAsked: (event: {
@@ -7,6 +8,24 @@ type EventHandlers = {
7
8
  patterns: string[];
8
9
  metadata: Record<string, unknown>;
9
10
  }) => Promise<void>;
11
+ onPermissionReplied?: (requestID: string) => Promise<void>;
12
+ onQuestionAsked?: (event: {
13
+ id: string;
14
+ sessionID: string;
15
+ questions: QuestionInfo[];
16
+ tool?: {
17
+ messageID: string;
18
+ callID: string;
19
+ };
20
+ }) => Promise<void>;
21
+ onQuestionReplied?: (event: {
22
+ id: string;
23
+ sessionID: string;
24
+ }) => Promise<void>;
25
+ onQuestionRejected?: (event: {
26
+ id: string;
27
+ sessionID: string;
28
+ }) => Promise<void>;
10
29
  onSessionError: (event: {
11
30
  sessionID?: string;
12
31
  error?: {
@@ -14,19 +33,42 @@ type EventHandlers = {
14
33
  };
15
34
  }) => Promise<void>;
16
35
  onUserMessage: (sessionID: string, userMessageID: string) => Promise<void>;
36
+ onMessagePartUpdated?: (input: {
37
+ sessionID: string;
38
+ messageID: string;
39
+ part: {
40
+ type: string;
41
+ text?: string;
42
+ [key: string]: unknown;
43
+ };
44
+ delta?: string;
45
+ }) => Promise<void>;
17
46
  onStreamError?: (error: unknown) => Promise<void>;
18
47
  };
19
48
  export declare class SessionEventStream {
20
49
  private readonly client;
21
50
  private readonly sessionID;
51
+ private readonly directory;
22
52
  private readonly handlers;
53
+ private readonly debugLog?;
23
54
  private abort;
24
55
  private running?;
25
56
  private stream?;
26
- constructor(client: any, sessionID: string, handlers: EventHandlers);
57
+ private pollTimer?;
58
+ constructor(client: any, sessionID: string, directory: string, handlers: EventHandlers, debugLog?: ((message: string) => void) | undefined);
59
+ /** Exposed for testing */
60
+ __test?: {
61
+ pollQuestionListOnce: () => Promise<void>;
62
+ seenForwardedQuestionCalls: Set<string>;
63
+ };
27
64
  start(): void;
28
65
  stop(): Promise<void>;
66
+ private startQuestionPoller;
67
+ private pollQuestionListOnce;
29
68
  private loop;
30
69
  private handleEvent;
70
+ private readonly seenForwardedQuestionCalls;
71
+ private handleQuestionToolPart;
72
+ private pollQuestionList;
31
73
  }
32
74
  export {};
@@ -1,26 +1,87 @@
1
+ function normalizePatterns(pattern) {
2
+ if (!pattern)
3
+ return [];
4
+ if (Array.isArray(pattern))
5
+ return pattern;
6
+ return [pattern];
7
+ }
8
+ function normalizeQuestions(raw) {
9
+ if (!Array.isArray(raw))
10
+ return [];
11
+ return raw
12
+ .map((entry) => {
13
+ if (!entry || typeof entry !== "object")
14
+ return undefined;
15
+ const item = entry;
16
+ const question = typeof item.question === "string" ? item.question : "";
17
+ const header = typeof item.header === "string" ? item.header : "";
18
+ const rawOptions = Array.isArray(item.options) ? item.options : [];
19
+ const options = rawOptions
20
+ .map((opt) => {
21
+ if (!opt || typeof opt !== "object")
22
+ return undefined;
23
+ const o = opt;
24
+ const label = typeof o.label === "string" ? o.label : "";
25
+ if (!label)
26
+ return undefined;
27
+ const description = typeof o.description === "string" ? o.description : "";
28
+ return { label, description };
29
+ })
30
+ .filter((opt) => Boolean(opt));
31
+ if (!question)
32
+ return undefined;
33
+ const info = {
34
+ question,
35
+ header,
36
+ options,
37
+ };
38
+ if (item.multiple === true)
39
+ info.multiple = true;
40
+ if (item.custom === true)
41
+ info.custom = true;
42
+ return info;
43
+ })
44
+ .filter((item) => Boolean(item));
45
+ }
1
46
  export class SessionEventStream {
2
47
  client;
3
48
  sessionID;
49
+ directory;
4
50
  handlers;
51
+ debugLog;
5
52
  abort = new AbortController();
6
53
  running;
7
54
  stream;
8
- constructor(client, sessionID, handlers) {
55
+ pollTimer;
56
+ constructor(client, sessionID, directory, handlers, debugLog) {
9
57
  this.client = client;
10
58
  this.sessionID = sessionID;
59
+ this.directory = directory;
11
60
  this.handlers = handlers;
61
+ this.debugLog = debugLog;
12
62
  }
63
+ /** Exposed for testing */
64
+ __test;
13
65
  start() {
14
66
  if (this.running)
15
67
  return;
68
+ this.debugLog?.(`start: subscribing to event stream for sessionID=${this.sessionID}`);
69
+ this.__test = {
70
+ pollQuestionListOnce: () => this.pollQuestionListOnce(),
71
+ seenForwardedQuestionCalls: this.seenForwardedQuestionCalls,
72
+ };
73
+ this.startQuestionPoller();
16
74
  this.running = this.loop().catch(async (error) => {
17
75
  if (this.abort.signal.aborted)
18
76
  return;
77
+ this.debugLog?.(`loop error: ${String(error)}`);
19
78
  await this.handlers.onStreamError?.(error);
20
79
  });
21
80
  }
22
81
  async stop() {
23
82
  this.abort.abort();
83
+ clearTimeout(this.pollTimer);
84
+ this.pollTimer = undefined;
24
85
  try {
25
86
  if (this.stream && typeof this.stream.return === "function") {
26
87
  await this.stream.return();
@@ -32,16 +93,153 @@ export class SessionEventStream {
32
93
  await this.running;
33
94
  this.running = undefined;
34
95
  }
96
+ startQuestionPoller() {
97
+ if (this.pollTimer)
98
+ return;
99
+ const poll = () => {
100
+ this.pollTimer = setTimeout(async () => {
101
+ if (this.abort.signal.aborted)
102
+ return;
103
+ try {
104
+ await this.pollQuestionListOnce();
105
+ }
106
+ catch (err) {
107
+ this.debugLog?.(`question poll timer error: ${String(err)}`);
108
+ }
109
+ if (!this.abort.signal.aborted)
110
+ poll();
111
+ }, 2000);
112
+ this.pollTimer.unref?.();
113
+ };
114
+ poll();
115
+ }
116
+ async pollQuestionListOnce() {
117
+ if (!this.client?.question?.list) {
118
+ this.debugLog?.("poll: client.question.list is not available");
119
+ return;
120
+ }
121
+ this.debugLog?.(`poll: checking question.list() [sessionID=${this.sessionID}]`);
122
+ let result;
123
+ try {
124
+ result = await this.client.question.list();
125
+ }
126
+ catch (err) {
127
+ this.debugLog?.(`poll: question.list() THREW: ${String(err)}`);
128
+ return;
129
+ }
130
+ this.debugLog?.(`poll: question.list() returned type=${typeof result} isArray=${Array.isArray(result)}`);
131
+ const raw = result;
132
+ if (raw && typeof raw === "object") {
133
+ const keys = Object.keys(raw);
134
+ this.debugLog?.(`poll: result keys=[${keys.join(",")}]`);
135
+ if (raw.data !== undefined) {
136
+ this.debugLog?.(`poll: result.data type=${typeof raw.data} isArray=${Array.isArray(raw.data)} length=${Array.isArray(raw.data) ? raw.data.length : "N/A"}`);
137
+ }
138
+ }
139
+ const items = Array.isArray(result) ? result : Array.isArray(result?.data) ? result.data : [];
140
+ this.debugLog?.(`poll: extracted ${items.length} items`);
141
+ if (items.length > 0) {
142
+ for (const item of items) {
143
+ this.debugLog?.(`poll: item id=${item.id} sessionID=${item.sessionID} matchSession=${item.sessionID === this.sessionID} alreadySeen=${this.seenForwardedQuestionCalls.has(item.id)}`);
144
+ }
145
+ }
146
+ const match = items.find((q) => q.sessionID === this.sessionID && !this.seenForwardedQuestionCalls.has(q.id));
147
+ if (!match) {
148
+ this.debugLog?.("poll: no matching question found");
149
+ return;
150
+ }
151
+ this.debugLog?.(`poll: match found id=${match.id} questionsRaw=${JSON.stringify(match.questions)}`);
152
+ const questions = normalizeQuestions(match.questions);
153
+ this.debugLog?.(`poll: normalized questions count=${questions.length}`);
154
+ if (questions.length === 0)
155
+ return;
156
+ this.seenForwardedQuestionCalls.add(match.id);
157
+ this.debugLog?.(`forward: question poll id=${match.id} sessionID=${this.sessionID} questions=${questions.length}`);
158
+ if (this.handlers.onQuestionAsked) {
159
+ await this.handlers.onQuestionAsked({
160
+ id: match.id,
161
+ sessionID: this.sessionID,
162
+ questions,
163
+ tool: match.tool,
164
+ });
165
+ }
166
+ }
35
167
  async loop() {
36
- const streamResult = await this.client.event.subscribe({}, { responseStyle: "stream", throwOnError: true, signal: this.abort.signal });
168
+ this.debugLog?.(`subscribeGlobal: directory=${this.directory}`);
169
+ // Prefer client.event.subscribe({directory}) — this delivers directory-scoped
170
+ // events including permission.asked and question.asked.
171
+ // Fall back to client.global.event() if subscribe is not available
172
+ // (e.g., in tests with a fake client).
173
+ let streamResult;
174
+ if (typeof this.client?.event?.subscribe === "function") {
175
+ this.debugLog?.("loop: using client.event.subscribe()");
176
+ streamResult = await this.client.event.subscribe({ directory: this.directory }, {
177
+ responseStyle: "stream",
178
+ throwOnError: true,
179
+ signal: this.abort.signal,
180
+ onSseError: (error) => {
181
+ this.debugLog?.(`SSE error: ${String(error)}`);
182
+ },
183
+ });
184
+ }
185
+ else if (typeof this.client?.global?.event === "function") {
186
+ this.debugLog?.("loop: using client.global.event()");
187
+ streamResult = await this.client.global.event({
188
+ responseStyle: "stream",
189
+ throwOnError: true,
190
+ signal: this.abort.signal,
191
+ onSseError: (error) => {
192
+ this.debugLog?.(`SSE error: ${String(error)}`);
193
+ },
194
+ });
195
+ }
196
+ else {
197
+ this.debugLog?.("loop: no event subscription method available");
198
+ }
37
199
  this.stream = streamResult?.stream;
200
+ if (!this.stream) {
201
+ this.debugLog?.("loop: stream is undefined, skipping for-await");
202
+ return;
203
+ }
38
204
  try {
39
- for await (const event of this.stream) {
205
+ for await (const chunk of this.stream) {
40
206
  if (this.abort.signal.aborted)
41
207
  break;
42
- if (!event || typeof event !== "object")
208
+ if (!chunk || typeof chunk !== "object")
43
209
  continue;
44
- await this.handleEvent(event);
210
+ // global.event() may return chunks in these shapes:
211
+ // { data: [{ directory, payload: { type, properties } }, ...] }
212
+ // [{ directory, payload: { type, properties } }, ...]
213
+ // { directory, payload: { type, properties } }
214
+ // event.subscribe() returns events directly as { type, properties }
215
+ const rawList = Array.isArray(chunk)
216
+ ? chunk
217
+ : Array.isArray(chunk.data)
218
+ ? chunk.data
219
+ : chunk.payload
220
+ ? [chunk]
221
+ : [chunk];
222
+ for (const raw of rawList) {
223
+ if (!raw || typeof raw !== "object")
224
+ continue;
225
+ const event = raw.payload
226
+ ? { type: raw.payload.type, properties: raw.payload.properties, directory: raw.directory }
227
+ : raw;
228
+ if (!event.type)
229
+ continue;
230
+ // Filter by directory for global events (skip irrelevant ones)
231
+ const dir = event.directory;
232
+ if (dir && dir !== this.directory && event.type !== "permission.asked" && event.type !== "question.asked" && event.type !== "question.replied" && event.type !== "question.rejected" && event.type !== "session.error")
233
+ continue;
234
+ this.debugLog?.(`event: type=${event.type} sessionID=${event.properties?.sessionID ?? "?"} id=${event.properties?.id ?? event.properties?.requestID ?? "?"}`);
235
+ try {
236
+ await this.handleEvent(event);
237
+ }
238
+ catch (handlerError) {
239
+ // A misbehaving handler must never kill the entire event stream.
240
+ this.debugLog?.(`handler error for type=${event.type}: ${String(handlerError)}`);
241
+ }
242
+ }
45
243
  }
46
244
  }
47
245
  catch (error) {
@@ -51,11 +249,82 @@ export class SessionEventStream {
51
249
  }
52
250
  }
53
251
  async handleEvent(event) {
54
- if (event.type === "permission.asked") {
252
+ if (this.debugLog) {
253
+ try {
254
+ const props = event?.properties;
255
+ const summary = props
256
+ ? Object.keys(props).slice(0, 6).map((k) => {
257
+ const v = props[k];
258
+ if (v && typeof v === "object")
259
+ return `${k}=<obj:${Object.keys(v).slice(0, 4).join(",")}>`;
260
+ return `${k}=${typeof v === "string" ? v.slice(0, 40) : String(v)}`;
261
+ }).join(" ")
262
+ : "<no-props>";
263
+ this.debugLog(`event: type=${event.type} ${summary}`);
264
+ }
265
+ catch { }
266
+ }
267
+ if (event.type === "permission.asked" || event.type === "permission.updated") {
268
+ const data = event.properties;
269
+ if (data.sessionID !== this.sessionID) {
270
+ this.debugLog?.(`drop: permission.asked for sessionID=${data.sessionID} (bound=${this.sessionID})`);
271
+ return;
272
+ }
273
+ await this.handlers.onPermissionAsked({
274
+ id: data.id,
275
+ sessionID: data.sessionID,
276
+ permission: data.permission || data.type || "unknown",
277
+ patterns: normalizePatterns(data.patterns || data.pattern),
278
+ metadata: data.metadata ?? {},
279
+ });
280
+ return;
281
+ }
282
+ if (event.type === "permission.replied") {
55
283
  const data = event.properties;
56
284
  if (data.sessionID !== this.sessionID)
57
285
  return;
58
- await this.handlers.onPermissionAsked(data);
286
+ const id = data.requestID || data.permissionID;
287
+ if (id) {
288
+ await this.handlers.onPermissionReplied?.(id);
289
+ }
290
+ return;
291
+ }
292
+ if (event.type === "question.asked") {
293
+ const data = event.properties;
294
+ if (data.sessionID !== this.sessionID) {
295
+ this.debugLog?.(`drop: question.asked for sessionID=${data.sessionID} (bound=${this.sessionID})`);
296
+ return;
297
+ }
298
+ const questions = normalizeQuestions(data.questions);
299
+ this.debugLog?.(`forward: question.asked id=${data.id} questions=${questions.length}`);
300
+ if (!this.handlers.onQuestionAsked)
301
+ return;
302
+ await this.handlers.onQuestionAsked({
303
+ id: data.id,
304
+ sessionID: data.sessionID,
305
+ questions,
306
+ tool: data.tool,
307
+ });
308
+ return;
309
+ }
310
+ if (event.type === "question.replied") {
311
+ const data = event.properties;
312
+ if (data.sessionID !== this.sessionID)
313
+ return;
314
+ await this.handlers.onQuestionReplied?.({
315
+ id: data.requestID,
316
+ sessionID: data.sessionID,
317
+ });
318
+ return;
319
+ }
320
+ if (event.type === "question.rejected") {
321
+ const data = event.properties;
322
+ if (data.sessionID !== this.sessionID)
323
+ return;
324
+ await this.handlers.onQuestionRejected?.({
325
+ id: data.requestID,
326
+ sessionID: data.sessionID,
327
+ });
59
328
  return;
60
329
  }
61
330
  if (event.type === "session.error") {
@@ -65,6 +334,35 @@ export class SessionEventStream {
65
334
  await this.handlers.onSessionError(data);
66
335
  return;
67
336
  }
337
+ if (event.type === "message.part.updated") {
338
+ const data = event.properties;
339
+ const part = data.part;
340
+ const partSessionID = part?.sessionID;
341
+ const partMessageID = part?.messageID;
342
+ this.debugLog?.(`msg.part.updated: type=${part?.type} id=${part?.id ?? "?"} msgID=${part?.messageID ?? "?"} sessionID=${partSessionID ?? "?"} keys=${part ? Object.keys(part).slice(0, 10).join(",") : "no-part"} delta=${data.delta?.slice(0, 40) ?? "?"}`);
343
+ if (!partSessionID || partSessionID !== this.sessionID)
344
+ return;
345
+ if (!partMessageID)
346
+ return;
347
+ await this.handlers.onMessagePartUpdated?.({
348
+ sessionID: partSessionID,
349
+ messageID: partMessageID,
350
+ part,
351
+ delta: data.delta,
352
+ });
353
+ // OpenCode TUI surfaces questions as tool calls on the assistant message
354
+ // (part.type === "tool", part.tool === "question", part.state.status
355
+ // === "running"/"pending"). Bridge that into onQuestionAsked so the
356
+ // Telegram inline keyboard fires.
357
+ if (part && part.type === "tool" && part.tool === "question") {
358
+ this.debugLog?.(`msg.part.updated: TOOL CALL detected! part.id=${part.id} callID=${part.callID ?? "?"} state=${JSON.stringify(part.state)}`);
359
+ await this.handleQuestionToolPart(part);
360
+ }
361
+ else if (part && part.type === "tool") {
362
+ this.debugLog?.(`msg.part.updated: non-question tool call: tool=${part.tool}`);
363
+ }
364
+ return;
365
+ }
68
366
  if (event.type !== "message.updated")
69
367
  return;
70
368
  const data = event.properties;
@@ -80,5 +378,74 @@ export class SessionEventStream {
80
378
  return;
81
379
  await this.handlers.onUserMessage(data.sessionID, data.info.id);
82
380
  }
381
+ seenForwardedQuestionCalls = new Set();
382
+ async handleQuestionToolPart(part) {
383
+ const status = part.state?.status;
384
+ if (status === "completed" || status === "error") {
385
+ this.seenForwardedQuestionCalls.delete(part.callID);
386
+ return;
387
+ }
388
+ if (status !== "pending" && status !== "running")
389
+ return;
390
+ // Try to read questions directly from the tool call state.
391
+ const inputQuestions = part.state?.input?.questions;
392
+ const hasDirectQuestions = Array.isArray(inputQuestions) && inputQuestions.length > 0;
393
+ if (hasDirectQuestions) {
394
+ const questions = normalizeQuestions(inputQuestions);
395
+ if (questions.length > 0 && !this.seenForwardedQuestionCalls.has(part.callID)) {
396
+ this.seenForwardedQuestionCalls.add(part.callID);
397
+ this.debugLog?.(`forward: question tool-call id=${part.id} callID=${part.callID} questions=${questions.length} (from state)`);
398
+ if (this.handlers.onQuestionAsked) {
399
+ await this.handlers.onQuestionAsked({
400
+ id: part.callID,
401
+ sessionID: this.sessionID,
402
+ questions,
403
+ tool: { messageID: part.id, callID: part.callID },
404
+ });
405
+ return;
406
+ }
407
+ }
408
+ }
409
+ // Fallback: poll client.question.list() like OpenCode TUI does.
410
+ // The TUI triggers polling when a question tool call arrives in "running"
411
+ // state but no question.asked event was received.
412
+ if (status === "running" && !this.seenForwardedQuestionCalls.has(part.callID)) {
413
+ await this.pollQuestionList(part.callID, part.id);
414
+ }
415
+ }
416
+ async pollQuestionList(callID, partID) {
417
+ const maxAttempts = 120;
418
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
419
+ if (this.abort.signal.aborted)
420
+ return;
421
+ try {
422
+ const result = await this.client.question.list();
423
+ const items = Array.isArray(result) ? result : Array.isArray(result?.data) ? result.data : [];
424
+ const match = items.find((q) => q.sessionID === this.sessionID && q?.tool?.callID === callID);
425
+ if (match) {
426
+ const questions = normalizeQuestions(match.questions);
427
+ if (questions.length > 0 && !this.seenForwardedQuestionCalls.has(callID)) {
428
+ this.seenForwardedQuestionCalls.add(callID);
429
+ this.debugLog?.(`forward: question poll id=${match.id} callID=${callID} questions=${questions.length}`);
430
+ if (this.handlers.onQuestionAsked) {
431
+ await this.handlers.onQuestionAsked({
432
+ id: match.id,
433
+ sessionID: this.sessionID,
434
+ questions,
435
+ tool: match.tool ?? { messageID: partID, callID },
436
+ });
437
+ }
438
+ return;
439
+ }
440
+ }
441
+ }
442
+ catch (err) {
443
+ this.debugLog?.(`question list poll error: ${String(err)}`);
444
+ }
445
+ await new Promise((r) => setTimeout(r, 250));
446
+ }
447
+ this.debugLog?.(`question poll timeout for callID=${callID}`);
448
+ this.seenForwardedQuestionCalls.delete(callID);
449
+ }
83
450
  }
84
451
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/opencode/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/opencode/events.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,10 @@
1
- import type { PendingPermission, PermissionAskInput } from "../types.js";
1
+ import type { PendingPermission, PermissionAskInput, PendingQuestion, PendingQuestionAnswer, QuestionInfo, QuestionAskInput } from "../types.js";
2
2
  export declare function toPendingPermission(input: PermissionAskInput): PendingPermission;
3
+ export declare function toPendingQuestion(input: QuestionAskInput): PendingQuestion;
3
4
  export declare function formatPermissionRequestMessage(prefix: string, permission: PendingPermission): string;
4
- export declare function replyPermission(client: any, sessionID: string, requestID: string, action: "once" | "always" | "reject"): Promise<void>;
5
+ export declare function formatQuestionRequestMessage(question: PendingQuestion, questionIndex?: number): string;
6
+ export declare function getQuestionIndex(question: PendingQuestion, index: number): QuestionInfo | undefined;
7
+ export declare function normalizeAnswers(question: PendingQuestion, answers: PendingQuestionAnswer[]): Array<string[]>;
8
+ export declare function replyPermission(client: any, sessionID: string, requestID: string, action: "once" | "always" | "reject", directory: string): Promise<void>;
9
+ export declare function replyQuestion(client: any, directory: string, requestID: string, answers: Array<string[]>): Promise<void>;
10
+ export declare function rejectQuestion(client: any, directory: string, requestID: string): Promise<void>;