@peernova/cuneiform-sf 1.0.2 → 1.0.4-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/LICENSE +81 -30
  2. package/README.md +59 -95
  3. package/messages/compatibility.check.md +71 -0
  4. package/messages/cuneiform.access.md +138 -0
  5. package/messages/definition.create.md +511 -0
  6. package/messages/definition.export.md +88 -0
  7. package/messages/definition.get.md +147 -0
  8. package/messages/definition.import.md +65 -0
  9. package/messages/definition.list.md +264 -0
  10. package/messages/definition.purge.md +318 -0
  11. package/messages/definition.update.md +80 -0
  12. package/messages/mcp.serve.md +66 -0
  13. package/messages/object.describe.md +201 -0
  14. package/messages/object.list.md +443 -0
  15. package/messages/org.details.md +386 -0
  16. package/messages/org.reset.md +71 -0
  17. package/messages/profile.md +231 -0
  18. package/messages/profile.request.cancel.md +143 -0
  19. package/messages/profile.request.delete.md +139 -0
  20. package/messages/profile.request.list.md +89 -0
  21. package/messages/summary.purge.md +218 -0
  22. package/messages/summary.reprofile.md +150 -0
  23. package/messages/summary.stop.md +157 -0
  24. package/messages/user.details.md +501 -0
  25. package/oclif.lock +3021 -2224
  26. package/oclif.manifest.json +2 -116
  27. package/package.json +84 -19
  28. package/lib/commands/cuneiform/about.d.ts +0 -13
  29. package/lib/commands/cuneiform/about.js +0 -26
  30. package/lib/commands/cuneiform/about.js.map +0 -1
  31. package/lib/commands/hello/world.d.ts +0 -14
  32. package/lib/commands/hello/world.js +0 -27
  33. package/lib/commands/hello/world.js.map +0 -1
  34. package/lib/index.d.ts +0 -2
  35. package/lib/index.js +0 -2
  36. package/lib/index.js.map +0 -1
  37. package/messages/cuneiform.about.md +0 -19
  38. package/messages/hello.world.md +0 -29
