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.
@@ -8,6 +8,15 @@ export function toPendingPermission(input) {
8
8
  announcedAt: Date.now(),
9
9
  };
10
10
  }
11
+ export function toPendingQuestion(input) {
12
+ return {
13
+ requestID: input.id,
14
+ sessionID: input.sessionID,
15
+ questions: input.questions,
16
+ tool: input.tool,
17
+ announcedAt: Date.now(),
18
+ };
19
+ }
11
20
  export function formatPermissionRequestMessage(prefix, permission) {
12
21
  const toolType = typeof permission.metadata?.tool === "string"
13
22
  ? permission.metadata.tool
@@ -57,15 +66,93 @@ function classifyRisk(permission, metadata) {
57
66
  }
58
67
  return "read";
59
68
  }
60
- export async function replyPermission(client, sessionID, requestID, action) {
61
- // Bundled SDK convention: (params, options)
62
- // Try the bundled method name first, fall back to workspace SDK name
63
- const response = action === "once" ? "once" : action === "always" ? "always" : "reject";
64
- const fn = client.postSessionSessionIDPermissionsPermissionID ??
65
- client.postSessionIdPermissionsPermissionId ??
69
+ export function formatQuestionRequestMessage(question, questionIndex = 0) {
70
+ const info = question.questions[questionIndex];
71
+ if (!info) {
72
+ return [
73
+ "OpenCode asked a question:",
74
+ `request_id: ${question.requestID}`,
75
+ `session_id: ${question.sessionID}`,
76
+ ].join("\n");
77
+ }
78
+ const lines = [];
79
+ lines.push("OpenCode asks:");
80
+ if (info.header)
81
+ lines.push(`[${info.header}]`);
82
+ lines.push(info.question);
83
+ lines.push("");
84
+ lines.push("Options:");
85
+ for (let i = 0; i < info.options.length; i++) {
86
+ const opt = info.options[i];
87
+ lines.push(`${i + 1}. ${opt.label}${opt.description ? ` — ${opt.description}` : ""}`);
88
+ }
89
+ if (info.custom) {
90
+ lines.push("");
91
+ lines.push("(Custom answer allowed by the agent — use the buttons or send /qreply with explicit labels.)");
92
+ }
93
+ if (question.questions.length > 1) {
94
+ lines.push("");
95
+ lines.push(`Question ${questionIndex + 1} of ${question.questions.length}.`);
96
+ }
97
+ lines.push("");
98
+ lines.push(`Reply with: /ans ${question.requestID} <option>`);
99
+ lines.push(` e.g., /ans ${question.requestID} ${info.options[0]?.label ?? "option"}`);
100
+ lines.push(`Skip: /skip ${question.requestID}`);
101
+ return lines.join("\n");
102
+ }
103
+ export function getQuestionIndex(question, index) {
104
+ return question.questions[index];
105
+ }
106
+ export function normalizeAnswers(question, answers) {
107
+ return question.questions.map((info, idx) => {
108
+ const provided = answers.find((a) => a.questionIndex === idx);
109
+ if (!provided)
110
+ return [];
111
+ const knownLabels = new Set(info.options.map((o) => o.label));
112
+ return provided.labels.filter((label) => knownLabels.has(label));
113
+ });
114
+ }
115
+ export async function replyPermission(client, sessionID, requestID, action, directory) {
116
+ const reply = action;
117
+ if (client?.permission?.reply) {
118
+ await client.permission.reply({
119
+ requestID,
120
+ directory,
121
+ reply,
122
+ }, { responseStyle: "data", throwOnError: true });
123
+ return;
124
+ }
125
+ const fn = client.postSessionIdPermissionsPermissionId ??
126
+ client.postSessionSessionIDPermissionsPermissionID ??
66
127
  client.postSessionByIdPermissionsByPermissionId;
67
- if (fn) {
68
- await fn.call(client, { sessionID, permissionID: requestID, response }, { responseStyle: "data", throwOnError: true });
128
+ if (!fn) {
129
+ throw new Error("OpenCode SDK client has no permission reply method.");
130
+ }
131
+ const response = action === "once" ? "once" : action === "always" ? "always" : "reject";
132
+ await fn.call(client, {
133
+ path: { id: sessionID, permissionID: requestID },
134
+ body: { response },
135
+ }, { responseStyle: "data", throwOnError: true });
136
+ }
137
+ export async function replyQuestion(client, directory, requestID, answers) {
138
+ if (client?.question?.reply) {
139
+ await client.question.reply({
140
+ requestID,
141
+ directory,
142
+ answers,
143
+ }, { responseStyle: "data", throwOnError: true });
144
+ return;
145
+ }
146
+ throw new Error("OpenCode SDK client has no question reply method.");
147
+ }
148
+ export async function rejectQuestion(client, directory, requestID) {
149
+ if (client?.question?.reject) {
150
+ await client.question.reject({
151
+ requestID,
152
+ directory,
153
+ }, { responseStyle: "data", throwOnError: true });
154
+ return;
69
155
  }
156
+ throw new Error("OpenCode SDK client has no question reject method.");
70
157
  }
71
158
  //# sourceMappingURL=permissions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/opencode/permissions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/opencode/permissions.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { BridgeConfig, BridgeStoreData, ParsedTelegramCommand, RuntimeDeps } from "../types.js";
1
+ import type { BridgeConfig, BridgeStoreData, ParsedCallbackQuery, ParsedTelegramCommand, RuntimeDeps } from "../types.js";
2
+ import { TelegramApi } from "../telegram/api.js";
2
3
  import type { TuiPluginApi } from "../tui-types.js";
3
4
  type SessionCredentials = {
4
5
  botToken: string;
@@ -20,27 +21,43 @@ export declare class BridgeController {
20
21
  private pollTask?;
21
22
  private eventStream?;
22
23
  private eventRestartTimer?;
24
+ private streamedText;
23
25
  private readonly shutdownOnce;
24
26
  private processingQueue;
25
27
  private lastEscAt;
26
28
  private sessionCredentials?;
27
29
  private activePromptCheckInFlight;
28
30
  private completionInFlight;
29
- constructor(api: TuiPluginApi, config: BridgeConfig, storePath: string, deps?: Partial<RuntimeDeps>);
31
+ constructor(api: TuiPluginApi, config: BridgeConfig, storePath: string, deps?: Partial<RuntimeDeps>, telegram?: TelegramApi);
30
32
  private log;
33
+ private safeSendTelegram;
31
34
  init(): Promise<void>;
32
35
  bindCurrent(credentials?: SessionCredentials): Promise<string>;
33
36
  unbind(): Promise<void>;
37
+ private handleDiag;
34
38
  statusLine(): Promise<string>;
35
- handleTelegramCommand(command: ParsedTelegramCommand): Promise<void>;
39
+ handleTelegramCommand(command: ParsedTelegramCommand | ParsedCallbackQuery): Promise<void>;
40
+ private handleTelegramMessage;
36
41
  shutdown(): Promise<void>;
37
42
  handleLocalTuiCommand(command: string): Promise<void>;
38
43
  private processPromptQueue;
39
44
  private onAssistantCompleted;
40
45
  private completeActivePrompt;
46
+ private onMessagePartUpdated;
41
47
  private onUserMessage;
42
48
  private onPermissionAsked;
49
+ private onPermissionReplied;
43
50
  private handlePermissionReply;
51
+ private handleTelegramCallback;
52
+ private handleCallbackQuestion;
53
+ private handleQuestionToggle;
54
+ private handleQuestionConfirm;
55
+ private handleQuestionCommand;
56
+ private handleQuestionReply;
57
+ private handleQuestionReject;
58
+ private onQuestionAsked;
59
+ private onQuestionReplied;
60
+ private onQuestionRejected;
44
61
  private handleModelCommand;
45
62
  private fetchAvailableModels;
46
63
  private buildSummary;
@@ -87,5 +104,23 @@ export declare class BridgeController {
87
104
  private reconcileActivePrompt;
88
105
  private clearTuiPrompt;
89
106
  private waitForPromptCompletion;
107
+ /**
108
+ * Test-only hooks. Exposed as a single object so production code never
109
+ * reaches for these methods and tests can drive the controller
110
+ * deterministically without spinning up the full TUI lifecycle.
111
+ */
112
+ get __test(): {
113
+ onPermissionAsked: BridgeController["onPermissionAsked"];
114
+ onQuestionAsked: BridgeController["onQuestionAsked"];
115
+ onQuestionReplied: BridgeController["onQuestionReplied"];
116
+ onQuestionRejected: BridgeController["onQuestionRejected"];
117
+ handleTelegramCallback: BridgeController["handleTelegramCallback"];
118
+ handleTelegramMessage: BridgeController["handleTelegramMessage"];
119
+ handleQuestionToggle: BridgeController["handleQuestionToggle"];
120
+ startEventStream: (sessionID: string) => Promise<void>;
121
+ setState: (next: BridgeStoreData) => Promise<void>;
122
+ syncState: () => Promise<BridgeStoreData>;
123
+ getStorePath: () => string;
124
+ };
90
125
  }
91
126
  export {};