@salesforce/afv-skills 1.29.0 → 1.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/package.json +1 -1
- package/skills/agentforce-architecture-analyze/README.md +2 -8
- package/skills/agentforce-architecture-analyze/SKILL.md +2 -2
- package/skills/agentforce-architecture-analyze/references/contract.json +4 -4
- package/skills/agentforce-architecture-analyze/references/soql_fields.md +1 -1
- package/skills/data360-activate/README.md +0 -1
- package/skills/data360-activate/SKILL.md +0 -2
- package/skills/data360-connect/README.md +0 -2
- package/skills/data360-connect/SKILL.md +0 -2
- package/skills/data360-harmonize/SKILL.md +0 -1
- package/skills/data360-orchestrate/README.md +0 -7
- package/skills/data360-orchestrate/SKILL.md +0 -2
- package/skills/data360-prepare/README.md +0 -1
- package/skills/data360-prepare/SKILL.md +0 -1
- package/skills/data360-query/README.md +0 -1
- package/skills/data360-query/SKILL.md +0 -1
- package/skills/data360-segment/README.md +0 -1
- package/skills/data360-segment/SKILL.md +0 -2
- package/skills/experience-cms-brand-apply/SKILL.md +47 -16
- package/skills/experience-lwc-generate/README.md +3 -2
- package/skills/experience-lwc-generate/references/async-notification-patterns.md +1 -1
- package/skills/experience-lwc-generate/references/component-patterns.md +3 -3
- package/skills/experience-lwc-generate/references/flow-integration-guide.md +1 -1
- package/skills/experience-lwc-generate/references/lwc-best-practices.md +4 -4
- package/skills/experience-lwc-generate/references/scoring-and-testing.md +1 -1
- package/skills/experience-lwc-generate/references/state-management.md +2 -2
- package/skills/experience-lwc-generate/references/triangle-pattern.md +3 -3
- package/skills/experience-lwc-generate/scripts/post-tool-validate.py +2 -2
- package/skills/experience-lwc-generate/scripts/template_validator.py +1 -1
- package/skills/external-diagram-mermaid-generate/README.md +2 -2
- package/skills/external-diagram-mermaid-generate/SKILL.md +1 -3
- package/skills/external-diagram-mermaid-generate/assets/agentforce/agent-flow.md +4 -4
- package/skills/external-diagram-mermaid-generate/assets/architecture/system-landscape.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/datamodel/b2b-commerce-erd.md +3 -3
- package/skills/external-diagram-mermaid-generate/assets/datamodel/campaigns-erd.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/datamodel/consent-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/files-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/forecasting-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/fsl-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/party-model-erd.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/datamodel/quote-order-erd.md +3 -3
- package/skills/external-diagram-mermaid-generate/assets/datamodel/revenue-cloud-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/sales-cloud-erd.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/datamodel/salesforce-erd.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/datamodel/scheduler-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/service-cloud-erd.md +3 -3
- package/skills/external-diagram-mermaid-generate/assets/datamodel/territory-management-erd.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/integration/api-sequence.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/oauth/authorization-code-pkce.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/oauth/authorization-code.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/oauth/client-credentials.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/oauth/device-authorization.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/oauth/jwt-bearer.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/oauth/refresh-token.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/oauth/user-agent-social-sign-on.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/role-hierarchy/user-hierarchy.md +1 -1
- package/skills/external-diagram-mermaid-generate/references/color-palette.md +13 -13
- package/skills/external-diagram-mermaid-generate/references/diagram-conventions.md +5 -5
- package/skills/external-diagram-mermaid-generate/references/erd-conventions.md +1 -1
- package/skills/external-diagram-mermaid-generate/references/mermaid-styling.md +2 -2
- package/skills/external-diagram-mermaid-generate/references/preview-guide.md +1 -1
- package/skills/external-diagram-mermaid-generate/references/usage-examples.md +9 -9
- package/skills/external-diagram-mermaid-generate/scripts/README.md +1 -1
- package/skills/integration-connectivity-connected-app-configure/README.md +4 -5
- package/skills/integration-connectivity-connected-app-configure/SKILL.md +2 -2
- package/skills/integration-connectivity-connected-app-configure/references/example-usage.md +7 -7
- package/skills/integration-connectivity-connected-app-configure/references/migration-guide.md +1 -1
- package/skills/integration-connectivity-connected-app-configure/references/oauth-flows-reference.md +1 -1
- package/skills/integration-connectivity-connected-app-configure/references/testing-validation-guide.md +3 -3
- package/skills/integration-connectivity-generate/README.md +1 -1
- package/skills/integration-connectivity-generate/SKILL.md +6 -0
- package/skills/integration-connectivity-generate/assets/callouts/rest-queueable-callout.cls +1 -1
- package/skills/integration-connectivity-generate/assets/external-services/external-service-operations.md +1 -1
- package/skills/integration-connectivity-generate/assets/soap/wsdl2apex-guide.md +1 -1
- package/skills/integration-connectivity-generate/references/callout-patterns.md +4 -0
- package/skills/integration-connectivity-generate/references/cdc-guide.md +2 -2
- package/skills/integration-connectivity-generate/references/event-driven-architecture-guide.md +5 -5
- package/skills/integration-connectivity-generate/references/event-patterns.md +3 -2
- package/skills/integration-connectivity-generate/references/external-services-guide.md +4 -1
- package/skills/integration-connectivity-generate/references/messaging-api-v2.md +2 -2
- package/skills/integration-connectivity-generate/references/named-credentials-automation.md +1 -1
- package/skills/integration-connectivity-generate/references/named-credentials-guide.md +12 -2
- package/skills/integration-connectivity-generate/references/platform-events-guide.md +3 -3
- package/skills/integration-connectivity-generate/references/rest-callout-patterns.md +1 -1
- package/skills/integration-connectivity-generate/references/scoring-rubric.md +1 -1
- package/skills/integration-connectivity-generate/references/security-best-practices.md +5 -2
- package/skills/integration-connectivity-generate/scripts/configure-named-credential.sh +16 -5
- package/skills/integration-connectivity-generate/scripts/set-api-credential.sh +11 -2
- package/skills/integration-connectivity-generate/scripts/suggest_credential_setup.py +4 -3
- package/skills/integration-connectivity-generate/scripts/validate_integration.py +1 -1
- package/skills/omnistudio-callable-apex-generate/README.md +1 -5
- package/skills/omnistudio-callable-apex-generate/SKILL.md +14 -4
- package/skills/omnistudio-callable-apex-generate/assets/pattern_callable_vanilla.cls +8 -1
- package/skills/omnistudio-callable-apex-generate/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +1 -1
- package/skills/omnistudio-callable-apex-generate/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +1 -1
- package/skills/omnistudio-datamapper-generate/SKILL.md +1 -1
- package/skills/omnistudio-datamapper-generate/assets/completion-summary-template.md +2 -2
- package/skills/omnistudio-datamapper-generate/references/best-practices.md +9 -9
- package/skills/omnistudio-datamapper-generate/references/naming-conventions.md +6 -6
- package/skills/omnistudio-datapacks-deploy/README.md +1 -1
- package/skills/omnistudio-datapacks-deploy/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +1 -1
- package/skills/omnistudio-dependencies-analyze/SKILL.md +12 -5
- package/skills/omnistudio-dependencies-analyze/references/dependency-patterns.md +9 -9
- package/skills/omnistudio-dependencies-analyze/references/namespace-guide.md +1 -1
- package/skills/omnistudio-epc-catalog-generate/README.md +1 -1
- package/skills/omnistudio-flexcard-generate/SKILL.md +11 -4
- package/skills/omnistudio-flexcard-generate/references/best-practices.md +6 -6
- package/skills/omnistudio-flexcard-generate/references/data-binding-guide.md +9 -9
- package/skills/omnistudio-integration-procedure-generate/SKILL.md +9 -1
- package/skills/omnistudio-integration-procedure-generate/references/element-types.md +3 -3
- package/skills/omnistudio-omniscript-generate/SKILL.md +2 -2
- package/skills/omnistudio-omniscript-generate/references/best-practices.md +1 -1
- package/skills/omnistudio-omniscript-generate/scripts/check-duplicate-omniscript.sh +8 -0
- package/skills/omnistudio-omniscript-generate/scripts/deploy-omniscript.sh +8 -0
- package/skills/platform-apex-logs-debug/README.md +2 -2
- package/skills/platform-apex-logs-debug/references/cli-commands.md +2 -2
- package/skills/platform-apex-logs-debug/references/debug-log-reference.md +16 -16
- package/skills/platform-apex-logs-debug/references/log-analysis-tools.md +2 -2
- package/skills/platform-apex-test-run/README.md +1 -1
- package/skills/platform-apex-test-run/references/test-fix-loop.md +2 -2
- package/skills/platform-apex-test-run/references/testing-best-practices.md +3 -3
- package/skills/platform-data-manage/README.md +4 -4
- package/skills/platform-data-manage/references/bulk-testing-example.md +1 -1
- package/skills/platform-data-manage/references/crud-workflow-example.md +2 -2
- package/skills/platform-data-manage/references/orchestration.md +6 -6
- package/skills/platform-flexipage-generate/SKILL.md +281 -346
- package/skills/platform-flexipage-generate/references/cli_commands.md +39 -0
- package/skills/platform-flexipage-generate/references/flexipage_fieldSection.md +162 -0
- package/skills/platform-flexipage-generate/references/flexipage_richText.md +84 -0
- package/skills/platform-flexipage-generate/references/identifiers_and_regions.md +167 -0
- package/skills/platform-flexipage-generate/references/mcp_action_examples.md +104 -0
- package/skills/platform-flexipage-generate/references/record_flexipage_dynamicHighlights.md +119 -0
- package/skills/platform-flexipage-generate/references/xml_rules.md +335 -0
- package/skills/platform-flexipage-generate/scripts/resolve-component-instructions.sh +42 -0
- package/skills/platform-flexipage-generate/scripts/scan-lwc-components.sh +113 -0
- package/skills/platform-metadata-deploy/README.md +2 -2
- package/skills/platform-metadata-deploy/references/agent-deployment-guide.md +2 -2
- package/skills/platform-metadata-deploy/references/deployment-workflows.md +16 -16
- package/skills/platform-metadata-deploy/references/orchestration.md +3 -3
- package/skills/platform-metadata-deploy/references/trigger-deployment-safety.md +2 -2
- package/skills/platform-models-api-configure/SKILL.md +140 -0
- package/skills/platform-models-api-configure/scripts/get-orgjwt.sh +48 -0
- package/skills/platform-policy-rule-generate/SKILL.md +260 -0
- package/skills/platform-policy-rule-generate/references/deploy-errors.md +54 -0
- package/skills/platform-policy-rule-generate/references/fixtures-index.md +29 -0
- package/skills/platform-policy-rule-generate/references/policy-schema-full.md +250 -0
- package/skills/platform-policy-rule-generate/references/templates-access.md +132 -0
- package/skills/platform-policy-rule-generate/references/templates-advanced.md +58 -0
- package/skills/platform-policy-rule-generate/references/templates-record.md +75 -0
- package/skills/platform-policy-rule-generate/references/templates-transform.md +70 -0
- package/skills/platform-policy-rule-generate/references/templates.md +10 -0
- package/skills/platform-policy-rule-generate/references/ui-compatibility.md +142 -0
- package/skills/platform-soql-query/README.md +1 -1
- package/skills/platform-soql-query/SKILL.md +1 -1
- package/skills/platform-soql-query/references/anti-patterns.md +1 -1
- package/skills/platform-soql-query/references/field-coverage-rules.md +1 -1
- package/skills/platform-soql-query/references/query-optimization.md +1 -1
- package/skills/platform-soql-query/scripts/post-tool-validate.py +3 -3
- package/skills/data360-activate/CREDITS.md +0 -5
- package/skills/data360-connect/CREDITS.md +0 -5
- package/skills/data360-harmonize/CREDITS.md +0 -3
- package/skills/data360-orchestrate/CREDITS.md +0 -15
- package/skills/data360-orchestrate/UPSTREAM.md +0 -45
- package/skills/data360-prepare/CREDITS.md +0 -7
- package/skills/data360-query/CREDITS.md +0 -7
- package/skills/data360-segment/CREDITS.md +0 -3
- package/skills/experience-lwc-generate/CREDITS.md +0 -5
- package/skills/external-diagram-mermaid-generate/CREDITS.md +0 -46
- package/skills/external-diagram-visual-generate/CREDITS.md +0 -80
- package/skills/external-diagram-visual-generate/README.md +0 -83
- package/skills/external-diagram-visual-generate/SKILL.md +0 -207
- package/skills/external-diagram-visual-generate/assets/architecture/integration-flow.md +0 -55
- package/skills/external-diagram-visual-generate/assets/erd/core-objects.md +0 -131
- package/skills/external-diagram-visual-generate/assets/erd/custom-objects.md +0 -60
- package/skills/external-diagram-visual-generate/assets/lwc/dashboard-card.md +0 -45
- package/skills/external-diagram-visual-generate/assets/lwc/data-table.md +0 -57
- package/skills/external-diagram-visual-generate/assets/lwc/record-form.md +0 -60
- package/skills/external-diagram-visual-generate/assets/review/apex-review.md +0 -57
- package/skills/external-diagram-visual-generate/assets/review/lwc-review.md +0 -48
- package/skills/external-diagram-visual-generate/references/architect-aesthetic-guide.md +0 -257
- package/skills/external-diagram-visual-generate/references/examples-index.md +0 -35
- package/skills/external-diagram-visual-generate/references/gemini-cli-setup.md +0 -65
- package/skills/external-diagram-visual-generate/references/interview-questions.md +0 -529
- package/skills/external-diagram-visual-generate/references/iteration-workflow.md +0 -173
- package/skills/external-diagram-visual-generate/scripts/check-prerequisites.sh +0 -101
- package/skills/external-diagram-visual-generate/scripts/generate_image.py +0 -243
- package/skills/integration-connectivity-connected-app-configure/CREDITS.md +0 -3
- package/skills/integration-connectivity-generate/CREDITS.md +0 -5
- package/skills/omnistudio-callable-apex-generate/CREDITS.md +0 -9
- package/skills/omnistudio-datamapper-generate/CREDITS.md +0 -5
- package/skills/omnistudio-datapacks-deploy/CREDITS.md +0 -5
- package/skills/omnistudio-dependencies-analyze/CREDITS.md +0 -5
- package/skills/omnistudio-epc-catalog-generate/CREDITS.md +0 -14
- package/skills/omnistudio-flexcard-generate/CREDITS.md +0 -5
- package/skills/omnistudio-integration-procedure-generate/CREDITS.md +0 -5
- package/skills/omnistudio-omniscript-generate/CREDITS.md +0 -5
- package/skills/platform-apex-generate/CREDITS.md +0 -5
- package/skills/platform-apex-logs-debug/CREDITS.md +0 -22
- package/skills/platform-apex-test-generate/CREDITS.md +0 -5
- package/skills/platform-apex-test-run/CREDITS.md +0 -22
- package/skills/platform-data-manage/CREDITS.md +0 -5
- package/skills/platform-metadata-deploy/CREDITS.md +0 -25
- package/skills/platform-soql-query/CREDITS.md +0 -21
- /package/skills/omnistudio-callable-apex-generate/examples/Test_VlocityOpenInterfaceConversion/{MyCustomVlocityOpenInterface2.cls → MyCustomClass.cls} +0 -0
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# check-prerequisites.sh - Verify external-diagram-visual-generate requirements before use
|
|
3
|
-
# Returns 0 if all required checks pass, 1 if any required fail
|
|
4
|
-
|
|
5
|
-
RED='\033[0;31m'
|
|
6
|
-
GREEN='\033[0;32m'
|
|
7
|
-
YELLOW='\033[1;33m'
|
|
8
|
-
BLUE='\033[0;34m'
|
|
9
|
-
GRAY='\033[0;90m'
|
|
10
|
-
NC='\033[0m'
|
|
11
|
-
|
|
12
|
-
ERRORS=0
|
|
13
|
-
WARNINGS=0
|
|
14
|
-
|
|
15
|
-
echo ""
|
|
16
|
-
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
17
|
-
echo -e "${BLUE} 📸 SF-IMAGEN PREREQUISITES CHECK${NC}"
|
|
18
|
-
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
19
|
-
echo ""
|
|
20
|
-
echo -e "${GRAY} REQUIRED:${NC}"
|
|
21
|
-
|
|
22
|
-
# Check 1: macOS (required for Preview app)
|
|
23
|
-
echo -n " Checking macOS (for Preview app)... "
|
|
24
|
-
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
25
|
-
echo -e "${GREEN}✓ macOS detected${NC}"
|
|
26
|
-
else
|
|
27
|
-
echo -e "${RED}✗ Not macOS${NC}"
|
|
28
|
-
echo -e " ${YELLOW}→ external-diagram-visual-generate uses macOS Preview app for image display${NC}"
|
|
29
|
-
echo -e " ${YELLOW}→ Current OS: $OSTYPE${NC}"
|
|
30
|
-
ERRORS=$((ERRORS + 1))
|
|
31
|
-
fi
|
|
32
|
-
|
|
33
|
-
# Check 2: Gemini API Key
|
|
34
|
-
echo -n " Checking GEMINI_API_KEY... "
|
|
35
|
-
if [[ -n "$GEMINI_API_KEY" ]]; then
|
|
36
|
-
# Mask the key for display
|
|
37
|
-
MASKED_KEY="${GEMINI_API_KEY:0:10}...${GEMINI_API_KEY: -4}"
|
|
38
|
-
echo -e "${GREEN}✓ Set ($MASKED_KEY)${NC}"
|
|
39
|
-
else
|
|
40
|
-
echo -e "${RED}✗ Not set${NC}"
|
|
41
|
-
echo -e " ${YELLOW}→ Nano Banana Pro requires a personal API key${NC}"
|
|
42
|
-
echo -e " ${YELLOW}→ Get one at: https://aistudio.google.com/apikey${NC}"
|
|
43
|
-
echo -e " ${YELLOW}→ Add to ~/.zshrc: export GEMINI_API_KEY=\"your-key\"${NC}"
|
|
44
|
-
ERRORS=$((ERRORS + 1))
|
|
45
|
-
fi
|
|
46
|
-
|
|
47
|
-
# Check 3: Gemini CLI
|
|
48
|
-
echo -n " Checking Gemini CLI... "
|
|
49
|
-
if command -v gemini &> /dev/null; then
|
|
50
|
-
GEMINI_VERSION=$(gemini --version 2>/dev/null | head -1 || echo "installed")
|
|
51
|
-
echo -e "${GREEN}✓ $GEMINI_VERSION${NC}"
|
|
52
|
-
else
|
|
53
|
-
echo -e "${RED}✗ Not installed${NC}"
|
|
54
|
-
echo -e " ${YELLOW}→ Install: npm install -g @google/gemini-cli${NC}"
|
|
55
|
-
ERRORS=$((ERRORS + 1))
|
|
56
|
-
fi
|
|
57
|
-
|
|
58
|
-
# Check 4: Nano Banana Extension
|
|
59
|
-
echo -n " Checking Nano Banana extension... "
|
|
60
|
-
if gemini extensions list 2>/dev/null | grep -q "nanobanana"; then
|
|
61
|
-
echo -e "${GREEN}✓ Installed${NC}"
|
|
62
|
-
else
|
|
63
|
-
echo -e "${RED}✗ Not installed${NC}"
|
|
64
|
-
echo -e " ${YELLOW}→ Install: gemini extensions install nanobanana${NC}"
|
|
65
|
-
ERRORS=$((ERRORS + 1))
|
|
66
|
-
fi
|
|
67
|
-
|
|
68
|
-
echo ""
|
|
69
|
-
echo -e "${GRAY} OPTIONAL (for 4K/editing via Python script):${NC}"
|
|
70
|
-
|
|
71
|
-
# Check 5: uv (optional, for Python script)
|
|
72
|
-
echo -n " Checking uv (Python runner)... "
|
|
73
|
-
if command -v uv &> /dev/null; then
|
|
74
|
-
UV_VERSION=$(uv --version 2>&1 | head -1)
|
|
75
|
-
echo -e "${GREEN}✓ $UV_VERSION${NC}"
|
|
76
|
-
else
|
|
77
|
-
echo -e "${YELLOW}○ Not installed (optional)${NC}"
|
|
78
|
-
echo -e " ${GRAY}→ For 4K resolution/editing: curl -LsSf https://astral.sh/uv/install.sh | sh${NC}"
|
|
79
|
-
WARNINGS=$((WARNINGS + 1))
|
|
80
|
-
fi
|
|
81
|
-
|
|
82
|
-
echo ""
|
|
83
|
-
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
84
|
-
|
|
85
|
-
if [[ $ERRORS -eq 0 ]]; then
|
|
86
|
-
if [[ $WARNINGS -gt 0 ]]; then
|
|
87
|
-
echo -e " ${GREEN}✅ All required prerequisites met!${NC}"
|
|
88
|
-
echo -e " ${YELLOW}⚠️ $WARNINGS optional feature(s) unavailable${NC}"
|
|
89
|
-
else
|
|
90
|
-
echo -e " ${GREEN}✅ All prerequisites met! external-diagram-visual-generate is ready to use.${NC}"
|
|
91
|
-
fi
|
|
92
|
-
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
93
|
-
echo ""
|
|
94
|
-
exit 0
|
|
95
|
-
else
|
|
96
|
-
echo -e " ${RED}❌ $ERRORS required prerequisite(s) missing.${NC}"
|
|
97
|
-
echo -e " ${RED} Please fix before using external-diagram-visual-generate.${NC}"
|
|
98
|
-
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
99
|
-
echo ""
|
|
100
|
-
exit 1
|
|
101
|
-
fi
|
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# /// script
|
|
3
|
-
# requires-python = ">=3.10"
|
|
4
|
-
# dependencies = ["google-genai>=1.0.0", "pillow>=10.0.0"]
|
|
5
|
-
# ///
|
|
6
|
-
"""
|
|
7
|
-
Direct Gemini API image generation with resolution control.
|
|
8
|
-
|
|
9
|
-
This script complements the CLI extension for power features:
|
|
10
|
-
- Resolution control: 1K (draft), 2K (medium), 4K (production)
|
|
11
|
-
- Image editing: Modify existing images with natural language
|
|
12
|
-
- Timestamp filenames: Automatic versioning for iteration tracking
|
|
13
|
-
|
|
14
|
-
Usage:
|
|
15
|
-
# Generate new image at 1K (draft)
|
|
16
|
-
uv run scripts/generate_image.py -p "Salesforce ERD diagram..." -f "account-erd.png"
|
|
17
|
-
|
|
18
|
-
# Generate at 4K (production)
|
|
19
|
-
uv run scripts/generate_image.py -p "Salesforce ERD diagram..." -f "account-erd.png" -r 4K
|
|
20
|
-
|
|
21
|
-
# Edit existing image
|
|
22
|
-
uv run scripts/generate_image.py -p "Add a legend in bottom right" -i input.png -f "output.png"
|
|
23
|
-
|
|
24
|
-
Workflow: Draft → Iterate → Final
|
|
25
|
-
1. Generate at 1K for quick feedback (~3s)
|
|
26
|
-
2. Refine prompt until layout/content is correct
|
|
27
|
-
3. Generate final at 4K for production quality (~10s)
|
|
28
|
-
|
|
29
|
-
License: MIT
|
|
30
|
-
"""
|
|
31
|
-
|
|
32
|
-
import argparse
|
|
33
|
-
import os
|
|
34
|
-
import subprocess
|
|
35
|
-
import sys
|
|
36
|
-
from datetime import datetime
|
|
37
|
-
from io import BytesIO
|
|
38
|
-
from pathlib import Path
|
|
39
|
-
|
|
40
|
-
try:
|
|
41
|
-
from google import genai
|
|
42
|
-
from google.genai import types
|
|
43
|
-
from PIL import Image
|
|
44
|
-
except ImportError as e:
|
|
45
|
-
print(f"Error: Missing dependency - {e}")
|
|
46
|
-
print("Run with: uv run scripts/generate_image.py ...")
|
|
47
|
-
sys.exit(1)
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
# Resolution mapping (uppercase K required by API!)
|
|
51
|
-
RESOLUTIONS = {
|
|
52
|
-
"1K": "1K", # ~1024px - drafts, fast iteration
|
|
53
|
-
"2K": "2K", # ~2048px - medium quality
|
|
54
|
-
"4K": "4K", # ~4096px - production quality
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
# Default output directory (matches CLI extension)
|
|
58
|
-
OUTPUT_DIR = Path.home() / "nanobanana-output"
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
def get_auto_resolution(image_path: str) -> str:
|
|
62
|
-
"""Auto-detect resolution based on input image dimensions."""
|
|
63
|
-
try:
|
|
64
|
-
with Image.open(image_path) as img:
|
|
65
|
-
max_dim = max(img.width, img.height)
|
|
66
|
-
if max_dim < 1500:
|
|
67
|
-
return "1K"
|
|
68
|
-
elif max_dim < 3000:
|
|
69
|
-
return "2K"
|
|
70
|
-
else:
|
|
71
|
-
return "4K"
|
|
72
|
-
except Exception:
|
|
73
|
-
return "1K"
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
def generate_image(
|
|
77
|
-
prompt: str,
|
|
78
|
-
filename: str,
|
|
79
|
-
resolution: str = "1K",
|
|
80
|
-
input_image: str | None = None,
|
|
81
|
-
api_key: str | None = None,
|
|
82
|
-
aspect_ratio: str | None = None,
|
|
83
|
-
) -> str:
|
|
84
|
-
"""Generate or edit an image using Gemini 3 Pro Image API.
|
|
85
|
-
|
|
86
|
-
Args:
|
|
87
|
-
prompt: Text description for generation or editing instruction
|
|
88
|
-
filename: Output filename (timestamp will be prepended)
|
|
89
|
-
resolution: Output resolution - 1K, 2K, or 4K (uppercase required!)
|
|
90
|
-
input_image: Path to existing image for editing (optional)
|
|
91
|
-
api_key: Gemini API key (falls back to GEMINI_API_KEY env var)
|
|
92
|
-
aspect_ratio: Aspect ratio like "16:9", "1:1", "4:3" (optional)
|
|
93
|
-
|
|
94
|
-
Returns:
|
|
95
|
-
Path to saved image file
|
|
96
|
-
"""
|
|
97
|
-
# Get API key
|
|
98
|
-
api_key = api_key or os.environ.get("GEMINI_API_KEY")
|
|
99
|
-
if not api_key:
|
|
100
|
-
raise ValueError(
|
|
101
|
-
"GEMINI_API_KEY not found. Set it in ~/.zshrc or pass via --api-key"
|
|
102
|
-
)
|
|
103
|
-
|
|
104
|
-
# Initialize client
|
|
105
|
-
client = genai.Client(api_key=api_key)
|
|
106
|
-
|
|
107
|
-
# Build contents (image first if editing, then prompt)
|
|
108
|
-
contents = []
|
|
109
|
-
if input_image:
|
|
110
|
-
img = Image.open(input_image)
|
|
111
|
-
# Convert RGBA to RGB if needed
|
|
112
|
-
if img.mode == "RGBA":
|
|
113
|
-
background = Image.new("RGB", img.size, (255, 255, 255))
|
|
114
|
-
background.paste(img, mask=img.split()[3])
|
|
115
|
-
img = background
|
|
116
|
-
contents.append(img)
|
|
117
|
-
|
|
118
|
-
# Auto-detect resolution for editing if not specified
|
|
119
|
-
if resolution == "1K":
|
|
120
|
-
resolution = get_auto_resolution(input_image)
|
|
121
|
-
print(f"Auto-detected resolution: {resolution}")
|
|
122
|
-
|
|
123
|
-
contents.append(prompt)
|
|
124
|
-
|
|
125
|
-
# Build image config
|
|
126
|
-
image_config_kwargs = {"image_size": RESOLUTIONS[resolution]}
|
|
127
|
-
if aspect_ratio:
|
|
128
|
-
image_config_kwargs["aspect_ratio"] = aspect_ratio
|
|
129
|
-
|
|
130
|
-
# Generate with resolution config
|
|
131
|
-
print(f"Generating at {resolution} resolution...")
|
|
132
|
-
response = client.models.generate_content(
|
|
133
|
-
model="gemini-3-pro-image-preview",
|
|
134
|
-
contents=contents,
|
|
135
|
-
config=types.GenerateContentConfig(
|
|
136
|
-
response_modalities=["IMAGE", "TEXT"],
|
|
137
|
-
image_config=types.ImageConfig(**image_config_kwargs),
|
|
138
|
-
),
|
|
139
|
-
)
|
|
140
|
-
|
|
141
|
-
# Save output with timestamp filename
|
|
142
|
-
OUTPUT_DIR.mkdir(exist_ok=True)
|
|
143
|
-
timestamp = datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
|
|
144
|
-
|
|
145
|
-
# Clean filename (remove extension if present, we'll add .png)
|
|
146
|
-
clean_name = Path(filename).stem
|
|
147
|
-
output_filename = f"{timestamp}-{clean_name}.png"
|
|
148
|
-
output_path = OUTPUT_DIR / output_filename
|
|
149
|
-
|
|
150
|
-
# Extract and save image from response
|
|
151
|
-
for part in response.candidates[0].content.parts:
|
|
152
|
-
if hasattr(part, "inline_data") and part.inline_data:
|
|
153
|
-
img = Image.open(BytesIO(part.inline_data.data))
|
|
154
|
-
# Convert to RGB if needed
|
|
155
|
-
if img.mode == "RGBA":
|
|
156
|
-
background = Image.new("RGB", img.size, (255, 255, 255))
|
|
157
|
-
background.paste(img, mask=img.split()[3])
|
|
158
|
-
img = background
|
|
159
|
-
img.save(output_path, "PNG")
|
|
160
|
-
return str(output_path)
|
|
161
|
-
|
|
162
|
-
raise RuntimeError("No image data in response")
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
def main():
|
|
166
|
-
parser = argparse.ArgumentParser(
|
|
167
|
-
description="Generate images with Gemini 3 Pro Image API",
|
|
168
|
-
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
169
|
-
epilog="""
|
|
170
|
-
Examples:
|
|
171
|
-
# Draft (fast, cheap)
|
|
172
|
-
uv run generate_image.py -p "Account ERD diagram" -f "account-erd.png"
|
|
173
|
-
|
|
174
|
-
# Production (4K)
|
|
175
|
-
uv run generate_image.py -p "Account ERD diagram" -f "account-erd.png" -r 4K
|
|
176
|
-
|
|
177
|
-
# Edit existing image
|
|
178
|
-
uv run generate_image.py -p "Add legend" -i prev.png -f "updated.png"
|
|
179
|
-
|
|
180
|
-
# With aspect ratio
|
|
181
|
-
uv run generate_image.py -p "Dashboard mockup" -f "dash.png" -a "16:9"
|
|
182
|
-
""",
|
|
183
|
-
)
|
|
184
|
-
parser.add_argument(
|
|
185
|
-
"-p", "--prompt",
|
|
186
|
-
required=True,
|
|
187
|
-
help="Image description or editing instruction",
|
|
188
|
-
)
|
|
189
|
-
parser.add_argument(
|
|
190
|
-
"-f", "--filename",
|
|
191
|
-
required=True,
|
|
192
|
-
help="Output filename (timestamp auto-prepended)",
|
|
193
|
-
)
|
|
194
|
-
parser.add_argument(
|
|
195
|
-
"-r", "--resolution",
|
|
196
|
-
choices=["1K", "2K", "4K"],
|
|
197
|
-
default="1K",
|
|
198
|
-
help="Output resolution (default: 1K for drafts)",
|
|
199
|
-
)
|
|
200
|
-
parser.add_argument(
|
|
201
|
-
"-i", "--input-image",
|
|
202
|
-
help="Path to existing image for editing",
|
|
203
|
-
)
|
|
204
|
-
parser.add_argument(
|
|
205
|
-
"-k", "--api-key",
|
|
206
|
-
help="Gemini API key (defaults to GEMINI_API_KEY env var)",
|
|
207
|
-
)
|
|
208
|
-
parser.add_argument(
|
|
209
|
-
"-a", "--aspect-ratio",
|
|
210
|
-
help="Aspect ratio (e.g., '16:9', '1:1', '4:3')",
|
|
211
|
-
)
|
|
212
|
-
parser.add_argument(
|
|
213
|
-
"--no-open",
|
|
214
|
-
action="store_true",
|
|
215
|
-
help="Don't auto-open the image in Preview after generation",
|
|
216
|
-
)
|
|
217
|
-
|
|
218
|
-
args = parser.parse_args()
|
|
219
|
-
|
|
220
|
-
try:
|
|
221
|
-
output_path = generate_image(
|
|
222
|
-
prompt=args.prompt,
|
|
223
|
-
filename=args.filename,
|
|
224
|
-
resolution=args.resolution,
|
|
225
|
-
input_image=args.input_image,
|
|
226
|
-
api_key=args.api_key,
|
|
227
|
-
aspect_ratio=args.aspect_ratio,
|
|
228
|
-
)
|
|
229
|
-
print(f"✅ Saved: {output_path}")
|
|
230
|
-
|
|
231
|
-
# Auto-open in macOS Preview unless --no-open is specified
|
|
232
|
-
if not args.no_open:
|
|
233
|
-
subprocess.run(["open", output_path], check=False)
|
|
234
|
-
print(f" 📸 Opened in Preview")
|
|
235
|
-
else:
|
|
236
|
-
print(f" Open with: open {output_path}")
|
|
237
|
-
except Exception as e:
|
|
238
|
-
print(f"❌ Error: {e}")
|
|
239
|
-
sys.exit(1)
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
if __name__ == "__main__":
|
|
243
|
-
main()
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# Credits
|
|
2
|
-
|
|
3
|
-
This skill draws on established Salesforce Industries patterns for callable Apex implementations,
|
|
4
|
-
including the `System.Callable` interface, `VlocityOpenInterface`, and `VlocityOpenInterface2`
|
|
5
|
-
extension points used in OmniStudio and Industries integrations.
|
|
6
|
-
|
|
7
|
-
The guidance, migration patterns, and bundled examples reflect best practices for secure,
|
|
8
|
-
deterministic callable implementations across Industries extension points such as OmniScripts,
|
|
9
|
-
Integration Procedures, and DataRaptors.
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# Credits & Acknowledgments
|
|
2
|
-
|
|
3
|
-
This skill was created from practical Salesforce Industries CME EPC implementation patterns and DataPack examples in this repository.
|
|
4
|
-
|
|
5
|
-
## Repository Example Sources
|
|
6
|
-
|
|
7
|
-
The example packs in this skill are curated, reusable sample payloads for documentation and template authoring.
|
|
8
|
-
|
|
9
|
-
- `assets/` (canonical EPC bundle template set)
|
|
10
|
-
- `assets/examples/samsung-galaxy-s22-bundle/` (bundle offer example)
|
|
11
|
-
- `assets/examples/business-internet-premium-fttc-simple-offer/` (simple offer example)
|
|
12
|
-
- `assets/examples/business-internet-pro-vpl-simple-offer/` (simple offer example)
|
|
13
|
-
- `assets/examples/static-ip-simple-offer/` (simple offer example)
|
|
14
|
-
- `examples/business-internet-plus-bundle/` (generated example with transcript)
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# Credits & Acknowledgments
|
|
2
|
-
|
|
3
|
-
This skill is built on Salesforce's official Apex debugging documentation and established Apex performance patterns. The benchmarking techniques, governor limit patterns, and optimization approaches incorporated here reflect current Apex development best practices.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Key Patterns
|
|
8
|
-
|
|
9
|
-
### Governor Limit Awareness
|
|
10
|
-
Governor limit values, debug log event types, and the Apex execution model are defined by the Salesforce platform and reflected in `references/debug-log-reference.md`.
|
|
11
|
-
|
|
12
|
-
### Debug Log Specifications
|
|
13
|
-
Log event specifications, log level definitions, and format documentation are based on official Apex debug log behavior and integrated into `references/debug-log-reference.md`.
|
|
14
|
-
|
|
15
|
-
### Benchmarking Patterns
|
|
16
|
-
String-building performance characteristics, loop iteration comparisons, and data structure lookup benchmarks reflect well-established Apex optimization techniques adapted into the reusable templates in this skill.
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## License
|
|
21
|
-
|
|
22
|
-
MIT licensed. See the LICENSE file for complete terms.
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# Credits & Acknowledgments
|
|
2
|
-
|
|
3
|
-
This skill integrates concepts and patterns from Salesforce documentation and the broader Salesforce developer community. The goal is to move beyond minimum coverage targets toward true unit testing with proper isolation, mocking, and disciplined test-fix workflows.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Key Patterns Integrated
|
|
8
|
-
|
|
9
|
-
| Pattern | Integration |
|
|
10
|
-
|---------|-------------|
|
|
11
|
-
| DML Mocking | `assets/dml-mock.cls` |
|
|
12
|
-
| Mocking vs Stubbing | `references/mocking-patterns.md` |
|
|
13
|
-
| Test Data Factory | `assets/test-data-factory.cls` |
|
|
14
|
-
| HttpCalloutMock | `assets/mock-callout-test.cls` |
|
|
15
|
-
| StubProvider | `assets/stub-provider-example.cls` |
|
|
16
|
-
| Performant Tests | `references/performance-optimization.md` |
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## Philosophy
|
|
21
|
-
|
|
22
|
-
This skill teaches Apex developers how to write fast, reliable, maintainable tests using vanilla Apex patterns — no external packages or libraries required. All patterns work in any Salesforce org out of the box.
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# Credits & Acknowledgments
|
|
2
|
-
|
|
3
|
-
This skill is built on established Salesforce DevOps practices, official platform tooling, and the collective knowledge embedded in Salesforce's documentation and developer ecosystem.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Key Concepts
|
|
8
|
-
|
|
9
|
-
### Two-Phase Deployment Pattern
|
|
10
|
-
The `--dry-run` validation before actual deployment is a community-established best practice to prevent production failures, widely promoted across official Salesforce documentation.
|
|
11
|
-
|
|
12
|
-
### Quick Deploy Strategy
|
|
13
|
-
The workflow of validating with tests, then using quick deploy for actual deployment, originates from Salesforce release management best practices.
|
|
14
|
-
|
|
15
|
-
### Test Level Recommendations
|
|
16
|
-
The guidance on appropriate test levels (RunLocalTests vs RunAllTests vs RunSpecifiedTests) comes from official Salesforce deployment documentation.
|
|
17
|
-
|
|
18
|
-
### Incremental Deployment Strategy
|
|
19
|
-
The recommendation for small, frequent deployments over large batches is a DevOps industry best practice adapted for Salesforce.
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Special Thanks
|
|
24
|
-
|
|
25
|
-
To the entire Salesforce DevOps community — release managers, architects, developers, and CI/CD engineers — for continuously improving deployment practices and making Salesforce deployments more reliable.
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# Credits & Acknowledgments
|
|
2
|
-
|
|
3
|
-
This skill integrates concepts and patterns from the Salesforce developer community and official Salesforce documentation. The goal is to teach Apex developers how to write efficient, maintainable SOQL using vanilla Apex patterns that don't require external package installation.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Key Patterns Integrated
|
|
8
|
-
|
|
9
|
-
| Pattern | Integration |
|
|
10
|
-
|---------|-------------|
|
|
11
|
-
| Selector Layer architecture | `references/selector-patterns.md` |
|
|
12
|
-
| Bulkification and Map-based lookup | `assets/bulkified-query-pattern.cls` |
|
|
13
|
-
| SOQL anti-patterns catalog | `references/anti-patterns.md` |
|
|
14
|
-
| Query Plan analysis | `SKILL.md`, `assets/optimization-patterns.soql` |
|
|
15
|
-
| Field coverage validation | `references/field-coverage-rules.md` |
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## Philosophy
|
|
20
|
-
|
|
21
|
-
This skill integrates **concepts and patterns** from community resources, not specific libraries as dependencies. All patterns produce vanilla Apex code that works in any Salesforce org without additional package installation.
|