@introspection-ai/recipes 0.23.0 → 0.24.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.
Files changed (41) hide show
  1. package/README.md +1 -1
  2. package/dist/channels/config.d.ts +10 -0
  3. package/dist/channels/config.d.ts.map +1 -0
  4. package/dist/channels/config.js +13 -0
  5. package/dist/channels/config.js.map +1 -0
  6. package/dist/channels/index.d.ts +4 -2
  7. package/dist/channels/index.d.ts.map +1 -1
  8. package/dist/channels/index.js +2 -1
  9. package/dist/channels/index.js.map +1 -1
  10. package/dist/channels/module.d.ts +11 -6
  11. package/dist/channels/module.d.ts.map +1 -1
  12. package/dist/channels/module.js +22 -10
  13. package/dist/channels/module.js.map +1 -1
  14. package/dist/channels/refs.d.ts +3 -3
  15. package/dist/channels/refs.d.ts.map +1 -1
  16. package/dist/channels/refs.js +11 -8
  17. package/dist/channels/refs.js.map +1 -1
  18. package/dist/channels/tools.d.ts +15 -22
  19. package/dist/channels/tools.d.ts.map +1 -1
  20. package/dist/channels/tools.js +279 -114
  21. package/dist/channels/tools.js.map +1 -1
  22. package/dist/channels/types.d.ts +34 -29
  23. package/dist/channels/types.d.ts.map +1 -1
  24. package/dist/channels/types.js +4 -17
  25. package/dist/channels/types.js.map +1 -1
  26. package/dist/connector-tools.d.ts +2 -0
  27. package/dist/connector-tools.d.ts.map +1 -1
  28. package/dist/connector-tools.js +17 -15
  29. package/dist/connector-tools.js.map +1 -1
  30. package/dist/mcp-chunks/{chunk-JZDXKYQM.js → chunk-PLSS6TQZ.js} +6 -1
  31. package/dist/mcp-daemon.js +1 -1
  32. package/dist/mcp-run-worker.js +1 -1
  33. package/dist/recipe-package.d.ts +4 -2
  34. package/dist/recipe-package.d.ts.map +1 -1
  35. package/dist/recipe-package.js +31 -18
  36. package/dist/recipe-package.js.map +1 -1
  37. package/docs/channels.md +171 -58
  38. package/docs/pi-extension.md +1 -1
  39. package/docs/recipe-format.md +9 -7
  40. package/docs/slack.md +46 -53
  41. package/package.json +5 -5
@@ -1,25 +1,12 @@
1
1
  /**
2
2
  * Provider-neutral channel primitives.
3
3
  *
4
- * A channel-origin task answers exactly one conversation. These types describe
5
- * what an agent may do *inside* that conversation, in vocabulary that is the
6
- * same for Slack, Teams, or anything else, so one prompt serves every channel.
7
- *
8
- * Two properties are structural rather than documented:
9
- *
10
- * - **The destination is bound.** An adapter method takes the conversation from
11
- * the trusted `ChannelTarget` the host resolved; no tool schema built from
12
- * these types carries a channel, thread, workspace, or user argument.
13
- * - **Unsupported is absent.** Tools are registered from `ChannelCapabilities`,
14
- * so a channel that cannot read earlier messages simply has no read tool. A
15
- * tool that always answers "unsupported" costs a model turn and teaches
16
- * nothing.
17
- *
18
- * Operations outside this bound channel set, including workspace search,
19
- * directory lookups, and sends to another conversation, are unsupported. Their
20
- * contract and access model are deferred to a separate proposal.
4
+ * Reply defaults to the host-resolved origin. Adapters may opt into explicit
5
+ * read/send destinations within their existing credential session. This is a
6
+ * tool contract, not a sandbox-wide authorization boundary. Unsupported
7
+ * operations are absent. Search and directory lookup are not part of it.
21
8
  */
