-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathplugin-api.d.ts
More file actions
108 lines (100 loc) · 3.96 KB
/
Copy pathplugin-api.d.ts
File metadata and controls
108 lines (100 loc) · 3.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
export {};
declare global {
interface Window {
CanvasTTYPlugin: CanvasTTYPluginHost;
}
}
export interface CanvasTTYPluginHost {
ready(): void;
request(method: "host.getContext"): Promise<CanvasTTYPluginContext>;
request(method: "sessions.list"): Promise<CanvasTTYPluginSession[]>;
request(method: "limits.get"): Promise<CanvasTTYPluginLimitsResult>;
request(method: "launcher.open", params: { provider: "terminal" | "codex" | "claude" | "kimi" }): Promise<null>;
request(method: "canvas.open", params: { contributionId: string }): Promise<null>;
request(method: "external.open", params: { url: string }): Promise<null>;
request(method: "window.open", params: { contributionId: string }): Promise<null>;
request(method: "media.pickLibrary"): Promise<CanvasTTYPluginMediaLibrary | null>;
request(method: "media.listLibraries"): Promise<CanvasTTYPluginMediaLibrary[]>;
request(method: "media.scanLibrary", params: { libraryId: string }): Promise<CanvasTTYPluginMediaTrack[]>;
request(method: "media.revokeLibrary", params: { libraryId: string }): Promise<null>;
request(method: "playlists.list", params: { libraryId: string }): Promise<CanvasTTYPluginPlaylistFile[]>;
request(method: "playlists.read", params: { libraryId: string; playlistId: string }): Promise<string>;
request(method: "playlists.write", params: { libraryId: string; name: string; content: string }): Promise<CanvasTTYPluginPlaylistFile>;
request(method: "secrets.get", params: { key: string }): Promise<string | null>;
request(method: "secrets.set", params: { key: string; value: string }): Promise<null>;
request(method: "secrets.delete", params: { key: string }): Promise<null>;
request(method: string, params?: Record<string, unknown>): Promise<unknown>;
storage: {
get(key: string): Promise<unknown>;
set(key: string, value: unknown): Promise<void>;
};
secrets: {
get(key: string): Promise<string | null>;
set(key: string, value: string): Promise<void>;
delete(key: string): Promise<void>;
};
canvas: {
open(contributionId: string): Promise<void>;
};
media: {
pickLibrary(): Promise<CanvasTTYPluginMediaLibrary | null>;
listLibraries(): Promise<CanvasTTYPluginMediaLibrary[]>;
scanLibrary(libraryId: string): Promise<CanvasTTYPluginMediaTrack[]>;
revokeLibrary(libraryId: string): Promise<null>;
};
playlists: {
list(libraryId: string): Promise<CanvasTTYPluginPlaylistFile[]>;
read(libraryId: string, playlistId: string): Promise<string>;
write(libraryId: string, name: string, content: string): Promise<CanvasTTYPluginPlaylistFile>;
};
onContext(listener: (context: CanvasTTYPluginContext) => void): () => void;
onStorageChange(listener: (key: string, value: unknown) => void): () => void;
}
export interface CanvasTTYPluginContext {
apiVersion: 1;
plugin: {
id: string;
name: string;
version: string;
permissions: Array<"storage" | "secrets" | "sessions:read" | "limits:read" | "launcher:open" | "external:open" | "media:library" | "playlists:read" | "playlists:write" | "network">;
modules: string[];
};
contribution: {
id: string;
kind: "home-widget" | "canvas-app" | "window";
title: string;
};
appearance: {
locale: "ru" | "en";
palette: "sage" | "lilac" | "night";
};
}
export interface CanvasTTYPluginSession {
id: string;
provider: "terminal" | "codex" | "claude" | "kimi";
title: string;
status: "idle" | "working" | "needs_approval" | "done" | "failed";
startedAt: number;
exitCode: number | null;
}
export interface CanvasTTYPluginMediaLibrary {
id: string;
name: string;
}
export interface CanvasTTYPluginMediaTrack {
id: string;
name: string;
relativePath: string;
size: number;
mimeType: string;
streamUrl: string;
}
export interface CanvasTTYPluginPlaylistFile {
id: string;
name: string;
relativePath: string;
size: number;
}
export type CanvasTTYPluginLimitsResult =
| { state: "loading"; snapshot: null }
| { state: "ready"; snapshot: unknown };