@topy-ai/maggie 0.7.38 → 0.7.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README-zh-TW.md +82 -6
  2. package/README.md +99 -7
  3. package/bin/maggie.js +30 -3
  4. package/bundled-contracts/maggie-clone/interaction-state-v1.schema.json +26 -0
  5. package/bundled-contracts/maggie-content/provenance-v1.schema.json +20 -0
  6. package/bundled-contracts/maggie-design/brand-kit-v1.schema.json +18 -0
  7. package/bundled-contracts/maggie-design/browser-interactions-v1.schema.json +27 -0
  8. package/bundled-contracts/maggie-design/css-utility-evidence-v1.schema.json +10 -0
  9. package/bundled-contracts/maggie-design/dashboard-surface-v1.schema.json +11 -0
  10. package/bundled-contracts/maggie-design/progressive-enhancement-v1.schema.json +12 -0
  11. package/bundled-contracts/maggie-design/sample-surface-v1.schema.json +13 -0
  12. package/bundled-contracts/maggie-design/style-editing-v1.schema.json +35 -0
  13. package/bundled-contracts/maggie-media/image-generation-policy-v1.json +28 -0
  14. package/bundled-contracts/maggie-media/video-generation-policy-v1.json +40 -0
  15. package/bundled-contracts/maggie-media/video-job-v1.schema.json +20 -0
  16. package/bundled-contracts/maggie-media/video-playback-evidence-v1.schema.json +15 -0
  17. package/bundled-contracts/maggie-ops/npm11-preflight-v1.schema.json +17 -0
  18. package/bundled-contracts/maggie-scaffold/host-scaffold-v1.schema.json +25 -0
  19. package/bundled-contracts/maggie-seo/gsc-readiness-v1.schema.json +19 -0
  20. package/bundled-contracts/maggie-seo/privacy-origin-evidence-v1.schema.json +11 -0
  21. package/bundled-contracts/maggie-service-booking/delivery-provider-default-v1.json +8 -0
  22. package/bundled-contracts/maggie-service-booking/delivery-provider-v1.schema.json +16 -0
  23. package/bundled-contracts/maggiedash/booking-access-v1.json +5 -4
  24. package/bundled-contracts/maggiedash/booking-customer-surface-v1.json +12 -1
  25. package/bundled-contracts/maggiedash/booking-email-templates-v1.json +2 -0
  26. package/bundled-contracts/maggiedash/booking-host-adapter-v1.json +14 -2
  27. package/bundled-contracts/maggiedash/booking-runtime.v1.json +41 -0
  28. package/bundled-contracts/maggiedash/browser-session-v1.schema.json +18 -0
  29. package/bundled-contracts/maggiedash/content-overrides-v1.schema.json +19 -0
  30. package/bundled-contracts/maggiedash/execution-board.json +526 -26
  31. package/bundled-contracts/maggiedash/host-capabilities-v1.schema.json +10 -0
  32. package/bundled-contracts/maggiedash/public-session-cache-v1.schema.json +17 -0
  33. package/bundled-contracts/maggiedash/site-structure-v1.schema.json +13 -0
  34. package/bundled-references/browser-inspection.md +21 -0
  35. package/bundled-references/maggiedash-booking/ARCHITECTURE.md +218 -0
  36. package/bundled-references/maggiedash-booking/CURRENT-STATE.md +92 -0
  37. package/bundled-references/maggiedash-booking/DATA-FLOW.md +143 -0
  38. package/bundled-references/maggiedash-booking/DATA-MODEL.md +367 -0
  39. package/bundled-references/maggiedash-booking/DECISIONS.md +94 -0
  40. package/bundled-references/maggiedash-booking/EXECUTION-BOARD.json +2387 -0
  41. package/bundled-references/maggiedash-booking/HOST-ADAPTER.md +314 -0
  42. package/bundled-references/maggiedash-booking/ORAWELLNESS-INTEGRATION-AUDIT.md +227 -0
  43. package/bundled-references/maggiedash-booking/PAYMENT-GATEWAY.md +267 -0
  44. package/bundled-references/maggiedash-booking/PRD.md +228 -0
  45. package/bundled-references/maggiedash-booking/PROGRESS.md +2434 -0
  46. package/bundled-references/maggiedash-booking/QA-TEST-PLAN.md +235 -0
  47. package/bundled-references/maggiedash-booking/README.md +271 -0
  48. package/bundled-references/maggiedash-booking/RUNTIME-OPERATIONS.md +152 -0
  49. package/bundled-references/maggiedash-booking/SECURITY-COMPLIANCE.md +158 -0
  50. package/bundled-references/maggiedash-booking/SKILLS-AND-CLI.md +542 -0
  51. package/bundled-references/maggiedash-booking/STRIPE-INTEGRATION.md +129 -0
  52. package/bundled-references/maggiedash-booking/TASK-RUNBOOK.md +107 -0
  53. package/bundled-references/maggiedash-booking/TASKS.md +137 -0
  54. package/bundled-references/maggiedash-booking/USER-JOURNEYS.md +224 -0
  55. package/bundled-references/maggiedash-booking/diagrams/booking-dfd.excalidraw +1 -0
  56. package/bundled-references/maggiedash-booking/diagrams/booking-dfd.mmd +16 -0
  57. package/bundled-references/maggiedash-booking/diagrams/booking-dfd.png +0 -0
  58. package/bundled-references/maggiedash-booking/diagrams/booking-dfd.svg +1 -0
  59. package/bundled-references/maggiedash-booking/diagrams/booking-state-machine.mmd +19 -0
  60. package/bundled-references/maggiedash-booking/diagrams/booking-state-machine.png +0 -0
  61. package/bundled-references/maggiedash-booking/diagrams/booking-state-machine.svg +1 -0
  62. package/bundled-references/maggiedash-booking/diagrams/manager-journey.excalidraw +1 -0
  63. package/bundled-references/maggiedash-booking/diagrams/manager-journey.mmd +11 -0
  64. package/bundled-references/maggiedash-booking/diagrams/manager-journey.png +0 -0
  65. package/bundled-references/maggiedash-booking/diagrams/manager-journey.svg +1 -0
  66. package/bundled-references/maggiedash-booking/diagrams/payment-sequence.mmd +20 -0
  67. package/bundled-references/maggiedash-booking/diagrams/payment-sequence.png +0 -0
  68. package/bundled-references/maggiedash-booking/diagrams/payment-sequence.svg +1 -0
  69. package/bundled-references/maggiedash-booking/diagrams/system-context.excalidraw +1 -0
  70. package/bundled-references/maggiedash-booking/diagrams/system-context.mmd +10 -0
  71. package/bundled-references/maggiedash-booking/diagrams/system-context.png +0 -0
  72. package/bundled-references/maggiedash-booking/diagrams/system-context.svg +1 -0
  73. package/bundled-skills/maggie-blog/SKILL.md +12 -0
  74. package/bundled-skills/maggie-blog-bootstrap/SKILL.md +39 -0
  75. package/bundled-skills/maggie-booking/SKILL.md +112 -18
  76. package/bundled-skills/maggie-clone/SKILL.md +13 -0
  77. package/bundled-skills/maggie-deployment/SKILL.md +6 -0
  78. package/bundled-skills/maggie-design/SKILL.md +64 -3
  79. package/bundled-skills/maggie-ops/SKILL.md +12 -0
  80. package/bundled-skills/maggie-seo-geo/SKILL.md +45 -0
  81. package/bundled-skills/maggie-service-booking/SKILL.md +14 -0
  82. package/bundled-tools/clis/maggie_analytics.py +43 -1
  83. package/bundled-tools/clis/maggie_booking.py +161 -26
  84. package/bundled-tools/clis/maggie_browser_audit.py +99 -3
  85. package/bundled-tools/clis/maggie_clone.py +46 -1
  86. package/bundled-tools/clis/maggie_contracts.py +393 -0
  87. package/bundled-tools/clis/maggie_dash.py +22 -6
  88. package/bundled-tools/clis/maggie_design.py +84 -12
  89. package/bundled-tools/clis/maggie_service_booking.py +50 -1
  90. package/bundled-tools/clis/maggie_workflows.py +387 -0
  91. package/bundled-tools/clis/site_audit.py +77 -1
  92. package/bundled-tools/integrations/analytics.md +14 -0
  93. package/bundled-tools/runtime/site_baseline.py +3 -0
  94. package/package.json +1 -1
  95. package/references/browser-inspection.md +21 -0
