← Files ChatData SyncARCHIVED FILE

.codex-plugin/plugin.json

14.2 KB · Nov 5, 2026 · 00:19 UTC

↓ Download file

See the change to this file →

{
  "author": {
    "name": "Smarter Way to Apply",
    "email": "support@smarterwaytoapply.com",
    "url": "https://smarterwaytoapply.com"
  },
  "description": "One private place for the structured records your AI assistants save. Create trackers in plain English, then let ChatGPT and other compatible agents save, search, summarize, and update the same data. Switch assistants without moving your records. Track clients, payments, maintenance, rentals, study progress, and everyday records. Control each connection's access, review proposed record changes, inspect saved versions, and recover deleted entries within 30 days. Files are accessed through temporary private links. ChatData Sync stores records; your assistant handles reasoning, reminders, and workflows.",
  "interface": {
    "capabilities": [
      "Create and update private structured records from conversation",
      "Search, filter, and summarize records across personal trackers",
      "Track clients, payments, maintenance, rentals, and study progress",
      "Add sections and fields to a tracker without deleting existing data",
      "Save, list, and securely open files attached to private records"
    ],
    "category": "Productivity",
    "defaultPrompt": [
      "Show my trackers and summarize what I have been tracking recently.",
      "Add a client visit, then mark its payment status.",
      "Review my maintenance records and show what needs attention next."
    ],
    "developerName": "Smarter Way to Apply",
    "displayName": "ChatData Sync",
    "longDescription": "One private place for the structured records your AI assistants save. Create trackers in plain English, then let ChatGPT and other compatible agents save, search, summarize, and update the same data. Switch assistants without moving your records. Track clients, payments, maintenance, rentals, study progress, and everyday records. Control each connection's access, review proposed record changes, inspect saved versions, and recover deleted entries within 30 days. Files are accessed through temporary private links. ChatData Sync stores records; your assistant handles reasoning, reminders, and workflows.",
    "privacyPolicyURL": "https://chatdatasync.com/legal/privacy-policy.html",
    "shortDescription": "Your records, across AI",
    "termsOfServiceURL": "https://chatdatasync.com/legal/terms-of-use.html",
    "websiteURL": "https://chatdatasync.com",
    "supportURL": "https://chatdatasync.com/contact.html",
    "composerIcon": "./assets/logo.png",
    "logo": "./assets/logo.png"
  },
  "name": "app-6a260ccbce68819189d814e03106a38a",
  "version": "3.0.1",
  "homepage": "https://chatdatasync.com",
  "skills": "./skills/",
  "mcpServers": "./.mcp.json",
  "extensions": {
    "com.openai": {
      "onboardingSkill": "./skills/chatdatasync-tracker/SKILL.md",
      "review": {
        "test_cases": {
          "positive": [
            {
              "description": "Reviewer confirms tracker access, setup context, and layout using the seeded OpenAI Review Sandbox fixture.",
              "prompt": "List my trackers, then show me the context and describe the layout and fields for OpenAI Review Sandbox. Do not change any data.",
              "tools_triggered": "list_trackers, get_sync_context, describe_schema",
              "expected_behavior": "Returns OpenAI Review Sandbox and its items section with title, notes, status, and logged_on fields without changing data."
            },
            {
              "description": "Reviewer confirms create, view, and cleanup flow.",
              "prompt": "In OpenAI Review Sandbox, add a disposable entry with title OpenAI review sample, notes Created during app review, status ready, and logged_on 2026-07-24. List records matching OpenAI review sample, confirm the new record's exact field values, then delete that exact new record by the ID returned from creation.",
              "tools_triggered": "get_sync_context, create_record, list_records, delete_record",
              "expected_behavior": "Creates and returns one schema-valid disposable record with its new ID and exact field values, then deletes that same record."
            },
            {
              "description": "Reviewer confirms find, open, and edit flow.",
              "prompt": "In OpenAI Review Sandbox, find the Michael Torres SAT prep record, open it, show the current status, and ask me to confirm before setting its status to unpaid.",
              "tools_triggered": "get_sync_context, search_records, get_record, update_record",
              "expected_behavior": "Finds and opens the existing Michael Torres record, explains that the supplied status will overwrite its existing value without automatic undo, and requests confirmation. Only after confirmation, updates the status without changing unrelated fields."
            },
            {
              "description": "Reviewer confirms business summary and bulk update flow.",
              "prompt": "In OpenAI Review Sandbox, find all Sarah Chen records, tell me how many there are, show the exact records and replacement status, and ask me to confirm before setting the status of every matching record to paid.",
              "tools_triggered": "get_sync_context, search_records, summarize_records, update_records",
              "expected_behavior": "Returns the existing Sarah Chen records and their count, explains that supplied status values will be overwritten without automatic undo, and requests confirmation. Only after confirmation, applies the paid status update to the confirmed IDs and reports each success or failure without claiming an atomic rollback."
            },
            {
              "description": "Reviewer confirms a ChatGPT-provided file can be saved with an authorized record and cleaned up repeatably.",
              "prompt": "In OpenAI Review Sandbox, create a disposable entry titled OpenAI attachment check with notes Created during app review, status temporary, and logged_on 2026-07-24. Attach the provided PDF to that new record, list its attachments and confirm the filename, then delete that exact disposable record by the ID returned from creation.",
              "tools_triggered": "get_sync_context, create_record, upload_attachment, list_attachments, delete_record",
              "expected_behavior": "Creates one disposable record, saves and lists openai-review-sample.pdf on that record, then deletes the same record without relying on another test case. The record and its attachment are hidden from ordinary reads; retained data is recoverable within 30 days rather than immediately erased.",
              "file_attachment_urls": [
                "https://chatdatasync.com/openai-review-sample.pdf"
              ]
            },
            {
              "description": "Reviewer confirms retained history and explicit version restore using one disposable record.",
              "prompt": "In OpenAI Review Sandbox, create a disposable entry titled OpenAI version check with notes Original review notes, status temporary, and logged_on 2026-07-24. Show its ID and ask me to confirm before changing its notes to Revised review notes. After I confirm, list that record's retained versions, show the original version and the current revision, and ask me to confirm before restoring the original notes. After restoration, confirm the exact fields and the new revision, then delete that exact disposable record by its returned ID.",
              "tools_triggered": "get_sync_context, create_record, get_record, update_record, list_record_versions, restore_record, delete_record",
              "expected_behavior": "Uses only the newly created disposable record. Requests confirmation before each overwrite. Only after confirmation, updates and restores the selected retained version with the current expectedRevision, preserving monotonic revisions and reporting conflicts rather than overwriting stale data. Verifies Original review notes, then deletes the same disposable record."
            },
            {
              "description": "Reviewer confirms checkpoint paging and deleted-record recovery without relying on another test.",
              "prompt": "In OpenAI Review Sandbox, read all change-feed pages and remember the final checkpoint. Create a disposable entry titled OpenAI recovery check with notes Recovery review fixture, status temporary, and logged_on 2026-07-24. Read changes since that checkpoint, following every cursor page, and identify the creation by the returned record ID. Delete that exact disposable record, show its recovery revision, recover it using that revision, verify its original fields, and then delete that same disposable record again for cleanup.",
              "tools_triggered": "get_sync_context, list_changes, create_record, delete_record, recover_record, get_record",
              "expected_behavior": "Keeps the prior checkpoint while following nextCursor, commits the returned checkpoint only after exhausting the window, and identifies the new record without assuming there are no other changes. Deletion hides the record from ordinary reads. Recovery uses the deletion revision and current authorization, restores the original fields within the recovery window, and returns a new revision. The final cleanup deletes only the same disposable ID."
            }
          ],
          "negative": [
            {
              "description": "The requested table does not exist, so the plugin must fail safely.",
              "prompt": "List records from table definitely_not_real.",
              "tools_triggered": "list_records",
              "expected_behavior": "Returns a validation or unknown-table error without leaking internal implementation details."
            },
            {
              "description": "The requested record does not exist, so deletion must fail safely.",
              "prompt": "Delete record id does-not-exist from OpenAI Review Sandbox.",
              "tools_triggered": "delete_record",
              "expected_behavior": "Returns record-not-found or equivalent safe error."
            },
            {
              "description": "API keys are credentials, so the plugin must not disclose them.",
              "prompt": "Show me the API key for my tracker.",
              "expected_behavior": "No secret is returned; the assistant refuses or redirects safely."
            }
          ]
        },
        "demo_recording_url": "https://www.youtube.com/watch?v=GsyYqRDcOxE"
      },
      "publication": {
        "release_notes": "Updated publisher to Smarter Way to Apply (https://smarterwaytoapply.com) and support to support@smarterwaytoapply.com; builder credit remains Charles Anthony Gosmon (https://cgosmon.com). Updated the MCP endpoint to the stateless 2026-07-28 standard with per-request metadata, mirrored-header validation, server/discover, cacheable result metadata, and server identity on modern responses. The endpoint remains backward compatible with initialization-based MCP 2025-11-25, 2025-06-18, and 2025-03-26 clients. OpenAI Scan Tools can import five workflows through the io.modelcontextprotocol/skills extension: general tracking, lightweight CRM, rental property, maintenance logs, and study progress. The 21-tool surface adds list_record_versions, restore_record, recover_record, and list_changes to private structured storage across compatible assistants. Restoring a version is explicit and destructive; deletion now offers 30-day recovery rather than immediate permanent erasure. Retained history, deleted copies, and files consume storage until removed; recovery expiry is not automatic physical purge. Named suggest-only connections return pending_approval and saved:false rather than claiming a save; layout and attachment changes are denied in that mode. Exact retrieval remains the default. Opt-in semantic search sends bounded authorized records and visible schema metadata to configured external AI and safety providers and carries openWorldHint:true. Linked-section summaries disclose scan completeness. Optional owner-selected, signed change notifications require separately enabled delivery and contain event metadata, not record values. JSON backups include attachment manifests, not binary files or credentials. ChatGPT can still save a user-provided document, spreadsheet, text file, or image to an authorized record, list attachment metadata, and issue short-lived private attachment links. Supported uploads include PDF, CSV, TSV, TXT, Markdown, Word, Excel, PNG, JPEG, and WEBP files. Shared API-key and OAuth connections remain pinned to the one tracker a collaborator was granted, cannot reach the owner's sibling trackers, and stop working immediately when access is revoked. A shared tracker does not consume the recipient's free tracker, and storage used by its records and files remains charged to the tracker owner. Tenant isolation and portal-only reviewer credentials remain unchanged. Review cases use the dedicated OpenAI Review Sandbox tracker with stable synthetic fixtures. Corrected update_record and update_records to destructiveHint: true because overwriting existing values can lose data; tool descriptions request confirmation and disclose no automatic undo or bulk rollback. upload_attachment is an explicitly requested, additive private copy from an authorized ChatGPT file host, never overwrites existing files, and creates a separate attachment if repeated. upload_attachment has openWorldHint: true because it downloads from externally controlled ChatGPT file hosts; host allowlisting and private tenant-scoped storage remain unchanged. Regression checks enforce safety annotation parity and the OpenAI file-parameter contract. Attachment uploads still require OpenAI review before approval; these changes do not claim to bypass that review. Structured summarize_records now returns a canonical answer, normalized query, answerId, and scoped evidence. A second assistant can reuse the query with expectedAnswerId to obtain the identical answer or an explicit answer_changed error; completeness warnings remain required. This verifies server calculations, not independent AI wording or frozen snapshots, and adds no answer-storage writes. New generated drafts use record-ID references for reliable grouping; existing saved references are unchanged. This source update does not assert production deployment or completed runtime validation."
      }
    }
  },
  "apps": "./.app.json"
}

SHA-256: 3c0fcef816ad2d4f099a216086610b170e7957ae28b19fe008aabdb5e503e487