bps-kit 1.2.2 → 1.3.1

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 (51) hide show
  1. package/.bps-kit.json +4 -4
  2. package/README.md +3 -0
  3. package/implementation_plan.md.resolved +37 -0
  4. package/package.json +2 -2
  5. package/templates/agents-template/ARCHITECTURE.md +21 -9
  6. package/templates/agents-template/agents/automation-specialist.md +157 -0
  7. package/templates/agents-template/rules/GEMINI.md +2 -10
  8. package/templates/agents-template/workflows/automate.md +153 -0
  9. package/templates/skills_normal/n8n-code-javascript/BUILTIN_FUNCTIONS.md +764 -0
  10. package/templates/skills_normal/n8n-code-javascript/COMMON_PATTERNS.md +1110 -0
  11. package/templates/skills_normal/n8n-code-javascript/DATA_ACCESS.md +782 -0
  12. package/templates/skills_normal/n8n-code-javascript/ERROR_PATTERNS.md +763 -0
  13. package/templates/skills_normal/n8n-code-javascript/README.md +350 -0
  14. package/templates/skills_normal/n8n-code-javascript/SKILL.md +699 -0
  15. package/templates/skills_normal/n8n-code-python/COMMON_PATTERNS.md +794 -0
  16. package/templates/skills_normal/n8n-code-python/DATA_ACCESS.md +702 -0
  17. package/templates/skills_normal/n8n-code-python/ERROR_PATTERNS.md +601 -0
  18. package/templates/skills_normal/n8n-code-python/README.md +386 -0
  19. package/templates/skills_normal/n8n-code-python/SKILL.md +748 -0
  20. package/templates/skills_normal/n8n-code-python/STANDARD_LIBRARY.md +974 -0
  21. package/templates/skills_normal/n8n-expression-syntax/COMMON_MISTAKES.md +393 -0
  22. package/templates/skills_normal/n8n-expression-syntax/EXAMPLES.md +483 -0
  23. package/templates/skills_normal/n8n-expression-syntax/README.md +93 -0
  24. package/templates/skills_normal/n8n-expression-syntax/SKILL.md +516 -0
  25. package/templates/skills_normal/n8n-mcp-tools-expert/README.md +99 -0
  26. package/templates/skills_normal/n8n-mcp-tools-expert/SEARCH_GUIDE.md +374 -0
  27. package/templates/skills_normal/n8n-mcp-tools-expert/SKILL.md +642 -0
  28. package/templates/skills_normal/n8n-mcp-tools-expert/VALIDATION_GUIDE.md +442 -0
  29. package/templates/skills_normal/n8n-mcp-tools-expert/WORKFLOW_GUIDE.md +618 -0
  30. package/templates/skills_normal/n8n-node-configuration/DEPENDENCIES.md +789 -0
  31. package/templates/skills_normal/n8n-node-configuration/OPERATION_PATTERNS.md +913 -0
  32. package/templates/skills_normal/n8n-node-configuration/README.md +364 -0
  33. package/templates/skills_normal/n8n-node-configuration/SKILL.md +785 -0
  34. package/templates/skills_normal/n8n-validation-expert/ERROR_CATALOG.md +943 -0
  35. package/templates/skills_normal/n8n-validation-expert/FALSE_POSITIVES.md +720 -0
  36. package/templates/skills_normal/n8n-validation-expert/README.md +290 -0
  37. package/templates/skills_normal/n8n-validation-expert/SKILL.md +689 -0
  38. package/templates/skills_normal/n8n-workflow-patterns/README.md +251 -0
  39. package/templates/skills_normal/n8n-workflow-patterns/SKILL.md +411 -0
  40. package/templates/skills_normal/n8n-workflow-patterns/ai_agent_workflow.md +784 -0
  41. package/templates/skills_normal/n8n-workflow-patterns/database_operations.md +785 -0
  42. package/templates/skills_normal/n8n-workflow-patterns/http_api_integration.md +734 -0
  43. package/templates/skills_normal/n8n-workflow-patterns/scheduled_tasks.md +773 -0
  44. package/templates/skills_normal/n8n-workflow-patterns/webhook_processing.md +545 -0
  45. package/templates/vault/n8n-code-javascript/SKILL.md +10 -10
  46. package/templates/vault/n8n-code-python/SKILL.md +11 -11
  47. package/templates/vault/n8n-expression-syntax/SKILL.md +4 -4
  48. package/templates/vault/n8n-mcp-tools-expert/SKILL.md +9 -9
  49. package/templates/vault/n8n-node-configuration/SKILL.md +2 -2
  50. package/templates/vault/n8n-validation-expert/SKILL.md +3 -3
  51. package/templates/vault/n8n-workflow-patterns/SKILL.md +11 -11