@@ -0,0 +1,40 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://maggie.noblox.app/contracts/maggie-media/video-generation-policy-v1.json",
4
+ "title": "Maggie Gemini hero video generation policy v1",
5
+ "schemaVersion": "maggie-video-generation-policy.v1",
6
+ "provider": "google-gemini",
7
+ "model": "gemini-omni-1.1-flash",
8
+ "fallbackModel": "veo-3.1-generate-preview",
9
+ "endpointEnv": "GEMINI_API_ENDPOINT",
10
+ "apiKeyEnv": "GEMINI_API_KEY",
11
+ "billingMode": "host-managed-or-byok",
12
+ "costPolicy": {
13
+ "budgetRequired": true,
14
+ "maxAttemptsPerJob": 3,
15
+ "duplicateChargeProtection": "idempotency-key"
16
+ },
17
+ "rights": {
18
+ "inputRightsRequired": true,
19
+ "outputReviewRequired": true,
20
+ "audioRightsRequired": true
21
+ },
22
+ "moderation": {
23
+ "preflightRequired": true,
24
+ "postGenerationReviewRequired": true,
25
+ "blockedOutputPolicy": "discard-and-report"
26
+ },
27
+ "storage": {
28
+ "adapter": "host-owned-object-storage",
29
+ "publicUrlPolicy": "signed-or-approved-public-url",
30
+ "retentionDaysRequired": true,
31
+ "sourceAssetAndJobMetadataRequired": true
32
+ },
33
+ "playback": {
34
+ "posterRequired": true,
35
+ "reducedMotionFallbackRequired": true,
36
+ "saveDataFallbackRequired": true,
37
+ "mobileSafe": true
38
+ },
39
+ "provenance": ["provider", "model", "promptHash", "inputAssetHashes", "sourceRevision", "createdAt"]
40
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://maggie.noblox.app/contracts/maggie-media/video-job-v1.schema.json",
4
+ "title": "Maggie video generation job v1",
5
+ "type": "object",
6
+ "required": ["schemaVersion", "jobId", "idempotencyKey", "state", "attempt", "sourceRevision", "provenance"],
7
+ "properties": {
8
+ "schemaVersion": {"const": "maggie-video-job.v1"},
9
+ "jobId": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,119}$"},
10
+ "idempotencyKey": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$"},
11
+ "state": {"enum": ["queued", "running", "retrying", "cancelled", "blocked", "completed", "failed", "dead-letter"]},
12
+ "attempt": {"type": "integer", "minimum": 0, "maximum": 3},
13
+ "sourceRevision": {"type": "object"},
14
+ "provenance": {"type": "object"},
15
+ "segments": {"type": "array", "items": {"type": "object"}},
16
+ "storage": {"type": "object"},
17
+ "errorClass": {"enum": ["provider-transient", "provider-permanent", "moderation", "rights", "validation", "cancelled", "cost-limit", "unknown"]}
18
+ },
19
+ "additionalProperties": false
20
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://maggie.noblox.app/contracts/maggie-media/video-playback-evidence-v1.schema.json",
4
+ "title": "Maggie video playback evidence v1",
5
+ "type": "object",
6
+ "required": ["schemaVersion", "jobId", "sourceRevision", "viewports", "rawProviderPayloadIncluded"],
7
+ "properties": {
8
+ "schemaVersion": {"const": "maggie-video-playback-evidence.v1"},
9
+ "jobId": {"type": "string"},
10
+ "sourceRevision": {"type": "object"},
11
+ "viewports": {"type": "array", "minItems": 3, "items": {"type": "object", "required": ["viewport", "status", "posterVisible", "reducedMotionFallback", "saveDataFallback"], "properties": {"viewport": {"enum": ["desktop", "tablet", "mobile"]}, "status": {"const": "passed"}, "posterVisible": {"const": true}, "reducedMotionFallback": {"const": true}, "saveDataFallback": {"const": true}}, "additionalProperties": false}},
12
+ "rawProviderPayloadIncluded": {"const": false}
13
+ },
14
+ "additionalProperties": false
15
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://maggie.noblox.app/contracts/maggie-ops/npm11-preflight-v1.schema.json",
4
+ "title": "Maggie npm 11 install preflight v1",
5
+ "type": "object",
6
+ "required": ["schemaVersion", "supportMatrix", "node", "npm", "installScriptPolicy", "lockfilePolicy", "smoke"],
7
+ "properties": {
8
+ "schemaVersion": {"const": "maggie-npm11-preflight.v1"},
9
+ "supportMatrix": {"type": "array", "minItems": 4, "items": {"type": "object", "required": ["packageManager", "supportedVersions", "installCommand", "lockfile", "lifecyclePolicy"], "properties": {"packageManager": {"enum": ["npm", "pnpm", "yarn", "bun"]}, "supportedVersions": {"type": "array", "minItems": 1}, "installCommand": {"type": "string"}, "lockfile": {"type": "string"}, "lifecyclePolicy": {"const": "ignore-scripts-smoke-first"}}, "additionalProperties": false}},
10
+ "node": {"type": "object", "required": ["supportedMajor", "observedMajor"]},
11
+ "npm": {"type": "object", "required": ["supportedMajor", "observedMajor"]},
12
+ "installScriptPolicy": {"enum": ["audit-before-run", "ignore-scripts-smoke-first"]},
13
+ "lockfilePolicy": {"enum": ["package-lock-v3", "host-package-manager"]},
14
+ "smoke": {"type": "object", "required": ["ignoreScripts", "passed"], "properties": {"ignoreScripts": {"type": "boolean"}, "passed": {"type": "boolean"}}, "additionalProperties": false}
15
+ },
16
+ "additionalProperties": false
17
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://maggie.noblox.app/contracts/maggie-scaffold/host-scaffold-v1.schema.json",
4
+ "title": "Maggie empty-project host scaffold v1",
5
+ "type": "object",
6
+ "required": ["schemaVersion", "framework", "language", "packageManager", "installPolicy", "hostHandoff"],
7
+ "properties": {
8
+ "schemaVersion": {"const": "maggie-host-scaffold.v1"},
9
+ "framework": {"enum": ["astro", "nextjs", "sveltekit", "nuxt", "vite-react", "vite-vue"]},
10
+ "language": {"enum": ["typescript", "javascript"]},
11
+ "packageManager": {"enum": ["npm", "pnpm", "yarn", "bun"]},
12
+ "installPolicy": {"type": "object", "required": ["requiresConfirm", "secretsByDefault", "migrationsByDefault"], "properties": {
13
+ "requiresConfirm": {"const": true},
14
+ "secretsByDefault": {"const": "never"},
15
+ "migrationsByDefault": {"const": "never"},
16
+ "installDependencies": {"type": "boolean"}
17
+ }, "additionalProperties": false},
18
+ "hostHandoff": {"type": "object", "required": ["generatedFiles", "rollbackPlan", "nextCommands"], "properties": {
19
+ "generatedFiles": {"type": "array", "items": {"type": "string"}},
20
+ "rollbackPlan": {"type": "string", "minLength": 1},
21
+ "nextCommands": {"type": "array", "items": {"type": "string"}}
22
+ }, "additionalProperties": false}
23
+ },
24
+ "additionalProperties": false
25
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://maggie.noblox.app/contracts/maggie-seo/gsc-readiness-v1.schema.json",
4
+ "title": "Maggie Search Console readiness evidence v1",
5
+ "type": "object",
6
+ "required": ["schemaVersion", "property", "verification", "canonical", "robots", "sitemap", "authorization", "queryReadback", "productionSmoke"],
7
+ "properties": {
8
+ "schemaVersion": {"const": "maggie-gsc-readiness.v1"},
9
+ "property": {"type": "object", "required": ["siteUrl", "type"], "properties": {"siteUrl": {"type": "string", "format": "uri"}, "type": {"enum": ["domain", "url-prefix"]}}, "additionalProperties": false},
10
+ "verification": {"type": "object", "required": ["passed"], "properties": {"passed": {"const": true}, "method": {"enum": ["dns", "html", "meta"]}}, "additionalProperties": false},
11
+ "canonical": {"type": "object", "required": ["passed", "origin"], "properties": {"passed": {"const": true}, "origin": {"type": "string"}}, "additionalProperties": false},
12
+ "robots": {"type": "object", "required": ["passed"], "properties": {"passed": {"const": true}}, "additionalProperties": false},
13
+ "sitemap": {"type": "object", "required": ["passed", "url"], "properties": {"passed": {"const": true}, "url": {"type": "string", "format": "uri"}}, "additionalProperties": false},
14
+ "authorization": {"type": "object", "required": ["readOnly", "authorized"], "properties": {"readOnly": {"const": true}, "authorized": {"const": true}}, "additionalProperties": false},
15
+ "queryReadback": {"type": "object", "required": ["passed"], "properties": {"passed": {"const": true}, "rows": {"type": "integer", "minimum": 0}}, "additionalProperties": false},
16
+ "productionSmoke": {"type": "object", "required": ["passed"], "properties": {"passed": {"const": true}}, "additionalProperties": false}
17
+ },
18
+ "additionalProperties": false
19
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Maggie third-party privacy origin evidence",
4
+ "type": "object",
5
+ "required": ["schemaVersion", "pages", "policyOrigins"],
6
+ "properties": {
7
+ "schemaVersion": {"const": "maggie-privacy-origin-evidence.v1"},
8
+ "pages": {"type": "array"},
9
+ "policyOrigins": {"type": "array"}
10
+ }
11
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "schemaVersion": "maggie-booking-delivery-provider.v1",
3
+ "email": {"provider": "resend", "channel": "email", "secretEnv": "RESEND_API_KEY"},
4
+ "sms": {"provider": "twilio", "channel": "sms", "secretEnv": "TWILIO_AUTH_TOKEN"},
5
+ "confirmationRule": "provider-acknowledged-only",
6
+ "retryPolicy": {"maxAttempts": 5, "backoff": "exponential-jitter", "idempotency": "booking-event-and-channel"},
7
+ "deadLetterPolicy": {"afterMaxAttempts": "dead-letter", "replayRequiresExplicitAction": true}
8
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://maggie.noblox.app/contracts/maggie-service-booking/delivery-provider-v1.schema.json",
4
+ "title": "Maggie booking notification delivery provider v1",
5
+ "type": "object",
6
+ "required": ["schemaVersion", "email", "sms", "confirmationRule", "retryPolicy", "deadLetterPolicy"],
7
+ "properties": {
8
+ "schemaVersion": {"const": "maggie-booking-delivery-provider.v1"},
9
+ "email": {"type": "object", "required": ["provider", "channel", "secretEnv"], "properties": {"provider": {"enum": ["resend", "provider-neutral"]}, "channel": {"const": "email"}, "secretEnv": {"type": "string", "pattern": "^[A-Z][A-Z0-9_]+$"}}, "additionalProperties": false},
10
+ "sms": {"type": "object", "required": ["provider", "channel", "secretEnv"], "properties": {"provider": {"enum": ["twilio", "provider-neutral"]}, "channel": {"const": "sms"}, "secretEnv": {"type": "string", "pattern": "^[A-Z][A-Z0-9_]+$"}}, "additionalProperties": false},
11
+ "confirmationRule": {"const": "provider-acknowledged-only"},
12
+ "retryPolicy": {"type": "object", "required": ["maxAttempts", "backoff", "idempotency"], "properties": {"maxAttempts": {"type": "integer", "minimum": 1, "maximum": 10}, "backoff": {"enum": ["exponential-jitter", "fixed"]}, "idempotency": {"const": "booking-event-and-channel"}}, "additionalProperties": false},
13
+ "deadLetterPolicy": {"type": "object", "required": ["afterMaxAttempts", "replayRequiresExplicitAction"], "properties": {"afterMaxAttempts": {"const": "dead-letter"}, "replayRequiresExplicitAction": {"const": true}}, "additionalProperties": false}
14
+ },
15
+ "additionalProperties": false
16
+ }
@@ -8,10 +8,11 @@
8
8
  "roles": ["manager", "staff", "finance"],
