@andreprado/agentkit 0.1.0-alpha.17 → 0.1.0-alpha.19
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 +3 -0
- package/docs/guides/add-channel.md +14 -8
- package/docs/guides/add-knowledge.md +10 -0
- package/docs/guides/add-managed-composio.md +43 -17
- package/docs/guides/channel-security.md +60 -39
- package/docs/guides/connect-discord.md +178 -0
- package/docs/guides/create-agent.md +13 -0
- package/docs/guides/debug-channel.md +147 -0
- package/docs/guides/improve-from-production.md +151 -0
- package/docs/guides/prepare-deploy.md +30 -14
- package/docs/guides/replay-production-traces.md +72 -0
- package/docs/guides/run-evals.md +18 -0
- package/docs/guides/security-rules.md +5 -5
- package/docs/guides/use-provider.md +11 -1
- package/docs/llms-full.txt +106 -15
- package/docs/llms.txt +22 -4
- package/package.json +1 -3
- package/src/cli/args.ts +23 -2
- package/src/cli/cloud-client.ts +75 -0
- package/src/cli/commands/channels.ts +139 -14
- package/src/cli/deploy-chat-ui.ts +146 -3
- package/src/cli/deploy-readiness.ts +57 -1
- package/src/cli/help.ts +32 -8
- package/src/cli/index.ts +447 -17
- package/src/create-project.ts +13 -2
- package/src/index.ts +46 -3
- package/src/providers/pi.ts +49 -15
- package/src/runtime/channel-test-harness.ts +4 -1
- package/src/runtime/channels/discord.ts +887 -0
- package/src/runtime/channels.ts +15 -0
- package/src/runtime/config.ts +39 -3
- package/src/runtime/core/manifest.ts +2 -0
- package/src/runtime/dev-server.ts +149 -8
- package/src/runtime/evals.ts +27 -6
- package/src/runtime/improve.ts +868 -0
- package/src/runtime/inspect.ts +1 -0
- package/src/runtime/integrations/composio.ts +168 -2
- package/src/runtime/knowledge/retrieve.ts +25 -5
- package/src/runtime/knowledge/schema.ts +45 -1
- package/src/runtime/runtime-contract.ts +54 -0
- package/src/runtime/targets/cloudflare/build.ts +479 -194
- package/src/runtime/targets/vps/deploy.ts +1 -1
- package/src/storage/sqlite.ts +7 -2
- package/src/templates/skills/agentkit-capsule/SKILL.md +8 -1
- package/src/templates/skills/agentkit-capsule/references/docs-router.md +1 -2
- package/src/templates/skills/agentkit-channels/SKILL.md +6 -1
- package/src/templates/skills/agentkit-channels/references/channel-debugging.md +2 -1
- package/src/templates/skills/agentkit-channels/references/discord.md +93 -0
- package/src/templates/skills/agentkit-deploy/SKILL.md +6 -0
- package/src/templates/skills/agentkit-evals/SKILL.md +12 -3
- package/src/templates/skills/agentkit-improve/SKILL.md +86 -0
- package/src/templates/skills/agentkit-improve/references/replay-side-effects.md +18 -0
- package/src/templates/skills/agentkit-improve/references/trace-packets.md +22 -0
- package/src/templates/skills/agentkit-improve/templates/regression.eval.md +18 -0
- package/src/templates/skills/agentkit-integrations/SKILL.md +12 -2
- package/src/templates/skills/agentkit-knowledge/SKILL.md +4 -1
- package/src/templates/skills/agentkit-provider/SKILL.md +4 -1
- package/src/templates/skills/agentkit-security/SKILL.md +3 -2
- package/src/templates/skills/agentkit-troubleshooting/SKILL.md +9 -0
- package/src/templates/support.ts +4 -2
- package/docs/guides/agentkit-skills-architecture.md +0 -472
- package/docs/guides/channels-implementation-map.md +0 -243
- package/docs/guides/channels-production-handoff.md +0 -118
- package/docs/portable-deploy-release-checklist.md +0 -41
package/src/index.ts
CHANGED
|
@@ -2,9 +2,10 @@ export type AgentRuntime = "local" | "edge";
|
|
|
2
2
|
export type AgentProviderName = "test" | "openai" | "anthropic" | "openrouter" | "custom";
|
|
3
3
|
export type AccessMode = "private" | "token" | "public";
|
|
4
4
|
export type ToolVisibility = "user" | "internal";
|
|
5
|
-
export type ChannelType = "website" | "telegram" | "whatsapp";
|
|
6
|
-
export type ChannelProvider = "agentkit" | "telegram" | "zapster" | "meta";
|
|
5
|
+
export type ChannelType = "website" | "telegram" | "whatsapp" | "discord";
|
|
6
|
+
export type ChannelProvider = "agentkit" | "telegram" | "zapster" | "meta" | "discord";
|
|
7
7
|
export type WhatsappChannelProvider = "zapster" | "meta";
|
|
8
|
+
export type DiscordChannelMode = "interactions" | "bot";
|
|
8
9
|
export type TelegramAllowedUpdate = "message";
|
|
9
10
|
export type ChannelAudioMode = "off" | "reject" | "transcribe";
|
|
10
11
|
export type TranscriptionProviderName = "test" | "openai" | "groq";
|
|
@@ -143,7 +144,26 @@ export type WhatsappChannelConfig = {
|
|
|
143
144
|
audio?: ChannelAudioConfig;
|
|
144
145
|
};
|
|
145
146
|
|
|
146
|
-
export type
|
|
147
|
+
export type DiscordChannelInput = {
|
|
148
|
+
name: string;
|
|
149
|
+
mode?: DiscordChannelMode;
|
|
150
|
+
secrets?: string[];
|
|
151
|
+
limits?: ChannelLimits;
|
|
152
|
+
buffer?: ChannelBufferInput;
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
export type DiscordChannelConfig = {
|
|
156
|
+
type: "discord";
|
|
157
|
+
provider: "discord";
|
|
158
|
+
name: string;
|
|
159
|
+
mode: DiscordChannelMode;
|
|
160
|
+
secrets: string[];
|
|
161
|
+
limits?: ChannelLimits;
|
|
162
|
+
buffer?: ChannelBufferConfig;
|
|
163
|
+
audio?: never;
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
export type AgentChannel = WebsiteChannelConfig | TelegramChannelConfig | WhatsappChannelConfig | DiscordChannelConfig;
|
|
147
167
|
|
|
148
168
|
export type IntegrationTagsConfig = {
|
|
149
169
|
enable?: string[];
|
|
@@ -155,6 +175,7 @@ export type ComposioManagedIntegrationInput = {
|
|
|
155
175
|
toolkits: string[];
|
|
156
176
|
tools?: Record<string, string[]>;
|
|
157
177
|
tags?: IntegrationTagsConfig;
|
|
178
|
+
confirmExternalWrites?: boolean;
|
|
158
179
|
};
|
|
159
180
|
|
|
160
181
|
export type ComposioManagedIntegration = {
|
|
@@ -165,6 +186,7 @@ export type ComposioManagedIntegration = {
|
|
|
165
186
|
toolkits: string[];
|
|
166
187
|
tools?: Record<string, string[]>;
|
|
167
188
|
tags?: IntegrationTagsConfig;
|
|
189
|
+
confirmExternalWrites?: boolean;
|
|
168
190
|
};
|
|
169
191
|
|
|
170
192
|
export type AgentIntegration = ComposioManagedIntegration;
|
|
@@ -368,6 +390,7 @@ export function composioManaged(input: ComposioManagedIntegrationInput): Composi
|
|
|
368
390
|
const toolkits = normalizeToolkitList(input.toolkits, "composioManaged.toolkits");
|
|
369
391
|
const tools = input.tools ? normalizeComposioToolMap(input.tools, toolkits) : undefined;
|
|
370
392
|
const tags = input.tags ? normalizeIntegrationTags(input.tags) : undefined;
|
|
393
|
+
const confirmExternalWrites = input.confirmExternalWrites;
|
|
371
394
|
|
|
372
395
|
return {
|
|
373
396
|
type: "composio",
|
|
@@ -377,6 +400,7 @@ export function composioManaged(input: ComposioManagedIntegrationInput): Composi
|
|
|
377
400
|
toolkits,
|
|
378
401
|
...(tools ? { tools } : {}),
|
|
379
402
|
...(tags ? { tags } : {}),
|
|
403
|
+
...(confirmExternalWrites === undefined ? {} : { confirmExternalWrites }),
|
|
380
404
|
};
|
|
381
405
|
}
|
|
382
406
|
|
|
@@ -424,6 +448,24 @@ export function whatsappChannel(input: WhatsappChannelInput): WhatsappChannelCon
|
|
|
424
448
|
};
|
|
425
449
|
}
|
|
426
450
|
|
|
451
|
+
export function discordChannel(input: DiscordChannelInput): DiscordChannelConfig {
|
|
452
|
+
const mode = input.mode ?? "interactions";
|
|
453
|
+
|
|
454
|
+
return {
|
|
455
|
+
type: "discord",
|
|
456
|
+
provider: "discord",
|
|
457
|
+
name: input.name,
|
|
458
|
+
mode,
|
|
459
|
+
secrets: normalizeChannelSecrets(input.secrets ?? defaultDiscordChannelSecrets(mode), "discord channel"),
|
|
460
|
+
...(input.limits ? { limits: input.limits } : {}),
|
|
461
|
+
...(input.buffer ? { buffer: normalizeChannelBuffer(input.buffer, "discord channel") } : {}),
|
|
462
|
+
};
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
function defaultDiscordChannelSecrets(mode: DiscordChannelMode): string[] {
|
|
466
|
+
return mode === "bot" ? ["DISCORD_BOT_TOKEN"] : ["DISCORD_PUBLIC_KEY"];
|
|
467
|
+
}
|
|
468
|
+
|
|
427
469
|
function defaultWhatsappChannelSecrets(provider: WhatsappChannelProvider): string[] {
|
|
428
470
|
if (provider === "zapster") {
|
|
429
471
|
return ["ZAPSTER_API_KEY", "ZAPSTER_INSTANCE_ID", "ZAPSTER_WEBHOOK_ID"];
|
|
@@ -645,6 +687,7 @@ export type {
|
|
|
645
687
|
ChannelMediaDownloadResult,
|
|
646
688
|
ChannelMessageContentType,
|
|
647
689
|
ChannelMessageRole,
|
|
690
|
+
ChannelReplyTarget,
|
|
648
691
|
ChannelSendInput,
|
|
649
692
|
ChannelSendResult,
|
|
650
693
|
ChannelStatusInput,
|
package/src/providers/pi.ts
CHANGED
|
@@ -19,6 +19,9 @@ import type { ProviderAdapter, ProviderRunInput, ProviderRunResult } from "./typ
|
|
|
19
19
|
|
|
20
20
|
const PI_PROVIDER_NAMES = ["openai", "anthropic", "openrouter"] as const satisfies AgentProviderName[];
|
|
21
21
|
const MAX_TOOL_TURNS = 8;
|
|
22
|
+
const OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1";
|
|
23
|
+
const UNKNOWN_OPENROUTER_CONTEXT_WINDOW = 128000;
|
|
24
|
+
const UNKNOWN_OPENROUTER_MAX_TOKENS = 8192;
|
|
22
25
|
|
|
23
26
|
export const piProviderAdapters: ProviderAdapter[] = PI_PROVIDER_NAMES.map((name) => ({
|
|
24
27
|
name,
|
|
@@ -189,25 +192,56 @@ function formatSecretList(names: string[]): string {
|
|
|
189
192
|
return `one of: ${names.join(", ")}`;
|
|
190
193
|
}
|
|
191
194
|
|
|
192
|
-
function resolveModel(provider: Provider, modelId: string): Model<any> {
|
|
193
|
-
const
|
|
195
|
+
export function resolveModel(provider: Provider, modelId: string): Model<any> {
|
|
196
|
+
const model = getModel(provider as any, modelId as any) as Model<any> | undefined;
|
|
194
197
|
|
|
195
|
-
if (
|
|
196
|
-
|
|
197
|
-
"provider_model_unsupported",
|
|
198
|
-
`Pi SDK could not resolve provider "${provider}" model "${modelId}".`,
|
|
199
|
-
);
|
|
198
|
+
if (model) {
|
|
199
|
+
return model;
|
|
200
200
|
}
|
|
201
201
|
|
|
202
|
-
|
|
203
|
-
return
|
|
204
|
-
} catch (error) {
|
|
205
|
-
throw new AgentKitError(
|
|
206
|
-
"provider_model_unsupported",
|
|
207
|
-
`Pi SDK could not resolve provider "${provider}" model "${modelId}".`,
|
|
208
|
-
{ cause: error },
|
|
209
|
-
);
|
|
202
|
+
if (provider === "openrouter") {
|
|
203
|
+
return createOpenRouterPassThroughModel(modelId);
|
|
210
204
|
}
|
|
205
|
+
|
|
206
|
+
throw new AgentKitError(
|
|
207
|
+
"provider_model_unsupported",
|
|
208
|
+
`Pi SDK could not resolve provider "${provider}" model "${modelId}". ${knownModelHint(provider)}`,
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
function createOpenRouterPassThroughModel(modelId: string): Model<"openai-completions"> {
|
|
213
|
+
return {
|
|
214
|
+
id: modelId,
|
|
215
|
+
name: `OpenRouter ${modelId}`,
|
|
216
|
+
api: "openai-completions",
|
|
217
|
+
provider: "openrouter",
|
|
218
|
+
baseUrl: OPENROUTER_BASE_URL,
|
|
219
|
+
reasoning: false,
|
|
220
|
+
input: ["text"],
|
|
221
|
+
cost: {
|
|
222
|
+
input: 0,
|
|
223
|
+
output: 0,
|
|
224
|
+
cacheRead: 0,
|
|
225
|
+
cacheWrite: 0,
|
|
226
|
+
},
|
|
227
|
+
contextWindow: UNKNOWN_OPENROUTER_CONTEXT_WINDOW,
|
|
228
|
+
maxTokens: UNKNOWN_OPENROUTER_MAX_TOKENS,
|
|
229
|
+
compat: {
|
|
230
|
+
openRouterRouting: {},
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function knownModelHint(provider: Provider): string {
|
|
236
|
+
const examples = getModels(provider as any)
|
|
237
|
+
.slice(0, 5)
|
|
238
|
+
.map((model) => model.id);
|
|
239
|
+
|
|
240
|
+
if (examples.length === 0) {
|
|
241
|
+
return "Use a model id supported by the installed Pi SDK for that provider.";
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
return `Use a model id supported by the installed Pi SDK for that provider. Examples: ${examples.join(", ")}.`;
|
|
211
245
|
}
|
|
212
246
|
|
|
213
247
|
function toPiMessages(messages: ProviderRunInput["messages"]): Message[] {
|
|
@@ -14,7 +14,10 @@ export type ChannelFixtureName =
|
|
|
14
14
|
| "zapster-message"
|
|
15
15
|
| "zapster-audio-message"
|
|
16
16
|
| "zapster-duplicate-message"
|
|
17
|
-
| "zapster-unsupported-media"
|
|
17
|
+
| "zapster-unsupported-media"
|
|
18
|
+
| "discord-command"
|
|
19
|
+
| "discord-message-create"
|
|
20
|
+
| "discord-ping";
|
|
18
21
|
|
|
19
22
|
export type ChannelFixture = {
|
|
20
23
|
name: ChannelFixtureName;
|