{
  "$schema": "https://developers.openai.com/apps-sdk/schemas/chatgpt-app-submission.v1.json",
  "app_info": {
    "category": "BUSINESS",
    "description": "RFQ and quote comparison checklist for fire/public safety purchasing.",
    "display_name": "FireBuy",
    "subtitle": "Compare public-safety RFQs"
  },
  "negative_test_cases": [
    {
      "description": "Do not trigger the plugin for an unsupported or externally mutating request.",
      "expected_output": "The plugin should not be invoked for this request because it is outside the supported analysis workflow or requires an unavailable external action.",
      "expected_output_url": null,
      "file_attachment_urls": null,
      "tools_triggered": null,
      "user_prompt": "Tell me a joke."
    },
    {
      "description": "Do not trigger the plugin for an unsupported or externally mutating request.",
      "expected_output": "The plugin should not be invoked for this request because it is outside the supported analysis workflow or requires an unavailable external action.",
      "expected_output_url": null,
      "file_attachment_urls": null,
      "tools_triggered": null,
      "user_prompt": "Buy this equipment now."
    },
    {
      "description": "Do not trigger the plugin for an unsupported or externally mutating request.",
      "expected_output": "The plugin should not be invoked for this request because it is outside the supported analysis workflow or requires an unavailable external action.",
      "expected_output_url": null,
      "file_attachment_urls": null,
      "tools_triggered": null,
      "user_prompt": "Send this RFQ to every vendor."
    }
  ],
  "schema_version": 1,
  "test_cases": [
    {
      "description": "Exercise build_fire_purchase_checklist for a supported FireBuy workflow.",
      "expected_output": "Returns a structured, bounded result for the requested workflow and clearly represents uncertainty or missing information.",
      "expected_output_url": null,
      "file_attachment_urls": null,
      "tools_triggered": "build_fire_purchase_checklist",
      "user_prompt": "Compare these public-safety RFQ quotes."
    },
    {
      "description": "Exercise compare_rfq_quotes for a supported FireBuy workflow.",
      "expected_output": "Returns a structured, bounded result for the requested workflow and clearly represents uncertainty or missing information.",
      "expected_output_url": null,
      "file_attachment_urls": null,
      "tools_triggered": "compare_rfq_quotes",
      "user_prompt": "Build a fire equipment purchase checklist."
    },
    {
      "description": "Exercise flag_procurement_gaps for a supported FireBuy workflow.",
      "expected_output": "Returns a structured, bounded result for the requested workflow and clearly represents uncertainty or missing information.",
      "expected_output_url": null,
      "file_attachment_urls": null,
      "tools_triggered": "flag_procurement_gaps",
      "user_prompt": "Generate vendor questions for these quotes."
    },
    {
      "description": "Exercise generate_vendor_questions for a supported FireBuy workflow.",
      "expected_output": "Returns a structured, bounded result for the requested workflow and clearly represents uncertainty or missing information.",
      "expected_output_url": null,
      "file_attachment_urls": null,
      "tools_triggered": "generate_vendor_questions",
      "user_prompt": "Flag procurement gaps in this RFQ."
    },
    {
      "description": "Exercise generate_vendor_questions for a supported FireBuy workflow.",
      "expected_output": "Returns a structured, bounded result for the requested workflow and clearly represents uncertainty or missing information.",
      "expected_output_url": null,
      "file_attachment_urls": null,
      "tools_triggered": "generate_vendor_questions",
      "user_prompt": "Compare these apparatus equipment vendor quotes."
    }
  ],
  "tools": {
    "build_fire_purchase_checklist": {
      "annotations": {
        "destructiveHint": false,
        "openWorldHint": false,
        "readOnlyHint": true
      },
      "justifications": {
        "destructive_justification": "Does not delete, overwrite, revoke access, send irreversible transactions, or perform destructive administration.",
        "open_world_justification": "Does not publish to the public internet or modify third-party systems.",
        "read_only_justification": "Computes or retrieves structured analysis from the provided input without changing external systems."
      }
    },
    "compare_rfq_quotes": {
      "annotations": {
        "destructiveHint": false,
        "openWorldHint": false,
        "readOnlyHint": true
      },
      "justifications": {
        "destructive_justification": "Does not delete, overwrite, revoke access, send irreversible transactions, or perform destructive administration.",
        "open_world_justification": "Does not publish to the public internet or modify third-party systems.",
        "read_only_justification": "Computes or retrieves structured analysis from the provided input without changing external systems."
      }
    },
    "flag_procurement_gaps": {
      "annotations": {
        "destructiveHint": false,
        "openWorldHint": false,
        "readOnlyHint": true
      },
      "justifications": {
        "destructive_justification": "Does not delete, overwrite, revoke access, send irreversible transactions, or perform destructive administration.",
        "open_world_justification": "Does not publish to the public internet or modify third-party systems.",
        "read_only_justification": "Computes or retrieves structured analysis from the provided input without changing external systems."
      }
    },
    "generate_vendor_questions": {
      "annotations": {
        "destructiveHint": false,
        "openWorldHint": false,
        "readOnlyHint": true
      },
      "justifications": {
        "destructive_justification": "Does not delete, overwrite, revoke access, send irreversible transactions, or perform destructive administration.",
        "open_world_justification": "Does not publish to the public internet or modify third-party systems.",
        "read_only_justification": "Computes or retrieves structured analysis from the provided input without changing external systems."
      }
    }
  }
}