9
9
  "permissions": [
10
10
  "calendar.read", "bookings.read", "bookings.manage", "customers.read",
11
- "catalog.read", "catalog.manage", "staff.read", "staff.manage",
12
- "resources.read", "resources.manage", "schedule.read", "schedule.manage",
13
- "payments.read", "payments.manage", "refunds.manage", "settings.read",
14
- "settings.manage", "reports.read", "audit.read"
11
+ "waitlist.read", "waitlist.manage",
12
+ "catalog.read", "catalog.manage", "packages.read", "packages.manage", "staff.read", "staff.manage",
13
+ "resources.read", "resources.manage", "schedule.read", "schedule.manage", "locations.read", "locations.manage",
14
+ "payments.read", "payments.manage", "refunds.manage", "notifications.read", "notifications.manage",
15
+ "settings.read", "settings.manage", "reports.read", "audit.read"
15
16
  ],
16
17
  "endpointIds": ["booking.access.read", "booking.access.create", "booking.access.update", "booking.access.revoke"],
17
18
  "canonicalRoutes": {
@@ -10,6 +10,8 @@
10
10
  "hostResponsibilities": ["tenant-binding", "origin-and-csrf", "rate-limit", "bot-protection", "opaque-payment-return-token", "sealed-customer-manage-token", "provider-and-notification-adapters"],
11
11
  "endpointIds": [
12
12
  "booking.public.catalog.read",
13
+ "booking.public.package-checkout.start",
14
+ "booking.public.package-payment-return.read",
13
15
  "booking.public.availability.read",
14
16
  "booking.public.waitlist.join",
15
17
  "booking.public.hold.create",
@@ -21,7 +23,9 @@
21
23
  ],
22
24
  "canonicalRoutes": {
23
25
  "booking.public.catalog.read": "GET /catalog.json",
24
- "booking.public.availability.read": "GET /availability.json?serviceVariantId={serviceVariantId}&date={date}",
26
+ "booking.public.package-checkout.start": "POST /package-checkout.json",
27
+ "booking.public.package-payment-return.read": "GET /package-payment-return.json?token={token}",
28
+ "booking.public.availability.read": "GET /availability.json?serviceVariantId={serviceVariantId}&locationId={locationId}&date={date}",
25
29
  "booking.public.waitlist.join": "POST /waitlist.json",
26
30
  "booking.public.hold.create": "POST /holds.json",
27
31
  "booking.public.checkout.start": "POST /checkout.json",
@@ -42,5 +46,12 @@
42
46
  "paymentReturn": "short-lived",
43
47
  "customerManage": "30-day-sealed",
44
48
  "rawTokenStorage": false
49
+ },
50
+ "packageRedemption": {
51
+ "holdField": "packageEntitlementId",
52
+ "checkoutField": "packageEntitlementId",
53
+ "binding": "tenant-and-customer-email",
54
+ "fullyCoveredOnly": true,
55
+ "transaction": "lock-entitlement-and-items-create-booking-write-ledger"
45
56
  }
46
57
  }
