@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.
- package/LICENSE +81 -30
- package/README.md +59 -95
- package/messages/compatibility.check.md +71 -0
- package/messages/cuneiform.access.md +138 -0
- package/messages/definition.create.md +511 -0
- package/messages/definition.export.md +88 -0
- package/messages/definition.get.md +147 -0
- package/messages/definition.import.md +65 -0
- package/messages/definition.list.md +264 -0
- package/messages/definition.purge.md +318 -0
- package/messages/definition.update.md +80 -0
- package/messages/mcp.serve.md +66 -0
- package/messages/object.describe.md +201 -0
- package/messages/object.list.md +443 -0
- package/messages/org.details.md +386 -0
- package/messages/org.reset.md +71 -0
- package/messages/profile.md +231 -0
- package/messages/profile.request.cancel.md +143 -0
- package/messages/profile.request.delete.md +139 -0
- package/messages/profile.request.list.md +89 -0
- package/messages/summary.purge.md +218 -0
- package/messages/summary.reprofile.md +150 -0
- package/messages/summary.stop.md +157 -0
- package/messages/user.details.md +501 -0
- package/oclif.lock +3021 -2224
- package/oclif.manifest.json +2 -116
- package/package.json +84 -19
- package/lib/commands/cuneiform/about.d.ts +0 -13
- package/lib/commands/cuneiform/about.js +0 -26
- package/lib/commands/cuneiform/about.js.map +0 -1
- package/lib/commands/hello/world.d.ts +0 -14
- package/lib/commands/hello/world.js +0 -27
- package/lib/commands/hello/world.js.map +0 -1
- package/lib/index.d.ts +0 -2
- package/lib/index.js +0 -2
- package/lib/index.js.map +0 -1
- package/messages/cuneiform.about.md +0 -19
- package/messages/hello.world.md +0 -29
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
# summary
|
|
2
|
+
|
|
3
|
+
Enumerate Salesforce objects with record counts, type classifications, and namespace distribution — so you can identify which objects hold customer data and focus profiling on what matters.
|
|
4
|
+
|
|
5
|
+
# description
|
|
6
|
+
|
|
7
|
+
A typical Salesforce org contains 500 to 2,000 objects. Most are empty platform objects, managed package internals, or system metadata. Finding the objects that actually hold customer data — the ones worth profiling — requires navigating Object Manager, running SOQL counts, and cross-referencing namespace prefixes. This command transforms that exploration into a single call with filter flags and enrichment options.
|
|
8
|
+
|
|
9
|
+
The default customer-facing classification filter focuses attention on objects most likely relevant for profiling scope decisions. Record counts distinguish populated objects from empty shells. Namespace distribution reveals how the org's data is partitioned across standard Salesforce, industry clouds, managed packages, and custom development.
|
|
10
|
+
|
|
11
|
+
**Six output sections:**
|
|
12
|
+
|
|
13
|
+
- **Org Identity** — org name, edition, instance URL
|
|
14
|
+
- **Summary Statistics** — total objects, objects with records, standard/custom/external counts, namespace distribution
|
|
15
|
+
- **Namespace Distribution** — objects grouped by standard, industry, managed, and custom categories
|
|
16
|
+
- **Objects Table** — name, label, record count, type, namespace — plus optional enrichment columns
|
|
17
|
+
- **Contact Points** — email, phone, and URL field details (when `--with-contact-points` is specified)
|
|
18
|
+
- **Next Steps** — `object describe` for field-level deep dives, `definition create` for profiling scope
|
|
19
|
+
|
|
20
|
+
NATURAL LANGUAGE → FLAG MAPPING:
|
|
21
|
+
|
|
22
|
+
"Which objects have data?" → `--with-records`
|
|
23
|
+
"What custom objects exist?" → `--filter custom`
|
|
24
|
+
"What did CPQ add to this org?" → `--namespace SBQQ`
|
|
25
|
+
"Which objects match a name?" → `--pattern Account*`
|
|
26
|
+
"Which objects have meaningful volume?" → `--min-records 1000`
|
|
27
|
+
"Which objects can be assigned to users?" → `--with-owner`
|
|
28
|
+
"Which objects have record type segmentation?" → `--with-record-types`
|
|
29
|
+
"Where are email, phone, and address fields?" → `--with-contact-points`
|
|
30
|
+
"How complex is each object?" → `--with-fields`
|
|
31
|
+
"Which objects reference other objects?" → `--with-references`
|
|
32
|
+
|
|
33
|
+
**How this differs from `object describe`:** This command shows the broad inventory across many objects. Use `object describe` when you need the deep dive on a specific object's fields, record types, relationships, and data age.
|
|
34
|
+
|
|
35
|
+
Read-only. Does not create, modify, or delete records or metadata. Results default to customer-facing classification, sorted by record count descending, paginated at 50 with a visible notice when more exist.
|
|
36
|
+
|
|
37
|
+
COMMAND SEQUENCE: `org details` (understand the org landscape) → `object list` (identify objects of interest) → `object describe` (deep dive on specific objects) → `definition create` (define profiling scope)
|
|
38
|
+
|
|
39
|
+
# flags.target-org.summary
|
|
40
|
+
|
|
41
|
+
List objects from this Salesforce org. Specify the org alias or username when you have multiple authenticated orgs.
|
|
42
|
+
|
|
43
|
+
# flags.object.summary
|
|
44
|
+
|
|
45
|
+
Fetch a single object by API name — bypasses all filters and the limit cap, and always returns the real record count. Use this when you know the exact object you need (e.g., `--object Lead`). Mutually exclusive with --filter (non-default), --namespace, --pattern, --without-records, and --min-records.
|
|
46
|
+
|
|
47
|
+
# flags.filter.summary
|
|
48
|
+
|
|
49
|
+
Filter by object type: `standard`, `custom`, or `all`. Use `custom` to audit custom data model objects or `standard` to focus on platform objects. Defaults to `all`.
|
|
50
|
+
|
|
51
|
+
# flags.namespace.summary
|
|
52
|
+
|
|
53
|
+
Filter by namespace prefix (case-insensitive). Scope to a specific managed package — e.g., `SBQQ` for CPQ, `FinServ` for Financial Services Cloud. Use an empty string for unmanaged objects only.
|
|
54
|
+
|
|
55
|
+
# flags.pattern.summary
|
|
56
|
+
|
|
57
|
+
Filter by API name pattern with wildcard support. Examples: `Account*` matches Account and AccountContactRelation; `*__c` matches custom objects.
|
|
58
|
+
|
|
59
|
+
# flags.with-records.summary
|
|
60
|
+
|
|
61
|
+
Show only objects that contain data (record count > 0). Filters out empty platform infrastructure and focuses on populated objects worth profiling.
|
|
62
|
+
|
|
63
|
+
# flags.without-records.summary
|
|
64
|
+
|
|
65
|
+
Show only empty objects (record count = 0). Identifies unused objects during org cleanup or newly provisioned objects awaiting data.
|
|
66
|
+
|
|
67
|
+
# flags.with-owner.summary
|
|
68
|
+
|
|
69
|
+
Show only objects with an OwnerId field — objects whose records can be assigned to users. Identifies ownership-trackable data for profiling scope.
|
|
70
|
+
|
|
71
|
+
# flags.with-record-types.summary
|
|
72
|
+
|
|
73
|
+
Show only objects with record types defined. Record types indicate segmented data entry or business processes — relevant for deciding whether to use record-type-based profiling.
|
|
74
|
+
|
|
75
|
+
# flags.with-business-process.summary
|
|
76
|
+
|
|
77
|
+
Add a business process count column showing lifecycle processes (Lead, Opportunity, Case, Solution). Identifies objects with stage-based workflows before profiling.
|
|
78
|
+
|
|
79
|
+
# flags.with-fields.summary
|
|
80
|
+
|
|
81
|
+
Add field count columns (total fields and custom fields) to gauge object complexity. Identifies objects with large field inventories before running `object describe`.
|
|
82
|
+
|
|
83
|
+
# flags.with-references.summary
|
|
84
|
+
|
|
85
|
+
Add a reference/lookup field count column. High reference counts indicate hub objects in the data model with dense relationship networks.
|
|
86
|
+
|
|
87
|
+
# flags.classification.summary
|
|
88
|
+
|
|
89
|
+
Object classification filter: `customer` (customer-facing objects most relevant to profiling, the default), `internal` (system/platform objects), or `all`. The customer-facing filter uses heuristics based on object type, namespace, and naming patterns.
|
|
90
|
+
|
|
91
|
+
# flags.with-contact-points.summary
|
|
92
|
+
|
|
93
|
+
Add contact point columns showing email, phone, and URL field counts per object. Discovers identity resolution candidates before a contact point analysis engagement.
|
|
94
|
+
|
|
95
|
+
# flags.min-records.summary
|
|
96
|
+
|
|
97
|
+
Minimum record count threshold. Show only objects with at least this many records (e.g., `--min-records 1000` to focus on high-volume objects).
|
|
98
|
+
|
|
99
|
+
# flags.sort.summary
|
|
100
|
+
|
|
101
|
+
Sort results by: `name` (alphabetical), `recordCount` (highest first, the default), or `label`.
|
|
102
|
+
|
|
103
|
+
# flags.limit.summary
|
|
104
|
+
|
|
105
|
+
Maximum objects to display (1-200, default: 50). A notice appears when results are truncated — increase to see more, or use --pattern / --object to bypass this cap entirely.
|
|
106
|
+
|
|
107
|
+
# examples
|
|
108
|
+
|
|
109
|
+
- Explore a new org — see customer-facing objects sorted by data volume (the default starting point):
|
|
110
|
+
|
|
111
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg
|
|
112
|
+
|
|
113
|
+
- Custom object audit — inventory custom objects for a handoff document or data model review:
|
|
114
|
+
|
|
115
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --filter custom
|
|
116
|
+
|
|
117
|
+
- Namespace-focused scope — see how Financial Services Cloud objects are populated:
|
|
118
|
+
|
|
119
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --namespace FinServ --with-fields --with-record-types
|
|
120
|
+
|
|
121
|
+
- Profiling candidates — focus on high-volume objects worth profiling:
|
|
122
|
+
|
|
123
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --with-records --min-records 1000 --sort recordCount
|
|
124
|
+
|
|
125
|
+
- Contact point discovery — find objects with email, phone, or address fields before an analysis engagement:
|
|
126
|
+
|
|
127
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --with-contact-points --with-records
|
|
128
|
+
|
|
129
|
+
- Complexity assessment — add field and reference counts to identify hub objects in the data model:
|
|
130
|
+
|
|
131
|
+
<%= config.bin %> <%= command.id %> --target-org myOrg --with-fields --with-references --with-records
|
|
132
|
+
|
|
133
|
+
# output.title
|
|
134
|
+
|
|
135
|
+
Cuneiform Object Listing for %s (%s)
|
|
136
|
+
|
|
137
|
+
# output.identity.header
|
|
138
|
+
|
|
139
|
+
Org Identity
|
|
140
|
+
|
|
141
|
+
# output.identity.orgName
|
|
142
|
+
|
|
143
|
+
Org Name
|
|
144
|
+
|
|
145
|
+
# output.identity.orgId
|
|
146
|
+
|
|
147
|
+
Org ID
|
|
148
|
+
|
|
149
|
+
# output.identity.instanceUrl
|
|
150
|
+
|
|
151
|
+
Instance URL
|
|
152
|
+
|
|
153
|
+
# output.identity.orgType
|
|
154
|
+
|
|
155
|
+
Org Type
|
|
156
|
+
|
|
157
|
+
# output.identity.edition
|
|
158
|
+
|
|
159
|
+
Edition
|
|
160
|
+
|
|
161
|
+
# output.identity.namespace
|
|
162
|
+
|
|
163
|
+
Namespace
|
|
164
|
+
|
|
165
|
+
# output.identity.username
|
|
166
|
+
|
|
167
|
+
Username
|
|
168
|
+
|
|
169
|
+
# errors.mutuallyExclusiveFlags
|
|
170
|
+
|
|
171
|
+
Cannot specify both %s and %s. These flags are mutually exclusive.
|
|
172
|
+
|
|
173
|
+
# errors.objectNotFound
|
|
174
|
+
|
|
175
|
+
Object "%s" was not found in this org. Check the API name spelling and run without --object to browse available objects.
|
|
176
|
+
|
|
177
|
+
# errors.noTargetOrg
|
|
178
|
+
|
|
179
|
+
Could not determine target org username
|
|
180
|
+
|
|
181
|
+
# errors.orgIdentityFailed
|
|
182
|
+
|
|
183
|
+
Could not retrieve org identity
|
|
184
|
+
|
|
185
|
+
# output.summary.header
|
|
186
|
+
|
|
187
|
+
Summary
|
|
188
|
+
|
|
189
|
+
# output.summary.totalObjects
|
|
190
|
+
|
|
191
|
+
Total Objects
|
|
192
|
+
|
|
193
|
+
# output.summary.withRecords
|
|
194
|
+
|
|
195
|
+
With Records
|
|
196
|
+
|
|
197
|
+
# output.summary.withoutRecords
|
|
198
|
+
|
|
199
|
+
Without Records
|
|
200
|
+
|
|
201
|
+
# output.summary.standard
|
|
202
|
+
|
|
203
|
+
Standard
|
|
204
|
+
|
|
205
|
+
# output.summary.custom
|
|
206
|
+
|
|
207
|
+
Custom
|
|
208
|
+
|
|
209
|
+
# output.summary.withRecordTypes
|
|
210
|
+
|
|
211
|
+
With Record Types
|
|
212
|
+
|
|
213
|
+
# output.summary.withOwner
|
|
214
|
+
|
|
215
|
+
With Owner
|
|
216
|
+
|
|
217
|
+
# output.summary.external
|
|
218
|
+
|
|
219
|
+
External
|
|
220
|
+
|
|
221
|
+
# output.summary.withNamespace
|
|
222
|
+
|
|
223
|
+
With Namespace
|
|
224
|
+
|
|
225
|
+
# output.summary.withoutNamespace
|
|
226
|
+
|
|
227
|
+
Without Namespace
|
|
228
|
+
|
|
229
|
+
# output.namespaceDistribution.header
|
|
230
|
+
|
|
231
|
+
Namespace Distribution
|
|
232
|
+
|
|
233
|
+
# output.namespaceDistribution.noNamespace
|
|
234
|
+
|
|
235
|
+
No Namespace
|
|
236
|
+
|
|
237
|
+
# output.namespaceDistribution.columns.prefix
|
|
238
|
+
|
|
239
|
+
Prefix
|
|
240
|
+
|
|
241
|
+
# output.namespaceDistribution.columns.label
|
|
242
|
+
|
|
243
|
+
Label
|
|
244
|
+
|
|
245
|
+
# output.namespaceDistribution.columns.count
|
|
246
|
+
|
|
247
|
+
Count
|
|
248
|
+
|
|
249
|
+
# output.objects.header
|
|
250
|
+
|
|
251
|
+
Objects
|
|
252
|
+
|
|
253
|
+
# output.objects.limitNotice
|
|
254
|
+
|
|
255
|
+
Displaying the top %s objects. Use --limit to show more or less objects.
|
|
256
|
+
|
|
257
|
+
# output.objects.totalLabel
|
|
258
|
+
|
|
259
|
+
Total
|
|
260
|
+
|
|
261
|
+
# output.objects.noNamespace
|
|
262
|
+
|
|
263
|
+
No Namespace
|
|
264
|
+
|
|
265
|
+
# output.objects.typeCustom
|
|
266
|
+
|
|
267
|
+
Custom
|
|
268
|
+
|
|
269
|
+
# output.objects.typeStandard
|
|
270
|
+
|
|
271
|
+
Standard
|
|
272
|
+
|
|
273
|
+
# output.objects.columns.prefix
|
|
274
|
+
|
|
275
|
+
Prefix
|
|
276
|
+
|
|
277
|
+
# output.objects.columns.objectLabel
|
|
278
|
+
|
|
279
|
+
Object Label
|
|
280
|
+
|
|
281
|
+
# output.objects.columns.records
|
|
282
|
+
|
|
283
|
+
Records
|
|
284
|
+
|
|
285
|
+
# output.objects.columns.recordTypes
|
|
286
|
+
|
|
287
|
+
Rec. Types
|
|
288
|
+
|
|
289
|
+
# output.objects.columns.businessProcess
|
|
290
|
+
|
|
291
|
+
Processes
|
|
292
|
+
|
|
293
|
+
# output.objects.columns.totalFields
|
|
294
|
+
|
|
295
|
+
Fields
|
|
296
|
+
|
|
297
|
+
# output.objects.columns.custom
|
|
298
|
+
|
|
299
|
+
Custom
|
|
300
|
+
|
|
301
|
+
# output.objects.columns.reference
|
|
302
|
+
|
|
303
|
+
Reference
|
|
304
|
+
|
|
305
|
+
# output.objects.columns.totalCPs
|
|
306
|
+
|
|
307
|
+
Total CPs
|
|
308
|
+
|
|
309
|
+
# output.objects.columns.email
|
|
310
|
+
|
|
311
|
+
Email
|
|
312
|
+
|
|
313
|
+
# output.objects.columns.phone
|
|
314
|
+
|
|
315
|
+
Phone
|
|
316
|
+
|
|
317
|
+
# output.objects.columns.url
|
|
318
|
+
|
|
319
|
+
Url
|
|
320
|
+
|
|
321
|
+
# output.contactPoints.header
|
|
322
|
+
|
|
323
|
+
Contact Point Fields
|
|
324
|
+
|
|
325
|
+
# output.contactPoints.email
|
|
326
|
+
|
|
327
|
+
Email
|
|
328
|
+
|
|
329
|
+
# output.contactPoints.phone
|
|
330
|
+
|
|
331
|
+
Phone
|
|
332
|
+
|
|
333
|
+
# output.contactPoints.url
|
|
334
|
+
|
|
335
|
+
URL
|
|
336
|
+
|
|
337
|
+
# output.filters.type
|
|
338
|
+
|
|
339
|
+
Type: %s
|
|
340
|
+
|
|
341
|
+
# output.filters.namespace
|
|
342
|
+
|
|
343
|
+
Namespace: %s
|
|
344
|
+
|
|
345
|
+
# output.filters.pattern
|
|
346
|
+
|
|
347
|
+
Pattern: %s
|
|
348
|
+
|
|
349
|
+
# output.filters.withRecords
|
|
350
|
+
|
|
351
|
+
With records only
|
|
352
|
+
|
|
353
|
+
# output.filters.withoutRecords
|
|
354
|
+
|
|
355
|
+
Without records only
|
|
356
|
+
|
|
357
|
+
# output.filters.withOwner
|
|
358
|
+
|
|
359
|
+
With OwnerId field
|
|
360
|
+
|
|
361
|
+
# output.filters.withRecordTypes
|
|
362
|
+
|
|
363
|
+
With record types
|
|
364
|
+
|
|
365
|
+
# output.filters.withBusinessProcess
|
|
366
|
+
|
|
367
|
+
With business processes
|
|
368
|
+
|
|
369
|
+
# output.filters.withFields
|
|
370
|
+
|
|
371
|
+
With field counts
|
|
372
|
+
|
|
373
|
+
# output.filters.withReferences
|
|
374
|
+
|
|
375
|
+
With reference fields
|
|
376
|
+
|
|
377
|
+
# output.filters.withContactPoints
|
|
378
|
+
|
|
379
|
+
With contact points
|
|
380
|
+
|
|
381
|
+
# output.filters.classification
|
|
382
|
+
|
|
383
|
+
Classification: %s
|
|
384
|
+
|
|
385
|
+
# output.filters.minRecords
|
|
386
|
+
|
|
387
|
+
Min records: %s
|
|
388
|
+
|
|
389
|
+
# spinner.listing
|
|
390
|
+
|
|
391
|
+
Listing
|
|
392
|
+
|
|
393
|
+
# spinner.objectsNoun
|
|
394
|
+
|
|
395
|
+
objects
|
|
396
|
+
|
|
397
|
+
# spinner.enriching
|
|
398
|
+
|
|
399
|
+
Enriching objects
|
|
400
|
+
|
|
401
|
+
# output.patternHeader
|
|
402
|
+
|
|
403
|
+
Pattern
|
|
404
|
+
|
|
405
|
+
# errors.listFailed
|
|
406
|
+
|
|
407
|
+
Object list failed
|
|
408
|
+
|
|
409
|
+
# warnings.sortWithoutRecords
|
|
410
|
+
|
|
411
|
+
Sorting by recordCount without --with-records: all record counts will be 0 and order will be arbitrary. Add --with-records to sort by actual data volume.
|
|
412
|
+
|
|
413
|
+
# output.entityType
|
|
414
|
+
|
|
415
|
+
objects
|
|
416
|
+
|
|
417
|
+
# output.noResults.suggestion
|
|
418
|
+
|
|
419
|
+
Try relaxing or removing the most restrictive filters
|
|
420
|
+
|
|
421
|
+
# output.nextSteps.header
|
|
422
|
+
|
|
423
|
+
Next steps:
|
|
424
|
+
|
|
425
|
+
# output.nextSteps.describeLabel
|
|
426
|
+
|
|
427
|
+
Describe %s
|
|
428
|
+
|
|
429
|
+
# output.nextSteps.describeCommand
|
|
430
|
+
|
|
431
|
+
sf cuneiform object describe %s --target-org %s
|
|
432
|
+
|
|
433
|
+
# output.nextSteps.describeCommandNoOrg
|
|
434
|
+
|
|
435
|
+
sf cuneiform object describe %s --help
|
|
436
|
+
|
|
437
|
+
# output.nextSteps.definitionCreateLabel
|
|
438
|
+
|
|
439
|
+
Create a profiling definition
|
|
440
|
+
|
|
441
|
+
# output.nextSteps.definitionCreateCommand
|
|
442
|
+
|
|
443
|
+
sf cuneiform definition create --help
|