@ycodium-ai/plugin-api 0.2.2998 → 0.2.3002

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.
Files changed (49) hide show
  1. package/README.md +9 -4
  2. package/dist/dataPorts.gen.d.ts +153 -47
  3. package/dist/dataPorts.gen.d.ts.map +1 -1
  4. package/dist/dataPorts.gen.js.map +1 -1
  5. package/dist/executor.d.ts +15 -767
  6. package/dist/executor.d.ts.map +1 -1
  7. package/dist/executor.js +5 -129
  8. package/dist/executor.js.map +1 -1
  9. package/dist/executorCard.d.ts +279 -0
  10. package/dist/executorCard.d.ts.map +1 -0
  11. package/dist/executorCard.js +48 -0
  12. package/dist/executorCard.js.map +1 -0
  13. package/dist/executorEvents.d.ts +170 -0
  14. package/dist/executorEvents.d.ts.map +1 -0
  15. package/dist/executorEvents.js +8 -0
  16. package/dist/executorEvents.js.map +1 -0
  17. package/dist/executorSession.d.ts +301 -0
  18. package/dist/executorSession.d.ts.map +1 -0
  19. package/dist/executorSession.js +3 -0
  20. package/dist/executorSession.js.map +1 -0
  21. package/dist/executorSpawn.d.ts +48 -0
  22. package/dist/executorSpawn.d.ts.map +1 -0
  23. package/dist/executorSpawn.js +87 -0
  24. package/dist/executorSpawn.js.map +1 -0
  25. package/dist/index.d.ts +20 -651
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +6 -4
  28. package/dist/index.js.map +1 -1
  29. package/dist/pluginContextCommands.d.ts +152 -0
  30. package/dist/pluginContextCommands.d.ts.map +1 -0
  31. package/dist/pluginContextCommands.js +2 -0
  32. package/dist/pluginContextCommands.js.map +1 -0
  33. package/dist/pluginContextProviders.d.ts +203 -0
  34. package/dist/pluginContextProviders.d.ts.map +1 -0
  35. package/dist/pluginContextProviders.js +2 -0
  36. package/dist/pluginContextProviders.js.map +1 -0
  37. package/dist/pluginContextThreads.d.ts +206 -0
  38. package/dist/pluginContextThreads.d.ts.map +1 -0
  39. package/dist/pluginContextThreads.js +2 -0
  40. package/dist/pluginContextThreads.js.map +1 -0
  41. package/dist/pluginContextWorkspace.d.ts +76 -0
  42. package/dist/pluginContextWorkspace.d.ts.map +1 -0
  43. package/dist/pluginContextWorkspace.js +2 -0
  44. package/dist/pluginContextWorkspace.js.map +1 -0
  45. package/dist/projects.d.ts +15 -0
  46. package/dist/projects.d.ts.map +1 -0
  47. package/dist/projects.js +23 -0
  48. package/dist/projects.js.map +1 -0
  49. package/package.json +1 -1
