opencode-plugin-teleprompt 0.1.4 → 0.2.0

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/dist/index.js CHANGED
@@ -1,7 +1,5 @@
1
1
  import { tui } from "./tui.js";
2
2
  const id = "opencode-plugin-teleprompt";
3
- // OpenCode 1.4+ requires external plugins to expose server().
4
- // This plugin is TUI-focused, so server hooks are intentionally empty.
5
3
  const server = async () => ({});
6
4
  export default { id, server, tui };
7
5
  export { id, server, tui };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAG/B,MAAM,EAAE,GAAG,4BAA4B,CAAC;AAExC,8DAA8D;AAC9D,uEAAuE;AACvE,MAAM,MAAM,GAAW,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAExC,eAAe,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACnC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAG/B,MAAM,EAAE,GAAG,4BAA4B,CAAC;AAExC,MAAM,MAAM,GAAW,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAExC,eAAe,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACnC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC"}
@@ -1,2 +1,3 @@
1
1
  import type { TuiPluginApi } from "../tui-types.js";
2
2
  export declare function getCurrentSessionID(api: TuiPluginApi): string;
3
+ export declare function getCurrentOrCreateSessionID(api: TuiPluginApi, client: any): Promise<string>;
@@ -9,4 +9,44 @@ export function getCurrentSessionID(api) {
9
9
  }
10
10
  return sessionID;
11
11
  }
12
+ export async function getCurrentOrCreateSessionID(api, client) {
13
+ const route = api.route.current;
14
+ if (route.name === "session") {
15
+ const sessionID = route.params?.sessionID;
16
+ if (sessionID && typeof sessionID === "string") {
17
+ return sessionID;
18
+ }
19
+ }
20
+ // Bundled SDK convention: (params, options)
21
+ const response = await client.session.create({ directory: api.state.path.directory }, { responseStyle: "data", throwOnError: true });
22
+ // Try multiple common paths for session ID
23
+ const sessionID = response?.id ??
24
+ response?.data?.id ??
25
+ response?.session?.id ??
26
+ response?.session?.data?.id;
27
+ if (!sessionID || typeof sessionID !== "string") {
28
+ const responseKeys = response ? Object.keys(response).join(", ") : "null";
29
+ const responseJson = JSON.stringify(response).slice(0, 150);
30
+ throw new Error(`Could not create a new OpenCode session. Response keys: [${responseKeys}]. Body: ${responseJson}`);
31
+ }
32
+ try {
33
+ const route = api.route;
34
+ if (typeof route.navigate === "function") {
35
+ route.navigate("session", { sessionID });
36
+ }
37
+ else if (typeof route.push === "function") {
38
+ route.push({ name: "session", params: { sessionID } });
39
+ }
40
+ else if (typeof route.set === "function") {
41
+ route.set({ name: "session", params: { sessionID } });
42
+ }
43
+ else if (typeof api.navigate === "function") {
44
+ api.navigate("session", { sessionID });
45
+ }
46
+ }
47
+ catch (err) {
48
+ // Ignore routing errors as the session is already created
49
+ }
50
+ return sessionID;
51
+ }
12
52
  //# sourceMappingURL=binding.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/opencode/binding.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAAC,GAAiB;IACnD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;IAChC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC;IAC1C,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/opencode/binding.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,7 @@ export declare class SessionEventStream {
22
22
  private readonly handlers;
23
23
  private abort;
24
24
  private running?;
25
+ private stream?;
25
26
  constructor(client: any, sessionID: string, handlers: EventHandlers);
26
27
  start(): void;
27
28
  stop(): Promise<void>;
