@introspection-ai/recipes 0.23.0 → 0.25.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/README.md +4 -4
- package/dist/channels/config.d.ts +10 -0
- package/dist/channels/config.d.ts.map +1 -0
- package/dist/channels/config.js +13 -0
- package/dist/channels/config.js.map +1 -0
- package/dist/channels/index.d.ts +4 -2
- package/dist/channels/index.d.ts.map +1 -1
- package/dist/channels/index.js +2 -1
- package/dist/channels/index.js.map +1 -1
- package/dist/channels/module.d.ts +11 -6
- package/dist/channels/module.d.ts.map +1 -1
- package/dist/channels/module.js +22 -10
- package/dist/channels/module.js.map +1 -1
- package/dist/channels/refs.d.ts +3 -3
- package/dist/channels/refs.d.ts.map +1 -1
- package/dist/channels/refs.js +11 -8
- package/dist/channels/refs.js.map +1 -1
- package/dist/channels/tools.d.ts +15 -22
- package/dist/channels/tools.d.ts.map +1 -1
- package/dist/channels/tools.js +279 -114
- package/dist/channels/tools.js.map +1 -1
- package/dist/channels/types.d.ts +34 -29
- package/dist/channels/types.d.ts.map +1 -1
- package/dist/channels/types.js +4 -17
- package/dist/channels/types.js.map +1 -1
- package/dist/connector-tools.d.ts +2 -0
- package/dist/connector-tools.d.ts.map +1 -1
- package/dist/connector-tools.js +17 -15
- package/dist/connector-tools.js.map +1 -1
- package/dist/mcp-chunks/{auth-command-4OEOMU2V.js → auth-command-4WFRNU2I.js} +24 -24
- package/dist/mcp-chunks/call-arguments-4DWPBLQP.js +15 -0
- package/dist/mcp-chunks/{call-command-AUEKSBMD.js → call-command-JBIKXOGC.js} +36 -36
- package/dist/mcp-chunks/{chunk-L4CUJJI5.js → chunk-36VIJRYY.js} +4 -4
- package/dist/mcp-chunks/{chunk-PPIXUCYQ.js → chunk-3JGS7LQB.js} +2 -2
- package/dist/mcp-chunks/{chunk-4NDR45CX.js → chunk-3R2WK3NB.js} +28 -9
- package/dist/mcp-chunks/{chunk-YX2NKW6O.js → chunk-3Z7MFS6K.js} +23 -6
- package/dist/mcp-chunks/{chunk-ACTRQW5L.js → chunk-4ZNBWL65.js} +2 -2
- package/dist/mcp-chunks/chunk-53NRFMB3.js +990 -0
- package/dist/mcp-chunks/{chunk-6QH47GNE.js → chunk-6YZW3XAE.js} +68 -6
- package/dist/mcp-chunks/{chunk-X3FOKZ5C.js → chunk-7WOKCV6Q.js} +1 -1
- package/dist/mcp-chunks/{chunk-MOML5C2E.js → chunk-AD3FQ73K.js} +1 -1
- package/dist/mcp-chunks/{chunk-HDUKEFBI.js → chunk-AIKLVBYU.js} +2 -2
- package/dist/mcp-chunks/{chunk-SQTXZR56.js → chunk-ASG4OY3M.js} +21 -604
- package/dist/mcp-chunks/{chunk-V4RYLZM5.js → chunk-B2LNXGAP.js} +1 -1
- package/dist/mcp-chunks/{chunk-XVJAASVZ.js → chunk-BWW4XRUC.js} +16 -16
- package/dist/mcp-chunks/{chunk-MRXSXBZT.js → chunk-C2KNLFZR.js} +2 -2
- package/dist/mcp-chunks/{chunk-KPXFBRTG.js → chunk-CZKDJZER.js} +1 -1
- package/dist/mcp-chunks/{chunk-6CYJ6RN3.js → chunk-DTZHEVKC.js} +1 -1
- package/dist/mcp-chunks/{chunk-JZDXKYQM.js → chunk-ED2WN5BI.js} +9 -4
- package/dist/mcp-chunks/{chunk-OGFFBNIC.js → chunk-ELA77TDC.js} +4 -4
- package/dist/mcp-chunks/{chunk-5WGJPYOR.js → chunk-EMSNQHZZ.js} +1 -1
- package/dist/mcp-chunks/{chunk-AB7MHBEG.js → chunk-EPT4MYOF.js} +11 -11
- package/dist/mcp-chunks/{chunk-HHMWZ2FZ.js → chunk-FAJPJTOC.js} +1 -1
- package/dist/mcp-chunks/{chunk-TGJOZDKG.js → chunk-FS5JIKT6.js} +2 -2
- package/dist/mcp-chunks/{chunk-IPH6U7SE.js → chunk-FX5NYWBH.js} +3 -3
- package/dist/mcp-chunks/{chunk-SCGMRUKI.js → chunk-G6OMDUNG.js} +5 -5
- package/dist/mcp-chunks/{chunk-47N2EELW.js → chunk-GQ6NSIDS.js} +30 -30
- package/dist/mcp-chunks/{chunk-PPOHGQKM.js → chunk-GUXMP7QB.js} +2 -2
- package/dist/mcp-chunks/{chunk-NMFI6AUD.js → chunk-H3JCYHGS.js} +25 -25
- package/dist/mcp-chunks/{chunk-3VLPWGJL.js → chunk-HCOKLSOB.js} +4 -4
- package/dist/mcp-chunks/{chunk-J6VOMOKI.js → chunk-HLRCUHNO.js} +1 -1
- package/dist/mcp-chunks/{chunk-LWVFSQYX.js → chunk-HN7WPMCA.js} +7806 -3454
- package/dist/mcp-chunks/chunk-I5GI2A2D.js +92 -0
- package/dist/mcp-chunks/{chunk-7KEDX7SE.js → chunk-IME7DGLJ.js} +2 -2
- package/dist/mcp-chunks/{chunk-E4YYMOT2.js → chunk-IPNSPKQK.js} +33 -21
- package/dist/mcp-chunks/{chunk-ZKFG37TB.js → chunk-IRTJXFWA.js} +2 -2
- package/dist/mcp-chunks/{chunk-KMH3PHLA.js → chunk-ITCCROID.js} +13 -7
- package/dist/mcp-chunks/{chunk-ADINDBOF.js → chunk-ITR7FQM3.js} +2 -2
- package/dist/mcp-chunks/{chunk-JILBFEBD.js → chunk-IYWYVHHD.js} +1 -1
- package/dist/mcp-chunks/{chunk-RO2Y34XX.js → chunk-JG4TRUPF.js} +1 -1
- package/dist/mcp-chunks/{chunk-DEYKPG4K.js → chunk-KW3ANJ36.js} +4 -4
- package/dist/mcp-chunks/{chunk-NWLOPQT7.js → chunk-MOEZ43ZL.js} +1 -1
- package/dist/mcp-chunks/{chunk-AFKE4BTR.js → chunk-NTHUNCXJ.js} +21 -21
- package/dist/mcp-chunks/{chunk-J3J3NQ4X.js → chunk-OD3MSMXY.js} +1 -1
- package/dist/mcp-chunks/{chunk-PRZCYXVO.js → chunk-OP3IW2V6.js} +2 -2
- package/dist/mcp-chunks/{chunk-K56RW4HB.js → chunk-PZ323CXI.js} +1 -1
- package/dist/mcp-chunks/{chunk-US57PK4B.js → chunk-QZUC2T72.js} +59 -4
- package/dist/mcp-chunks/{chunk-Z7O6NF7X.js → chunk-RD7NHCRK.js} +19 -19
- package/dist/mcp-chunks/{chunk-756YH7S4.js → chunk-RSTKSBVF.js} +2 -2
- package/dist/mcp-chunks/{chunk-6DL2C6V5.js → chunk-SCOMDV54.js} +1 -1
- package/dist/mcp-chunks/{chunk-SAK5KCLR.js → chunk-SNKXMWDB.js} +1 -1
- package/dist/mcp-chunks/{chunk-LC2CCTQN.js → chunk-TF2YTYE4.js} +1 -1
- package/dist/mcp-chunks/chunk-TPHPAEDH.js +3769 -0
- package/dist/mcp-chunks/{chunk-AF74TOWM.js → chunk-V5AYEKSL.js} +5 -5
- package/dist/mcp-chunks/{chunk-HBDCHBJP.js → chunk-WTMJMM3B.js} +12 -1
- package/dist/mcp-chunks/{chunk-ZZSD2JT7.js → chunk-WYLHHXI6.js} +1 -1
- package/dist/mcp-chunks/{chunk-MFFE5QSH.js → chunk-Y3EDWN2P.js} +1 -1
- package/dist/mcp-chunks/{chunk-ZRZ7C6L3.js → chunk-YIRGLKDA.js} +8 -8
- package/dist/mcp-chunks/{chunk-RE4EVQNC.js → chunk-ZOAQDFAO.js} +62 -7
- package/dist/mcp-chunks/{cli-B7WQQUME.js → cli-XU26MUCN.js} +67 -67
- package/dist/mcp-chunks/client-OT34CKRH.js +21 -0
- package/dist/mcp-chunks/{config-command-FF3JPMOP.js → config-command-UQMMIK2U.js} +37 -30
- package/dist/mcp-chunks/daemon-command-YCIOZGPZ.js +35 -0
- package/dist/mcp-chunks/{dist-V4UB7RTR.js → dist-DM2RXZMU.js} +47 -44
- package/dist/mcp-chunks/{emit-ts-command-4X56IZ32.js → emit-ts-command-KAOL6DAN.js} +16 -16
- package/dist/mcp-chunks/{generate-cli-runner-MIPF73SJ.js → generate-cli-runner-AK6XNRTK.js} +70 -50
- package/dist/mcp-chunks/{inspect-cli-command-GX54ZXKR.js → inspect-cli-command-6FVJO7H2.js} +10 -10
- package/dist/mcp-chunks/{launch-E2LWGPZS.js → launch-EIT73HX4.js} +1 -1
- package/dist/mcp-chunks/{lifecycle-TONHXXXJ.js → lifecycle-QH4TUI3K.js} +1 -1
- package/dist/mcp-chunks/{list-command-YUGRZO4G.js → list-command-UOB2XZK7.js} +30 -30
- package/dist/mcp-chunks/{output-utils-AZY6N2VQ.js → output-utils-6YXH23T7.js} +3 -3
- package/dist/mcp-chunks/{prompt-CH6TK0bC-NSBYYJZH.js → prompt-CH6TK0bC-ZB6RFAXR.js} +1 -1
- package/dist/mcp-chunks/{record-command-25DLELA2.js → record-command-FO5TTERC.js} +5 -5
- package/dist/mcp-chunks/{replay-command-6SLDG6PC.js → replay-command-SCBPCGQ7.js} +6 -6
- package/dist/mcp-chunks/{resource-command-YVOB4JCU.js → resource-command-S2J7XEMV.js} +10 -10
- package/dist/mcp-chunks/{result-utils-ZXB5DM36.js → result-utils-OME6HGS6.js} +4 -4
- package/dist/mcp-chunks/runtime-QIPMLIJI.js +39 -0
- package/dist/mcp-chunks/runtime-wrapper-X4YFKMJI.js +16 -0
- package/dist/mcp-chunks/{serve-command-QYGM2AMB.js → serve-command-DDBZZSG6.js} +28 -28
- package/dist/mcp-chunks/{timeouts-P3TBB3AX.js → timeouts-HNGNKDQN.js} +3 -3
- package/dist/mcp-chunks/{vault-command-VDMPATIX.js → vault-command-TJZYS3YI.js} +8 -7
- package/dist/mcp-chunks/{webapi-BLTNWSB2.js → webapi-4GWO2UBA.js} +887 -703
- package/dist/mcp-daemon.js +31 -31
- package/dist/mcp-run-worker.js +31 -31
- package/dist/recipe-package.d.ts +4 -2
- package/dist/recipe-package.d.ts.map +1 -1
- package/dist/recipe-package.js +31 -18
- package/dist/recipe-package.js.map +1 -1
- package/docs/channels.md +174 -60
- package/docs/pi-extension.md +1 -1
- package/docs/recipe-format.md +14 -9
- package/docs/slack.md +55 -59
- package/package.json +11 -11
- package/dist/mcp-chunks/call-arguments-RPXZJOXL.js +0 -15
- package/dist/mcp-chunks/chunk-7CS27CWE.js +0 -431
- package/dist/mcp-chunks/chunk-LJCZWKGJ.js +0 -372
- package/dist/mcp-chunks/chunk-Q7ESBNJG.js +0 -57
- package/dist/mcp-chunks/client-4ZHIBB67.js +0 -21
- package/dist/mcp-chunks/daemon-command-FKW6YELL.js +0 -35
- package/dist/mcp-chunks/runtime-NOWGTHZ5.js +0 -39
- package/dist/mcp-chunks/runtime-wrapper-ZZPAFQE4.js +0 -14
package/README.md
CHANGED
|
@@ -129,11 +129,11 @@ tests.
|
|
|
129
129
|
- `@introspection-ai/recipes/pi-extension` — Pi extension entrypoint
|
|
130
130
|
- `@introspection-ai/recipes/extensions` — session identity and conditional
|
|
131
131
|
Recipe extension helpers
|
|
132
|
-
- `@introspection-ai/recipes/channels`
|
|
133
|
-
|
|
134
|
-
|
|
132
|
+
- `@introspection-ai/recipes/channels` defines the provider-neutral `channels`
|
|
133
|
+
tool, capability descriptors, and opaque message references. Replies answer
|
|
134
|
+
the task's origin; capable adapters also support explicit read and send targets.
|
|
135
135
|
- `@introspection-ai/recipe-channel-slack` is the optional Slack adapter. A
|
|
136
|
-
Recipe adds it as a dependency when it declares Slack in `pi.
|
|
136
|
+
Recipe adds it as a dependency when it declares Slack in `pi.channels`.
|
|
137
137
|
- `@introspection-ai/recipes/agents` — portable agent-run controller and tool
|
|
138
138
|
contract
|
|
139
139
|
- `@introspection-ai/recipes/interactions` — portable user-input and approval contract
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type ChannelEnvironment = Record<string, string | undefined>;
|
|
2
|
+
/** Provider-neutral destination supplied by the Recipe host. */
|
|
3
|
+
export interface ChannelConfig {
|
|
4
|
+
provider: string;
|
|
5
|
+
channel_ref: string;
|
|
6
|
+
thread_ref: string | null;
|
|
7
|
+
}
|
|
8
|
+
/** Read the channel destination shared by every provider package. */
|
|
9
|
+
export declare function resolveChannelConfig(env?: ChannelEnvironment): ChannelConfig | null;
|
|
10
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/channels/config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAEpE,gEAAgE;AAChE,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,qEAAqE;AACrE,wBAAgB,oBAAoB,CAClC,GAAG,GAAE,kBAAgC,GACpC,aAAa,GAAG,IAAI,CAUtB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Read the channel destination shared by every provider package. */
|
|
2
|
+
export function resolveChannelConfig(env = process.env) {
|
|
3
|
+
const provider = env.INTROSPECTION_TASK_CHANNEL_PROVIDER?.trim();
|
|
4
|
+
const channelRef = env.INTROSPECTION_TASK_CHANNEL_ID?.trim();
|
|
5
|
+
if (!provider || !channelRef)
|
|
6
|
+
return null;
|
|
7
|
+
return {
|
|
8
|
+
provider,
|
|
9
|
+
channel_ref: channelRef,
|
|
10
|
+
thread_ref: env.INTROSPECTION_TASK_THREAD_ID?.trim() || null,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/channels/config.ts"],"names":[],"mappings":"AASA,qEAAqE;AACrE,MAAM,UAAU,oBAAoB,CAClC,GAAG,GAAuB,OAAO,CAAC,GAAG;IAErC,MAAM,QAAQ,GAAG,GAAG,CAAC,mCAAmC,EAAE,IAAI,EAAE,CAAC;IACjE,MAAM,UAAU,GAAG,GAAG,CAAC,6BAA6B,EAAE,IAAI,EAAE,CAAC;IAC7D,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE1C,OAAO;QACL,QAAQ;QACR,WAAW,EAAE,UAAU;QACvB,UAAU,EAAE,GAAG,CAAC,4BAA4B,EAAE,IAAI,EAAE,IAAI,IAAI;KAC7D,CAAC;AACJ,CAAC"}
|
package/dist/channels/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export { ChannelRefStore } from "./refs.js";
|
|
2
|
-
export {
|
|
2
|
+
export { resolveChannelConfig } from "./config.js";
|
|
3
|
+
export type { ChannelConfig, ChannelEnvironment } from "./config.js";
|
|
4
|
+
export { CHANNEL_TOOL_IDS, channelConnectorTools, channelToolIdsFor, registerChannelTools, } from "./tools.js";
|
|
3
5
|
export type { ChannelToolHost, ChannelToolId, RegisterChannelToolsOptions, } from "./tools.js";
|
|
4
6
|
export { createChannelConnectorModule } from "./module.js";
|
|
5
7
|
export type { ChannelConnectorModuleOptions, ChannelConnectorSession, } from "./module.js";
|
|
6
|
-
export type { ChannelAdapter, ChannelAdapterContext, ChannelAttachment, ChannelAuthor, ChannelCapabilities, ChannelCursor, ChannelFileIdentity, ChannelReadPage, ChannelLocalFile, ChannelMessage, ChannelMessageIdentity, ChannelPostResult, ChannelReactionAction, ChannelRefResolver, ChannelTarget, FileRef, MessageRef, } from "./types.js";
|
|
8
|
+
export type { ChannelAdapter, ChannelAdapterContext, ChannelAttachment, ChannelAuthor, ChannelCapabilities, ChannelCursor, ChannelFileIdentity, ChannelListEntry, ChannelReadPage, ChannelLocalFile, ChannelMessage, ChannelMessageIdentity, ChannelPostResult, ChannelReactionAction, ChannelRefResolver, ChannelTarget, FileRef, MessageRef, } from "./types.js";
|
|
7
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/channels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/channels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,eAAe,EACf,aAAa,EACb,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAC3D,YAAY,EACV,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,OAAO,EACP,UAAU,GACX,MAAM,YAAY,CAAC"}
|
package/dist/channels/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { ChannelRefStore } from "./refs.js";
|
|
2
|
-
export {
|
|
2
|
+
export { resolveChannelConfig } from "./config.js";
|
|
3
|
+
export { CHANNEL_TOOL_IDS, channelConnectorTools, channelToolIdsFor, registerChannelTools, } from "./tools.js";
|
|
3
4
|
export { createChannelConnectorModule } from "./module.js";
|
|
4
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/channels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/channels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAMpB,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import type { RecipeConnectorModule } from "../connector-tools.js";
|
|
2
|
+
import type { ChannelConfig } from "./config.js";
|
|
3
|
+
import { type ChannelToolId } from "./tools.js";
|
|
2
4
|
import type { ChannelAdapter, ChannelCapabilities, ChannelTarget } from "./types.js";
|
|
3
5
|
export interface ChannelConnectorSession {
|
|
4
6
|
readonly adapter: ChannelAdapter;
|
|
5
7
|
/** Resolved lazily so a task with no channel origin still starts. */
|
|
6
8
|
readonly target: ChannelTarget | (() => ChannelTarget);
|
|
9
|
+
/** Optional tool-layer target policy, not a sandbox egress boundary. */
|
|
10
|
+
readonly validateTarget?: (target: ChannelTarget, operation: ChannelToolId) => void | Promise<void>;
|
|
7
11
|
}
|
|
8
12
|
export interface ChannelConnectorModuleOptions {
|
|
9
13
|
provider: string;
|
|
@@ -16,12 +20,13 @@ export interface ChannelConnectorModuleOptions {
|
|
|
16
20
|
*/
|
|
17
21
|
capabilities: ChannelCapabilities;
|
|
18
22
|
/**
|
|
19
|
-
* Resolve the
|
|
23
|
+
* Resolve the default conversation and a client for one credential session.
|
|
20
24
|
*
|
|
21
|
-
* Called once per session.
|
|
22
|
-
*
|
|
25
|
+
* Called once per session. Return a lazy target for originless tasks so
|
|
26
|
+
* explicit read/send calls can still use the credential session.
|
|
23
27
|
*/
|
|
24
28
|
createSession(options: {
|
|
29
|
+
config: ChannelConfig | null;
|
|
25
30
|
env: NodeJS.ProcessEnv;
|
|
26
31
|
cwd: string;
|
|
27
32
|
}): ChannelConnectorSession;
|
|
@@ -32,12 +37,12 @@ export interface ChannelConnectorModuleOptions {
|
|
|
32
37
|
* A provider package supplies transport plus a capability descriptor; the
|
|
33
38
|
* neutral tool schemas, the opaque handles, and the capability filtering live
|
|
34
39
|
* here. Two providers therefore cannot drift into differently-shaped versions
|
|
35
|
-
* of the same operation
|
|
36
|
-
*
|
|
40
|
+
* of the same operation. Targeting uses the common capability and schema,
|
|
41
|
+
* not provider-defined arguments.
|
|
37
42
|
*
|
|
38
43
|
* The result satisfies the existing connector contract. The manifest selects
|
|
39
44
|
* the provider package, the agent list selects tools from its catalog, and
|
|
40
|
-
* `
|
|
45
|
+
* `channels` is active immediately; the connector can restrict its commands.
|
|
41
46
|
*/
|
|
42
47
|
export declare function createChannelConnectorModule(options: ChannelConnectorModuleOptions): RecipeConnectorModule;
|
|
43
48
|
//# sourceMappingURL=module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/channels/module.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/channels/module.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,CAAC,MAAM,aAAa,CAAC,CAAC;IACvD,wEAAwE;IACxE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrG;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,YAAY,EAAE,mBAAmB,CAAC;IAClC;;;;;OAKG;IACH,aAAa,CAAC,OAAO,EAAE;QACrB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;QAC7B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;QACvB,GAAG,EAAE,MAAM,CAAC;KACb,GAAG,uBAAuB,CAAC;CAC7B;AAkBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,6BAA6B,GACrC,qBAAqB,CAqDvB"}
|
package/dist/channels/module.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import { resolveChannelConfig } from "./config.js";
|
|
1
2
|
import { ChannelRefStore } from "./refs.js";
|
|
2
3
|
import { CHANNEL_TOOL_IDS, channelConnectorTools, registerChannelTools, } from "./tools.js";
|
|
3
4
|
const channelToolIds = new Set(CHANNEL_TOOL_IDS);
|
|
4
5
|
/** Whether two capability descriptors say the same thing. */
|
|
5
6
|
function sameCapabilities(left, right) {
|
|
7
|
+
left = { ...left, targeting: left.targeting ?? false, list: left.list ?? false };
|
|
8
|
+
right = { ...right, targeting: right.targeting ?? false, list: right.list ?? false };
|
|
6
9
|
const keys = Object.keys(right);
|
|
7
10
|
return (Object.keys(left).length === keys.length &&
|
|
8
11
|
keys.every((key) => left[key] === right[key]));
|
|
@@ -13,29 +16,37 @@ function sameCapabilities(left, right) {
|
|
|
13
16
|
* A provider package supplies transport plus a capability descriptor; the
|
|
14
17
|
* neutral tool schemas, the opaque handles, and the capability filtering live
|
|
15
18
|
* here. Two providers therefore cannot drift into differently-shaped versions
|
|
16
|
-
* of the same operation
|
|
17
|
-
*
|
|
19
|
+
* of the same operation. Targeting uses the common capability and schema,
|
|
20
|
+
* not provider-defined arguments.
|
|
18
21
|
*
|
|
19
22
|
* The result satisfies the existing connector contract. The manifest selects
|
|
20
23
|
* the provider package, the agent list selects tools from its catalog, and
|
|
21
|
-
* `
|
|
24
|
+
* `channels` is active immediately; the connector can restrict its commands.
|
|
22
25
|
*/
|
|
23
26
|
export function createChannelConnectorModule(options) {
|
|
24
27
|
const connectorTools = channelConnectorTools(options.capabilities);
|
|
25
|
-
const deferredToolIds = new Set(connectorTools
|
|
26
|
-
.filter((tool) => !tool.defaultActive)
|
|
27
|
-
.map((tool) => tool.id));
|
|
28
28
|
return {
|
|
29
29
|
provider: options.provider,
|
|
30
30
|
tools: connectorTools,
|
|
31
31
|
createExtension(moduleOptions) {
|
|
32
|
-
const unknown = moduleOptions.tools.filter((tool) =>
|
|
32
|
+
const unknown = moduleOptions.tools.filter((tool) => tool !== "channels");
|
|
33
33
|
if (unknown.length > 0) {
|
|
34
34
|
throw new Error(`Unknown ${options.provider} channel tool(s): ${unknown.join(", ")}`);
|
|
35
35
|
}
|
|
36
|
-
const
|
|
36
|
+
const commands = moduleOptions.commands;
|
|
37
|
+
const requireReply = moduleOptions.requireReply ?? (moduleOptions.tools.includes("channels") && commands?.length !== 0);
|
|
38
|
+
if (requireReply && (!moduleOptions.tools.includes("channels") ||
|
|
39
|
+
(commands !== undefined && !commands.includes("reply")))) {
|
|
40
|
+
throw new Error("requireReply needs the channels tool with the reply command enabled");
|
|
41
|
+
}
|
|
42
|
+
if (commands?.some((command) => !channelToolIds.has(command))) {
|
|
43
|
+
throw new Error("Unknown channels command in connector allowlist");
|
|
44
|
+
}
|
|
37
45
|
return (pi) => {
|
|
46
|
+
if (!moduleOptions.tools.includes("channels"))
|
|
47
|
+
return;
|
|
38
48
|
const session = options.createSession({
|
|
49
|
+
config: resolveChannelConfig(moduleOptions.env ?? process.env),
|
|
39
50
|
env: moduleOptions.env ?? process.env,
|
|
40
51
|
cwd: moduleOptions.cwd ?? process.cwd(),
|
|
41
52
|
});
|
|
@@ -50,9 +61,10 @@ export function createChannelConnectorModule(options) {
|
|
|
50
61
|
}
|
|
51
62
|
registerChannelTools(pi, session.adapter, {
|
|
52
63
|
target: session.target,
|
|
53
|
-
|
|
54
|
-
|
|
64
|
+
commands: commands,
|
|
65
|
+
requireReply,
|
|
55
66
|
refs: new ChannelRefStore(),
|
|
67
|
+
validateTarget: session.validateTarget,
|
|
56
68
|
});
|
|
57
69
|
};
|
|
58
70
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/channels/module.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,GAErB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/channels/module.ts"],"names":[],"mappings":"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"}
|
package/dist/channels/refs.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { ChannelCursor, ChannelFileIdentity, ChannelMessageIdentity, Channe
|
|
|
3
3
|
* Session-scoped opaque handles for messages and pagination cursors.
|
|
4
4
|
*
|
|
5
5
|
* The model only ever sees a handle this store minted, so it cannot name a
|
|
6
|
-
* message it was never shown
|
|
6
|
+
* message it was never shown to edit, retract, or react to.
|
|
7
7
|
* The store is also where authorship lives. `resolveAuthored` is the single
|
|
8
8
|
* check behind `channel_edit` and `channel_retract`, which keeps those tools
|
|
9
9
|
* scoped to the agent's own messages rather than everything the provider
|
|
@@ -20,8 +20,8 @@ export declare class ChannelRefStore implements ChannelRefResolver {
|
|
|
20
20
|
message(identity: ChannelMessageIdentity): MessageRef;
|
|
21
21
|
resolveMessage(ref: MessageRef): ChannelMessageIdentity;
|
|
22
22
|
resolveAuthored(ref: MessageRef): ChannelMessageIdentity;
|
|
23
|
-
cursor(providerCursor: string): ChannelCursor;
|
|
24
|
-
resolveCursor(cursor: ChannelCursor): string;
|
|
23
|
+
cursor(providerCursor: string, scope?: string): ChannelCursor;
|
|
24
|
+
resolveCursor(cursor: ChannelCursor, scope?: string): string;
|
|
25
25
|
file(identity: ChannelFileIdentity): FileRef;
|
|
26
26
|
resolveFile(ref: FileRef): ChannelFileIdentity;
|
|
27
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/channels/refs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,OAAO,EACP,UAAU,EACX,MAAM,YAAY,CAAC;AAUpB;;;;;;;;;;;GAWG;AACH,qBAAa,eAAgB,YAAW,kBAAkB;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiD;IAC1E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/channels/refs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,OAAO,EACP,UAAU,EACX,MAAM,YAAY,CAAC;AAUpB;;;;;;;;;;;GAWG;AACH,qBAAa,eAAgB,YAAW,kBAAkB;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiD;IAC1E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+D;IACvF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2C;IACjE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;IAE7D,OAAO,CAAC,QAAQ,EAAE,sBAAsB,GAAG,UAAU,CAiBpD;IAED,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,sBAAsB,CAQtD;IAED,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,sBAAsB,CAQvD;IAED,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAI5D;IAED,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAW3D;IAED,IAAI,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAQ3C;IAED,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,mBAAmB,CAW7C;CACF"}
|
package/dist/channels/refs.js
CHANGED
|
@@ -9,7 +9,7 @@ function handle(prefix) {
|
|
|
9
9
|
* Session-scoped opaque handles for messages and pagination cursors.
|
|
10
10
|
*
|
|
11
11
|
* The model only ever sees a handle this store minted, so it cannot name a
|
|
12
|
-
* message it was never shown
|
|
12
|
+
* message it was never shown to edit, retract, or react to.
|
|
13
13
|
* The store is also where authorship lives. `resolveAuthored` is the single
|
|
14
14
|
* check behind `channel_edit` and `channel_retract`, which keeps those tools
|
|
15
15
|
* scoped to the agent's own messages rather than everything the provider
|
|
@@ -24,7 +24,7 @@ export class ChannelRefStore {
|
|
|
24
24
|
files = new Map();
|
|
25
25
|
byFileIdentity = new Map();
|
|
26
26
|
message(identity) {
|
|
27
|
-
const key =
|
|
27
|
+
const key = JSON.stringify([identity.conversation, identity.thread ?? null, identity.id]);
|
|
28
28
|
const existing = this.byIdentity.get(key);
|
|
29
29
|
if (existing) {
|
|
30
30
|
const previous = this.messages.get(existing);
|
|
@@ -55,20 +55,23 @@ export class ChannelRefStore {
|
|
|
55
55
|
}
|
|
56
56
|
return identity;
|
|
57
57
|
}
|
|
58
|
-
cursor(providerCursor) {
|
|
58
|
+
cursor(providerCursor, scope) {
|
|
59
59
|
const cursor = handle(CURSOR_PREFIX);
|
|
60
|
-
this.cursors.set(cursor, providerCursor);
|
|
60
|
+
this.cursors.set(cursor, { value: providerCursor, scope });
|
|
61
61
|
return cursor;
|
|
62
62
|
}
|
|
63
|
-
resolveCursor(cursor) {
|
|
63
|
+
resolveCursor(cursor, scope) {
|
|
64
64
|
const providerCursor = this.cursors.get(cursor);
|
|
65
65
|
if (!providerCursor) {
|
|
66
|
-
throw new Error(`Unknown cursor '${cursor}'. Use a cursor returned by a previous
|
|
66
|
+
throw new Error(`Unknown cursor '${cursor}'. Use a cursor returned by a previous channels read call.`);
|
|
67
67
|
}
|
|
68
|
-
|
|
68
|
+
if (providerCursor.scope !== scope) {
|
|
69
|
+
throw new Error("Cursor belongs to another channel or thread. Repeat the original read target.");
|
|
70
|
+
}
|
|
71
|
+
return providerCursor.value;
|
|
69
72
|
}
|
|
70
73
|
file(identity) {
|
|
71
|
-
const key =
|
|
74
|
+
const key = JSON.stringify([identity.conversation, identity.thread ?? null, identity.id]);
|
|
72
75
|
const existing = this.byFileIdentity.get(key);
|
|
73
76
|
if (existing)
|
|
74
77
|
return existing;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refs.js","sourceRoot":"","sources":["../../src/channels/refs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAWzC,MAAM,cAAc,GAAG,MAAM,CAAC;AAC9B,MAAM,aAAa,GAAG,MAAM,CAAC;AAC7B,MAAM,WAAW,GAAG,OAAO,CAAC;AAE5B,SAAS,MAAM,CAAC,MAAc;IAC5B,OAAO,GAAG,MAAM,GAAG,UAAU,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,eAAe;IACT,QAAQ,GAAG,IAAI,GAAG,EAAsC,CAAC;IACzD,UAAU,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC3C,OAAO,GAAG,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"refs.js","sourceRoot":"","sources":["../../src/channels/refs.ts"],"names":[],"mappings":"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"}
|
package/dist/channels/tools.d.ts
CHANGED
|
@@ -4,16 +4,14 @@ import type { ChannelAdapter, ChannelCapabilities, ChannelTarget } from "./types
|
|
|
4
4
|
/**
|
|
5
5
|
* The neutral operation vocabulary.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
* complete `channel_<id>` name in its YAML tool list.
|
|
7
|
+
* Commands of the registered `channels` tool.
|
|
9
8
|
*/
|
|
10
|
-
export declare const CHANNEL_TOOL_IDS: readonly ["reply", "read", "react", "edit", "retract", "attach", "fetch_file", "post_document"];
|
|
9
|
+
export declare const CHANNEL_TOOL_IDS: readonly ["reply", "send", "list", "read", "react", "edit", "retract", "attach", "fetch_file", "post_document"];
|
|
11
10
|
export type ChannelToolId = (typeof CHANNEL_TOOL_IDS)[number];
|
|
12
|
-
export declare function channelToolName(id: ChannelToolId): string;
|
|
13
11
|
/** Which operations an adapter's capabilities actually support. */
|
|
14
12
|
export declare function channelToolIdsFor(capabilities: ChannelCapabilities): ChannelToolId[];
|
|
15
|
-
export declare function channelConnectorTools(
|
|
16
|
-
id:
|
|
13
|
+
export declare function channelConnectorTools(_capabilities: ChannelCapabilities): {
|
|
14
|
+
id: string;
|
|
17
15
|
name: string;
|
|
18
16
|
defaultActive: boolean;
|
|
19
17
|
}[];
|
|
@@ -27,30 +25,25 @@ export interface RegisterChannelToolsOptions {
|
|
|
27
25
|
* run from a non-channel trigger such as an automation.
|
|
28
26
|
*/
|
|
29
27
|
target: ChannelTarget | (() => ChannelTarget);
|
|
30
|
-
/** Restrict
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
|
|
28
|
+
/** Restrict commands; defaults to everything supported. An empty list exposes no tool. */
|
|
29
|
+
commands?: readonly ChannelToolId[];
|
|
30
|
+
/** Require a successful final reply on inbound turns. Defaults to true for enabled tools. */
|
|
31
|
+
requireReply?: boolean;
|
|
34
32
|
refs?: ChannelRefStore;
|
|
33
|
+
/** Optional host tool-layer policy. This does not constrain shell/API egress. */
|
|
34
|
+
validateTarget?: (target: ChannelTarget, operation: ChannelToolId) => void | Promise<void>;
|
|
35
35
|
}
|
|
36
36
|
/** Host surface used here. Opaque so Pi's TypeBox copy stays behind this seam. */
|
|
37
37
|
export interface ChannelToolHost {
|
|
38
38
|
registerTool(...args: never[]): unknown;
|
|
39
39
|
on: ExtensionAPI["on"];
|
|
40
|
+
sendMessage?: ExtensionAPI["sendMessage"];
|
|
40
41
|
}
|
|
41
42
|
/**
|
|
42
|
-
* Register
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* 1. **No schema below carries a conversation, thread, workspace, or user
|
|
47
|
-
* argument.** The conversation comes from `options.target`, closed over
|
|
48
|
-
* here. A model that cannot name a destination cannot reach one, so an
|
|
49
|
-
* agent bound to a thread stays bound to that thread even if the underlying
|
|
50
|
-
* credential could reach the whole workspace.
|
|
51
|
-
* 2. **Unsupported operations are absent**, not stubs that answer "this
|
|
52
|
-
* channel cannot do that" — such a stub costs a turn every time and teaches
|
|
53
|
-
* the model nothing durable.
|
|
43
|
+
* Register tools for ONE provider credential session. Never share the adapter
|
|
44
|
+
* or reference store between installations. Explicit targeting is opt-in;
|
|
45
|
+
* reply/attach/documents retain their origin default. References identify
|
|
46
|
+
* previously observed resources; they are not durable authorization grants.
|
|
54
47
|
*/
|
|
55
48
|
export declare function registerChannelTools(pi: ChannelToolHost, adapter: ChannelAdapter, options: RegisterChannelToolsOptions): void;
|
|
56
49
|
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/channels/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/channels/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAIpE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EACV,cAAc,EAEd,mBAAmB,EAEnB,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,YAC3B,OAAO,EACP,MAAM,EACN,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,eAAe,CACP,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,mEAAmE;AACnE,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,mBAAmB,GAChC,aAAa,EAAE,CAYjB;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,mBAAmB;;;;IAEvE;AAsCD,MAAM,WAAW,2BAA2B;IAC1C;;;;;;;OAOG;IACH,MAAM,EAAE,aAAa,GAAG,CAAC,MAAM,aAAa,CAAC,CAAC;IAC9C,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACpC,6FAA6F;IAC7F,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,iFAAiF;IACjF,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5F;AAED,kFAAkF;AAClF,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACxC,EAAE,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IACvB,WAAW,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;CAC3C;AAsCD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,eAAe,EACnB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,2BAA2B,GACnC,IAAI,CA0cN"}
|