← Files ProjectStudioARCHIVED FILE

plugin.json

9.85 KB · Nov 15, 2026 · 07:30 UTC

↓ Download file

{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "projectstudio",
  "version": "0.1.0",
  "description": "ChatCanvas + DocCanvas: makes the conversation and documents manipulable. Select, highlight, strike, box or capture, then turn any selection into a traceable action (task, decision, note, artifact). Deterministic patch/diff/versions with the original always preserved and no write without confirmation; optional durable workspaces keep immutable versions and an append-only audit log.",
  "author": {
    "name": "mmcco",
    "email": "infodev@mmcco.co",
    "url": "https://connecteur-projectos-interactive.vercel.app"
  },
  "homepage": "https://connecteur-projectos-interactive.vercel.app",
  "license": "MIT",
  "keywords": [
    "productivity",
    "workspace",
    "document",
    "annotation",
    "diff",
    "versions",
    "canvas"
  ],
  "extensions": {
    "com.openai": {
      "interface": {
        "displayName": "ProjectStudio",
        "shortDescription": "Make chat and docs editable",
        "longDescription": "ProjectStudio turns the conversation and your documents into a manipulable surface (ChatCanvas + DocCanvas). You show intent with direct gestures \u2014 select text, highlight, strike, box a region, add a comment, capture a region, set focus \u2014 and the agent completes the reasoning. Any selection can become a structured, traceable action: a task, a decision ledger entry, a note, a context-pack item or an artifact, always bound to its source with an exact-text snapshot so the action never points at the wrong passage. Editing is safe by construction: an edit never silently changes the original. You request an edit, preview a deterministic line-by-line diff (additions, removals and a unified diff), and only on an explicit confirmation is the change applied as a new, immutable derived version \u2014 the original is always kept and undo simply moves a pointer without deleting anything. Write actions (task, decision, patch, workflow) require a confirmation; nothing is written automatically. A deterministic latest-artifact resolver picks the current version by version and supersession rather than by name or date. Two ways to work: stateless primitives process only the content you pass and keep nothing; optional durable workspaces persist your registered documents, their immutable versions, annotations, recorded action requests, focus state and an append-only audit log in a private object store, so a workspace keeps real history. A durable workspace is reached by an unguessable workspace_id that acts like a bearer secret (no account, no login) \u2014 treat it like a password and do not put personal, health or banking data into any tool. The connector does not fetch external URLs and does not read your files: it works on the text you provide in the conversation, and region captures produce metadata only (image rendering and retention are planned). A widget renders the ChatCanvas + DocCanvas beside the chat, and every tool also works headless without the UI.",
        "developerName": "mmcco",
        "category": "Productivity",
        "capabilities": [
          "Makes chat and documents manipulable (ChatCanvas + DocCanvas): select, highlight, box, comment, capture, set focus.",
          "Turns any selection into a traceable action (task, decision, note, artifact) bound to its source; preview/apply/undo.",
          "Durable workspaces keep immutable versions, annotations and an append-only audit log via an unguessable workspace_id."
        ],
        "websiteURL": "https://connecteur-projectos-interactive.vercel.app",
        "supportURL": "https://connecteur-projectos-interactive.vercel.app",
        "privacyPolicyURL": "https://connecteur-projectos-interactive.vercel.app/privacy",
        "termsOfServiceURL": "https://connecteur-projectos-interactive.vercel.app/terms",
        "defaultPrompt": [
          "Open the interactive workspace on this paragraph so I can select, highlight and edit it.",
          "Turn 'call the notary before Friday' in my message into a traceable task.",
          "Preview the diff of my edit, then apply it \u2014 keep the original and create a new version."
        ],
        "composerIcon": "./assets/icon.png",
        "logo": "./assets/logo.png"
      },
      "review": {
        "demo_recording_url": "https://connecteur-projectos-interactive.vercel.app/demo.gif",
        "test_cases": {
          "positive": [
            {
              "description": "Open the interactive workspace widget",
              "prompt": "Open the interactive workspace on this paragraph so I can select, highlight and edit it.",
              "tools_triggered": "open_workspace",
              "expected_behavior": "Calls open_workspace and returns the ChatCanvas + DocCanvas widget (structuredContent.workspace plus the openai/outputTemplate meta pointing at the ProjectStudio interactive-workspace resource). The passed message/document is shown; nothing is written."
            },
            {
              "description": "Preview the deterministic diff of an edit (read-only)",
              "prompt": "Here is my clause and my rewrite \u2014 show me exactly what changes before anything is applied.",
              "tools_triggered": "document_preview_patch",
              "expected_behavior": "Calls document_preview_patch with the original and proposed text; returns a deterministic diff (count of additions and removals plus a unified diff) and applies nothing. For a two-line change with one edit per line the result is additions=2, removals=2, inchange=false."
            },
            {
              "description": "Apply an edit as a new immutable version, original preserved",
              "prompt": "Change 'payment due in 30 days' to '15 days' in Section 4, but keep the original and make it a new version.",
              "tools_triggered": "document_apply_patch",
              "expected_behavior": "Called without confirm, document_apply_patch returns status CONFIRMATION_REQUISE with a diff preview and writes nothing. Called again with confirm:true it returns status APPLIQU\u00c9 with an immutable derived version (v2), original_conserve:true \u2014 the original v1 is preserved and the change is reversible."
            },
            {
              "description": "Turn a selection into a traceable task (confirmation gate)",
              "prompt": "Select 'call the notary before Friday' in my message and turn it into a high-priority task.",
              "tools_triggered": "chat_transform_selection",
              "expected_behavior": "After chat_create_selection captures the exact text with its provenance, chat_transform_selection with action create_task returns status CONFIRMATION_REQUISE while confirm is absent (sensitive write). With confirm:true it returns status PR\u00caT with a Task whose provenance is bound to the source (resource_id of the message); the connector produces the traceable request and never applies it automatically."
            },
            {
              "description": "Create a durable workspace and register a document as immutable v1",
              "prompt": "Create a durable workspace for the closing file and register this deed text so it keeps a real version history.",
              "tools_triggered": "ws_create",
              "expected_behavior": "Calls ws_create and returns a reusable workspace_id, then ws_document_create registers the text as the immutable original version v1 (current:v1). ws_document_history then reports original:v1 and total:1. The data is stored durably in the workspace's private store; the original version is write-once."
            }
          ],
          "negative": [
            {
              "description": "Send an email (out of scope)",
              "prompt": "Email this decision summary to my team.",
              "expected_behavior": "No connector tool is triggered: ProjectStudio has no email or sending capability (tools/list exposes no email/send tool). It can capture the decision as a traceable action but cannot send messages, and says so."
            },
            {
              "description": "Fetch and read a web page or file (out of scope)",
              "prompt": "Open the contract at https://example.com/contract.pdf and pull out the clauses.",
              "expected_behavior": "No connector tool is triggered: the connector does not fetch external URLs and does not read files (tools/list exposes no fetch/url/download tool). It only works on text provided in the conversation (e.g. via document_open), and explains that."
            },
            {
              "description": "Permanently delete the original and all versions (out of scope)",
              "prompt": "Permanently delete the original document and erase all of its versions.",
              "expected_behavior": "No connector tool is triggered to destroy data: the connector never deletes the original or any version (tools/list exposes no delete/destroy tool; undo only moves a pointer, non-destructively). It explains that the original is always preserved and offers a non-destructive undo instead."
            }
          ]
        }
      },
      "publication": {
        "release_notes": "ProjectStudio (ChatCanvas + DocCanvas) makes the conversation and documents manipulable: select, highlight, strike, box, capture and set focus, then turn any selection into a traceable action (task, decision, note, artifact) bound to its source. A deterministic patch engine previews, applies and undoes edits while always preserving the original (immutable derived versions; undo moves a pointer). Optional durable workspaces persist documents, immutable versions, annotations, recorded actions and an append-only audit log in a private store, reached by an unguessable workspace_id. This version refreshes the privacy policy and terms to describe the durable-workspace storage and retention accurately (no account, no cookies, no external calls or file reading)."
      },
      "apps": "./.app.json"
    }
  }
}

SHA-256: 76df149155686e206f88ad54500fb00e552885256b62e0e4b86806c27f9a936c