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 +28 -8
- package/dist/opencode/events.d.ts +43 -1
- package/dist/opencode/events.js +374 -7
- package/dist/opencode/events.js.map +1 -1
- package/dist/opencode/permissions.d.ts +8 -2
- package/dist/opencode/permissions.js +95 -8
- package/dist/opencode/permissions.js.map +1 -1
- package/dist/runtime/controller.d.ts +38 -3
- package/dist/runtime/controller.js +517 -24
- package/dist/runtime/controller.js.map +1 -1
- package/dist/state/store.js +52 -0
- package/dist/state/store.js.map +1 -1
- package/dist/summary/format.js +1 -1
- package/dist/summary/format.js.map +1 -1
- package/dist/telegram/api.d.ts +32 -3
- package/dist/telegram/api.js +49 -6
- package/dist/telegram/api.js.map +1 -1
- package/dist/telegram/callback.d.ts +47 -0
- package/dist/telegram/callback.js +195 -0
- package/dist/telegram/callback.js.map +1 -0
- package/dist/telegram/parser.d.ts +3 -2
- package/dist/telegram/parser.js +129 -0
- package/dist/telegram/parser.js.map +1 -1
- package/dist/telegram/poller.d.ts +4 -2
- package/dist/telegram/poller.js +23 -6
- package/dist/telegram/poller.js.map +1 -1
- package/dist/types.d.ts +84 -1
- package/package.json +3 -1
|
@@ -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
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
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":"
|
|
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 {};
|