@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
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# UI Compatibility — Data Governance Policy Builder
|
|
2
|
+
|
|
3
|
+
The Data Governance Policy Builder edits a **strict subset** of the MDAPI. Anything outside that subset must be maintained via MDAPI/Tooling for the policy's lifetime — admins cannot open it in the builder without silent data loss or a hard crash.
|
|
4
|
+
|
|
5
|
+
> **Default goal**: produce UI-compatible policies. Only fall back to API-only after asking the operator and getting explicit confirmation.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## What the UI Can Render
|
|
10
|
+
|
|
11
|
+
**Categories** : `GOVERNANCE_POLICY_RULE_DEFINITION`, `RECORD_POLICY_RULE_DEFINITION`, `TRANSFORM_POLICY_RULE_DEFINITION`
|
|
12
|
+
**Categories NOT handled** : `ACCESS_POLICY_RULE_DEFINITION` (UI forces to GOVERNANCE on save), `IDENTIFIED_RECORD_POLICY_RULE_DEFINITION`
|
|
13
|
+
|
|
14
|
+
**Effects** : `Permit`, `Forbid` (UI label "Deny"), `Transform`
|
|
15
|
+
|
|
16
|
+
**Actions** : `Read`, `TupleRead` — two real choices for OLS/FLS rules.
|
|
17
|
+
- `Read`: evaluates conditions against the resource itself
|
|
18
|
+
- `TupleRead`: cascade rewriter — expands object-level condition to also cover `resource.object.*` for fields. Use when the intent is "objects matching X AND all their fields"
|
|
19
|
+
- Multiple `<action>` entries: only the first is kept on save
|
|
20
|
+
|
|
21
|
+
**`<ruleConsumer>`** : only `DATACLOUD` (hardcoded on save)
|
|
22
|
+
**`<principalScopeType>`** : only `ANY` (hardcoded on save)
|
|
23
|
+
**`<resourceScopeType>`** : `ANY`, `RECORD`, `FIELD`, `DATASPACE`, `SPAN`
|
|
24
|
+
**`<principalAuthenticationLevel>`** : `INTERNAL`, `AUTHENTICATED`, `UNIDENTIFIED`. `IDENTIFIED` not exposed.
|
|
25
|
+
**`<replicated>`** : read but NOT editable. Once `true`, UI forces read-only mode.
|
|
26
|
+
**`<transformPrecedence>`** : not exposed; non-zero values dropped.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Conditions — Supported Shapes
|
|
31
|
+
|
|
32
|
+
**Top-level conjunction**: only `<whenPolicyRuleDefinitionClauseConjunction>`. The UI forces `<unlessPolicyRuleDefinitionClauseConjunction>` to `null` on save.
|
|
33
|
+
|
|
34
|
+
**Conjunction expression**: the UI builds `(AND …)` of up to four sections dispatched by path type. A pure flat `(OR 1 2)` at the top level triggers `// ERROR: Unsupported rule!` — rule silently dropped. `OR` only round-trips inside a single section's group.
|
|
35
|
+
|
|
36
|
+
**Path types per UI section:**
|
|
37
|
+
|
|
38
|
+
| UI Section | Recognized path |
|
|
39
|
+
|------------|-----------------|
|
|
40
|
+
| Users (Permission) | `principalPath = ASSIGNED_PERMISSIONS_PATH` |
|
|
41
|
+
| Resource entity-type | `resourcePath = ENTITYTYPE` with `IS` operator |
|
|
42
|
+
| Data space | `resourcePath = DATASPACE` or `contextPath = SESSION_DATASPACE` |
|
|
43
|
+
| Tag / Classification | `resourcePath = TAG` or `CLASSIFICATION` |
|
|
44
|
+
| RLS rule criteria | `resourcePath = RECORDFIELD` or `EXPRESSION` |
|
|
45
|
+
|
|
46
|
+
Any other path type → condition silently ignored when UI rebuilds the rule.
|
|
47
|
+
|
|
48
|
+
**Operators per path**:
|
|
49
|
+
- Tag/Classification: `CONTAINS_ANY`, `CONTAINS_NONE`. (`CONTAINS_ALL` exists in schema but not offered in dropdowns)
|
|
50
|
+
- Permission: `CONTAINS_ANY` (Permit) / `CONTAINS_NONE` (Forbid/Transform)
|
|
51
|
+
- RLS `RECORDFIELD`: `EQUALS`, `NOT_EQUALS`, `LIKE`, `LESS_THAN(_OR_EQUALS)`, `GREATER_THAN(_OR_EQUAL)`, `HIERARCHICALLY_ABOVE` (DLO/DMO only). **Not editable**: `HIERARCHICALLY_BELOW`, `IN`, `CONTAINS_ALL`
|
|
52
|
+
- RLS join (`EXPRESSION`): `EXISTS` only
|
|
53
|
+
|
|
54
|
+
**`<policyRuleValueSet>` reference types** : `CUSTOM_TAG`, `STANDARD_TAG`, `CUSTOM_CLASSIFICATION`, `STANDARD_CLASSIFICATION`, `CUSTOM_PERMISSION`. **Not editable**: `HIERARCHY`, `DATASPACE`.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Implicit Defaults Injected by the UI on Save
|
|
59
|
+
|
|
60
|
+
When the UI saves, it auto-injects these — if your hand-authored XML omits them or uses different values, the first UI save rewrites them:
|
|
61
|
+
|
|
62
|
+
| Field | UI default |
|
|
63
|
+
|-------|-----------|
|
|
64
|
+
| `principalAuthenticationLevel` | `INTERNAL` |
|
|
65
|
+
| `principalScopeType` | `ANY` |
|
|
66
|
+
| `ruleConsumer` | `DATACLOUD` |
|
|
67
|
+
| `unlessPolicyRuleDefinitionClauseConjunction` | `null` (always) |
|
|
68
|
+
| `actions` | only first action kept |
|
|
69
|
+
| `policyRuleResourceDomains` | only first `<resourceDomain>` kept |
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## The Non-Round-Trip Checklist
|
|
74
|
+
|
|
75
|
+
The policy will **not** round-trip through the UI without data loss or silent failure if **any** of the following is true:
|
|
76
|
+
|
|
77
|
+
- [ ] `category` is `ACCESS_POLICY_RULE_DEFINITION` or `IDENTIFIED_RECORD_POLICY_RULE_DEFINITION`
|
|
78
|
+
- [ ] `ruleConsumer` ≠ `DATACLOUD`
|
|
79
|
+
- [ ] More than one `<action>`, or action is not `Read` / `TupleRead`
|
|
80
|
+
- [ ] **No top-level `resourcePath=ENTITYTYPE` discriminator group** for ACCESS/GOVERNANCE rules — this causes a **hard crash** (`Cannot use 'in' operator to search for 'Permit' in undefined`), not a graceful degradation. A `TupleRead` rule without the OR-of-ENTITYTYPE clause still deploys and works at runtime — the crash is UI-only.
|
|
81
|
+
- [ ] **Bare top-level condition index** in `<conjunctionExpression>` (e.g. `3` instead of `(AND 3)`) — causes crash in `buildCriteria` (`param.params.map(...)` = `undefined.map()`)
|
|
82
|
+
- [ ] More than one `<resourceDomain>`
|
|
83
|
+
- [ ] An `<unlessPolicyRuleDefinitionClauseConjunction>` block present
|
|
84
|
+
- [ ] Any `<conditions>` uses `<clause>UNLESS</clause>`
|
|
85
|
+
- [ ] `<conjunctionExpression>` uses top-level `OR` (e.g. `(OR 1 2)`)
|
|
86
|
+
- [ ] `<principalPath>` other than `ASSIGNED_PERMISSIONS_PATH` (user ID etc. may appear only inside SOQL `${User.X}` substitutions)
|
|
87
|
+
- [ ] `<resourcePath>` other than `TAG`, `CLASSIFICATION`, `DATASPACE`, `RECORDFIELD`, `EXPRESSION`, `ENTITYTYPE`
|
|
88
|
+
- [ ] `<valuePrincipalPath>` is not one of `USER_ID`, `USER_ROLE_ID`, `ORGANIZATION_ID`, `SCALAR_ATTRIBUTE`, `PLURAL_ATTRIBUTE` (with `${User.X}` expression)
|
|
89
|
+
- [ ] `<contextPath>` other than `SESSION_DATASPACE`
|
|
90
|
+
- [ ] Operator is `HIERARCHICALLY_BELOW`, `IN`, or `CONTAINS_ALL`
|
|
91
|
+
- [ ] `<valueReferenceType>` is `HIERARCHY` or `DATASPACE`
|
|
92
|
+
- [ ] `<valueString>` is typed JSON other than `{"t":"Text","v":"FIELD"|"RECORD"|"OBJECT"}` or `{"t":"Boolean","v":…}` with a UI-recognized boolean field
|
|
93
|
+
- [ ] `<resourceTransform>` not in the masking-category mapped set
|
|
94
|
+
- [ ] `<resourceExpression>` ARGLIST has multiple arguments
|
|
95
|
+
- [ ] `<replicated>true</replicated>` in an org with replication frozen
|
|
96
|
+
|
|
97
|
+
If **none** of the above is true, the policy is **UI-compatible**.
|
|
98
|
+
|
|
99
|
+
> **Important**: The UI shows NO banner when it drops unsupported pieces on save (`// ERROR: Unsupported rule!` comment, no surfaced message). Operator-confirmation is the only line of defense.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Operator-Confirmation Protocol
|
|
104
|
+
|
|
105
|
+
Whenever a request would produce a UI-incompatible policy:
|
|
106
|
+
|
|
107
|
+
1. **Try to make it UI-compatible first.** Mechanical rewrites:
|
|
108
|
+
- `unless` → `when` with negated operator:
|
|
109
|
+
| Intent | UI-compatible rewrite |
|
|
110
|
+
|--------|----------------------|
|
|
111
|
+
| `unless principal has permission X` | `WHEN ASSIGNED_PERMISSIONS_PATH CONTAINS_NONE X` |
|
|
112
|
+
| `unless resource has tag X` | `WHEN TAG CONTAINS_NONE X` |
|
|
113
|
+
| `unless record field = value` | `WHEN RECORDFIELD NOT_EQUALS value` |
|
|
114
|
+
- Top-level `OR` between two tags → nest inside a tag/classification section group
|
|
115
|
+
- Multiple `<action>` → split into multiple rules
|
|
116
|
+
|
|
117
|
+
2. **If a UI-compatible rewrite is not possible**, tell the operator:
|
|
118
|
+
- Which traits make it incompatible (cite items from the checklist above)
|
|
119
|
+
- That the Data Governance Policy Builder will silently drop unsupported pieces on save with no warning
|
|
120
|
+
- That maintenance must happen through MDAPI/Tooling for the policy's lifetime
|
|
121
|
+
|
|
122
|
+
3. **Wait for explicit confirmation.** Do not write the file until confirmed.
|
|
123
|
+
|
|
124
|
+
4. **On confirmation**, add an in-source marker to `<description>` (or a comment above the rule): `# API-only: not editable in Data Governance Policy Builder. Reasons: <bullets>`. Also set `<builderCompatible>false</builderCompatible>` on the parent set.
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## UI-Compatibility Matrix for Templates
|
|
129
|
+
|
|
130
|
+
| Template | UI-compatible? | Notes |
|
|
131
|
+
|----------|----------------|-------|
|
|
132
|
+
| Bare permit, no conditions | Partial | Single `<action>Read</action>` only; `ruleConsumer=DATACLOUD`. UI maps ACCESS → Governance on load. |
|
|
133
|
+
| Tag / Classification / Permission gate | Yes | `CONTAINS_ANY` / `CONTAINS_NONE` only. Tag refs must resolve in org. |
|
|
134
|
+
| Basic RLS (RECORDFIELD = user attribute) | Yes | `USER_ID` / `ORGANIZATION_ID` / `USER_ROLE_ID` round-trips. |
|
|
135
|
+
| TupleRead with OR-of-ENTITYTYPE | Yes | The canonical UI-compatible OLS/FLS shape. |
|
|
136
|
+
| IDENTIFIED_RECORD | Not MDAPI-authorable | Must be a runtime RuleProvider. |
|
|
137
|
+
| RLS via PROJECTION join | Yes | Single PROJECTION editable. |
|
|
138
|
+
| Scalar/plural SOQL principal | Out of MDAPI contract | `SCALAR_ATTRIBUTE`/`PLURAL_ATTRIBUTE` not in `RulePrincipalPathType`. Fixture-only. |
|
|
139
|
+
| TRANSFORM with permission + classification | Yes | Use masking-category-mapped transforms only. |
|
|
140
|
+
| `(AND 1 2)` multi-condition | Yes (if each section is one of the four UI buckets) | |
|
|
141
|
+
| Top-level `(OR 1 2)` | No | Triggers unsupported-rule path; silently dropped. |
|
|
142
|
+
| Hierarchy traversal | No | `HIERARCHICALLY_BELOW` and `HIERARCHY` not in UI dropdowns. Always API-only. |
|
|
@@ -21,7 +21,7 @@ This guide documents field coverage validation rules for SOQL queries — ensuri
|
|
|
21
21
|
|
|
22
22
|
When you query an sObject, only the fields in the SELECT clause are populated. Accessing any other field results in a runtime error:
|
|
23
23
|
|
|
24
|
-
```
|
|
24
|
+
```text
|
|
25
25
|
System.SObjectException: SObject row was retrieved via SOQL without querying the requested field: Account.Industry
|
|
26
26
|
```
|
|
27
27
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""
|
|
3
|
-
Post-Tool Validation Hook for
|
|
3
|
+
Post-Tool Validation Hook for platform-soql-query skill.
|
|
4
4
|
|
|
5
5
|
This hook runs AFTER Write or Edit tool completes and provides validation
|
|
6
6
|
feedback for SOQL files (*.soql).
|
|
@@ -23,8 +23,8 @@ import json
|
|
|
23
23
|
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
24
24
|
sys.path.insert(0, SCRIPT_DIR)
|
|
25
25
|
|
|
26
|
-
# Find shared modules (../../shared relative to
|
|
27
|
-
PLUGIN_ROOT = os.path.dirname(os.path.dirname(SCRIPT_DIR)) #
|
|
26
|
+
# Find shared modules (../../shared relative to platform-soql-query)
|
|
27
|
+
PLUGIN_ROOT = os.path.dirname(os.path.dirname(SCRIPT_DIR)) # platform-soql-query/
|
|
28
28
|
SKILLS_ROOT = os.path.dirname(PLUGIN_ROOT) # sf-skills/
|
|
29
29
|
SHARED_DIR = os.path.join(SKILLS_ROOT, "shared")
|
|
30
30
|
sys.path.insert(0, SHARED_DIR)
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# Credits & Acknowledgments
|
|
2
|
-
|
|
3
|
-
This skill is part of the `*-datacloud` family. Shared attribution, upstream source mapping, and maintenance notes live in:
|
|
4
|
-
- [../data360-orchestrate/CREDITS.md](../data360-orchestrate/CREDITS.md)
|
|
5
|
-
- [../data360-orchestrate/UPSTREAM.md](../data360-orchestrate/UPSTREAM.md)
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# Credits & Acknowledgments
|
|
2
|
-
|
|
3
|
-
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:
|
|
4
|
-
- [../data360-orchestrate/CREDITS.md](../data360-orchestrate/CREDITS.md)
|
|
5
|
-
- [../data360-orchestrate/UPSTREAM.md](../data360-orchestrate/UPSTREAM.md)
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# Credits & Acknowledgments
|
|
2
|
-
|
|
3
|
-
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.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
This family intentionally:
|
|
8
|
-
- keeps sf-skills naming consistency (`*-datacloud`)
|
|
9
|
-
- keeps the external CLI plugin outside this repo
|
|
10
|
-
- favors deterministic helper scripts and reusable JSON templates
|
|
11
|
-
- rewrites examples into generic sf-skills-style guidance rather than copying workshop-specific payloads
|
|
12
|
-
|
|
13
|
-
See [UPSTREAM.md](UPSTREAM.md) for the maintenance contract.
|
|
14
|
-
|
|
15
|
-
---
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# Upstream Distillation Map for data360-orchestrate
|
|
2
|
-
|
|
3
|
-
This file exists to make downstream maintenance easy without sacrificing sf-skills consistency.
|
|
4
|
-
|
|
5
|
-
## Maintenance contract
|
|
6
|
-
|
|
7
|
-
When upstream changes, do **not** copy blindly.
|
|
8
|
-
|
|
9
|
-
Instead:
|
|
10
|
-
1. review new upstream commits
|
|
11
|
-
2. identify changed command behaviors, install patterns, or gotchas
|
|
12
|
-
3. update sf-skills prompts and templates in a distilled form
|
|
13
|
-
4. keep naming, attribution, and cross-skill boundaries consistent with sf-skills
|
|
14
|
-
5. update this file with the new reviewed commit SHAs
|
|
15
|
-
|
|
16
|
-
## High-priority upstream areas to re-check
|
|
17
|
-
|
|
18
|
-
- installation / linking workflow for the community plugin
|
|
19
|
-
- command counts and topic coverage
|
|
20
|
-
- API-version guidance
|
|
21
|
-
- known issues and bug-fix notes
|
|
22
|
-
- live-tested command set
|
|
23
|
-
- any new commands affecting Connect / Prepare / Harmonize / Segment / Act / Retrieve boundaries
|
|
24
|
-
- connector-specific payload examples worth distilling into generic repo-safe examples
|
|
25
|
-
- search-index / hybrid-search guidance and any command-surface changes around hybrid scoring or prefilter behavior
|
|
26
|
-
- Ingestion API schema-upload flow, send-data examples, and problem-record guidance
|
|
27
|
-
- unstructured-source setup differences between connection-level reruns, stream refreshes, and initial UI seeding
|
|
28
|
-
- UI-only gaps where upstream introduces browser automation; validate before importing
|
|
29
|
-
|
|
30
|
-
## Cross-skill boundary reminders
|
|
31
|
-
|
|
32
|
-
Keep Data Cloud product work in `*-datacloud`, but do not blur into:
|
|
33
|
-
- `agentforce-observe` for STDM/session tracing/parquet workflows
|
|
34
|
-
- `platform-soql-query` for CRM SOQL-only tasks
|
|
35
|
-
- `platform-data-manage` for CRM record seeding/cleanup
|
|
36
|
-
- `platform-*-generate` skills for CRM schema creation (custom objects, fields, validation rules, etc.)
|
|
37
|
-
|
|
38
|
-
## Local helper files in this family
|
|
39
|
-
|
|
40
|
-
- `references/plugin-setup.md`
|
|
41
|
-
- `scripts/bootstrap-plugin.sh`
|
|
42
|
-
- `scripts/verify-plugin.sh`
|
|
43
|
-
- `assets/definitions/`
|
|
44
|
-
|
|
45
|
-
These are sf-skills-owned conveniences and should evolve independently from upstream when that improves user experience.
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# Credits & Acknowledgments
|
|
2
|
-
|
|
3
|
-
Primary contributor: **Gnanasekaran Thoppae**
|
|
4
|
-
|
|
5
|
-
This skill is part of the `*-datacloud` family. Shared attribution, upstream source mapping, and maintenance notes live in:
|
|
6
|
-
- [../data360-orchestrate/CREDITS.md](../data360-orchestrate/CREDITS.md)
|
|
7
|
-
- [../data360-orchestrate/UPSTREAM.md](../data360-orchestrate/UPSTREAM.md)
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# Credits & Acknowledgments
|
|
2
|
-
|
|
3
|
-
Primary contributor: **Gnanasekaran Thoppae**
|
|
4
|
-
|
|
5
|
-
This skill is part of the `*-datacloud` family. Shared attribution, upstream source mapping, and maintenance notes live in:
|
|
6
|
-
- [../data360-orchestrate/CREDITS.md](../data360-orchestrate/CREDITS.md)
|
|
7
|
-
- [../data360-orchestrate/UPSTREAM.md](../data360-orchestrate/UPSTREAM.md)
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
# Credits & Acknowledgments
|
|
2
|
-
|
|
3
|
-
This skill was built upon established patterns in technical diagramming and Salesforce data modeling. The following concepts and conventions shaped its design.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Diagramming Concepts
|
|
8
|
-
|
|
9
|
-
### Text-Based Diagramming
|
|
10
|
-
The skill uses Mermaid as its primary diagramming syntax, covering Entity Relationship Diagrams, sequence diagrams, and flowcharts. Key capabilities include:
|
|
11
|
-
|
|
12
|
-
- Entity Relationship Diagram syntax
|
|
13
|
-
- Sequence diagram patterns
|
|
14
|
-
- Flowchart and state diagram support
|
|
15
|
-
- Live rendering through Mermaid-capable renderers
|
|
16
|
-
|
|
17
|
-
An alternative syntax, PlantUML, informed the UML diagram patterns used in sequence and class diagrams.
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## Salesforce Domain Patterns
|
|
22
|
-
|
|
23
|
-
### Data Modeling Conventions
|
|
24
|
-
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.
|
|
25
|
-
|
|
26
|
-
### Integration Architecture
|
|
27
|
-
Integration sequence diagrams draw on widely-adopted API documentation patterns adapted for Salesforce's authentication and integration architecture.
|
|
28
|
-
|
|
29
|
-
### Schema Reference
|
|
30
|
-
Object and field relationship information reflects standard Salesforce object reference conventions and relationship type definitions.
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## Key Concepts
|
|
35
|
-
|
|
36
|
-
### ERD Notation
|
|
37
|
-
The Entity Relationship Diagram conventions follow standard database modeling patterns adapted for Salesforce relationships (Master-Detail, Lookup, External).
|
|
38
|
-
|
|
39
|
-
### Sequence Diagram Patterns
|
|
40
|
-
OAuth flow and integration sequence diagrams follow UML 2.0 standards with Salesforce-specific adaptations.
|
|
41
|
-
|
|
42
|
-
### Mermaid in Documentation
|
|
43
|
-
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.
|
|
44
|
-
|
|
45
|
-
### Color Accessibility
|
|
46
|
-
The color palette follows accessibility guidelines for color-blind-friendly design, using a pastel fill with high-contrast stroke approach.
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
# Credits & Acknowledgments
|
|
2
|
-
|
|
3
|
-
This skill leverages cutting-edge AI technologies and tools to enable visual content generation in Salesforce development workflows.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Technologies & Tools
|
|
8
|
-
|
|
9
|
-
### Google Gemini
|
|
10
|
-
|
|
11
|
-
Key capabilities:
|
|
12
|
-
- Gemini 3 Pro multimodal AI model
|
|
13
|
-
- Image generation via Nano Banana Pro extension
|
|
14
|
-
- Code review and analysis capabilities
|
|
15
|
-
- Documentation research and summarization
|
|
16
|
-
|
|
17
|
-
### Gemini CLI
|
|
18
|
-
|
|
19
|
-
Key features:
|
|
20
|
-
- Command-line access to Gemini models
|
|
21
|
-
- Extension support (Nano Banana)
|
|
22
|
-
- Non-interactive mode with --yolo flag
|
|
23
|
-
- JSON output for programmatic use
|
|
24
|
-
|
|
25
|
-
### Nano Banana Pro
|
|
26
|
-
|
|
27
|
-
Gemini image generation extension.
|
|
28
|
-
|
|
29
|
-
Key features:
|
|
30
|
-
- High-quality image generation
|
|
31
|
-
- ERD and diagram creation
|
|
32
|
-
- UI/UX mockup generation
|
|
33
|
-
- Architecture visualization
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## Display Technologies
|
|
38
|
-
|
|
39
|
-
### timg
|
|
40
|
-
|
|
41
|
-
Terminal image viewer.
|
|
42
|
-
|
|
43
|
-
Key features:
|
|
44
|
-
- Kitty graphics protocol support
|
|
45
|
-
- Multiple format support (PNG, JPG, GIF)
|
|
46
|
-
- Inline terminal display
|
|
47
|
-
|
|
48
|
-
### Kitty Graphics Protocol
|
|
49
|
-
|
|
50
|
-
High-fidelity image rendering protocol for modern terminals.
|
|
51
|
-
|
|
52
|
-
Key features:
|
|
53
|
-
- High-fidelity image display in terminals
|
|
54
|
-
- Supported by Ghostty, Kitty, WezTerm
|
|
55
|
-
- Enables visual content in CLI workflows
|
|
56
|
-
|
|
57
|
-
### Ghostty Terminal
|
|
58
|
-
|
|
59
|
-
Modern GPU-accelerated terminal emulator.
|
|
60
|
-
|
|
61
|
-
Key features:
|
|
62
|
-
- Kitty graphics protocol support
|
|
63
|
-
- Cross-platform (macOS, Linux)
|
|
64
|
-
- High performance rendering
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## Salesforce Resources
|
|
69
|
-
|
|
70
|
-
### Salesforce Lightning Design System (SLDS)
|
|
71
|
-
|
|
72
|
-
- Design patterns for LWC mockups
|
|
73
|
-
- Color palettes and typography
|
|
74
|
-
- Component specifications
|
|
75
|
-
|
|
76
|
-
### Salesforce Developers Platform
|
|
77
|
-
|
|
78
|
-
- API documentation
|
|
79
|
-
- Best practices guides
|
|
80
|
-
- Platform architecture references
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
# external-diagram-visual-generate
|
|
2
|
-
|
|
3
|
-
AI-powered visual content generation for Salesforce development. Generate ERD diagrams, LWC mockups, and architecture visuals using Gemini 3 Pro Image (Nano Banana Pro).
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- **Visual ERD Generation**: Create actual rendered ERD diagrams (not just Mermaid code)
|
|
8
|
-
- **LWC/UI Mockups**: Generate wireframes and component mockups following SLDS
|
|
9
|
-
- **Gemini Code Review**: Parallel code review while Claude continues working
|
|
10
|
-
- **Documentation Research**: Parallel Salesforce documentation research via Gemini
|
|
11
|
-
|
|
12
|
-
## Prerequisites
|
|
13
|
-
|
|
14
|
-
**IMPORTANT**: Run the prerequisites check before using this skill:
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
scripts/check-prerequisites.sh
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
| Requirement | Description | How to Install |
|
|
21
|
-
|-------------|-------------|----------------|
|
|
22
|
-
| **Ghostty Terminal** | Required for Kitty graphics protocol | Download from the Ghostty website |
|
|
23
|
-
| **GEMINI_API_KEY** | Personal API key for Nano Banana Pro | Generate via Google AI Studio |
|
|
24
|
-
| **Gemini CLI** | Command-line interface for Gemini | `npm install -g @google/gemini-cli` |
|
|
25
|
-
| **Nano Banana Extension** | Image generation extension | `gemini extensions install nanobanana` |
|
|
26
|
-
| **timg** | Terminal image viewer with Kitty support | `brew install timg` |
|
|
27
|
-
|
|
28
|
-
## Quick Start
|
|
29
|
-
|
|
30
|
-
### 1. Set up your API key
|
|
31
|
-
|
|
32
|
-
Add to `~/.zshrc`:
|
|
33
|
-
```bash
|
|
34
|
-
export GEMINI_API_KEY="your-personal-api-key"
|
|
35
|
-
export NANOBANANA_MODEL=gemini-3-pro-image-preview
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
### 2. Invoke the skill
|
|
39
|
-
|
|
40
|
-
```
|
|
41
|
-
Skill: external-diagram-visual-generate
|
|
42
|
-
Request: "Generate an ERD diagram showing Account, Contact, and Opportunity relationships"
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### 3. View the result
|
|
46
|
-
|
|
47
|
-
Images are displayed inline using Kitty graphics protocol (Ghostty) or via Claude's multimodal vision using the Read tool.
|
|
48
|
-
|
|
49
|
-
## Use Cases
|
|
50
|
-
|
|
51
|
-
| Use Case | Example Request |
|
|
52
|
-
|----------|-----------------|
|
|
53
|
-
| ERD Diagrams | "Generate a visual ERD for Account, Contact, Opportunity" |
|
|
54
|
-
| LWC Mockups | "Create a mockup for an Account list datatable component" |
|
|
55
|
-
| Code Review | "Get Gemini's review of this Apex trigger" |
|
|
56
|
-
| Doc Research | "Research the Flow best practices in Salesforce docs" |
|
|
57
|
-
|
|
58
|
-
## Cross-Skill Integration
|
|
59
|
-
|
|
60
|
-
| Related Skill | When to Use |
|
|
61
|
-
|---------------|-------------|
|
|
62
|
-
| external-diagram-mermaid-generate | Convert Mermaid to visual rendering |
|
|
63
|
-
| platform-custom-object-generate | Query object/field data before generating ERDs |
|
|
64
|
-
| experience-lwc-generate | Generate mockups for LWC components |
|
|
65
|
-
| platform-apex-generate | Review Apex code via Gemini sub-agent |
|
|
66
|
-
|
|
67
|
-
## Documentation
|
|
68
|
-
|
|
69
|
-
- [Gemini CLI Setup](references/gemini-cli-setup.md)
|
|
70
|
-
|
|
71
|
-
## Security Notes
|
|
72
|
-
|
|
73
|
-
**NEVER commit your GEMINI_API_KEY to version control**
|
|
74
|
-
|
|
75
|
-
- Store API key in `~/.zshrc` only (not in project files)
|
|
76
|
-
- The key is personal and tied to your Google account billing
|
|
77
|
-
|
|
78
|
-
## Requirements
|
|
79
|
-
|
|
80
|
-
- Ghostty terminal (for Kitty graphics)
|
|
81
|
-
- Gemini CLI with Nano Banana extension
|
|
82
|
-
- GEMINI_API_KEY environment variable
|
|
83
|
-
- timg (for terminal image display)
|