1362 lines
49 KiB
JavaScript
1362 lines
49 KiB
JavaScript
export const setupWizards = [
|
|
{
|
|
provider: "Slack",
|
|
short: "Slack",
|
|
slug: "slack",
|
|
screens: [
|
|
{
|
|
id: "13",
|
|
slug: "slack-add",
|
|
title: "Add Maya to Slack",
|
|
subtitle:
|
|
"Approve one agent installation. Paperclip handles credentials and delivery in the background.",
|
|
rail: ["Agent selected", "Add Maya to Slack", "Try Maya"],
|
|
active: 1,
|
|
mode: "default",
|
|
groups: [
|
|
{
|
|
title: "Agent",
|
|
intro:
|
|
"This connection is permanently assigned to one Paperclip agent.",
|
|
rows: [["Maya", "Support engineer · active", "Locked"]],
|
|
},
|
|
{
|
|
title: "What Slack will ask",
|
|
intro:
|
|
"Slack owns workspace selection, administrator approval, and the final permission screen.",
|
|
rows: [
|
|
[
|
|
"Workspace",
|
|
"Choose the Slack workspace where Maya should appear.",
|
|
"In Slack",
|
|
],
|
|
[
|
|
"Permissions",
|
|
"Review mentions, thread replies, messages, reactions, files, actions, modals, commands, and DMs.",
|
|
"Review in Slack",
|
|
],
|
|
[
|
|
"Installation",
|
|
"Slack returns the authorized agent installation to this Paperclip company.",
|
|
"Automatic return",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "What Paperclip handles",
|
|
intro:
|
|
"No token, signing secret, webhook, relay, or Socket Mode choice appears in this path.",
|
|
rows: [
|
|
[
|
|
"Credentials",
|
|
"Store the returned Slack installation in Paperclip's secret store; never reveal it in connector settings.",
|
|
"Automatic",
|
|
],
|
|
[
|
|
"Delivery",
|
|
"Select and verify the correct callback path for this Paperclip deployment.",
|
|
"Automatic",
|
|
],
|
|
[
|
|
"Capabilities",
|
|
"Enable every safe Slack feature granted by the installation.",
|
|
"Automatic",
|
|
],
|
|
],
|
|
},
|
|
],
|
|
primary: "Add Maya to Slack",
|
|
secondary: "Use a custom Slack app",
|
|
actions: [
|
|
[
|
|
"Add Maya to Slack",
|
|
"Opens Slack's agent-installation authorization, then returns to Paperclip with the scoped installation stored internally.",
|
|
],
|
|
[
|
|
"Use a custom Slack app",
|
|
"Enters the advanced self-hosted/existing-app branch; it does not expose transport choices on this screen.",
|
|
],
|
|
],
|
|
annotations: [
|
|
"The left rail shows the three-step happy path and preserves progress when Slack redirects away and back.",
|
|
"Maya is shown as immutable; there is no Change agent action. Another agent requires another connection.",
|
|
"The external Slack authorization is explained before the one primary action.",
|
|
"Credentials and delivery are explicitly automatic, while custom-app setup is a secondary advanced branch.",
|
|
],
|
|
rationale:
|
|
"The common case is one Slack authorization button, not an infrastructure questionnaire.",
|
|
},
|
|
{
|
|
id: "41",
|
|
slug: "slack-try",
|
|
title: "Try Maya in Slack",
|
|
subtitle:
|
|
"Mention Maya once. Paperclip verifies the real workspace event and creates the first task thread.",
|
|
rail: ["Agent selected", "Add Maya to Slack", "Try Maya"],
|
|
active: 2,
|
|
mode: "default",
|
|
groups: [
|
|
{
|
|
title: "Installation complete",
|
|
intro: "Slack returned a verified installation for this company.",
|
|
rows: [
|
|
["Agent", "Maya · permanently assigned", "Locked"],
|
|
["Workspace", "Acme · @Maya installed", "Connected"],
|
|
[
|
|
"Permission check",
|
|
"All required safe chat capabilities are available.",
|
|
"Passed",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "Start the first task",
|
|
intro: "Use the same behavior people will use after setup.",
|
|
rows: [
|
|
[
|
|
"1. Open a channel",
|
|
"Choose a channel where you are allowed to add or mention apps.",
|
|
"In Slack",
|
|
],
|
|
[
|
|
"2. Mention Maya",
|
|
"Send “@Maya help me investigate this” as a new channel message.",
|
|
"Starts thread",
|
|
],
|
|
[
|
|
"3. Continue in the thread",
|
|
"Maya replies in a new thread; that thread is one Paperclip task.",
|
|
"Expected",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "Live verification",
|
|
intro:
|
|
"Paperclip waits for an actual signed Slack event rather than claiming setup works after a token check.",
|
|
rows: [
|
|
["Workspace event", "No test mention received yet.", "Waiting"],
|
|
[
|
|
"If Maya is not in the channel",
|
|
"Slack prompts you to add the agent; no Paperclip setting is required.",
|
|
"Handled in Slack",
|
|
],
|
|
],
|
|
},
|
|
],
|
|
primary: "Open Slack",
|
|
secondary: "Finish without testing",
|
|
actions: [
|
|
[
|
|
"Open Slack",
|
|
"Opens the installed workspace; Paperclip remains on this step and listens for the first valid event.",
|
|
],
|
|
[
|
|
"Finish without testing",
|
|
"Activates the endpoint with verified installation health and leaves the first-message check visible on Overview.",
|
|
],
|
|
],
|
|
annotations: [
|
|
"Completed rail steps make the Slack redirect and successful return obvious.",
|
|
"Agent, workspace, and capability checks are read-only results—not editable setup options.",
|
|
"The test teaches the Hermes root-mention-to-thread behavior directly.",
|
|
"The first real signed event completes verification; finishing early remains possible without inventing another setup form.",
|
|
],
|
|
rationale:
|
|
"The final step teaches the real interaction and proves inbound delivery with the smallest possible user action.",
|
|
},
|
|
{
|
|
id: "42",
|
|
slug: "slack-custom-create",
|
|
title: "Create a custom Slack app",
|
|
subtitle:
|
|
"Advanced path for self-hosted deployments or organizations that require a customer-owned app.",
|
|
rail: ["Agent selected", "Create Slack app", "Connect app", "Verify"],
|
|
active: 1,
|
|
mode: "advanced",
|
|
groups: [
|
|
{
|
|
title: "Agent",
|
|
intro: "The custom Slack app will always represent this agent.",
|
|
rows: [
|
|
[
|
|
"Maya",
|
|
"Support engineer · a new connection is required for another agent",
|
|
"Locked",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "Paperclip prepared the app",
|
|
intro:
|
|
"A versioned Slack manifest contains the bot name, callback URLs, scopes, events, actions, modals, commands, and files configuration.",
|
|
rows: [
|
|
[
|
|
"App identity",
|
|
"Maya · unique native Slack app and mention",
|
|
"Prepared",
|
|
],
|
|
[
|
|
"Callback",
|
|
"Chosen automatically for this Paperclip deployment.",
|
|
"Prepared",
|
|
],
|
|
[
|
|
"Permissions",
|
|
"Maximum safe Slack chat capability set; no tool permissions.",
|
|
"Prepared",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "Create it in Slack",
|
|
intro:
|
|
"The shared manifest URL opens Slack with the configuration prefilled; there is no copy-and-paste step.",
|
|
rows: [
|
|
[
|
|
"Workspace owner",
|
|
"Slack may require an app manager or administrator to approve creation.",
|
|
"Provider policy",
|
|
],
|
|
[
|
|
"After creation",
|
|
"Return here for the two values Slack cannot send back through this custom-app path.",
|
|
"Next step",
|
|
],
|
|
],
|
|
},
|
|
],
|
|
primary: "Open prefilled Slack setup",
|
|
secondary: "Back to Add to Slack",
|
|
actions: [
|
|
[
|
|
"Open prefilled Slack setup",
|
|
"Opens Slack's app-from-manifest URL with Paperclip's generated manifest already encoded.",
|
|
],
|
|
[
|
|
"Back to Add to Slack",
|
|
"Returns to the managed/default installation path without losing the selected agent.",
|
|
],
|
|
],
|
|
annotations: [
|
|
"The rail clearly marks this as a separate custom-app branch.",
|
|
"Agent assignment remains immutable in the advanced path.",
|
|
"Paperclip precomputes identity, callbacks, permissions, and events; none become user choices.",
|
|
"One external action replaces the old manifest copy, delivery selection, and provider-configuration rows.",
|
|
],
|
|
rationale:
|
|
"A custom app remains possible, but Paperclip collapses it to the provider action that only the customer can perform.",
|
|
},
|
|
{
|
|
id: "43",
|
|
slug: "slack-custom-connect",
|
|
title: "Connect the custom Slack app",
|
|
subtitle:
|
|
"Provide only the two secrets Slack cannot return to Paperclip for a customer-owned app.",
|
|
rail: ["Agent selected", "Create Slack app", "Connect app", "Verify"],
|
|
active: 2,
|
|
mode: "advanced",
|
|
fields: [
|
|
[
|
|
"Bot token",
|
|
"xoxb-••••••••",
|
|
"Used to publish as Maya and call the Slack Web API.",
|
|
],
|
|
[
|
|
"Signing secret",
|
|
"••••••••••••",
|
|
"Used to verify that inbound HTTP events and interactions came from Slack.",
|
|
],
|
|
],
|
|
groups: [
|
|
{
|
|
title: "Stored securely",
|
|
intro:
|
|
"Values are submitted once into Paperclip's secret store. Connector rows retain only secret references and redacted suffixes.",
|
|
rows: [
|
|
[
|
|
"Who can view them",
|
|
"No user can reveal the stored value from this connector after saving.",
|
|
"Write only",
|
|
],
|
|
[
|
|
"Rotation",
|
|
"Replace either secret later without changing Maya's tasks or Slack thread bindings.",
|
|
"Supported",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "Not requested",
|
|
intro: "The manifest already configured these values at Slack.",
|
|
rows: [
|
|
[
|
|
"Webhook URL",
|
|
"Generated and embedded automatically.",
|
|
"Hidden",
|
|
],
|
|
[
|
|
"Delivery mode",
|
|
"Chosen from instance reachability; not an endpoint preference.",
|
|
"Automatic",
|
|
],
|
|
[
|
|
"App token",
|
|
"Not needed for the normal webhook/relay path.",
|
|
"Not requested",
|
|
],
|
|
],
|
|
},
|
|
],
|
|
primary: "Save and verify",
|
|
secondary: "Back",
|
|
actions: [
|
|
[
|
|
"Save and verify",
|
|
"Writes both values to the secret store, calls Slack auth.test, validates expected scopes, and advances to verification.",
|
|
],
|
|
[
|
|
"Back",
|
|
"Returns to the manifest step without persisting partially entered secrets.",
|
|
],
|
|
],
|
|
annotations: [
|
|
"Only provider credentials that cannot be recovered automatically are shown.",
|
|
"Help text explains exactly why Paperclip needs each secret.",
|
|
"Webhook, relay, Socket Mode, and app-token choices are absent from endpoint onboarding.",
|
|
"Saving is write-only and immediately followed by provider verification.",
|
|
],
|
|
rationale:
|
|
"Customer-owned Slack apps require credentials, but the form is limited to the irreducible two values.",
|
|
},
|
|
{
|
|
id: "44",
|
|
slug: "slack-custom-verify",
|
|
title: "Verify the custom Slack app",
|
|
subtitle:
|
|
"Paperclip checks identity, callbacks, permissions, and installation before activation.",
|
|
rail: ["Agent selected", "Create Slack app", "Connect app", "Verify"],
|
|
active: 3,
|
|
mode: "advanced",
|
|
groups: [
|
|
{
|
|
title: "Verification results",
|
|
intro:
|
|
"Each check has one provider-specific remediation rather than another configuration panel.",
|
|
rows: [
|
|
[
|
|
"Bot identity",
|
|
"auth.test returned Maya in the Acme workspace.",
|
|
"Passed",
|
|
],
|
|
[
|
|
"Request verification",
|
|
"Signing challenge and timestamp validation succeeded.",
|
|
"Passed",
|
|
],
|
|
[
|
|
"Scopes and features",
|
|
"Messages, threads, reactions, files, actions, modals, commands, and DMs.",
|
|
"Passed",
|
|
],
|
|
[
|
|
"Event subscriptions",
|
|
"Mention, message, interaction, and command callbacks reach Paperclip.",
|
|
"Passed",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "Delivery selected automatically",
|
|
intro:
|
|
"Public instances use the verified callback directly; private instances use the configured outbound relay. Socket Mode is an instance-admin escape hatch only.",
|
|
rows: [["This instance", "Verified public callback", "Healthy"]],
|
|
},
|
|
],
|
|
primary: "Activate Maya",
|
|
secondary: "Back",
|
|
actions: [
|
|
[
|
|
"Activate Maya",
|
|
"Marks the endpoint active and opens the ordinary Slack connector Overview.",
|
|
],
|
|
[
|
|
"Back",
|
|
"Returns to credential entry; existing verified secret references remain selected.",
|
|
],
|
|
],
|
|
annotations: [
|
|
"All prior custom-app phases remain visible in the completed rail.",
|
|
"Checks are results with direct remediation, not setup toggles.",
|
|
"The chosen delivery path is disclosed but cannot be changed from the endpoint wizard.",
|
|
"Activation is the only primary action after every required check passes.",
|
|
],
|
|
rationale:
|
|
"The advanced path ends with evidence, while transport mechanics remain owned by the deployment.",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
provider: "GitHub",
|
|
short: "GitHub",
|
|
slug: "github",
|
|
screens: [
|
|
{
|
|
id: "16",
|
|
slug: "github-create",
|
|
title: "Create Maya in GitHub",
|
|
subtitle:
|
|
"GitHub creates a dedicated App from Paperclip's manifest and returns its credentials automatically.",
|
|
rail: [
|
|
"Agent selected",
|
|
"Create GitHub App",
|
|
"Choose repositories",
|
|
"Try Maya",
|
|
],
|
|
active: 1,
|
|
mode: "default",
|
|
groups: [
|
|
{
|
|
title: "Agent",
|
|
intro:
|
|
"The GitHub App is permanently assigned to this Paperclip agent.",
|
|
rows: [
|
|
[
|
|
"Maya",
|
|
"Support engineer · separate from Maya's GitHub tool connection",
|
|
"Locked",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "What GitHub will create",
|
|
intro:
|
|
"Paperclip submits an App Manifest; GitHub shows the owner and app-name confirmation.",
|
|
rows: [
|
|
[
|
|
"App identity",
|
|
"paperclip-maya[bot] · native mention and avatar",
|
|
"Dedicated",
|
|
],
|
|
[
|
|
"Chat permissions",
|
|
"Issues write · Pull requests write · Metadata read",
|
|
"Least privilege",
|
|
],
|
|
[
|
|
"Events",
|
|
"Issue comments and pull-request review comments",
|
|
"Prepared",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "What returns automatically",
|
|
intro:
|
|
"GitHub redirects with a one-time code that Paperclip exchanges within the provider deadline.",
|
|
rows: [
|
|
[
|
|
"App ID and private key",
|
|
"Stored directly in Paperclip's secret store.",
|
|
"Automatic",
|
|
],
|
|
[
|
|
"Webhook secret",
|
|
"Stored directly and used for signature verification.",
|
|
"Automatic",
|
|
],
|
|
[
|
|
"Code access",
|
|
"Contents and Actions are intentionally absent; use a separate tool connection.",
|
|
"Not granted",
|
|
],
|
|
],
|
|
},
|
|
],
|
|
primary: "Create in GitHub",
|
|
secondary: "Use an existing GitHub App",
|
|
actions: [
|
|
[
|
|
"Create in GitHub",
|
|
"Posts Paperclip's manifest to GitHub; GitHub confirms the App, redirects back, and Paperclip exchanges the one-time code for credentials.",
|
|
],
|
|
[
|
|
"Use an existing GitHub App",
|
|
"Opens the advanced credential form for an App the company already owns.",
|
|
],
|
|
],
|
|
annotations: [
|
|
"The wizard rail follows provider handoffs and keeps the selected agent visible.",
|
|
"Maya is immutable and chat-purpose GitHub access is explicitly separate from tool-purpose access.",
|
|
"The manifest fixes permissions and events instead of asking the operator to configure them.",
|
|
"Default App credentials return server-to-server; only the existing-App branch exposes fields.",
|
|
],
|
|
rationale:
|
|
"GitHub's App Manifest flow removes nearly every manual setup row while preserving a dedicated native bot.",
|
|
},
|
|
{
|
|
id: "45",
|
|
slug: "github-install",
|
|
title: "Choose GitHub repositories",
|
|
subtitle:
|
|
"Install Maya on an organization or account, then choose all or selected repositories in GitHub.",
|
|
rail: [
|
|
"Agent selected",
|
|
"Create GitHub App",
|
|
"Choose repositories",
|
|
"Try Maya",
|
|
],
|
|
active: 2,
|
|
mode: "default",
|
|
groups: [
|
|
{
|
|
title: "App created",
|
|
intro:
|
|
"GitHub returned the dedicated App configuration successfully.",
|
|
rows: [
|
|
["Agent", "Maya · permanently assigned", "Locked"],
|
|
["GitHub App", "paperclip-maya[bot]", "Created"],
|
|
["Webhook", "Signed delivery endpoint", "Verified"],
|
|
],
|
|
},
|
|
{
|
|
title: "Install it in GitHub",
|
|
intro:
|
|
"GitHub owns organization approval and repository selection.",
|
|
rows: [
|
|
[
|
|
"Account or organization",
|
|
"Choose the GitHub owner where people will mention Maya.",
|
|
"In GitHub",
|
|
],
|
|
[
|
|
"Repository access",
|
|
"Choose all repositories or a selected set; Paperclip can narrow this later.",
|
|
"In GitHub",
|
|
],
|
|
[
|
|
"Permissions",
|
|
"Review the prepared Issues, Pull requests, and Metadata grant.",
|
|
"In GitHub",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "What returns",
|
|
intro:
|
|
"The installation callback contains an installation ID, not another long-lived credential for the user to copy.",
|
|
rows: [
|
|
[
|
|
"Installation",
|
|
"Paperclip links the App installation to this endpoint.",
|
|
"Automatic return",
|
|
],
|
|
[
|
|
"Repository inventory",
|
|
"Paperclip reads the installed repository IDs and labels.",
|
|
"Automatic",
|
|
],
|
|
],
|
|
},
|
|
],
|
|
primary: "Install in GitHub",
|
|
secondary: "Back",
|
|
actions: [
|
|
[
|
|
"Install in GitHub",
|
|
"Opens the GitHub App installation page; GitHub collects owner/repository approval and returns the installation ID.",
|
|
],
|
|
[
|
|
"Back",
|
|
"Returns to App creation without deleting the already-created GitHub App.",
|
|
],
|
|
],
|
|
annotations: [
|
|
"The App-creation phase is complete before repository installation begins.",
|
|
"The agent and App identity are read-only results.",
|
|
"All organization and repository choices happen at GitHub, where policy and approval live.",
|
|
"Paperclip receives the installation ID and repository inventory automatically.",
|
|
],
|
|
rationale:
|
|
"Repository scope is the only meaningful default-flow choice, and GitHub already owns its UI.",
|
|
},
|
|
{
|
|
id: "46",
|
|
slug: "github-try",
|
|
title: "Try Maya in GitHub",
|
|
subtitle:
|
|
"Mention Maya in an allowed issue, pull-request conversation, or review thread.",
|
|
rail: [
|
|
"Agent selected",
|
|
"Create GitHub App",
|
|
"Choose repositories",
|
|
"Try Maya",
|
|
],
|
|
active: 3,
|
|
mode: "default",
|
|
groups: [
|
|
{
|
|
title: "Installation complete",
|
|
intro:
|
|
"Paperclip verified the App, installation, selected repositories, events, and signatures.",
|
|
rows: [
|
|
["Agent", "Maya · permanently assigned", "Locked"],
|
|
["Installation", "Acme · acme/api and acme/web", "Connected"],
|
|
[
|
|
"Permissions",
|
|
"Chat-only; no repository code authority",
|
|
"Passed",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "Start the first task",
|
|
intro:
|
|
"Use an existing GitHub conversation; Paperclip does not create a second native thread.",
|
|
rows: [
|
|
[
|
|
"1. Open an issue or PR",
|
|
"Use either installed repository.",
|
|
"In GitHub",
|
|
],
|
|
[
|
|
"2. Mention the App",
|
|
"Comment “@paperclip-maya investigate this.”",
|
|
"Starts task",
|
|
],
|
|
[
|
|
"3. Watch the comment",
|
|
"Maya reacts, posts progress, and edits the final GFM response.",
|
|
"Expected",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "Live verification",
|
|
intro:
|
|
"The first signed webhook proves the selected installation and native conversation boundary.",
|
|
rows: [
|
|
["GitHub delivery", "No test mention received yet.", "Waiting"],
|
|
],
|
|
},
|
|
],
|
|
primary: "Open GitHub",
|
|
secondary: "Finish without testing",
|
|
actions: [
|
|
[
|
|
"Open GitHub",
|
|
"Opens an installed repository while Paperclip waits for the first signed mention event.",
|
|
],
|
|
[
|
|
"Finish without testing",
|
|
"Activates the endpoint and leaves the first-delivery check visible on Overview.",
|
|
],
|
|
],
|
|
annotations: [
|
|
"All setup phases remain visible and resumable.",
|
|
"Installation scope and chat-only authority are confirmed before testing.",
|
|
"The test covers issue, PR, and review-thread behavior without manufacturing a separate GitHub thread.",
|
|
"A real signed webhook completes verification; the endpoint may still be finished for later testing.",
|
|
],
|
|
rationale:
|
|
"Testing teaches the native object binding while proving the provider's actual delivery path.",
|
|
},
|
|
{
|
|
id: "47",
|
|
slug: "github-existing",
|
|
title: "Connect an existing GitHub App",
|
|
subtitle:
|
|
"Advanced path for organizations that already own and govern the dedicated chat App.",
|
|
rail: [
|
|
"Agent selected",
|
|
"Connect existing App",
|
|
"Choose repositories",
|
|
"Try Maya",
|
|
],
|
|
active: 1,
|
|
mode: "advanced",
|
|
fields: [
|
|
[
|
|
"GitHub App ID",
|
|
"123456",
|
|
"Identifies the customer-owned App registration.",
|
|
],
|
|
[
|
|
"Private key",
|
|
"Choose PEM file",
|
|
"Signs installation-token requests; uploaded once into the secret store.",
|
|
],
|
|
[
|
|
"Webhook secret",
|
|
"••••••••••••",
|
|
"Verifies inbound GitHub webhook signatures.",
|
|
],
|
|
[
|
|
"GitHub host",
|
|
"https://github.com",
|
|
"Change only for GitHub Enterprise Server.",
|
|
],
|
|
],
|
|
groups: [
|
|
{
|
|
title: "Required App configuration",
|
|
intro:
|
|
"Paperclip verifies rather than asks the user to re-enter provider configuration.",
|
|
rows: [
|
|
[
|
|
"Webhook and events",
|
|
"Paperclip callback · issue comments · PR review comments",
|
|
"Will verify",
|
|
],
|
|
[
|
|
"Permissions",
|
|
"Issues write · Pull requests write · Metadata read",
|
|
"Will verify",
|
|
],
|
|
[
|
|
"Code access",
|
|
"Contents and Actions remain a separate tool connection.",
|
|
"Not used",
|
|
],
|
|
],
|
|
},
|
|
],
|
|
primary: "Connect and verify",
|
|
secondary: "Back to manifest flow",
|
|
actions: [
|
|
[
|
|
"Connect and verify",
|
|
"Stores the private key and webhook secret, authenticates as the App, and verifies permissions/events before repository installation.",
|
|
],
|
|
[
|
|
"Back to manifest flow",
|
|
"Returns to the default credential-free App Manifest path.",
|
|
],
|
|
],
|
|
annotations: [
|
|
"The existing-App rail is a distinct advanced branch.",
|
|
"Only App ID, private key, webhook secret, and optional GHES host are requested.",
|
|
"Paperclip verifies events and permissions instead of adding more setup switches.",
|
|
"The primary action stores write-only secrets and proves App authentication before continuing.",
|
|
],
|
|
rationale:
|
|
"Existing Apps cannot use the one-time manifest exchange, so these credentials are irreducible.",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
provider: "Microsoft Teams",
|
|
short: "Teams",
|
|
slug: "teams",
|
|
screens: [
|
|
{
|
|
id: "19",
|
|
slug: "teams-register",
|
|
title: "Register Maya for Microsoft Teams",
|
|
subtitle:
|
|
"Run one guided Microsoft command to create the customer-owned bot identity and point it at Paperclip.",
|
|
rail: [
|
|
"Agent selected",
|
|
"Register Teams bot",
|
|
"Connect identity",
|
|
"Install app",
|
|
"Try Maya",
|
|
],
|
|
active: 1,
|
|
mode: "default",
|
|
groups: [
|
|
{
|
|
title: "Agent",
|
|
intro:
|
|
"The Microsoft bot and Teams app package are permanently assigned to this agent.",
|
|
rows: [
|
|
[
|
|
"Maya",
|
|
"Support engineer · a new connection is required for another agent",
|
|
"Locked",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "Recommended Microsoft setup",
|
|
intro:
|
|
"Teams Developer CLI creates the Entra App, Azure Bot resource, Teams channel, and install metadata with Microsoft-owned sign-in and policy checks.",
|
|
rows: [
|
|
[
|
|
"Prerequisites",
|
|
"Microsoft 365 account, Azure subscription, and permission to create the resources.",
|
|
"Required",
|
|
],
|
|
[
|
|
"Messaging endpoint",
|
|
"Paperclip generated the verified endpoint used by the command.",
|
|
"Prepared",
|
|
],
|
|
[
|
|
"Tenant policy",
|
|
"The CLI reports when custom-app upload or resource creation needs an administrator.",
|
|
"Checked by Microsoft",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "What the command does",
|
|
intro:
|
|
"The copied command contains Maya's name and Paperclip endpoint; it never contains a Paperclip secret.",
|
|
rows: [
|
|
[
|
|
"Microsoft sign-in",
|
|
"The CLI asks Microsoft to authenticate the operator.",
|
|
"External",
|
|
],
|
|
[
|
|
"Resource creation",
|
|
"Creates one single-tenant bot identity and enables the Teams channel.",
|
|
"External",
|
|
],
|
|
[
|
|
"Credential output",
|
|
"Writes Client ID, Tenant ID, and a generated secret for the next step.",
|
|
"Local output",
|
|
],
|
|
],
|
|
},
|
|
],
|
|
primary: "Copy setup command",
|
|
secondary: "Use Azure Portal instead",
|
|
actions: [
|
|
[
|
|
"Copy setup command",
|
|
"Copies the generated Teams Developer CLI command; the user runs it locally so Microsoft owns authentication and resource provisioning.",
|
|
],
|
|
[
|
|
"Use Azure Portal instead",
|
|
"Opens detailed manual instructions for locked-down tenants; it produces the same three required identity values.",
|
|
],
|
|
],
|
|
annotations: [
|
|
"The five-step rail reflects the irreducible Microsoft registration and package lifecycle.",
|
|
"Maya is shown as immutable before any Microsoft resources are created.",
|
|
"The recommended CLI path collapses Entra, Azure Bot, channel, endpoint, and policy setup into one provider-owned command.",
|
|
"Manual Azure Portal work is a secondary path, not a competing set of first-page options.",
|
|
],
|
|
rationale:
|
|
"Microsoft requires customer-owned bot infrastructure today, so simplification means one guided command rather than pretending credentials do not exist.",
|
|
},
|
|
{
|
|
id: "48",
|
|
slug: "teams-identity",
|
|
title: "Connect the Microsoft bot identity",
|
|
subtitle:
|
|
"Paste the three values created by Microsoft so Paperclip can authenticate as Maya.",
|
|
rail: [
|
|
"Agent selected",
|
|
"Register Teams bot",
|
|
"Connect identity",
|
|
"Install app",
|
|
"Try Maya",
|
|
],
|
|
active: 2,
|
|
mode: "default",
|
|
fields: [
|
|
[
|
|
"Application (client) ID",
|
|
"00000000-0000-0000-0000-000000000000",
|
|
"Identifies Maya's Entra application and Azure Bot.",
|
|
],
|
|
[
|
|
"Directory (tenant) ID",
|
|
"00000000-0000-0000-0000-000000000000",
|
|
"Limits the bot to the company tenant.",
|
|
],
|
|
[
|
|
"Client secret",
|
|
"••••••••••••",
|
|
"Lets Paperclip authenticate outbound bot messages; stored write-only.",
|
|
],
|
|
],
|
|
groups: [
|
|
{
|
|
title: "Why these values are visible",
|
|
intro:
|
|
"Microsoft created a customer-owned identity. It does not send those credentials to Paperclip through an installation callback.",
|
|
rows: [
|
|
[
|
|
"Storage",
|
|
"Client secret enters Paperclip's secret store; configuration keeps only its reference.",
|
|
"Write only",
|
|
],
|
|
[
|
|
"Rotation",
|
|
"A replacement secret can be saved later without changing task bindings.",
|
|
"Supported",
|
|
],
|
|
[
|
|
"Managed identity",
|
|
"Available only when the Paperclip deployment already runs with a compatible Azure identity.",
|
|
"Instance advanced",
|
|
],
|
|
],
|
|
},
|
|
],
|
|
primary: "Save and verify",
|
|
secondary: "Back",
|
|
actions: [
|
|
[
|
|
"Save and verify",
|
|
"Stores the secret, requests a Microsoft bot token, and verifies tenant, bot identity, and messaging endpoint.",
|
|
],
|
|
[
|
|
"Back",
|
|
"Returns to the registration instructions without persisting partial fields.",
|
|
],
|
|
],
|
|
annotations: [
|
|
"The completed registration step remains visible in the rail.",
|
|
"Exactly three Microsoft values are requested, each with a reason.",
|
|
"Secret storage and rotation are explained; managed identity is moved to instance-level advanced setup.",
|
|
"One save action both persists and proves the identity before package generation.",
|
|
],
|
|
rationale:
|
|
"These credentials are required because Microsoft does not provide a GitHub-style manifest callback for the customer-owned bot.",
|
|
},
|
|
{
|
|
id: "49",
|
|
slug: "teams-install",
|
|
title: "Install Maya in Microsoft Teams",
|
|
subtitle:
|
|
"Download the generated app package and let Microsoft apply tenant and scope policy.",
|
|
rail: [
|
|
"Agent selected",
|
|
"Register Teams bot",
|
|
"Connect identity",
|
|
"Install app",
|
|
"Try Maya",
|
|
],
|
|
active: 3,
|
|
mode: "default",
|
|
groups: [
|
|
{
|
|
title: "Package ready",
|
|
intro:
|
|
"Paperclip inserted Maya's immutable identity, bot App ID, supported scopes, commands, and icons into a validated Teams package.",
|
|
rows: [
|
|
["Agent", "Maya · permanently assigned", "Locked"],
|
|
["Package", "maya-paperclip-teams.zip", "Validated"],
|
|
["Scopes", "Personal, team, and group chat", "Included"],
|
|
],
|
|
},
|
|
{
|
|
title: "Install through Microsoft Teams",
|
|
intro:
|
|
"Tenant policy determines whether the operator can upload directly or must send the package to an administrator.",
|
|
rows: [
|
|
[
|
|
"Self-service tenant",
|
|
"Upload the package under Manage your apps, then add it to the intended scope.",
|
|
"In Teams",
|
|
],
|
|
[
|
|
"Admin-managed tenant",
|
|
"Send the same package to the Teams administrator for approval and distribution.",
|
|
"Admin action",
|
|
],
|
|
[
|
|
"No extra credentials",
|
|
"The package contains public IDs and presentation metadata, not the client secret.",
|
|
"Safe to share",
|
|
],
|
|
],
|
|
},
|
|
],
|
|
primary: "Download Teams package",
|
|
secondary: "Open Teams",
|
|
actions: [
|
|
[
|
|
"Download Teams package",
|
|
"Downloads the validated ZIP containing manifest.json and the required icons; it contains no secret.",
|
|
],
|
|
[
|
|
"Open Teams",
|
|
"Opens Manage your apps so the operator can upload/install, subject to tenant policy.",
|
|
],
|
|
],
|
|
annotations: [
|
|
"Registration and identity steps are complete before a package can be generated.",
|
|
"Agent, package name, validation, and scopes are read-only.",
|
|
"The screen branches only on Microsoft tenant policy, not Paperclip preferences.",
|
|
"The two actions correspond to the two external operations: obtain the package, then install it.",
|
|
],
|
|
rationale:
|
|
"Teams package installation is provider-owned and cannot be collapsed into the credential step without hiding tenant policy.",
|
|
},
|
|
{
|
|
id: "50",
|
|
slug: "teams-try",
|
|
title: "Try Maya in Microsoft Teams",
|
|
subtitle:
|
|
"Mention Maya in an installed channel post or start a personal chat.",
|
|
rail: [
|
|
"Agent selected",
|
|
"Register Teams bot",
|
|
"Connect identity",
|
|
"Install app",
|
|
"Try Maya",
|
|
],
|
|
active: 4,
|
|
mode: "default",
|
|
groups: [
|
|
{
|
|
title: "Installation checks",
|
|
intro:
|
|
"Paperclip verifies Microsoft identity and waits for the installed package to deliver a real activity.",
|
|
rows: [
|
|
["Agent", "Maya · permanently assigned", "Locked"],
|
|
["Bot authentication", "Single tenant · Acme", "Passed"],
|
|
[
|
|
"Messaging endpoint",
|
|
"Authenticated Bot Framework activity",
|
|
"Passed",
|
|
],
|
|
[
|
|
"Teams installation",
|
|
"No message received from an installed scope yet.",
|
|
"Waiting",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "Start the first task",
|
|
intro: "The test reflects the conversation type people will use.",
|
|
rows: [
|
|
[
|
|
"Channel",
|
|
"Create a new post with @Maya; its replies become one Paperclip task.",
|
|
"Post thread",
|
|
],
|
|
[
|
|
"Personal or group chat",
|
|
"Send a message; the conversation exposes one active Paperclip task.",
|
|
"Active task",
|
|
],
|
|
[
|
|
"Unmentioned channel replies",
|
|
"Paperclip detects actual manifest/RSC delivery and explains if another mention is required.",
|
|
"Verified live",
|
|
],
|
|
],
|
|
},
|
|
],
|
|
primary: "Open Microsoft Teams",
|
|
secondary: "Finish without testing",
|
|
actions: [
|
|
[
|
|
"Open Microsoft Teams",
|
|
"Opens Teams while Paperclip waits for the first authenticated activity from an installed scope.",
|
|
],
|
|
[
|
|
"Finish without testing",
|
|
"Activates the endpoint and leaves package/install delivery health visible on Overview.",
|
|
],
|
|
],
|
|
annotations: [
|
|
"The rail shows every completed Microsoft-owned phase.",
|
|
"Identity and endpoint checks are complete before installation delivery is claimed.",
|
|
"Channel-thread and linear-chat boundaries are tested separately in plain language.",
|
|
"Live delivery establishes actual mention/RSC behavior rather than assuming it from the package.",
|
|
],
|
|
rationale:
|
|
"A real Teams activity is the only reliable final proof of package installation and conversation delivery.",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
provider: "Telegram",
|
|
short: "Telegram",
|
|
slug: "telegram",
|
|
screens: [
|
|
{
|
|
id: "22",
|
|
slug: "telegram-create",
|
|
title: "Create Maya with BotFather",
|
|
subtitle:
|
|
"Create one Telegram bot and paste the token BotFather gives you.",
|
|
rail: [
|
|
"Agent selected",
|
|
"Create Telegram bot",
|
|
"Add to chats",
|
|
"Try Maya",
|
|
],
|
|
active: 1,
|
|
mode: "default",
|
|
fields: [
|
|
[
|
|
"Bot token",
|
|
"123456:••••••••••••",
|
|
"Telegram has no installation callback; this one-time token is required to connect the bot.",
|
|
],
|
|
],
|
|
groups: [
|
|
{
|
|
title: "Agent",
|
|
intro:
|
|
"The Telegram bot is permanently assigned to this Paperclip agent.",
|
|
rows: [
|
|
[
|
|
"Maya",
|
|
"Support engineer · a new connection is required for another agent",
|
|
"Locked",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "Create the bot in Telegram",
|
|
intro: "BotFather owns bot creation and username uniqueness.",
|
|
rows: [
|
|
[
|
|
"1. Open BotFather",
|
|
"Send /newbot and follow Telegram's prompts.",
|
|
"In Telegram",
|
|
],
|
|
[
|
|
"2. Name the bot",
|
|
"Use Maya and choose an available username such as @maya_acme_bot.",
|
|
"In Telegram",
|
|
],
|
|
[
|
|
"3. Copy the token",
|
|
"Treat it like a password and paste it in the field above.",
|
|
"Required",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "What Paperclip handles",
|
|
intro: "The token is enough for Paperclip to configure the rest.",
|
|
rows: [
|
|
[
|
|
"Identity",
|
|
"Call getMe and store the stable numeric bot ID and username.",
|
|
"Automatic",
|
|
],
|
|
[
|
|
"Delivery",
|
|
"Configure a verified webhook or the deployment's relay; local developer polling is automatic.",
|
|
"Automatic",
|
|
],
|
|
[
|
|
"Commands and capabilities",
|
|
"Register commands and use the maximum safe Telegram feature set.",
|
|
"Automatic",
|
|
],
|
|
],
|
|
},
|
|
],
|
|
primary: "Connect bot",
|
|
secondary: "Open BotFather",
|
|
actions: [
|
|
[
|
|
"Connect bot",
|
|
"Stores the token write-only, calls getMe, configures the deployment-selected delivery path, and registers supported commands.",
|
|
],
|
|
[
|
|
"Open BotFather",
|
|
"Opens Telegram's verified BotFather conversation; it cannot return the token to Paperclip automatically.",
|
|
],
|
|
],
|
|
annotations: [
|
|
"The rail shows Telegram's short four-step path.",
|
|
"Maya is read-only and another agent requires another connection.",
|
|
"The sole credential field is explained as a BotFather platform limitation.",
|
|
"Webhook, relay, polling, commands, and capabilities are configured automatically after the token is saved.",
|
|
],
|
|
rationale:
|
|
"Telegram has no OAuth-style bot installation, so one token field is irreducible while every other setup choice disappears.",
|
|
},
|
|
{
|
|
id: "51",
|
|
slug: "telegram-add",
|
|
title: "Add Maya to Telegram chats",
|
|
subtitle:
|
|
"Open Maya's Telegram profile, then add the bot wherever people should start tasks.",
|
|
rail: [
|
|
"Agent selected",
|
|
"Create Telegram bot",
|
|
"Add to chats",
|
|
"Try Maya",
|
|
],
|
|
active: 2,
|
|
mode: "default",
|
|
groups: [
|
|
{
|
|
title: "Bot connected",
|
|
intro:
|
|
"Paperclip verified the BotFather token and configured delivery automatically.",
|
|
rows: [
|
|
["Agent", "Maya · permanently assigned", "Locked"],
|
|
[
|
|
"Telegram identity",
|
|
"@maya_acme_bot · numeric ID verified",
|
|
"Connected",
|
|
],
|
|
[
|
|
"Delivery",
|
|
"Verified webhook selected for this deployment",
|
|
"Healthy",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "Choose reach in Telegram",
|
|
intro:
|
|
"Telegram owns chat membership; Paperclip learns stable IDs when the bot receives an addressed message.",
|
|
rows: [
|
|
[
|
|
"Direct messages",
|
|
"Anyone who opens the bot can start an active task, subject to Paperclip access policy.",
|
|
"Available",
|
|
],
|
|
[
|
|
"Groups",
|
|
"Add Maya to a group; keep BotFather privacy mode on.",
|
|
"In Telegram",
|
|
],
|
|
[
|
|
"Forum topics",
|
|
"Add Maya to the forum; an addressed topic message establishes the stable topic binding.",
|
|
"In Telegram",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "No admin rights by default",
|
|
intro:
|
|
"Ordinary conversation does not need topic creation, member management, or broad group visibility.",
|
|
rows: [
|
|
[
|
|
"Privacy mode",
|
|
"Unrelated group traffic is not delivered to Maya.",
|
|
"Keep on",
|
|
],
|
|
[
|
|
"Admin upgrade",
|
|
"Request only later if a separately planned capability truly requires it.",
|
|
"Not requested",
|
|
],
|
|
],
|
|
},
|
|
],
|
|
primary: "Open Maya in Telegram",
|
|
secondary: "Continue",
|
|
actions: [
|
|
[
|
|
"Open Maya in Telegram",
|
|
"Opens the bot deep link so the operator can start a DM or add it to a group/forum.",
|
|
],
|
|
[
|
|
"Continue",
|
|
"Advances to live verification; Paperclip does not require pre-entered numeric chat IDs during setup.",
|
|
],
|
|
],
|
|
annotations: [
|
|
"Bot creation is complete before provider-owned chat membership begins.",
|
|
"Agent, Telegram identity, and delivery are read-only results.",
|
|
"DM, group, and forum reach are described without asking for numeric IDs.",
|
|
"Privacy remains on and admin rights are intentionally excluded from initial setup.",
|
|
],
|
|
rationale:
|
|
"People choose Telegram reach by adding the bot in Telegram, not by configuring a Paperclip allowlist before any chat IDs exist.",
|
|
},
|
|
{
|
|
id: "52",
|
|
slug: "telegram-try",
|
|
title: "Try Maya in Telegram",
|
|
subtitle:
|
|
"Send one addressed message so Paperclip can verify the bot, chat, and task boundary.",
|
|
rail: [
|
|
"Agent selected",
|
|
"Create Telegram bot",
|
|
"Add to chats",
|
|
"Try Maya",
|
|
],
|
|
active: 3,
|
|
mode: "default",
|
|
groups: [
|
|
{
|
|
title: "Connection checks",
|
|
intro:
|
|
"Provider identity, delivery, and privacy are ready before the first task.",
|
|
rows: [
|
|
["Agent", "Maya · permanently assigned", "Locked"],
|
|
["Bot API", "getMe and command registration", "Passed"],
|
|
[
|
|
"Delivery",
|
|
"Secret-token webhook · zero pending updates",
|
|
"Passed",
|
|
],
|
|
[
|
|
"First addressed update",
|
|
"No test message received yet.",
|
|
"Waiting",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "Start the first task",
|
|
intro: "Choose one native Telegram context.",
|
|
rows: [
|
|
[
|
|
"Direct message",
|
|
"Send any message; it creates Maya's active Paperclip task.",
|
|
"DM",
|
|
],
|
|
[
|
|
"Ordinary group",
|
|
"Mention @maya_acme_bot; replies to Maya continue the active task.",
|
|
"Addressed",
|
|
],
|
|
[
|
|
"Forum topic",
|
|
"Mention Maya inside a topic; message_thread_id becomes the issue boundary.",
|
|
"Topic",
|
|
],
|
|
],
|
|
},
|
|
{
|
|
title: "Live verification",
|
|
intro:
|
|
"Paperclip records the first stable chat/user IDs and verifies a safe reply, post/edit behavior, and callbacks.",
|
|
rows: [
|
|
[
|
|
"Telegram update",
|
|
"Waiting for message or callback query.",
|
|
"Waiting",
|
|
],
|
|
],
|
|
},
|
|
],
|
|
primary: "Open Telegram",
|
|
secondary: "Finish without testing",
|
|
actions: [
|
|
[
|
|
"Open Telegram",
|
|
"Opens Maya's bot profile while Paperclip waits for the first verified update.",
|
|
],
|
|
[
|
|
"Finish without testing",
|
|
"Activates the endpoint and leaves first-delivery and chat-discovery health visible on Overview.",
|
|
],
|
|
],
|
|
annotations: [
|
|
"All prior Telegram steps remain visible in the completed rail.",
|
|
"Bot API and delivery checks are separate from the first real conversation.",
|
|
"DM, group, and forum tests teach their different task boundaries.",
|
|
"A real addressed update captures stable IDs and proves the maximum safe output path.",
|
|
],
|
|
rationale:
|
|
"The final step verifies Telegram's actual context and privacy behavior without another settings form.",
|
|
},
|
|
],
|
|
},
|
|
];
|