@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.
- package/README.md +1 -1
- 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/{chunk-JZDXKYQM.js → chunk-PLSS6TQZ.js} +6 -1
- package/dist/mcp-daemon.js +1 -1
- package/dist/mcp-run-worker.js +1 -1
- 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 +171 -58
- package/docs/pi-extension.md +1 -1
- package/docs/recipe-format.md +9 -7
- package/docs/slack.md +46 -53
- package/package.json +5 -5
package/dist/channels/types.d.ts
CHANGED
|
@@ -1,25 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Provider-neutral channel primitives.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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
|
+
/** 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
|
-
*
|
|
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
|
|
86
|
-
* thing `channel_fetch_file` accepts.
|
|
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
|
-
/**
|
|
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
|
|
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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/channels/types.ts"],"names":[],"mappings":"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"}
|
package/dist/channels/types.js
CHANGED
|
@@ -1,23 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Provider-neutral channel primitives.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/channels/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -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,
|
|
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"}
|
package/dist/connector-tools.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { loadRecipeModule } from "./recipe-extensions.js";
|
|
2
2
|
import { recipeChannelPackageName, } from "./recipe-package.js";
|
|
3
|
-
function connectorModuleError(
|
|
4
|
-
return new Error(`Recipe channel package ${recipeChannelPackageName(
|
|
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,
|
|
17
|
+
function parseRecipeConnectorModule(value, channel) {
|
|
18
18
|
if (!value || typeof value !== "object") {
|
|
19
|
-
throw connectorModuleError(
|
|
19
|
+
throw connectorModuleError(channel, "does not export a module");
|
|
20
20
|
}
|
|
21
21
|
const module = value;
|
|
22
|
-
if (module.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(
|
|
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(
|
|
34
|
+
throw connectorModuleError(channel, "has duplicate or conflicting tool names");
|
|
35
35
|
}
|
|
36
36
|
return module;
|
|
37
37
|
}
|
|
38
|
-
async function loadRecipeConnectorModule(recipeDir,
|
|
39
|
-
const packageName = recipeChannelPackageName(
|
|
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
|
|
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,
|
|
52
|
+
return parseRecipeConnectorModule(connectorModule, channel);
|
|
53
53
|
}
|
|
54
54
|
export async function loadRecipeConnectors(manifest, agentTools, options) {
|
|
55
|
-
const loaded = await Promise.all((manifest.
|
|
56
|
-
const module = await loadRecipeConnectorModule(options.recipeDir,
|
|
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: `<
|
|
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":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,wBAAwB,GAGzB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"connector-tools.js","sourceRoot":"","sources":["../src/connector-tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,wBAAwB,GAGzB,MAAM,qBAAqB,CAAC;AA4C7B,SAAS,oBAAoB,CAC3B,OAA6B,EAC7B,MAAc;IAEd,OAAO,IAAI,KAAK,CACd,0BAA0B,wBAAwB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,MAAM,EAAE,CACjF,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAChC,KAAc;IAEd,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,KAA+C,CAAC;IAC7D,OAAO,CACL,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ;QAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QAC7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,aAAa,KAAK,SAAS,CACxC,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,KAAc,EACd,OAA6B;IAE7B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,oBAAoB,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,MAAM,GAAG,KAAuC,CAAC;IACvD,IACE,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ;QACpC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC7D,OAAO,MAAM,CAAC,eAAe,KAAK,UAAU,EAC5C,CAAC;QACD,MAAM,oBAAoB,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAiD,CAAC;IACvE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,IACE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM;QAChC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EACpC,CAAC;QACD,MAAM,oBAAoB,CACxB,OAAO,EACP,yCAAyC,CAC1C,CAAC;IACJ,CAAC;IACD,OAAO,MAA+B,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,SAAiB,EACjB,OAA6B;IAE7B,MAAM,WAAW,GAAG,wBAAwB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/D,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,mBAAmB,OAAO,CAAC,QAAQ,cAAc,WAAW,6BAA6B,EACzF,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;IACD,MAAM,eAAe,GACnB,QAAQ;QACR,OAAO,QAAQ,KAAK,QAAQ;QAC5B,SAAS,IAAI,QAAQ;QACnB,CAAC,CAAC,QAAQ,CAAC,OAAO;QAClB,CAAC,CAAC,QAAQ,CAAC;IACf,OAAO,0BAA0B,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAA+B,EAC/B,UAA6B,EAC7B,OAAwC;IAExC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5C,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,KAAK,CAAC,CACjE,CAAC;QACF,OAAO;YACL,SAAS,EAAE;gBACT,KAAK,EAAE,YAAY,OAAO,CAAC,QAAQ,GAAG;gBACtC,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC;oBAC9B,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtC,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzE,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrF,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,GAAG,EAAE,OAAO,CAAC,GAAG;iBACjB,CAAC;aACH;YACD,QAAQ;SACT,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACnE,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,MAAM,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC;QAC1D,OAAO,EAAE;YACP,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5C,sBAAsB,EAAE,QAAQ;iBAC7B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC;iBACpC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3B,iBAAiB,EAAE,QAAQ;iBACxB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;iBACrC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SAC5B;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1222,7 +1222,12 @@ var RESOURCE_KEYS = [
|
|
|
1222
1222
|
"skills",
|
|
1223
1223
|
"prompts"
|
|
1224
1224
|
];
|
|
1225
|
-
var PI_KEYS = /* @__PURE__ */ new Set([
|
|
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) {
|
package/dist/mcp-daemon.js
CHANGED
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
installMcpCommandIoRouting,
|
|
13
13
|
mcpDaemonRequestContext,
|
|
14
14
|
serializeMcpDaemonEnvelope
|
|
15
|
-
} from "./mcp-chunks/chunk-
|
|
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";
|
package/dist/mcp-run-worker.js
CHANGED
|
@@ -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-
|
|
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";
|
package/dist/recipe-package.d.ts
CHANGED
|
@@ -23,8 +23,10 @@ export interface RecipePackageMcpConfig {
|
|
|
23
23
|
manifests: string[];
|
|
24
24
|
servers: RecipePackageMcpServer[];
|
|
25
25
|
}
|
|
26
|
-
export interface
|
|
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
|
-
|
|
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":"AAGA,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,sBAAsB,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,6FAA6F;IAC7F,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAQD,iFAAiF;AACjF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CAmBlF;AAED,4EAA4E;AAC5E,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,sBAAsB,GAAG,OAAO,CAcxF;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,sBAAsB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"recipe-package.d.ts","sourceRoot":"","sources":["../src/recipe-package.ts"],"names":[],"mappings":"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"}
|
package/dist/recipe-package.js
CHANGED
|
@@ -42,7 +42,12 @@ const RESOURCE_KEYS = [
|
|
|
42
42
|
"skills",
|
|
43
43
|
"prompts",
|
|
44
44
|
];
|
|
45
|
-
const PI_KEYS = new Set([
|
|
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(...
|
|
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
|
|
92
|
+
function channelSourceShapeFindings(value, packageName, dependencies) {
|
|
88
93
|
if (value === undefined)
|
|
89
94
|
return [];
|
|
90
|
-
const invalid = (message) => finding("pi.
|
|
95
|
+
const invalid = (message) => finding("pi.channels_invalid", message, packageName);
|
|
91
96
|
if (!Array.isArray(value)) {
|
|
92
|
-
return [invalid("package.json#pi.
|
|
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.
|
|
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) =>
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
496
|
+
function parseChannels(value) {
|
|
484
497
|
const seen = new Set();
|
|
485
|
-
const
|
|
498
|
+
const channels = [];
|
|
486
499
|
for (const raw of Array.isArray(value) ? value : []) {
|
|
487
|
-
const
|
|
488
|
-
const provider = stringValue(
|
|
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
|
-
|
|
505
|
+
channels.push({ provider, ...(Array.isArray(channel.commands) ? { commands: channel.commands } : {}), ...(typeof channel.requireReply === "boolean" ? { requireReply: channel.requireReply } : {}) });
|
|
493
506
|
}
|
|
494
|
-
return
|
|
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
|
-
|
|
572
|
+
channels: parseChannels(pi.channels),
|
|
560
573
|
mcp: parseMcpConfig(pi.mcp),
|
|
561
574
|
runtime: parseRuntimeRequirements(pi.runtime),
|
|
562
575
|
};
|