@@ -0,0 +1,789 @@
1
+ # Property Dependencies Guide
2
+
3
+ Deep dive into n8n property dependencies and displayOptions mechanism.
4
+
5
+ ---
6
+
7
+ ## What Are Property Dependencies?
8
+
9
+ **Definition**: Rules that control when fields are visible or required based on other field values.
10
+
11
+ **Mechanism**: `displayOptions` in node schema
12
+
13
+ **Purpose**:
14
+ - Show relevant fields only
15
+ - Hide irrelevant fields
16
+ - Simplify configuration UX
17
+ - Prevent invalid configurations
18
+
19
+ ---
20
+
21
+ ## displayOptions Structure
22
+
23
+ ### Basic Format
24
+
25
+ ```javascript
26
+ {
27
+ "name": "fieldName",
28
+ "type": "string",
29
+ "displayOptions": {
30
+ "show": {
31
+ "otherField": ["value1", "value2"]
32
+ }
33
+ }
34
+ }
35
+ ```
36
+
37
+ **Translation**: Show `fieldName` when `otherField` equals "value1" OR "value2"
38
+
39
+ ### Show vs Hide
40
+
41
+ #### show (Most Common)
42
+
43
+ **Show field when condition matches**:
44
+ ```javascript
45
+ {
46
+ "name": "body",
47
+ "displayOptions": {
48
+ "show": {
49
+ "sendBody": [true]
50
+ }
51
+ }
52
+ }
53
+ ```
54
+
55
+ **Meaning**: Show `body` when `sendBody = true`
56
+
57
+ #### hide (Less Common)
58
+
59
+ **Hide field when condition matches**:
60
+ ```javascript
61
+ {
62
+ "name": "advanced",
63
+ "displayOptions": {
64
+ "hide": {
65
+ "simpleMode": [true]
66
+ }
67
+ }
68
+ }
69
+ ```
70
+
71
+ **Meaning**: Hide `advanced` when `simpleMode = true`
72
+
73
+ ### Multiple Conditions (AND Logic)
74
+
75
+ ```javascript
76
+ {
77
+ "name": "body",
78
+ "displayOptions": {
79
+ "show": {
80
+ "sendBody": [true],
81
+ "method": ["POST", "PUT", "PATCH"]
82
+ }
83
+ }
84
+ }
85
+ ```
86
+
87
+ **Meaning**: Show `body` when:
88
+ - `sendBody = true` AND
89
+ - `method IN (POST, PUT, PATCH)`
90
+
91
+ **All conditions must match** (AND logic)
92
+
93
+ ### Multiple Values (OR Logic)
94
+
95
+ ```javascript
96
+ {
97
+ "name": "someField",
98
+ "displayOptions": {
99
+ "show": {
100
+ "method": ["POST", "PUT", "PATCH"]
101
+ }
102
+ }
103
+ }
104
+ ```
105
+
106
+ **Meaning**: Show `someField` when:
107
+ - `method = POST` OR
108
+ - `method = PUT` OR
109
+ - `method = PATCH`
110
+
111
+ **Any value matches** (OR logic)
112
+
113
+ ---
114
+
115
+ ## Common Dependency Patterns
116
+
117
+ ### Pattern 1: Boolean Toggle
118
+
119
+ **Use case**: Optional feature flag
120
+
121
+ **Example**: HTTP Request sendBody
122
+ ```javascript
123
+ // Field: sendBody (boolean)
124
+ {
125
+ "name": "sendBody",
126
+ "type": "boolean",
127
+ "default": false
128
+ }
129
+
130
+ // Field: body (depends on sendBody)
131
+ {
132
+ "name": "body",
133
+ "displayOptions": {
134
+ "show": {
135
+ "sendBody": [true]
136
+ }
137
+ }
138
+ }
139
+ ```
140
+
141
+ **Flow**:
142
+ 1. User sees sendBody checkbox
143
+ 2. When checked → body field appears
144
+ 3. When unchecked → body field hides
145
+
146
+ ### Pattern 2: Resource/Operation Cascade
147
+
148
+ **Use case**: Different operations show different fields
149
+
150
+ **Example**: Slack message operations
151
+ ```javascript
152
+ // Operation: post
153
+ {
154
+ "name": "channel",
155
+ "displayOptions": {
156
+ "show": {
157
+ "resource": ["message"],
158
+ "operation": ["post"]
159
+ }
160
+ }
161
+ }
162
+
163
+ // Operation: update
164
+ {
165
+ "name": "messageId",
166
+ "displayOptions": {
167
+ "show": {
168
+ "resource": ["message"],
169
+ "operation": ["update"]
170
+ }
171
+ }
172
+ }
173
+ ```
174
+
175
+ **Flow**:
176
+ 1. User selects resource="message"
177
+ 2. User selects operation="post" → sees channel
178
+ 3. User changes to operation="update" → channel hides, messageId shows
179
+
180
+ ### Pattern 3: Type-Specific Configuration
181
+
182
+ **Use case**: Different types need different fields
183
+
184
+ **Example**: IF node conditions
185
+ ```javascript
186
+ // String operations
187
+ {
188
+ "name": "value2",
189
+ "displayOptions": {
190
+ "show": {
191
+ "conditions.string.0.operation": ["equals", "notEquals", "contains"]
192
+ }
193
+ }
194
+ }
195
+
196
+ // Unary operations (isEmpty) don't show value2
197
+ {
198
+ "displayOptions": {
199
+ "hide": {
200
+ "conditions.string.0.operation": ["isEmpty", "isNotEmpty"]
201
+ }
202
+ }
203
+ }
204
+ ```
205
+
206
+ ### Pattern 4: Method-Specific Fields
207
+
208
+ **Use case**: HTTP methods have different options
209
+
210
+ **Example**: HTTP Request
211
+ ```javascript
212
+ // Query parameters (all methods can have)
213
+ {
214
+ "name": "queryParameters",
215
+ "displayOptions": {
216
+ "show": {
217
+ "sendQuery": [true]
218
+ }
219
+ }
220
+ }
221
+
222
+ // Body (only certain methods)
223
+ {
224
+ "name": "body",
225
+ "displayOptions": {
226
+ "show": {
227
+ "sendBody": [true],
228
+ "method": ["POST", "PUT", "PATCH", "DELETE"]
229
+ }
230
+ }
231
+ }
232
+ ```
233
+
234
+ ---
235
+
236
+ ## Finding Property Dependencies
237
+
238
+ ### Using get_node with search_properties Mode
239
+
240
+ ```javascript
241
+ // Find properties related to "body"
242
+ get_node({
243
+ nodeType: "nodes-base.httpRequest",
244
+ mode: "search_properties",
245
+ propertyQuery: "body"
246
+ });
247
+ ```
248
+
249
+ ### Using get_node with Full Detail
250
+
251
+ ```javascript
252
+ // Get complete schema with displayOptions
253
+ get_node({
254
+ nodeType: "nodes-base.httpRequest",
255
+ detail: "full"
256
+ });
257
+ ```
258
+
259
+ ### When to Use
260
+
261
+ **✅ Use when**:
262
+ - Validation fails with "missing field" but you don't see that field
263
+ - A field appears/disappears unexpectedly
264
+ - You need to understand what controls field visibility
265
+ - Building dynamic configuration tools
266
+
267
+ **❌ Don't use when**:
268
+ - Simple configuration (use `get_node` with standard detail)
269
+ - Just starting configuration
270
+ - Field requirements are obvious
271
+
272
+ ---
273
+
274
+ ## Complex Dependency Examples
275
+
276
+ ### Example 1: HTTP Request Complete Flow
277
+
278
+ **Scenario**: Configuring POST with JSON body
279
+
280
+ **Step 1**: Set method
281
+ ```javascript
282
+ {
283
+ "method": "POST"
284
+ // → sendBody becomes visible
285
+ }
286
+ ```
287
+
288
+ **Step 2**: Enable body
289
+ ```javascript
290
+ {
291
+ "method": "POST",
292
+ "sendBody": true
293
+ // → body field becomes visible AND required
294
+ }
295
+ ```
296
+
297
+ **Step 3**: Configure body
298
+ ```javascript
299
+ {
300
+ "method": "POST",
301
+ "sendBody": true,
302
+ "body": {
303
+ "contentType": "json"
304
+ // → content field becomes visible AND required
305
+ }
306
+ }
307
+ ```
308
+
309
+ **Step 4**: Add content
310
+ ```javascript
311
+ {
312
+ "method": "POST",
313
+ "sendBody": true,
314
+ "body": {
315
+ "contentType": "json",
316
+ "content": {
317
+ "name": "John",
318
+ "email": "john@example.com"
319
+ }
320
+ }
321
+ }
322
+ // ✅ Valid!
323
+ ```
324
+
325
+ **Dependency chain**:
326
+ ```
327
+ method=POST
328
+ → sendBody visible
329
+ → sendBody=true
330
+ → body visible + required
331
+ → body.contentType=json
332
+ → body.content visible + required
333
+ ```
334
+
335
+ ### Example 2: IF Node Operator Dependencies
336
+
337
+ **Scenario**: String comparison with different operators
338
+
339
+ **Binary operator** (equals):
340
+ ```javascript
341
+ {
342
+ "conditions": {
343
+ "string": [
344
+ {
345
+ "operation": "equals"
346
+ // → value1 required
347
+ // → value2 required
348
+ // → singleValue should NOT be set
349
+ }
350
+ ]
351
+ }
352
+ }
353
+ ```
354
+
355
+ **Unary operator** (isEmpty):
356
+ ```javascript
357
+ {
358
+ "conditions": {
359
+ "string": [
360
+ {
361
+ "operation": "isEmpty"
362
+ // → value1 required
363
+ // → value2 should NOT be set
364
+ // → singleValue should be true (auto-added)
365
+ }
366
+ ]
367
+ }
368
+ }
369
+ ```
370
+
371
+ **Dependency table**:
372
+
373
+ | Operator | value1 | value2 | singleValue |
374
+ |---|---|---|---|
375
+ | equals | Required | Required | false |
376
+ | notEquals | Required | Required | false |
377
+ | contains | Required | Required | false |
378
+ | isEmpty | Required | Hidden | true |
379
+ | isNotEmpty | Required | Hidden | true |
380
+
381
+ ### Example 3: Slack Operation Matrix
382
+
383
+ **Scenario**: Different Slack operations show different fields
384
+
385
+ ```javascript
386
+ // post message
387
+ {
388
+ "resource": "message",
389
+ "operation": "post"
390
+ // Shows: channel (required), text (required), attachments, blocks
391
+ }
392
+
393
+ // update message
394
+ {
395
+ "resource": "message",
396
+ "operation": "update"
397
+ // Shows: messageId (required), text (required), channel (optional)
398
+ }
399
+
400
+ // delete message
401
+ {
402
+ "resource": "message",
403
+ "operation": "delete"
404
+ // Shows: messageId (required), channel (required)
405
+ // Hides: text, attachments, blocks
406
+ }
407
+
408
+ // get message
409
+ {
410
+ "resource": "message",
411
+ "operation": "get"
412
+ // Shows: messageId (required), channel (required)
413
+ // Hides: text, attachments, blocks
414
+ }
415
+ ```
416
+
417
+ **Field visibility matrix**:
418
+
419
+ | Field | post | update | delete | get |
420
+ |---|---|---|---|---|
421
+ | channel | Required | Optional | Required | Required |
422
+ | text | Required | Required | Hidden | Hidden |
423
+ | messageId | Hidden | Required | Required | Required |
424
+ | attachments | Optional | Optional | Hidden | Hidden |
425
+ | blocks | Optional | Optional | Hidden | Hidden |
426
+
427
+ ---
428
+
429
+ ## Nested Dependencies
430
+
431
+ ### What Are They?
432
+
433
+ **Definition**: Dependencies within object properties
434
+
435
+ **Example**: HTTP Request body.contentType controls body.content structure
436
+
437
+ ```javascript
438
+ {
439
+ "body": {
440
+ "contentType": "json",
441
+ // → content expects JSON object
442
+ "content": {
443
+ "key": "value"
444
+ }
445
+ }
446
+ }
447
+
448
+ {
449
+ "body": {
450
+ "contentType": "form-data",
451
+ // → content expects form fields array
452
+ "content": [
453
+ {
454
+ "name": "field1",
455
+ "value": "value1"
456
+ }
457
+ ]
458
+ }
459
+ }
460
+ ```
461
+
462
+ ### How to Handle
463
+
464
+ **Strategy**: Configure parent first, then children
465
+
466
+ ```javascript
467
+ // Step 1: Parent
468
+ {
469
+ "body": {
470
+ "contentType": "json" // Set parent first
471
+ }
472
+ }
473
+
474
+ // Step 2: Children (structure determined by parent)
475
+ {
476
+ "body": {
477
+ "contentType": "json",
478
+ "content": { // JSON object format
479
+ "key": "value"
480
+ }
481
+ }
482
+ }
483
+ ```
484
+
485
+ ---
486
+
487
+ ## Auto-Sanitization and Dependencies
488
+
489
+ ### What Auto-Sanitization Fixes
490
+
491
+ **Operator structure issues** (IF/Switch nodes):
492
+
493
+ **Example**: singleValue property
494
+ ```javascript
495
+ // You configure (missing singleValue)
496
+ {
497
+ "type": "boolean",
498
+ "operation": "isEmpty"
499
+ // Missing singleValue
500
+ }
501
+
502
+ // Auto-sanitization adds it
503
+ {
504
+ "type": "boolean",
505
+ "operation": "isEmpty",
506
+ "singleValue": true // ✅ Added automatically
507
+ }
508
+ ```
509
+
510
+ ### What It Doesn't Fix
511
+
512
+ **Missing required fields**:
513
+ ```javascript
514
+ // You configure (missing channel)
515
+ {
516
+ "resource": "message",
517
+ "operation": "post",
518
+ "text": "Hello"
519
+ // Missing required field: channel
520
+ }
521
+
522
+ // Auto-sanitization does NOT add
523
+ // You must add it yourself
524
+ {
525
+ "resource": "message",
526
+ "operation": "post",
527
+ "channel": "#general", // ← You must add
528
+ "text": "Hello"
529
+ }
530
+ ```
531
+
532
+ ---
533
+
534
+ ## Troubleshooting Dependencies
535
+
536
+ ### Problem 1: "Field X is required but not visible"
537
+
538
+ **Error**:
539
+ ```json
540
+ {
541
+ "type": "missing_required",
542
+ "property": "body",
543
+ "message": "body is required"
544
+ }
545
+ ```
546
+
547
+ **But you don't see body field in configuration!**
548
+
549
+ **Solution**:
550
+ ```javascript
551
+ // Check field dependencies using search_properties
552
+ get_node({
553
+ nodeType: "nodes-base.httpRequest",
554
+ mode: "search_properties",
555
+ propertyQuery: "body"
556
+ });
557
+
558
+ // Find that body shows when sendBody=true
559
+ // Add sendBody
560
+ {
561
+ "method": "POST",
562
+ "sendBody": true, // ← Now body appears!
563
+ "body": {...}
564
+ }
565
+ ```
566
+
567
+ ### Problem 2: "Field disappears when I change operation"
568
+
569
+ **Scenario**:
570
+ ```javascript
571
+ // Working configuration
572
+ {
573
+ "resource": "message",
574
+ "operation": "post",
575
+ "channel": "#general",
576
+ "text": "Hello"
577
+ }
578
+
579
+ // Change operation
580
+ {
581
+ "resource": "message",
582
+ "operation": "update", // Changed
583
+ "channel": "#general", // Still here
584
+ "text": "Updated" // Still here
585
+ // Missing: messageId (required for update!)
586
+ }
587
+ ```
588
+
589
+ **Validation error**: "messageId is required"
590
+
591
+ **Why**: Different operation = different required fields
592
+
593
+ **Solution**:
594
+ ```javascript
595
+ // Check requirements for new operation
596
+ get_node({
597
+ nodeType: "nodes-base.slack"
598
+ });
599
+
600
+ // Configure for update operation
601
+ {
602
+ "resource": "message",
603
+ "operation": "update",
604
+ "messageId": "1234567890", // Required for update
605
+ "text": "Updated",
606
+ "channel": "#general" // Optional for update
607
+ }
608
+ ```
609
+
610
+ ### Problem 3: "Validation passes but field doesn't save"
611
+
612
+ **Scenario**: Field hidden by dependencies after validation
613
+
614
+ **Example**:
615
+ ```javascript
616
+ // Configure
617
+ {
618
+ "method": "GET",
619
+ "sendBody": true, // ❌ GET doesn't support body
620
+ "body": {...} // This will be stripped
621
+ }
622
+
623
+ // After save
624
+ {
625
+ "method": "GET"
626
+ // body removed because method=GET hides it
627
+ }
628
+ ```
629
+
630
+ **Solution**: Respect dependencies from the start
631
+
632
+ ```javascript
633
+ // Correct approach - check property dependencies
634
+ get_node({
635
+ nodeType: "nodes-base.httpRequest",
636
+ mode: "search_properties",
637
+ propertyQuery: "body"
638
+ });
639
+
640
+ // See that body only shows for POST/PUT/PATCH/DELETE
641
+ // Use correct method
642
+ {
643
+ "method": "POST",
644
+ "sendBody": true,
645
+ "body": {...}
646
+ }
647
+ ```
648
+
649
+ ---
650
+
651
+ ## Advanced Patterns
652
+
653
+ ### Pattern 1: Conditional Required with Fallback
654
+
655
+ **Example**: Channel can be string OR expression
656
+
657
+ ```javascript
658
+ // Option 1: String
659
+ {
660
+ "channel": "#general"
661
+ }
662
+
663
+ // Option 2: Expression
664
+ {
665
+ "channel": "={{$json.channelName}}"
666
+ }
667
+
668
+ // Validation accepts both
669
+ ```
670
+
671
+ ### Pattern 2: Mutually Exclusive Fields
672
+
673
+ **Example**: Use either ID or name, not both
674
+
675
+ ```javascript
676
+ // Use messageId
677
+ {
678
+ "messageId": "1234567890"
679
+ // name not needed
680
+ }
681
+
682
+ // OR use messageName
683
+ {
684
+ "messageName": "thread-name"
685
+ // messageId not needed
686
+ }
687
+
688
+ // Dependencies ensure only one is required
689
+ ```
690
+
691
+ ### Pattern 3: Progressive Complexity
692
+
693
+ **Example**: Simple mode vs advanced mode
694
+
695
+ ```javascript
696
+ // Simple mode
697
+ {
698
+ "mode": "simple",
699
+ "text": "{{$json.message}}"
700
+ // Advanced fields hidden
701
+ }
702
+
703
+ // Advanced mode
704
+ {
705
+ "mode": "advanced",
706
+ "attachments": [...],
707
+ "blocks": [...],
708
+ "metadata": {...}
709
+ // Simple field hidden, advanced fields shown
710
+ }
711
+ ```
712
+
713
+ ---
714
+
715
+ ## Best Practices
716
+
717
+ ### ✅ Do
718
+
719
+ 1. **Check dependencies when stuck**
720
+ ```javascript
721
+ get_node({nodeType: "...", mode: "search_properties", propertyQuery: "..."});
722
+ ```
723
+
724
+ 2. **Configure parent properties first**
725
+ ```javascript
726
+ // First: method, resource, operation
727
+ // Then: dependent fields
728
+ ```
729
+
730
+ 3. **Validate after changing operation**
731
+ ```javascript
732
+ // Operation changed → requirements changed
733
+ validate_node({nodeType: "...", config: {...}, profile: "runtime"});
734
+ ```
735
+
736
+ 4. **Read validation errors for dependency hints**
737
+ ```
738
+ Error: "body required when sendBody=true"
739
+ → Hint: Set sendBody=true to enable body
740
+ ```
741
+
742
+ ### ❌ Don't
743
+
744
+ 1. **Don't ignore dependency errors**
745
+ ```javascript
746
+ // Error: "body not visible" → Check displayOptions
747
+ ```
748
+
749
+ 2. **Don't hardcode all possible fields**
750
+ ```javascript
751
+ // Bad: Adding fields that will be hidden
752
+ ```
753
+
754
+ 3. **Don't assume operations are identical**
755
+ ```javascript
756
+ // Each operation has unique requirements
757
+ ```
758
+
759
+ ---
760
+
761
+ ## Summary
762
+
763
+ **Key Concepts**:
764
+ - `displayOptions` control field visibility
765
+ - `show` = field appears when conditions match
766
+ - `hide` = field disappears when conditions match
767
+ - Multiple conditions = AND logic
768
+ - Multiple values = OR logic
769
+
770
+ **Common Patterns**:
771
+ 1. Boolean toggle (sendBody → body)
772
+ 2. Resource/operation cascade (different operations → different fields)
773
+ 3. Type-specific config (string vs boolean conditions)
774
+ 4. Method-specific fields (GET vs POST)
775
+
776
+ **Troubleshooting**:
777
+ - Field required but not visible → Check dependencies
778
+ - Field disappears after change → Operation changed requirements
779
+ - Field doesn't save → Hidden by dependencies
780
+
781
+ **Tools**:
782
+ - `get_node({mode: "search_properties"})` - Find property dependencies
783
+ - `get_node({detail: "full"})` - See complete schema with displayOptions
784
+ - `get_node` - See operation requirements (standard detail)
785
+ - Validation errors - Hints about dependencies
786
+
787
+ **Related Files**:
788
+ - **[SKILL.md](SKILL.md)** - Main configuration guide
789
+ - **[OPERATION_PATTERNS.md](OPERATION_PATTERNS.md)** - Common patterns by node type