| 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", |
| "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; |
|
|