Compare commits

...

5 Commits

Author SHA1 Message Date
dependabot[bot]
709230b3ff
Merge 91633d6529 into 587641d564 2026-07-10 17:22:24 +00:00
dependabot[bot]
91633d6529
chore(deps): bump esbuild and tsx
Bumps [esbuild](https://github.com/evanw/esbuild) to 0.28.1 and updates ancestor dependency [tsx](https://github.com/privatenumber/tsx). These dependencies need to be updated together.


Updates `esbuild` from 0.27.3 to 0.28.1
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.27.3...v0.28.1)

Updates `tsx` from 4.21.0 to 4.23.0
- [Release notes](https://github.com/privatenumber/tsx/releases)
- [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs)
- [Commits](https://github.com/privatenumber/tsx/compare/v4.21.0...v4.23.0)

---
updated-dependencies:
- dependency-name: esbuild
  dependency-version: 0.28.1
  dependency-type: indirect
- dependency-name: tsx
  dependency-version: 4.22.4
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-10 17:22:21 +00:00
svc-idee-bot
587641d564 chore(release): 1.30.0 [skip ci] 2026-07-10 17:19:47 +00:00
GitHub Action
ae792239f2 feat: Release 2 new skills: platform-models-api-configure, platform-policy-rule-generate @W-23396600@ 2026-07-10 17:19:21 +00:00
Hemant Singh Bisht
abe0d620a4
docs(W-23363336): add stability disclaimer to README (#307)
Add stability disclaimer to README

Skills are under active development and don't carry GA-level stability
guarantees. This note sets expectations for developers who fork or sync
the repo that skill names, structure, and availability may change without
notice.

Signed-off-by: Hemant Singh Bisht <hsinghbisht@salesforce.com>
2026-07-09 21:34:02 +05:30
207 changed files with 3328 additions and 3468 deletions

View File

@ -1,3 +1,12 @@
# [1.30.0](https://github.com/forcedotcom/sf-skills/compare/1.29.0...1.30.0) (2026-07-10)
### Features
* Release 2 new skills: platform-models-api-configure, platform-policy-rule-generate @W-23396600@ ([ae79223](https://github.com/forcedotcom/sf-skills/commit/ae792239f2e798654c77348e0ee4593d3d3110e8))
# [1.29.0](https://github.com/forcedotcom/sf-skills/compare/1.28.0...1.29.0) (2026-07-03)

View File

@ -4,6 +4,8 @@ This repository provides a curated collection of Salesforce agent skills for bui
The skills are contributed by Salesforce and the broader community. Its optimized for Agentforce Vibes and can be used with any AI tool that supports skills.
> ⚠️ **Expect frequent changes.** The Salesforce skills library is evolving rapidly as we refine patterns and incorporate feedback. Skills may be renamed, restructured, or removed between releases — they do not follow the same stability guarantees as GA platform APIs. If youve forked or synced the repository, be prepared for upstream changes that may conflict with local modifications. This repository is always the source of truth.
## 🗂️ Structure
```

250
package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "@salesforce/afv-skills",
"version": "1.13.0",
"version": "1.30.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@salesforce/afv-skills",
"version": "1.13.0",
"version": "1.30.0",
"license": "CC-BY-NC-4.0",
"devDependencies": {
"@salesforce/ui-bundle-template-app-react-sample-b2e": "^10.2.2",
@ -405,9 +405,9 @@
"license": "SEE LICENSE IN LICENSE.txt"
},
"node_modules/@esbuild/aix-ppc64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz",
"integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz",
"integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==",
"cpu": [
"ppc64"
],
@ -422,9 +422,9 @@
}
},
"node_modules/@esbuild/android-arm": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz",
"integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz",
"integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==",
"cpu": [
"arm"
],
@ -439,9 +439,9 @@
}
},
"node_modules/@esbuild/android-arm64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz",
"integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz",
"integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==",
"cpu": [
"arm64"
],
@ -456,9 +456,9 @@
}
},
"node_modules/@esbuild/android-x64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz",
"integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz",
"integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==",
"cpu": [
"x64"
],
@ -473,9 +473,9 @@
}
},
"node_modules/@esbuild/darwin-arm64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz",
"integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz",
"integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==",
"cpu": [
"arm64"
],
@ -490,9 +490,9 @@
}
},
"node_modules/@esbuild/darwin-x64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz",
"integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz",
"integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==",
"cpu": [
"x64"
],
@ -507,9 +507,9 @@
}
},
"node_modules/@esbuild/freebsd-arm64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz",
"integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz",
"integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==",
"cpu": [
"arm64"
],
@ -524,9 +524,9 @@
}
},
"node_modules/@esbuild/freebsd-x64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz",
"integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz",
"integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==",
"cpu": [
"x64"
],
@ -541,9 +541,9 @@
}
},
"node_modules/@esbuild/linux-arm": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz",
"integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz",
"integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==",
"cpu": [
"arm"
],
@ -558,9 +558,9 @@
}
},
"node_modules/@esbuild/linux-arm64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz",
"integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz",
"integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==",
"cpu": [
"arm64"
],
@ -575,9 +575,9 @@
}
},
"node_modules/@esbuild/linux-ia32": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz",
"integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz",
"integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==",
"cpu": [
"ia32"
],
@ -592,9 +592,9 @@
}
},
"node_modules/@esbuild/linux-loong64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz",
"integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz",
"integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==",
"cpu": [
"loong64"
],
@ -609,9 +609,9 @@
}
},
"node_modules/@esbuild/linux-mips64el": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz",
"integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz",
"integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==",
"cpu": [
"mips64el"
],
@ -626,9 +626,9 @@
}
},
"node_modules/@esbuild/linux-ppc64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz",
"integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz",
"integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==",
"cpu": [
"ppc64"
],
@ -643,9 +643,9 @@
}
},
"node_modules/@esbuild/linux-riscv64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz",
"integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz",
"integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==",
"cpu": [
"riscv64"
],
@ -660,9 +660,9 @@
}
},
"node_modules/@esbuild/linux-s390x": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz",
"integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz",
"integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==",
"cpu": [
"s390x"
],
@ -677,9 +677,9 @@
}
},
"node_modules/@esbuild/linux-x64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz",
"integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz",
"integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==",
"cpu": [
"x64"
],
@ -694,9 +694,9 @@
}
},
"node_modules/@esbuild/netbsd-arm64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz",
"integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz",
"integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==",
"cpu": [
"arm64"
],
@ -711,9 +711,9 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz",
"integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz",
"integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==",
"cpu": [
"x64"
],
@ -728,9 +728,9 @@
}
},
"node_modules/@esbuild/openbsd-arm64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz",
"integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz",
"integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==",
"cpu": [
"arm64"
],
@ -745,9 +745,9 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz",
"integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz",
"integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==",
"cpu": [
"x64"
],
@ -762,9 +762,9 @@
}
},
"node_modules/@esbuild/openharmony-arm64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz",
"integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz",
"integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==",
"cpu": [
"arm64"
],
@ -779,9 +779,9 @@
}
},
"node_modules/@esbuild/sunos-x64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz",
"integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz",
"integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==",
"cpu": [
"x64"
],
@ -796,9 +796,9 @@
}
},
"node_modules/@esbuild/win32-arm64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz",
"integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz",
"integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==",
"cpu": [
"arm64"
],
@ -813,9 +813,9 @@
}
},
"node_modules/@esbuild/win32-ia32": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz",
"integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz",
"integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==",
"cpu": [
"ia32"
],
@ -830,9 +830,9 @@
}
},
"node_modules/@esbuild/win32-x64": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz",
"integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz",
"integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==",
"cpu": [
"x64"
],
@ -1736,9 +1736,9 @@
}
},
"node_modules/esbuild": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz",
"integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==",
"version": "0.28.1",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz",
"integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@ -1749,32 +1749,32 @@
"node": ">=18"
},
"optionalDependencies": {
"@esbuild/aix-ppc64": "0.27.3",
"@esbuild/android-arm": "0.27.3",
"@esbuild/android-arm64": "0.27.3",
"@esbuild/android-x64": "0.27.3",
"@esbuild/darwin-arm64": "0.27.3",
"@esbuild/darwin-x64": "0.27.3",
"@esbuild/freebsd-arm64": "0.27.3",
"@esbuild/freebsd-x64": "0.27.3",
"@esbuild/linux-arm": "0.27.3",
"@esbuild/linux-arm64": "0.27.3",
"@esbuild/linux-ia32": "0.27.3",
"@esbuild/linux-loong64": "0.27.3",
"@esbuild/linux-mips64el": "0.27.3",
"@esbuild/linux-ppc64": "0.27.3",
"@esbuild/linux-riscv64": "0.27.3",
"@esbuild/linux-s390x": "0.27.3",
"@esbuild/linux-x64": "0.27.3",
"@esbuild/netbsd-arm64": "0.27.3",
"@esbuild/netbsd-x64": "0.27.3",
"@esbuild/openbsd-arm64": "0.27.3",
"@esbuild/openbsd-x64": "0.27.3",
"@esbuild/openharmony-arm64": "0.27.3",
"@esbuild/sunos-x64": "0.27.3",
"@esbuild/win32-arm64": "0.27.3",
"@esbuild/win32-ia32": "0.27.3",
"@esbuild/win32-x64": "0.27.3"
"@esbuild/aix-ppc64": "0.28.1",
"@esbuild/android-arm": "0.28.1",
"@esbuild/android-arm64": "0.28.1",
"@esbuild/android-x64": "0.28.1",
"@esbuild/darwin-arm64": "0.28.1",
"@esbuild/darwin-x64": "0.28.1",
"@esbuild/freebsd-arm64": "0.28.1",
"@esbuild/freebsd-x64": "0.28.1",
"@esbuild/linux-arm": "0.28.1",
"@esbuild/linux-arm64": "0.28.1",
"@esbuild/linux-ia32": "0.28.1",
"@esbuild/linux-loong64": "0.28.1",
"@esbuild/linux-mips64el": "0.28.1",
"@esbuild/linux-ppc64": "0.28.1",
"@esbuild/linux-riscv64": "0.28.1",
"@esbuild/linux-s390x": "0.28.1",
"@esbuild/linux-x64": "0.28.1",
"@esbuild/netbsd-arm64": "0.28.1",
"@esbuild/netbsd-x64": "0.28.1",
"@esbuild/openbsd-arm64": "0.28.1",
"@esbuild/openbsd-x64": "0.28.1",
"@esbuild/openharmony-arm64": "0.28.1",
"@esbuild/sunos-x64": "0.28.1",
"@esbuild/win32-arm64": "0.28.1",
"@esbuild/win32-ia32": "0.28.1",
"@esbuild/win32-x64": "0.28.1"
}
},
"node_modules/event-target-shim": {
@ -2001,19 +2001,6 @@
"node": ">= 0.4"
}
},
"node_modules/get-tsconfig": {
"version": "4.13.6",
"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz",
"integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==",
"dev": true,
"license": "MIT",
"dependencies": {
"resolve-pkg-maps": "^1.0.0"
},
"funding": {
"url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
}
},
"node_modules/glob-to-regex.js": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz",
@ -2952,16 +2939,6 @@
"node": ">=0.10.0"
}
},
"node_modules/resolve-pkg-maps": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
"integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
}
},
"node_modules/retry": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
@ -3264,14 +3241,13 @@
"license": "0BSD"
},
"node_modules/tsx": {
"version": "4.21.0",
"resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz",
"integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==",
"version": "4.23.0",
"resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.0.tgz",
"integrity": "sha512-eUdUIaCr963q2h5u3+QwvYp0+eqPvn+egeqZUm0hwERCqqx1E3kK5ehbGCvqSE5MQAULr67ww0cA3jKc3YkM1w==",
"dev": true,
"license": "MIT",
"dependencies": {
"esbuild": "~0.27.0",
"get-tsconfig": "^4.7.5"
"esbuild": "~0.28.0"
},
"bin": {
"tsx": "dist/cli.mjs"

View File

@ -1,6 +1,6 @@
{
"name": "@salesforce/afv-skills",
"version": "1.29.0",
"version": "1.30.0",
"description": "Salesforce skills for Agentforce Vibes",
"license": "CC-BY-NC-4.0",
"files": [

View File

@ -44,7 +44,7 @@ See `SKILL.md` for the full flag table and sample prompts.
## Directory layout
```
```text
agentforce-architecture-analyze/
├── SKILL.md Skill contract (inputs, outputs, pipeline, invariants)
├── README.md This file
@ -86,7 +86,7 @@ agentforce-architecture-analyze/
### Channel strategy — SOQL-first
```
```text
Seed query: planner_definition_by_agent_chain (chain-LIKE lookup → planner id)
6 parallel Tooling SOQL channels (keyed on the resolved planner id):
@ -147,9 +147,3 @@ Per-branch ancestor-path cycle detection is the primary termination primitive: t
| `INVALID_FIELD` from a SOQL asset | Salesforce renamed / removed the field in a quarterly release. Run with `--reprobe` to refresh the 7-day channel cache and pick up the new schema |
| `STATUS=PROBE_FAILED` on first run | Channel probe saw a mandatory field missing. Check `channels.json` under the probe cache dir for which sObject / field — may require org-side feature enablement |
| Tree for classic ReAct agent shows `_unresolved` entries for NGA plugins | Expected — the NGA external-plugin retrieve is skipped when the planner shape is classic. Those entries can be ignored |
---
## Author
Raghul Jayagopal (RJ), Salesforce ANZ FDE.

View File

@ -157,14 +157,14 @@ exit "$_rc"
All artifacts under `~/.vibe/data/agentforce-architecture-analyze/<org_id15>/<agent_api_name>__<agent_version>/` (default; override with `--data-dir <path>`):
```
```xml
<agent>_<ver>_metadata_tree.json primary artifact — normalized planner/topic/action/flow/apex/prompt/plugin tree
<agent>_<ver>_architecture.md human-readable section-by-section rendering (H1 + 7 numbered sections, plus a conditional Dependency graph appendix). Mermaid diagrams are embedded inside the relevant sections (Action tree, Data flow, and Dependency graph)
```
## Pipeline — inline, no subagent
```
```text
resolve_bot.py → BotDefinition + BotVersion + planner name lookup
retrieve_planner.py → Metadata API zip retrieve for GenAiPlannerBundle (+ NGA plugins if present)
parallel_retrieve.py → 6 parallel Tooling SOQL channels fan out from the planner id

View File

@ -1,5 +1,5 @@
{
"_doc": "retired-name references replaced with plugin-scoped layout. Machine-readable I/O contract for investigating-agentforce-architecture. Orchestrator code reads this file (not SKILL.md prose) to discover the input schema, output keys, STATUS enum, and error-contract rules. The architecture skill runs inline (no subagent).",
"_doc": "retired-name references replaced with plugin-scoped layout. Machine-readable I/O contract for agentforce-architecture-analyze. Orchestrator code reads this file (not SKILL.md prose) to discover the input schema, output keys, STATUS enum, and error-contract rules. The architecture skill runs inline (no subagent).",
"_schema_version": "3.1",
"_schema_notes": "3.1 (2026-05-05) canonicalizes `invocation_type` on STANDARD_ACTION / UNKNOWN nodes in the metadata tree. Prior versions split this across `raw_invocation_type` (bundle-sourced nodes) and `raw_action_type` (flow-actionCall-sourced nodes). Both legacy keys are still tolerated by readers for one release.",
"input": {
@ -35,15 +35,15 @@
},
"work_dir": {
"type": "absolute_path",
"description": "Ephemeral scratch. Default: /tmp/investigating-agentforce-architecture-<epoch>-<rand>."
"description": "Ephemeral scratch. Default: /tmp/agentforce-architecture-analyze-<epoch>-<rand>."
},
"cache_root": {
"type": "absolute_path",
"description": "Internal rebuildable cache root. Default: ~/.vibe/cache/investigating-agentforce-architecture. Override with --cache-dir <path>."
"description": "Internal rebuildable cache root. Default: ~/.vibe/cache/agentforce-architecture-analyze. Override with --cache-dir <path>."
},
"data_root": {
"type": "absolute_path",
"description": "Durable user-facing output root. Default: ~/.vibe/data/investigating-agentforce-architecture. Override with --data-dir <path>."
"description": "Durable user-facing output root. Default: ~/.vibe/data/agentforce-architecture-analyze. Override with --data-dir <path>."
},
"force_refresh": {
"type": "boolean",

View File

@ -64,7 +64,7 @@ Every edge is strictly **forward** from the entry query
(`GenAiPlannerDefinition WHERE DeveloperName = :planner_name`). No
backward lookups.
```
```text
BotDefinition (Data API, PK Id, matched by DeveloperName)
└── BotVersion (Data API, FK BotDefinitionId)
│ [resolved to planner name via Bot metadata retrieve]

View File

@ -1,5 +0,0 @@
# Credits & Acknowledgments
This skill is part of the `*-datacloud` family. Shared attribution, upstream source mapping, and maintenance notes live in:
- [../data360-orchestrate/CREDITS.md](../data360-orchestrate/CREDITS.md)
- [../data360-orchestrate/UPSTREAM.md](../data360-orchestrate/UPSTREAM.md)

View File

@ -36,4 +36,3 @@ sf data360 data-action-target list -o myorg 2>/dev/null
- [../data360-orchestrate/assets/definitions/data-action-target.template.json](../data360-orchestrate/assets/definitions/data-action-target.template.json)
- [../data360-orchestrate/assets/definitions/data-action.template.json](../data360-orchestrate/assets/definitions/data-action.template.json)
- [../data360-orchestrate/references/plugin-setup.md](../data360-orchestrate/references/plugin-setup.md)
- [CREDITS.md](CREDITS.md)

View File

@ -107,11 +107,9 @@ Next step: <destination validation or downstream testing>
## References
- [README.md](README.md)
- [../data360-orchestrate/assets/definitions/activation-target.template.json](../data360-orchestrate/assets/definitions/activation-target.template.json)
- [../data360-orchestrate/assets/definitions/activation.template.json](../data360-orchestrate/assets/definitions/activation.template.json)
- [../data360-orchestrate/assets/definitions/data-action-target.template.json](../data360-orchestrate/assets/definitions/data-action-target.template.json)
- [../data360-orchestrate/assets/definitions/data-action.template.json](../data360-orchestrate/assets/definitions/data-action.template.json)
- [../data360-orchestrate/UPSTREAM.md](../data360-orchestrate/UPSTREAM.md)
- [../data360-orchestrate/references/plugin-setup.md](../data360-orchestrate/references/plugin-setup.md)
- [../data360-orchestrate/references/feature-readiness.md](../data360-orchestrate/references/feature-readiness.md)

View File

@ -1,5 +0,0 @@
# Credits & Acknowledgments
This skill is part of the `*-datacloud` family of skills covering the full Data Cloud workflow lifecycle. Shared upstream source mapping and maintenance notes live in:
- [../data360-orchestrate/CREDITS.md](../data360-orchestrate/CREDITS.md)
- [../data360-orchestrate/UPSTREAM.md](../data360-orchestrate/UPSTREAM.md)

View File

@ -55,5 +55,3 @@ sf data360 connection schema-upsert -o myorg --name <connector-id> -f examples/c
- [SKILL.md](SKILL.md)
- [../data360-orchestrate/references/plugin-setup.md](../data360-orchestrate/references/plugin-setup.md)
- [../data360-orchestrate/UPSTREAM.md](../data360-orchestrate/UPSTREAM.md)
- [CREDITS.md](CREDITS.md)

View File

@ -142,7 +142,6 @@ Next step: <prepare phase or connector follow-up>
## References
- [README.md](README.md)
- [examples/connections/heroku-postgres.json](examples/connections/heroku-postgres.json)
- [examples/connections/redshift.json](examples/connections/redshift.json)
- [examples/connections/sharepoint-unstructured.json](examples/connections/sharepoint-unstructured.json)
@ -151,4 +150,3 @@ Next step: <prepare phase or connector follow-up>
- [examples/connections/ingest-api-schema.json](examples/connections/ingest-api-schema.json)
- [../data360-orchestrate/references/plugin-setup.md](../data360-orchestrate/references/plugin-setup.md)
- [../data360-orchestrate/references/feature-readiness.md](../data360-orchestrate/references/feature-readiness.md)
- [../data360-orchestrate/UPSTREAM.md](../data360-orchestrate/UPSTREAM.md)

View File

@ -1,3 +0,0 @@
# Credits & Acknowledgments
This skill is part of the `*-datacloud` family of skills covering the Data Cloud lifecycle: ingestion, harmonization, segmentation, and retrieval.

View File

@ -107,7 +107,6 @@ Next step: <segment / retrieve / follow-up>
## References
- [README.md](README.md)
- [../data360-orchestrate/assets/definitions/dmo.template.json](../data360-orchestrate/assets/definitions/dmo.template.json)
- [../data360-orchestrate/assets/definitions/mapping.template.json](../data360-orchestrate/assets/definitions/mapping.template.json)
- [../data360-orchestrate/assets/definitions/relationship.template.json](../data360-orchestrate/assets/definitions/relationship.template.json)

View File

@ -1,15 +0,0 @@
# Credits & Acknowledgments
This skill family distills publicly shared Data Cloud implementation knowledge into sf-skills house style. Attribution is intentionally explicit because contributor credit is a core sf-skills principle.
---
This family intentionally:
- keeps sf-skills naming consistency (`*-datacloud`)
- keeps the external CLI plugin outside this repo
- favors deterministic helper scripts and reusable JSON templates
- rewrites examples into generic sf-skills-style guidance rather than copying workshop-specific payloads
See [UPSTREAM.md](UPSTREAM.md) for the maintenance contract.
---

View File

@ -47,7 +47,6 @@ See [references/plugin-setup.md](references/plugin-setup.md).
| [scripts/diagnose-org.mjs](scripts/diagnose-org.mjs) | Classify org readiness by phase before mutating Data Cloud assets |
| [references/feature-readiness.md](references/feature-readiness.md) | Map high-signal errors and feature gates to concrete next steps |
| [assets/definitions/](assets/definitions/) | Generic JSON templates for repeatable Data Cloud definition files |
| [UPSTREAM.md](UPSTREAM.md) | Upstream mapping for future distillation and maintenance |
## Generic templates
@ -119,9 +118,3 @@ sf data360 activation platforms -o myorg 2>/dev/null
- [SKILL.md](SKILL.md) - Orchestrator guidance
- [references/plugin-setup.md](references/plugin-setup.md) - Plugin install and verification
- [references/feature-readiness.md](references/feature-readiness.md) - Readiness classification and setup guidance
- [UPSTREAM.md](UPSTREAM.md) - Upstream tracking and distillation policy
- [CREDITS.md](CREDITS.md) - Contributor and source attribution
## Primary contributor
**Gnanasekaran Thoppae** — primary contributor for the data360-orchestrate family.

View File

@ -215,10 +215,8 @@ Next step: <next phase, setup guidance, or cross-skill handoff>
## Reference Map
### Start here
- [README.md](README.md)
- [references/plugin-setup.md](references/plugin-setup.md)
- [references/feature-readiness.md](references/feature-readiness.md)
- [UPSTREAM.md](UPSTREAM.md)
### Phase skills
- [data360-connect](../data360-connect/SKILL.md)

View File

@ -1,45 +0,0 @@
# Upstream Distillation Map for data360-orchestrate
This file exists to make downstream maintenance easy without sacrificing sf-skills consistency.
## Maintenance contract
When upstream changes, do **not** copy blindly.
Instead:
1. review new upstream commits
2. identify changed command behaviors, install patterns, or gotchas
3. update sf-skills prompts and templates in a distilled form
4. keep naming, attribution, and cross-skill boundaries consistent with sf-skills
5. update this file with the new reviewed commit SHAs
## High-priority upstream areas to re-check
- installation / linking workflow for the community plugin
- command counts and topic coverage
- API-version guidance
- known issues and bug-fix notes
- live-tested command set
- any new commands affecting Connect / Prepare / Harmonize / Segment / Act / Retrieve boundaries
- connector-specific payload examples worth distilling into generic repo-safe examples
- search-index / hybrid-search guidance and any command-surface changes around hybrid scoring or prefilter behavior
- Ingestion API schema-upload flow, send-data examples, and problem-record guidance
- unstructured-source setup differences between connection-level reruns, stream refreshes, and initial UI seeding
- UI-only gaps where upstream introduces browser automation; validate before importing
## Cross-skill boundary reminders
Keep Data Cloud product work in `*-datacloud`, but do not blur into:
- `agentforce-observe` for STDM/session tracing/parquet workflows
- `platform-soql-query` for CRM SOQL-only tasks
- `platform-data-manage` for CRM record seeding/cleanup
- `platform-*-generate` skills for CRM schema creation (custom objects, fields, validation rules, etc.)
## Local helper files in this family
- `references/plugin-setup.md`
- `scripts/bootstrap-plugin.sh`
- `scripts/verify-plugin.sh`
- `assets/definitions/`
These are sf-skills-owned conveniences and should evolve independently from upstream when that improves user experience.

View File

@ -1,7 +0,0 @@
# Credits & Acknowledgments
Primary contributor: **Gnanasekaran Thoppae**
This skill is part of the `*-datacloud` family. Shared attribution, upstream source mapping, and maintenance notes live in:
- [../data360-orchestrate/CREDITS.md](../data360-orchestrate/CREDITS.md)
- [../data360-orchestrate/UPSTREAM.md](../data360-orchestrate/UPSTREAM.md)

View File

@ -48,4 +48,3 @@ sf data360 connection run-existing -o myorg --name <connection-id> 2>/dev/null
- [SKILL.md](SKILL.md)
- [examples/ingestion-api/README.md](examples/ingestion-api/README.md)
- [../data360-orchestrate/assets/definitions/data-stream.template.json](../data360-orchestrate/assets/definitions/data-stream.template.json)
- [CREDITS.md](CREDITS.md)

View File

@ -183,7 +183,6 @@ Next step: <harmonize or retrieve>
## References
- [README.md](README.md)
- [examples/ingestion-api/README.md](examples/ingestion-api/README.md)
- [../data360-orchestrate/assets/definitions/data-stream.template.json](../data360-orchestrate/assets/definitions/data-stream.template.json)
- [../data360-orchestrate/references/plugin-setup.md](../data360-orchestrate/references/plugin-setup.md)

View File

@ -1,7 +0,0 @@
# Credits & Acknowledgments
Primary contributor: **Gnanasekaran Thoppae**
This skill is part of the `*-datacloud` family. Shared attribution, upstream source mapping, and maintenance notes live in:
- [../data360-orchestrate/CREDITS.md](../data360-orchestrate/CREDITS.md)
- [../data360-orchestrate/UPSTREAM.md](../data360-orchestrate/UPSTREAM.md)

View File

@ -41,4 +41,3 @@ sf data360 query hybrid -o myorg --index Knowledge_Index --query "reset password
- [SKILL.md](SKILL.md)
- [../data360-orchestrate/assets/definitions/search-index.template.json](../data360-orchestrate/assets/definitions/search-index.template.json)
- [CREDITS.md](CREDITS.md)

View File

@ -111,7 +111,6 @@ Next step: <segment / harmonize / follow-up>
## References
- [README.md](README.md)
- [examples/search-indexes/vector-knowledge.json](examples/search-indexes/vector-knowledge.json)
- [examples/search-indexes/hybrid-structured.json](examples/search-indexes/hybrid-structured.json)
- [../data360-orchestrate/assets/definitions/search-index.template.json](../data360-orchestrate/assets/definitions/search-index.template.json)

View File

@ -1,3 +0,0 @@
# Credits & Acknowledgments
This skill is part of the `*-datacloud` family of skills covering the Salesforce Data Cloud workflow phases. Shared definitions, templates, and readiness scripts for this family live in the `data360-orchestrate` skill directory.

View File

@ -33,4 +33,3 @@ sf data360 calculated-insight list -o myorg 2>/dev/null
- [SKILL.md](SKILL.md)
- [../data360-orchestrate/assets/definitions/calculated-insight.template.json](../data360-orchestrate/assets/definitions/calculated-insight.template.json)
- [../data360-orchestrate/assets/definitions/segment.template.json](../data360-orchestrate/assets/definitions/segment.template.json)
- [CREDITS.md](CREDITS.md)

View File

@ -107,8 +107,6 @@ Next step: <act / retrieve / follow-up>
## References
- [README.md](README.md)
- [../data360-orchestrate/assets/definitions/calculated-insight.template.json](../data360-orchestrate/assets/definitions/calculated-insight.template.json)
- [../data360-orchestrate/assets/definitions/segment.template.json](../data360-orchestrate/assets/definitions/segment.template.json)
- [../data360-orchestrate/references/feature-readiness.md](../data360-orchestrate/references/feature-readiness.md)
- [../data360-orchestrate/UPSTREAM.md](../data360-orchestrate/UPSTREAM.md)

View File

@ -1,7 +1,7 @@
---
name: experience-cms-brand-apply
description: "Extracts, retrieves, and applies CMS brand guidelines (voice, tone, style, colors, typography) to generated content. Use this skill ANY TIME a user request involves branding, brand voice, brand tone, brand guidelines, brand identity, brand styling, or applying a brand to content. Triggers for requests like \"apply my brand\", \"use our brand voice\", \"match our brand guidelines\", \"find my brand\", \"search for brand\", \"get brand instructions\", \"apply brand tone\". Handles the full workflow: searching for brands in Salesforce CMS, extracting brand instructions, and applying brand voice/tone/guidelines to generated content. Does not apply to media/image search (use experience-content-media-search skill), logo search, or creating new brand definitions."
compatibility: "Requires get_brand_instructions and/or search_brands MCP tools"
compatibility: "Requires get_brand_instructions and/or search_media_cms_channels MCP tools"
metadata:
version: "1.0"
---
@ -44,7 +44,7 @@ When a user requests branded content:
Copy this checklist and track your progress:
```
```text
CMS Branding Progress:
- [ ] Step 1: Determine if brand is already identified or needs search
- [ ] Step 2: Search for brands (if needed) and present options to user
@ -63,35 +63,63 @@ Check if the user has already specified which brand to use:
## Step 2: Search for Brands
**Tool:** `search_brands`
**Tool:** `search_media_cms_channels`
Brands are stored as CMS content of type `sfdc_cms__brand`. Search for them by
querying the CMS channels with the brand content type.
> **Note:** Brand content search (`contentTypeFqn=sfdc_cms__brand`) is explicitly
> excluded from the `experience-content-media-search` skill's scope. Calling
> `search_media_cms_channels` directly here is correct and intentional — do not
> route brand search through `experience-content-media-search`.
**Process:**
1. **Determine search query** — Use the user's description, company name, or a general keyword
2. **Build the request:**
1. **Determine search query** — Use the user's keyword. Brand search matches on
brand title and description.
2. **Build the request** with the fixed brand-search input contract:
```json
{
"inputs": [{
"searchQuery": "keyword or brand name"
"searchKeyword": "keyword",
"searchLanguage": "<detected_language>",
"channelType": "PublicUnauthenticated",
"contentTypeFqn": "sfdc_cms__brand",
"pageOffset": 0,
"searchLimit": 25
}]
}
```
3. **Call `search_brands`** with the query
4. **Parse the response** — Extract brand results:
Field rules:
- `searchKeyword` — the user's keyword input
- `searchLanguage` — auto-detect from the user's input; if unsure, use `en_US`
- `channelType` — always `PublicUnauthenticated` (brand content is delivered
via the public CMS channel; authenticated-channel brand search is not
supported by this tool)
- `contentTypeFqn` — always `sfdc_cms__brand`
- `pageOffset``0`
- `searchLimit``25`
3. **Call `search_media_cms_channels`** with the request
4. **Parse the response** — A brand result has an ID starting with **`9Ps`**. Extract:
- `managedContentId` — Unique ID (use this for extraction in Step 3)
- `managedContentKey` — Content key identifier
- `title` — Brand display name
- `contentUrl` — URL to the brand content
- `totalResults` — Number of brands found
- `contentUrl` — URL to the brand content, found under
`managedContentChannelDeliveryDetails[0].contentUrl`
- `pageNumber`, `pageSize`, `totalResults` — pagination summary
### Presenting Brand Results
**If multiple brands found**, use `ask_followup_question` to present options:
**If brands found**, first show a summary line, then use `ask_followup_question`
to present options:
```
I found [N] brands in your CMS. Which one should I apply?
```text
Showing [N] of [totalResults] total results (page [pageNumber], page size [pageSize]).
Which brand should I apply?
1. [Brand Title 1]
2. [Brand Title 2]
@ -100,15 +128,18 @@ I found [N] brands in your CMS. Which one should I apply?
Which brand would you like to use?
```
When the user replies with their selection, do NOT perform another search —
proceed immediately to Step 3.
**If one brand found**, confirm with the user:
```
```text
I found the brand "[Brand Title]". Should I apply this brand's guidelines to the content?
```
**If no brands found:**
```
```text
No brands found in Salesforce CMS. To use branding:
1. Create a brand in Salesforce CMS (Content Type: sfdc_cms__brand)
2. Provide brand guidelines directly in this conversation
@ -152,7 +183,7 @@ The extracted brand instructions typically include:
| Error | Response |
|---|---|
| `search_brands` unavailable | "Brand search is unavailable. Please provide your brand name or guidelines directly." |
| `search_media_cms_channels` unavailable | "Brand search is unavailable. Please provide your brand name or guidelines directly." |
| `get_brand_instructions` unavailable | "Cannot retrieve brand instructions. Please share your brand guidelines in this conversation and I'll apply them manually." |
| Org lacks Vibes branding | "CMS branding is not enabled for this org. Contact your admin to enable the Agentforce Vibes branding feature." |
| Permission denied | "You don't have permission to access CMS brands. Ensure you have Managed Content Authoring permission." |

View File

@ -1,5 +0,0 @@
# Credits & Acknowledgments
This skill is built on official Salesforce LWC platform patterns and established component development practices.
---

View File

@ -15,7 +15,7 @@ Lightning Web Components development skill with PICKLES architecture methodology
### 1. Invoke the skill
```
```yaml
Skill: experience-lwc-generate
Request: "Create a data table component for Account records"
```
@ -39,7 +39,7 @@ The skill generates:
## PICKLES Framework
```
```text
P → Prototype │ Validate ideas with wireframes & mock data
I → Integrate │ Choose data source (LDS, Apex, GraphQL, API)
C → Composition │ Structure component hierarchy & communication
@ -80,6 +80,7 @@ S → Security │ Enforce permissions, FLS, and data protection
| generating-metadata | Create Lightning Message Channels |
| platform-metadata-deploy | Deploy component to org |
## Spring '26 Features (API 66.0)
- **lwc:on directive**: Dynamic event binding from JavaScript

View File

@ -7,7 +7,7 @@ This guide covers real-time notification patterns for Lightning Web Components u
## Overview
```
```text
┌─────────────────────────────────────────────────────────────────────────┐
│ ASYNC NOTIFICATION ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────┤

View File

@ -154,7 +154,7 @@ LWC can interact with Apex in two ways: **@wire** (reactive/declarative) and **i
#### Quick Comparison
```
```text
┌─────────────────────────────────────────────────────────────────────────────────────┐
│ WIRE vs IMPERATIVE APEX CALLS │
├──────────────────┬──────────────────────────────┬────────────────────────────────────┤
@ -254,7 +254,7 @@ export default class ImperativeExample extends LightningElement {
#### Decision Tree
```
```text
┌─────────────────────────────┐
│ Need to modify data? │
│ (Insert/Update/Delete) │
@ -955,7 +955,7 @@ export default class AccountList extends LightningElement {
When two child components need to communicate but share the same parent, use the **parent as middleware**. This is the recommended pattern for master-detail UIs.
```
```text
┌─────────────────────────────────────────────────────────────────────┐
│ SIBLING COMMUNICATION FLOW │
├─────────────────────────────────────────────────────────────────────┤

View File

@ -7,7 +7,7 @@ This guide covers building Lightning Web Components for use in Salesforce Flow S
## Overview
```
```text
┌─────────────────────────────────────────────────────────────────────┐
│ FLOW ↔ LWC COMMUNICATION │
├─────────────────────────────────────────────────────────────────────┤

View File

@ -9,7 +9,7 @@ This guide provides comprehensive best practices for building production-ready L
The PICKLES Framework provides a structured approach to LWC architecture. Use it as a checklist during component design and implementation.
```
```text
🥒 P - Prototype → Validate ideas with wireframes & mock data
🥒 I - Integrate → Choose data source (LDS, Apex, GraphQL)
🥒 C - Composition → Structure component hierarchy & communication
@ -29,7 +29,7 @@ The PICKLES Framework provides a structured approach to LWC architecture. Use it
Each component should do one thing well.
```
```text
✅ GOOD: accountCard, accountList, accountForm (separate components)
❌ BAD: accountManager (does display, list, and form in one)
```
@ -52,7 +52,7 @@ Build complex UIs by composing simple components.
Data flows down (props), events bubble up.
```
```text
┌─────────────────────────────────────────────────────────────────┐
│ DATA FLOW PATTERN │
├─────────────────────────────────────────────────────────────────┤
@ -268,7 +268,7 @@ this.dispatchEvent(new CustomEvent('change', {
### Event Naming Conventions
```
```text
✅ GOOD ❌ BAD
──────────────────────── ────────────────────────
onselect onSelectItem

View File

@ -16,7 +16,7 @@
| **PICKLES Compliance** | 25 | Architecture methodology adherence (optional) |
**Scoring Thresholds**:
```
```text
⭐⭐⭐⭐⭐ 150-165 pts → Production-ready, full SLDS 2 + Dark Mode
⭐⭐⭐⭐ 125-149 pts → Good component, minor styling issues
⭐⭐⭐ 100-124 pts → Functional, needs SLDS cleanup

View File

@ -11,7 +11,7 @@
LWC state management has evolved beyond simple reactive properties. This guide covers modern patterns for managing complex state across components, including the `@lwc/state` library and Salesforce Platform State Managers.
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ STATE MANAGEMENT SPECTRUM │
├─────────────────────────────────────────────────────────────────────────────┤
@ -588,7 +588,7 @@ disconnectedCallback() {
## Best Practices Summary
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ STATE MANAGEMENT BEST PRACTICES │
├─────────────────────────────────────────────────────────────────────────────┤

View File

@ -7,7 +7,7 @@ The **Triangle Architecture** is a foundational Salesforce pattern where Flow, L
## Architecture Overview
```
```text
┌─────────────────────────────────────┐
│ FLOW │
│ (Orchestrator) │
@ -54,7 +54,7 @@ The **Triangle Architecture** is a foundational Salesforce pattern where Flow, L
**Use Case**: Custom UI component for user selection within a guided Flow.
```
```text
┌─────────┐ @api (in) ┌─────────┐
│ FLOW │ ────────────────▶ │ LWC │
│ Screen │ │ Screen │
@ -320,7 +320,7 @@ describe('c-record-selector', () => {
When deploying integrated triangle solutions:
```
```text
1. APEX CLASSES
└── @AuraEnabled controllers (LWC depends on these)

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python3
"""
Post-Tool Validation Hook for generating-lwc-components plugin.
Post-Tool Validation Hook for experience-lwc-generate plugin.
This hook runs AFTER Write or Edit tool completes and provides SLDS 2
validation feedback for LWC files (*.html, *.css, *.js).
@ -38,7 +38,7 @@ for _ca_path in _CODE_ANALYZER_CANDIDATES:
break
# Also add shared dir for other shared modules
PLUGIN_ROOT = os.path.dirname(os.path.dirname(SCRIPT_DIR)) # generating-lwc-components/
PLUGIN_ROOT = os.path.dirname(os.path.dirname(SCRIPT_DIR)) # experience-lwc-generate/
SKILLS_ROOT = os.path.dirname(PLUGIN_ROOT)
SHARED_DIR = os.path.join(SKILLS_ROOT, "shared")
if os.path.isdir(SHARED_DIR):

View File

@ -282,7 +282,7 @@ def format_output(results: Dict) -> str:
output_parts.append(f" ... and {remaining} more issues")
output_parts.append("" * 50)
output_parts.append("📚 See: generating-lwc-components/references/template-anti-patterns.md")
output_parts.append("📚 See: experience-lwc-generate/references/template-anti-patterns.md")
return "\n".join(output_parts)

View File

@ -1,46 +0,0 @@
# Credits & Acknowledgments
This skill was built upon established patterns in technical diagramming and Salesforce data modeling. The following concepts and conventions shaped its design.
---
## Diagramming Concepts
### Text-Based Diagramming
The skill uses Mermaid as its primary diagramming syntax, covering Entity Relationship Diagrams, sequence diagrams, and flowcharts. Key capabilities include:
- Entity Relationship Diagram syntax
- Sequence diagram patterns
- Flowchart and state diagram support
- Live rendering through Mermaid-capable renderers
An alternative syntax, PlantUML, informed the UML diagram patterns used in sequence and class diagrams.
---
## Salesforce Domain Patterns
### Data Modeling Conventions
The ERD conventions follow standard Salesforce object relationship patterns, including Master-Detail, Lookup, and External relationships as documented in the Salesforce platform's object model.
### Integration Architecture
Integration sequence diagrams draw on widely-adopted API documentation patterns adapted for Salesforce's authentication and integration architecture.
### Schema Reference
Object and field relationship information reflects standard Salesforce object reference conventions and relationship type definitions.
---
## Key Concepts
### ERD Notation
The Entity Relationship Diagram conventions follow standard database modeling patterns adapted for Salesforce relationships (Master-Detail, Lookup, External).
### Sequence Diagram Patterns
OAuth flow and integration sequence diagrams follow UML 2.0 standards with Salesforce-specific adaptations.
### Mermaid in Documentation
The approach of using Mermaid for inline diagrams in Markdown documentation is a widely-adopted pattern in technical documentation that enables version-controlled diagrams alongside code.
### Color Accessibility
The color palette follows accessibility guidelines for color-blind-friendly design, using a pastel fill with high-contrast stroke approach.

View File

@ -19,7 +19,7 @@
## Quick Start
```
```text
# Generate an OAuth diagram
"Create a JWT Bearer OAuth flow diagram"
@ -85,7 +85,7 @@ sequenceDiagram
```
### ASCII Fallback
```
```text
┌───────────────┐ ┌───────────────┐
│ Server │ │ Salesforce │
└───────┬───────┘ └───────┬───────┘

View File

@ -1,6 +1,6 @@
---
name: external-diagram-mermaid-generate
description: "Salesforce architecture diagrams using Mermaid with ASCII fallback. Use this skill when generating text-based diagrams for Salesforce architecture, OAuth flows, ERDs, integration sequences, or Agentforce structure. TRIGGER when: user says \"diagram\", \"visualize\", \"ERD\", or asks for sequence diagrams, flowcharts, class diagrams, or architecture visualizations in Mermaid. DO NOT TRIGGER when: user wants PNG/SVG image output (use external-diagram-visual-generate), or asks about non-Salesforce systems."
description: "Salesforce architecture diagrams using Mermaid with ASCII fallback. Use this skill when generating text-based diagrams for Salesforce architecture, OAuth flows, ERDs, integration sequences, or Agentforce structure. TRIGGER when: user says \"diagram\", \"visualize\", \"ERD\", or asks for sequence diagrams, flowcharts, class diagrams, or architecture visualizations in Mermaid. DO NOT TRIGGER when: user asks about non-Salesforce systems."
compatibility: "Requires Mermaid-capable renderer for diagram previews"
metadata:
version: "1.0"
@ -20,7 +20,6 @@ Use `external-diagram-mermaid-generate` when the user wants:
- diagrams that can live directly in docs, READMEs, or issues
### Out of Scope — Delegate elsewhere when the user wants:
- rendered PNG/SVG images or polished mockups → [external-diagram-visual-generate](../external-diagram-visual-generate/SKILL.md)
- non-Salesforce systems only → use a more general diagramming skill
- object discovery before an ERD → [platform-custom-object-generate](../platform-custom-object-generate/SKILL.md) or [platform-custom-field-generate](../platform-custom-field-generate/SKILL.md)
@ -125,7 +124,6 @@ Call out the key relationships, flow direction, and any assumptions.
| Need | Delegate to | Reason |
|---|---|---|
| real object / field definitions | [platform-custom-object-generate](../platform-custom-object-generate/SKILL.md) / [platform-custom-field-generate](../platform-custom-field-generate/SKILL.md) | grounded ERD generation |
| rendered diagram / image output | [external-diagram-visual-generate](../external-diagram-visual-generate/SKILL.md) | visual polish beyond Mermaid |
| connected-app auth setup context | [integration-connectivity-connected-app-configure](../integration-connectivity-connected-app-configure/SKILL.md) | accurate OAuth flows |
| Agentforce logic visualization | [agentforce-generate](../agentforce-generate/SKILL.md) | source-of-truth behavior details |
| Flow behavior diagrams | [automation-flow-generate](../automation-flow-generate/SKILL.md) | actual Flow logic grounding |

View File

@ -202,7 +202,7 @@ flowchart TD
## ASCII Fallback Template
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ 🤖 SERVICE AGENT STRUCTURE │
└─────────────────────────────────────────────────────────────────────────────┘
@ -283,17 +283,17 @@ flowchart TD
## Conversation Flow Patterns
### 1. Linear Flow
```
```text
Start → Topic → Action → Response → End
```
### 2. Branching Flow
```
```text
Start → Classify → [Topic A | Topic B | Escalate]
```
### 3. Loop Back
```
```text
Start → Topic → Action → Validate → [Success | Retry]
```

View File

@ -268,7 +268,7 @@ flowchart TB
## ASCII Fallback Template
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ SYSTEM LANDSCAPE │
└─────────────────────────────────────────────────────────────────────────────┘

View File

@ -107,7 +107,7 @@ flowchart LR
## Key Concepts
### B2B Commerce Flow
```
```text
WebStore → ProductCatalog → Product2
↓ ↓
BuyerAccount → WebCart → CartItem → Order
@ -123,7 +123,7 @@ BuyerGroup → Entitlements (What they can see/buy)
| BuyerGroup | Pricing/entitlement grouping |
### Entitlement Model
```
```text
CommerceEntitlementPolicy
├── CommerceEntitlementProduct (What products)
└── CommerceEntitlementBuyerGroup (Who can see)
@ -223,7 +223,7 @@ flowchart LR
## ASCII Fallback
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ B2B COMMERCE DATA MODEL (L→R) │
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │

View File

@ -130,7 +130,7 @@ flowchart LR
## ASCII Fallback
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ CAMPAIGNS DATA MODEL (L→R) │
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │

View File

@ -114,7 +114,7 @@ flowchart LR
Each contact point links to an Individual.
### Consent Model
```
```text
DataUsePurpose → ContactPointConsent ← ContactPoint
(e.g., Marketing) (Opt-In/Out) (Email/Phone)
```
@ -179,7 +179,7 @@ flowchart LR
## ASCII Fallback
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ CONSENT DATA MODEL (GDPR/PRIVACY) (L→R) │
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │

View File

@ -86,7 +86,7 @@ flowchart LR
## Key Concepts
### Content Architecture
```
```text
ContentDocument (Container)
├── ContentVersion (Current + History)
├── ContentDocumentLink (Sharing to Records)
@ -177,7 +177,7 @@ flowchart LR
## ASCII Fallback
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ SALESFORCE FILES DATA MODEL (L→R) │
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │

View File

@ -114,7 +114,7 @@ flowchart LR
| Omitted | Excluded from forecast |
### Forecast Rollup Hierarchy
```
```text
CEO
└── VP Sales
├── Regional Manager 1
@ -182,7 +182,7 @@ flowchart LR
## ASCII Fallback
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ COLLABORATIVE FORECASTS DATA MODEL (L→R) │
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │

View File

@ -127,7 +127,7 @@ flowchart LR
## Key Concepts
### FSL Object Hierarchy
```
```text
Case/Asset → WorkOrder → WorkOrderLineItem → ServiceAppointment
↓ ↓ ↓
ProductRequired ProductConsumed AssignedResource
@ -245,7 +245,7 @@ flowchart LR
## ASCII Fallback
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ FIELD SERVICE LIGHTNING DATA MODEL (L→R) │
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │

View File

@ -157,7 +157,7 @@ flowchart LR
## ASCII Fallback
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ PARTY MODEL (INDUSTRY CLOUD) DATA MODEL (L→R) │
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │

View File

@ -102,7 +102,7 @@ flowchart LR
## Key Concepts
### Quote-to-Cash Flow
```
```text
Opportunity → Quote → Order → Invoice → Payment
↓ ↓ ↓
OLI QLI OrderItem
@ -121,7 +121,7 @@ Opportunity → Quote → Order → Invoice → Payment
| Reduction Orders | Negative quantity adjustments |
### Pricebook Structure
```
```text
Pricebook2 (Standard + Custom)
PricebookEntry (Product + Price per Pricebook)
@ -176,7 +176,7 @@ flowchart LR
## ASCII Fallback
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ QUOTE & ORDER DATA MODEL (L→R) │
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │

View File

@ -109,7 +109,7 @@ flowchart LR
| **Dynamic Revenue Orchestration** | Guided selling |
### Product Hierarchy
```
```text
ProductCatalog
└── ProductCategory (Hierarchy)
└── Product2
@ -244,7 +244,7 @@ flowchart LR
## ASCII Fallback
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ REVENUE CLOUD DATA MODEL (L→R) │
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │

View File

@ -116,7 +116,7 @@ flowchart LR
## ASCII Fallback
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ SALES CLOUD DATA MODEL (L→R) │
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>), -.-> = converts │

View File

@ -94,7 +94,7 @@ flowchart LR
## ASCII Fallback Template
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ DATA MODEL (L→R) │
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │

View File

@ -112,7 +112,7 @@ flowchart LR
## Key Concepts
### Scheduling Flow
```
```text
Customer (Contact) → WorkType → ServiceAppointment ← ServiceResource
ServiceTerritory
@ -184,7 +184,7 @@ flowchart LR
## ASCII Fallback
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ SALESFORCE SCHEDULER DATA MODEL (L→R) │
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │

View File

@ -120,7 +120,7 @@ flowchart LR
## ASCII Fallback
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ SERVICE CLOUD DATA MODEL (L→R) │
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │
@ -173,14 +173,14 @@ flowchart LR
## Service Cloud Patterns
### Case Flow
```
```text
Customer → Contact → Case → CaseComment
Entitlement (SLA)
```
### Entitlement Coverage
```
```text
Account → ServiceContract → Entitlement → Case
└─────────────────────────────────────┘
(direct)

View File

@ -162,7 +162,7 @@ flowchart LR
## ASCII Fallback
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ ENTERPRISE TERRITORY MANAGEMENT DATA MODEL (L→R) │
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │

View File

@ -217,7 +217,7 @@ sequenceDiagram
## ASCII Fallback Template - Outbound Integration
```
```text
┌───────────────┐ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ Trigger │ │ Queueable │ │ Named │ │ External │
│ │ │ │ │ Credential │ │ API │

View File

@ -80,7 +80,7 @@ sequenceDiagram
## ASCII Fallback Template
```
```text
┌──────────┐ ┌───────────────┐ ┌────────────────────┐
│ User │ │ Mobile App │ │ Salesforce │
│ │ │ or SPA │ │ (Auth Server) │

View File

@ -83,7 +83,7 @@ sequenceDiagram
## ASCII Fallback Template
```
```text
┌──────────┐ ┌───────────────┐ ┌────────────────────┐
│ User/ │ │ Application │ │ Salesforce │
│ Browser │ │ Server │ │ (Auth Server) │

View File

@ -71,7 +71,7 @@ sequenceDiagram
## ASCII Fallback Template
```
```text
┌───────────────────────┐ ┌────────────────────┐
│ Service/Backend │ │ Salesforce │
│ (client_id/secret) │ │ (Auth Server) │

View File

@ -94,7 +94,7 @@ sequenceDiagram
## ASCII Fallback Template
```
```text
┌──────────┐ ┌───────────┐ ┌────────────┐ ┌────────────────┐
│ User │ │ Browser │ │ Device │ │ Salesforce │
│ │ │(phone/PC) │ │ (CLI/TV) │ │ (Auth Server) │
@ -166,7 +166,7 @@ curl -X POST https://login.salesforce.com/services/oauth2/device/code \
## Step 2: Display to User
```
```text
═══════════════════════════════════════════════════════════════
To authorize this device, please:

View File

@ -82,7 +82,7 @@ sequenceDiagram
## ASCII Fallback Template
```
```text
┌───────────────────────┐ ┌────────────────────┐
│ Server/CI/CD │ │ Salesforce │
│ (Private Key) │ │ (Certificate) │
@ -145,7 +145,7 @@ sequenceDiagram
```
### Signature
```
```text
RS256(
base64URLEncode(header) + "." + base64URLEncode(payload),
privateKey

View File

@ -66,7 +66,7 @@ sequenceDiagram
## ASCII Fallback Template
```
```text
┌───────────────────────┐ ┌────────────────────┐
│ Application │ │ Salesforce │
│ (stored tokens) │ │ (Auth Server) │

View File

@ -115,7 +115,7 @@ sequenceDiagram
## ASCII Fallback Template
```
```text
┌────────────────┐ ┌────────────────────┐ ┌─────────────────────┐
│ Client │ │ Salesforce │ │ OIDC Provider │
│ (Mobile App) │ │ (Auth/RP Server) │ │ (Google/Facebook) │
@ -221,7 +221,7 @@ sequenceDiagram
### Auth. Provider Setup
```
```text
Setup → Auth. Providers → New
├── Provider Type: OpenID Connect (or specific: Google, Facebook)
├── Consumer Key: [From OP Developer Console]

View File

@ -211,7 +211,7 @@ flowchart TB
## ASCII Fallback Template
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ ROLE HIERARCHY │
└─────────────────────────────────────────────────────────────────────────────┘

View File

@ -5,7 +5,7 @@ Soft pastel color palette (Tailwind 200-level) with dark borders for clear defin
## Primary Palette (Tailwind 200 + Dark Borders)
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ COMPONENT │ FILL (200) │ STROKE (700+) │ TEXT COLOR │
├───────────────────────────┼──────────────┼────────────────┼────────────────┤
@ -24,7 +24,7 @@ Soft pastel color palette (Tailwind 200-level) with dark borders for clear defin
## Subgraph Background Colors (Tailwind 50-level)
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ SUBGRAPH │ FILL (50) │ STROKE (700+) │ STYLE │
├───────────────────────────┼──────────────┼────────────────┼────────────────┤
@ -45,7 +45,7 @@ Soft pastel color palette (Tailwind 200-level) with dark borders for clear defin
## Salesforce-Specific Colors
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ SALESFORCE COMPONENT │ FILL (200) │ STROKE (700+) │ TEXT COLOR │
├───────────────────────────┼──────────────┼────────────────┼────────────────┤
@ -62,7 +62,7 @@ Soft pastel color palette (Tailwind 200-level) with dark borders for clear defin
Color coding for data model diagrams by object type:
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ OBJECT TYPE │ FILL (200) │ STROKE (700+) │ TEXT COLOR │
├───────────────────────────┼──────────────┼────────────────┼────────────────┤
@ -114,7 +114,7 @@ style ext fill:#ecfdf5,stroke:#047857,stroke-dasharray:5
## Status Colors
```
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ STATUS │ FILL (200) │ STROKE (700+) │ ICON │
├───────────────────────────┼──────────────┼────────────────┼────────────────┤
@ -132,7 +132,7 @@ style ext fill:#ecfdf5,stroke:#047857,stroke-dasharray:5
Mermaid supports custom fonts via `%%{init}`:
```
```text
%%{init: { "fontFamily": "Inter, sans-serif", "fontSize": "14px" }}%%
```
@ -187,7 +187,7 @@ Control diagram density with `%%{init}` configuration:
For clean, readable diagrams:
```
```text
%%{init: {"flowchart": {"nodeSpacing": 80, "rankSpacing": 70}} }%%
```
@ -248,7 +248,7 @@ flowchart TB
### Simple Label (Recommended)
```
```json
["🤖 agentforce-generate"]
```
@ -256,7 +256,7 @@ Keep labels short for consistent rendering.
### Database/Cylinder
```
```json
[(💾 Database)]
```
@ -344,7 +344,7 @@ flowchart TB
### Detailed Guidelines
#### Node Labels: lowercase (Recommended)
```
```text
["🤖 agentforce-generate"] ✅ Preferred
["🤖 agentforce-generate"] ❌ Avoid
["🤖 agentforce-generate"] ❌ Avoid
@ -357,7 +357,7 @@ flowchart TB
- Easier to read in compact diagram nodes
#### Subgraph Titles: UPPERCASE
```
```text
subgraph ai["🤖 AI & AGENTS"] ✅ UPPERCASE
subgraph ai["🤖 ai & agents"] ❌ lowercase
subgraph ai["🤖 Ai & Agents"] ❌ Title Case
@ -370,7 +370,7 @@ subgraph ai["🤖 Ai & Agents"] ❌ Title Case
- Maximum contrast between group titles and contents
#### Edge Labels: lowercase
```
```text
-->|"schema"| ✅ lowercase
-->|"Schema"| ❌ Title Case
-->|"SCHEMA"| ❌ ALL CAPS
@ -382,7 +382,7 @@ subgraph ai["🤖 Ai & Agents"] ❌ Title Case
- Consistent with node label style
#### ASCII Diagrams: UPPERCASE for Headers
```
```text
┌─────────────────────────────────────┐
│ SYSTEM LANDSCAPE │ ✅ UPPERCASE header
└─────────────────────────────────────┘

View File

@ -48,7 +48,7 @@ Consistency guidelines for all sf-diagram generated diagrams.
### Example Structure
```
```text
%%{init: {...}}%%
sequenceDiagram
autonumber
@ -85,7 +85,7 @@ sequenceDiagram
### Field Representation
```
```text
OBJECT {
Type FieldName Annotation "Comment"
}
@ -198,7 +198,7 @@ flowchart LR
### Box Drawing Characters
```
```text
Standard Box:
┌─────────────────┐
│ │
@ -228,7 +228,7 @@ Rounded corners (optional):
### Arrow Characters
```
```yaml
Right: ───> or ──▶ or ────────────────>
Left: <─── or ◀──
Up: ▲
@ -244,7 +244,7 @@ Bidirectional: <──>
### Example ASCII Sequence
```
```text
┌──────────┐ ┌───────────────┐ ┌────────────────┐
│ Client │ │ Server │ │ Database │
└────┬─────┘ └───────┬───────┘ └───────┬────────┘

View File

@ -13,7 +13,7 @@ Standardized conventions for Salesforce data model diagrams with object type ind
### Examples
```
```text
Account [STD] → Standard Salesforce object
Invoice__c [CUST] → Custom object
SAP_Product__x [EXT] → External object via Salesforce Connect

View File

@ -7,7 +7,7 @@ Use individual `style` declarations with **Tailwind 200-level pastel fills** and
Add this init directive at the start of every flowchart for optimal readability:
```
```text
%%{init: {"flowchart": {"nodeSpacing": 80, "rankSpacing": 70}} }%%
```
@ -74,7 +74,7 @@ flowchart TB
## Node Label Pattern
Keep labels short (icon + name only). Avoid `<br/>` and `<small>` tags:
```
```json
["🔐 integration-connectivity-connected-app-configure"]
```

View File

@ -6,7 +6,7 @@ After generating the diagram, offer the user a localhost preview for real-time i
## Start Preview
1. Save Mermaid code to temporary file:
```
```text
Write: /tmp/mermaid-preview.mmd
[Mermaid code content]
```

View File

@ -8,7 +8,7 @@ Real-world examples of using the sf-diagram skill.
## Example 1: OAuth Flow Diagram
### Request
```
```text
"Create a JWT Bearer OAuth flow diagram for our CI/CD pipeline integration"
```
@ -60,7 +60,7 @@ sequenceDiagram
```
#### ASCII Fallback
```
```text
┌───────────────────────┐ ┌────────────────────┐
│ GitHub Actions │ │ Salesforce │
│ (Private Key) │ │ (Certificate) │
@ -81,7 +81,7 @@ sequenceDiagram
```
### Score
```
```yaml
Score: 72/80 ⭐⭐⭐⭐⭐ Excellent
├─ Accuracy: 20/20 ✓ All JWT Bearer steps correct
├─ Clarity: 18/20 ✓ Clear labels, good flow
@ -95,7 +95,7 @@ Score: 72/80 ⭐⭐⭐⭐⭐ Excellent
## Example 2: Data Model ERD
### Request
```
```text
"Create an ERD for our custom Invoice system with Invoice__c, Invoice_Line_Item__c, and relationships to Account and Product"
```
@ -168,7 +168,7 @@ erDiagram
```
#### ASCII Fallback
```
```text
┌─────────────────────────┐ ┌─────────────────────────┐
│ ACCOUNT │ │ CONTACT │
├─────────────────────────┤ ├─────────────────────────┤
@ -214,7 +214,7 @@ erDiagram
```
### Score
```
```yaml
Score: 74/80 ⭐⭐⭐⭐⭐ Excellent
├─ Accuracy: 20/20 ✓ All relationships correct
├─ Clarity: 19/20 ✓ Clear field annotations
@ -228,7 +228,7 @@ Score: 74/80 ⭐⭐⭐⭐⭐ Excellent
## Example 3: Integration Sequence
### Request
```
```text
"Diagram our real-time Order sync from Salesforce to SAP using Platform Events"
```
@ -302,7 +302,7 @@ sequenceDiagram
```
### Score
```
```yaml
Score: 70/80 ⭐⭐⭐⭐ Very Good
├─ Accuracy: 19/20 ✓ Platform Event pattern correct
├─ Clarity: 18/20 ✓ Good error handling shown
@ -316,7 +316,7 @@ Score: 70/80 ⭐⭐⭐⭐ Very Good
## Example 4: Combined Request
### Request
```
```text
"I need to document our partner portal authentication.
Create: 1) The OAuth flow for partner login, 2) The data model showing Partner Account, Portal User, and Opportunities they can see"
```

View File

@ -53,7 +53,7 @@ python mermaid_preview.py status
## How It Works
```
```text
┌─────────────────────────────────────────────────────────────┐
│ Browser Tab │
│ ┌─────────────────────────────────────────────────────┐ │

View File

@ -1,80 +0,0 @@
# Credits & Acknowledgments
This skill leverages cutting-edge AI technologies and tools to enable visual content generation in Salesforce development workflows.
---
## Technologies & Tools
### Google Gemini
Key capabilities:
- Gemini 3 Pro multimodal AI model
- Image generation via Nano Banana Pro extension
- Code review and analysis capabilities
- Documentation research and summarization
### Gemini CLI
Key features:
- Command-line access to Gemini models
- Extension support (Nano Banana)
- Non-interactive mode with --yolo flag
- JSON output for programmatic use
### Nano Banana Pro
Gemini image generation extension.
Key features:
- High-quality image generation
- ERD and diagram creation
- UI/UX mockup generation
- Architecture visualization
---
## Display Technologies
### timg
Terminal image viewer.
Key features:
- Kitty graphics protocol support
- Multiple format support (PNG, JPG, GIF)
- Inline terminal display
### Kitty Graphics Protocol
High-fidelity image rendering protocol for modern terminals.
Key features:
- High-fidelity image display in terminals
- Supported by Ghostty, Kitty, WezTerm
- Enables visual content in CLI workflows
### Ghostty Terminal
Modern GPU-accelerated terminal emulator.
Key features:
- Kitty graphics protocol support
- Cross-platform (macOS, Linux)
- High performance rendering
---
## Salesforce Resources
### Salesforce Lightning Design System (SLDS)
- Design patterns for LWC mockups
- Color palettes and typography
- Component specifications
### Salesforce Developers Platform
- API documentation
- Best practices guides
- Platform architecture references

View File

@ -1,83 +0,0 @@
# external-diagram-visual-generate
AI-powered visual content generation for Salesforce development. Generate ERD diagrams, LWC mockups, and architecture visuals using Gemini 3 Pro Image (Nano Banana Pro).
## Features
- **Visual ERD Generation**: Create actual rendered ERD diagrams (not just Mermaid code)
- **LWC/UI Mockups**: Generate wireframes and component mockups following SLDS
- **Gemini Code Review**: Parallel code review while Claude continues working
- **Documentation Research**: Parallel Salesforce documentation research via Gemini
## Prerequisites
**IMPORTANT**: Run the prerequisites check before using this skill:
```bash
scripts/check-prerequisites.sh
```
| Requirement | Description | How to Install |
|-------------|-------------|----------------|
| **Ghostty Terminal** | Required for Kitty graphics protocol | Download from the Ghostty website |
| **GEMINI_API_KEY** | Personal API key for Nano Banana Pro | Generate via Google AI Studio |
| **Gemini CLI** | Command-line interface for Gemini | `npm install -g @google/gemini-cli` |
| **Nano Banana Extension** | Image generation extension | `gemini extensions install nanobanana` |
| **timg** | Terminal image viewer with Kitty support | `brew install timg` |
## Quick Start
### 1. Set up your API key
Add to `~/.zshrc`:
```bash
export GEMINI_API_KEY="your-personal-api-key"
export NANOBANANA_MODEL=gemini-3-pro-image-preview
```
### 2. Invoke the skill
```
Skill: external-diagram-visual-generate
Request: "Generate an ERD diagram showing Account, Contact, and Opportunity relationships"
```
### 3. View the result
Images are displayed inline using Kitty graphics protocol (Ghostty) or via Claude's multimodal vision using the Read tool.
## Use Cases
| Use Case | Example Request |
|----------|-----------------|
| ERD Diagrams | "Generate a visual ERD for Account, Contact, Opportunity" |
| LWC Mockups | "Create a mockup for an Account list datatable component" |
| Code Review | "Get Gemini's review of this Apex trigger" |
| Doc Research | "Research the Flow best practices in Salesforce docs" |
## Cross-Skill Integration
| Related Skill | When to Use |
|---------------|-------------|
| external-diagram-mermaid-generate | Convert Mermaid to visual rendering |
| platform-custom-object-generate | Query object/field data before generating ERDs |
| experience-lwc-generate | Generate mockups for LWC components |
| platform-apex-generate | Review Apex code via Gemini sub-agent |
## Documentation
- [Gemini CLI Setup](references/gemini-cli-setup.md)
## Security Notes
**NEVER commit your GEMINI_API_KEY to version control**
- Store API key in `~/.zshrc` only (not in project files)
- The key is personal and tied to your Google account billing
## Requirements
- Ghostty terminal (for Kitty graphics)
- Gemini CLI with Nano Banana extension
- GEMINI_API_KEY environment variable
- timg (for terminal image display)

View File

@ -1,207 +0,0 @@
---
name: external-diagram-visual-generate
description: "AI-powered image generation for Salesforce visuals via Nano Banana Pro. Use this skill when the user needs rendered PNG/SVG output such as visual ERDs (Entity Relationship Diagrams), UI mockups, wireframes, or architecture illustrations. TRIGGER when: user asks for PNG/SVG output, UI mockups, wireframes, visual ERDs, or says \"generate image\" / \"create mockup\". DO NOT TRIGGER when: text-based Mermaid diagrams (use external-diagram-mermaid-generate), or non-visual documentation tasks."
metadata:
version: "1.0"
---
# external-diagram-visual-generate: Salesforce Visual AI Skill
Use this skill when the user needs **rendered visuals**, not text diagrams: ERDs, UI mockups, architecture illustrations, slide-ready images, or image edits using Nano Banana Pro.
## Scope
**In scope:**
- PNG / SVG-style rendered image output
- Visual ERDs and architecture diagrams
- LWC or Experience Cloud mockups / wireframes
- Image edits on previously generated visuals
**Out of scope — delegate instead:**
- Mermaid or text-only diagrams → [external-diagram-mermaid-generate](../external-diagram-mermaid-generate/SKILL.md)
- Object / field metadata discovery for ERDs → [platform-custom-object-generate](../platform-custom-object-generate/SKILL.md) or [platform-custom-field-generate](../platform-custom-field-generate/SKILL.md)
- LWC implementation after the mockup is approved → [experience-lwc-generate](../experience-lwc-generate/SKILL.md)
- Apex review / implementation → [platform-apex-generate](../platform-apex-generate/SKILL.md)
---
## Hard Gate: Prerequisites First
Run the prerequisites check before using the skill:
```bash
scripts/check-prerequisites.sh
```
If prerequisites fail, stop and route the user to setup guidance in:
- [references/gemini-cli-setup.md](references/gemini-cli-setup.md)
---
## Required Inputs
Ask for or infer before generating:
| Input | Default if not provided |
|---|---|
| Image type | ERD |
| Subject scope and key entities / systems | Ask the user |
| Target quality | Draft (1K) |
| Preferred style | architect.salesforce.com aesthetic |
| Aspect ratio | Default (no override) |
| Quick mode or interview mode | Interview mode |
---
## Interview-First Workflow
Unless the user asks for **quick / simple / just generate**, ask clarifying questions first using the question bank in [references/interview-questions.md](references/interview-questions.md).
| Request type | Ask about |
|---|---|
| ERD / schema | objects, visual style, purpose, extras |
| UI mockup | component type, object/context, device/layout, style |
| architecture image | systems, boundaries, protocols, emphasis |
| image edit | what to keep, what to change, output quality |
**Quick mode defaults** (triggered by "quick", "simple", "just generate", "fast"):
- professional style, 1K draft, legend included, one image first then iterate
---
## Recommended Workflow
### 1. Run prerequisites check
Run `scripts/check-prerequisites.sh` and confirm all required tools pass before proceeding.
### 2. Gather inputs
- object list / metadata (delegate to `platform-custom-object-generate` / `platform-custom-field-generate` if needed)
- purpose: draft vs presentation vs documentation
- desired aesthetic — read [references/architect-aesthetic-guide.md](references/architect-aesthetic-guide.md) for ERDs
- aspect ratio / resolution
### 3. Run interview or use quick-mode defaults
Load [references/interview-questions.md](references/interview-questions.md) for the matching question set (ERD, LWC, architecture, code review).
### 4. Build a concrete prompt
Good prompts specify subject, composition, color treatment, labels/legends, and output quality goal.
### 5. Generate a fast draft at 1K
```bash
gemini --yolo "/generate 'Your prompt here'"
```
Open the result and review layout before spending on higher resolution.
### 6. Iterate using edits
```bash
gemini --yolo "/edit 'Specific change instruction'"
```
Use `/edit` for small adjustments — cheaper than regenerating. See [references/iteration-workflow.md](references/iteration-workflow.md).
### 7. Generate final at 2K/4K using the Python script
Run `scripts/generate_image.py` when layout is confirmed:
```bash
uv run scripts/generate_image.py -p "Refined prompt" -f "output.png" -r 4K
```
### 8. Error recovery
- If `gemini --yolo` returns no image: re-run once; if it fails again, fall back to the Python script path.
- If the Python script fails with `GEMINI_API_KEY not found`: verify the key is exported in your shell profile (`~/.zshrc` on macOS/zsh, `~/.bashrc` on Linux) and the terminal session is refreshed.
- If the extension is missing: run `gemini extensions install nanobanana` and re-run the prerequisites check.
---
## Default Style Guidance
For ERDs, default to the **architect.salesforce.com** aesthetic unless the user asks otherwise:
- dark border + light fill cards
- cloud-specific accent colors
- clean labels and relationship lines
- presentation-ready whitespace and hierarchy
Full style specification: [references/architect-aesthetic-guide.md](references/architect-aesthetic-guide.md)
---
## Common Patterns
| Pattern | Default approach |
|---|---|
| visual ERD | get metadata if available, then render a draft first |
| LWC mockup | load [assets/lwc/data-table.md](assets/lwc/data-table.md), [assets/lwc/record-form.md](assets/lwc/record-form.md), or [assets/lwc/dashboard-card.md](assets/lwc/dashboard-card.md) for the matching template |
| architecture illustration | load [assets/architecture/integration-flow.md](assets/architecture/integration-flow.md); emphasize systems and flows |
| image refinement | use `/edit` for small changes before regenerating |
| final production asset | switch to script-driven 2K/4K generation via `scripts/generate_image.py` |
| Apex / LWC code review | load [assets/review/apex-review.md](assets/review/apex-review.md) or [assets/review/lwc-review.md](assets/review/lwc-review.md) for the review prompt template |
---
## Output Expectations
Deliverables produced by this skill:
- **Draft image** (`<name>.png`) — 1K resolution rendered via `gemini --yolo "/generate ..."` for layout review
- **Final image** (`<name>.png`) — 2K or 4K resolution rendered via `scripts/generate_image.py` once composition is approved
- **Edit iteration** (`<name>.png`) — incremental refinement via `gemini --yolo "/edit ..."` without full regeneration
After delivering each image:
- Open the file in Preview or attach it in the session for multimodal review
- Ask the user whether to iterate on layout, labeling, or color before finalizing
- Only proceed to high-res output after draft composition is confirmed
---
## Rules / Constraints
| Rule | Rationale |
|---|---|
| Always run prerequisites check before any generation | Missing tools produce silent failures |
| Always draft at 1K before generating at 4K | Cost and time savings; composition changes at high res are wasteful |
| Use `/edit` for incremental changes, not full regeneration | Cheaper and faster for small adjustments |
| Never commit `GEMINI_API_KEY` to version control | Key is personal and tied to billing |
| Delegate text diagrams to `external-diagram-mermaid-generate` | This skill owns rendered images only |
---
## Gotchas
| Issue | Resolution |
|---|---|
| Edit not applying correctly | Be specific: reference existing elements by name; one change at a time |
| 4K output looks different from 1K draft | Use exact same prompt text; minor variations are normal model behavior |
| `gemini --yolo` fails silently | Check that the Nano Banana extension is installed: `gemini extensions list` |
| Image dimensions wrong | Set `--aspect-ratio` explicitly in `scripts/generate_image.py` using `-a "16:9"` |
| RGBA image causes errors in Python script | Script auto-converts RGBA→RGB; ensure Pillow is installed via `uv` |
---
## Cross-Skill Integration
| Need | Delegate to | Reason |
|---|---|---|
| Mermaid first draft or text diagram | [external-diagram-mermaid-generate](../external-diagram-mermaid-generate/SKILL.md) | faster structural diagramming |
| Object / field discovery for ERD | [platform-custom-object-generate](../platform-custom-object-generate/SKILL.md) / [platform-custom-field-generate](../platform-custom-field-generate/SKILL.md) | accurate schema grounding |
| Turn mockup into real LWC component | [experience-lwc-generate](../experience-lwc-generate/SKILL.md) | implementation after design |
| Apex review / implementation | [platform-apex-generate](../platform-apex-generate/SKILL.md) | code-quality follow-up |
---
## Reference File Index
| File | When to read |
|---|---|
| [references/gemini-cli-setup.md](references/gemini-cli-setup.md) | Prerequisites fail — Gemini CLI / Nano Banana setup guidance |
| [references/interview-questions.md](references/interview-questions.md) | Step 3 — load question set matching the request type |
| [references/iteration-workflow.md](references/iteration-workflow.md) | Step 6 — draft-to-final iteration patterns and cost tips |
| [references/architect-aesthetic-guide.md](references/architect-aesthetic-guide.md) | Step 4 — ERD color palettes, box styles, prompt templates |
| [references/examples-index.md](references/examples-index.md) | Step 4 — example prompts for ERD, LWC, architecture, code review |
| [assets/erd/core-objects.md](assets/erd/core-objects.md) | Step 4 — prompt template for core CRM objects (Account, Contact, Opportunity, Case) |
| [assets/erd/custom-objects.md](assets/erd/custom-objects.md) | Step 4 — prompt template for custom object ERDs |
| [assets/lwc/data-table.md](assets/lwc/data-table.md) | Step 4 — prompt template for lightning-datatable mockups |
| [assets/lwc/record-form.md](assets/lwc/record-form.md) | Step 4 — prompt template for lightning-record-form mockups |
| [assets/lwc/dashboard-card.md](assets/lwc/dashboard-card.md) | Step 4 — prompt template for dashboard card / metric tile mockups |
| [assets/architecture/integration-flow.md](assets/architecture/integration-flow.md) | Step 4 — prompt template for integration architecture diagrams |
| [assets/review/apex-review.md](assets/review/apex-review.md) | Step 4 — Gemini review prompt template for Apex code |
| [assets/review/lwc-review.md](assets/review/lwc-review.md) | Step 4 — Gemini review prompt template for LWC components |
| [scripts/check-prerequisites.sh](scripts/check-prerequisites.sh) | Step 1 — run to verify all required tools are installed |
| [scripts/generate_image.py](scripts/generate_image.py) | Step 7 — run for 2K/4K resolution output and image editing with resolution control |

View File

@ -1,55 +0,0 @@
# Architecture Template: Integration Flow
## Prompt Template
```
Professional Salesforce integration architecture diagram:
SYSTEMS:
[List systems with types and icons]
INTEGRATION PATTERNS:
[List integrations with protocols and directions]
COMPONENTS:
- API Gateway (if applicable)
- Authentication layer
- Middleware/ESB (if applicable)
- Error handling/retry logic
STYLING:
- Cloud icon for Salesforce
- Server icons for external systems
- Arrows with protocol labels
- Color coding by system type
- Professional diagram style
FORMAT:
- Landscape orientation
- Left-to-right or hub-spoke layout
- Include legend
```
## Example
```bash
gemini "/generate 'Salesforce integration architecture diagram:
Systems:
1. Salesforce (cloud icon, blue)
2. MuleSoft (middleware icon, purple)
3. SAP ERP (server icon, orange)
Flows:
1. Salesforce --REST--> MuleSoft --BAPI--> SAP
- Account/Contact sync (bidirectional)
2. SAP --Events--> MuleSoft --Platform Events--> Salesforce
- Invoice updates
Include:
- OAuth 2.0 authentication badges
- Error queue for failed messages
Style: Professional, clean lines, pastel colors'"
```

View File

@ -1,131 +0,0 @@
# ERD Template: Core Salesforce Objects (Architect.salesforce.com Style)
## Default Style
All ERDs now use the **official architect.salesforce.com aesthetic** by default:
- Dark border + light translucent fill boxes
- Header banner with Salesforce logo
- LEGEND bar with ENTITIES and RELATIONSHIPS
- Labeled relationship lines
- Footer with copyright
See `references/architect-aesthetic-guide.md` for full specification.
---
## Prompt Template (Architect.salesforce.com Style)
```
Create a Salesforce Core CRM ERD in the EXACT architect.salesforce.com style:
PAGE TITLE (very top, large bold text):
'Core CRM Overview Data Model'
HEADER SECTION (below title):
- Left: Salesforce cloud logo + 'SALESFORCE PLATFORM Overview' in dark teal (#0B827C) banner box
- Center: LEGEND with 'ENTITIES' section showing:
* Cloud Entity box (dark teal #0B827C border, light teal ~25% opacity fill)
* Related Entity box (dark teal border, lighter fill)
* External Entity box (black border, white fill)
- Right: 'RELATIONSHIPS' section showing notation symbols for Parent/Child, Required, Optional, Many-to-Many
BOX STYLING - CRITICAL:
- DARK BORDER: Solid 2px border in dark teal (#0B827C)
- LIGHT TRANSLUCENT FILL: Same teal hue at ~25% opacity
- Rounded corners (8-12px radius)
- Text in dark gray/black on the light fill
ENTITY BOX FORMAT:
┌─────────────────────────┐
│ Logical Name │ (Bold, larger)
│ APIName │ (Smaller, italic, gray)
│ • Field1 │ (Bullet points)
│ • Field2 │
└─────────────────────────┘
OBJECTS TO INCLUDE (all with dark teal border + light teal fill):
- Account (center position):
Account
Account
• Account Number
• Name
• Industry
• Type
- Contact (linked to Account):
Contact
Contact
• Name
• Email
• Title
• Phone
- Opportunity (linked to Account):
Opportunity
Opportunity
• Name
• Amount
• Close Date
• StageName
- Case (linked to Account and Contact):
Case
Case
• CaseNumber
• Type
• Priority
• Status
RELATIONSHIP LINES:
- Thin black lines with text labels ON the lines
- Contact → Account: "child of" (crow's foot on Contact side)
- Opportunity → Account: "child of" (crow's foot on Opportunity side)
- Case → Account: "related to" (crow's foot on Case side)
- Case → Contact: "related to" (optional)
- STRAIGHT LINES ONLY (horizontal and vertical, no diagonals)
FOOTER:
Left: '©2024 Salesforce - Subject to change without notice'
Right: 'Last modified: [current date]'
CRITICAL: Dark teal borders with LIGHT translucent teal fill - NOT solid filled boxes.
```
---
## Usage
```bash
# Quick draft at 1K (iterate here)
gemini --yolo "/generate '[paste prompt above]'"
open ~/nanobanana-output/*.png # Review and refine
# Final at 4K (when satisfied)
uv run scripts/generate_image.py \
-p "[your refined prompt]" \
-f "core-crm-erd.png" \
-r 4K
open ~/nanobanana-output/*core-crm*.png
```
---
## Cloud Color Reference
| Cloud | Border Color | Fill (~25% opacity) |
|-------|--------------|---------------------|
| Sales Cloud | `#0B827C` (Teal) | Light Teal |
| Service Cloud | `#9E2A7D` (Magenta) | Light Pink |
| Platform | `#5A67D8` (Purple) | Light Purple |
---
## Resolution Guide
| Phase | Resolution | Use Case |
|-------|------------|----------|
| Draft | 1K (CLI) | Quick iteration, prompt refinement |
| Final | 4K (Python) | Documentation, presentations |
**Tip**: Iterate at 1K until layout is correct, then generate 4K final.

View File

@ -1,60 +0,0 @@
# ERD Template: Custom Objects
## Prompt Template
```
Professional Salesforce ERD diagram showing custom objects:
OBJECTS:
[List custom objects with relationships]
COLOR CODING:
- Standard Objects: Blue (#bae6fd fill, #0369a1 border)
- Custom Objects: Orange (#fed7aa fill, #c2410c border)
- External Objects: Green (#a7f3d0 fill, #047857 border)
RELATIONSHIPS:
- Lookup (LK): Dashed arrow, optional parent
- Master-Detail (MD): Solid thick arrow, cascade delete
STYLING:
- Clean white background
- Pastel fill colors with dark borders
- Relationship labels on arrows
- Professional diagram layout
- Include color legend
FORMAT:
- Auto-layout based on relationships
- Primary objects centered
- Child objects positioned below/right of parents
```
## Example
```bash
# Draft at 1K (iterate here)
gemini --yolo "/generate 'Salesforce ERD for real estate app:
- Property__c (orange, center): Main custom object
- Listing__c (orange, right): Master-Detail to Property__c
- Showing__c (orange, below): Lookup to both Property__c and Contact
Orange boxes for custom objects, blue for standard (Contact).
Include legend. Professional style.'"
open ~/nanobanana-output/*.png # Review and refine
# Final at 4K (when satisfied)
uv run scripts/generate_image.py \
-p "Salesforce ERD for real estate app..." \
-f "realestate-erd.png" \
-r 4K
```
## Resolution Guide
| Phase | Resolution | Use Case |
|-------|------------|----------|
| Draft | 1K (CLI) | Quick iteration, prompt refinement |
| Final | 4K (Python) | Documentation, presentations |
**Tip**: Iterate at 1K until layout is correct, then generate 4K final.

View File

@ -1,45 +0,0 @@
# LWC Template: Dashboard Card Mockup
## Prompt Template
```
Salesforce Lightning dashboard card/tile mockup:
CARD TYPE: [metric/chart/list/progress]
METRIC CARD:
- Large metric value
- Label below
- Trend indicator: up/down arrow with percentage
- Sparkline mini chart (optional)
- Icon in corner
CHART CARD:
- Chart type: [bar/line/pie/donut]
- Legend position
- Data labels on hover
LIST CARD:
- Title with "View All" link
- 3-5 list items
- Each item: icon, primary text, secondary text
STYLING:
- SLDS card component
- White background with subtle shadow
- Rounded corners
- Header with title and action menu
```
## Example: Metric Card
```bash
gemini "/generate 'Salesforce dashboard metric card:
- Large number: $1.2M
- Label: Total Pipeline Value
- Trend: +12% (green up arrow)
- Icon: Opportunity icon (top-right)
- Sparkline: Show 7-day trend mini chart
Style: SLDS card, white background, subtle shadow'"
```

View File

@ -1,57 +0,0 @@
# LWC Template: Data Table Mockup
## Prompt Template
```
Salesforce Lightning Web Component data table mockup:
COMPONENT: lightning-datatable style
HEADER:
- Component title: "[Title]"
- Search box (right-aligned)
- Action buttons: New, Refresh, Export
COLUMNS:
[List columns with types]
SAMPLE DATA:
- Show 5-7 sample rows with realistic data
- Include row selection checkboxes
- Show sorting arrows on sortable columns
STYLING:
- SLDS (Salesforce Lightning Design System)
- Zebra striping on rows
- Hover highlight
- Blue header bar
- White background
ACTIONS:
- Row-level action menu (three dots)
- Bulk action buttons when rows selected
FORMAT:
- Desktop view (1200px width)
- Full component with card wrapper
- Include pagination footer
```
## Example
```bash
gemini "/generate 'Salesforce LWC data table mockup:
Title: Recent Opportunities
Columns:
1. Opportunity Name (link)
2. Account Name (text)
3. Amount (currency, right-aligned)
4. Stage (picklist badge)
5. Close Date (date)
6. Owner (user with avatar)
Sample data: Show 5 realistic opportunities
Include: Search, New button, row actions menu
Style: SLDS, professional, clean
Pagination: 1-5 of 127'"
```

View File

@ -1,60 +0,0 @@
# LWC Template: Record Form Mockup
## Prompt Template
```
Salesforce Lightning Web Component record form mockup:
COMPONENT: lightning-record-form style
HEADER:
- Object icon and label
- Edit/Save/Cancel buttons (right)
- Record name as title
LAYOUT:
- Two-column layout for desktop
- Responsive single column for mobile
SECTIONS:
[Define sections with fields]
FIELD TYPES:
- Text inputs with labels above
- Picklists as dropdown
- Lookups with search icon
- Date pickers with calendar
- Currency with formatting
- Checkboxes for boolean
STYLING:
- SLDS record page styling
- Compact spacing
- Blue section headers
- Required field indicators (*)
- Help text icons where applicable
```
## Example
```bash
gemini "/generate 'Salesforce LWC record form mockup:
Object: Opportunity
Mode: Edit
Sections:
1. Opportunity Information:
- Opportunity Name* (text)
- Account Name* (lookup with search)
- Type (picklist)
- Lead Source (picklist)
2. Amount & Dates:
- Amount (currency)
- Close Date* (date picker)
- Stage* (picklist)
- Probability (percentage)
Footer: Save and Cancel buttons
Style: SLDS, professional, desktop view'"
```

View File

@ -1,57 +0,0 @@
# Apex Code Review Template
## Gemini Review Prompt
```
Review this Apex code for best practices and issues:
CODE:
[paste code here]
REVIEW CATEGORIES:
1. BULKIFICATION
- SOQL queries in loops
- DML operations in loops
- Governor limit risks
- Collection usage
2. SECURITY
- CRUD permissions check
- FLS enforcement
- Sharing model compliance
- Injection vulnerabilities
3. BEST PRACTICES
- Trigger handler pattern
- One trigger per object
- Separation of concerns
- Proper exception handling
4. PERFORMANCE
- Selective SOQL queries
- Index usage
- Unnecessary computation
5. MAINTAINABILITY
- Code comments
- Method length
- Test coverage considerations
OUTPUT FORMAT:
JSON with summary, issues array, bestPractices array, and score
```
## Usage
```bash
gemini "Review this Apex trigger for issues: [paste code]" -o json
```
## Severity Guidelines
| Severity | Criteria |
|----------|----------|
| High | Security, governor limits, data integrity |
| Medium | Performance, best practices |
| Low | Style, minor improvements |

View File

@ -1,48 +0,0 @@
# LWC Code Review Template
## Gemini Review Prompt
```
Review this Lightning Web Component for best practices:
JAVASCRIPT:
[paste JS code]
HTML TEMPLATE:
[paste HTML code]
REVIEW CATEGORIES:
1. ACCESSIBILITY (A11Y)
- ARIA labels and roles
- Keyboard navigation
- Screen reader compatibility
2. PERFORMANCE
- Wire service usage
- Rendering optimization
- Event handling
3. SECURITY
- Locker Service compliance
- XSS prevention
4. BEST PRACTICES
- Component lifecycle
- Error handling
- Data binding
5. SALESFORCE PATTERNS
- Lightning Data Service
- Navigation service
- Toast notifications
OUTPUT FORMAT:
JSON with summary, issues array, accessibility score, and overall score
```
## Usage
```bash
gemini "Review this LWC component: [paste code]" -o json
```

View File

@ -1,257 +0,0 @@
<!-- Parent: external-diagram-visual-generate/SKILL.md -->
# Official Salesforce Architect ERD Aesthetic Guide
Reference for generating ERDs matching the **architect.salesforce.com** visual style.
This is the default style for all ERD diagrams generated by external-diagram-visual-generate.
---
## Cloud-Specific Color Palettes
Each Salesforce cloud has its own brand color. The skill auto-detects which cloud to use based on the objects requested.
| Cloud | Border Color | Fill (~25% opacity) | Detect By Objects |
|-------|--------------|---------------------|-------------------|
| **Sales Cloud** | `#0B827C` (Teal) | Light Teal | Lead, Opportunity, Quote, Campaign, Order |
| **Service Cloud** | `#9E2A7D` (Magenta) | Light Pink | Case, Knowledge, Entitlement, Swarm, Incident |
| **Platform** | `#5A67D8` (Purple) | Light Purple | Account, Contact only (no cloud-specific objects) |
| **Industries/Scheduler** | `#BA4383` (Pink) | Light Pink | ServiceTerritory, WorkType, Shift, ServiceResource |
| **Nonprofit Cloud** | `#032D60` (Navy) | Light Gray | Survey, Donation, Program objects |
---
## The Signature Box Style: "Dark Border + Light Fill"
This is the defining visual pattern of architect.salesforce.com diagrams:
| Property | Value |
|----------|-------|
| **Border** | Solid 2px in cloud's brand color |
| **Fill** | Same hue at ~25% opacity (translucent) |
| **Corners** | Rounded (8-12px radius) |
| **Text** | Dark gray/black on light fill |
### Visual Example
```
┌─────────────────────────┐
│ ░░░░░░░░░░░░░░░░░░░░░░░ │ ← Light translucent fill
│ ░ Opportunity ░ │ ← Bold logical name
│ ░ Opportunity ░ │ ← Smaller italic API name
│ ░ • Name ░ │ ← Key fields with bullets
│ ░ • Amount ░ │
│ ░ • Close Date ░ │
└─────────────────────────┘
↑ Dark solid border
```
---
## Page Structure
### 1. Page Title (Top)
Large bold text centered at the very top:
- Format: `"[Cloud Name] Overview Data Model"`
- Example: `"Sales Cloud Overview Data Model"`
### 2. Header Banner
Below the title, a horizontal banner containing:
```
┌──────────────────────────────────────────────────────────────────────────────┐
│ [salesforce] SALES CLOUD │ LEGEND: │
│ Overview │ ENTITIES │ RELATIONSHIPS │
│ │ [boxes...] │ [symbols...] │
└──────────────────────────────────────────────────────────────────────────────┘
```
**Left Section:**
- Salesforce cloud logo
- "[CLOUD NAME] Overview" in dark background
**Center Section - ENTITIES:**
- Cloud Entity (dark border + light fill)
- Related Entity (dark border + light fill)
- External Entity (black border + white fill)
**Right Section - RELATIONSHIPS:**
- Parent to Child (Many-to-One)
- Required to Required (One-to-One)
- Optional to Optional (Zero-or-One to Zero-or-One)
- Many-to-Many
### 3. Main Diagram Area
The ERD with objects and relationship lines.
### 4. Footer
```
┌──────────────────────────────────────────────────────────────────────────────┐
│ ©2024 Salesforce - Subject to change without notice Last modified: [DATE]│
└──────────────────────────────────────────────────────────────────────────────┘
```
---
## Entity Box Format
Each object box contains:
```
┌─────────────────────────┐
│ Opportunity │ ← Bold logical name (larger font)
│ Opportunity │ ← API name (smaller, italic, gray)
│ • Name │ ← Key field 1 with bullet
│ • Amount │ ← Key field 2 with bullet
│ • Close Date │ ← Key field 3 with bullet
│ • StageName │ ← Key field 4 (optional)
└─────────────────────────┘
```
### Recommended Fields by Object
| Object | Key Fields |
|--------|------------|
| Account | Account Number, Name, Industry, Type |
| Contact | Name, Email, Title, Phone |
| Lead | Name, Company, Status, Rating |
| Opportunity | Name, Amount, Close Date, StageName |
| Campaign | Name, Type, Status, StartDate |
| Case | CaseNumber, Type, Priority, Status |
| Quote | Name, ExpirationDate, Status |
| Order | OrderNumber, EffectiveDate, Status |
| Product2 | Name, ProductCode, IsActive |
---
## Relationship Line Labels
**Always include descriptive text labels on relationship lines.**
| Relationship Type | Label Examples |
|-------------------|----------------|
| Parent-Child | "child of", "parent of" |
| Lookup | "related to" |
| Junction | "member of", "participant in" |
| Conversion | "converts to", "promoted to" |
| Association | "assigned to", "owned by" |
### Line Styling
| Property | Value |
|----------|-------|
| Stroke width | 1-2px |
| Color | Black (`#000000`) |
| Direction | Straight horizontal or vertical only (NO diagonals) |
| Crow's foot | On "many" side of relationship |
| Bar | On "one" side (required) |
| Circle + Bar | On "one" side (optional) |
---
## Master Prompt Template
Use this template when generating ERDs:
```
Create a Salesforce [CLOUD_NAME] ERD in the EXACT architect.salesforce.com style:
PAGE TITLE (very top, large bold text):
'[Cloud Name] Overview Data Model'
HEADER SECTION (below title):
- Left: Salesforce cloud logo + '[CLOUD_NAME] Overview' in dark [COLOR] (#[HEX]) banner box
- Center: LEGEND with 'ENTITIES' section showing:
* Cloud Entity box (dark [COLOR] border, light [COLOR] ~25% opacity fill)
* Related Entity box (dark border, lighter fill)
* External Entity box (black border, white fill)
- Right: 'RELATIONSHIPS' section showing notation symbols
BOX STYLING - CRITICAL:
- DARK BORDER: Solid 2px border in dark [COLOR] (#[HEX])
- LIGHT TRANSLUCENT FILL: Same [COLOR] hue at ~25% opacity
- Rounded corners (8-12px radius)
- Text in dark gray/black on the light fill
ENTITY BOX FORMAT:
┌─────────────────────────┐
│ Logical Name │ (Bold, larger)
│ APIName │ (Smaller, italic, gray)
│ • Field1 │ (Bullet points)
│ • Field2 │
└─────────────────────────┘
OBJECTS TO INCLUDE:
[List objects with their fields]
RELATIONSHIP LINES:
- Thin black lines with text labels ON the lines
- 'child of' / 'parent of' / 'related to' labels
- Crow's foot on many side, bar on one side
- STRAIGHT LINES ONLY (horizontal and vertical)
FOOTER:
Left: '©[YEAR] Salesforce - Subject to change without notice'
Right: 'Last modified: [DATE]'
CRITICAL: Dark [COLOR] borders with LIGHT translucent [COLOR] fill.
```
---
## Cloud-Specific Templates
### Sales Cloud
```
COLOR: Teal #0B827C
OBJECTS: Lead, Account, Contact, Opportunity, Campaign, CampaignMember,
Quote, Order, Product2, PricebookEntry, Territory
```
### Service Cloud
```
COLOR: Magenta #9E2A7D
OBJECTS: Case, Knowledge, KnowledgeArticle, Entitlement, Asset,
ServiceContract, WorkOrder, Swarm, Incident, Problem
```
### Platform (Generic)
```
COLOR: Purple #5A67D8
OBJECTS: Account, Contact, User, Custom Objects
```
---
## Quick Reference Checklist
```
ARCHITECT.SALESFORCE.COM ERD CHECKLIST
═══════════════════════════════════════
☐ Page title at very top ("[Cloud] Overview Data Model")
☐ Header banner with Salesforce logo + "[CLOUD] Overview"
☐ Legend bar (ENTITIES + RELATIONSHIPS sections)
☐ DARK border in cloud's brand color
☐ LIGHT translucent fill (~25% opacity)
☐ Entity boxes: Name + API Name + bullet fields
☐ Labeled relationship lines ("child of", "related to")
☐ Crow's foot notation for many-side
☐ Straight lines only (no diagonals)
☐ Footer with copyright + last modified date
☐ Clean white background
```
---
## Version History
| Version | Changes |
|---------|---------|
| 1.0 | Initial version with Sales Cloud, Service Cloud, Platform styles |

View File

@ -1,35 +0,0 @@
<!-- Parent: external-diagram-visual-generate/SKILL.md -->
# Examples
Example prompts and outputs for external-diagram-visual-generate.
## ERD Examples
```bash
# Basic CRM ERD
gemini --yolo "/generate 'Salesforce ERD diagram: Account (blue), Contact (green), Opportunity (yellow). Show relationships with arrows. Clean white background.'"
# Custom Object ERD
gemini --yolo "/generate 'ERD diagram for custom objects: Project__c, Task__c, Resource__c. Master-detail and lookup relationships shown.'"
```
## LWC Mockup Examples
```bash
# Data Table Mockup
gemini --yolo "/generate 'Lightning datatable mockup showing Account records with columns: Name, Industry, Annual Revenue. Include search bar and pagination.'"
# Record Form Mockup
gemini --yolo "/generate 'Salesforce Lightning record form for Contact object. Show Name, Email, Phone, Account lookup fields.'"
```
## Architecture Examples
```bash
# Integration Flow
gemini --yolo "/generate 'Integration architecture diagram: Salesforce to ERP sync via MuleSoft. Show Platform Events, Named Credentials, External Services.'"
```
## Output Location
Generated images are saved to `~/nanobanana-output/`

View File

@ -1,65 +0,0 @@
<!-- Parent: external-diagram-visual-generate/SKILL.md -->
# Gemini CLI Setup for external-diagram-visual-generate
## Prerequisites
### 1. Authenticate with Google
```bash
# Start Gemini CLI - opens browser for OAuth
gemini
# Select "Login with Google" when prompted
# Credentials cached at ~/.gemini/oauth_creds.json
```
### 2. Install Nano Banana Extension
```bash
gemini extensions install nanobanana
```
### 3. Install timg for Image Display
```bash
brew install timg
```
### 4. Configure Environment
Add to `~/.zshrc`:
```bash
export NANOBANANA_MODEL=gemini-3-pro-image-preview
export PATH="$HOME/.local/bin:$PATH"
```
---
## Verification
```bash
# Check Gemini CLI
gemini --version
# Check Nano Banana
gemini extensions list
# Check timg
which timg
# Test image generation
gemini "/generate 'A blue circle on white background'"
timg ~/gemini-images/*.png
```
---
## File Locations
| File | Purpose |
|------|---------|
| `~/.gemini/settings.json` | Gemini CLI settings |
| `~/.gemini/oauth_creds.json` | OAuth tokens |
| `~/.gemini/extensions/nanobanana/` | Nano Banana extension |
| `~/gemini-images/` | Generated images |

View File

@ -1,529 +0,0 @@
<!-- Parent: external-diagram-visual-generate/SKILL.md -->
# Interview Questions Reference
This document defines the questions Claude should ask (via `AskUserQuestion`) before generating images with external-diagram-visual-generate.
---
## How to Use This Reference
When a user requests an image, Claude should:
1. **Detect image type** from the request
2. **Find the matching question set** below
3. **Invoke AskUserQuestion** with those questions
4. **Build prompt** using the answers
5. **Generate image** with optimized parameters
### Skip Interview Triggers
Skip questions and use defaults when user says:
- "quick" - e.g., "Quick ERD of Account-Contact"
- "simple" - e.g., "Simple LWC mockup"
- "just generate" - e.g., "Just generate an architecture diagram"
- "fast" - e.g., "Fast ERD draft"
---
## ERD Diagram Questions
### When to Use
User mentions: ERD, entity relationship, data model, object relationships, schema diagram
### Questions
```json
{
"questions": [
{
"question": "Which objects should be included in the ERD?",
"header": "Objects",
"multiSelect": false,
"options": [
{
"label": "Core CRM (Recommended)",
"description": "Account, Contact, Opportunity, Case - standard sales/service objects"
},
{
"label": "Sales Cloud",
"description": "Lead, Campaign, Quote, Order, PriceBook, Product"
},
{
"label": "Service Cloud",
"description": "Case, Knowledge, Entitlement, Asset, ServiceContract"
},
{
"label": "Custom objects",
"description": "I'll specify the custom objects to include"
}
]
},
{
"question": "What visual style do you prefer?",
"header": "Style",
"multiSelect": false,
"options": [
{
"label": "Architect.salesforce.com (Recommended)",
"description": "Official Salesforce style: dark border + light fill, header banner, legend bar"
},
{
"label": "Whiteboard",
"description": "Hand-drawn look, casual feel for brainstorming"
},
{
"label": "Technical",
"description": "Detailed with field names and data types"
},
{
"label": "Minimalist",
"description": "Simple boxes, focus on relationships only"
}
]
},
{
"question": "What's the primary purpose of this ERD?",
"header": "Purpose",
"multiSelect": false,
"options": [
{
"label": "Documentation (4K)",
"description": "High quality for wikis, docs, long-term reference"
},
{
"label": "Quick draft (1K)",
"description": "Fast iteration, refine the prompt first"
},
{
"label": "Presentation",
"description": "Slides for stakeholders, clean and simple"
},
{
"label": "Architecture review",
"description": "Technical discussion with developers/architects"
}
]
},
{
"question": "Any special requirements? (Select all that apply)",
"header": "Extras",
"multiSelect": true,
"options": [
{
"label": "Include legend",
"description": "Add a legend explaining colors and relationship types"
},
{
"label": "Show field names",
"description": "Display key fields inside each object box"
},
{
"label": "Color-code by type",
"description": "Standard=blue, Custom=orange, External=green"
},
{
"label": "None",
"description": "Use default styling without extras"
}
]
}
]
}
```
### Answer-to-Prompt Mapping
| Answer | Prompt Addition |
|--------|-----------------|
| Core CRM | "Account, Contact, Opportunity, Case with standard relationships" |
| Sales Cloud | "Lead, Campaign, Quote, Order, PriceBook, Product with conversion flows" |
| Service Cloud | "Case, Knowledge, Entitlement, Asset, ServiceContract hierarchy" |
| Architect.salesforce.com | "Official architect.salesforce.com style: page title, header banner with Salesforce logo, LEGEND bar (ENTITIES + RELATIONSHIPS), dark border + light translucent fill boxes (~25% opacity), labeled relationship lines, footer with copyright" |
| Whiteboard | "Hand-drawn sketch style, informal, whiteboard aesthetic" |
| Technical | "Include field names, data types, API names in each box" |
| Documentation (4K) | Use Python script with `-r 4K`, include full header + legend |
| Quick draft (1K) | Use CLI or Python with `-r 1K` |
| Include legend | "Include LEGEND bar at top with ENTITIES and RELATIONSHIPS sections" |
| Color-code | "Auto-detect cloud color: Sales=Teal #0B827C, Service=Magenta #9E2A7D, Platform=Purple #5A67D8" |
### Default Values (for Skip Mode)
- Objects: Core CRM
- Style: Architect.salesforce.com
- Purpose: Quick draft (1K)
- Extras: Include legend
---
## LWC Component Mockup Questions
### When to Use
User mentions: LWC, Lightning Web Component, component mockup, wireframe, UI mockup, form, table, card
### Questions
```json
{
"questions": [
{
"question": "What type of component do you need?",
"header": "Component",
"multiSelect": false,
"options": [
{
"label": "Data table (Recommended)",
"description": "List view with columns, sorting, row actions"
},
{
"label": "Record form",
"description": "Create/edit form with fields and sections"
},
{
"label": "Dashboard card",
"description": "Metrics, charts, or KPI tiles"
},
{
"label": "Custom layout",
"description": "I'll describe the specific layout needed"
}
]
},
{
"question": "Which Salesforce object is this for?",
"header": "Object",
"multiSelect": false,
"options": [
{
"label": "Account",
"description": "Customer/company records"
},
{
"label": "Contact",
"description": "Individual person records"
},
{
"label": "Opportunity",
"description": "Sales deals and pipeline"
},
{
"label": "Custom object",
"description": "I'll specify the object name"
}
]
},
{
"question": "Where will this component be used?",
"header": "Context",
"multiSelect": false,
"options": [
{
"label": "Lightning Record Page (Recommended)",
"description": "Embedded on Account, Contact, etc. detail pages"
},
{
"label": "Lightning App Page",
"description": "Home page, dashboard, or custom app"
},
{
"label": "Experience Cloud",
"description": "Customer/partner portal (community)"
},
{
"label": "Standalone app",
"description": "Full-page Lightning app or utility bar"
}
]
},
{
"question": "Style preferences? (Select all that apply)",
"header": "Style",
"multiSelect": true,
"options": [
{
"label": "SLDS standard",
"description": "Standard Lightning Design System styling"
},
{
"label": "Dense/compact",
"description": "Reduced spacing for data-heavy views"
},
{
"label": "Mobile-responsive",
"description": "Adapts to mobile screen sizes"
},
{
"label": "Card-based",
"description": "Elevated card container with shadow"
}
]
}
]
}
```
### Answer-to-Prompt Mapping
| Answer | Prompt Addition |
|--------|-----------------|
| Data table | "Lightning datatable with columns, header with search, row actions menu" |
| Record form | "Lightning record form with sections, field labels, Save/Cancel buttons" |
| Dashboard card | "SLDS card component with metric value, label, trend indicator" |
| Lightning Record Page | "Component sized for record page sidebar or main content" |
| Experience Cloud | "Portal-friendly styling, user-facing design" |
| Dense/compact | "Compact spacing, reduced padding, data-dense layout" |
| Mobile-responsive | "Responsive design, single column on mobile" |
### Default Values (for Skip Mode)
- Component: Data table
- Object: Account
- Context: Lightning Record Page
- Style: SLDS standard
---
## Architecture/Integration Diagram Questions
### When to Use
User mentions: architecture, integration, system diagram, data flow, API flow, authentication flow
### Questions
```json
{
"questions": [
{
"question": "What type of diagram do you need?",
"header": "Diagram",
"multiSelect": false,
"options": [
{
"label": "Integration flow (Recommended)",
"description": "System-to-system data synchronization"
},
{
"label": "Data flow",
"description": "Entity movement between systems"
},
{
"label": "Authentication flow",
"description": "OAuth, JWT, SSO sequence diagram"
},
{
"label": "Event-driven",
"description": "Platform Events, CDC, pub/sub architecture"
}
]
},
{
"question": "Which systems are involved?",
"header": "Systems",
"multiSelect": false,
"options": [
{
"label": "Salesforce + ERP",
"description": "SAP, Oracle, NetSuite, Microsoft Dynamics"
},
{
"label": "Salesforce + Marketing",
"description": "Marketo, Pardot, HubSpot, Marketing Cloud"
},
{
"label": "Salesforce + Custom APIs",
"description": "Internal services, microservices, legacy systems"
},
{
"label": "Multiple systems",
"description": "I'll specify the systems involved"
}
]
},
{
"question": "What protocols/patterns are used? (Select all that apply)",
"header": "Protocols",
"multiSelect": true,
"options": [
{
"label": "REST APIs",
"description": "JSON over HTTP, most common pattern"
},
{
"label": "Platform Events / CDC",
"description": "Salesforce event-driven integration"
},
{
"label": "MuleSoft / iPaaS",
"description": "Integration platform as middleware"
},
{
"label": "SOAP / Legacy",
"description": "XML-based, enterprise protocols"
}
]
},
{
"question": "What elements should be highlighted? (Select all that apply)",
"header": "Elements",
"multiSelect": true,
"options": [
{
"label": "Auth badges",
"description": "Show OAuth 2.0, JWT, API Key on connections"
},
{
"label": "Error handling",
"description": "Retry logic, dead letter queues, fallbacks"
},
{
"label": "Data transforms",
"description": "Mapping, conversion, enrichment steps"
},
{
"label": "Timing/frequency",
"description": "Sync intervals, batch schedules"
}
]
}
]
}
```
### Answer-to-Prompt Mapping
| Answer | Prompt Addition |
|--------|-----------------|
| Integration flow | "System integration diagram with bidirectional data flow arrows" |
| Authentication flow | "OAuth 2.0 sequence diagram with token exchange steps" |
| Salesforce + ERP | "Salesforce (cloud icon) connected to ERP (server icon)" |
| REST APIs | "REST/JSON labels on connection arrows" |
| Platform Events | "Platform Events pub/sub with event bus in center" |
| Auth badges | "OAuth 2.0 / JWT badges on integration arrows" |
| Error handling | "Error queue and retry logic shown as separate path" |
### Default Values (for Skip Mode)
- Diagram: Integration flow
- Systems: Salesforce + Custom APIs
- Protocols: REST APIs
- Elements: Auth badges
---
## Code Review Questions (Gemini Sub-Agent)
### When to Use
User mentions: review, code review, check my code, analyze, audit, best practices
### Questions for Apex Review
```json
{
"questions": [
{
"question": "What type of Apex code is this?",
"header": "Code Type",
"multiSelect": false,
"options": [
{
"label": "Trigger",
"description": "Before/after trigger on an object"
},
{
"label": "Batch job",
"description": "Batch Apex for large data processing"
},
{
"label": "Service class",
"description": "Business logic, utility, or helper class"
},
{
"label": "Controller",
"description": "Aura/LWC controller or VF controller"
}
]
},
{
"question": "What should the review focus on?",
"header": "Focus",
"multiSelect": true,
"options": [
{
"label": "Bulkification",
"description": "SOQL/DML in loops, governor limits"
},
{
"label": "Security",
"description": "CRUD/FLS checks, injection vulnerabilities"
},
{
"label": "Performance",
"description": "Query optimization, caching, efficiency"
},
{
"label": "Best practices",
"description": "Naming, structure, patterns, testability"
}
]
}
]
}
```
---
## Quick Reference Card
| Image Type | Trigger Keywords | Questions |
|------------|-----------------|-----------|
| ERD | ERD, entity, data model, schema | Objects, Style, Purpose, Extras |
| LWC Mockup | LWC, component, mockup, wireframe | Component, Object, Context, Style |
| Architecture | architecture, integration, flow | Diagram, Systems, Protocols, Elements |
| Code Review | review, analyze, check, audit | Code Type, Focus |
---
## Example: Full Interview Flow
### User Says
"I need an ERD for my Service Cloud implementation"
### Claude Invokes AskUserQuestion
```
Objects: Core CRM / Sales Cloud / Service Cloud / Custom
Style: Professional / Whiteboard / Technical / Minimalist
Purpose: Documentation / Quick draft / Presentation / Review
Extras: Legend / Field names / Color-code / None
```
### User Selects
- Objects: Service Cloud
- Style: Professional
- Purpose: Documentation
- Extras: Legend, Color-code
### Claude Builds Prompt
```
Professional Salesforce ERD diagram showing Service Cloud objects:
- Case (blue, center): Main service object
- Knowledge (green, right): Linked articles
- Entitlement (yellow, left): Service level agreements
- Asset (orange, below): Customer-owned products
- ServiceContract (purple, top): Contract management
Relationships:
- Case → Knowledge (Lookup, dashed arrow)
- Case → Asset (Lookup, dashed arrow)
- Asset → ServiceContract (Master-Detail, solid arrow)
Color coding: Standard objects (blue), Service objects (green/yellow)
Include legend in bottom-right corner.
Clean white background, SLDS styling.
```
### Claude Generates
```bash
uv run scripts/generate_image.py \
-p "[prompt above]" \
-f "service-cloud-erd.png" \
-r 4K
```

View File

@ -1,173 +0,0 @@
<!-- Parent: external-diagram-visual-generate/SKILL.md -->
# Iteration Workflow: Draft → Final
Best practices for cost-effective image generation with external-diagram-visual-generate.
## Why Iterate at Low Resolution?
| Resolution | Time | API Cost | Use Case |
|------------|------|----------|----------|
| **1K** | ~3s | $ | Drafts, prompt refinement, layout testing |
| **2K** | ~5s | $$ | Medium quality, quick presentations |
| **4K** | ~10s | $$$ | Production, documentation, final deliverables |
**Key Insight**: Get the prompt right at 1K before spending on 4K generation.
---
## The Workflow
```
┌─────────────────────────────────────────────────────────────┐
│ DRAFT PHASE (1K) │
│ │
│ 1. Generate initial image with CLI │
│ gemini --yolo "/generate 'Your prompt...'" │
│ │
│ 2. Review in Preview │
│ open ~/nanobanana-output/*.png │
│ │
│ 3. Is the layout correct? ─────────────────┐ │
│ │ │ │
│ ▼ No ▼ Yes │
│ Refine prompt or use /edit Continue │
│ └──────────────────────────────────────►│ │
└─────────────────────────────────────────────┼───────────────┘
┌─────────────────────────────────────────────────────────────┐
│ FINAL PHASE (4K) │
│ │
│ 4. Generate production quality with Python script │
│ uv run scripts/generate_image.py \ │
│ -p "Your refined prompt" \ │
│ -f "final-output.png" \ │
│ -r 4K │
│ │
│ 5. Open and use │
│ open ~/nanobanana-output/*final-output*.png │
└─────────────────────────────────────────────────────────────┘
```
---
## Common Iteration Patterns
### Pattern 1: Prompt Refinement
```bash
# Attempt 1: Too generic
gemini --yolo "/generate 'Account ERD'"
# Result: Missing relationships, wrong colors
# Attempt 2: Add specifics
gemini --yolo "/generate 'Account ERD with Contact and Opportunity, blue boxes'"
# Result: Better, but legend missing
# Attempt 3: Add styling details
gemini --yolo "/generate 'Salesforce ERD: Account (blue, center), Contact (green),
Opportunity (yellow). Master-detail = thick arrow. Lookup = dashed. Include legend.'"
# Result: Perfect layout!
# Final: Generate at 4K
uv run scripts/generate_image.py \
-p "Salesforce ERD: Account (blue, center)..." \
-f "crm-erd-final.png" \
-r 4K
```
### Pattern 2: Edit-Based Iteration
```bash
# Start with basic ERD
gemini --yolo "/generate 'Account-Contact ERD'"
# Edit to add more objects
gemini --yolo "/edit 'Add Opportunity linked to Account with master-detail'"
# Edit to improve styling
gemini --yolo "/edit 'Add legend, use Salesforce Lightning blue (#0176D3)'"
# Final at 4K
uv run scripts/generate_image.py \
-p "Account-Contact-Opportunity ERD with legend, SLDS colors" \
-f "final-erd.png" \
-r 4K
```
### Pattern 3: Python Script for Editing
```bash
# Generate at 1K
uv run scripts/generate_image.py \
-p "Dashboard mockup with charts" \
-f "dashboard-v1.png"
# Edit with resolution control
uv run scripts/generate_image.py \
-p "Add a KPI summary bar at the top" \
-i ~/nanobanana-output/*dashboard-v1*.png \
-f "dashboard-v2.png" \
-r 2K
# Final version
uv run scripts/generate_image.py \
-p "Polish: add subtle shadows, round corners on cards" \
-i ~/nanobanana-output/*dashboard-v2*.png \
-f "dashboard-final.png" \
-r 4K
```
---
## Timestamp Filenames
The Python script automatically adds timestamps for easy versioning:
```
~/nanobanana-output/
├── 2026-01-13-10-30-15-erd-v1.png # First attempt
├── 2026-01-13-10-32-45-erd-v2.png # After edit
├── 2026-01-13-10-35-00-erd-final.png # Production 4K
```
**Tip**: Use descriptive filenames like `crm-erd.png` - the timestamp is auto-prepended.
---
## When to Use Each Method
| Method | Best For |
|--------|----------|
| **CLI (`gemini --yolo`)** | Quick drafts, simple edits, style exploration |
| **CLI `/edit`** | Iterative refinements of existing images |
| **Python script** | 4K output, precise resolution control, automated workflows |
---
## Cost Optimization Tips
1. **Never generate 4K on first attempt** - always draft at 1K first
2. **Use `/edit` for small changes** - cheaper than regenerating
3. **Batch similar requests** - get all ERDs right before final generation
4. **Save working prompts** - reuse successful prompt patterns
5. **Use `--seed` for reproducibility** - same seed = similar output
---
## Troubleshooting
### Image doesn't match prompt
- Add more specific details (colors, positions, relationships)
- Use SLDS color codes: `#0176D3` (blue), `#04844B` (green), `#FFB75D` (yellow)
- Specify layout: "center", "top-right", "below parent"
### Edit not applying correctly
- Be specific about what to change
- Reference existing elements: "Move the Account box to center"
- One change at a time for precision
### 4K output looks different from 1K draft
- Use exact same prompt text
- Consider using `--seed` for consistency
- Minor variations are normal due to model behavior

View File

@ -1,101 +0,0 @@
#!/bin/bash
# check-prerequisites.sh - Verify external-diagram-visual-generate requirements before use
# Returns 0 if all required checks pass, 1 if any required fail
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
GRAY='\033[0;90m'
NC='\033[0m'
ERRORS=0
WARNINGS=0
echo ""
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${BLUE} 📸 SF-IMAGEN PREREQUISITES CHECK${NC}"
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
echo -e "${GRAY} REQUIRED:${NC}"
# Check 1: macOS (required for Preview app)
echo -n " Checking macOS (for Preview app)... "
if [[ "$OSTYPE" == "darwin"* ]]; then
echo -e "${GREEN}✓ macOS detected${NC}"
else
echo -e "${RED}✗ Not macOS${NC}"
echo -e " ${YELLOW}→ external-diagram-visual-generate uses macOS Preview app for image display${NC}"
echo -e " ${YELLOW}→ Current OS: $OSTYPE${NC}"
ERRORS=$((ERRORS + 1))
fi
# Check 2: Gemini API Key
echo -n " Checking GEMINI_API_KEY... "
if [[ -n "$GEMINI_API_KEY" ]]; then
# Mask the key for display
MASKED_KEY="${GEMINI_API_KEY:0:10}...${GEMINI_API_KEY: -4}"
echo -e "${GREEN}✓ Set ($MASKED_KEY)${NC}"
else
echo -e "${RED}✗ Not set${NC}"
echo -e " ${YELLOW}→ Nano Banana Pro requires a personal API key${NC}"
echo -e " ${YELLOW}→ Get one at: https://aistudio.google.com/apikey${NC}"
echo -e " ${YELLOW}→ Add to ~/.zshrc: export GEMINI_API_KEY=\"your-key\"${NC}"
ERRORS=$((ERRORS + 1))
fi
# Check 3: Gemini CLI
echo -n " Checking Gemini CLI... "
if command -v gemini &> /dev/null; then
GEMINI_VERSION=$(gemini --version 2>/dev/null | head -1 || echo "installed")
echo -e "${GREEN}$GEMINI_VERSION${NC}"
else
echo -e "${RED}✗ Not installed${NC}"
echo -e " ${YELLOW}→ Install: npm install -g @google/gemini-cli${NC}"
ERRORS=$((ERRORS + 1))
fi
# Check 4: Nano Banana Extension
echo -n " Checking Nano Banana extension... "
if gemini extensions list 2>/dev/null | grep -q "nanobanana"; then
echo -e "${GREEN}✓ Installed${NC}"
else
echo -e "${RED}✗ Not installed${NC}"
echo -e " ${YELLOW}→ Install: gemini extensions install nanobanana${NC}"
ERRORS=$((ERRORS + 1))
fi
echo ""
echo -e "${GRAY} OPTIONAL (for 4K/editing via Python script):${NC}"
# Check 5: uv (optional, for Python script)
echo -n " Checking uv (Python runner)... "
if command -v uv &> /dev/null; then
UV_VERSION=$(uv --version 2>&1 | head -1)
echo -e "${GREEN}$UV_VERSION${NC}"
else
echo -e "${YELLOW}○ Not installed (optional)${NC}"
echo -e " ${GRAY}→ For 4K resolution/editing: curl -LsSf https://astral.sh/uv/install.sh | sh${NC}"
WARNINGS=$((WARNINGS + 1))
fi
echo ""
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
if [[ $ERRORS -eq 0 ]]; then
if [[ $WARNINGS -gt 0 ]]; then
echo -e " ${GREEN}✅ All required prerequisites met!${NC}"
echo -e " ${YELLOW}⚠️ $WARNINGS optional feature(s) unavailable${NC}"
else
echo -e " ${GREEN}✅ All prerequisites met! external-diagram-visual-generate is ready to use.${NC}"
fi
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
exit 0
else
echo -e " ${RED}$ERRORS required prerequisite(s) missing.${NC}"
echo -e " ${RED} Please fix before using external-diagram-visual-generate.${NC}"
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
exit 1
fi

View File

@ -1,243 +0,0 @@
#!/usr/bin/env python3
# /// script
# requires-python = ">=3.10"
# dependencies = ["google-genai>=1.0.0", "pillow>=10.0.0"]
# ///
"""
Direct Gemini API image generation with resolution control.
This script complements the CLI extension for power features:
- Resolution control: 1K (draft), 2K (medium), 4K (production)
- Image editing: Modify existing images with natural language
- Timestamp filenames: Automatic versioning for iteration tracking
Usage:
# Generate new image at 1K (draft)
uv run scripts/generate_image.py -p "Salesforce ERD diagram..." -f "account-erd.png"
# Generate at 4K (production)
uv run scripts/generate_image.py -p "Salesforce ERD diagram..." -f "account-erd.png" -r 4K
# Edit existing image
uv run scripts/generate_image.py -p "Add a legend in bottom right" -i input.png -f "output.png"
Workflow: Draft Iterate Final
1. Generate at 1K for quick feedback (~3s)
2. Refine prompt until layout/content is correct
3. Generate final at 4K for production quality (~10s)
License: MIT
"""
import argparse
import os
import subprocess
import sys
from datetime import datetime
from io import BytesIO
from pathlib import Path
try:
from google import genai
from google.genai import types
from PIL import Image
except ImportError as e:
print(f"Error: Missing dependency - {e}")
print("Run with: uv run scripts/generate_image.py ...")
sys.exit(1)
# Resolution mapping (uppercase K required by API!)
RESOLUTIONS = {
"1K": "1K", # ~1024px - drafts, fast iteration
"2K": "2K", # ~2048px - medium quality
"4K": "4K", # ~4096px - production quality
}
# Default output directory (matches CLI extension)
OUTPUT_DIR = Path.home() / "nanobanana-output"
def get_auto_resolution(image_path: str) -> str:
"""Auto-detect resolution based on input image dimensions."""
try:
with Image.open(image_path) as img:
max_dim = max(img.width, img.height)
if max_dim < 1500:
return "1K"
elif max_dim < 3000:
return "2K"
else:
return "4K"
except Exception:
return "1K"
def generate_image(
prompt: str,
filename: str,
resolution: str = "1K",
input_image: str | None = None,
api_key: str | None = None,
aspect_ratio: str | None = None,
) -> str:
"""Generate or edit an image using Gemini 3 Pro Image API.
Args:
prompt: Text description for generation or editing instruction
filename: Output filename (timestamp will be prepended)
resolution: Output resolution - 1K, 2K, or 4K (uppercase required!)
input_image: Path to existing image for editing (optional)
api_key: Gemini API key (falls back to GEMINI_API_KEY env var)
aspect_ratio: Aspect ratio like "16:9", "1:1", "4:3" (optional)
Returns:
Path to saved image file
"""
# Get API key
api_key = api_key or os.environ.get("GEMINI_API_KEY")
if not api_key:
raise ValueError(
"GEMINI_API_KEY not found. Set it in ~/.zshrc or pass via --api-key"
)
# Initialize client
client = genai.Client(api_key=api_key)
# Build contents (image first if editing, then prompt)
contents = []
if input_image:
img = Image.open(input_image)
# Convert RGBA to RGB if needed
if img.mode == "RGBA":
background = Image.new("RGB", img.size, (255, 255, 255))
background.paste(img, mask=img.split()[3])
img = background
contents.append(img)
# Auto-detect resolution for editing if not specified
if resolution == "1K":
resolution = get_auto_resolution(input_image)
print(f"Auto-detected resolution: {resolution}")
contents.append(prompt)
# Build image config
image_config_kwargs = {"image_size": RESOLUTIONS[resolution]}
if aspect_ratio:
image_config_kwargs["aspect_ratio"] = aspect_ratio
# Generate with resolution config
print(f"Generating at {resolution} resolution...")
response = client.models.generate_content(
model="gemini-3-pro-image-preview",
contents=contents,
config=types.GenerateContentConfig(
response_modalities=["IMAGE", "TEXT"],
image_config=types.ImageConfig(**image_config_kwargs),
),
)
# Save output with timestamp filename
OUTPUT_DIR.mkdir(exist_ok=True)
timestamp = datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
# Clean filename (remove extension if present, we'll add .png)
clean_name = Path(filename).stem
output_filename = f"{timestamp}-{clean_name}.png"
output_path = OUTPUT_DIR / output_filename
# Extract and save image from response
for part in response.candidates[0].content.parts:
if hasattr(part, "inline_data") and part.inline_data:
img = Image.open(BytesIO(part.inline_data.data))
# Convert to RGB if needed
if img.mode == "RGBA":
background = Image.new("RGB", img.size, (255, 255, 255))
background.paste(img, mask=img.split()[3])
img = background
img.save(output_path, "PNG")
return str(output_path)
raise RuntimeError("No image data in response")
def main():
parser = argparse.ArgumentParser(
description="Generate images with Gemini 3 Pro Image API",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
Examples:
# Draft (fast, cheap)
uv run generate_image.py -p "Account ERD diagram" -f "account-erd.png"
# Production (4K)
uv run generate_image.py -p "Account ERD diagram" -f "account-erd.png" -r 4K
# Edit existing image
uv run generate_image.py -p "Add legend" -i prev.png -f "updated.png"
# With aspect ratio
uv run generate_image.py -p "Dashboard mockup" -f "dash.png" -a "16:9"
""",
)
parser.add_argument(
"-p", "--prompt",
required=True,
help="Image description or editing instruction",
)
parser.add_argument(
"-f", "--filename",
required=True,
help="Output filename (timestamp auto-prepended)",
)
parser.add_argument(
"-r", "--resolution",
choices=["1K", "2K", "4K"],
default="1K",
help="Output resolution (default: 1K for drafts)",
)
parser.add_argument(
"-i", "--input-image",
help="Path to existing image for editing",
)
parser.add_argument(
"-k", "--api-key",
help="Gemini API key (defaults to GEMINI_API_KEY env var)",
)
parser.add_argument(
"-a", "--aspect-ratio",
help="Aspect ratio (e.g., '16:9', '1:1', '4:3')",
)
parser.add_argument(
"--no-open",
action="store_true",
help="Don't auto-open the image in Preview after generation",
)
args = parser.parse_args()
try:
output_path = generate_image(
prompt=args.prompt,
filename=args.filename,
resolution=args.resolution,
input_image=args.input_image,
api_key=args.api_key,
aspect_ratio=args.aspect_ratio,
)
print(f"✅ Saved: {output_path}")
# Auto-open in macOS Preview unless --no-open is specified
if not args.no_open:
subprocess.run(["open", output_path], check=False)
print(f" 📸 Opened in Preview")
else:
print(f" Open with: open {output_path}")
except Exception as e:
print(f"❌ Error: {e}")
sys.exit(1)
if __name__ == "__main__":
main()

View File

@ -1,3 +0,0 @@
# Credits & Acknowledgments
This skill is built on established Salesforce OAuth and identity platform patterns, incorporating security best practices and architectural guidance from the Salesforce platform ecosystem.

View File

@ -23,21 +23,21 @@ This skill helps you create and manage:
### Create a Connected App
```
```text
Use the integration-connectivity-connected-app-configure skill to create a Connected App named "MyIntegration"
with API and RefreshToken scopes for server-to-server integration.
```
### Create an External Client App
```
```text
Use the integration-connectivity-connected-app-configure skill to create an External Client App named
"MobileApp" for a mobile application with PKCE enabled.
```
### Review Existing Apps
```
```text
Use the integration-connectivity-connected-app-configure skill to review and score my existing Connected Apps
for security best practices.
```
@ -70,7 +70,7 @@ for security best practices.
## Directory Structure
```
```text
integration-connectivity-connected-app-configure/
├── skills/
│ └── integration-connectivity-connected-app-configure/
@ -96,4 +96,3 @@ integration-connectivity-connected-app-configure/
## Dependencies
- **platform-metadata-deploy**: For deploying apps to orgs
- **sf-metadata**: For creating related metadata (Named Credentials)

View File

@ -85,7 +85,7 @@ Read the appropriate template before generating — do not build from scratch:
| `assets/eca-policies.xml` | ECA configurable policies |
If you need source-controlled ECA OAuth security metadata, retrieve it from an org first and treat the retrieved file as the schema source of truth:
```
```sh
sf project retrieve start --metadata ExtlClntAppOauthSecuritySettings:<AppName> --target-org <alias>
```
@ -172,7 +172,7 @@ When finishing, confirm and report in this order:
5. **Next deployment / testing step**
Suggested output shape:
```
```text
App: <name>
Type: Connected App | External Client App
Flow: <oauth flow>

View File

@ -6,7 +6,7 @@ Real-world examples of using the integration-connectivity-connected-app-configur
## Example 1: Create a Basic API Integration Connected App
**Request**:
```
```text
Use the integration-connectivity-connected-app-configure skill to create a Connected App named "DataSyncIntegration"
for syncing data with our external ERP system. It needs API access and refresh tokens.
Contact email: admin@company.com
@ -42,7 +42,7 @@ Contact email: admin@company.com
## Example 2: Create a JWT Bearer App for CI/CD
**Request**:
```
```text
Create a Connected App for our CI/CD pipeline using JWT Bearer flow.
Name it "GitHubActionsDeployment" and use certificate "GH_Actions_Cert".
```
@ -77,7 +77,7 @@ Name it "GitHubActionsDeployment" and use certificate "GH_Actions_Cert".
## Example 3: Create a Mobile App with External Client App
**Request**:
```
```text
Create an External Client App for our mobile app "FieldServiceMobile".
It needs PKCE enabled, refresh tokens, and should be packageable for distribution.
```
@ -134,7 +134,7 @@ sf project retrieve start \
## Example 4: Review Existing Connected Apps
**Request**:
```
```text
Review and score my existing Connected Apps for security best practices.
```
@ -145,7 +145,7 @@ Review and score my existing Connected Apps for security best practices.
4. Generate report
**Sample Report**:
```
```text
📊 CONNECTED APP SECURITY REVIEW
════════════════════════════════════════════════════════════════
@ -180,7 +180,7 @@ LegacyERPConnector:
## Example 5: Migrate Connected App to External Client App
**Request**:
```
```text
Migrate our "SalesPortal" Connected App to an External Client App for better security.
```
@ -191,7 +191,7 @@ Migrate our "SalesPortal" Connected App to an External Client App for better sec
4. Provide migration checklist
**Output**:
```
```text
📦 MIGRATION PLAN: SalesPortal → External Client App
════════════════════════════════════════════════════════════════

View File

@ -72,7 +72,7 @@ List all systems using each Connected App:
#### 2.2 Plan Credential Rollover
```
```text
Timeline Example:
Week 1: Create ECA, deploy to DevHub
Week 2: Update integration systems with new credentials

View File

@ -7,7 +7,7 @@ Detailed OAuth flow patterns, configuration examples, and implementation guidanc
## Flow Selection Decision Tree
```
```text
START
├─ Do you have a backend server?

Some files were not shown because too many files have changed in this diff Show More