@@ -17,6 +17,8 @@
17
17
  { "id": "booking.reminder", "variables": ["customerName", "serviceName", "when", "locationName", "bookingId", "manageUrl", "siteName"] },
18
18
  { "id": "payment.action_required", "variables": ["customerName", "serviceName", "bookingId", "actionUrl", "siteName"] },
19
19
  { "id": "payment.refunded", "variables": ["customerName", "serviceName", "bookingId", "siteName"] },
20
+ { "id": "package.purchase.confirmed", "variables": ["customerName", "packageName", "amount", "expiresAt", "siteName"] },
21
+ { "id": "package.purchase.refunded", "variables": ["customerName", "packageName", "amount", "siteName"] },
20
22
  { "id": "booking.waitlist.available", "variables": ["customerName", "serviceName", "when", "locationName", "bookingUrl", "siteName"] }
21
23
  ],
22
24
  "endpointIds": ["booking.email-templates.read", "booking.email-templates.draft", "booking.email-templates.publish", "booking.email-templates.rollback"],
@@ -5,11 +5,14 @@
5
5
  "schemaVersion": "maggiedash-booking-host-adapter.v1",
6
6
  "apiPrefix": "/api/maggie/booking",
7
7
  "auth": { "managerSession": "host-session-cookie", "emailPassword": true, "passkeys": false },
