shortcuts-playground 1.2.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.
- package/README.md +54 -0
- package/agents/shortcut-builder.md +172 -0
- package/agents/shortcut-remixer.md +239 -0
- package/commands/build-shortcut.md +32 -0
- package/commands/remix-shortcut.md +34 -0
- package/opencode.json +30 -0
- package/package.json +47 -0
- package/plugin/validator.ts +179 -0
- package/skills/shortcuts-playground/ACTIONS.md +713 -0
- package/skills/shortcuts-playground/APPINTENTS.md +2760 -0
- package/skills/shortcuts-playground/AUTOMATION_TRIGGERS.md +133 -0
- package/skills/shortcuts-playground/BEST_PRACTICES.md +357 -0
- package/skills/shortcuts-playground/CHANGELOG.md +585 -0
- package/skills/shortcuts-playground/CONTROL_FLOW.md +777 -0
- package/skills/shortcuts-playground/DATE_TIME.md +75 -0
- package/skills/shortcuts-playground/EXAMPLES.md +738 -0
- package/skills/shortcuts-playground/FILTERS.md +697 -0
- package/skills/shortcuts-playground/HEALTHKIT.md +317 -0
- package/skills/shortcuts-playground/ICONS_AND_COLORS.md +89 -0
- package/skills/shortcuts-playground/JAVASCRIPT_WEBPAGE.md +51 -0
- package/skills/shortcuts-playground/PARAMETER_TYPES.md +1117 -0
- package/skills/shortcuts-playground/PLIST_FORMAT.md +296 -0
- package/skills/shortcuts-playground/README.md +77 -0
- package/skills/shortcuts-playground/SKILL.md +459 -0
- package/skills/shortcuts-playground/THIRD_PARTY_ACTIONS.md +77 -0
- package/skills/shortcuts-playground/TOOLKIT_SNAPSHOT.md +62 -0
- package/skills/shortcuts-playground/URL_SCHEMES.md +59 -0
- package/skills/shortcuts-playground/VARIABLES.md +569 -0
- package/skills/shortcuts-playground/assets/shortcuts-small.svg +14 -0
- package/skills/shortcuts-playground/assets/shortcuts.png +0 -0
- package/skills/shortcuts-playground/data/healthkit-ios26.2-reference.json +2603 -0
- package/skills/shortcuts-playground/data/macos27-shortpy-grounding.json +4085 -0
- package/skills/shortcuts-playground/data/macos27-workflow-trigger-samples.json +1 -0
- package/skills/shortcuts-playground/data/shortcuts-glyph-synonyms.json +5102 -0
- package/skills/shortcuts-playground/data/shortcuts-icon-colors.json +107 -0
- package/skills/shortcuts-playground/data/shortcuts-official-glyph-mapping.json +509 -0
- package/skills/shortcuts-playground/data/toolkit-v63-tool-ids.json +1806 -0
- package/skills/shortcuts-playground/data/toolkit-v78-first-party-enum-cases.json +1 -0
- package/skills/shortcuts-playground/data/toolkit-v78-first-party-parameter-keys.json +1 -0
- package/skills/shortcuts-playground/data/toolkit-v78-ios27-tool-ids.json +1222 -0
- package/skills/shortcuts-playground/data/toolkit-v78-tool-ids.json +2745 -0
- package/skills/shortcuts-playground/data/toolkit-v78-trigger-parameter-keys.json +1051 -0
- package/skills/shortcuts-playground/golden-shortcuts/index.jsonl +19 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/1be4dde95b794253bf82438e201b33e7.xml +174 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/2e0fb675e45948aaacee7e534f910492.xml +1016 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/332c12a0060043b388b22b806be7ab58.xml +1924 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/3dd4ee24e43f464f92adaa70a0311eaa.xml +1177 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/4d102301c6e646faa7a8a221f4f4ec98.xml +321 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/51cc4e26d1044893a0c3f2f3630cf2d2.xml +1933 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/623e7f1ca5f948e2bd53811fec63e544.xml +136 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/6a18b76843ac45c384ac3400f3740997.xml +1791 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/71f0cacb0f604b399b76c5dcb7286e7c.xml +2228 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/807525ed9f974829bc8494defac923a8.xml +259 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/8ab0d39826ab4249be58672763caa3ba.xml +420 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/91c45fd3fd3b427897d9ba485efb1227.xml +800 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/97be626bb25c41709d175646a7f6d8f2.xml +424 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/ae59e10d409348f9bd33894f03f9beb4.xml +568 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/afa83b6be811483b9c32189c41eb9312.xml +391 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/cfdb083b857e4ac189629fa386d27cdc.xml +193 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/e01cebe192d64b2fbca80204d03d92ab.xml +111 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/ef669bcf8bad489d9ef4b88bfaf5772f.xml +780 -0
- package/skills/shortcuts-playground/golden-shortcuts/xml/f44f5caf5e3e48d4817e73af450c4404.xml +570 -0
- package/skills/shortcuts-playground/scripts/generate_healthkit_reference.py +394 -0
- package/skills/shortcuts-playground/scripts/lookup_action_grounding.py +1164 -0
- package/skills/shortcuts-playground/scripts/select_shortcut_icon_color.py +597 -0
- package/skills/shortcuts-playground/scripts/test_random_mixed_shortcuts.py +1067 -0
- package/skills/shortcuts-playground/scripts/test_wiring_regressions.py +2247 -0
- package/skills/shortcuts-playground/scripts/validate_shortcut.py +4526 -0
|
@@ -0,0 +1,713 @@
|
|
|
1
|
+
# Shortcuts Actions Reference
|
|
2
|
+
|
|
3
|
+
Complete catalog of all 365 WF*Action identifiers from the original macOS ToolKit v63 snapshot plus bundled iOS HealthKit backups. OS 27 ToolKit v78 snapshots add additional identifiers to the packaged allowlist; only the v78 actions with inspected metadata are summarized here.
|
|
4
|
+
|
|
5
|
+
> Note: In ToolKit SQLite `Tools`, four control-flow actions are not represented as normal tools:
|
|
6
|
+
> `is.workflow.actions.conditional`, `is.workflow.actions.repeat.count`,
|
|
7
|
+
> `is.workflow.actions.repeat.each`, and `is.workflow.actions.choosefrommenu`.
|
|
8
|
+
> They are still valid and are handled explicitly by this skill/validator.
|
|
9
|
+
|
|
10
|
+
## Identifier Mapping Rules
|
|
11
|
+
|
|
12
|
+
### Standard Mapping
|
|
13
|
+
Class `WF<Name>Action` maps to `is.workflow.actions.<lowercasename>`
|
|
14
|
+
|
|
15
|
+
Example: `WFShowResultAction` → `is.workflow.actions.showresult`
|
|
16
|
+
|
|
17
|
+
### Irregular Mappings
|
|
18
|
+
|
|
19
|
+
Some actions have non-standard mappings:
|
|
20
|
+
|
|
21
|
+
| Class Name | Identifier |
|
|
22
|
+
|------------|-----------|
|
|
23
|
+
| `WFRepeatAction` | `is.workflow.actions.repeat.count` |
|
|
24
|
+
| `WFForEachRepeatAction` | `is.workflow.actions.repeat.each` |
|
|
25
|
+
| `WFFiniteRepeatAction` | `is.workflow.actions.repeat.count` |
|
|
26
|
+
| `WFAskForInputAction` | `is.workflow.actions.ask` |
|
|
27
|
+
| `WFTextAction` | `is.workflow.actions.gettext` |
|
|
28
|
+
| `WFConditionalAction` | `is.workflow.actions.conditional` |
|
|
29
|
+
| `WFChooseFromMenuAction` | `is.workflow.actions.choosefrommenu` |
|
|
30
|
+
| `WFGetFileAction` | `is.workflow.actions.documentpicker.open` |
|
|
31
|
+
| `WFSelectFilesAction` | `is.workflow.actions.documentpicker.open` |
|
|
32
|
+
| `WFSaveFileAction` | `is.workflow.actions.documentpicker.save` |
|
|
33
|
+
| `WFGetCurrentWeatherConditionsAction` | `is.workflow.actions.weather.currentconditions` |
|
|
34
|
+
| `WFGetWeatherForecastAction` | `is.workflow.actions.weather.forecast` |
|
|
35
|
+
| `WFContentItemFilterAction` | `is.workflow.actions.filter.contentitems` |
|
|
36
|
+
| `WFGetUpcomingCalendarItemsAction` | `is.workflow.actions.getupcomingevents` |
|
|
37
|
+
| `WFAppendFileAction` | `is.workflow.actions.file.append` (was `appendfile` in older versions) |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Actions by Category
|
|
42
|
+
|
|
43
|
+
### OS 27 ToolKit v78 Additions
|
|
44
|
+
|
|
45
|
+
These classic/WF-namespace identifiers are present in local OS 27 ToolKit v78 databases. They are allowlisted for validation only when targeting OS 27+ or `latest`. `Add Item to List` serialization is verified from Federico's macOS 27 sample; Stored Content, Get What's On Screen, and VPN fields have targeted ToolKit-derived validation. Picker-backed values such as VPN selection and iOS workout type/goal payloads still need exported samples before relying on rich generated payloads.
|
|
46
|
+
|
|
47
|
+
| Identifier | Display Name | Observed Parameter Keys |
|
|
48
|
+
|------------|--------------|-------------------------|
|
|
49
|
+
| `is.workflow.actions.additemtolist` | Add Item to List | `WFListVariable`, `WFListItem`, `WFInsertPosition`, `WFItemIndex` |
|
|
50
|
+
| `is.workflow.actions.deletestoredcontent` | Delete Stored Content | `WFStoredContentGlobalValue`, `WFStoredContentKey` |
|
|
51
|
+
| `is.workflow.actions.filter.vpns` | Find VPNs | `WFContentItemFilter`, `WFCompoundType`, `WFContentItemInputParameter`, `WFContentItemSortProperty`, `WFContentItemSortOrder`, `WFContentItemLimitEnabled`, `WFContentItemLimitNumber` |
|
|
52
|
+
| `is.workflow.actions.getonscreencontext` | Get What's On Screen | `WFOnScreenContextScope`, `WFOnScreenContextResultType`, `WFOnScreenContextLimitEnabled`, `WFOnScreenContextLimit` |
|
|
53
|
+
| `is.workflow.actions.getonscreencontent` | Get What's On Screen | Deprecated in v78; use `is.workflow.actions.getonscreencontext` |
|
|
54
|
+
| `is.workflow.actions.getselectedtext` | Get Selected Text | none |
|
|
55
|
+
| `is.workflow.actions.getstoredcontent` | Get Stored Content | `WFStoredContentGlobalValue`, `WFStoredContentKey` |
|
|
56
|
+
| `is.workflow.actions.setstoredcontent` | Store Content | `WFInput`, `WFStoredContentGlobalValue`, `WFStoredContentKey` |
|
|
57
|
+
| `is.workflow.actions.vpn.get` | Get Current VPN | none |
|
|
58
|
+
| `is.workflow.actions.vpn.set` | Set VPN | `WFVPNOperation`, `WFOnDemandValue`, `WFVPN` |
|
|
59
|
+
| `is.workflow.actions.workout.end` | End Workout | `IntentAppDefinition` (iOS/iPadOS 27 only) |
|
|
60
|
+
| `is.workflow.actions.workout.start` | Start Workout | `IntentAppDefinition`, `workoutName`, `isOpenEnded`, `WorkoutGoal` (iOS/iPadOS 27 only) |
|
|
61
|
+
|
|
62
|
+
#### Add Item to List
|
|
63
|
+
|
|
64
|
+
`is.workflow.actions.additemtolist` appends to the end of a list by default when `WFInsertPosition` is omitted.
|
|
65
|
+
|
|
66
|
+
| Behavior | Required Parameters |
|
|
67
|
+
|----------|---------------------|
|
|
68
|
+
| Add to end | `WFListVariable`, `WFListItem` |
|
|
69
|
+
| Add to beginning | `WFListVariable`, `WFListItem`, `WFInsertPosition = "Beginning"` |
|
|
70
|
+
| Add at index | `WFListVariable`, `WFListItem`, `WFInsertPosition = "Index"`, `WFItemIndex` |
|
|
71
|
+
|
|
72
|
+
`WFListVariable` is a `WFTextTokenAttachment` pointing at a list output or named variable. `WFListItem` can be a literal value or `WFTextTokenString`.
|
|
73
|
+
|
|
74
|
+
`WFInsertPosition` accepts exactly `Beginning`, `End`, or `Index`. Include `WFItemIndex` only when `WFInsertPosition = "Index"`, and use a 1-based integer (`1` or greater).
|
|
75
|
+
|
|
76
|
+
#### Stored Content
|
|
77
|
+
|
|
78
|
+
`Store Content`, `Get Stored Content`, and `Delete Stored Content` share a string key in `WFStoredContentKey`. The key must be non-empty. `WFStoredContentGlobalValue` is a boolean; omit it or set it to `false` for shortcut-scoped content, and set it to `true` only when intentionally using the global/iCloud stored-content namespace. This boolean is unrelated to editor rendering; it does not fix an empty `Content` field.
|
|
79
|
+
|
|
80
|
+
`Store Content` also requires explicit `WFInput` pointing at the content to save. Apple saves a manually connected Store Content input as `WFTextTokenString` with a single `` placeholder and an `attachmentsByRange` entry for the source output. Do **not** use a bare `WFTextTokenAttachment` or a wrapped `Type = Variable` attachment for this field; those sign and import, but render as an empty `Content` placeholder in Shortcuts. If `shortcuts sign` rejects this correct XML shape with a format error, use `plutil -convert binary1` on the final `.shortcut` copy and sign that; the bundled signer wrapper retries this automatically.
|
|
81
|
+
|
|
82
|
+
| Action | Required Parameters |
|
|
83
|
+
|--------|---------------------|
|
|
84
|
+
| `is.workflow.actions.setstoredcontent` | `WFInput`, `WFStoredContentKey` |
|
|
85
|
+
| `is.workflow.actions.getstoredcontent` | `WFStoredContentKey` |
|
|
86
|
+
| `is.workflow.actions.deletestoredcontent` | `WFStoredContentKey` |
|
|
87
|
+
|
|
88
|
+
#### VPN Actions
|
|
89
|
+
|
|
90
|
+
`is.workflow.actions.vpn.get` returns the current VPN and takes no parameters. Prefer this classic WF action for "Get Current VPN" output. The similarly named AppIntent entity row `com.apple.systempreferences.CurrentlyConnectedVPN` is filter/query metadata, not the no-parameter current-VPN action. `is.workflow.actions.filter.vpns` and `is.workflow.actions.vpn.set` are OS 27 ToolKit v78 rows available on macOS and iOS/iPadOS targets.
|
|
91
|
+
|
|
92
|
+
For `Find VPNs`, ToolKit exposes VPN content item properties `Name`, `Server Address`, `App`, `Is Connected`, and `Is On Demand Enabled`. The verified sort properties are `Name`, `Server Address`, and `Random`. Prefer ToolKit enum IDs for `WFCompoundType`: `0` means **Any** and `1` means **All**. The validator accepts the display labels `Any`/`All` as compatibility aliases, but generated shortcuts should use `0`/`1`. If `WFContentItemLimitEnabled` is `true`, include a positive numeric `WFContentItemLimitNumber`.
|
|
93
|
+
|
|
94
|
+
| Action | Required/Important Parameters |
|
|
95
|
+
|--------|-------------------------------|
|
|
96
|
+
| `is.workflow.actions.filter.vpns` | `WFContentItemFilter` for predicates, optional `WFContentItemSortProperty`, `WFContentItemSortOrder`, `WFContentItemLimitEnabled`, `WFContentItemLimitNumber`, `WFCompoundType`, `WFContentItemInputParameter = "Library"` |
|
|
97
|
+
| `is.workflow.actions.vpn.get` | none |
|
|
98
|
+
| `is.workflow.actions.vpn.set` | `WFVPNOperation`, `WFVPN`; `WFOnDemandValue` is required when `WFVPNOperation = "Set On Demand"` |
|
|
99
|
+
|
|
100
|
+
`WFVPNOperation` accepts exactly `Connect`, `Disconnect`, `Toggle`, `Set On Demand`, or `Toggle On Demand`. `WFOnDemandValue`, when present, must be a boolean. Treat `WFVPN` as a picker/token state for the selected VPN configuration; do not leave it empty.
|
|
101
|
+
|
|
102
|
+
#### iOS Workout Controls
|
|
103
|
+
|
|
104
|
+
`is.workflow.actions.workout.start` and `is.workflow.actions.workout.end` are present only in the iOS/iPadOS 27 Simulator ToolKit snapshot. Validate them with `--target-platform ios`; the default macOS target intentionally rejects them. Treat the listed ToolKit keys as metadata until an exported iPhone/iPad shortcut confirms picker value serialization for `workoutName` and `WorkoutGoal`.
|
|
105
|
+
|
|
106
|
+
#### Get What's On Screen
|
|
107
|
+
|
|
108
|
+
Use the OS 27 ToolKit v78 parameterized row `is.workflow.actions.getonscreencontext` for new shortcuts. `is.workflow.actions.getonscreencontent` is still present in the ToolKit snapshot but is deprecated by v78 and has no observed parameter schema in the current catalog.
|
|
109
|
+
|
|
110
|
+
| Parameter | Requirement |
|
|
111
|
+
|-----------|-------------|
|
|
112
|
+
| `WFOnScreenContextScope` | Optional. If present, use exactly `All Visible` or `Focused App Only`. |
|
|
113
|
+
| `WFOnScreenContextResultType` | Optional string. Leave omitted unless matching an exported sample or a known Shortcuts UI value. |
|
|
114
|
+
| `WFOnScreenContextLimitEnabled` | Optional boolean. Use `true` only when intentionally limiting the number of returned items. |
|
|
115
|
+
| `WFOnScreenContextLimit` | Required when `WFOnScreenContextLimitEnabled` is `true`; must be a positive number. Omit when limit is disabled. |
|
|
116
|
+
|
|
117
|
+
#### OS 26 to 27 Updated Parameters
|
|
118
|
+
|
|
119
|
+
These parameter additions were cross-checked against the Automators OS 26 to 27 thread and local ToolKit v78 metadata. Treat AppIntent-style WF-namespace actions (`appendnote`, `scanbarcode`, `extracttextfromimage`) as ToolKit-backed AppIntents even though their identifiers begin with `is.workflow.actions.`. The validator rejects these parameter keys when targeting macOS 26 or older even if the action identifier itself is available on that target.
|
|
120
|
+
|
|
121
|
+
| Identifier | Display Name | New/Updated Parameters | Notes |
|
|
122
|
+
|------------|--------------|------------------------|-------|
|
|
123
|
+
| `is.workflow.actions.addnewreminder` | New Reminder | `WFUrgent` | Boolean urgent flag reported in the OS 26.4 delta and present in ToolKit v78. |
|
|
124
|
+
| `is.workflow.actions.appendnote` | Append to Note | `section` (**Section**), `ignoreWhitespace` (**Ignore Whitespace**), `interpretAsMarkdown` (**Interpret as Markdown**); important existing key: `operation` | `section` is the section title/heading; `operation` accepts `append` or `prepend`; the booleans are `On`/`Off` UI toggles. |
|
|
125
|
+
| `com.apple.mobilenotes.SharingExtension` | Create Note | `interpretAsMarkdown` (**Interpret as Markdown**) | This ToolKit row uses `contents` for the note body; `com.apple.Notes.CreateNoteIntent` did not expose the markdown toggle in local macOS 27 v78. |
|
|
126
|
+
| `is.workflow.actions.askllm` | Use Model | `WFAllowWebSearch`, `FollowUp` | `WFAllowWebSearch` is the **Use Broad World Knowledge** toggle; `FollowUp` is the **Follow Up** toggle. Both are plist booleans. |
|
|
127
|
+
| `is.workflow.actions.searchlocalbusinesses` | Find Places | `WFSearchSortOrder` | ToolKit enum values: `Distance` or `Relevance`. |
|
|
128
|
+
| `is.workflow.actions.getdirections` | Open Directions | `WFDestination` | ToolKit notes that multi-stop trips are only supported by Apple Maps; exported multi-stop samples are still needed before generating complex destination lists. |
|
|
129
|
+
| `is.workflow.actions.getdistance` | Get Distance | `WFAvoidTolls` (**Avoid Tolls**), `WFAvoidHighways` (**Avoid Highways**), `WFDistanceUnit`, `Accuracy` | Boolean route options. Route modes: `Driving`, `Walking`, `Biking`, `Direct`. Distance units: `Miles` or `Kilometers`. Accuracy values: `Best`, `NearestTenMeters`, `HundredMeters`, `Kilometer`, `ThreeKilometers`. |
|
|
130
|
+
| `is.workflow.actions.gettraveltime` | Get Travel Time | `WFAvoidTolls` (**Avoid Tolls**), `WFAvoidHighways` (**Avoid Highways**) | Boolean route options. Route modes: `Driving`, `Walking`, `Biking`, `Transit`. |
|
|
131
|
+
| `is.workflow.actions.hide.app` | Hide App | `WFAppsExcept` | Used when `WFHideAppMode = "All Apps"` to keep listed apps open. |
|
|
132
|
+
| `is.workflow.actions.quit.app` | Quit App | `WFAppsExcept`, `WFAskToSaveChanges` | `WFAppsExcept` is used when `WFQuitAppMode = "All Apps"` to keep listed apps open. `WFAskToSaveChanges`, when present, must be a boolean. |
|
|
133
|
+
| `is.workflow.actions.scanbarcode` | Scan QR or Barcode | `imageFile` | ToolKit-backed AppIntent parameter displayed as **Image** for scanning an input image file. |
|
|
134
|
+
| `is.workflow.actions.extracttextfromimage` | Extract from Image | `imageFile` | ToolKit v78 exposes this as the primary image input. Older exported shortcuts may still use `WFImage` or `WFInput`. |
|
|
135
|
+
| `com.apple.Safari.CreateNewTabGroup` / `com.apple.mobilesafari.CreateNewTabGroup` | Create Tab Group | `contents` | Use `com.apple.Safari.*` on macOS and `com.apple.mobilesafari.*` on iOS/iPadOS. Accepts URLs or existing Safari tab entities to seed the new tab group. |
|
|
136
|
+
|
|
137
|
+
OS 27 boolean toggles must be real plist booleans, not strings: `ignoreWhitespace`, `interpretAsMarkdown`, `WFAllowWebSearch`, `FollowUp`, `WFAvoidTolls`, and `WFAvoidHighways`. `WFGetDirectionsActionMode` accepts `Driving`, `Walking`, `Biking`, or `Direct` for Get Distance, and `Driving`, `Walking`, `Biking`, or `Transit` for Get Travel Time. `WFDistanceUnit` accepts `Miles` or `Kilometers`; `Accuracy` accepts `Best`, `NearestTenMeters`, `HundredMeters`, `Kilometer`, or `ThreeKilometers`. For Hide/Quit App, `WFHideAppMode` / `WFQuitAppMode` accept `App` or `All Apps`; `WFApp` is required when the mode is `App`, `WFAppsExcept` should be omitted unless it contains at least one app to keep open, and `WFAskToSaveChanges` must be boolean when present. `Scan QR or Barcode` requires `imageFile` as a non-empty token attachment to an image/file output. `Create Tab Group` `contents` must be omitted or non-empty.
|
|
138
|
+
|
|
139
|
+
#### OS 26 to 27 Display Name Changes
|
|
140
|
+
|
|
141
|
+
| Identifier | Old Name | New Name |
|
|
142
|
+
|------------|----------|----------|
|
|
143
|
+
| `is.workflow.actions.extracttextfromimage` | Extract Text from Image | Extract from Image (`imageFile` in ToolKit v78) |
|
|
144
|
+
| `com.apple.Photos.PhotosSearchAssistantIntent` | Search Photos | Search |
|
|
145
|
+
| `com.apple.TVRemoteUIService.ToggleSystemAppearanceIntent` | Set Light/Dark Mode | Set Appearance on Apple TV |
|
|
146
|
+
|
|
147
|
+
#### OS 26.4 Choose from List Compatibility
|
|
148
|
+
|
|
149
|
+
The linked Automators OS 26.2 to 26.4 delta notes that **Choose from List** works again with more input types, including dictionaries and named text. Prefer direct Dictionary/List/Text inputs over vCard/VCF workarounds unless the user explicitly asks for contact-card formatting. Contact email and phone-number list values remain macOS-only in the reported behavior.
|
|
150
|
+
|
|
151
|
+
`WFChooseFromListActionSelectMultiple` and `WFChooseFromListActionSelectAll` must be plist booleans. Only set **Select All Initially** when **Select Multiple** is also enabled.
|
|
152
|
+
|
|
153
|
+
#### OS 18 to 26.1 Automators Follow-up
|
|
154
|
+
|
|
155
|
+
The earlier Automators iOS 18 to OS 26.1 thread lists a few rows that are also visible in the local ToolKit v78 metadata. Treat these as OS 27-era authoring metadata in this package unless you have an exported shortcut from the older OS that proves the same plist shape.
|
|
156
|
+
|
|
157
|
+
| Action | Identifier | Confirmed Metadata |
|
|
158
|
+
|--------|------------|--------------------|
|
|
159
|
+
| Open App | `is.workflow.actions.openapp` | New `WFWindowingFormat` parameter for **Window Location & Size**. Valid values: `Full Screen`, `Left`, `Right`, `Top`, `Bottom`, `Top Leading`, `Top Trailing`, `Bottom Leading`, `Bottom Trailing`, `Left Third`, `Middle Third`, `Right Third`. |
|
|
160
|
+
| Search in Files (iOS) | unresolved | The thread describes "Search for a file or folder", but no literal `Search in Files` row appears in the local macOS 27 or hydrated iOS 27 Simulator v78 ToolKit databases. The closest current classic row is `is.workflow.actions.filter.files` (`Filter Files`) with `WFContentItemFilter`, sort, limit, compound, and file input parameters. Do not invent a separate Search in Files payload until an exported iPhone/iPad shortcut identifies it. |
|
|
161
|
+
|
|
162
|
+
`WFWindowingFormat` is optional. If present, it must use one of the exact ToolKit enum values above; typoed values now fail validation.
|
|
163
|
+
|
|
164
|
+
### Text & Input
|
|
165
|
+
|
|
166
|
+
| Identifier | Class | Description |
|
|
167
|
+
|------------|-------|-------------|
|
|
168
|
+
| `gettext` | WFTextAction | Create a text value |
|
|
169
|
+
| `ask` | WFAskForInputAction | Ask user for input |
|
|
170
|
+
| `askllm` | WFAskLLMAction | Use AI model (Apple Intelligence) |
|
|
171
|
+
| `comment` | WFCommentAction | Add a comment (no effect) |
|
|
172
|
+
| `dictatetext` | WFDictateTextAction | Dictate text |
|
|
173
|
+
| `showresult` | WFShowResultAction | Display result to user |
|
|
174
|
+
| `alert` | WFAlertAction | Show alert dialog |
|
|
175
|
+
| `notification` | WFNotificationAction | Send notification |
|
|
176
|
+
| `speaktext` | WFSpeakTextAction | Speak text aloud |
|
|
177
|
+
| `detectlanguage` | WFDetectLanguageAction | Detect language |
|
|
178
|
+
|
|
179
|
+
### Variables
|
|
180
|
+
|
|
181
|
+
| Identifier | Class | Description |
|
|
182
|
+
|------------|-------|-------------|
|
|
183
|
+
| `setvariable` | WFSetVariableAction | Set a variable |
|
|
184
|
+
| `getvariable` | WFGetVariableAction | Get a variable |
|
|
185
|
+
| `appendvariable` | WFAppendVariableAction | Append to variable |
|
|
186
|
+
| `nothing` | WFNothingAction | Do nothing (pass-through) |
|
|
187
|
+
|
|
188
|
+
### Control Flow
|
|
189
|
+
|
|
190
|
+
| Identifier | Class | Description |
|
|
191
|
+
|------------|-------|-------------|
|
|
192
|
+
| `repeat.count` | WFRepeatAction | Repeat N times |
|
|
193
|
+
| `repeat.each` | WFForEachRepeatAction | Repeat for each item |
|
|
194
|
+
| `conditional` | WFConditionalAction | If/Otherwise/Otherwise If |
|
|
195
|
+
| `choosefrommenu` | WFChooseFromMenuAction | Menu with cases |
|
|
196
|
+
| `choosefromlist` | WFChooseFromListAction | Choose from list |
|
|
197
|
+
| `exit` | WFExitAction | Exit shortcut |
|
|
198
|
+
| `output` | WFOutputAction | Set output |
|
|
199
|
+
|
|
200
|
+
### Files & Documents
|
|
201
|
+
|
|
202
|
+
| Identifier | Class | Description |
|
|
203
|
+
|------------|-------|-------------|
|
|
204
|
+
| `file` | WFFileAction | Create file reference |
|
|
205
|
+
| `documentpicker.open` | WFSelectFilesAction | Open file picker |
|
|
206
|
+
| `documentpicker.save` | WFSaveFileAction | Save file |
|
|
207
|
+
| `setitemname` | WFSetItemNameAction | Set Name; produces a renamed item object |
|
|
208
|
+
| `file.rename` | WFRenameFileAction | Rename File; mutates the original file in place |
|
|
209
|
+
| `file.append` | WFAppendFileAction | Append to text file (was `appendfile` in older versions) |
|
|
210
|
+
|
|
211
|
+
### Web & URLs
|
|
212
|
+
|
|
213
|
+
| Identifier | Class | Description |
|
|
214
|
+
|------------|-------|-------------|
|
|
215
|
+
| `url` | WFURLAction | Create URL |
|
|
216
|
+
| `downloadurl` | WFDownloadURLAction | Get contents of URL |
|
|
217
|
+
| `openurl` | WFOpenURLAction | Open URL |
|
|
218
|
+
| `openxcallbackurl` | WFOpenXCallbackURLAction | Open x-callback-url (see `URL_SCHEMES.md`) |
|
|
219
|
+
| `urlencode` | WFURLEncodeAction | URL encode |
|
|
220
|
+
| `searchweb` | WFSearchWebAction | Search web |
|
|
221
|
+
|
|
222
|
+
### Apps & System
|
|
223
|
+
|
|
224
|
+
| Identifier | Class | Description |
|
|
225
|
+
|------------|-------|-------------|
|
|
226
|
+
| `openapp` | WFOpenAppAction | Open app |
|
|
227
|
+
| `getcurrentapp` | WFGetCurrentAppAction | Get current app |
|
|
228
|
+
| `runworkflow` | WFRunWorkflowAction | Run another shortcut |
|
|
229
|
+
| `runshellscript` | WFRunShellScriptAction | Run shell script |
|
|
230
|
+
| `getdevicedetails` | WFGetDeviceDetailsAction | Get device info |
|
|
231
|
+
| `getclipboard` | WFGetClipboardAction | Get clipboard |
|
|
232
|
+
| `setclipboard` | WFSetClipboardAction | Set clipboard |
|
|
233
|
+
|
|
234
|
+
### Lists & Data
|
|
235
|
+
|
|
236
|
+
| Identifier | Class | Description |
|
|
237
|
+
|------------|-------|-------------|
|
|
238
|
+
| `list` | WFListAction | Create list |
|
|
239
|
+
| `dictionary` | WFDictionaryAction | Create dictionary |
|
|
240
|
+
| `getitemfromlist` | WFGetItemFromListAction | Get item from list |
|
|
241
|
+
| `count` | WFCountAction | Count items |
|
|
242
|
+
|
|
243
|
+
### Numbers & Math
|
|
244
|
+
|
|
245
|
+
| Identifier | Class | Description |
|
|
246
|
+
|------------|-------|-------------|
|
|
247
|
+
| `number` | WFNumberAction | Create number |
|
|
248
|
+
|
|
249
|
+
### Date & Time
|
|
250
|
+
|
|
251
|
+
| Identifier | Class | Description |
|
|
252
|
+
|------------|-------|-------------|
|
|
253
|
+
| `date` | WFDateAction | Create date |
|
|
254
|
+
| `adjustdate` | WFAdjustDateAction | Adjust date |
|
|
255
|
+
| `converttimezone` | WFConvertTimeZoneAction | Convert timezone |
|
|
256
|
+
| `gettimebetweendates` | WFTimeUntilAction | Get time between dates |
|
|
257
|
+
| `delay` | WFDelayAction | Wait |
|
|
258
|
+
| `waittoreturn` | WFWaitToReturnAction | Wait to return |
|
|
259
|
+
|
|
260
|
+
#### Get Time Between Dates (`is.workflow.actions.gettimebetweendates`)
|
|
261
|
+
|
|
262
|
+
- Set `WFInput` to the target/end date as a `WFTextTokenString` placeholder.
|
|
263
|
+
- Set exactly one date operand: usually `WFTimeUntilFromDate`, also as a `WFTextTokenString` placeholder.
|
|
264
|
+
- To compare an event start date with now, add a **Date** action set to **Current Date** and reference that action output from `WFTimeUntilFromDate`. Do not put a `CurrentDate` magic token directly in `WFTimeUntilFromDate`; it imports as an empty/default date field.
|
|
265
|
+
- Do not use bare `WFTextTokenAttachment` for either date input. It can validate structurally but import as "First Date" / "Second Date" placeholders in Shortcuts.
|
|
266
|
+
|
|
267
|
+
### Calendar & Reminders
|
|
268
|
+
|
|
269
|
+
| Identifier | Class | Description |
|
|
270
|
+
|------------|-------|-------------|
|
|
271
|
+
| `addnewevent` | WFAddNewEventAction | Create event |
|
|
272
|
+
| `getupcomingevents` | WFGetUpcomingCalendarItemsAction | Get upcoming events |
|
|
273
|
+
| `addnewreminder` | WFAddNewReminderAction | Create reminder |
|
|
274
|
+
|
|
275
|
+
### Weather & Location
|
|
276
|
+
|
|
277
|
+
| Identifier | Class | Description |
|
|
278
|
+
|------------|-------|-------------|
|
|
279
|
+
| `weather.currentconditions` | WFGetCurrentWeatherConditionsAction | Current weather |
|
|
280
|
+
| `weather.forecast` | WFGetWeatherForecastAction | Weather forecast |
|
|
281
|
+
| `getcurrentlocation` | WFGetCurrentLocationAction | Current location |
|
|
282
|
+
| `location` | WFLocationAction | Create location |
|
|
283
|
+
| `getdirections` | WFGetDirectionsAction | Get directions |
|
|
284
|
+
| `getdistance` | WFGetDistanceAction | Get distance |
|
|
285
|
+
| `searchmaps` | WFSearchMapsAction | Search maps |
|
|
286
|
+
|
|
287
|
+
### Health
|
|
288
|
+
|
|
289
|
+
These actions are iOS/iPadOS Health actions. macOS Shortcuts can sync their plist XML, but cannot fully configure or run the Health UI. Use [HEALTHKIT.md](HEALTHKIT.md) for the verified parameter schemas.
|
|
290
|
+
|
|
291
|
+
| Identifier | Class | Description |
|
|
292
|
+
|------------|-------|-------------|
|
|
293
|
+
| `filter.health.quantity` | WFFindHealthSamplesAction | Find Health Samples |
|
|
294
|
+
| `properties.health.quantity` | WFGetDetailsOfHealthSampleAction | Get Details of Health Sample |
|
|
295
|
+
| `health.quantity.log` | WFLogHealthSampleAction | Log Health Sample |
|
|
296
|
+
| `health.workout.log` | WFLogWorkoutAction | Log Workout |
|
|
297
|
+
|
|
298
|
+
### Media
|
|
299
|
+
|
|
300
|
+
| Identifier | Class | Description |
|
|
301
|
+
|------------|-------|-------------|
|
|
302
|
+
| `takephoto` | WFTakePhotoAction | Take photo |
|
|
303
|
+
| `takevideo` | WFTakeVideoAction | Take video |
|
|
304
|
+
| `selectphoto` | WFSelectPhotoAction | Select photos |
|
|
305
|
+
| `filter.photos` | WFContentItemFilterAction | Find/filter photos (see FILTERS.md) |
|
|
306
|
+
| `savetocameraroll` | WFSaveToCameraRollAction | Save to camera roll |
|
|
307
|
+
| `deletephotos` | WFDeletePhotosAction | Delete photos (**uses `photos` param, not `WFInput`**) |
|
|
308
|
+
| `playmusic` | WFPlayMusicAction | Play music |
|
|
309
|
+
| `recordaudio` | WFRecordAudioAction | Record audio |
|
|
310
|
+
| `playsound` | WFPlaySoundAction | Play sound |
|
|
311
|
+
|
|
312
|
+
### Images
|
|
313
|
+
|
|
314
|
+
| Identifier | Class | Description |
|
|
315
|
+
|------------|-------|-------------|
|
|
316
|
+
| `overlaytext` | WFOverlayTextAction | Overlay text |
|
|
317
|
+
| `extracttextfromimage` | WFExtractTextFromImageAction | OCR |
|
|
318
|
+
|
|
319
|
+
### PDF
|
|
320
|
+
|
|
321
|
+
| Identifier | Class | Description |
|
|
322
|
+
|------------|-------|-------------|
|
|
323
|
+
| `makepdf` | WFMakePDFAction | Create PDF |
|
|
324
|
+
| `splitpdf` | WFSplitPDFAction | Split PDF |
|
|
325
|
+
| `compresspdf` | WFCompressPDFAction | Compress PDF |
|
|
326
|
+
| `gettextfrompdf` | WFGetTextFromPDFAction | Extract text from PDF |
|
|
327
|
+
| `makeimagefrompdfpage` | WFMakeImageFromPDFPageAction | PDF page to image |
|
|
328
|
+
|
|
329
|
+
### Sharing & Communication
|
|
330
|
+
|
|
331
|
+
| Identifier | Class | Description |
|
|
332
|
+
|------------|-------|-------------|
|
|
333
|
+
| `share` | WFShareAction | Share |
|
|
334
|
+
| `sendmessage` | WFSendMessageAction | Send message |
|
|
335
|
+
| `sendemail` | WFSendEmailAction | Send email |
|
|
336
|
+
| `contacts` | WFContactsAction | Get contacts |
|
|
337
|
+
| `selectcontacts` | WFSelectContactsAction | Select contacts |
|
|
338
|
+
|
|
339
|
+
### Settings
|
|
340
|
+
|
|
341
|
+
| Identifier | Class | Description |
|
|
342
|
+
|------------|-------|-------------|
|
|
343
|
+
| `setvolume` | WFSetVolumeAction | Set volume |
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
## Complete Identifier List
|
|
347
|
+
|
|
348
|
+
All 365 action identifiers (prefix `is.workflow.actions.` omitted):
|
|
349
|
+
|
|
350
|
+
```
|
|
351
|
+
addframetogif, addmusictoupnext, addnewcalendar, addnewcontact, addnewevent
|
|
352
|
+
addnewreminder, addquickreminder, address, addtoplaylist, adjustdate
|
|
353
|
+
airdropdocument, airplanemode.set, alert, announcenotifications.set, appearance
|
|
354
|
+
appendnote, appendvariable, ask, askllm, avairyeditphoto
|
|
355
|
+
base64encode, bluetooth.set, calculateexpression, cellulardata.set, choosefromlist
|
|
356
|
+
choosefrommenu, clearupnext, comment, compresspdf, conditional
|
|
357
|
+
connecttoservers, contacts, converttimezone, correctspelling, count
|
|
358
|
+
createplaylist, date, delay, deletephotos, deskconnect.send
|
|
359
|
+
detect.address, detect.contacts, detect.date, detect.dictionary, detect.emailaddress
|
|
360
|
+
detect.images, detect.link, detect.number, detect.phonenumber, detect.text
|
|
361
|
+
detectlanguage, dictatetext, dictionary, dismisssiri, display.always-on.set
|
|
362
|
+
displaysleep, dnd.getfocus, dnd.set, documentpicker.open, documentpicker.save
|
|
363
|
+
downloadurl, dropbox.appendfile, dropbox.open, dropbox.savefile, ejectdisk
|
|
364
|
+
email, encodemedia, evernote.append, evernote.delete, evernote.get
|
|
365
|
+
evernote.getlink, evernote.new, exit, exportsong, extracttextfromimage
|
|
366
|
+
file, file.append, file.createfolder, file.delete, file.getfoldercontents
|
|
367
|
+
file.getlink, file.label, file.move, file.rename, file.reveal
|
|
368
|
+
file.select, filter.apps, filter.articles, filter.calendarevents, filter.contacts
|
|
369
|
+
filter.displays, filter.eventattendees, filter.files, filter.health.quantity
|
|
370
|
+
filter.images, filter.locations, filter.music, filter.notes, filter.photos
|
|
371
|
+
filter.reminders, filter.windows
|
|
372
|
+
finder.getselectedfiles, flashlight, format.date, format.filesize, format.number
|
|
373
|
+
generatebarcode, get.playlist, getarticle, getbatterylevel, getclassaction
|
|
374
|
+
getclipboard, getcurrentapp, getcurrentlocation, getcurrentsong, getdevicedetails
|
|
375
|
+
getdirections, getdistance, getepisodesforpodcast, getframesfromimage, gethalfwaypoint
|
|
376
|
+
gethomeaccessorystate, gethtmlfromrichtext, getipaddress, getitemfromlist, getitemname
|
|
377
|
+
getitemtype, getlastphoto, getlastscreenshot, getlastvideo, getlatestbursts
|
|
378
|
+
getlatestlivephotos, getlatestphotoimport, getmapslink, getmarkdownfromrichtext, getmyworkflows
|
|
379
|
+
getnameofemoji, getonscreencontent, getparentdirectory, getparkedcarlocation, getpodcastsfromlibrary
|
|
380
|
+
getrichtextfromhtml, getrichtextfrommarkdown, gettext, gettextfrompdf, gettimebetweendates
|
|
381
|
+
gettraveltime, gettypeaction, getupcomingevents, getupcomingreminders, geturlcomponent
|
|
382
|
+
getvalueforkey, getvariable, getwebpagecontents, getwifi, giphy
|
|
383
|
+
goodreader.open, handoff, handoffplayback, hash, health.quantity.log
|
|
384
|
+
health.workout.log, hide.app, homeaccessory, image.combine, image.convert
|
|
385
|
+
image.convert.finder, image.crop, image.flip, image.mask, image.removebackground
|
|
386
|
+
image.resize, image.rotate, imgur.upload, importaudiofiles, input
|
|
387
|
+
instapaper.add, instapaper.get, intercom, list, listeningmode.set
|
|
388
|
+
location, lock.app, lockscreen, logout, lowpowermode.set
|
|
389
|
+
makediskimage, makegif, makeimagefrompdfpage, makeimagefromrichtext, makepdf
|
|
390
|
+
makespokenaudiofromtext, makevideofromgif, makezip, math, measurement.convert
|
|
391
|
+
measurement.create, mountdiskimage, movewindow, nightshift.set, nothing
|
|
392
|
+
notification, number, number.random, openapp, openin
|
|
393
|
+
openpasswords, openurl, openxcallbackurl, orientationlock.set, output
|
|
394
|
+
overlayimageonimage, overlaytext, pausemusic, personalhotspot.password.get, personalhotspot.password.set
|
|
395
|
+
personalhotspot.set, phonenumber, photos.createalbum, pinboard.add, pinboard.get
|
|
396
|
+
playmusic, playpodcast, playsound, pocket.add, pocket.get
|
|
397
|
+
podcasts.subscribe, posters.get, posters.switch, postonfacebook, previewdocument
|
|
398
|
+
print, properties.appearance, properties.appstore, properties.articles, properties.calendarevents
|
|
399
|
+
properties.contacts, properties.eventattendees, properties.files, properties.health.quantity
|
|
400
|
+
properties.images, properties.itunesartist, properties.itunesstore, properties.locations
|
|
401
|
+
properties.music, properties.parkedcar, properties.podcast, properties.podcastshow
|
|
402
|
+
properties.reminders, properties.ridestatus, properties.safariwebpage, properties.shazam
|
|
403
|
+
properties.trello, properties.ulysses.sheet, properties.weather.conditions, properties.workflow, quit.app
|
|
404
|
+
readinglist, reboot, recordaudio, reminders.showlist, removeevents
|
|
405
|
+
removefromalbum, removereminders, repeat.count, repeat.each, resizewindow
|
|
406
|
+
returntohomescreen, ride.requestride, round, rss, rss.extract
|
|
407
|
+
runapplescript, runextension, runjavascriptforautomation, runjavascriptonwebpage, runshellscript
|
|
408
|
+
runsshscript, runworkflow, safari.geturl, savetocameraroll, scanbarcode
|
|
409
|
+
searchappstore, searchitunes, searchlocalbusinesses, searchmaps, searchpodcasts
|
|
410
|
+
searchweb, seek, selectcontacts, selectemail, selectphone
|
|
411
|
+
selectphoto, sendemail, sendmessage, setairdropreceiving, setbrightness
|
|
412
|
+
setclipboard, setitemname, setparkedcar, setplaybackdestination, setters.calendarevents
|
|
413
|
+
setters.contacts, setters.reminders, setvalueforkey, setvariable, setvolume
|
|
414
|
+
share, shazamMedia, showdefinition, showinblindsquare, showincalendar
|
|
415
|
+
showinstore, shownote, showresult, showwebpage, silenceunknowncallers.set
|
|
416
|
+
skipback, skipforward, sleep, speaktext, splitpdf
|
|
417
|
+
splitscreen, spotlightsearch, stagemanager.set, startscreensaver, statistics
|
|
418
|
+
takephoto, takescreenshot, takevideo, text.changecase, text.combine
|
|
419
|
+
text.match, text.match.getgroup, text.replace, text.split, text.translate
|
|
420
|
+
text.trimwhitespace, timer.start, todoist.add, trello.add.board, trello.add.card
|
|
421
|
+
trello.add.list, trello.get, trimvideo, truetone.set, tumblr.post
|
|
422
|
+
tweet, unzip, url, url.expand, url.getheaders
|
|
423
|
+
urlencode, venmo.pay, venmo.request, vibrate, viewresult
|
|
424
|
+
vpn.set, waittoreturn, wallpaper.set, watchmedo, weather.currentconditions
|
|
425
|
+
weather.forecast, wifi.set, wordpress.post
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
---
|
|
429
|
+
|
|
430
|
+
## Common Parameter Patterns
|
|
431
|
+
|
|
432
|
+
### Text Parameters
|
|
433
|
+
```xml
|
|
434
|
+
<key>WFTextActionText</key>
|
|
435
|
+
<string>Your text here</string>
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### Variable Reference Parameters
|
|
439
|
+
```xml
|
|
440
|
+
<key>Text</key>
|
|
441
|
+
<dict>
|
|
442
|
+
<key>Value</key>
|
|
443
|
+
<dict>
|
|
444
|
+
<key>attachmentsByRange</key>
|
|
445
|
+
<dict>
|
|
446
|
+
<key>{0, 1}</key>
|
|
447
|
+
<dict>
|
|
448
|
+
<key>OutputUUID</key>
|
|
449
|
+
<string>SOURCE-UUID</string>
|
|
450
|
+
<key>OutputName</key>
|
|
451
|
+
<string>Text</string>
|
|
452
|
+
<key>Type</key>
|
|
453
|
+
<string>ActionOutput</string>
|
|
454
|
+
</dict>
|
|
455
|
+
</dict>
|
|
456
|
+
<key>string</key>
|
|
457
|
+
<string></string>
|
|
458
|
+
</dict>
|
|
459
|
+
<key>WFSerializationType</key>
|
|
460
|
+
<string>WFTextTokenString</string>
|
|
461
|
+
</dict>
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
### Boolean Parameters
|
|
465
|
+
```xml
|
|
466
|
+
<key>WFSomeOption</key>
|
|
467
|
+
<true/>
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
### Number Parameters
|
|
471
|
+
```xml
|
|
472
|
+
<key>WFRepeatCount</key>
|
|
473
|
+
<integer>5</integer>
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
### Enum Parameters
|
|
477
|
+
```xml
|
|
478
|
+
<key>WFHTTPMethod</key>
|
|
479
|
+
<string>GET</string>
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
---
|
|
483
|
+
|
|
484
|
+
## Action-Specific Parameters
|
|
485
|
+
|
|
486
|
+
### Get Contents of URL (`is.workflow.actions.downloadurl`)
|
|
487
|
+
|
|
488
|
+
The `downloadurl` action (WFDownloadURLAction) makes HTTP requests. It supports various methods, headers, and body types.
|
|
489
|
+
|
|
490
|
+
#### Basic Parameters
|
|
491
|
+
|
|
492
|
+
| Parameter | Type | Description |
|
|
493
|
+
|-----------|------|-------------|
|
|
494
|
+
| `UUID` | String | Unique identifier for variable references |
|
|
495
|
+
| `WFURL` | Variable ref or string | The URL to request |
|
|
496
|
+
| `WFHTTPMethod` | String | HTTP method: `GET`, `POST`, `PUT`, `PATCH`, `DELETE` |
|
|
497
|
+
| `WFHTTPBodyType` | String | Body type: `JSON`, `Form`, `File` |
|
|
498
|
+
|
|
499
|
+
#### Headers (`WFHTTPHeaders`)
|
|
500
|
+
|
|
501
|
+
Headers use `WFDictionaryFieldValue` serialization with key-value items:
|
|
502
|
+
|
|
503
|
+
```xml
|
|
504
|
+
<key>WFHTTPHeaders</key>
|
|
505
|
+
<dict>
|
|
506
|
+
<key>Value</key>
|
|
507
|
+
<dict>
|
|
508
|
+
<key>WFDictionaryFieldValueItems</key>
|
|
509
|
+
<array>
|
|
510
|
+
<dict>
|
|
511
|
+
<key>WFItemType</key>
|
|
512
|
+
<integer>0</integer>
|
|
513
|
+
<key>WFKey</key>
|
|
514
|
+
<dict>
|
|
515
|
+
<key>Value</key>
|
|
516
|
+
<dict>
|
|
517
|
+
<key>string</key>
|
|
518
|
+
<string>Content-Type</string>
|
|
519
|
+
</dict>
|
|
520
|
+
<key>WFSerializationType</key>
|
|
521
|
+
<string>WFTextTokenString</string>
|
|
522
|
+
</dict>
|
|
523
|
+
<key>WFValue</key>
|
|
524
|
+
<dict>
|
|
525
|
+
<key>Value</key>
|
|
526
|
+
<dict>
|
|
527
|
+
<key>string</key>
|
|
528
|
+
<string>application/json</string>
|
|
529
|
+
</dict>
|
|
530
|
+
<key>WFSerializationType</key>
|
|
531
|
+
<string>WFTextTokenString</string>
|
|
532
|
+
</dict>
|
|
533
|
+
</dict>
|
|
534
|
+
</array>
|
|
535
|
+
</dict>
|
|
536
|
+
<key>WFSerializationType</key>
|
|
537
|
+
<string>WFDictionaryFieldValue</string>
|
|
538
|
+
</dict>
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
#### JSON Body (`WFJSONValues`)
|
|
542
|
+
|
|
543
|
+
When `WFHTTPBodyType` is `JSON`, use `WFJSONValues` for key-value pairs:
|
|
544
|
+
|
|
545
|
+
```xml
|
|
546
|
+
<key>WFJSONValues</key>
|
|
547
|
+
<dict>
|
|
548
|
+
<key>Value</key>
|
|
549
|
+
<dict>
|
|
550
|
+
<key>WFDictionaryFieldValueItems</key>
|
|
551
|
+
<array>
|
|
552
|
+
<dict>
|
|
553
|
+
<key>WFItemType</key>
|
|
554
|
+
<integer>0</integer>
|
|
555
|
+
<key>WFKey</key>
|
|
556
|
+
<dict>
|
|
557
|
+
<key>Value</key>
|
|
558
|
+
<dict>
|
|
559
|
+
<key>string</key>
|
|
560
|
+
<string>prompt</string>
|
|
561
|
+
</dict>
|
|
562
|
+
<key>WFSerializationType</key>
|
|
563
|
+
<string>WFTextTokenString</string>
|
|
564
|
+
</dict>
|
|
565
|
+
<key>WFValue</key>
|
|
566
|
+
<!-- Can be a static string or variable reference -->
|
|
567
|
+
<dict>
|
|
568
|
+
<key>Value</key>
|
|
569
|
+
<dict>
|
|
570
|
+
<key>attachmentsByRange</key>
|
|
571
|
+
<dict>
|
|
572
|
+
<key>{0, 1}</key>
|
|
573
|
+
<dict>
|
|
574
|
+
<key>OutputUUID</key>
|
|
575
|
+
<string>ASK-ACTION-UUID</string>
|
|
576
|
+
<key>OutputName</key>
|
|
577
|
+
<string>Provided Input</string>
|
|
578
|
+
<key>Type</key>
|
|
579
|
+
<string>ActionOutput</string>
|
|
580
|
+
</dict>
|
|
581
|
+
</dict>
|
|
582
|
+
<key>string</key>
|
|
583
|
+
<string></string>
|
|
584
|
+
</dict>
|
|
585
|
+
<key>WFSerializationType</key>
|
|
586
|
+
<string>WFTextTokenString</string>
|
|
587
|
+
</dict>
|
|
588
|
+
</dict>
|
|
589
|
+
</array>
|
|
590
|
+
</dict>
|
|
591
|
+
<key>WFSerializationType</key>
|
|
592
|
+
<string>WFDictionaryFieldValue</string>
|
|
593
|
+
</dict>
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
#### Form Body (`WFFormValues`)
|
|
597
|
+
|
|
598
|
+
When `WFHTTPBodyType` is `Form`, use `WFFormValues` (same structure as `WFJSONValues`).
|
|
599
|
+
|
|
600
|
+
#### File Body (`WFRequestVariable`)
|
|
601
|
+
|
|
602
|
+
When `WFHTTPBodyType` is `File`, use `WFRequestVariable` to reference file data:
|
|
603
|
+
|
|
604
|
+
```xml
|
|
605
|
+
<key>WFRequestVariable</key>
|
|
606
|
+
<dict>
|
|
607
|
+
<key>Value</key>
|
|
608
|
+
<dict>
|
|
609
|
+
<key>attachmentsByRange</key>
|
|
610
|
+
<dict>
|
|
611
|
+
<key>{0, 1}</key>
|
|
612
|
+
<dict>
|
|
613
|
+
<key>OutputUUID</key>
|
|
614
|
+
<string>FILE-SOURCE-UUID</string>
|
|
615
|
+
<key>OutputName</key>
|
|
616
|
+
<string>File</string>
|
|
617
|
+
<key>Type</key>
|
|
618
|
+
<string>ActionOutput</string>
|
|
619
|
+
</dict>
|
|
620
|
+
</dict>
|
|
621
|
+
<key>string</key>
|
|
622
|
+
<string></string>
|
|
623
|
+
</dict>
|
|
624
|
+
<key>WFSerializationType</key>
|
|
625
|
+
<string>WFTextTokenString</string>
|
|
626
|
+
</dict>
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
#### WFItemType Values
|
|
630
|
+
|
|
631
|
+
The `WFItemType` field in dictionary items indicates the value type:
|
|
632
|
+
|
|
633
|
+
| Value | Type |
|
|
634
|
+
|-------|------|
|
|
635
|
+
| 0 | Text/String |
|
|
636
|
+
| 1 | Number |
|
|
637
|
+
| 2 | Array |
|
|
638
|
+
| 3 | Dictionary |
|
|
639
|
+
| 4 | Boolean |
|
|
640
|
+
|
|
641
|
+
---
|
|
642
|
+
|
|
643
|
+
### Find Photos (`is.workflow.actions.filter.photos`)
|
|
644
|
+
|
|
645
|
+
Searches the photo library with filters. See [FILTERS.md](./FILTERS.md) for complete filter documentation.
|
|
646
|
+
|
|
647
|
+
#### Key Parameters
|
|
648
|
+
|
|
649
|
+
| Parameter | Type | Description |
|
|
650
|
+
|-----------|------|-------------|
|
|
651
|
+
| `UUID` | String | Action identifier for output reference |
|
|
652
|
+
| `WFContentItemFilter` | Dict | Filter conditions (see FILTERS.md) |
|
|
653
|
+
| `WFContentItemSortProperty` | String | Sort by: `Date Taken`, `Creation Date`, etc. |
|
|
654
|
+
| `WFContentItemSortOrder` | String | `Latest First` or `Oldest First` |
|
|
655
|
+
| `WFContentItemLimitEnabled` | Boolean | Enable result limit |
|
|
656
|
+
| `WFContentItemLimitNumber` | Integer | Max results to return |
|
|
657
|
+
|
|
658
|
+
#### Filter Properties for Photos
|
|
659
|
+
|
|
660
|
+
| Property | Type | Notes |
|
|
661
|
+
|----------|------|-------|
|
|
662
|
+
| `Is a Screenshot` | Boolean | Use this for screenshots, NOT media_type |
|
|
663
|
+
| `Media Type` | Enum | ONLY: `Image`, `Video`, `Live Photo` |
|
|
664
|
+
| `Date Taken` | Date | Use operators 1002 (is today), 1001 (is in the last) |
|
|
665
|
+
| `Album` | String | Album name |
|
|
666
|
+
| `Is Favorite` | Boolean | Favorited photos |
|
|
667
|
+
| `Is Hidden` | Boolean | Hidden photos |
|
|
668
|
+
|
|
669
|
+
#### Common Mistake: Screenshot Filtering
|
|
670
|
+
|
|
671
|
+
**WRONG:** Using `Media Type` = `Screenshot` - This value is invalid!
|
|
672
|
+
|
|
673
|
+
**CORRECT:** Use `Is a Screenshot` = `true` (boolean filter)
|
|
674
|
+
|
|
675
|
+
---
|
|
676
|
+
|
|
677
|
+
### Delete Photos (`is.workflow.actions.deletephotos`)
|
|
678
|
+
|
|
679
|
+
Deletes photos from the library.
|
|
680
|
+
|
|
681
|
+
#### Critical: Parameter Key
|
|
682
|
+
|
|
683
|
+
**The parameter key is `photos` (lowercase), NOT `WFInput`!**
|
|
684
|
+
|
|
685
|
+
This is an exception to the normal pattern where most actions use `WFInput`.
|
|
686
|
+
|
|
687
|
+
#### Correct Structure
|
|
688
|
+
|
|
689
|
+
```xml
|
|
690
|
+
<dict>
|
|
691
|
+
<key>WFWorkflowActionIdentifier</key>
|
|
692
|
+
<string>is.workflow.actions.deletephotos</string>
|
|
693
|
+
<key>WFWorkflowActionParameters</key>
|
|
694
|
+
<dict>
|
|
695
|
+
<key>UUID</key>
|
|
696
|
+
<string>DELETE-UUID</string>
|
|
697
|
+
<key>photos</key> <!-- NOT WFInput! -->
|
|
698
|
+
<dict>
|
|
699
|
+
<key>Value</key>
|
|
700
|
+
<dict>
|
|
701
|
+
<key>OutputName</key>
|
|
702
|
+
<string>Photos</string>
|
|
703
|
+
<key>OutputUUID</key>
|
|
704
|
+
<string>FIND-PHOTOS-UUID</string>
|
|
705
|
+
<key>Type</key>
|
|
706
|
+
<string>ActionOutput</string>
|
|
707
|
+
</dict>
|
|
708
|
+
<key>WFSerializationType</key>
|
|
709
|
+
<string>WFTextTokenAttachment</string>
|
|
710
|
+
</dict>
|
|
711
|
+
</dict>
|
|
712
|
+
</dict>
|
|
713
|
+
```
|