@@ -4,6 +4,7 @@ export class SessionEventStream {
4
4
  handlers;
5
5
  abort = new AbortController();
6
6
  running;
7
+ stream;
7
8
  constructor(client, sessionID, handlers) {
8
9
  this.client = client;
9
10
  this.sessionID = sessionID;
@@ -20,13 +21,22 @@ export class SessionEventStream {
20
21
  }
21
22
  async stop() {
22
23
  this.abort.abort();
24
+ try {
25
+ if (this.stream && typeof this.stream.return === "function") {
26
+ await this.stream.return();
27
+ }
28
+ }
29
+ catch {
30
+ // ignore
31
+ }
23
32
  await this.running;
24
33
  this.running = undefined;
25
34
  }
26
35
  async loop() {
27
- const streamResult = await this.client.event.subscribe();
36
+ const streamResult = await this.client.event.subscribe({}, { responseStyle: "stream", throwOnError: true, signal: this.abort.signal });
37
+ this.stream = streamResult?.stream;
28
38
  try {
29
- for await (const event of streamResult.stream) {
39
+ for await (const event of this.stream) {
30
40
  if (this.abort.signal.aborted)
31
41
  break;
32
42
  if (!event || typeof event !== "object")
@@ -34,7 +44,7 @@ export class SessionEventStream {
34
44
  await this.handleEvent(event);
35
45
  }
36
46
  }
37
- catch {
47
+ catch (error) {
38
48
  if (!this.abort.signal.aborted) {
39
49
  throw new Error("Event stream terminated unexpectedly.");
40
50
  }
@@ -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,4 @@
1
1
  import type { PendingPermission, PermissionAskInput } from "../types.js";
2
2
  export declare function toPendingPermission(input: PermissionAskInput): PendingPermission;
3
3
  export declare function formatPermissionRequestMessage(prefix: string, permission: PendingPermission): string;
4
- export declare function replyPermission(client: any, requestID: string, action: "once" | "always" | "reject"): Promise<void>;
4
+ export declare function replyPermission(client: any, sessionID: string, requestID: string, action: "once" | "always" | "reject"): Promise<void>;
@@ -31,9 +31,9 @@ export function formatPermissionRequestMessage(prefix, permission) {
31
31
  patterns,
32
32
  "",
33
33
  "Reply examples:",
34
- `- Approve once: ${prefix} approve ${permission.requestID}`,
35
- `- Approve always: ${prefix} approve-always ${permission.requestID}`,
36
- `- Deny: ${prefix} deny ${permission.requestID}`,
34
+ `- Approve once: /approve ${permission.requestID}`,
35
+ `- Approve always: /approve-always ${permission.requestID}`,
36
+ `- Deny: /deny ${permission.requestID}`,
37
37
  ].join("\n");
38
38
  }
39
39
  function classifyRisk(permission, metadata) {
@@ -57,10 +57,15 @@ function classifyRisk(permission, metadata) {
57
57
  }
58
58
  return "read";
59
59
  }
60
- export async function replyPermission(client, requestID, action) {
61
- await client.permission.reply({
62
- requestID,
63
- reply: action,
64
- });
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 ??
66
+ client.postSessionByIdPermissionsByPermissionId;
67
+ if (fn) {
68
+ await fn.call(client, { sessionID, permissionID: requestID, response }, { responseStyle: "data", throwOnError: true });
69
+ }
65
70
  }
66
71
  //# 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,7 +1,12 @@
1
1
  export declare function createTelegramUserMessageID(updateID: number): string;
2
- export declare function submitPrompt(client: any, sessionID: string, prompt: string, updateID: number, model?: {
2
+ export declare function submitPrompt(client: any, sessionID: string, prompt: string, updateID: number, directory: string, model?: {
3
3
  providerID: string;
4
4
  modelID: string;
5
5
  }): Promise<{
6
6
  userMessageID: string;
7
+ assistantMessageID?: string;
8
+ assistantParts?: ReadonlyArray<{
9
+ type: string;
10
+ [key: string]: unknown;
11
+ }>;
7
12
  }>;
@@ -1,14 +1,46 @@
1
1
  export function createTelegramUserMessageID(updateID) {
2
- return `tg-${updateID}`;
2
+ return `msg_tg_${updateID}`;
3
3
  }
4
- export async function submitPrompt(client, sessionID, prompt, updateID, model) {
4
+ export async function submitPrompt(client, sessionID, prompt, updateID, directory, model) {
5
5
  const userMessageID = createTelegramUserMessageID(updateID);
6
- await client.session.promptAsync({
7
- sessionID,
8
- messageID: userMessageID,
9
- ...(model ? { model } : {}),
10
- parts: [{ type: "text", text: prompt }],
6
+ // 1. If a specific model is selected, update the session model first
7
+ if (model) {
8
+ try {
9
+ await client.session.update({
10
+ id: sessionID,
11
+ directory,
12
+ model,
13
+ }, {
14
+ responseStyle: "data",
15
+ throwOnError: true,
16
+ });
17
+ }
18
+ catch (err) {
19
+ // Ignore model update errors or log them silently
20
+ }
21
+ }
22
+ // 2. Clear the active TUI prompt
23
+ try {
24
+ await client.tui.clearPrompt({ directory }, { responseStyle: "data", throwOnError: true });
25
+ }
26
+ catch (err) {
27
+ // Ignore clear errors
28
+ }
29
+ // 3. Append the prompt text to the TUI prompt buffer
30
+ await client.tui.appendPrompt({
31
+ text: prompt,
32
+ directory,
33
+ }, {
34
+ responseStyle: "data",
35
+ throwOnError: true,
11
36
  });
12
- return { userMessageID };
37
+ // 4. Submit the TUI prompt
38
+ await client.tui.submitPrompt({ directory }, {
39
+ responseStyle: "data",
40
+ throwOnError: true,
41
+ });
42
+ return {
43
+ userMessageID,
44
+ };
13
45
  }
14
46
  //# sourceMappingURL=submit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"submit.js","sourceRoot":"","sources":["../../src/opencode/submit.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,2BAA2B,CAAC,QAAgB;IAC1D,OAAO,MAAM,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAW,EACX,SAAiB,EACjB,MAAc,EACd,QAAgB,EAChB,KAGC;IAED,MAAM,aAAa,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IAC5D,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QAC/B,SAAS;QACT,SAAS,EAAE,aAAa;QACxB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;KACxC,CAAC,CAAC;IACH,OAAO,EAAE,aAAa,EAAE,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"submit.js","sourceRoot":"","sources":["../../src/opencode/submit.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,2BAA2B,CAAC,QAAgB;IAC1D,OAAO,UAAU,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAW,EACX,SAAiB,EACjB,MAAc,EACd,QAAgB,EAChB,SAAiB,EACjB,KAGC;IAMD,MAAM,aAAa,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IAE5D,qEAAqE;IACrE,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CACzB;gBACE,EAAE,EAAE,SAAS;gBACb,SAAS;gBACT,KAAK;aACN,EACD;gBACE,aAAa,EAAE,MAAM;gBACrB,YAAY,EAAE,IAAI;aACnB,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,kDAAkD;QACpD,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,GAAG,CAAC,WAAW,CAC1B,EAAE,SAAS,EAAE,EACb,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,CAC9C,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sBAAsB;IACxB,CAAC;IAED,qDAAqD;IACrD,MAAM,MAAM,CAAC,GAAG,CAAC,YAAY,CAC3B;QACE,IAAI,EAAE,MAAM;QACZ,SAAS;KACV,EACD;QACE,aAAa,EAAE,MAAM;QACrB,YAAY,EAAE,IAAI;KACnB,CACF,CAAC;IAEF,2BAA2B;IAC3B,MAAM,MAAM,CAAC,GAAG,CAAC,YAAY,CAC3B,EAAE,SAAS,EAAE,EACb;QACE,aAAa,EAAE,MAAM;QACrB,YAAY,EAAE,IAAI;KACnB,CACF,CAAC;IAEF,OAAO;QACL,aAAa;KACd,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { BridgeConfig, ParsedTelegramCommand, RuntimeDeps } from "../types.js";
1
+ import type { BridgeConfig, BridgeStoreData, ParsedTelegramCommand, RuntimeDeps } from "../types.js";
2
2
  import type { TuiPluginApi } from "../tui-types.js";
3
3
  type SessionCredentials = {
4
4
  botToken: string;
@@ -7,6 +7,7 @@ type SessionCredentials = {
7
7
  export declare class BridgeController {
8
8
  private readonly api;
9
9
  private readonly config;
10
+ private readonly storePath;
10
11
  private readonly deps;
11
12
  private readonly instanceID;
12
13
  private readonly client;
@@ -23,7 +24,10 @@ export declare class BridgeController {
23
24
  private processingQueue;
24
25
  private lastEscAt;
25
26
  private sessionCredentials?;
27
+ private activePromptCheckInFlight;
28
+ private completionInFlight;
26
29
  constructor(api: TuiPluginApi, config: BridgeConfig, storePath: string, deps?: Partial<RuntimeDeps>);
30
+ private log;
27
31
  init(): Promise<void>;
28
32
  bindCurrent(credentials?: SessionCredentials): Promise<string>;
29
33
  unbind(): Promise<void>;
@@ -33,6 +37,7 @@ export declare class BridgeController {
33
37
  handleLocalTuiCommand(command: string): Promise<void>;
34
38
  private processPromptQueue;
35
39
  private onAssistantCompleted;
40
+ private completeActivePrompt;
36
41
  private onUserMessage;
37
42
  private onPermissionAsked;
38
43
  private handlePermissionReply;
@@ -68,12 +73,19 @@ export declare class BridgeController {
68
73
  private parseCredentialArgs;
69
74
  private parseStartWithCredentials;
70
75
  private parseCredentialCommand;
76
+ private isVersionCommand;
77
+ private versionLine;
71
78
  private resolveCredentials;
72
79
  private getTelegramApi;
73
80
  private requireChannelID;
74
81
  private stopRuntime;
75
82
  private requireState;
76
83
  private persist;
77
- private syncState;
84
+ syncState(): Promise<BridgeStoreData>;
85
+ private resetBoundSessionState;
86
+ private skipTelegramBacklog;
87
+ private reconcileActivePrompt;
88
+ private clearTuiPrompt;
89
+ private waitForPromptCompletion;
78
90
  }
79
91
  export {};