22
- /** The conversation a task answers. Resolved by the host, never by the model. */
9
+ /** A conversation within one provider credential session. */
23
10
  export interface ChannelTarget {
24
11
  readonly provider: string;
25
12
  /** Provider conversation id (Slack channel, Teams conversation). */
@@ -39,6 +26,10 @@ export interface ChannelTarget {
39
26
  * already wasted a turn on.
40
27
  */
41
28
  export interface ChannelCapabilities {
29
+ /** Accept explicit read targets and expose send. Absent preserves bound tools. */
30
+ readonly targeting?: boolean;
31
+ /** List conversations available to this provider credential session. */
32
+ readonly list?: boolean;
42
33
  readonly react: boolean;
43
34
  readonly edit: boolean;
44
35
  readonly retract: boolean;
@@ -67,10 +58,7 @@ export type ChannelCursor = string;
67
58
  /**
68
59
  * An opaque handle for one file seen in this conversation.
69
60
  *
70
- * Same reasoning as `MessageRef`, and for the same threat: a provider file id
71
- * is reachable across every conversation the bot belongs to, so accepting one
72
- * from the model would reintroduce the addressing argument the bound tier
73
- * exists to remove — just spelled `file` instead of `channel`.
61
+ * Like message refs, files must have been observed in this credential session.
74
62
  */
75
63
  export type FileRef = string;
76
64
  export interface ChannelAuthor {
@@ -82,22 +70,22 @@ export interface ChannelAttachment {
82
70
  /**
83
71
  * Opaque session handle, not the provider's file id.
84
72
  *
85
- * Minted when the file is seen in this conversation, and the only
86
- * thing `channel_fetch_file` accepts. A raw provider file id would be an
87
- * addressing argument in everything but name: a bot can usually read files
88
- * from every conversation it belongs to, so a model that could pass one
89
- * could reach a file this conversation never carried.
73
+ * Minted when the file is seen in this credential session, and the only
74
+ * thing `channel_fetch_file` accepts. Raw provider file IDs are not accepted.
90
75
  */
91
76
  readonly id: FileRef;
92
77
  readonly name?: string;
93
78
  readonly mime_type?: string;
94
79
  readonly size?: number;
95
80
  }
96
- /** One message as the model sees it: opaque ref, resolved author, no provider ids. */
81
+ /** A message handle, resolved author, and optional provider thread coordinates. */
97
82
  export interface ChannelMessage {
98
83
  readonly ref: MessageRef;
99
84
  readonly author: ChannelAuthor;
100
85
  readonly text: string;
86
+ /** Provider thread root/topic usable with the read command's thread_id. */
87
+ readonly thread_id?: string;
88
+ readonly reply_count?: number;
101
89
  readonly timestamp?: string;
102
90
  readonly permalink?: string;
103
91
  readonly attachments?: readonly ChannelAttachment[];
@@ -105,6 +93,7 @@ export interface ChannelMessage {
105
93
  export interface ChannelPostResult {
106
94
  readonly ref: MessageRef;
107
95
  readonly permalink?: string;
96
+ readonly target?: ChannelTarget;
108
97
  /**
109
98
  * Whether the platform recorded the posted thread for reply bridging. False
110
99
  * with a reason is not a failure of the post — the message is out.
@@ -115,6 +104,14 @@ export interface ChannelPostResult {
115
104
  export interface ChannelReadPage {
116
105
  readonly messages: readonly ChannelMessage[];
117
106
  readonly cursor?: ChannelCursor;
107
+ readonly target?: ChannelTarget;
108
+ /** Direction of subsequent pages; messages within a page are chronological. */
109
+ readonly next_direction?: "older" | "newer";
110
+ }
111
+ export interface ChannelListEntry {
112
+ readonly id: string;
113
+ readonly name: string;
114
+ readonly kind: "public_channel" | "private_channel";
118
115
  }
119
116
  export interface ChannelLocalFile {
120
117
  readonly id: string;
@@ -136,6 +133,8 @@ export interface ChannelMessageIdentity {
136
133
  export interface ChannelFileIdentity {
137
134
  readonly conversation: string;
138
135
  readonly id: string;
136
+ /** Read target where this file was observed; absent/null means the timeline. */
137
+ readonly thread?: string | null;
139
138
  }
140
139
  /**
141
140
  * Resolves opaque handles for one session.
@@ -163,7 +162,7 @@ export interface ChannelAdapterContext {
163
162
  /**
164
163
  * What a provider package implements.
165
164
  *
166
- * Every method takes the bound conversation from `ChannelAdapterContext`. An
165
+ * Every method takes its resolved conversation from `ChannelAdapterContext`. An
167
166
  * optional method must be present exactly when the matching capability is
168
167
  * true — `channelConnectorTools` asserts that, so a capability cannot claim
169
168
  * something the adapter cannot do.
@@ -176,6 +175,12 @@ export interface ChannelAdapter {
176
175
  reply(ctx: ChannelAdapterContext, input: {
177
176
  text: string;
178
177
  }): Promise<ChannelPostResult>;
178
+ /** Explicit send; does not imply cross-channel reply routing support. */
179
+ send?(ctx: ChannelAdapterContext, input: {
180
+ text: string;
181
+ }): Promise<ChannelPostResult>;
182
+ /** List conversations available to this credential session. */
183
+ list?(signal?: AbortSignal): Promise<readonly ChannelListEntry[]>;
179
184
  react?(ctx: ChannelAdapterContext, input: {
180
185
  ref: MessageRef;
181
186
  emoji: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/channels/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,wEAAwE;IACxE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,YAAY,CAAC;IACpD,yEAAyE;IACzE,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,oEAAoE;AACpE,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,QAAQ,CAAC;AAErD,kEAAkE;AAClE,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC;;;;;;;GAOG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC;AAE7B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,sFAAsF;AACtF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,kFAAkF;AAClF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,4EAA4E;AAC5E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,QAAQ,EAAE,sBAAsB,GAAG,UAAU,CAAC;IACtD,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,sBAAsB,CAAC;IACxD,6EAA6E;IAC7E,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,sBAAsB,CAAC;IACzD,MAAM,CAAC,cAAc,EAAE,MAAM,GAAG,aAAa,CAAC;IAC9C,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAAC;IAC7C,0DAA0D;IAC1D,IAAI,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC;IAC7C,sEAAsE;IACtE,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,mBAAmB,CAAC;CAChD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;IAE3C,+EAA+E;IAC/E,YAAY,CAAC,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAClE,KAAK,CACH,GAAG,EAAE,qBAAqB,EAC1B,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAE9B,KAAK,CAAC,CACJ,GAAG,EAAE,qBAAqB,EAC1B,KAAK,EAAE;QACL,GAAG,EAAE,UAAU,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,qBAAqB,CAAC;KAC/B,GACA,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,IAAI,CAAC,CACH,GAAG,EAAE,qBAAqB,EAC1B,KAAK,EAAE;QAAE,GAAG,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GACvC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9B,OAAO,CAAC,CACN,GAAG,EAAE,qBAAqB,EAC1B,KAAK,EAAE;QAAE,GAAG,EAAE,UAAU,CAAA;KAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,IAAI,CAAC,CACH,GAAG,EAAE,qBAAqB,EAC1B,KAAK,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GACzC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5B,MAAM,CAAC,CACL,GAAG,EAAE,qBAAqB,EAC1B,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACxD,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9B,SAAS,CAAC,CACR,GAAG,EAAE,qBAAqB,EAC1B,KAAK,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACzC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7B,YAAY,CAAC,CACX,GAAG,EAAE,qBAAqB,EAC1B,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GACzC,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/channels/types.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,10 @@
1
1
  /**
2
2
  * Provider-neutral channel primitives.
3
3
  *
4
- * A channel-origin task answers exactly one conversation. These types describe
5
- * what an agent may do *inside* that conversation, in vocabulary that is the
6
- * same for Slack, Teams, or anything else, so one prompt serves every channel.
7
- *
8
- * Two properties are structural rather than documented:
9
- *
10
- * - **The destination is bound.** An adapter method takes the conversation from
11
- * the trusted `ChannelTarget` the host resolved; no tool schema built from
12
- * these types carries a channel, thread, workspace, or user argument.
13
- * - **Unsupported is absent.** Tools are registered from `ChannelCapabilities`,
14
- * so a channel that cannot read earlier messages simply has no read tool. A
15
- * tool that always answers "unsupported" costs a model turn and teaches
16
- * nothing.
17
- *
18
- * Operations outside this bound channel set, including workspace search,
19
- * directory lookups, and sends to another conversation, are unsupported. Their
20
- * contract and access model are deferred to a separate proposal.
4
+ * Reply defaults to the host-resolved origin. Adapters may opt into explicit
5
+ * read/send destinations within their existing credential session. This is a
6
+ * tool contract, not a sandbox-wide authorization boundary. Unsupported
7
+ * operations are absent. Search and directory lookup are not part of it.
21
8
  */
22
9
  export {};
23
10
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/channels/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/channels/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -21,6 +21,8 @@ export interface RecipeConnectorToolLoadout {
21
21
  }
22
22
  export interface RecipeConnectorModuleOptions {
23
23
  tools: readonly string[];
24
+ commands?: readonly string[];
25
+ requireReply?: boolean;
24
26
  env?: NodeJS.ProcessEnv;
25
27
  cwd?: string;
26
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"connector-tools.d.ts","sourceRoot":"","sources":["../src/connector-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAGxE,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,+BAA+B;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,6BAA6B,EAAE,CAAC;IACzD,eAAe,CAAC,OAAO,EAAE,4BAA4B,GAAG,gBAAgB,CAAC;CAC1E;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,wBAAwB,EAAE,CAAC;IACvC,OAAO,EAAE,0BAA0B,CAAC;CACrC;AAkFD,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,qBAAqB,EAC/B,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,sBAAsB,CAAC,CAqCjC"}
1
+ {"version":3,"file":"connector-tools.d.ts","sourceRoot":"","sources":["../src/connector-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAGxE,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED,MAAM,WAAW,+BAA+B;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,6BAA6B,EAAE,CAAC;IACzD,eAAe,CAAC,OAAO,EAAE,4BAA4B,GAAG,gBAAgB,CAAC;CAC1E;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,wBAAwB,EAAE,CAAC;IACvC,OAAO,EAAE,0BAA0B,CAAC;CACrC;AAkFD,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,qBAAqB,EAC/B,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,sBAAsB,CAAC,CAuCjC"}
@@ -1,7 +1,7 @@
1
1
  import { loadRecipeModule } from "./recipe-extensions.js";
2
2
  import { recipeChannelPackageName, } from "./recipe-package.js";
3
- function connectorModuleError(connector, detail) {
4
- return new Error(`Recipe channel package ${recipeChannelPackageName(connector.provider)} ${detail}`);
3
+ function connectorModuleError(channel, detail) {
4
+ return new Error(`Recipe channel package ${recipeChannelPackageName(channel.provider)} ${detail}`);
5
5
  }
6
6
  function isConnectorToolDefinition(value) {
7
7
  if (!value || typeof value !== "object" || Array.isArray(value)) {
@@ -14,52 +14,54 @@ function isConnectorToolDefinition(value) {
14
14
  Boolean(tool.name.trim()) &&
15
15
  typeof tool.defaultActive === "boolean");
16
16
  }
17
- function parseRecipeConnectorModule(value, connector) {
17
+ function parseRecipeConnectorModule(value, channel) {
18
18
  if (!value || typeof value !== "object") {
19
- throw connectorModuleError(connector, "does not export a module");
19
+ throw connectorModuleError(channel, "does not export a module");
20
20
  }
21
21
  const module = value;
22
- if (module.provider !== connector.provider ||
22
+ if (module.provider !== channel.provider ||
23
23
  !Array.isArray(module.tools) ||
24
24
  module.tools.length === 0 ||
25
25
  module.tools.some((tool) => !isConnectorToolDefinition(tool)) ||
26
26
  typeof module.createExtension !== "function") {
27
- throw connectorModuleError(connector, "has an invalid module contract");
27
+ throw connectorModuleError(channel, "has an invalid module contract");
28
28
  }
29
29
  const tools = module.tools;
30
30
  const ids = tools.map((tool) => tool.id);
31
31
  const names = tools.map((tool) => tool.name);
32
32
  if (new Set(ids).size !== ids.length ||
33
33
  new Set(names).size !== names.length) {
34
- throw connectorModuleError(connector, "has duplicate or conflicting tool names");
34
+ throw connectorModuleError(channel, "has duplicate or conflicting tool names");
35
35
  }
36
36
  return module;
37
37
  }
38
- async function loadRecipeConnectorModule(recipeDir, connector) {
39
- const packageName = recipeChannelPackageName(connector.provider);
38
+ async function loadRecipeConnectorModule(recipeDir, channel) {
39
+ const packageName = recipeChannelPackageName(channel.provider);
40
40
  let imported;
41
41
  try {
42
42
  imported = await loadRecipeModule(recipeDir, packageName);
43
43
  }
44
44
  catch (error) {
45
- throw new Error(`Recipe connector '${connector.provider}' requires ${packageName} in the Recipe dependencies`, { cause: error });
45
+ throw new Error(`Recipe channel '${channel.provider}' requires ${packageName} in the Recipe dependencies`, { cause: error });
46
46
  }
47
47
  const connectorModule = imported &&
48
48
  typeof imported === "object" &&
49
49
  "default" in imported
50
50
  ? imported.default
51
51
  : imported;
52
- return parseRecipeConnectorModule(connectorModule, connector);
52
+ return parseRecipeConnectorModule(connectorModule, channel);
53
53
  }
54
54
  export async function loadRecipeConnectors(manifest, agentTools, options) {
55
- const loaded = await Promise.all((manifest.connectors ?? []).map(async (connector) => {
56
- const module = await loadRecipeConnectorModule(options.recipeDir, connector);
57
- const selected = module.tools.filter((tool) => agentTools.includes(tool.name));
55
+ const loaded = await Promise.all((manifest.channels ?? []).map(async (channel) => {
56
+ const module = await loadRecipeConnectorModule(options.recipeDir, channel);
57
+ const selected = module.tools.filter((tool) => agentTools.includes(tool.name) && channel.commands?.length !== 0);
58
58
  return {
59
59
  extension: {
60
- owner: `<connector:${connector.provider}>`,
60
+ owner: `<channel:${channel.provider}>`,
61
61
  factory: module.createExtension({
62
62
  tools: selected.map((tool) => tool.id),
63
+ ...(channel.commands !== undefined ? { commands: channel.commands } : {}),
64
+ ...(channel.requireReply !== undefined ? { requireReply: channel.requireReply } : {}),
63
65
  env: options.env,
64
66
  cwd: options.cwd,
65
67
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"connector-tools.js","sourceRoot":"","sources":["../src/connector-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connector-tools.js","sourceRoot":"","sources":["../src/connector-tools.ts"],"names":[],"mappings":"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"}
@@ -1222,7 +1222,12 @@ var RESOURCE_KEYS = [
1222
1222
  "skills",
1223
1223
  "prompts"
1224
1224
  ];
1225
- var PI_KEYS = /* @__PURE__ */ new Set([...RESOURCE_KEYS, "connectors", "mcp", "runtime"]);
1225
+ var PI_KEYS = /* @__PURE__ */ new Set([
1226
+ ...RESOURCE_KEYS,
1227
+ "channels",
1228
+ "mcp",
1229
+ "runtime"
1230
+ ]);
1226
1231
 
1227
1232
  // src/mcp-policy.ts
1228
1233
  function mcpSelectionAllowsTool(selection, toolName) {
@@ -12,7 +12,7 @@ import {
12
12
  installMcpCommandIoRouting,
13
13
  mcpDaemonRequestContext,
14
14
  serializeMcpDaemonEnvelope
15
- } from "./mcp-chunks/chunk-JZDXKYQM.js";
15
+ } from "./mcp-chunks/chunk-PLSS6TQZ.js";
16
16
  import "./mcp-chunks/chunk-AF74TOWM.js";
17
17
  import "./mcp-chunks/chunk-NMFI6AUD.js";
18
18
  import "./mcp-chunks/chunk-MOML5C2E.js";
@@ -2,7 +2,7 @@ import { createRequire as __createRequire } from "node:module"; const require =
2
2
  import {
3
3
  executeMcpCommand,
4
4
  installMcpCommandIoRouting
5
- } from "./mcp-chunks/chunk-JZDXKYQM.js";
5
+ } from "./mcp-chunks/chunk-PLSS6TQZ.js";
6
6
  import "./mcp-chunks/chunk-AF74TOWM.js";
7
7
  import "./mcp-chunks/chunk-NMFI6AUD.js";
8
8
  import "./mcp-chunks/chunk-MOML5C2E.js";
@@ -23,8 +23,10 @@ export interface RecipePackageMcpConfig {
23
23
  manifests: string[];
24
24
  servers: RecipePackageMcpServer[];
25
25
  }
26
- export interface RecipePackageConnector {
26
+ export interface RecipePackageChannel {
27
27
  provider: string;
28
+ commands?: string[];
29
+ requireReply?: boolean;
28
30
  }
29
31
  export declare function recipeChannelPackageName(provider: string): string;
30
32
  export interface RecipePythonRuntimeRequirement {
@@ -51,7 +53,7 @@ export interface RecipePackageManifest {
51
53
  resources: RecipePackageResources;
52
54
  /** Whether each resource key was explicitly authored in package.json#pi. */
53
55
  resourceDeclarations?: Record<keyof RecipePackageResources, boolean>;
54
- connectors?: RecipePackageConnector[];
56
+ channels?: RecipePackageChannel[];
55
57
  mcp: RecipePackageMcpConfig;
56
58
  runtime?: RecipeRuntimeRequirements;
57
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"recipe-package.d.ts","sourceRoot":"","sources":["../src/recipe-package.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recipe-package.d.ts","sourceRoot":"","sources":["../src/recipe-package.ts"],"names":[],"mappings":"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"}
@@ -42,7 +42,12 @@ const RESOURCE_KEYS = [
42
42
  "skills",
43
43
  "prompts",
44
44
  ];
45
- const PI_KEYS = new Set([...RESOURCE_KEYS, "connectors", "mcp", "runtime"]);
45
+ const PI_KEYS = new Set([
46
+ ...RESOURCE_KEYS,
47
+ "channels",
48
+ "mcp",
49
+ "runtime",
50
+ ]);
46
51
  const SOURCE_FINDINGS = Symbol("recipeSourceFindings");
47
52
  function stringArray(value) {
48
53
  return Array.isArray(value)
@@ -79,38 +84,46 @@ function sourceShapeFindings(pi, packageName, dependencies) {
79
84
  findings.push(finding(`pi.${key}_duplicate`, `package.json#pi.${key} must not contain duplicate entries`, packageName));
80
85
  }
81
86
  }
82
- findings.push(...connectorSourceShapeFindings(pi.connectors, packageName, dependencies));
87
+ findings.push(...channelSourceShapeFindings(pi.channels, packageName, dependencies));
83
88
  findings.push(...mcpSourceShapeFindings(pi.mcp, packageName));
84
89
  findings.push(...runtimeSourceShapeFindings(pi.runtime, packageName));
85
90
  return findings;
86
91
  }
87
- function connectorSourceShapeFindings(value, packageName, dependencies) {
92
+ function channelSourceShapeFindings(value, packageName, dependencies) {
88
93
  if (value === undefined)
89
94
  return [];
90
- const invalid = (message) => finding("pi.connectors_invalid", message, packageName);
95
+ const invalid = (message) => finding("pi.channels_invalid", message, packageName);
91
96
  if (!Array.isArray(value)) {
92
- return [invalid("package.json#pi.connectors must be an array")];
97
+ return [invalid("package.json#pi.channels must be an array")];
93
98
  }
94
99
  const findings = [];
95
100
  const providers = new Set();
96
101
  for (const [index, raw] of value.entries()) {
97
102
  if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
98
- findings.push(invalid(`package.json#pi.connectors[${index}] must be an object`));
103
+ findings.push(invalid(`package.json#pi.channels[${index}] must be an object`));
99
104
  continue;
100
105
  }
101
106
  const connector = raw;
102
- const unknown = Object.keys(connector).filter((key) => key !== "provider");
107
+ const unknown = Object.keys(connector).filter((key) => !["provider", "commands", "requireReply"].includes(key));
108
+ if (connector.requireReply !== undefined && typeof connector.requireReply !== "boolean") {
109
+ findings.push(invalid(`package.json#pi.channels[${index}].requireReply must be a boolean`));
110
+ }
111
+ if (connector.commands !== undefined && (!Array.isArray(connector.commands) ||
112
+ connector.commands.some((command) => typeof command !== "string" || !command.trim()) ||
113
+ new Set(connector.commands).size !== connector.commands.length)) {
114
+ findings.push(invalid(`package.json#pi.channels[${index}].commands must be an array of unique non-empty strings`));
115
+ }
103
116
  if (unknown.length > 0) {
104
- findings.push(invalid(`package.json#pi.connectors[${index}] contains unknown field(s): ${unknown.join(", ")}`));
117
+ findings.push(invalid(`package.json#pi.channels[${index}] contains unknown field(s): ${unknown.join(", ")}`));
105
118
  }
106
119
  const provider = typeof connector.provider === "string" && connector.provider.trim()
107
120
  ? connector.provider.trim()
108
121
  : undefined;
109
122
  if (!provider) {
110
- findings.push(invalid(`package.json#pi.connectors[${index}].provider must be non-empty`));
123
+ findings.push(invalid(`package.json#pi.channels[${index}].provider must be non-empty`));
111
124
  }
112
125
  else if (providers.has(provider)) {
113
- findings.push(invalid(`package.json#pi.connectors contains duplicate provider '${provider}'`));
126
+ findings.push(invalid(`package.json#pi.channels contains duplicate provider '${provider}'`));
114
127
  }
115
128
  else {
116
129
  providers.add(provider);
@@ -125,7 +138,7 @@ function connectorSourceShapeFindings(value, packageName, dependencies) {
125
138
  const dependencyVersion = declaredDependencies[channelPackage];
126
139
  if (typeof dependencyVersion !== "string" ||
127
140
  !dependencyVersion.trim()) {
128
- findings.push(invalid(`package.json#pi.connectors provider '${provider ?? "unknown"}' requires dependency '${channelPackage}'`));
141
+ findings.push(invalid(`package.json#pi.channels provider '${provider ?? "unknown"}' requires dependency '${channelPackage}'`));
129
142
  }
130
143
  }
131
144
  }
@@ -480,18 +493,18 @@ function parseMcpConfig(value) {
480
493
  }
481
494
  return { manifests, servers };
482
495
  }
483
- function parseConnectors(value) {
496
+ function parseChannels(value) {
484
497
  const seen = new Set();
485
- const connectors = [];
498
+ const channels = [];
486
499
  for (const raw of Array.isArray(value) ? value : []) {
487
- const connector = asRecord(raw);
488
- const provider = stringValue(connector.provider);
500
+ const channel = asRecord(raw);
501
+ const provider = stringValue(channel.provider);
489
502
  if (!provider || seen.has(provider))
490
503
  continue;
491
504
  seen.add(provider);
492
- connectors.push({ provider });
505
+ channels.push({ provider, ...(Array.isArray(channel.commands) ? { commands: channel.commands } : {}), ...(typeof channel.requireReply === "boolean" ? { requireReply: channel.requireReply } : {}) });
493
506
  }
494
- return connectors;
507
+ return channels;
495
508
  }
496
509
  function parseRuntimeRequirements(value) {
497
510
  const runtime = asRecord(value);
@@ -556,7 +569,7 @@ export function readPiPackageManifest(packageDir) {
556
569
  path: packageDir,
557
570
  resources,
558
571
  resourceDeclarations: resourceDeclarations(pi),
559
- connectors: parseConnectors(pi.connectors),
572
+ channels: parseChannels(pi.channels),
560
573
  mcp: parseMcpConfig(pi.mcp),
561
574
  runtime: parseRuntimeRequirements(pi.runtime),
562
575
  };