@paperclipai/shared 2026.1012.0 → 2026.1012.1-beta.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/dist/.paperclip-build-complete +1 -1
- package/dist/accounting.d.ts +178 -0
- package/dist/accounting.d.ts.map +1 -0
- package/dist/accounting.js +68 -0
- package/dist/accounting.js.map +1 -0
- package/dist/agent-appearance.d.ts +6 -1
- package/dist/agent-appearance.d.ts.map +1 -1
- package/dist/agent-appearance.js +8 -2
- package/dist/agent-appearance.js.map +1 -1
- package/dist/agent-appearance.test.js +11 -0
- package/dist/agent-appearance.test.js.map +1 -1
- package/dist/agent-avatar-upload.d.ts +8 -0
- package/dist/agent-avatar-upload.d.ts.map +1 -0
- package/dist/agent-avatar-upload.js +9 -0
- package/dist/agent-avatar-upload.js.map +1 -0
- package/dist/agent-commentary.test.d.ts +2 -0
- package/dist/agent-commentary.test.d.ts.map +1 -0
- package/dist/agent-commentary.test.js +18 -0
- package/dist/agent-commentary.test.js.map +1 -0
- package/dist/ai-connection-router.d.ts +29 -20
- package/dist/ai-connection-router.d.ts.map +1 -1
- package/dist/ai-connections.d.ts +67 -5
- package/dist/ai-connections.d.ts.map +1 -1
- package/dist/ai-connections.js +25 -17
- package/dist/ai-connections.js.map +1 -1
- package/dist/ai-provider-routing.d.ts +42 -0
- package/dist/ai-provider-routing.d.ts.map +1 -0
- package/dist/ai-provider-routing.js +125 -0
- package/dist/ai-provider-routing.js.map +1 -0
- package/dist/app-definitions/airtable.json +39 -0
- package/dist/app-definitions/anthropic.json +3 -0
- package/dist/app-definitions/bedrock.json +53 -0
- package/dist/app-definitions/bitly.json +17 -12
- package/dist/app-definitions/calendly.json +46 -0
- package/dist/app-definitions/chat-completions-api.json +53 -0
- package/dist/app-definitions/clickup.json +53 -0
- package/dist/app-definitions/context7.json +13 -5
- package/dist/app-definitions/enterpret.json +92 -0
- package/dist/app-definitions/exa.json +34 -0
- package/dist/app-definitions/firecrawl.json +93 -0
- package/dist/app-definitions/gauge.json +94 -0
- package/dist/app-definitions/github-code-review-bot.json +1 -1
- package/dist/app-definitions/google.json +55 -0
- package/dist/app-definitions/gsc-wizard.json +78 -0
- package/dist/app-definitions/hugging-face.json +22 -0
- package/dist/app-definitions/klaviyo.json +59 -0
- package/dist/app-definitions/linear.json +45 -2
- package/dist/app-definitions/local.json +53 -0
- package/dist/app-definitions/make.json +53 -1
- package/dist/app-definitions/messages-api.json +53 -0
- package/dist/app-definitions/monday.json +46 -0
- package/dist/app-definitions/openai.json +3 -0
- package/dist/app-definitions/openrouter.json +3 -0
- package/dist/app-definitions/parallel-search.json +35 -0
- package/dist/app-definitions/resend.json +3 -3
- package/dist/app-definitions/responses-api.json +53 -0
- package/dist/app-definitions/sentry.json +1 -1
- package/dist/app-definitions/superagent.json +57 -0
- package/dist/app-definitions/tavily.json +47 -0
- package/dist/app-definitions/telem.json +144 -0
- package/dist/app-definitions/windsor-ai.json +80 -0
- package/dist/app-definitions/xai.json +3 -0
- package/dist/app-definitions-url.test.js +11 -1
- package/dist/app-definitions-url.test.js.map +1 -1
- package/dist/app-definitions.d.ts.map +1 -1
- package/dist/app-definitions.generated.d.ts.map +1 -1
- package/dist/app-definitions.generated.js +81 -61
- package/dist/app-definitions.generated.js.map +1 -1
- package/dist/app-definitions.js +20 -11
- package/dist/app-definitions.js.map +1 -1
- package/dist/app-definitions.test.js +261 -14
- package/dist/app-definitions.test.js.map +1 -1
- package/dist/connection-instructions.test.js +1 -0
- package/dist/connection-instructions.test.js.map +1 -1
- package/dist/connection-routing.d.ts +3 -1
- package/dist/connection-routing.d.ts.map +1 -1
- package/dist/connection-routing.js +13 -0
- package/dist/connection-routing.js.map +1 -1
- package/dist/constants.d.ts +2 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -1
- package/dist/constants.js.map +1 -1
- package/dist/customer-success.d.ts +58 -0
- package/dist/customer-success.d.ts.map +1 -0
- package/dist/customer-success.js +160 -0
- package/dist/customer-success.js.map +1 -0
- package/dist/decision-models.d.ts +134 -0
- package/dist/decision-models.d.ts.map +1 -0
- package/dist/decision-models.js +43 -0
- package/dist/decision-models.js.map +1 -0
- package/dist/dot-invitations.d.ts +34 -0
- package/dist/dot-invitations.d.ts.map +1 -0
- package/dist/dot-invitations.js +2 -0
- package/dist/dot-invitations.js.map +1 -0
- package/dist/easy-mcp-connectors.test.d.ts +2 -0
- package/dist/easy-mcp-connectors.test.d.ts.map +1 -0
- package/dist/easy-mcp-connectors.test.js +63 -0
- package/dist/easy-mcp-connectors.test.js.map +1 -0
- package/dist/external-agent-guidance.d.ts +5 -0
- package/dist/external-agent-guidance.d.ts.map +1 -0
- package/dist/external-agent-guidance.js +5 -0
- package/dist/external-agent-guidance.js.map +1 -0
- package/dist/fast-response.d.ts +54 -0
- package/dist/fast-response.d.ts.map +1 -0
- package/dist/fast-response.js +28 -0
- package/dist/fast-response.js.map +1 -0
- package/dist/feature-catalog.d.ts.map +1 -1
- package/dist/feature-catalog.js +22 -1
- package/dist/feature-catalog.js.map +1 -1
- package/dist/index.d.ts +20 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-setup.js +2 -2
- package/dist/mcp-setup.js.map +1 -1
- package/dist/money.d.ts +20 -0
- package/dist/money.d.ts.map +1 -0
- package/dist/money.js +58 -0
- package/dist/money.js.map +1 -0
- package/dist/primary-agent.d.ts +12 -0
- package/dist/primary-agent.d.ts.map +1 -0
- package/dist/primary-agent.js +5 -0
- package/dist/primary-agent.js.map +1 -0
- package/dist/public-mcp.d.ts +25 -1
- package/dist/public-mcp.d.ts.map +1 -1
- package/dist/public-mcp.js +4 -1
- package/dist/public-mcp.js.map +1 -1
- package/dist/self-serve-mcp-research.json +18 -4
- package/dist/slack-app-manifest.d.ts +128 -0
- package/dist/slack-app-manifest.d.ts.map +1 -0
- package/dist/slack-app-manifest.js +88 -0
- package/dist/slack-app-manifest.js.map +1 -0
- package/dist/slack-app-manifest.test.d.ts +2 -0
- package/dist/slack-app-manifest.test.d.ts.map +1 -0
- package/dist/slack-app-manifest.test.js +44 -0
- package/dist/slack-app-manifest.test.js.map +1 -0
- package/dist/slack-tools.js +2 -2
- package/dist/slack-tools.js.map +1 -1
- package/dist/subscriptions.d.ts +104 -0
- package/dist/subscriptions.d.ts.map +1 -0
- package/dist/subscriptions.js +40 -0
- package/dist/subscriptions.js.map +1 -0
- package/dist/types/agent-lifecycle.d.ts +27 -0
- package/dist/types/agent-lifecycle.d.ts.map +1 -0
- package/dist/types/agent-lifecycle.js +6 -0
- package/dist/types/agent-lifecycle.js.map +1 -0
- package/dist/types/agent.d.ts +11 -0
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js.map +1 -1
- package/dist/types/app-definition.d.ts +6 -2
- package/dist/types/app-definition.d.ts.map +1 -1
- package/dist/types/budget.d.ts +10 -1
- package/dist/types/budget.d.ts.map +1 -1
- package/dist/types/chat-channels.d.ts +31 -2
- package/dist/types/chat-channels.d.ts.map +1 -1
- package/dist/types/chat-channels.js +1 -0
- package/dist/types/chat-channels.js.map +1 -1
- package/dist/types/chat-github.d.ts +26 -1
- package/dist/types/chat-github.d.ts.map +1 -1
- package/dist/types/chat-github.js +2 -0
- package/dist/types/chat-github.js.map +1 -1
- package/dist/types/connection-intent.d.ts +3 -1
- package/dist/types/connection-intent.d.ts.map +1 -1
- package/dist/types/cost.d.ts +81 -3
- package/dist/types/cost.d.ts.map +1 -1
- package/dist/types/execution-projection.d.ts +2 -0
- package/dist/types/execution-projection.d.ts.map +1 -1
- package/dist/types/execution-projection.js.map +1 -1
- package/dist/types/finance.d.ts +35 -0
- package/dist/types/finance.d.ts.map +1 -1
- package/dist/types/github-app-setup.d.ts +55 -0
- package/dist/types/github-app-setup.d.ts.map +1 -0
- package/dist/types/github-app-setup.js +2 -0
- package/dist/types/github-app-setup.js.map +1 -0
- package/dist/types/heartbeat.d.ts +6 -0
- package/dist/types/heartbeat.d.ts.map +1 -1
- package/dist/types/index.d.ts +5 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/instance.d.ts +6 -0
- package/dist/types/instance.d.ts.map +1 -1
- package/dist/types/instance.js.map +1 -1
- package/dist/types/issue.d.ts +72 -2
- package/dist/types/issue.d.ts.map +1 -1
- package/dist/types/plugin.d.ts +2 -0
- package/dist/types/plugin.d.ts.map +1 -1
- package/dist/types/project.d.ts +20 -0
- package/dist/types/project.d.ts.map +1 -1
- package/dist/types/quota.d.ts +4 -0
- package/dist/types/quota.d.ts.map +1 -1
- package/dist/types/tool-access.d.ts +16 -1
- package/dist/types/tool-access.d.ts.map +1 -1
- package/dist/types/tool-access.js.map +1 -1
- package/dist/types/user-profile.d.ts +1 -1
- package/dist/types/user-profile.d.ts.map +1 -1
- package/dist/types/voice-sessions.d.ts +103 -0
- package/dist/types/voice-sessions.d.ts.map +1 -0
- package/dist/types/voice-sessions.js +5 -0
- package/dist/types/voice-sessions.js.map +1 -0
- package/dist/validators/adapter-auth-session.d.ts +0 -2
- package/dist/validators/adapter-auth-session.d.ts.map +1 -1
- package/dist/validators/agent-commentary.d.ts +25 -0
- package/dist/validators/agent-commentary.d.ts.map +1 -0
- package/dist/validators/agent-commentary.js +12 -0
- package/dist/validators/agent-commentary.js.map +1 -0
- package/dist/validators/agent.d.ts +19 -5
- package/dist/validators/agent.d.ts.map +1 -1
- package/dist/validators/agent.js +3 -3
- package/dist/validators/agent.js.map +1 -1
- package/dist/validators/agent.test.d.ts +2 -0
- package/dist/validators/agent.test.d.ts.map +1 -0
- package/dist/validators/agent.test.js +27 -0
- package/dist/validators/agent.test.js.map +1 -0
- package/dist/validators/app-definition.d.ts +92 -0
- package/dist/validators/app-definition.d.ts.map +1 -1
- package/dist/validators/app-definition.js +9 -6
- package/dist/validators/app-definition.js.map +1 -1
- package/dist/validators/budget.d.ts +10 -5
- package/dist/validators/budget.d.ts.map +1 -1
- package/dist/validators/budget.js +9 -6
- package/dist/validators/budget.js.map +1 -1
- package/dist/validators/chat-channels.d.ts +26 -5
- package/dist/validators/chat-channels.d.ts.map +1 -1
- package/dist/validators/chat-channels.js +20 -6
- package/dist/validators/chat-channels.js.map +1 -1
- package/dist/validators/chat-github.d.ts +16 -6
- package/dist/validators/chat-github.d.ts.map +1 -1
- package/dist/validators/chat-github.js +4 -1
- package/dist/validators/chat-github.js.map +1 -1
- package/dist/validators/claude-setup-token-session.d.ts +0 -2
- package/dist/validators/claude-setup-token-session.d.ts.map +1 -1
- package/dist/validators/company-portability.d.ts +2 -0
- package/dist/validators/company-portability.d.ts.map +1 -1
- package/dist/validators/company-skill.js +1 -1
- package/dist/validators/company-skill.js.map +1 -1
- package/dist/validators/cost.d.ts +176 -6
- package/dist/validators/cost.d.ts.map +1 -1
- package/dist/validators/cost.js +17 -6
- package/dist/validators/cost.js.map +1 -1
- package/dist/validators/finance.d.ts +7 -4
- package/dist/validators/finance.d.ts.map +1 -1
- package/dist/validators/finance.js +4 -2
- package/dist/validators/finance.js.map +1 -1
- package/dist/validators/index.d.ts +4 -3
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/index.js +4 -3
- package/dist/validators/index.js.map +1 -1
- package/dist/validators/instance.d.ts +10 -0
- package/dist/validators/instance.d.ts.map +1 -1
- package/dist/validators/instance.js +6 -1
- package/dist/validators/instance.js.map +1 -1
- package/dist/validators/instance.test.js +4 -0
- package/dist/validators/instance.test.js.map +1 -1
- package/dist/validators/issue.d.ts +38 -3
- package/dist/validators/issue.d.ts.map +1 -1
- package/dist/validators/issue.js +22 -3
- package/dist/validators/issue.js.map +1 -1
- package/dist/validators/issue.test.js +60 -1
- package/dist/validators/issue.test.js.map +1 -1
- package/dist/validators/plugin.d.ts +2 -0
- package/dist/validators/plugin.d.ts.map +1 -1
- package/dist/validators/plugin.js +4 -0
- package/dist/validators/plugin.js.map +1 -1
- package/dist/validators/plugin.test.js +5 -0
- package/dist/validators/plugin.test.js.map +1 -1
- package/dist/validators/project.d.ts +16 -0
- package/dist/validators/project.d.ts.map +1 -1
- package/dist/validators/project.js +5 -0
- package/dist/validators/project.js.map +1 -1
- package/dist/validators/status-card.js +2 -2
- package/dist/validators/status-card.js.map +1 -1
- package/dist/validators/text.d.ts.map +1 -1
- package/dist/validators/text.js +5 -0
- package/dist/validators/text.js.map +1 -1
- package/dist/validators/tool-access.d.ts +9 -0
- package/dist/validators/tool-access.d.ts.map +1 -1
- package/dist/validators/tool-access.js +4 -1
- package/dist/validators/tool-access.js.map +1 -1
- package/dist/validators/voice-sessions.d.ts +27 -0
- package/dist/validators/voice-sessions.d.ts.map +1 -0
- package/dist/validators/voice-sessions.js +16 -0
- package/dist/validators/voice-sessions.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { SlackAppConfiguration } from "./types/chat-channels.js";
|
|
3
|
+
export declare const SLACK_CHAT_BOT_SCOPES: readonly ["app_mentions:read", "assistant:write", "channels:history", "channels:read", "chat:write", "commands", "files:read", "files:write", "groups:history", "groups:read", "im:history", "im:read", "mpim:history", "mpim:read", "reactions:read", "reactions:write", "users:read"];
|
|
4
|
+
export declare function defaultSlackAppConfiguration(agentName: string): SlackAppConfiguration;
|
|
5
|
+
export declare function buildSlackAppManifest(input: {
|
|
6
|
+
app: SlackAppConfiguration;
|
|
7
|
+
agentName: string;
|
|
8
|
+
webhookUrl: string;
|
|
9
|
+
redirectUri?: string;
|
|
10
|
+
}): {
|
|
11
|
+
display_information: {
|
|
12
|
+
name: string;
|
|
13
|
+
};
|
|
14
|
+
features: {
|
|
15
|
+
app_home: {
|
|
16
|
+
home_tab_enabled: boolean;
|
|
17
|
+
messages_tab_enabled: boolean;
|
|
18
|
+
messages_tab_read_only_enabled: boolean;
|
|
19
|
+
};
|
|
20
|
+
agent_view: {
|
|
21
|
+
agent_description: string;
|
|
22
|
+
};
|
|
23
|
+
bot_user: {
|
|
24
|
+
display_name: string;
|
|
25
|
+
};
|
|
26
|
+
slash_commands: {
|
|
27
|
+
command: string;
|
|
28
|
+
description: string;
|
|
29
|
+
usage_hint: string;
|
|
30
|
+
should_escape: boolean;
|
|
31
|
+
url: string;
|
|
32
|
+
}[];
|
|
33
|
+
};
|
|
34
|
+
oauth_config: {
|
|
35
|
+
scopes: {
|
|
36
|
+
bot: ("app_mentions:read" | "assistant:write" | "bookmarks:read" | "bookmarks:write" | "canvases:read" | "canvases:write" | "channels:history" | "channels:manage" | "channels:read" | "channels:write.topic" | "chat:write" | "commands" | "emoji:read" | "files:read" | "files:write" | "groups:history" | "groups:read" | "groups:write" | "groups:write.topic" | "im:history" | "im:read" | "im:write" | "lists:read" | "lists:write" | "mpim:history" | "mpim:read" | "pins:read" | "pins:write" | "reactions:read" | "reactions:write" | "users:read")[];
|
|
37
|
+
};
|
|
38
|
+
redirect_urls?: string[] | undefined;
|
|
39
|
+
};
|
|
40
|
+
settings: {
|
|
41
|
+
org_deploy_enabled: boolean;
|
|
42
|
+
socket_mode_enabled: boolean;
|
|
43
|
+
token_rotation_enabled: boolean;
|
|
44
|
+
event_subscriptions: {
|
|
45
|
+
request_url: string;
|
|
46
|
+
bot_events: string[];
|
|
47
|
+
};
|
|
48
|
+
interactivity: {
|
|
49
|
+
is_enabled: boolean;
|
|
50
|
+
request_url: string;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
export declare const slackRegistrationSchema: z.ZodObject<{
|
|
55
|
+
requestId: z.ZodString;
|
|
56
|
+
credentials: z.ZodObject<{
|
|
57
|
+
configurationToken: z.ZodString;
|
|
58
|
+
}, z.core.$strict>;
|
|
59
|
+
confirmedNoAppCreated: z.ZodOptional<z.ZodBoolean>;
|
|
60
|
+
}, z.core.$strict>;
|
|
61
|
+
export type SlackRegistrationInput = z.infer<typeof slackRegistrationSchema>;
|
|
62
|
+
export declare const slackRegistrationStatusSchema: z.ZodEnum<{
|
|
63
|
+
configured: "configured";
|
|
64
|
+
creating: "creating";
|
|
65
|
+
credentials_saved: "credentials_saved";
|
|
66
|
+
failed: "failed";
|
|
67
|
+
install: "install";
|
|
68
|
+
removed: "removed";
|
|
69
|
+
uncertain: "uncertain";
|
|
70
|
+
}>;
|
|
71
|
+
export type SlackRegistrationStatus = z.infer<typeof slackRegistrationStatusSchema>;
|
|
72
|
+
export declare const slackRegistrationStateSchema: z.ZodObject<{
|
|
73
|
+
status: z.ZodEnum<{
|
|
74
|
+
configured: "configured";
|
|
75
|
+
creating: "creating";
|
|
76
|
+
credentials_saved: "credentials_saved";
|
|
77
|
+
failed: "failed";
|
|
78
|
+
install: "install";
|
|
79
|
+
removed: "removed";
|
|
80
|
+
uncertain: "uncertain";
|
|
81
|
+
}>;
|
|
82
|
+
appId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
83
|
+
managementUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
84
|
+
errorCode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
85
|
+
}, z.core.$strict>;
|
|
86
|
+
export type SlackRegistrationState = z.infer<typeof slackRegistrationStateSchema>;
|
|
87
|
+
export declare const slackAvatarStateSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
88
|
+
status: z.ZodLiteral<"pending">;
|
|
89
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
90
|
+
status: z.ZodLiteral<"uploaded">;
|
|
91
|
+
uploadedAt: z.ZodString;
|
|
92
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
93
|
+
status: z.ZodLiteral<"failed">;
|
|
94
|
+
errorCode: z.ZodLiteral<"slack_avatar_upload_failed">;
|
|
95
|
+
}, z.core.$strict>], "status">;
|
|
96
|
+
export type SlackAvatarState = z.infer<typeof slackAvatarStateSchema>;
|
|
97
|
+
export declare const slackAccountStateSchema: z.ZodObject<{
|
|
98
|
+
externalUserId: z.ZodString;
|
|
99
|
+
paperclipUserId: z.ZodString;
|
|
100
|
+
status: z.ZodEnum<{
|
|
101
|
+
linked: "linked";
|
|
102
|
+
pending: "pending";
|
|
103
|
+
}>;
|
|
104
|
+
welcomeStatus: z.ZodEnum<{
|
|
105
|
+
failed: "failed";
|
|
106
|
+
pending: "pending";
|
|
107
|
+
sending: "sending";
|
|
108
|
+
sent: "sent";
|
|
109
|
+
uncertain: "uncertain";
|
|
110
|
+
}>;
|
|
111
|
+
verificationStatus: z.ZodOptional<z.ZodEnum<{
|
|
112
|
+
failed: "failed";
|
|
113
|
+
pending: "pending";
|
|
114
|
+
sending: "sending";
|
|
115
|
+
sent: "sent";
|
|
116
|
+
uncertain: "uncertain";
|
|
117
|
+
}>>;
|
|
118
|
+
dmChannelId: z.ZodOptional<z.ZodString>;
|
|
119
|
+
}, z.core.$strict>;
|
|
120
|
+
export type SlackAccountState = z.infer<typeof slackAccountStateSchema>;
|
|
121
|
+
export declare const slackInstallAuthorizationSchema: z.ZodObject<{
|
|
122
|
+
authorizationUrl: z.ZodString;
|
|
123
|
+
expiresAt: z.ZodString;
|
|
124
|
+
}, z.core.$strip>;
|
|
125
|
+
export type SlackInstallAuthorization = z.infer<typeof slackInstallAuthorizationSchema>;
|
|
126
|
+
export declare const slackSetupActionSchema: z.ZodObject<{}, z.core.$strict>;
|
|
127
|
+
export declare function slackRegistrationErrorMessage(code: string): string;
|
|
128
|
+
//# sourceMappingURL=slack-app-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack-app-manifest.d.ts","sourceRoot":"","sources":["../src/slack-app-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEtE,eAAO,MAAM,qBAAqB,YAChC,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAC3E,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EACvE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EACnE,gBAAgB,EAAE,iBAAiB,EAAE,YAAY,CACzC,CAAC;AAEX,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,CAIrF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,GAAG,EAAE,qBAAqB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;;QAE0B,IAAI;;;;YAEb,gBAAgB;YAAS,oBAAoB;YAAQ,8BAA8B;;;YACjF,iBAAiB;;;YACnB,YAAY;;;;;;;;;;;;YAKd,GAAG;;;;;QAIb,kBAAkB;QAAS,mBAAmB;QAAS,sBAAsB;QAC7E,mBAAmB;YACjB,WAAW;YACX,UAAU;;QAKZ,aAAa;YAAI,UAAU;YAAQ,WAAW;;;EAGnD;AAED,eAAO,MAAM,uBAAuB;;;;;;kBAIzB,CAAC;AACZ,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC7E,eAAO,MAAM,6BAA6B;;;;;;;;EAAuG,CAAC;AAClJ,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACpF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;kBAK9B,CAAC;AACZ,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAClF,eAAO,MAAM,sBAAsB;;;;;;;;8BAIjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;kBAOzB,CAAC;AACZ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,eAAO,MAAM,+BAA+B;;;iBAAqF,CAAC;AAClI,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AACxF,eAAO,MAAM,sBAAsB,iCAAwB,CAAC;AAE5D,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmBlE"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { SLACK_BOT_TOOL_SCOPES } from "./slack-tools.js";
|
|
3
|
+
export const SLACK_CHAT_BOT_SCOPES = [
|
|
4
|
+
"app_mentions:read", "assistant:write", "channels:history", "channels:read",
|
|
5
|
+
"chat:write", "commands", "files:read", "files:write", "groups:history",
|
|
6
|
+
"groups:read", "im:history", "im:read", "mpim:history", "mpim:read",
|
|
7
|
+
"reactions:read", "reactions:write", "users:read",
|
|
8
|
+
];
|
|
9
|
+
export function defaultSlackAppConfiguration(agentName) {
|
|
10
|
+
const botName = agentName.normalize("NFKD").toLowerCase()
|
|
11
|
+
.replace(/[^a-z0-9._-]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 24) || "paperclip-agent";
|
|
12
|
+
return { appName: `${botName}-paperclip`, botName, command: `/${botName.replace(/[._]+/g, "-")}` };
|
|
13
|
+
}
|
|
14
|
+
export function buildSlackAppManifest(input) {
|
|
15
|
+
return {
|
|
16
|
+
display_information: { name: input.app.appName },
|
|
17
|
+
features: {
|
|
18
|
+
app_home: { home_tab_enabled: false, messages_tab_enabled: true, messages_tab_read_only_enabled: false },
|
|
19
|
+
agent_view: { agent_description: "Work with a Paperclip agent in a task-backed conversation." },
|
|
20
|
+
bot_user: { display_name: input.app.botName },
|
|
21
|
+
slash_commands: [{ command: input.app.command, description: `Start or manage work with ${input.agentName}`,
|
|
22
|
+
usage_hint: "status | new | close | <task>", should_escape: false, url: input.webhookUrl }],
|
|
23
|
+
},
|
|
24
|
+
oauth_config: {
|
|
25
|
+
scopes: { bot: [...SLACK_CHAT_BOT_SCOPES, ...SLACK_BOT_TOOL_SCOPES] },
|
|
26
|
+
...(input.redirectUri ? { redirect_urls: [input.redirectUri] } : {}),
|
|
27
|
+
},
|
|
28
|
+
settings: {
|
|
29
|
+
org_deploy_enabled: false, socket_mode_enabled: false, token_rotation_enabled: false,
|
|
30
|
+
event_subscriptions: {
|
|
31
|
+
request_url: input.webhookUrl,
|
|
32
|
+
bot_events: ["agent_session_stopped", "app_mention", "message.channels", "message.groups", "message.im", "message.mpim",
|
|
33
|
+
"member_joined_channel", "member_left_channel", "channel_left", "group_left", "reaction_added", "reaction_removed",
|
|
34
|
+
"channel_archive", "group_archive", "channel_unarchive", "group_unarchive", "channel_deleted", "channel_rename",
|
|
35
|
+
"group_rename", "app_uninstalled", "tokens_revoked"],
|
|
36
|
+
},
|
|
37
|
+
interactivity: { is_enabled: true, request_url: input.webhookUrl },
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export const slackRegistrationSchema = z.object({
|
|
42
|
+
requestId: z.string().uuid(),
|
|
43
|
+
credentials: z.object({ configurationToken: z.string().trim().min(1).max(4096) }).strict(),
|
|
44
|
+
confirmedNoAppCreated: z.boolean().optional(),
|
|
45
|
+
}).strict();
|
|
46
|
+
export const slackRegistrationStatusSchema = z.enum(["creating", "uncertain", "failed", "install", "credentials_saved", "configured", "removed"]);
|
|
47
|
+
export const slackRegistrationStateSchema = z.object({
|
|
48
|
+
status: slackRegistrationStatusSchema,
|
|
49
|
+
appId: z.string().nullable().optional(),
|
|
50
|
+
managementUrl: z.string().url().nullable().optional(),
|
|
51
|
+
errorCode: z.string().nullable().optional(),
|
|
52
|
+
}).strict();
|
|
53
|
+
export const slackAvatarStateSchema = z.discriminatedUnion("status", [
|
|
54
|
+
z.object({ status: z.literal("pending") }).strict(),
|
|
55
|
+
z.object({ status: z.literal("uploaded"), uploadedAt: z.string().datetime() }).strict(),
|
|
56
|
+
z.object({ status: z.literal("failed"), errorCode: z.literal("slack_avatar_upload_failed") }).strict(),
|
|
57
|
+
]);
|
|
58
|
+
export const slackAccountStateSchema = z.object({
|
|
59
|
+
externalUserId: z.string().regex(/^[UW][A-Z0-9]+$/),
|
|
60
|
+
paperclipUserId: z.string().min(1),
|
|
61
|
+
status: z.enum(["pending", "linked"]),
|
|
62
|
+
welcomeStatus: z.enum(["pending", "sending", "sent", "failed", "uncertain"]),
|
|
63
|
+
verificationStatus: z.enum(["pending", "sending", "sent", "failed", "uncertain"]).optional(),
|
|
64
|
+
dmChannelId: z.string().regex(/^D[A-Z0-9]+$/).optional(),
|
|
65
|
+
}).strict();
|
|
66
|
+
export const slackInstallAuthorizationSchema = z.object({ authorizationUrl: z.string().url(), expiresAt: z.string().datetime() });
|
|
67
|
+
export const slackSetupActionSchema = z.object({}).strict();
|
|
68
|
+
export function slackRegistrationErrorMessage(code) {
|
|
69
|
+
const messages = {
|
|
70
|
+
slack_configuration_token_invalid: "Slack rejected the app configuration access token. Generate a new access token and try again.",
|
|
71
|
+
slack_manifest_invalid: "Slack rejected this app configuration. Check the app details or use manual setup.",
|
|
72
|
+
slack_manifest_update_pending: "Your Slack app is saved, but its event settings still need to be applied. Enter an app configuration access token to retry configuring the same app.",
|
|
73
|
+
slack_setup_rate_limited: "Slack is limiting setup requests. Wait a minute and try again.",
|
|
74
|
+
slack_setup_permission_denied: "Slack requires permission to create or install this app. Ask your workspace administrator.",
|
|
75
|
+
slack_creation_uncertain: "Slack may have created the app. Check your Slack app settings before trying again, or connect the existing app manually.",
|
|
76
|
+
slack_install_declined: "Installation was not approved. You can install the same app when you are ready.",
|
|
77
|
+
slack_install_expired: "Slack authorization expired. Install the same app again to continue.",
|
|
78
|
+
slack_install_failed: "Slack installation could not be completed. Authorize the same app again.",
|
|
79
|
+
slack_install_identity_mismatch: "Slack returned a different app, workspace, or bot. Install the app created for this connection.",
|
|
80
|
+
slack_install_scopes_missing: "Slack did not grant all required bot permissions. Install the app again and approve its requested permissions.",
|
|
81
|
+
slack_bot_already_connected: "This Slack bot is already connected to Paperclip. Resume its existing connection or use a different app.",
|
|
82
|
+
slack_configuration_incomplete: "The app is installed, but Paperclip could not finish connecting it. Retry connecting the saved installation.",
|
|
83
|
+
slack_install_account_missing: "Slack did not identify your account. Authorize the same app again to connect your Slack account.",
|
|
84
|
+
slack_install_account_conflict: "This Slack account already has an existing link. Manage account links in connection settings, or authorize with your own Slack account.",
|
|
85
|
+
};
|
|
86
|
+
return messages[code] ?? "Slack setup could not be completed. Resume setup and try again.";
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=slack-app-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack-app-manifest.js","sourceRoot":"","sources":["../src/slack-app-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAGzD,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe;IAC3E,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB;IACvE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW;IACnE,gBAAgB,EAAE,iBAAiB,EAAE,YAAY;CACzC,CAAC;AAEX,MAAM,UAAU,4BAA4B,CAAC,SAAiB;IAC5D,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;SACtD,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,iBAAiB,CAAC;IAC5F,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAKrC;IACC,OAAO;QACL,mBAAmB,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE;QAChD,QAAQ,EAAE;YACR,QAAQ,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE;YACxG,UAAU,EAAE,EAAE,iBAAiB,EAAE,4DAA4D,EAAE;YAC/F,QAAQ,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE;YAC7C,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,6BAA6B,KAAK,CAAC,SAAS,EAAE;oBACxG,UAAU,EAAE,+BAA+B,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;SAC9F;QACD,YAAY,EAAE;YACZ,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,qBAAqB,EAAE,GAAG,qBAAqB,CAAC,EAAE;YACrE,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE;QACD,QAAQ,EAAE;YACR,kBAAkB,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK;YACpF,mBAAmB,EAAE;gBACnB,WAAW,EAAE,KAAK,CAAC,UAAU;gBAC7B,UAAU,EAAE,CAAC,uBAAuB,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc;oBACrH,uBAAuB,EAAE,qBAAqB,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAE,kBAAkB;oBAClH,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB;oBAC/G,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;aACvD;YACD,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,UAAU,EAAE;SACnE;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1F,qBAAqB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC9C,CAAC,CAAC,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,mBAAmB,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;AAElJ,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,MAAM,EAAE,6BAA6B;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACvC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACrD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE;IACnE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;IACnD,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACvF,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;CACvG,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACnD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACrC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC5E,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5F,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;CACzD,CAAC,CAAC,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAElI,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAE5D,MAAM,UAAU,6BAA6B,CAAC,IAAY;IACxD,MAAM,QAAQ,GAA2B;QACvC,iCAAiC,EAAE,+FAA+F;QAClI,sBAAsB,EAAE,mFAAmF;QAC3G,6BAA6B,EAAE,sJAAsJ;QACrL,wBAAwB,EAAE,gEAAgE;QAC1F,6BAA6B,EAAE,4FAA4F;QAC3H,wBAAwB,EAAE,0HAA0H;QACpJ,sBAAsB,EAAE,iFAAiF;QACzG,qBAAqB,EAAE,sEAAsE;QAC7F,oBAAoB,EAAE,0EAA0E;QAChG,+BAA+B,EAAE,iGAAiG;QAClI,4BAA4B,EAAE,gHAAgH;QAC9I,2BAA2B,EAAE,0GAA0G;QACvI,8BAA8B,EAAE,8GAA8G;QAC9I,6BAA6B,EAAE,kGAAkG;QACjI,8BAA8B,EAAE,yIAAyI;KAC1K,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,iEAAiE,CAAC;AAC7F,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack-app-manifest.test.d.ts","sourceRoot":"","sources":["../src/slack-app-manifest.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { buildSlackAppManifest, defaultSlackAppConfiguration, slackRegistrationSchema, slackAccountStateSchema } from "./slack-app-manifest.js";
|
|
3
|
+
import { createChatEndpointSchema, slackAppConfigurationSchema } from "./validators/chat-channels.js";
|
|
4
|
+
describe("Slack app manifest", () => {
|
|
5
|
+
it("preserves older account setup state and validates optional verification delivery state", () => {
|
|
6
|
+
const account = { externalUserId: "UINSTALLER", paperclipUserId: "board-user", status: "linked", welcomeStatus: "sent" };
|
|
7
|
+
expect(slackAccountStateSchema.safeParse(account).success).toBe(true);
|
|
8
|
+
for (const verificationStatus of ["pending", "sending", "sent", "failed", "uncertain"]) {
|
|
9
|
+
expect(slackAccountStateSchema.safeParse({ ...account, verificationStatus }).success).toBe(true);
|
|
10
|
+
}
|
|
11
|
+
expect(slackAccountStateSchema.safeParse({ ...account, verificationStatus: "delivered" }).success).toBe(false);
|
|
12
|
+
});
|
|
13
|
+
it("uses readable, valid agent defaults and accepts them atomically with a new Slack draft", () => {
|
|
14
|
+
expect(defaultSlackAppConfiguration("Maya")).toEqual({ appName: "maya-paperclip", botName: "maya", command: "/maya" });
|
|
15
|
+
for (const name of ["Research Lead", "Áda Lovelace", "A.B_C", "", "Very long agent name that needs truncating"]) {
|
|
16
|
+
expect(slackAppConfigurationSchema.safeParse(defaultSlackAppConfiguration(name)).success).toBe(true);
|
|
17
|
+
}
|
|
18
|
+
const request = { provider: "slack", assignedAgentId: "12345678-1234-4123-8123-123456789abc", slackApp: defaultSlackAppConfiguration("Maya") };
|
|
19
|
+
expect(createChatEndpointSchema.safeParse(request).success).toBe(true);
|
|
20
|
+
expect(createChatEndpointSchema.safeParse({ ...request, provider: "discord" }).success).toBe(false);
|
|
21
|
+
});
|
|
22
|
+
const input = { app: { appName: 'Research "Ops"', botName: "research-ops", command: "/research" }, agentName: "Maya", webhookUrl: "https://ingress.example/api/chat-webhooks/public/slack" };
|
|
23
|
+
it("uses identical manual and automatic configuration except the OAuth redirect", () => {
|
|
24
|
+
const manual = buildSlackAppManifest(input);
|
|
25
|
+
const automatic = buildSlackAppManifest({ ...input, redirectUri: "https://board.example/api/chat-slack/oauth/callback" });
|
|
26
|
+
expect(automatic).toEqual({ ...manual, oauth_config: { ...manual.oauth_config, redirect_urls: ["https://board.example/api/chat-slack/oauth/callback"] } });
|
|
27
|
+
expect(manual.features.bot_user.display_name).toBe("research-ops");
|
|
28
|
+
expect(manual.features.slash_commands[0]).toMatchObject({ command: "/research", url: input.webhookUrl, should_escape: false });
|
|
29
|
+
expect(manual.settings.event_subscriptions.request_url).toBe(input.webhookUrl);
|
|
30
|
+
expect(manual.settings.interactivity).toEqual({ is_enabled: true, request_url: input.webhookUrl });
|
|
31
|
+
expect(manual.settings.socket_mode_enabled).toBe(false);
|
|
32
|
+
// The reviewed provider permissions/events stay pinned across both creation paths.
|
|
33
|
+
expect(manual.oauth_config.scopes.bot).toMatchSnapshot();
|
|
34
|
+
expect(manual.settings.event_subscriptions.bot_events).toMatchSnapshot();
|
|
35
|
+
});
|
|
36
|
+
it("rejects arbitrary manifests, scopes, callback destinations, and refresh tokens", () => {
|
|
37
|
+
const request = { requestId: "12345678-1234-4123-8123-123456789abc", credentials: { configurationToken: "temporary" } };
|
|
38
|
+
expect(slackRegistrationSchema.safeParse(request).success).toBe(true);
|
|
39
|
+
for (const key of ["manifest", "scopes", "callbackUri", "configurationRefreshToken", "avatarUrl"])
|
|
40
|
+
expect(slackRegistrationSchema.safeParse({ ...request, [key]: "untrusted" }).success).toBe(false);
|
|
41
|
+
expect(slackRegistrationSchema.safeParse({ ...request, credentials: { ...request.credentials, refreshToken: "untrusted" } }).success).toBe(false);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=slack-app-manifest.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack-app-manifest.test.js","sourceRoot":"","sources":["../src/slack-app-manifest.test.ts"],"names":[],"mappings":"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"}
|
package/dist/slack-tools.js
CHANGED
|
@@ -86,10 +86,10 @@ export const SLACK_TOOLS = [
|
|
|
86
86
|
.describe("Maximum matches per channel in bounded-history mode")
|
|
87
87
|
.optional(),
|
|
88
88
|
}),
|
|
89
|
-
tool("post_message", "chat.postMessage", ["chat:write"], "write", "Send
|
|
89
|
+
tool("post_message", "chat.postMessage", ["chat:write"], "write", "Send an explicitly requested message or thread reply as the bot in an allowed destination. Paperclip delivers the normal final reply to the current chat automatically; do not post a second copy here. Preserve the same idempotency key and arguments on retries; inspect slack_delivery for queued or uncertain operations.", { channel, text, thread_ts: timestamp.optional(), ...write }),
|
|
90
90
|
tool("update_message", "chat.update", ["chat:write"], "write", "Edit a message authored by this bot.", { ...message, text, ...write }),
|
|
91
91
|
tool("delete_message", "chat.delete", ["chat:write"], "approval", "Delete this bot's message after approval.", { ...message, ...write }),
|
|
92
|
-
tool("upload_file", "files.completeUploadExternal", ["files:write"], "write", "Upload
|
|
92
|
+
tool("upload_file", "files.completeUploadExternal", ["files:write"], "write", "Upload an existing task attachment to an explicitly requested allowed Slack destination. Use a Paperclip attachment ID, never a local path or arbitrary URL. For a file requested in the current chat, use its external-chat file-delivery contract instead of uploading a second copy.", {
|
|
93
93
|
channel,
|
|
94
94
|
attachmentId: z.string().uuid(),
|
|
95
95
|
title: text.optional(),
|
package/dist/slack-tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack-tools.js","sourceRoot":"","sources":["../src/slack-tools.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"slack-tools.js","sourceRoot":"","sources":["../src/slack-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const SUBSCRIPTION_CURRENCIES: readonly ["USD", "EUR", "GBP", "CAD", "AUD", "CHF"];
|
|
3
|
+
export declare const subscriptionPriceSchema: z.ZodObject<{
|
|
4
|
+
expectedRevision: z.ZodNumber;
|
|
5
|
+
plan: z.ZodString;
|
|
6
|
+
amountCents: z.ZodNullable<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<string, string | number>>>;
|
|
7
|
+
currency: z.ZodEnum<{
|
|
8
|
+
AUD: "AUD";
|
|
9
|
+
CAD: "CAD";
|
|
10
|
+
CHF: "CHF";
|
|
11
|
+
EUR: "EUR";
|
|
12
|
+
GBP: "GBP";
|
|
13
|
+
USD: "USD";
|
|
14
|
+
}>;
|
|
15
|
+
cadence: z.ZodEnum<{
|
|
16
|
+
month: "month";
|
|
17
|
+
year: "year";
|
|
18
|
+
}>;
|
|
19
|
+
status: z.ZodEnum<{
|
|
20
|
+
active: "active";
|
|
21
|
+
ended: "ended";
|
|
22
|
+
excluded: "excluded";
|
|
23
|
+
}>;
|
|
24
|
+
}, z.core.$strict>;
|
|
25
|
+
export type UpdateSubscriptionPrice = z.input<typeof subscriptionPriceSchema>;
|
|
26
|
+
export declare const mergeSubscriptionsSchema: z.ZodObject<{
|
|
27
|
+
targetId: z.ZodString;
|
|
28
|
+
expectedRevision: z.ZodNumber;
|
|
29
|
+
targetRevision: z.ZodNumber;
|
|
30
|
+
}, z.core.$strict>;
|
|
31
|
+
export interface SubscriptionPlan {
|
|
32
|
+
id: string;
|
|
33
|
+
provider: string;
|
|
34
|
+
name: string;
|
|
35
|
+
monthlyCents: string;
|
|
36
|
+
currency: "USD";
|
|
37
|
+
sourceUrl: string;
|
|
38
|
+
checkedAt: string;
|
|
39
|
+
}
|
|
40
|
+
export declare const SUBSCRIPTION_PLANS: readonly SubscriptionPlan[];
|
|
41
|
+
export declare function subscriptionPlan(provider: string, plan: string | null): SubscriptionPlan | null;
|
|
42
|
+
export declare function monthlySubscriptionCents(amount: string, cadence: "month" | "year"): string;
|
|
43
|
+
export interface SubscriptionPrice {
|
|
44
|
+
revision: number;
|
|
45
|
+
plan: string;
|
|
46
|
+
amountCents: string | null;
|
|
47
|
+
monthlyCents: string | null;
|
|
48
|
+
currency: string;
|
|
49
|
+
cadence: "month" | "year";
|
|
50
|
+
status: "active" | "ended" | "excluded";
|
|
51
|
+
source: "catalog" | "user" | "unknown";
|
|
52
|
+
sourceUrl: string | null;
|
|
53
|
+
effectiveAt: string;
|
|
54
|
+
}
|
|
55
|
+
export interface SubscriptionUsage {
|
|
56
|
+
inputTokens: number;
|
|
57
|
+
cachedInputTokens: number;
|
|
58
|
+
outputTokens: number;
|
|
59
|
+
costCents: string;
|
|
60
|
+
eventCount: number;
|
|
61
|
+
estimatedEventCount: number;
|
|
62
|
+
unpricedEventCount: number;
|
|
63
|
+
}
|
|
64
|
+
export interface SubscriptionAccountReport {
|
|
65
|
+
id: string;
|
|
66
|
+
provider: string;
|
|
67
|
+
name: string;
|
|
68
|
+
ownerUserId: string | null;
|
|
69
|
+
ownerName: string | null;
|
|
70
|
+
shared: boolean;
|
|
71
|
+
identityVerified: boolean;
|
|
72
|
+
detectedPlan: string | null;
|
|
73
|
+
observedAt: string | null;
|
|
74
|
+
lastCheckedAt: string | null;
|
|
75
|
+
refreshStatus: "ok" | "unavailable" | null;
|
|
76
|
+
canEdit: boolean;
|
|
77
|
+
price: SubscriptionPrice;
|
|
78
|
+
usage: SubscriptionUsage;
|
|
79
|
+
agents: {
|
|
80
|
+
id: string;
|
|
81
|
+
name: string;
|
|
82
|
+
}[];
|
|
83
|
+
}
|
|
84
|
+
export interface SubscriptionCostReport {
|
|
85
|
+
canRefresh: boolean;
|
|
86
|
+
/** Current monthly commitment for accounts visible to the caller;
|
|
87
|
+
* independent of the usage date filter. Aggregate run usage is company-wide. */
|
|
88
|
+
asOf: string;
|
|
89
|
+
accounts: SubscriptionAccountReport[];
|
|
90
|
+
monthlyTotals: {
|
|
91
|
+
currency: string;
|
|
92
|
+
amountCents: string;
|
|
93
|
+
estimatedCount: number;
|
|
94
|
+
}[];
|
|
95
|
+
activeCount: number;
|
|
96
|
+
unknownPriceCount: number;
|
|
97
|
+
unidentifiedAccountCount: number;
|
|
98
|
+
api: SubscriptionUsage;
|
|
99
|
+
subscription: SubscriptionUsage;
|
|
100
|
+
/** Other billing types (credits, fixed, or unknown), outside API/subscription totals. */
|
|
101
|
+
unknown: SubscriptionUsage;
|
|
102
|
+
unattributedSubscription: SubscriptionUsage;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=subscriptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../src/subscriptions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { exactCentsSchema } from "./accounting.js";
|
|
3
|
+
import { centsToUnits, unitsToCents } from "./money.js";
|
|
4
|
+
export const SUBSCRIPTION_CURRENCIES = ["USD", "EUR", "GBP", "CAD", "AUD", "CHF"];
|
|
5
|
+
export const subscriptionPriceSchema = z.object({
|
|
6
|
+
expectedRevision: z.number().int().nonnegative(),
|
|
7
|
+
plan: z.string().trim().min(1).max(100),
|
|
8
|
+
amountCents: exactCentsSchema.nullable(),
|
|
9
|
+
currency: z.enum(SUBSCRIPTION_CURRENCIES),
|
|
10
|
+
cadence: z.enum(["month", "year"]),
|
|
11
|
+
status: z.enum(["active", "ended", "excluded"]),
|
|
12
|
+
}).strict();
|
|
13
|
+
export const mergeSubscriptionsSchema = z.object({
|
|
14
|
+
targetId: z.string().uuid(),
|
|
15
|
+
expectedRevision: z.number().int().nonnegative(),
|
|
16
|
+
targetRevision: z.number().int().nonnegative(),
|
|
17
|
+
}).strict();
|
|
18
|
+
// Web list prices, before tax, assuming monthly billing. These are estimates,
|
|
19
|
+
// never invoices. Generic Pro/Max/team entitlements do not identify a price.
|
|
20
|
+
export const SUBSCRIPTION_PLANS = [
|
|
21
|
+
["openai", "free", "ChatGPT Free", "0", "https://learn.chatgpt.com/docs/pricing"],
|
|
22
|
+
["openai", "go", "ChatGPT Go", "800", "https://learn.chatgpt.com/docs/pricing"],
|
|
23
|
+
["openai", "plus", "ChatGPT Plus", "2000", "https://learn.chatgpt.com/docs/pricing"],
|
|
24
|
+
["anthropic", "pro", "Claude Pro", "2000", "https://claude.com/pricing"],
|
|
25
|
+
["anthropic", "max_5x", "Claude Max 5x", "10000", "https://claude.com/pricing"],
|
|
26
|
+
["anthropic", "max_20x", "Claude Max 20x", "20000", "https://claude.com/pricing"],
|
|
27
|
+
["xai", "supergrok", "SuperGrok", "3000", "https://x.ai/pricing"],
|
|
28
|
+
["xai", "supergrok_plus", "SuperGrok Plus", "10000", "https://x.ai/pricing"],
|
|
29
|
+
].map(([provider, id, name, monthlyCents, sourceUrl]) => ({
|
|
30
|
+
provider, id, name, monthlyCents, sourceUrl, currency: "USD", checkedAt: "2026-10-08",
|
|
31
|
+
}));
|
|
32
|
+
export function subscriptionPlan(provider, plan) {
|
|
33
|
+
const key = plan?.trim().toLowerCase().replaceAll(" ", "_");
|
|
34
|
+
return SUBSCRIPTION_PLANS.find(item => item.provider === provider && item.id === key) ?? null;
|
|
35
|
+
}
|
|
36
|
+
export function monthlySubscriptionCents(amount, cadence) {
|
|
37
|
+
const units = centsToUnits(amount);
|
|
38
|
+
return unitsToCents(cadence === "year" ? (units + 6n) / 12n : units);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=subscriptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../src/subscriptions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** The lifecycle controls admission. Execution status describes current work. */
|
|
2
|
+
export declare const AGENT_LIFECYCLE_STATES: readonly ["pending_approval", "preparing", "verifying", "ready", "pausing", "paused", "resuming", "terminating", "cleaning_up", "terminated", "rejected"];
|
|
3
|
+
export type AgentLifecycleState = typeof AGENT_LIFECYCLE_STATES[number];
|
|
4
|
+
export interface AgentLifecycleOperation {
|
|
5
|
+
id: string;
|
|
6
|
+
resumeState?: "preparing" | "verifying" | "ready";
|
|
7
|
+
hostComplete: boolean;
|
|
8
|
+
completedPluginIds: string[];
|
|
9
|
+
leaseOwner?: string;
|
|
10
|
+
leaseUntil?: string;
|
|
11
|
+
retryAt?: string;
|
|
12
|
+
attempts: number;
|
|
13
|
+
responsibleUserId?: string | null;
|
|
14
|
+
}
|
|
15
|
+
export interface AgentLifecycleRequest {
|
|
16
|
+
companyId: string;
|
|
17
|
+
agentId: string;
|
|
18
|
+
operationId: string;
|
|
19
|
+
version: number;
|
|
20
|
+
phase: AgentLifecycleState;
|
|
21
|
+
}
|
|
22
|
+
export interface AgentLifecycleResult {
|
|
23
|
+
operationId: string;
|
|
24
|
+
version: number;
|
|
25
|
+
status: "complete" | "pending";
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=agent-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-lifecycle.d.ts","sourceRoot":"","sources":["../../src/types/agent-lifecycle.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,YACjC,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAC1E,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,CAC1D,CAAC;AACX,MAAM,MAAM,mBAAmB,GAAG,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAExE,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,OAAO,CAAC;IAClD,YAAY,EAAE,OAAO,CAAC;IACtB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,mBAAmB,CAAC;CAC5B;AACD,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;CAChC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** The lifecycle controls admission. Execution status describes current work. */
|
|
2
|
+
export const AGENT_LIFECYCLE_STATES = [
|
|
3
|
+
"pending_approval", "preparing", "verifying", "ready", "pausing", "paused",
|
|
4
|
+
"resuming", "terminating", "cleaning_up", "terminated", "rejected",
|
|
5
|
+
];
|
|
6
|
+
//# sourceMappingURL=agent-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-lifecycle.js","sourceRoot":"","sources":["../../src/types/agent-lifecycle.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ;IAC1E,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU;CAC1D,CAAC"}
|
package/dist/types/agent.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AgentLifecycleState } from "./agent-lifecycle.js";
|
|
1
2
|
import type { AgentAppearance } from "../agent-appearance.js";
|
|
2
3
|
import type { AiConnectionLoginIntent } from "../ai-connections.js";
|
|
3
4
|
import type { AgentAdapterType, PauseReason, AgentRole, AgentStatus } from "../constants.js";
|
|
@@ -70,6 +71,9 @@ export interface Agent {
|
|
|
70
71
|
appearance?: AgentAppearance | null;
|
|
71
72
|
avatarUrl?: string;
|
|
72
73
|
status: AgentStatus;
|
|
74
|
+
lifecycleState?: AgentLifecycleState;
|
|
75
|
+
lifecycleVersion?: number;
|
|
76
|
+
lifecycleError?: string | null;
|
|
73
77
|
reportsTo: string | null;
|
|
74
78
|
capabilities: string | null;
|
|
75
79
|
adapterType: AgentAdapterType;
|
|
@@ -257,4 +261,11 @@ export interface AgentInstructionCandidate {
|
|
|
257
261
|
createdAt: string;
|
|
258
262
|
updatedAt: string;
|
|
259
263
|
}
|
|
264
|
+
/** Public cryptographic identity; private material is runtime-only. */
|
|
265
|
+
export interface AgentPublicIdentity {
|
|
266
|
+
algorithm: "Ed25519";
|
|
267
|
+
keyId: string;
|
|
268
|
+
publicKeyPem: string;
|
|
269
|
+
createdAt: string;
|
|
270
|
+
}
|
|
260
271
|
//# sourceMappingURL=agent.d.ts.map
|