8
- "requiredCapabilities": ["bookingOverview", "bookingCalendar", "bookingLifecycle", "customerLookup", "bookingWaitlist", "serviceCatalog", "locationSetup", "staffSetup", "resourceSetup", "paymentReconciliation", "bookingReports", "bookingSettings", "bookingAudit", "notificationOperations", "bookingAccess"],
8
+ "requiredCapabilities": ["bookingOverview", "bookingCalendar", "bookingLifecycle", "customerLookup", "bookingWaitlist", "serviceCatalog", "treatmentPackages", "packagePurchasePayments", "locationSetup", "staffSetup", "resourceSetup", "paymentReconciliation", "bookingReports", "bookingSettings", "bookingAudit", "notificationOperations", "bookingAccess"],
9
9
  "endpointIds": [
10
- "booking.overview.read", "booking.reports.read", "booking.calendar.read", "booking.bookings.read", "booking.booking.read", "booking.booking.create", "booking.booking.transition", "booking.booking.reschedule", "booking.availability.read", "booking.holds.create", "booking.holds.release", "booking.customers.read", "booking.customer.read", "booking.waitlist.read", "booking.waitlist.update", "booking.catalog.read", "booking.catalog.write", "booking.locations.read", "booking.location.write", "booking.staff.read", "booking.staff.write", "booking.resources.read", "booking.resources.write", "booking.schedule.read", "booking.schedule.write", "booking.payments.read", "booking.payment.start", "booking.payment.reconcile", "booking.refund.start", "booking.notifications.read", "booking.notification.replay", "booking.health.read", "booking.payment-health.read", "booking.payment-health.verify", "booking.settings.read", "booking.settings.update", "booking.audit.read", "booking.events.read", "booking.runtime.read", "booking.provider.webhook"
10
+ "booking.overview.read", "booking.reports.read", "booking.calendar.read", "booking.bookings.read", "booking.booking.read", "booking.booking.create", "booking.booking.transition", "booking.booking.no-show-fee", "booking.booking.reschedule", "booking.availability.read", "booking.holds.create", "booking.holds.release", "booking.customers.read", "booking.customer.read", "booking.waitlist.read", "booking.waitlist.update", "booking.catalog.read", "booking.catalog.write", "booking.packages.read", "booking.package.write", "booking.customer-packages.read", "booking.customer-package.grant", "booking.package-purchases.read", "booking.package-purchase.refund", "booking.locations.read", "booking.location.write", "booking.staff.read", "booking.staff.write", "booking.resources.read", "booking.resources.write", "booking.schedule.read", "booking.schedule.write", "booking.payments.read", "booking.payment.start", "booking.payment.reconcile", "booking.refund.start", "booking.notifications.read", "booking.notification.replay", "booking.health.read", "booking.payment-health.read", "booking.payment-health.verify", "booking.settings.read", "booking.settings.update", "booking.audit.read", "booking.events.read", "booking.runtime.read", "booking.provider.webhook"
11
11
  ],