@@ -0,0 +1,318 @@
1
+ # summary
2
+
3
+ Delete profiling definitions that no longer represent current analysis intent — keeping the definition inventory focused on actively profiled objects.
4
+
5
+ # description
6
+
7
+ Profiling definitions accumulate over iterative scoping cycles: test definitions, exploration definitions, definitions for objects the team decided not to profile. This command removes them, leaving the inventory focused on current business intent.
8
+
9
+ Three selection modes: by specific definition key (`--keys`), by composable AND filters (object, pattern, method, category, status, namespace), or all definitions (`--all`). Before deletion, the command pre-categorizes every matched definition into two groups: deletable (no summaries) and blocked by summaries (must run `summary purge` first). A paginated preview table shows this categorization with a can-delete indicator per definition.
10
+
11
+ IMPORTANT: Definitions with existing summaries must have their summaries purged first. The full cleanup dependency order:
12
+
13
+ 1. `sf cuneiform profile request cancel` — cancel queued requests
14
+ 2. `sf cuneiform profile request delete` — remove canceled and rejected requests
15
+ 3. `sf cuneiform summary purge` — remove summaries (cascade-deletes completed requests; resets definition status)
16
+ 4. `sf cuneiform definition purge` — remove definitions (requires zero summaries)
17
+
18
+ THREE SELECTION MODES:
19
+
20
+ - **By key** (`--keys PD-0001,PD-0003`) — Delete specific definitions. Exclusive mode — all filter flags are ignored.
21
+ - **By filter** (`--objects Account --method metadata`) — Delete definitions matching ALL specified filters (AND logic). Combine --objects, --filter, --pattern, --method, --category, --status, and --namespace.
22
+ - **All** (`--all`) — Delete all eligible definitions. Can be combined with filters to narrow scope.
23
+
24
+ NATURAL LANGUAGE → FLAG MAPPING:
25
+ "delete the Account definition" → --keys PD-0001 (look up the key with `definition list`)
26
+ "remove all unused definitions" → --all --status "NOT PROFILED"
27
+ "clean up custom object definitions" → --all --filter custom
28
+ "delete metadata-only definitions" → --all --method metadata
29
+ "remove FSC definitions" → --all --namespace FinServ
30
+ "what would be deleted?" → --all --dry-run
31
+
32
+ COMMAND SEQUENCE: `summary purge` (remove summaries from blocked definitions) → `definition purge --dry-run` (preview) → `definition purge` (execute)
33
+
34
+ # flags.target-org.summary
35
+
36
+ Salesforce org to purge definitions from. The command validates Cuneiform installation and permissions before any deletions.
37
+
38
+ # flags.all.summary
39
+
40
+ Target all definitions for deletion. Combine with filter flags (--objects, --method, --status, etc.) to narrow scope. Definitions blocked by summaries are reported but not deleted — run `summary purge` for those first.
41
+
42
+ # flags.keys.summary
43
+
44
+ Delete specific definitions by key (e.g., --keys PD-0001,PD-0003). Exclusive mode — when --keys is specified, all other filter flags are ignored. Look up definition keys with `definition list`.
45
+
46
+ # flags.objects.summary
47
+
48
+ Filter definitions by target object API names (e.g., --objects Account,Contact). Limits deletion to definitions targeting the specified objects.
49
+
50
+ # flags.filter.summary
51
+
52
+ Filter definitions by object type: standard or custom. Targets definitions for one category of objects (e.g., --filter custom to clean up custom object definitions after scoping).
53
+
54
+ # flags.pattern.summary
55
+
56
+ Filter definitions by name pattern using SOQL LIKE wildcards (e.g., --pattern Account% matches definitions whose name starts with "Account"). Use % for multi-character wildcard and \_ for single-character wildcard.
57
+
58
+ # flags.method.summary
59
+
60
+ Filter definitions by profiling method: metadata, historical, or comparative (e.g., --method metadata to remove metadata-only definitions). Targets definitions of a specific analysis type.
61
+
62
+ # flags.category.summary
63
+
64
+ Filter definitions by category label (e.g., --category "Phase 1"). Removes definitions from a completed engagement phase or functional area.
65
+
66
+ # flags.status.summary
67
+
68
+ Filter definitions by profiling status: "NOT PROFILED", "IN PROGRESS", "COMPLETE", "COMPLETE w/ FAILURES", or "ERROR". Use --status "NOT PROFILED" to target definitions that were created but never executed.
69
+
70
+ # flags.namespace.summary
71
+
72
+ Filter definitions by the namespace prefix of their target object (e.g., --namespace FinServ for Financial Services Cloud, --namespace SBQQ for CPQ). Removes definitions for a managed package that is no longer in profiling scope.
73
+
74
+ # flags.limit.summary
75
+
76
+ Maximum number of definitions to process per batch (default: 50). Controls batch size for large deletion operations.
77
+
78
+ # flags.dry-run.summary
79
+
80
+ Preview what would be deleted without making changes. Shows the same two-category classification (deletable and blocked by summaries) as a real run. Use this first to verify scope and share the preview with stakeholders before committing.
81
+
82
+ # flags.format.summary
83
+
84
+ Output format: table (default, human-readable) or json (structured output for scripted pipelines).
85
+
86
+ # examples
87
+
88
+ - Preview what would be deleted and what is blocked by summaries:
89
+
90
+ <%= config.bin %> <%= command.id %> --target-org myOrg --all --dry-run
91
+
92
+ - Delete specific definitions by key (exclusive mode ignores all filters):
93
+
94
+ <%= config.bin %> <%= command.id %> --target-org myOrg --keys PD-0001,PD-0003
95
+
96
+ - Remove definitions that were never profiled after exploration:
97
+
98
+ <%= config.bin %> <%= command.id %> --target-org myOrg --all --status "NOT PROFILED"
99
+
100
+ - Clean up Financial Services Cloud definitions no longer in profiling scope:
101
+
102
+ <%= config.bin %> <%= command.id %> --target-org myOrg --all --namespace FinServ
103
+
104
+ - Remove metadata-only definitions after upgrading to comparative analysis:
105
+
106
+ <%= config.bin %> <%= command.id %> --target-org myOrg --all --method metadata
107
+
108
+ - Scripted scratch org reset with JSON output for CI verification:
109
+
110
+ <%= config.bin %> <%= command.id %> --target-org myOrg --all --no-prompt --format json
111
+
112
+ # errors.noSelectionCriteria
113
+
114
+ No selection criteria specified. Provide --all, --keys, or filter flags.
115
+
116
+ # errors.noEligibleDefinitions
117
+
118
+ No definitions found matching the specified criteria.
119
+
120
+ # errors.queryFailed
121
+
122
+ Failed to query definitions: %s
123
+
124
+ # errors.deleteFailed
125
+
126
+ Failed to delete definitions: %s
127
+
128
+ # errors.noTargetOrg
129
+
130
+ Could not determine target org username.
131
+
132
+ # blockedBySummaries.header
133
+
134
+ Blocked by summaries — run `sf cuneiform summary purge` first:
135
+
136
+ # queued.header
137
+
138
+ Queued — these definitions have related requests in queue and cannot be deleted yet:
139
+
140
+ # flags.no-prompt.summary
141
+
142
+ Skip the confirmation prompt and delete immediately. Use for scripted execution in CI pipelines and automation workflows.
143
+
144
+ # prompt.confirm.singular
145
+
146
+ Delete this Profiling Definition
147
+
148
+ # prompt.confirm.plural
149
+
150
+ Delete these %s Profiling Definitions
151
+
152
+ # output.noDeletable
153
+
154
+ Purge cancelled — there are no Profiling Definitions that can be deleted.
155
+
156
+ # output.cancelled
157
+
158
+ Purge cancelled. No definitions were deleted.
159
+
160
+ # spinner.connecting
161
+
162
+ Connecting
163
+
164
+ # spinner.retrievingDefinitions
165
+
166
+ Retrieving Definitions
167
+
168
+ # spinner.deletingDefinitions
169
+
170
+ Deleting Definitions
171
+
172
+ # spinner.status.deleted
173
+
174
+ deleted
175
+
176
+ # spinner.status.skipped
177
+
178
+ skipped
179
+
180
+ # spinner.status.failed
181
+
182
+ failed
183
+
184
+ # spinner.status.queued
185
+
186
+ queued
187
+
188
+ # output.initializing
189
+
190
+ Initializing Profiling Definition Purging %s...
191
+
192
+ # output.initializing.dryRunMode
193
+
194
+ (dry run)
195
+
196
+ # output.definitionsFound.singular
197
+
198
+ %s definition found
199
+
200
+ # output.definitionsFound.plural
201
+
202
+ %s definitions found
203
+
204
+ # output.noEligible.message
205
+
206
+ No definitions were found matching the specified criteria.
207
+
208
+ # output.noEligible.guidance
209
+
210
+ - Please check your filters and confirm that definitions exist in your Salesforce org.
211
+
212
+ # output.summaryHeader
213
+
214
+ Summary
215
+
216
+ # output.summary.deleted
217
+
218
+ Deleted:
219
+
220
+ # output.summary.skipped
221
+
222
+ Skipped:
223
+
224
+ # output.summary.failed
225
+
226
+ Failed:
227
+
228
+ # output.summary.queued
229
+
230
+ Queued:
231
+
232
+ # output.summary.total
233
+
234
+ Total:
235
+
236
+ # reason.hasSummaries
237
+
238
+ Has Summaries
239
+
240
+ # reason.notFound
241
+
242
+ Not Found
243
+
244
+ # reason.lookupFailed
245
+
246
+ Lookup Failed
247
+
248
+ # reason.queuedKeyword
249
+
250
+ has related requests in queue
251
+
252
+ # table.header.key
253
+
254
+ Key
255
+
256
+ # table.header.object
257
+
258
+ Object
259
+
260
+ # table.header.category
261
+
262
+ Category
263
+
264
+ # table.header.timeCategory
265
+
266
+ Time Category
267
+
268
+ # table.header.segmentCategory
269
+
270
+ Segment Category
271
+
272
+ # table.header.status
273
+
274
+ Status
275
+
276
+ # table.header.deleted
277
+
278
+ Deleted?
279
+
280
+ # table.header.canDelete
281
+
282
+ Can Delete?
283
+
284
+ # preview.summary
285
+
286
+ %s to delete, %s blocked by summaries
287
+
288
+ # dryRun.banner.singular
289
+
290
+ [DRY RUN] Would delete %s definition. %s blocked by summaries.
291
+
292
+ # dryRun.banner.plural
293
+
294
+ [DRY RUN] Would delete %s definitions. %s blocked by summaries.
295
+
296
+ # table.column.key
297
+
298
+ KEY
299
+
300
+ # table.column.name
301
+
302
+ NAME
303
+
304
+ # table.column.object
305
+
306
+ OBJECT
307
+
308
+ # table.column.status
309
+
310
+ STATUS
311
+
312
+ # table.column.action
313
+
314
+ ACTION
315
+
316
+ # warnings.limitIgnoredWithAll
317
+
318
+ --limit is ignored when --all is specified. All eligible records will be processed.
@@ -0,0 +1,80 @@
1
+ # summary
2
+
3
+ Replace the field list on an existing profiling definition — preserving the definition's key, name, method, category, and profiling history while updating which fields get analyzed.
4
+
5
+ # description
6
+
7
+ A profiling definition specifies which fields on a Salesforce object will be analyzed during a profiling run. When a definition is first created, its field list captures a point-in-time snapshot of the object's schema. Schemas evolve — fields are added, deprecated, or reclassified — and the profiling scope needs to evolve with them.
8
+
9
+ This command replaces the field list on an existing definition. It takes a Salesforce record ID and one or more field API names, then writes the new selection to the definition record via the API. The definition's key, name, object binding, method, category, and profiling history are all preserved — only the field selection changes.
10
+
11
+ This is a full replacement operation — the new field list replaces the existing one entirely. Include all fields you want profiled, not just additions.
12
+
13
+ WHAT IT DOES:
14
+
15
+ - Replaces the definition's selected fields with the specified field API names
16
+ - Deduplicates field names (duplicates are removed, order is preserved)
17
+ - Validates the definition ID format (15 or 18 character Salesforce ID)
18
+ - Returns the updated field count
19
+ - Preserves definition identity: key, name, object, method, category, and profiling history remain intact
20
+
21
+ WHEN TO USE:
22
+
23
+ - After deploying new custom fields to a Salesforce object
24
+ - To narrow profiling scope to analytically significant fields after reviewing initial results
25
+ - To expand profiling scope when managed package upgrades add fields
26
+ - When synchronizing definition field lists with current object metadata in CI scripts
27
+
28
+ NATURAL LANGUAGE → FLAG MAPPING:
29
+ "update the field list for Account definition" → --id <definition-id> --fields Name --fields Email --fields Phone
30
+ "change which fields are profiled" → --id <definition-id> --fields <field1> --fields <field2>
31
+ "sync definition fields with metadata" → --id <definition-id> --fields <all-current-fields>
32
+ "narrow profiling to 10 fields" → --id <definition-id> --fields <field1> ... --fields <field10>
33
+
34
+ COMMAND SEQUENCE: `definition get` (retrieve current fields and definition ID) → `definition update` (replace field list) → `profile` (re-run profiling with updated scope)
35
+
36
+ # flags.target-org.summary
37
+
38
+ Salesforce org containing the definition to update. The command validates permissions before writing.
39
+
40
+ # flags.id.summary
41
+
42
+ Salesforce record ID (15 or 18 character) of the profiling definition to update. Retrieve definition IDs with `sf cuneiform definition get` or `sf cuneiform definition list`.
43
+
44
+ # flags.fields.summary
45
+
46
+ Field API names to set on the definition. Replaces the existing field list entirely — include all fields you want profiled, not just additions. Repeat the flag for each field (e.g., --fields Name --fields Email --fields Phone). Cross-object fields use dot notation (e.g., Account.Name). Duplicates are automatically removed while preserving order.
47
+
48
+ # flags.format.summary
49
+
50
+ Output format: table (human-readable, default) or json (structured output for scripting).
51
+
52
+ # examples
53
+
54
+ - Replace the field list on a definition after deploying new custom fields:
55
+
56
+ <%= config.bin %> <%= command.id %> --target-org myOrg --id a00000000000001AAA --fields Name --fields Email --fields Phone
57
+
58
+ - Narrow profiling scope to analytically significant fields:
59
+
60
+ <%= config.bin %> <%= command.id %> --target-org myOrg --id a00000000000001AAA --fields Amount --fields StageName --fields CloseDate --fields Probability
61
+
62
+ - Include cross-object lookup fields using dot notation:
63
+
64
+ <%= config.bin %> <%= command.id %> --target-org myOrg --id a00000000000001AAA --fields Name --fields Email --fields Phone --fields Account.Name
65
+
66
+ - Output update results as JSON for scripted bulk field refresh:
67
+
68
+ <%= config.bin %> <%= command.id %> --target-org myOrg --id a00000000000001AAA --fields Name --fields Email --json
69
+
70
+ # errors.invalidDefinitionId
71
+
72
+ Invalid definition ID format: %s. Expected a 15 or 18 character Salesforce ID.
73
+
74
+ # errors.noFieldsProvided
75
+
76
+ No fields provided. Use --fields to specify one or more field API names.
77
+
78
+ # errors.updateFailed
79
+
80
+ Failed to update definition %s: %s
@@ -0,0 +1,66 @@
1
+ # summary
2
+
3
+ Start the MCP server to expose 18 Cuneiform tools to AI assistants — enabling natural language org discovery, definition management, and profiling through Claude Desktop, Cursor, or any MCP client.
4
+
5
+ # description
6
+
7
+ Starts the Cuneiform MCP (Model Context Protocol) server, exposing Cuneiform CLI capabilities as tools for AI assistants. Once running, an LLM client can query your org, list objects, describe fields, manage definitions, and execute profiling through natural language — using the same permissions as your CLI session.
8
+
9
+ The server registers tools across categories covering org and metadata discovery, user management, definition lifecycle, definition import/export, analysis, and profiling execution. A system prompt provides LLMs with an incremental exploration workflow for the KYCD journey.
10
+
11
+ David Chen wires this into Claude Desktop and Cursor workflows — the registered tools give him a well-defined API contract. Marcus Thompson uses it to accelerate org exploration through conversational queries. Andre Robitaille demonstrates MCP integration during workshops, where attendees experience Cuneiform through natural dialogue.
12
+
13
+ TRANSPORT: The server uses stdio (stdin/stdout) with JSON-RPC 2.0 protocol. Logging goes to stderr (enable with --debug). The stdio transport ensures the server runs locally alongside the Salesforce CLI — same machine, same authenticated session.
14
+
15
+ This command blocks until the MCP client disconnects. It is designed to be launched by an MCP client (Claude Desktop, Cursor, etc.). The access gate validates Cuneiform permissions at startup — the same gate used by all Cuneiform commands. On access gate failure, the command exits with an error describing the missing permission and how to resolve it via `user details --configure`.
16
+
17
+ **When to run this command:**
18
+
19
+ - AI-guided org discovery — let Claude explore a new client org through natural language
20
+ - Hands-free definition creation — describe what you want and let the AI translate to tool calls
21
+ - Training demonstrations — show Cuneiform capabilities through interactive AI conversation
22
+ - Automated workflows — integrate Cuneiform tools into AI agent pipelines
23
+
24
+ NATURAL LANGUAGE → FLAG MAPPING:
25
+ "start the MCP server" → --target-org myOrg
26
+ "troubleshoot MCP tool calls" → --target-org myOrg --debug
27
+ "pin a specific API version" → --target-org myOrg --api-version 59.0
28
+
29
+ CONFIGURATION: Add the server to your AI tool's settings. For Claude Desktop, add to `claude_desktop_config.json`:
30
+
31
+ ```json
32
+ {
33
+ "mcpServers": {
34
+ "cuneiform": {
35
+ "command": "sf",
36
+ "args": ["cuneiform", "mcp", "serve", "--target-org", "myOrg"]
37
+ }
38
+ }
39
+ }
40
+ ```
41
+
42
+ # examples
43
+
44
+ - Start the MCP server for an org — the standard launch configuration:
45
+
46
+ <%= config.bin %> <%= command.id %> --target-org myOrg
47
+
48
+ - Start with debug logging — see tool invocations and parameters on stderr:
49
+
50
+ <%= config.bin %> <%= command.id %> --target-org myOrg --debug
51
+
52
+ - Pin a specific API version — for consistent behavior across environments:
53
+
54
+ <%= config.bin %> <%= command.id %> --target-org myOrg --api-version 59.0
55
+
56
+ # flags.target-org.summary
57
+
58
+ The Salesforce org to connect the MCP server to. The server inherits this org's authentication for all 18 tool invocations. Specify the org alias or username.
59
+
60
+ # flags.api-version.summary
61
+
62
+ Override the API version used for Salesforce API requests made through MCP tools. Use when troubleshooting version-specific behavior or testing against a specific API release.
63
+
64
+ # flags.debug.summary
65
+
66
+ Enable debug logging to stderr. Shows tool invocations, parameters, and response metadata for troubleshooting MCP communication. stdout remains reserved for MCP protocol traffic.
@@ -0,0 +1,201 @@
1
+ # summary
2
+
3
+ Retrieve comprehensive object metadata — fields, record types, data age distribution, relationships, and profiling status — to make informed decisions about what and how to profile.
4
+
5
+ # description
6
+
7
+ Understanding an object before profiling it is the difference between a targeted assessment and a fishing expedition. Salesforce scatters object metadata across Object Manager, Schema Builder, and Setup. This command consolidates everything into structured sections from a single call:
8
+
9
+ - **Object Summary** — record count, field totals, type
10
+ - **Record Age Distribution** — year-by-year grid showing when records were created (Cuneiform-exclusive), revealing whether data is actively growing, historical, or stagnant
11
+ - **Record Types** — name, developer name, active status, default flag
12
+ - **Business Processes** — active processes with record type associations and per-process record age grids
13
+ - **Field Summary** — total, standard, custom, formula, lookup counts
14
+ - **Field Type Distribution** — type counts with percentages
15
+ - **Namespace Breakdown** — fields grouped by namespace prefix showing which managed packages contribute fields
16
+ - **External References** — other objects that reference this one via lookups or master-detail
17
+ - **Outbound Lookups** — this object's lookup fields and their target objects
18
+ - **Profiling Status** — existing definitions, summary counts, last profiled date
19
+ - **Field Listing** (opt-in via `--with-fields`) — individual field detail with filtering and sorting
20
+
21
+ The record age distribution and per-business-process age grids directly inform the choice between metadata, historical, and comparative profiling methods. The profiling status section shows whether definitions already exist, preventing duplicate work.
22
+
23
+ NATURAL LANGUAGE → FLAG MAPPING:
24
+
25
+ "Show me the fields" → `--with-fields`
26
+ "Just the lookup fields" → `--with-fields --field-type lookup`
27
+ "Just custom fields" → `--with-fields --field-pattern "*__c"`
28
+ "Sort fields by type" → `--with-fields --sort type`
29
+ "Compare multiple objects" → `--object Account,Contact,Opportunity`
30
+
31
+ For multiple objects (comma-separated), describes run in parallel with aggregate totals across all objects. Big Objects (**b) and External Objects (**x) are not supported — they lack standard SOQL support.
32
+
33
+ Read-only. Does not modify objects, fields, or metadata. The access gate validates Cuneiform installation and permissions before queries execute.
34
+
35
+ COMMAND SEQUENCE: `object list` (identify objects of interest) → `object describe` (deep dive on specific objects) → `definition create` (define profiling scope based on what you learned)
36
+
37
+ # flags.target-org.summary
38
+
39
+ Describe objects from this Salesforce org. Specify the org alias or username when you have multiple authenticated orgs.
40
+
41
+ # flags.object.summary
42
+
43
+ Object API name(s), comma-separated. Use one name for a complete deep dive or multiple for side-by-side comparison with aggregate totals (e.g., `Account,Contact,Opportunity`).
44
+
45
+ # flags.with-fields.summary
46
+
47
+ Include a detailed field listing showing individual fields with API name, label, type, custom flag, and namespace. Use with `--field-type`, `--field-pattern`, and `--sort` to filter and organize the listing.
48
+
49
+ # flags.field-type.summary
50
+
51
+ Filter the field listing to a specific type (requires `--with-fields`). Valid types: text, picklist, lookup, number, date, formula, checkbox, id, address. Use `lookup` to map the object's relationship network.
52
+
53
+ # flags.field-pattern.summary
54
+
55
+ Filter the field listing by API name pattern with wildcard support (requires `--with-fields`). Examples: `*__c` for custom fields, `pnova__*` for Cuneiform namespace fields.
56
+
57
+ # flags.sort.summary
58
+
59
+ Sort the field listing by: `name` (alphabetical, the default), `type` (grouped by field type), or `label`. Requires `--with-fields`.
60
+
61
+ # examples
62
+
63
+ - Assess an object before building profiling definitions — see all 11 metadata sections:
64
+
65
+ <%= config.bin %> <%= command.id %> --object Account --target-org myOrg
66
+
67
+ - Compare multiple objects in parallel with aggregate totals for profiling scope decisions:
68
+
69
+ <%= config.bin %> <%= command.id %> --object Account,Contact,Opportunity --target-org myOrg
70
+
71
+ - Full field inventory — add detailed field listings to see every field on the object:
72
+
73
+ <%= config.bin %> <%= command.id %> --object Account --with-fields --target-org myOrg
74
+
75
+ - Relationship mapping — isolate lookup fields to understand the object's position in the data model:
76
+
77
+ <%= config.bin %> <%= command.id %> --object Account --with-fields --field-type lookup --sort type --target-org myOrg
78
+
79
+ - Custom field audit — filter to custom fields for a managed package or customization review:
80
+
81
+ <%= config.bin %> <%= command.id %> --object Account --with-fields --field-pattern "\*\_\_c" --target-org myOrg
82
+
83
+ - JSON for automation — pipe structured metadata to assessment pipelines or architecture documentation:
84
+
85
+ <%= config.bin %> <%= command.id %> --object Account --json --target-org myOrg
86
+
87
+ # output.identity.header
88
+
89
+ Org Identity
90
+
91
+ # output.identity.orgName
92
+
93
+ Org Name
94
+
95
+ # output.identity.orgId
96
+
97
+ Org ID
98
+
99
+ # output.identity.instanceUrl
100
+
101
+ Instance URL
102
+
103
+ # output.identity.orgType
104
+
105
+ Org Type
106
+
107
+ # output.identity.edition
108
+
109
+ Edition
110
+
111
+ # output.identity.namespace
112
+
113
+ Namespace
114
+
115
+ # output.identity.username
116
+
117
+ Username
118
+
119
+ # errors.orgIdentityFailed
120
+
121
+ Could not retrieve org identity information. Continuing without org context.
122
+
123
+ # output.table.recordTypes.name
124
+
125
+ Name
126
+
127
+ # output.table.recordTypes.developerName
128
+
129
+ Developer Name
130
+
131
+ # output.table.recordTypes.active
132
+
133
+ Active
134
+
135
+ # output.table.recordTypes.default
136
+
137
+ Default
138
+
139
+ # output.table.fieldTypes.type
140
+
141
+ Type
142
+
143
+ # output.table.fieldTypes.count
144
+
145
+ Count
146
+
147
+ # output.table.fieldTypes.percent
148
+
149
+ Percent
150
+
151
+ # output.table.namespaces.namespace
152
+
153
+ Namespace
154
+
155
+ # output.table.namespaces.fieldCount
156
+
157
+ Field Count
158
+
159
+ # output.table.fields.apiName
160
+
161
+ API Name
162
+
163
+ # output.table.fields.label
164
+
165
+ Label
166
+
167
+ # output.table.fields.type
168
+
169
+ Type
170
+
171
+ # output.table.fields.custom
172
+
173
+ Custom
174
+
175
+ # output.table.fields.namespace
176
+
177
+ Namespace
178
+
179
+ # output.table.relationships.relatedObject
180
+
181
+ Related Object
182
+
183
+ # output.table.relationships.field
184
+
185
+ Field
186
+
187
+ # output.table.lookups.lookupField
188
+
189
+ Lookup Field
190
+
191
+ # output.table.lookups.targetObject
192
+
193
+ Target Object
194
+
195
+ # output.table.profilingStatus.name
196
+
197
+ Definition
198
+
199
+ # output.table.profilingStatus.lastProfiled
200
+
201
+ Last Profiled