vybekiit 0.6.0 → 0.7.0

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 (66) hide show
  1. package/LICENSE.md +47 -0
  2. package/dist/bin.js +6457 -6312
  3. package/dist/global-skills/aws-serverless/SKILL.md +44 -44
  4. package/dist/global-skills/aws-serverless/assets/powertools-handler.py +2 -1
  5. package/dist/global-skills/aws-serverless/references/api-gateway.md +50 -470
  6. package/dist/global-skills/aws-serverless/references/architecture.md +47 -186
  7. package/dist/global-skills/aws-serverless/references/concurrency.md +44 -158
  8. package/dist/global-skills/aws-serverless/references/deployment.md +1 -1
  9. package/dist/global-skills/aws-serverless/references/event-sources.md +72 -391
  10. package/dist/global-skills/aws-serverless/references/lambda.md +69 -428
  11. package/dist/global-skills/aws-serverless/references/orchestration.md +65 -384
  12. package/dist/global-skills/aws-serverless/references/production.md +78 -415
  13. package/dist/global-skills/aws-serverless/references/troubleshooting.md +79 -626
  14. package/dist/global-skills/email-best-practices/.github/workflows/sync-skills.yml +30 -0
  15. package/dist/global-skills/email-best-practices/README.md +63 -0
  16. package/dist/global-skills/email-best-practices/references/accessibility.md +189 -0
  17. package/dist/global-skills/email-best-practices/references/compliance.md +125 -0
  18. package/dist/global-skills/email-best-practices/references/deliverability.md +121 -0
  19. package/dist/global-skills/email-best-practices/references/email-capture.md +129 -0
  20. package/dist/global-skills/email-best-practices/references/email-types.md +173 -0
  21. package/dist/global-skills/email-best-practices/references/list-management.md +157 -0
  22. package/dist/global-skills/email-best-practices/references/marketing-emails.md +115 -0
  23. package/dist/global-skills/email-best-practices/references/sending-reliability.md +155 -0
  24. package/dist/global-skills/email-best-practices/references/transactional-email-catalog.md +418 -0
  25. package/dist/global-skills/email-best-practices/references/transactional-emails.md +92 -0
  26. package/dist/global-skills/email-best-practices/references/webhooks-events.md +167 -0
  27. package/dist/global-skills/email-best-practices/tests/README.md +35 -0
  28. package/dist/global-skills/email-best-practices/tests/scenarios/01-spam-deliverability.md +46 -0
  29. package/dist/global-skills/email-best-practices/tests/scenarios/02-multi-region-compliance.md +48 -0
  30. package/dist/global-skills/email-best-practices/tests/scenarios/03-retry-idempotency.md +36 -0
  31. package/dist/global-skills/email-best-practices/tests/scenarios/04-webhook-bounce-handling.md +52 -0
  32. package/dist/global-skills/email-best-practices/tests/scenarios/05-new-saas-email-plan.md +51 -0
  33. package/dist/global-skills/expo-skill-eval/scripts/check-static.sh +0 -0
  34. package/dist/global-skills/expo-skill-eval/scripts/clean-fixture.sh +0 -0
  35. package/dist/global-skills/expo-skill-eval/scripts/latest-sdk.sh +0 -0
  36. package/dist/global-skills/expo-skill-eval/scripts/make-fixture.sh +0 -0
  37. package/dist/global-skills/expo-skill-eval/scripts/make-workspace.sh +0 -0
  38. package/dist/global-skills/expo-skill-eval/scripts/snapshot-android.sh +0 -0
  39. package/dist/global-skills/expo-skill-eval/scripts/snapshot-ios.sh +0 -0
  40. package/dist/global-skills/expo-skill-eval/scripts/snapshot-web.sh +0 -0
  41. package/dist/global-skills/instrument-feature-flags/references/usage.md +35 -0
  42. package/dist/global-skills/instrument-product-analytics/SKILL.md +1 -1
  43. package/dist/global-skills/instrument-product-analytics/references/android.md +36 -0
  44. package/dist/global-skills/instrument-product-analytics/references/configuration.md +1 -0
  45. package/dist/global-skills/instrument-product-analytics/references/flutter.md +37 -0
  46. package/dist/global-skills/instrument-product-analytics/references/posthog-python.md +3 -2
  47. package/dist/global-skills/instrument-product-analytics/references/usage.md +35 -0
  48. package/dist/global-skills/neon/SKILL.md +27 -20
  49. package/dist/global-skills/neon-ai-gateway/SKILL.md +68 -2
  50. package/dist/global-skills/neon-functions/SKILL.md +7 -7
  51. package/dist/global-skills/neon-object-storage/SKILL.md +2 -2
  52. package/dist/global-skills/neon-postgres/SKILL.md +5 -5
  53. package/dist/global-skills/neon-postgres/references/neon-sdk.md +262 -0
  54. package/dist/global-skills/neon-postgres-branches/SKILL.md +1 -1
  55. package/dist/global-skills/stripe-best-practices/SKILL.md +11 -6
  56. package/dist/global-skills/stripe-best-practices/references/billing.md +5 -0
  57. package/dist/global-skills/stripe-best-practices/references/payments.md +4 -2
  58. package/dist/global-skills/stripe-best-practices/references/tax.md +78 -8
  59. package/dist/global-skills/use-railway/scripts/analyze-mongo.py +0 -0
  60. package/dist/global-skills/use-railway/scripts/analyze-mysql.py +0 -0
  61. package/dist/global-skills/use-railway/scripts/analyze-postgres.py +0 -0
  62. package/dist/global-skills/use-railway/scripts/analyze-redis.py +0 -0
  63. package/dist/global-skills/use-railway/scripts/enable-pg-stats.py +0 -0
  64. package/dist/global-skills/use-railway/scripts/pg-extensions.py +0 -0
  65. package/dist/global-skills/use-railway/scripts/railway-api.sh +0 -0
  66. package/package.json +20 -21
