import type { PaperclipPluginManifestV1 } from "@paperclipai/plugin-sdk"; import { DEFAULT_CONFIG, EXPORT_NAMES, JOB_KEYS, 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", "assets.write", "assets.read", "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, }, { 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;