@@ -0,0 +1,206 @@
1
+ /**
2
+ * 插件 ctx 的会话面:线程活动、附件、消息、轮次意图和线程只读视图。
3
+ * 公开名字从包入口再导出。
4
+ *
5
+ * @module @ycodium-ai/plugin-api/pluginContextThreads
6
+ */
7
+ import type { PluginModelSelection } from "./pluginContextProviders.ts";
8
+ /** 投影出来的一条线程活动。payload 保持 unknown,由插件按 kind 收窄。 */
9
+ export interface PluginActivity {
10
+ readonly activityId: string;
11
+ readonly threadId: string;
12
+ readonly turnId: string | null;
13
+ readonly kind: string;
14
+ readonly tone?: string | undefined;
15
+ readonly summary: string;
16
+ readonly payload: unknown;
17
+ readonly createdAt: string;
18
+ }
19
+ /** thread 里的一条消息。附件、逐条模型选择这类界面用的字段不透出。 */
20
+ /**
21
+ * 一份要落成会话附件的字节。
22
+ *
23
+ * 大小上限沿用宿主对聊天附件的那一份(按 mime 分档,图片与文件不同),超了就 reject
24
+ * —— 插件不该有一条比人从网页上传更宽的路。
25
+ */
26
+ export interface PluginAttachmentInput {
27
+ /** 附件挂在哪条会话下。落盘目录按它分,删会话时一起回收。 */
28
+ readonly threadId: string;
29
+ readonly name: string;
30
+ readonly mimeType: string;
31
+ readonly bytes: Uint8Array;
32
+ }
33
+ /** 落好盘的附件。原样塞进 `thread.turn.start` 的 `message.attachments` 即可。 */
34
+ export interface PluginAttachment {
35
+ /** mime 是 `image/*` 就是 `image`,其余都是 `file`。 */
36
+ readonly type: "image" | "file";
37
+ readonly id: string;
38
+ readonly name: string;
39
+ readonly mimeType: string;
40
+ readonly sizeBytes: number;
41
+ }
42
+ /**
43
+ * 把字节落成会话附件。插件面上唯一的字节写口。
44
+ *
45
+ * 为什么需要它:`ctx.commands.dispatch` 收的是**已经规范化**的命令,附件那一格只认
46
+ * 落好盘的记录(`{id, name, mimeType, sizeBytes}`),不认 data URL —— 网页客户端那条
47
+ * 路由宿主的规范化器代劳,插件得自己先落一次。
48
+ */
49
+ export interface PluginAttachments {
50
+ readonly store: (input: PluginAttachmentInput) => Promise<PluginAttachment>;
51
+ /**
52
+ * 按 id 读回字节。附件不在这台机器上就 reject,不回空字节 —— 「没有」与「是空的」
53
+ * 是两回事。
54
+ *
55
+ * 不需要声明:这些 id 本来就写在 `getThread` / `getThreadMessage` 读得到的消息上,
56
+ * 这条只是把「看得见记录」补成「读得到内容」。
57
+ */
58
+ readonly read: (attachmentId: string) => Promise<Uint8Array>;
59
+ }
60
+ export interface PluginThreadMessage {
61
+ readonly messageId: string;
62
+ readonly role: string;
63
+ readonly text: string;
64
+ readonly turnId: string | null;
65
+ readonly createdAt: string;
66
+ readonly modelSelection?: PluginModelSelection | undefined;
67
+ readonly source?: {
68
+ readonly kind: "native-session";
69
+ readonly provider: "claude" | "codex";
70
+ readonly sessionId: string;
71
+ readonly messageId: string;
72
+ readonly turnId?: string | undefined;
73
+ readonly order: number;
74
+ } | undefined;
75
+ /** 这条消息带的附件;要字节走 `ctx.attachments.read(id)`。 */
76
+ readonly attachments: readonly PluginAttachment[];
77
+ }
78
+ /** thread 当前的 provider 会话状态。没建过会话是 null。 */
79
+ export interface PluginThreadSession {
80
+ /** `idle` / `starting` / `running` / `stopped`…… 宿主的会话状态名。 */
81
+ readonly status: string;
82
+ readonly providerInstanceId: string | null;
83
+ /** 正在跑的 turn;空闲是 null。 */
84
+ readonly activeTurnId: string | null;
85
+ readonly lastError?: string | null | undefined;
86
+ readonly updatedAt?: string | undefined;
87
+ readonly endReason?: "server-restart" | undefined;
88
+ }
89
+ export interface PluginThreadOrigin {
90
+ readonly parentThreadId: string;
91
+ readonly delegationDepth: number;
92
+ readonly requestedBy: "agent" | "continuation";
93
+ readonly notificationPolicy?: "wake" | "activity-only" | undefined;
94
+ }
95
+ export interface PluginThreadForkPoint {
96
+ readonly sourceThreadId: string;
97
+ readonly sourceMessageId: string;
98
+ }
99
+ export interface PluginTurnIntent {
100
+ readonly intentId: string;
101
+ readonly threadId: string;
102
+ readonly sequence: number;
103
+ readonly commandId: string;
104
+ readonly messageId: string;
105
+ readonly revision: number;
106
+ readonly turn: {
107
+ readonly turnId: string | null;
108
+ readonly userMessageId: string;
109
+ readonly state: "pending" | "running" | "interrupted" | "completed" | "error";
110
+ readonly requestedAt: string;
111
+ readonly startedAt: string | null;
112
+ readonly completedAt: string | null;
113
+ readonly waitSpans: readonly {
114
+ readonly kind: "approval" | "userInput";
115
+ readonly requestId: string;
116
+ readonly startedAt: string;
117
+ readonly completedAt: string | null;
118
+ }[];
119
+ } | null;
120
+ readonly status: "queued" | "preparing" | "dispatching" | "running" | "completed" | "interrupted" | "failed" | "reconciling" | "blocked" | "cancelled" | "abandoned";
121
+ readonly deliveryCertainty: "not-dispatched" | "confirmed" | "unknown";
122
+ readonly attempt: {
123
+ readonly attemptId: string;
124
+ readonly workerEpoch: number;
125
+ readonly sourceBindingId: string | null;
126
+ readonly targetBindingId: string | null;
127
+ readonly stage: "preparing" | "dispatching" | "running" | "reconciling";
128
+ readonly deliveryCertainty: "not-dispatched" | "confirmed" | "unknown";
129
+ readonly nativeLocator: {
130
+ readonly sessionId?: string | undefined;
131
+ readonly turnId?: string | undefined;
132
+ readonly generationId?: string | undefined;
133
+ } | null;
134
+ readonly createdAt: string;
135
+ readonly updatedAt: string;
136
+ } | null;
137
+ readonly blockedReason: string | null;
138
+ readonly replacementIntentId: string | null;
139
+ readonly createdAt: string;
140
+ readonly updatedAt: string;
141
+ }
142
+ /** 不加载消息历史;持久状态在同一数据库快照内读取,进程存活另取当前 provider 句柄。 */
143
+ export interface PluginThreadExecution {
144
+ readonly threadId: string;
145
+ readonly projectId: string;
146
+ readonly title: string;
147
+ readonly modelSelection: PluginModelSelection;
148
+ readonly runtimeMode: "approval-required" | "auto-accept-edits" | "auto" | "full-access";
149
+ readonly interactionMode: "default" | "plan";
150
+ readonly branch: string | null;
151
+ readonly worktreePath: string | null;
152
+ readonly origin: PluginThreadOrigin | null;
153
+ readonly forkedFrom: PluginThreadForkPoint | null;
154
+ readonly archivedAt: string | null;
155
+ readonly createdAt: string;
156
+ readonly updatedAt: string;
157
+ readonly session: (PluginThreadSession & {
158
+ readonly lastError: string | null;
159
+ readonly updatedAt: string;
160
+ }) | null;
161
+ readonly latestTurn: {
162
+ readonly turnId: string;
163
+ readonly state: "running" | "interrupted" | "completed" | "error";
164
+ readonly requestedAt: string;
165
+ readonly startedAt: string | null;
166
+ readonly completedAt: string | null;
167
+ readonly userMessageId?: string | undefined;
168
+ readonly assistantMessageId: string | null;
169
+ readonly waitSpans?: readonly {
170
+ readonly kind: "approval" | "userInput";
171
+ readonly requestId: string;
172
+ readonly startedAt: string;
173
+ readonly completedAt: string | null;
174
+ }[] | undefined;
175
+ } | null;
176
+ readonly turnIntents: readonly PluginTurnIntent[];
177
+ readonly queuePaused: boolean;
178
+ readonly providerProcessLive: boolean;
179
+ readonly hasPendingApprovals: boolean;
180
+ readonly hasPendingUserInput: boolean;
181
+ readonly pendingApprovalCount: number;
182
+ readonly pendingUserInputCount: number;
183
+ /** 持久 turn-start-requested 事实总数,含普通客户端入口;与导入用户消息数不同。 */
184
+ readonly turnStartCount: number;
185
+ }
186
+ /**
187
+ * 一条 thread 的只读视图:消息列表加会话状态。
188
+ *
189
+ * 默认不带活动、checkpoint、提案计划;原生历史对齐可显式请求有界活动窗口。
190
+ */
191
+ export interface PluginThread {
192
+ readonly threadId: string;
193
+ readonly projectId: string;
194
+ readonly title: string;
195
+ readonly modelSelection: PluginModelSelection;
196
+ readonly origin?: PluginThreadOrigin | null | undefined;
197
+ readonly forkedFrom?: PluginThreadForkPoint | null | undefined;
198
+ /** 归档过的 thread 有值;活着的是 null。 */
199
+ readonly archivedAt: string | null;
200
+ readonly messages: readonly PluginThreadMessage[];
201
+ /** 仅显式请求时带回当前有界窗口的活动,供原生历史对齐;不含检查点或提案。 */
202
+ readonly activities?: readonly PluginActivity[] | undefined;
203
+ readonly session: PluginThreadSession | null;
204
+ readonly updatedAt: string;
205
+ }
206
+ //# sourceMappingURL=pluginContextThreads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluginContextThreads.d.ts","sourceRoot":"","sources":["../src/pluginContextThreads.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pluginContextThreads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluginContextThreads.js","sourceRoot":"","sources":["../src/pluginContextThreads.ts"],"names":[],"mappings":""}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * 插件 ctx 的工作区面:项目 setup、代理选择和项目只读视图。
3
+ * 公开名字从包入口再导出。
4
+ *
5
+ * @module @ycodium-ai/plugin-api/pluginContextWorkspace
6
+ */
7
+ import type { ProjectsGetOutput } from "./dataPorts.gen.ts";
8
+ export interface PluginWorkspace {
9
+ /** 为本插件创建的独立工作树会话运行项目已配置的 setup 脚本,沿用宿主终端。 */
10
+ readonly setupThread: (threadId: string) => Promise<{
11
+ readonly status: "no-script";
12
+ } | {
13
+ readonly status: "started";
14
+ readonly scriptId: string;
15
+ readonly scriptName: string;
16
+ readonly terminalId: string;
17
+ readonly cwd: string;
18
+ }>;
19
+ }
20
+ /**
21
+ * 这台机器上配着的一个代理。**不含密码**:宿主自己往连接上加 `Proxy-Authorization`,
22
+ * 插件不需要、也拿不到那份凭据。
23
+ */
24
+ export interface PluginProxy {
25
+ readonly id: string;
26
+ readonly displayName?: string | undefined;
27
+ readonly protocol: "http" | "https";
28
+ readonly host: string;
29
+ readonly port: number;
30
+ /** 不经这个代理直连的地址,逗号分隔。本机地址是硬约束,不在这里出现。 */
31
+ readonly bypass?: string | undefined;
32
+ /** 这一个就是机器的全局默认。整张表都没有 true 时,默认即直连。 */
33
+ readonly isDefault: boolean;
34
+ }
35
+ /**
36
+ * 选哪个代理。与设置里每条功能的代理选择同义:
37
+ *
38
+ * - **省略 / `undefined`** —— 跟这台机器的全局默认走。
39
+ * - **`null`** —— 不加 Ycodium 配的代理。注意它只停 Ycodium 这一份:机器环境里的
40
+ * `HTTP_PROXY` / `HTTPS_PROXY` 照旧生效,宿主不去剥它们。
41
+ * - **代理 id** —— 用那一个。指向一个不存在的 id **静默退化成直连**。
42
+ * - **`{ required: id }`** —— 必须用那一个。代理不存在、设置读不出来、连不上
43
+ * 都 **reject**,不改走直连。订阅凭据这种不能从本机打出去的请求用这一档。
44
+ *
45
+ * 三态里悬空 id 仍静默直连,与 `ctx.http` 同一条规则:手改配置文件不该把长连接搞挂。
46
+ * 要确认某个 id 现在还在,先 `list()`。
47
+ */
48
+ export type PluginRequiredProxySelection = {
49
+ readonly required: string;
50
+ };
51
+ export type PluginProxySelection = string | null | PluginRequiredProxySelection;
52
+ /**
53
+ * 按代理出网。列出这台机器配了什么,然后挑一个出网 —— IM 桥那种「每个实例各配
54
+ * 各的代理」的功能靠它,不必给每个实例塞一份自己的 HTTP 客户端。
55
+ */
56
+ export interface PluginProxies {
57
+ /** 这台机器配着的代理,按 id 升序。一个都没配就是空数组,不是错误。 */
58
+ readonly list: () => Promise<readonly PluginProxy[]>;
59
+ /**
60
+ * 按三态选择出网的 fetch。选择在**调用时**解析(跟着当前设置走),拿到的 fetch
61
+ * 之后一直走那个代理 —— 所以设置改了要重新调一次,别把返回值缓存一辈子。
62
+ *
63
+ * `ctx.http` 等价于建插件时调过一次 `fetch()`(省略参数那一档):一样的解析规则、
64
+ * 一样的连接池,只是解析发生在宿主建能力面的时刻。想让改过的代理设置立刻生效而
65
+ * 不重启,就用这条重新要一个。
66
+ */
67
+ readonly fetch: (proxy?: PluginProxySelection | undefined) => Promise<typeof globalThis.fetch>;
68
+ }
69
+ /**
70
+ * 一个 project:`ctx.projects.get` 的结果、`ctx.projects.list` 的一行,形状由公共契约生成。项目号是 `id`;
71
+ * 仓库身份在 `repositoryIdentity`(工作区不是 git 仓库、没有可用 remote、或远端地址认不准时是 null),
72
+ * 其中 `canonicalKey` 是跨机器可比的 `host/owner/repo`,`provider` 认不出托管方时缺席,远端在 `locator` 里
73
+ * (地址已去掉凭据,只供显示与取主机名)。`archivedAt` 缺席或 null 都表示未归档。
74
+ */
75
+ export type PluginProject = ProjectsGetOutput;
76
+ //# sourceMappingURL=pluginContextWorkspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluginContextWorkspace.d.ts","sourceRoot":"","sources":["../src/pluginContextWorkspace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAC/C;QAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;KAAE,GAChC;QACE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;QAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;KACtB,CACJ,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,wCAAwC;IACxC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,4BAA4B,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AACzE,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,IAAI,GAAG,4BAA4B,CAAC;AAEhF;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;IACrD;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,oBAAoB,GAAG,SAAS,KAAK,OAAO,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;CAChG;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pluginContextWorkspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluginContextWorkspace.js","sourceRoot":"","sources":["../src/pluginContextWorkspace.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * 按号取项目的一处公共实现:`ctx.projects.get` 对「没有这个项目」是拒绝,这里还原成 null。
3
+ *
4
+ * @module @ycodium-ai/plugin-api/projects
5
+ */
6
+ import type { PluginDataPorts, ProjectsGetOutput } from "./dataPorts.gen.ts";
7
+ /**
8
+ * 按号取项目:号为空白、项目不存在或已删都是 null;归档的照常给。
9
+ *
10
+ * 约束:宿主对「没有这个项目」的拒绝值带 `_tag: "ProjectNotFoundError"`;对空白号拒的是输入校验,
11
+ * 没有这个标记,所以空白号在调用宿主之前先拦下。别的失败(读模型没装配、存储出错)原样抛出,
12
+ * 不当成「没有」。
13
+ */
14
+ export declare function projectOrNull(projects: Pick<PluginDataPorts["projects"], "get">, projectId: string): Promise<ProjectsGetOutput | null>;
15
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../src/projects.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE7E;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,EAClD,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAQnC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * 按号取项目:号为空白、项目不存在或已删都是 null;归档的照常给。
3
+ *
4
+ * 约束:宿主对「没有这个项目」的拒绝值带 `_tag: "ProjectNotFoundError"`;对空白号拒的是输入校验,
5
+ * 没有这个标记,所以空白号在调用宿主之前先拦下。别的失败(读模型没装配、存储出错)原样抛出,
6
+ * 不当成「没有」。
7
+ */
8
+ export async function projectOrNull(projects, projectId) {
9
+ if (projectId.trim() === "")
10
+ return null;
11
+ try {
12
+ return await projects.get({ projectId });
13
+ }
14
+ catch (error) {
15
+ if (isProjectNotFound(error))
16
+ return null;
17
+ throw error;
18
+ }
19
+ }
20
+ const isProjectNotFound = (error) => typeof error === "object" &&
21
+ error !== null &&
22
+ error._tag === "ProjectNotFoundError";
23
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../src/projects.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAkD,EAClD,SAAiB;IAEjB,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,iBAAiB,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAW,EAAE,CACpD,OAAO,KAAK,KAAK,QAAQ;IACzB,KAAK,KAAK,IAAI;IACb,KAAqC,CAAC,IAAI,KAAK,sBAAsB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ycodium-ai/plugin-api",
3
- "version": "0.2.2998",
3
+ "version": "0.2.3002",
4
4
  "description": "Types and definePlugin for authoring Ycodium plugins. Zero runtime dependencies.",
5
5
  "keywords": [
6
6
  "ycodium"