@@ -4,34 +4,104 @@
4
4
 
5
5
  - When tax applies
6
6
  - Two-step setup
7
+ - Verify before you trust automatic tax
8
+ - Choosing a product tax code
9
+ - Diagnose zero tax
10
+ - Per-integration setup
11
+ - Connect platforms and marketplaces
12
+ - Threshold and nexus monitoring
13
+ - Registration safety
7
14
  - If jurisdictions are unknown
8
15
  - If the region or tax type isn’t supported
9
16
 
10
17
  ## When tax applies
11
18
 
12
- Use Stripe Tax for any subscription, invoice, or Checkout Session where the merchant has customers across multiple jurisdictions. It handles sales tax, VAT, and GST automatically based on the customer’s location and the merchant’s active registrations. See the [Tax overview](https://docs.stripe.com/tax.md) for supported regions and tax types.
19
+ Use Stripe Tax for any subscription, invoice, or Checkout Session where the user has customers across multiple jurisdictions. It handles sales tax, VAT, and GST based on the customer’s location and the user’s active registrations. See the [Tax overview](https://docs.stripe.com/tax.md) for supported regions and tax types.
13
20
 
14
21
  ## Two-step setup
15
22
 
16
- 1. Add a registration for each jurisdiction where the merchant is obligated to collect tax. Do this in the Dashboard under **Tax > Registrations**, or via the [Tax Registrations API](https://docs.stripe.com/api/tax/registrations.md).
23
+ 1. Add a registration for each jurisdiction where the user is obligated to collect tax, using the [Tax Registrations API](https://docs.stripe.com/api/tax/registrations.md) or the [Dashboard](https://docs.stripe.com/tax/registering.md).
17
24
  2. Pass `automatic_tax: { enabled: true }` on the [Subscription](https://docs.stripe.com/api/subscriptions.md), [Invoice](https://docs.stripe.com/api/invoices.md), or [Checkout Session](https://docs.stripe.com/api/checkout/sessions.md) object.
18
25
 
19
- It’s safe to enable `automatic_tax` before any registrations exist — Stripe won’t collect tax until at least one registration is active.
26
+ An *active registration* is a jurisdiction you’ve added to Stripe that shows as *Collecting*. It’s per-jurisdiction, and not the same as having a Stripe account.
20
27
 
21
- **Traps to avoid:** `automatic_tax` and explicit `tax_rates` are mutually exclusive. For existing subscriptions, clear `default_tax_rates` and all item-level `tax_rates` before enabling `automatic_tax` — the update will fail otherwise. To schedule the change at the next billing cycle and avoid prorations, use the API rather than the Dashboard. For bulk migrations, use the [Tax migration tool](https://docs.stripe.com/billing/taxes/migration.md).
28
+ Enabling `automatic_tax` without an active registration is the single most common Stripe Tax mistake: Stripe Tax only collects tax in jurisdictions where the user has an active registration. Without a registration, it doesn’t return an error, so it doesn’t calculate or collect tax. The user thinks tax is on while collecting nothing. Never enable `automatic_tax` and assume the user is set up. Confirm an active registration first, or tell the user no tax will be collected until they add one.
22
29
 
23
- **Traps to avoid:** For EU merchants, one OSS union registration covers all 27 member states. Don’t register an individual EU country separately unless the merchant has a physical presence there.
30
+ **Traps to avoid:** `automatic_tax` can’t coexist with manual [`tax_rates`](https://docs.stripe.com/tax/tax-rates.md) (explicit rate objects) on the same object. Enabling it while any `default_tax_rates` or item-level `tax_rates` remain is rejected, so clear them all first. It’s all-or-nothing, not per line item. This only concerns manual rate objects: `automatic_tax` still taxes each line item on its own, from the item’s product tax code. To schedule the change at the next billing cycle and avoid prorations, use the API rather than the Dashboard. For bulk migrations, use the [Tax migration tool](https://docs.stripe.com/billing/taxes/migration.md), which removes the tax rates for you.
31
+
32
+ **Traps to avoid:** For users based in the EU, the Union OSS scheme reports cross-border B2C sales across the EU through a single registration and return, so you don’t register in each destination country for those sales. It doesn’t cover domestic or B2B sales. The user still needs a domestic registration in their home country. Confirm the specifics with the user’s tax advisor.
33
+
34
+ ## Verify before you trust automatic tax
35
+
36
+ After enabling `automatic_tax`, don’t assume the setup is complete: tax is only collected after the user has an active registration in the customer’s jurisdiction. Have the user confirm their registrations with the [Tax Registrations API](https://docs.stripe.com/api/tax/registrations.md) (or in the Dashboard). With none, tax won’t be collected anywhere. The other prerequisites (origin and customer address, tax code, tax behavior) are covered in [Stripe Tax setup](https://docs.stripe.com/tax/set-up.md).
37
+
38
+ ## Choosing a product tax code
39
+
40
+ A product tax code (PTC) tells Stripe how to tax a product.
41
+
42
+ - Never invent, guess, or hardcode a `txcd_` from memory. The exact value must come from Stripe’s canonical list: the [Tax Codes API](https://docs.stripe.com/api/tax_codes.md) or the [tax code guide](https://docs.stripe.com/tax/tax-codes.md).
43
+ - Don’t default to the generic **General - Electronically Supplied Services** (`txcd_10000000`) for US sales. It’s too broad for US state-level taxability; pick a specific digital or SaaS code. See [tax codes for digital products](https://docs.stripe.com/tax/digital-products.md) and [tax codes for AI services](https://docs.stripe.com/tax/ai.md).
44
+ - Show the candidate codes and let the user confirm; don’t decide which code is legally correct for them. (Tax code goes on the Product, `tax_behavior` on the Price. See [product tax codes and tax behavior](https://docs.stripe.com/tax/products-prices-tax-codes-tax-behavior.md).)
45
+
46
+ ## Diagnose zero tax
47
+
48
+ When a transaction shows zero tax, first confirm `automatic_tax` is actually enabled on the object. If it isn’t, Stripe doesn’t calculate tax at all. If it is, read the `taxability_reason` on the line item’s `taxes` to see why. On a Checkout Session, that breakdown isn’t returned by default: retrieve the session with `expand[]=line_items.data.taxes`.
49
+
50
+ The reason worth calling out is **`not_collecting`, which is ambiguous**: it means either **no active registration** in the customer’s jurisdiction (the usual cause; check registrations with the [Tax Registrations API](https://docs.stripe.com/api/tax/registrations.md)) **or** a **Nontaxable product tax code** (`txcd_00000000`) on the product. `taxability_reason` can’t tell the two apart, so check the product’s tax code and rule out the Nontaxable code before concluding it’s a registration gap.
51
+
52
+ For the other reasons (exempt products or customers, reverse charge, unsupported regions, zero-rated), see [zero tax amounts and reverse charges](https://docs.stripe.com/tax/zero-tax.md).
53
+
54
+ ## Per-integration setup
55
+
56
+ Every integration needs a resolvable customer address and an active registration in that jurisdiction. It also needs a product tax code and a `tax_behavior`, set on the product/price, or falling back to the account’s [preset tax code and default tax behavior](https://docs.stripe.com/tax/products-prices-tax-codes-tax-behavior.md).
57
+
58
+ - **Checkout Sessions**: set `automatic_tax: { enabled: true }`. For a new customer, Checkout collects the address it needs, so don’t force `billing_address_collection: 'required'` (unnecessary for tax, and it adds checkout friction). For an existing or returning customer, Checkout uses their saved address by default; to tax the address entered at checkout instead, set `customer_update: { address: 'auto' }` and make sure Checkout actually collects a fresh address (a collected shipping address, or `billing_address_collection: 'required'` when you don’t collect shipping), or it keeps using the saved one. See [tax on Checkout](https://docs.stripe.com/tax/checkout.md).
59
+ - **Invoices**: set `automatic_tax: { enabled: true }` on the invoice; the customer needs a saved address. See the [Invoices API](https://docs.stripe.com/api/invoices.md).
60
+ - **Subscriptions**: set `automatic_tax: { enabled: true }`; clear existing `tax_rates` first (see Traps to avoid). See the [Subscriptions API](https://docs.stripe.com/api/subscriptions.md).
61
+ - **Payment Links**: set `automatic_tax: { enabled: true }`.
62
+ - **Custom PaymentIntents**: there’s no `automatic_tax` field, so this path is easy to under-build. Create a [tax calculation](https://docs.stripe.com/api/tax/calculations.md) with the customer’s address, set the PaymentIntent `amount` to the calculation total, and link the calculation to the PaymentIntent. You must also record a tax transaction from the calculation after payment, or the sale never appears in tax reports: the [simplified integration](https://docs.stripe.com/tax/payment-intent/simplified.md) records the transaction and refund reversals automatically once the calculation is linked, while the [custom integration](https://docs.stripe.com/tax/payment-intent/custom.md) records them yourself for line-item control.
63
+
64
+ For B2B or reverse-charge treatment, collect the customer’s tax ID (`tax_id_collection: { enabled: true }` on Checkout, or store it on the [Customer](https://docs.stripe.com/billing/customer/tax-ids.md)). Without a valid tax ID, Stripe Tax treats a cross-border B2B sale as B2C and charges tax. See [collect tax IDs](https://docs.stripe.com/tax/checkout/tax-ids.md).
65
+
66
+ ## Connect platforms and marketplaces
67
+
68
+ For a Connect platform or marketplace, first determine which entity collects and remits the tax: the platform or the connected account. This is a legal determination, so route the final call to the user’s tax advisor rather than inferring it from whether they call themselves a platform or a marketplace. The practical signal is who the [merchant of record](https://docs.stripe.com/connect/merchant-of-record.md) is, which follows the charge type: direct charges make the connected account the merchant of record, and destination charges usually make it the platform. Marketplace-facilitator rules can override this, so have the advisor confirm. See [Stripe Tax with Connect](https://docs.stripe.com/tax/connect.md) for the decision.
69
+
70
+ Once the liable entity is known:
71
+
72
+ - Set the liable entity with `automatic_tax.liability` on Checkout, Invoices, Subscriptions, or Payment Links: `{ type: 'self' }` for the platform, or `{ type: 'account', account: '<id>' }` for the connected account. Destination and separate charges support both; a platform-liable direct charge uses the gated `{ type: 'application' }`. Custom PaymentIntents have no `automatic_tax` field, so follow the PaymentIntents path in the guides instead. Pick the guide by outcome: connected account collects, [tax for platforms](https://docs.stripe.com/tax/tax-for-platforms.md); platform collects, [tax for marketplaces](https://docs.stripe.com/tax/tax-for-marketplaces.md).
73
+ - Registrations and tax settings belong to the liable entity. When the connected account is liable, confirm its [tax settings](https://docs.stripe.com/tax/settings-api.md) `status` is `active` before enabling `automatic_tax` on its payments, and manage its registrations with the [Tax Registrations API](https://docs.stripe.com/api/tax/registrations.md) using the `Stripe-Account` header (or Connect embedded components).
74
+
75
+ ## Threshold and nexus monitoring
76
+
77
+ Stripe’s [threshold monitoring](https://docs.stripe.com/tax/monitoring.md) highlights *potential* registration obligations (no public API yet). Present it as information and route the decision to the user’s tax advisor. It’s up to the user to confirm whether registration is required; don’t tell them they must register.
78
+
79
+ ## Registration safety
80
+
81
+ Guide, don’t advise. Never tell a user where they must register or whether they’re legally obligated. Recommend they consult their tax advisor to determine their obligations.
82
+
83
+ - The [Tax Registrations API](https://docs.stripe.com/api/tax/registrations.md) can list, create, update, and expire registrations (set `expires_at` to expire; there’s no delete). A scheduled expiry can be changed, but an expiration that has taken effect is permanent (to collect again, the user adds a new registration), and there’s no pause. A head office address is required before adding a registration.
84
+ - Adding a registration in Stripe records where the user is *already* registered. It doesn’t register them with the tax authority.
85
+ - Creating or expiring a registration changes whether Stripe collects tax in that jurisdiction, but it doesn’t register or deregister the user with the tax authority. The user must do that separately. Prepare the change and have the user confirm it; never create or expire a registration automatically.
86
+
87
+ **How to register.** Present the paths that fit the user and let them (with their tax advisor) choose. Don’t pick for them.
88
+
89
+ - **Register themselves, then record it in Stripe**: the user registers with the tax authority, then records it with the [Tax Registrations API](https://docs.stripe.com/api/tax/registrations.md) or the Dashboard. See [Register for tax](https://docs.stripe.com/tax/registering.md).
90
+ - **Ask Stripe to register (US only)**: for remote, out-of-state sellers with no physical presence in the state; no public API, requires a Tax Complete subscription, and doesn’t support in-state registrations. See [Use Stripe to register](https://docs.stripe.com/tax/use-stripe-to-register.md).
91
+ - **Register outside the US with Taxually**: no public API; done through the Taxually app. See [Register outside the US with Taxually](https://docs.stripe.com/tax/use-taxually-to-register.md).
92
+
93
+ **Reporting and filing.** Stripe Tax calculates and collects tax but doesn’t file returns unless the user is on a filing product. Point users to the Dashboard [tax reports and exports](https://docs.stripe.com/tax/reports.md) to reconcile and remit; filing runs through Stripe (US) or Taxually (non-US).
24
94
 
25
95
  ## If jurisdictions are unknown
26
96
 
27
- Don’t guess which jurisdictions apply. Prompt the user: “Go to Dashboard > Tax > Registrations, add the states or countries where you have customers, then come back.”
97
+ Don’t guess which jurisdictions apply. Ask the user which states or countries they have customers in, then add a registration for each with the [Tax Registrations API](https://docs.stripe.com/api/tax/registrations.md) or the Dashboard.
28
98
 
29
99
  ## If the region or tax type isn’t supported
30
100
 
31
101
  Check the [supported countries list](https://docs.stripe.com/tax/supported-countries.md). If the jurisdiction isn’t listed, tell the user:
32
102
 
33
103
  - Stripe Tax doesn’t support that region yet
34
- - They can collect tax manually using `tax_rates` on the subscription or invoice instead
35
- - For unsupported tax types (customs duties, excise taxes), Stripe Tax doesn’t apply — those are out of scope
104
+ - They can collect tax manually using `tax_rates` on the subscription or invoice instead (not alongside `automatic_tax`; you can’t use both)
105
+ - For unsupported tax types (customs duties, excise taxes), Stripe Tax doesn’t apply, so those are out of scope
36
106
 
37
107
  Don’t attempt to approximate using a supported region as a proxy.
package/package.json CHANGED
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "name": "vybekiit",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "Set up tools and create a VybeKiit app: `npx vybekiit setup` then `npx vybekiit create app --web`.",
5
5
  "license": "MIT",
6
- "packageManager": "pnpm@10.33.2",
7
6
  "publishConfig": {
8
7
  "access": "public"
9
8
  },
@@ -14,33 +13,33 @@
14
13
  "files": [
15
14
  "dist"
16
15
  ],
17
- "scripts": {
18
- "build": "tsup && node scripts/bundleGlobalSkills.mjs",
19
- "typecheck": "tsc --noEmit",
20
- "test": "vitest run"
21
- },
22
16
  "dependencies": {
23
17
  "@aws-sdk/client-dynamodb": "^3.1075.0",
24
18
  "@aws-sdk/client-s3": "^3.1075.0",
25
19
  "@aws-sdk/lib-dynamodb": "^3.1075.0",
26
- "@clack/prompts": "catalog:",
20
+ "@clack/prompts": "1.7.0",
27
21
  "@neondatabase/serverless": "^0.10.4",
28
22
  "@supabase/supabase-js": "^2.47.10",
29
- "effect": "catalog:",
23
+ "effect": "3.21.4",
30
24
  "firebase-admin": "^13.0.2",
31
25
  "mongodb": "^7.4.0",
32
- "open": "catalog:"
26
+ "open": "11.0.0"
33
27
  },
34
28
  "devDependencies": {
35
- "@types/node": "catalog:",
36
- "tsup": "catalog:",
37
- "typescript": "catalog:",
38
- "vitest": "catalog:",
39
- "@vybekiit/agent-kit": "workspace:*",
40
- "@vybekiit/core": "workspace:*",
41
- "@vybekiit/db": "workspace:*",
42
- "@vybekiit/deploy": "workspace:*",
43
- "@vybekiit/payments": "workspace:*",
44
- "@vybekiit/report-mode": "workspace:*"
29
+ "@types/node": "22.20.0",
30
+ "tsup": "8.5.1",
31
+ "typescript": "5.7.2",
32
+ "vitest": "3.2.6",
33
+ "@vybekiit/agent-kit": "0.7.0",
34
+ "@vybekiit/core": "0.7.0",
35
+ "@vybekiit/db": "0.7.0",
36
+ "@vybekiit/deploy": "0.7.0",
37
+ "@vybekiit/payments": "0.7.0",
38
+ "@vybekiit/report-mode": "0.7.0"
39
+ },
40
+ "scripts": {
41
+ "build": "tsup && node scripts/bundleGlobalSkills.mjs",
42
+ "typecheck": "tsc --noEmit",
43
+ "test": "vitest run"
45
44
  }
46
- }
45
+ }