12
12
  "canonicalRoutes": {
13
+ "booking.booking.no-show-fee": "POST /bookings/{id}/no-show-fee.json",
14
+ "booking.package-purchases.read": "GET /package-purchases.json?customerId={customerId}&status={status}",
15
+ "booking.package-purchase.refund": "POST /package-purchases/{purchaseId}/refund.json",
13
16
  "booking.payment.start": "POST /payments/start.json",
14
17
  "booking.refund.start": "POST /refunds.json",
15
18
  "booking.notifications.read": "GET /notifications.json?status={status}",
@@ -26,6 +29,7 @@
26
29
  "booking.booking.read": "readBooking",
27
30
  "booking.booking.create": "createBooking",
28
31
  "booking.booking.transition": "transitionBooking",
32
+ "booking.booking.no-show-fee": "chargeNoShowFee",
29
33
  "booking.booking.reschedule": "rescheduleBooking",
30
34
  "booking.availability.read": "readAvailability",
31
35
  "booking.holds.create": "createHold",
@@ -36,6 +40,12 @@
36
40
  "booking.waitlist.update": "updateWaitlist",
37
41
  "booking.catalog.read": "readCatalog",
38
42
  "booking.catalog.write": "updateCatalog",
43
+ "booking.packages.read": "listPackages",
44
+ "booking.package.write": "updatePackage",
45
+ "booking.customer-packages.read": "listCustomerPackages",
46
+ "booking.customer-package.grant": "grantCustomerPackage",
47
+ "booking.package-purchases.read": "listPackagePurchases",
48
+ "booking.package-purchase.refund": "startPackageRefund",
39
49
  "booking.locations.read": "listLocations",
40
50
  "booking.location.write": "updateLocation",
41
51
  "booking.staff.read": "listStaff",
@@ -65,7 +75,9 @@
65
75
  "readPublicAvailability",
66
76
  "createCustomerHold",
67
77
  "startCustomerCheckout",
78
+ "startCustomerPackageCheckout",
68
79
  "readCustomerPaymentReturn",
80
+ "readCustomerPackagePaymentReturn",
69
81
  "readCustomerManage",
70
82
  "cancelCustomerBooking",
71
83
  "rescheduleCustomerBooking",
@@ -0,0 +1,41 @@
1
+ {
2
+ "schemaVersion": "maggiedash-booking-runtime.v1",
3
+ "generatedAt": "2026-09-20T00:00:00Z",
4
+ "environment": "fixture",
5
+ "baseUrl": "https://booking.fixture.invalid",
6
+ "tenant": "dedicated-fixture-tenant",
7
+ "endpoints": [
8
+ { "id": "booking.overview.read", "method": "GET", "route": "/api/maggie/booking/overview.json", "status": 200, "requiredFieldsPresent": true },
9
+ { "id": "booking.calendar.read", "method": "GET", "route": "/api/maggie/booking/calendar.json?date={date}&view={view}", "status": 200, "requiredFieldsPresent": true },
10
+ { "id": "booking.bookings.read", "method": "GET", "route": "/api/maggie/booking/bookings.json", "status": 200, "requiredFieldsPresent": true },
11
+ { "id": "booking.booking.read", "method": "GET", "route": "/api/maggie/booking/bookings/{id}.json", "status": 200, "requiredFieldsPresent": true },
12
+ { "id": "booking.booking.create", "method": "POST", "route": "/api/maggie/booking/bookings.json", "status": 200, "requiredFieldsPresent": true },
13
+ { "id": "booking.booking.transition", "method": "POST", "route": "/api/maggie/booking/bookings/{id}/transition.json", "status": 200, "requiredFieldsPresent": true },
14
+ { "id": "booking.booking.reschedule", "method": "POST", "route": "/api/maggie/booking/bookings/{id}/reschedule.json", "status": 200, "requiredFieldsPresent": true },
15
+ { "id": "booking.availability.read", "method": "GET", "route": "/api/maggie/booking/availability.json", "status": 200, "requiredFieldsPresent": true },
16
+ { "id": "booking.holds.create", "method": "POST", "route": "/api/maggie/booking/holds.json", "status": 200, "requiredFieldsPresent": true },
17
+ { "id": "booking.holds.release", "method": "POST", "route": "/api/maggie/booking/holds/{id}/release.json", "status": 200, "requiredFieldsPresent": true },
18
+ { "id": "booking.customers.read", "method": "GET", "route": "/api/maggie/booking/customers.json", "status": 200, "requiredFieldsPresent": true },
19
+ { "id": "booking.customer.read", "method": "GET", "route": "/api/maggie/booking/customers/{id}.json", "status": 200, "requiredFieldsPresent": true },
20
+ { "id": "booking.catalog.read", "method": "GET", "route": "/api/maggie/booking/catalog.json", "status": 200, "requiredFieldsPresent": true },
21
+ { "id": "booking.catalog.write", "method": "POST", "route": "/api/maggie/booking/catalog.json", "status": 200, "requiredFieldsPresent": true },
22
+ { "id": "booking.staff.read", "method": "GET", "route": "/api/maggie/booking/staff.json", "status": 200, "requiredFieldsPresent": true },
23
+ { "id": "booking.staff.write", "method": "POST", "route": "/api/maggie/booking/staff.json", "status": 200, "requiredFieldsPresent": true },
24
+ { "id": "booking.resources.read", "method": "GET", "route": "/api/maggie/booking/resources.json", "status": 200, "requiredFieldsPresent": true },
25
+ { "id": "booking.resources.write", "method": "POST", "route": "/api/maggie/booking/resources.json", "status": 200, "requiredFieldsPresent": true },
26
+ { "id": "booking.schedule.read", "method": "GET", "route": "/api/maggie/booking/schedule.json", "status": 200, "requiredFieldsPresent": true },
27
+ { "id": "booking.schedule.write", "method": "POST", "route": "/api/maggie/booking/schedule.json", "status": 200, "requiredFieldsPresent": true },
28
+ { "id": "booking.payments.read", "method": "GET", "route": "/api/maggie/booking/payments.json", "status": 200, "requiredFieldsPresent": true },
29
+ { "id": "booking.payment.start", "method": "POST", "route": "/api/maggie/booking/payments/start.json", "status": 200, "requiredFieldsPresent": true },
30
+ { "id": "booking.payment.reconcile", "method": "POST", "route": "/api/maggie/booking/payments/{id}/reconcile.json", "status": 200, "requiredFieldsPresent": true },
31
+ { "id": "booking.refund.start", "method": "POST", "route": "/api/maggie/booking/refunds.json", "status": 200, "requiredFieldsPresent": true },
32
+ { "id": "booking.health.read", "method": "GET", "route": "/api/maggie/booking/health.json", "status": 200, "requiredFieldsPresent": true },
33
+ { "id": "booking.payment-health.read", "method": "GET", "route": "/api/maggie/booking/payment-health.json", "status": 200, "requiredFieldsPresent": true },
34
+ { "id": "booking.settings.read", "method": "GET", "route": "/api/maggie/booking/settings.json", "status": 200, "requiredFieldsPresent": true },
35
+ { "id": "booking.settings.update", "method": "PATCH", "route": "/api/maggie/booking/settings.json", "status": 200, "requiredFieldsPresent": true },
36
+ { "id": "booking.audit.read", "method": "GET", "route": "/api/maggie/booking/audit.json", "status": 200, "requiredFieldsPresent": true },
37
+ { "id": "booking.events.read", "method": "GET", "route": "/api/maggie/booking/events.json", "status": 200, "requiredFieldsPresent": true },
38
+ { "id": "booking.runtime.read", "method": "GET", "route": "/api/maggie/booking/runtime.json", "status": 200, "requiredFieldsPresent": true },
39
+ { "id": "booking.provider.webhook", "method": "POST", "route": "/api/maggie/booking/webhooks/{provider}", "status": 200, "requiredFieldsPresent": true }
40
+ ]
41
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://maggiedash.noblox.app/contracts/browser-session-v1.schema.json",
4
+ "title": "MaggieDash browser QA session contract v1",
5
+ "type": "object",
6
+ "required": ["schemaVersion", "mintingBoundary", "passwordHandling", "ttlMinutes", "mintRoute", "revokeRoute"],
7
+ "properties": {
8
+ "schemaVersion": {"const": "maggie-browser-session.v1"},
9
+ "mintingBoundary": {"const": "host-adapter"},
10
+ "passwordHandling": {"const": "never-exposed"},
11
+ "ttlMinutes": {"type": "integer", "minimum": 1, "maximum": 240},
12
+ "mintRoute": {"type": "string", "pattern": "^/"},
13
+ "revokeRoute": {"type": "string", "pattern": "^/"},
14
+ "cookie": {"type": "object", "additionalProperties": true},
15
+ "roles": {"type": "array", "items": {"type": "string"}}
16
+ },
17
+ "additionalProperties": false
18
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://maggiedash.noblox.app/contracts/content-overrides-v1.schema.json",
4
+ "title": "MaggieDash provider-neutral content overrides v1",
5
+ "type": "object",
6
+ "required": ["schemaVersion", "readAtRequestTime", "sourceLiteralIsFallback", "writesCreateRevision", "conflictRequiresSourceRevision", "orphanPolicy", "protectedFields"],
7
+ "properties": {
8
+ "schemaVersion": {"const": "maggie-content-overrides.v1"},
9
+ "readAtRequestTime": {"const": true},
10
+ "sourceLiteralIsFallback": {"const": true},
11
+ "writesCreateRevision": {"const": true},
12
+ "conflictRequiresSourceRevision": {"const": true},
13
+ "orphanPolicy": {"const": "report-and-never-publish"},
14
+ "protectedFields": {"type": "array", "minItems": 1, "items": {"type": "string"}},
15
+ "storage": {"type": "string"},
16
+ "transport": {"type": "string"}
17
+ },
18
+ "additionalProperties": false
19
+ }