{"name":"invoice-guard-studio-v1","description":"One-page InvoiceGuard app for deterministic duplicate invoice number and stated-total mismatch review with user-scoped Postgres persistence.","version":"0.1.3","skills":[{"id":"review_invoices","name":"review_invoices","description":"Review pasted invoice objects, detect duplicate invoice numbers and stated-total mismatches, persist a user-scoped case, and record a production receipt.","tags":[],"scopes":[],"stream":false,"policy":{"timeout_seconds":30.0,"idempotent":false,"max_retries":0,"cost_class":"deterministic","allow_scope_expansion":false,"grant_mode":null,"grant_allow_patterns":[],"grant_deny_patterns":[],"grant_outputs_prefix":null,"grant_write_prefixes":[],"grant_ttl_seconds":null,"grant_run_timeout_seconds":null,"grant_approval_timeout_seconds":null,"grant_scope_approval_timeout_seconds":null},"input_schema":{"type":"object","properties":{"case_id":{"maxLength":120,"minLength":1,"pattern":"^[A-Za-z0-9_.:-]+$","type":"string"},"invoices":{"$defs":{"InvoiceInput":{"additionalProperties":true,"properties":{"invoice_number":{"maxLength":120,"minLength":1,"title":"Invoice Number","type":"string"},"vendor":{"maxLength":180,"minLength":1,"title":"Vendor","type":"string"},"subtotal":{"title":"Subtotal"},"tax":{"title":"Tax"},"total":{"title":"Total"}},"required":["invoice_number","vendor","subtotal","tax","total"],"title":"InvoiceInput","type":"object"}},"items":{"$ref":"#/$defs/InvoiceInput"},"maxItems":50,"minItems":1,"type":"array"}},"required":["case_id","invoices"],"additionalProperties":false},"output_schema":{"additionalProperties":true,"type":"object"}},{"id":"review_invoice_uploads","name":"review_invoice_uploads","description":"Review invoices uploaded by browser JSON/base64 bridge, then persist the same review case and receipt as pasted invoices.","tags":[],"scopes":[],"stream":false,"policy":{"timeout_seconds":30.0,"idempotent":false,"max_retries":0,"cost_class":"deterministic","allow_scope_expansion":false,"grant_mode":null,"grant_allow_patterns":[],"grant_deny_patterns":[],"grant_outputs_prefix":null,"grant_write_prefixes":[],"grant_ttl_seconds":null,"grant_run_timeout_seconds":null,"grant_approval_timeout_seconds":null,"grant_scope_approval_timeout_seconds":null},"input_schema":{"type":"object","properties":{"case_id":{"maxLength":120,"minLength":1,"pattern":"^[A-Za-z0-9_.:-]+$","type":"string"},"documents":{"$defs":{"BrowserDocument":{"properties":{"filename":{"maxLength":180,"minLength":1,"title":"Filename","type":"string"},"media_type":{"maxLength":120,"minLength":1,"title":"Media Type","type":"string"},"data_base64":{"maxLength":349541,"minLength":1,"title":"Data Base64","type":"string"}},"required":["filename","media_type","data_base64"],"title":"BrowserDocument","type":"object"}},"items":{"$ref":"#/$defs/BrowserDocument"},"maxItems":5,"minItems":1,"type":"array"}},"required":["case_id","documents"],"additionalProperties":false},"output_schema":{"additionalProperties":true,"type":"object"}},{"id":"review_invoice_file","name":"review_invoice_file","description":"Review a typed Agent API file upload containing JSON, CSV, or plain-text invoice rows.","tags":[],"scopes":[],"stream":false,"policy":{"timeout_seconds":30.0,"idempotent":false,"max_retries":0,"cost_class":"deterministic","allow_scope_expansion":false,"grant_mode":null,"grant_allow_patterns":[],"grant_deny_patterns":[],"grant_outputs_prefix":null,"grant_write_prefixes":[],"grant_ttl_seconds":null,"grant_run_timeout_seconds":null,"grant_approval_timeout_seconds":null,"grant_scope_approval_timeout_seconds":null},"input_schema":{"type":"object","properties":{"case_id":{"maxLength":120,"minLength":1,"pattern":"^[A-Za-z0-9_.:-]+$","type":"string"},"document":{"additionalProperties":false,"description":"Workspace-backed file staged for a skill invocation.\n\nAgent API multipart uploads are persisted into the caller workspace before\nthe skill runs. The handler receives this metadata object and reads bytes\nthrough ``ctx.workspace`` using ``path``.","properties":{"path":{"title":"Path","type":"string"},"filename":{"title":"Filename","type":"string"},"media_type":{"title":"Media Type","type":"string"},"size_bytes":{"default":0,"minimum":0,"title":"Size Bytes","type":"integer"}},"required":["path","filename","media_type"],"title":"UploadedFile","type":"object","x-a2a-file-upload":{"required_upload":true,"accept":["application/json","text/csv","text/json","text/plain"],"max_bytes":262144,"description":"JSON array/object, CSV, or simple key-value text invoice data."}}},"required":["case_id","document"],"additionalProperties":false},"output_schema":{"additionalProperties":true,"type":"object"}},{"id":"get_invoice_case","name":"get_invoice_case","description":"Reopen a previously saved user-scoped invoice review case, including decisions and receipt metadata.","tags":[],"scopes":[],"stream":false,"policy":{"timeout_seconds":15.0,"idempotent":true,"max_retries":0,"cost_class":"deterministic","allow_scope_expansion":false,"grant_mode":null,"grant_allow_patterns":[],"grant_deny_patterns":[],"grant_outputs_prefix":null,"grant_write_prefixes":[],"grant_ttl_seconds":null,"grant_run_timeout_seconds":null,"grant_approval_timeout_seconds":null,"grant_scope_approval_timeout_seconds":null},"input_schema":{"type":"object","properties":{"case_id":{"maxLength":120,"minLength":1,"pattern":"^[A-Za-z0-9_.:-]+$","type":"string"}},"required":["case_id"],"additionalProperties":false},"output_schema":{"additionalProperties":true,"type":"object"}},{"id":"record_decision","name":"record_decision","description":"Record or update a user decision for a saved invoice review case.","tags":[],"scopes":[],"stream":false,"policy":{"timeout_seconds":15.0,"idempotent":false,"max_retries":0,"cost_class":"deterministic","allow_scope_expansion":false,"grant_mode":null,"grant_allow_patterns":[],"grant_deny_patterns":[],"grant_outputs_prefix":null,"grant_write_prefixes":[],"grant_ttl_seconds":null,"grant_run_timeout_seconds":null,"grant_approval_timeout_seconds":null,"grant_scope_approval_timeout_seconds":null},"input_schema":{"type":"object","properties":{"case_id":{"maxLength":120,"minLength":1,"pattern":"^[A-Za-z0-9_.:-]+$","type":"string"},"decision":{"properties":{"decision_id":{"maxLength":120,"minLength":1,"title":"Decision Id","type":"string"},"invoice_number":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"title":"Invoice Number"},"decision":{"maxLength":40,"minLength":1,"title":"Decision","type":"string"},"note":{"default":"","maxLength":1000,"title":"Note","type":"string"}},"required":["decision_id","decision"],"title":"DecisionInput","type":"object"}},"required":["case_id","decision"],"additionalProperties":false},"output_schema":{"additionalProperties":true,"type":"object"}}],"capabilities":{"a2a_pack":{"package":"a2a-pack","version":"0.1.115"},"mcp":{"standard":{"path":"/mcp","intended_for":"code_sdk_clients"},"connector":{"path":"/connector-mcp","intended_for":["chatgpt","claude","hosted_connectors"],"supports_async_jobs":true,"supports_structured_interrupts":true,"poll_tool":"job_result","resume_tool":"submit_interaction","instructions":"Use this URL for hosted connector UIs. Use /mcp for normal code or SDK MCP clients."}},"ui":{"url":"https://invoice-guard-studio-v1.a2acloud.io/app","type":"static-spa","framework":null,"entry":"/app/index.html","config":"https://invoice-guard-studio-v1.a2acloud.io/app/config.json","client":"https://invoice-guard-studio-v1.a2acloud.io/app/a2a-client.js","requiresAuth":false,"auth":{"mode":"inherit","flow":"public","sessionTransport":"cookie","sessionCookieName":"__Host-a2a_agent_session","sessionUrl":"https://invoice-guard-studio-v1.a2acloud.io/auth/session","loginUrl":"https://app.a2acloud.io","authorizeUrl":"https://app.a2acloud.io/v1/auth/agent-session/authorize?agent=invoice-guard-studio-v1","callbackUrl":"https://invoice-guard-studio-v1.a2acloud.io/auth/callback","requiresSession":false}}},"input_modes":["application/json"],"output_modes":["application/json"],"required_secrets":[],"required_env":[],"consumer_setup":{"fields":[]},"runtime":{"lifecycle":"ephemeral","availability":"on_demand","state":"none","sandbox":"microsandbox","resources":{"cpu":"500m","memory":"512Mi","gpu":0,"max_runtime_seconds":120},"concurrency":1,"egress":{"allow_hosts":[],"allow_internal_services":[],"deny_internet_by_default":true},"tools_used":["managed-postgres","mcp"],"llm_provisioning":"platform","account_access":{"required":false,"platform_skill_calls":0,"after_trial":"byok"},"pricing":{"price_per_call_usd":0.0,"caller_pays_llm":false,"notes":"Deterministic invoice validation; no LLM credentials are required."},"wants_cp_jwt":false,"platform_resources":{"memory":null,"databases":[{"name":"invoice-guard-studio-v1-data","engine":"postgres","provider":"neon","scope":"user","branch":"main","access_mode":"read_write","env":{"url":"DATABASE_URL"},"migrations":{"path":"db/migrations"},"scale_to_zero":true}],"mailbox":null},"endpoints":[],"apt_packages":[]},"state_schema":null,"workspace_access":{"enabled":true,"max_files":8,"allowed_modes":["read_only"],"require_reason":false,"deny_patterns":[],"require_human_approval":false,"max_total_size_bytes":1310720},"mcp_endpoint":"/mcp","connector_mcp_endpoint":"/connector-mcp","mcp_endpoints":{"standard":{"path":"/mcp","intended_for":"code_sdk_clients"},"connector":{"path":"/connector-mcp","intended_for":["chatgpt","claude","hosted_connectors"],"supports_async_jobs":true,"supports_structured_interrupts":true,"poll_tool":"job_result","resume_tool":"submit_interaction","instructions":"Use this URL for hosted connector UIs. Use /mcp for normal code or SDK MCP clients."}},"ui":{"url":"https://invoice-guard-studio-v1.a2acloud.io/app","type":"static-spa","framework":null,"entry":"/app/index.html","config":"https://invoice-guard-studio-v1.a2acloud.io/app/config.json","client":"https://invoice-guard-studio-v1.a2acloud.io/app/a2a-client.js","requiresAuth":false,"auth":{"mode":"inherit","flow":"public","sessionTransport":"cookie","sessionCookieName":"__Host-a2a_agent_session","sessionUrl":"https://invoice-guard-studio-v1.a2acloud.io/auth/session","loginUrl":"https://app.a2acloud.io","authorizeUrl":"https://app.a2acloud.io/v1/auth/agent-session/authorize?agent=invoice-guard-studio-v1","callbackUrl":"https://invoice-guard-studio-v1.a2acloud.io/auth/callback","requiresSession":false}}}