Spaces:
Paused
Paused
| import type { PaperclipPluginManifestV1 } from "@paperclipai/plugin-sdk"; | |
| import { | |
| DEFAULT_CONFIG, | |
| EXPORT_NAMES, | |
| JOB_KEYS, | |
| PAGE_ROUTE, | |
| PLUGIN_ID, | |
| PLUGIN_VERSION, | |
| SLOT_IDS, | |
| TOOL_NAMES, | |
| WEBHOOK_KEYS, | |
| } from "./constants.js"; | |
| const manifest: PaperclipPluginManifestV1 = { | |
| id: PLUGIN_ID, | |
| apiVersion: 1, | |
| version: PLUGIN_VERSION, | |
| displayName: "Kitchen Sink (Example)", | |
| description: "Reference plugin that demonstrates the current Paperclip plugin API surface, UI surfaces, bridge actions, events, jobs, webhooks, tools, local workspace access, and runtime diagnostics in one place.", | |
| author: "Paperclip", | |
| categories: ["ui", "automation", "workspace", "connector"], | |
| capabilities: [ | |
| "companies.read", | |
| "projects.read", | |
| "project.workspaces.read", | |
| "issues.read", | |
| "issues.create", | |
| "issues.update", | |
| "issue.comments.read", | |
| "issue.comments.create", | |
| "agents.read", | |
| "agents.pause", | |
| "agents.resume", | |
| "agents.invoke", | |
| "agent.sessions.create", | |
| "agent.sessions.list", | |
| "agent.sessions.send", | |
| "agent.sessions.close", | |
| "goals.read", | |
| "goals.create", | |
| "goals.update", | |
| "activity.log.write", | |
| "metrics.write", | |
| "telemetry.track", | |
| "plugin.state.read", | |
| "plugin.state.write", | |
| "events.subscribe", | |
| "events.emit", | |
| "jobs.schedule", | |
| "webhooks.receive", | |
| "http.outbound", | |
| "secrets.read-ref", | |
| "agent.tools.register", | |
| "instance.settings.register", | |
| "ui.sidebar.register", | |
| "ui.page.register", | |
| "ui.detailTab.register", | |
| "ui.dashboardWidget.register", | |
| "ui.commentAnnotation.register", | |
| "ui.action.register", | |
| ], | |
| entrypoints: { | |
| worker: "./dist/worker.js", | |
| ui: "./dist/ui", | |
| }, | |
| instanceConfigSchema: { | |
| type: "object", | |
| properties: { | |
| showSidebarEntry: { | |
| type: "boolean", | |
| title: "Show Sidebar Entry", | |
| default: DEFAULT_CONFIG.showSidebarEntry, | |
| }, | |
| showSidebarPanel: { | |
| type: "boolean", | |
| title: "Show Sidebar Panel", | |
| default: DEFAULT_CONFIG.showSidebarPanel, | |
| }, | |
| showProjectSidebarItem: { | |
| type: "boolean", | |
| title: "Show Project Sidebar Item", | |
| default: DEFAULT_CONFIG.showProjectSidebarItem, | |
| }, | |
| showCommentAnnotation: { | |
| type: "boolean", | |
| title: "Show Comment Annotation", | |
| default: DEFAULT_CONFIG.showCommentAnnotation, | |
| }, | |
| showCommentContextMenuItem: { | |
| type: "boolean", | |
| title: "Show Comment Action", | |
| default: DEFAULT_CONFIG.showCommentContextMenuItem, | |
| }, | |
| enableWorkspaceDemos: { | |
| type: "boolean", | |
| title: "Enable Workspace Demos", | |
| default: DEFAULT_CONFIG.enableWorkspaceDemos, | |
| }, | |
| enableProcessDemos: { | |
| type: "boolean", | |
| title: "Enable Process Demos", | |
| default: DEFAULT_CONFIG.enableProcessDemos, | |
| description: "Allows curated local child-process demos in project workspaces.", | |
| }, | |
| secretRefExample: { | |
| type: "string", | |
| title: "Secret Reference Example", | |
| default: DEFAULT_CONFIG.secretRefExample, | |
| }, | |
| httpDemoUrl: { | |
| type: "string", | |
| title: "HTTP Demo URL", | |
| default: DEFAULT_CONFIG.httpDemoUrl, | |
| }, | |
| allowedCommands: { | |
| type: "array", | |
| title: "Allowed Process Commands", | |
| items: { | |
| type: "string", | |
| enum: DEFAULT_CONFIG.allowedCommands, | |
| }, | |
| default: DEFAULT_CONFIG.allowedCommands, | |
| }, | |
| workspaceScratchFile: { | |
| type: "string", | |
| title: "Workspace Scratch File", | |
| default: DEFAULT_CONFIG.workspaceScratchFile, | |
| }, | |
| }, | |
| }, | |
| jobs: [ | |
| { | |
| jobKey: JOB_KEYS.heartbeat, | |
| displayName: "Demo Heartbeat", | |
| description: "Periodic demo job that records plugin runtime activity.", | |
| schedule: "*/15 * * * *", | |
| }, | |
| ], | |
| webhooks: [ | |
| { | |
| endpointKey: WEBHOOK_KEYS.demo, | |
| displayName: "Demo Ingest", | |
| description: "Accepts arbitrary webhook payloads and records the latest delivery in plugin state.", | |
| }, | |
| ], | |
| tools: [ | |
| { | |
| name: TOOL_NAMES.echo, | |
| displayName: "Kitchen Sink Echo", | |
| description: "Returns the provided message and the current run context.", | |
| parametersSchema: { | |
| type: "object", | |
| properties: { | |
| message: { type: "string" }, | |
| }, | |
| required: ["message"], | |
| }, | |
| }, | |
| { | |
| name: TOOL_NAMES.companySummary, | |
| displayName: "Kitchen Sink Company Summary", | |
| description: "Summarizes the current company using the Paperclip domain APIs.", | |
| parametersSchema: { | |
| type: "object", | |
| properties: {}, | |
| }, | |
| }, | |
| { | |
| name: TOOL_NAMES.createIssue, | |
| displayName: "Kitchen Sink Create Issue", | |
| description: "Creates an issue in the current project from an agent tool call.", | |
| parametersSchema: { | |
| type: "object", | |
| properties: { | |
| title: { type: "string" }, | |
| description: { type: "string" }, | |
| }, | |
| required: ["title"], | |
| }, | |
| }, | |
| ], | |
| ui: { | |
| slots: [ | |
| { | |
| type: "page", | |
| id: SLOT_IDS.page, | |
| displayName: "Kitchen Sink", | |
| exportName: EXPORT_NAMES.page, | |
| routePath: PAGE_ROUTE, | |
| }, | |
| { | |
| type: "settingsPage", | |
| id: SLOT_IDS.settingsPage, | |
| displayName: "Kitchen Sink Settings", | |
| exportName: EXPORT_NAMES.settingsPage, | |
| }, | |
| { | |
| type: "dashboardWidget", | |
| id: SLOT_IDS.dashboardWidget, | |
| displayName: "Kitchen Sink", | |
| exportName: EXPORT_NAMES.dashboardWidget, | |
| }, | |
| { | |
| type: "sidebar", | |
| id: SLOT_IDS.sidebar, | |
| displayName: "Kitchen Sink", | |
| exportName: EXPORT_NAMES.sidebar, | |
| }, | |
| { | |
| type: "sidebarPanel", | |
| id: SLOT_IDS.sidebarPanel, | |
| displayName: "Kitchen Sink Panel", | |
| exportName: EXPORT_NAMES.sidebarPanel, | |
| }, | |
| { | |
| type: "projectSidebarItem", | |
| id: SLOT_IDS.projectSidebarItem, | |
| displayName: "Kitchen Sink", | |
| exportName: EXPORT_NAMES.projectSidebarItem, | |
| entityTypes: ["project"], | |
| }, | |
| { | |
| type: "detailTab", | |
| id: SLOT_IDS.projectTab, | |
| displayName: "Kitchen Sink", | |
| exportName: EXPORT_NAMES.projectTab, | |
| entityTypes: ["project"], | |
| }, | |
| { | |
| type: "detailTab", | |
| id: SLOT_IDS.issueTab, | |
| displayName: "Kitchen Sink", | |
| exportName: EXPORT_NAMES.issueTab, | |
| entityTypes: ["issue"], | |
| }, | |
| { | |
| type: "taskDetailView", | |
| id: SLOT_IDS.taskDetailView, | |
| displayName: "Kitchen Sink Task View", | |
| exportName: EXPORT_NAMES.taskDetailView, | |
| entityTypes: ["issue"], | |
| }, | |
| { | |
| type: "toolbarButton", | |
| id: SLOT_IDS.toolbarButton, | |
| displayName: "Kitchen Sink Action", | |
| exportName: EXPORT_NAMES.toolbarButton, | |
| entityTypes: ["project", "issue"], | |
| }, | |
| { | |
| type: "contextMenuItem", | |
| id: SLOT_IDS.contextMenuItem, | |
| displayName: "Kitchen Sink Context", | |
| exportName: EXPORT_NAMES.contextMenuItem, | |
| entityTypes: ["project", "issue"], | |
| }, | |
| { | |
| type: "commentAnnotation", | |
| id: SLOT_IDS.commentAnnotation, | |
| displayName: "Kitchen Sink Comment Annotation", | |
| exportName: EXPORT_NAMES.commentAnnotation, | |
| entityTypes: ["comment"], | |
| }, | |
| { | |
| type: "commentContextMenuItem", | |
| id: SLOT_IDS.commentContextMenuItem, | |
| displayName: "Kitchen Sink Comment Action", | |
| exportName: EXPORT_NAMES.commentContextMenuItem, | |
| entityTypes: ["comment"], | |
| }, | |
| ], | |
| launchers: [ | |
| { | |
| id: "kitchen-sink-launcher", | |
| displayName: "Kitchen Sink Modal", | |
| placementZone: "toolbarButton", | |
| entityTypes: ["project", "issue"], | |
| action: { | |
| type: "openModal", | |
| target: EXPORT_NAMES.launcherModal, | |
| }, | |
| render: { | |
| environment: "hostOverlay", | |
| bounds: "wide", | |
| }, | |
| }, | |
| ], | |
| }, | |
| }; | |
| export default manifest; | |