@picked/client 0.0.101-next.2 → 0.0.101-next.3

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 (147) hide show
  1. package/README.md +34 -158
  2. package/dist/{api-AaQeg3Ij.cjs → api-9o_emCM5.cjs} +1 -1
  3. package/dist/{api-BlRFU0Fi.js → api-BbQt8aW3.js} +1 -1
  4. package/dist/cjs/index.js +2 -2
  5. package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
  6. package/dist/cjs/server/index.js +1 -1
  7. package/dist/esm/index.js +2 -2
  8. package/dist/esm/plugins/dynamic-experiences/index.js +2 -2
  9. package/dist/esm/server/index.js +2 -2
  10. package/dist/{plugin-CVD2TnRC.cjs → plugin-I8_6ncy_.cjs} +1 -1
  11. package/dist/{plugin-DhznDG-h.js → plugin-uZJ45vK6.js} +2 -2
  12. package/dist/{preview-unavailable-xWLCr93y.cjs → preview-unavailable-BUNxTYLe.cjs} +1 -1
  13. package/dist/{preview-unavailable-mW4Pj3Ph.js → preview-unavailable-BYFD2a58.js} +1 -1
  14. package/dist/{provider-zag5m5GH.cjs → provider-Bzi_Kb-n.cjs} +1 -1
  15. package/dist/{provider-COb_V-yq.js → provider-CQKp0iUJ.js} +1 -1
  16. package/package.json +5 -5
  17. package/dist/docs/_root.css +0 -101
  18. package/dist/docs/explanation/conditions-and-the-logic-engine.md +0 -94
  19. package/dist/docs/explanation/content-references.md +0 -99
  20. package/dist/docs/explanation/feature-flag-allocation.md +0 -218
  21. package/dist/docs/explanation/how-picked-works.md +0 -124
  22. package/dist/docs/explanation/how-pickedql-works.md +0 -76
  23. package/dist/docs/explanation/pages-and-flows.md +0 -64
  24. package/dist/docs/explanation/the-content-model.md +0 -87
  25. package/dist/docs/explanation/the-two-apis.md +0 -68
  26. package/dist/docs/explanation/why-server-side-rendering.md +0 -76
  27. package/dist/docs/explanation/workspaces-and-versions.md +0 -71
  28. package/dist/docs/how-to/add-a-step-field-or-action.md +0 -43
  29. package/dist/docs/how-to/analytics/index.md +0 -316
  30. package/dist/docs/how-to/archive-or-delete-a-workspace.md +0 -46
  31. package/dist/docs/how-to/authenticate-the-cli.md +0 -101
  32. package/dist/docs/how-to/authenticate-with-a-magic-link.md +0 -47
  33. package/dist/docs/how-to/authenticate-with-a-password.md +0 -59
  34. package/dist/docs/how-to/authenticate-with-an-api-key.md +0 -51
  35. package/dist/docs/how-to/authenticate-with-oauth.md +0 -40
  36. package/dist/docs/how-to/build-a-flow.md +0 -93
  37. package/dist/docs/how-to/call-an-external-api-from-a-workflow.md +0 -102
  38. package/dist/docs/how-to/connect-the-mcp-server.md +0 -46
  39. package/dist/docs/how-to/create-a-content-entry.md +0 -48
  40. package/dist/docs/how-to/create-a-project.md +0 -29
  41. package/dist/docs/how-to/create-an-experience.md +0 -42
  42. package/dist/docs/how-to/create-and-revoke-an-api-key.md +0 -42
  43. package/dist/docs/how-to/debug-with-the-chrome-extension.md +0 -57
  44. package/dist/docs/how-to/define-a-page-layout.md +0 -46
  45. package/dist/docs/how-to/fill-and-publish-a-page.md +0 -66
  46. package/dist/docs/how-to/install-the-gtm-template.md +0 -84
  47. package/dist/docs/how-to/install-the-sdk.md +0 -93
  48. package/dist/docs/how-to/install-the-vite-plugin.md +0 -69
  49. package/dist/docs/how-to/invite-and-remove-members.md +0 -35
  50. package/dist/docs/how-to/point-one-entry-at-another.md +0 -61
  51. package/dist/docs/how-to/preview-a-workspace.md +0 -28
  52. package/dist/docs/how-to/publish-a-workspace.md +0 -30
  53. package/dist/docs/how-to/read-a-feature-flag.md +0 -113
  54. package/dist/docs/how-to/read-a-referenced-entry.md +0 -109
  55. package/dist/docs/how-to/register-a-component.md +0 -55
  56. package/dist/docs/how-to/register-an-action-handler.md +0 -85
  57. package/dist/docs/how-to/register-an-api-that-uses-oauth2.md +0 -107
  58. package/dist/docs/how-to/render-a-step-form.md +0 -131
  59. package/dist/docs/how-to/render-an-unpublished-preview.md +0 -41
  60. package/dist/docs/how-to/retry-a-failed-call-with-a-loop.md +0 -81
  61. package/dist/docs/how-to/reuse-a-section.md +0 -53
  62. package/dist/docs/how-to/reuse-a-step-field-or-action.md +0 -28
  63. package/dist/docs/how-to/roll-back-a-published-version.md +0 -26
  64. package/dist/docs/how-to/run-an-ab-test.md +0 -49
  65. package/dist/docs/how-to/run-code-on-a-form-submission.md +0 -125
  66. package/dist/docs/how-to/server-render-a-page.md +0 -81
  67. package/dist/docs/how-to/set-a-content-security-policy.md +0 -32
  68. package/dist/docs/how-to/set-up-mfa.md +0 -113
  69. package/dist/docs/how-to/switch-workspaces.md +0 -122
  70. package/dist/docs/how-to/upload-and-use-an-asset.mdx +0 -73
  71. package/dist/docs/how-to/validate-a-field.md +0 -52
  72. package/dist/docs/how-to/wait-for-an-action-response.md +0 -182
  73. package/dist/docs/how-to/write-a-condition.md +0 -45
  74. package/dist/docs/how-to/write-a-predicate.md +0 -60
  75. package/dist/docs/index.md +0 -59
  76. package/dist/docs/reference/dashboard/actions.mdx +0 -56
  77. package/dist/docs/reference/dashboard/api-keys.mdx +0 -38
  78. package/dist/docs/reference/dashboard/conditions.mdx +0 -42
  79. package/dist/docs/reference/dashboard/content/asset-library.mdx +0 -63
  80. package/dist/docs/reference/dashboard/content/blocks.mdx +0 -57
  81. package/dist/docs/reference/dashboard/content/content-entries.mdx +0 -95
  82. package/dist/docs/reference/dashboard/content/models.mdx +0 -108
  83. package/dist/docs/reference/dashboard/content/pages.mdx +0 -61
  84. package/dist/docs/reference/dashboard/experiences.mdx +0 -51
  85. package/dist/docs/reference/dashboard/external-apis.md +0 -169
  86. package/dist/docs/reference/dashboard/features.mdx +0 -154
  87. package/dist/docs/reference/dashboard/fields.mdx +0 -106
  88. package/dist/docs/reference/dashboard/flow-builder/canvas.mdx +0 -58
  89. package/dist/docs/reference/dashboard/flow-builder/condition-builder.md +0 -57
  90. package/dist/docs/reference/dashboard/flow-builder/keyboard-shortcuts.md +0 -72
  91. package/dist/docs/reference/dashboard/flow-builder/nodes.md +0 -63
  92. package/dist/docs/reference/dashboard/labels.md +0 -321
  93. package/dist/docs/reference/dashboard/lead-search.md +0 -224
  94. package/dist/docs/reference/dashboard/projects.mdx +0 -44
  95. package/dist/docs/reference/dashboard/reports.mdx +0 -43
  96. package/dist/docs/reference/dashboard/steps.mdx +0 -37
  97. package/dist/docs/reference/dashboard/team-management.md +0 -29
  98. package/dist/docs/reference/dashboard/workflow-runs.md +0 -142
  99. package/dist/docs/reference/dashboard/workflow-templates.md +0 -182
  100. package/dist/docs/reference/dashboard/workflow-test-runs.md +0 -77
  101. package/dist/docs/reference/dashboard/workspace-versioning.mdx +0 -30
  102. package/dist/docs/reference/dashboard/workspaces.mdx +0 -76
  103. package/dist/docs/reference/delivery-api/experience-content.md +0 -152
  104. package/dist/docs/reference/delivery-api/index.md +0 -45
  105. package/dist/docs/reference/delivery-api/preview-caching-crawling.md +0 -79
  106. package/dist/docs/reference/delivery-api/project-config.md +0 -65
  107. package/dist/docs/reference/delivery-api/workspace-schema.md +0 -107
  108. package/dist/docs/reference/glossary.md +0 -201
  109. package/dist/docs/reference/management-api/authentication.md +0 -87
  110. package/dist/docs/reference/management-api/authorization-and-scopes.md +0 -291
  111. package/dist/docs/reference/management-api/error-handling.md +0 -232
  112. package/dist/docs/reference/management-api/pagination.md +0 -192
  113. package/dist/docs/reference/pickedql/data-sources.md +0 -174
  114. package/dist/docs/reference/pickedql/dimensions.md +0 -103
  115. package/dist/docs/reference/pickedql/filtering.md +0 -64
  116. package/dist/docs/reference/pickedql/index.md +0 -18
  117. package/dist/docs/reference/pickedql/schema.md +0 -172
  118. package/dist/docs/reference/pickedql/virtual-functions.md +0 -248
  119. package/dist/docs/reference/sdk/actions.md +0 -154
  120. package/dist/docs/reference/sdk/analytics-events.md +0 -453
  121. package/dist/docs/reference/sdk/conditions.md +0 -147
  122. package/dist/docs/reference/sdk/content-security-policy.md +0 -21
  123. package/dist/docs/reference/sdk/content.md +0 -253
  124. package/dist/docs/reference/sdk/experiences.md +0 -51
  125. package/dist/docs/reference/sdk/features.md +0 -256
  126. package/dist/docs/reference/sdk/fields.md +0 -255
  127. package/dist/docs/reference/sdk/index.md +0 -68
  128. package/dist/docs/reference/sdk/plugins/create-experience.md +0 -123
  129. package/dist/docs/reference/sdk/plugins/dynamic-experiences.md +0 -74
  130. package/dist/docs/reference/sdk/plugins/index.md +0 -29
  131. package/dist/docs/reference/sdk/plugins/window-object.md +0 -25
  132. package/dist/docs/reference/sdk/predicates.md +0 -43
  133. package/dist/docs/reference/sdk/ssr/index.md +0 -33
  134. package/dist/docs/reference/sdk/ssr/rendering-and-hydration.md +0 -103
  135. package/dist/docs/reference/sdk/ssr/serialize.md +0 -80
  136. package/dist/docs/reference/sdk/ssr/slots-and-placements.md +0 -113
  137. package/dist/docs/reference/sdk/steps.md +0 -86
  138. package/dist/docs/reference/sdk/type-generation.md +0 -265
  139. package/dist/docs/reference/tools/chrome-extension.md +0 -16
  140. package/dist/docs/reference/tools/cli.md +0 -292
  141. package/dist/docs/reference/tools/image-optimisation-service.md +0 -104
  142. package/dist/docs/reference/tools/mcp.md +0 -136
  143. package/dist/docs/reference/tools/vite-plugin.md +0 -163
  144. package/dist/docs/tutorials/first-api-call.md +0 -235
  145. package/dist/docs/tutorials/first-experience-in-the-dashboard.mdx +0 -143
  146. package/dist/docs/tutorials/first-experience.mdx +0 -254
  147. package/dist/docs/tutorials/first-server-rendered-page.mdx +0 -186
@@ -1,44 +0,0 @@
1
- ---
2
- type: reference
3
- layout: docs
4
- ---
5
-
6
- import { Screenshot } from '../../../../components/Screenshot'
7
-
8
- # Projects
9
-
10
- A project is one site or one application that you want to measure with Picked. Each
11
- project has its own experiences, content, and options.
12
-
13
- <Screenshot
14
- route="/{orgSlug}"
15
- alt="The organization home page on the Picked dashboard, with the projects in an organization"
16
- />
17
-
18
- ## Workspaces
19
-
20
- Each project holds one or more [Workspaces](/reference/dashboard/workspaces). In a workspace you set the
21
- options for an experience and you see a preview of it before you make it live.
22
-
23
- ## Project home
24
-
25
- When you open a project, you land on the project home page. It shows your SDK
26
- snippet and a list of the setup tasks that are still open.
27
-
28
- Copy the snippet and add it to your site. The snippet connects your site to the
29
- project and lets Picked serve experiences to it. See
30
- [SDK Installation](/reference/sdk) for the setup detail.
31
-
32
- ## Project navigation
33
-
34
- The sidebar shows the sections of your project: **Feature flags**, **Fields**, **Flows**,
35
- **Pages**, and **Workspace settings**. **Flows** holds **Step Layouts**, and **Pages**
36
- holds **Page Layouts** and **Sections**.
37
-
38
- A step, an action, and a condition have no sidebar entry. You reach all three from the
39
- library in the flow builder, because each one belongs to a flow.
40
-
41
- ## Related
42
-
43
- - [How to create a project](/how-to/create-a-project)
44
- - [How to install the SDK](/how-to/install-the-sdk)
@@ -1,43 +0,0 @@
1
- ---
2
- type: reference
3
- layout: docs
4
- ---
5
-
6
- import { Screenshot } from '../../../../components/Screenshot'
7
-
8
- # Reports
9
-
10
- A report is an embedded Metabase dashboard or question, attached to a Picked project. Use
11
- a report to see how your visitors move through your experiences and your feature flags.
12
-
13
- <Screenshot
14
- route="/{orgSlug}/{projectId}/reports"
15
- alt="The reports list for a project on the Picked dashboard"
16
- />
17
-
18
- ## Report options
19
-
20
- | Option | Description |
21
- | --- | --- |
22
- | **Report name** | The name that the reports list shows. |
23
- | **Description** | An optional note about what the report shows. |
24
- | **Metabase report type** | `Dashboard` or `Question`. |
25
- | **Metabase report ID** | The numeric ID from the Metabase URL. |
26
- | **Display order** | Optional. It controls the position of the report in the list. |
27
-
28
- The create form has a link that opens the report, so you can check that the ID is
29
- correct before you save.
30
-
31
- ## Permissions
32
-
33
- A member needs permission in the organization to create, edit, or delete a report. The
34
- dashboard hides those actions from a member without it.
35
-
36
- ## Delete a report
37
-
38
- Open the report settings page and click **Delete report**. You cannot reverse a delete.
39
-
40
- ## Related
41
-
42
- - [Analytics queries](/how-to/analytics) — query the same data with SQL.
43
- - [About PickedQL](/explanation/how-pickedql-works) — what the query layer expands.
@@ -1,37 +0,0 @@
1
- ---
2
- type: reference
3
- layout: docs
4
- ---
5
-
6
- import { Screenshot } from '../../../../components/Screenshot'
7
-
8
- # Steps
9
-
10
- A step is one screen or card that a visitor sees during an experience. Each step
11
- holds one or more fields. A field collects data or shows content.
12
-
13
- <Screenshot
14
- route="/{orgSlug}/{projectId}/workspaces/{workspaceId}/steps"
15
- alt="The steps list for a workspace on the Picked dashboard"
16
- />
17
-
18
- ## Set up a step
19
-
20
- **Name**: The name that the dashboard shows. Your visitors do not see it.
21
-
22
- **Key**: The identifier that your application uses for this step. Your
23
- visitors do not see it.
24
-
25
- **Layout Name**: The name of the component layout that renders this step. Examples
26
- are `card`, `modal`, and `fullscreen`.
27
-
28
- A step can also carry a **Step Layout**. A step layout is a reusable CMS schema, and
29
- it gives the step a Content Entry. See [Models](/reference/dashboard/content/models).
30
-
31
- ## Related
32
-
33
- - [How to add a step, a field, an action, or a condition](/how-to/add-a-step-field-or-action)
34
-
35
- - [How to build a flow](/how-to/build-a-flow) — add a step and assign fields to it.
36
- - [How to reuse a step, a field, or an action](/how-to/reuse-a-step-field-or-action)
37
- - [Models](/reference/dashboard/content/models) — the step layout schema.
@@ -1,29 +0,0 @@
1
- ---
2
- type: reference
3
- layout: docs
4
- ---
5
-
6
- # Team management
7
-
8
- Control who can reach your organization and what each person can do. An organization
9
- is the top-level container for your projects and members.
10
-
11
- ## Organizations
12
-
13
- An organization groups your projects, your members, and your settings. You can belong
14
- to more than one organization.
15
-
16
- To move between organizations, use the organization control at the top of the
17
- sidebar.
18
-
19
- ## Roles and permissions
20
-
21
- Each member holds a role, and the role controls what the member can reach. A role
22
- decides whether a member can create a project, edit an experience, control other
23
- members, or read a report.
24
-
25
- Give each member the smallest role that the work of that member needs.
26
-
27
- ## Related
28
-
29
- - [How to invite and remove members](/how-to/invite-and-remove-members)
@@ -1,142 +0,0 @@
1
- ---
2
- type: reference
3
- layout: docs
4
- ---
5
-
6
- # Workflow runs
7
-
8
- A run is one execution of a published workflow. An event or an action starts it. Picked
9
- records each run, each node that the run reached, and each lead that the run created or
10
- changed.
11
-
12
- ## Where runs show
13
-
14
- | Page | Address | Content |
15
- | ---- | ----------------------------------- | -------------------------------------------------------------------------------------------- |
16
- | Runs | `…/workflows/<workflow>/runs` | The runs of one workflow, the last run first. Open it with the **Runs** tab of the workflow. |
17
- | Run | `…/workflows/<workflow>/runs/<run>` | One run: its records, its tasks, its details and its labels. |
18
- | Lead | `…/leads/<lead>` | The **Workflow runs** card. It lists the runs that created or changed the lead. |
19
-
20
- A run starts only from a published version of the workspace. A change to a workflow that
21
- you did not publish does not start runs.
22
-
23
- ## Run status
24
-
25
- | Status | Meaning |
26
- | ----------- | ----------------------------------------------------------------------------------------------- |
27
- | `Running` | The run started and did not stop yet. A **Wait** node can keep a run in this status for days. |
28
- | `Completed` | Each node that the run reached did its work, or failed and the run continued on its error exit. |
29
- | `Failed` | A node failed. The run stopped at that node. The run shows the reason. |
30
-
31
- A tool node that fails with an edge on its error exit shows `Failed` on its task. The run
32
- continues on that edge only when the tool itself fails:
33
-
34
- - An External API call fails. Refer to the [External APIs reference](/reference/dashboard/external-apis#errors).
35
- - Another tool refuses the request. For example, a label value is not a number for a
36
- `number` label, or the lead does not exist. The tool also refuses a row with `increment`
37
- on a label that is not a `number` label. It refuses some project labels and run labels
38
- with a key in the format of a hash. Refer to the [Labels reference](/reference/dashboard/labels).
39
-
40
- When the tool refuses the request, the error record has the code `tool_failed` and a
41
- reason from the tool, for example `value_invalid_for_type`, `label_write_invalid` or
42
- `owner_not_found`.
43
-
44
- Other failures stop the run, with or without an edge on the error exit:
45
-
46
- - A required argument has no value.
47
- - An argument has a value that the tool does not accept:
48
- - The value has the wrong type.
49
- - The value is not one of the options.
50
- - A number is not in the range that the tool accepts.
51
- - A label namespace or key does not have the correct format.
52
- - Two labels have the same namespace and key.
53
- - A list of labels is empty.
54
- - A label row has `value` and `increment`, or neither.
55
- - A label row has `increment` and `onlyIfAbsent`, or `increment` and a type other than
56
- `number`.
57
- - An `expiresIn` is not a whole number from 1 to 31536000.
58
- - A template cannot be rendered.
59
- - The workflow does not have a scope that the tool needs.
60
- - The tool gives output that is not valid.
61
- - An error occurs in Picked.
62
-
63
- ## Visit cap
64
-
65
- A run can go back to a node that it reached before, on a loop. Each time that the run gets
66
- to a node is a visit. The visit cap is the maximum number of visits to one node in a run.
67
-
68
- | Setting | Value |
69
- | ------------- | ------------------------------------------------------------------ |
70
- | **Visit cap** | A number from 1 to 100. If you do not set it, the visit cap is 10. |
71
-
72
- Set the visit cap in the workflow settings. In the definition of the workflow, the field is
73
- `maxNodeVisits`.
74
-
75
- A node can get to the visit cap. If the run then gets to the node again, the run stops.
76
- The run shows `Failed`, with the code `loop_limit_reached` and the ID of the node. Refer to [How to retry a failed call with a loop](/how-to/retry-a-failed-call-with-a-loop).
77
-
78
- When you save a workflow, Picked refuses these loops:
79
-
80
- - A loop that does not have a sleep node on it.
81
- - A loop that does not have a condition node on it.
82
- - An edge from a node to the same node.
83
- - A loop with the **Action response** node on it.
84
-
85
- ## Records
86
-
87
- The **Records** card lists each lead that the run created or changed. It shows each lead
88
- one time.
89
-
90
- | Label | Meaning |
91
- | --------- | -------------------------------------------------------------------------------------------------- |
92
- | `Created` | A node of the run created the lead. This label replaces `Updated` for the same lead. |
93
- | `Updated` | A node of the run changed the lead or its labels. |
94
- | `Deleted` | A node of the run deleted the lead. This label replaces `Created` and `Updated` for the same lead. |
95
-
96
- When a lead does not exist now, the card shows `Deleted lead` and the ID of the lead,
97
- with no link.
98
-
99
- ## Tasks
100
-
101
- A task is one visit to a node. The **Tasks** card lists the tasks in the order that the
102
- run reached them. When the run visits a node more than one time, each visit is a task.
103
- A task of a later visit shows the number of the visit, such as `visit 2`.
104
-
105
- The card shows 50 tasks. **Show more tasks** adds the next 50.
106
-
107
- | Column | Value |
108
- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
109
- | Name | The tool of a tool node, or the kind of node: **Start**, **Condition** or **Wait**. |
110
- | Node | The ID of the node. It links to the node in the editor while the workflow has the node. |
111
- | Status | `Running`, `Succeeded` or `Failed`. |
112
- | Time | The time from the start of the task to its end. |
113
- | Operations | The leads and the labels that the task created, changed or removed, the first operation first. A label shows its namespace and its key. It never shows its value. |
114
-
115
- A condition task does not show which branch it chose.
116
-
117
- ## Labels
118
-
119
- The **Labels** card shows the labels of the run. A user with `ORGANIZATION_PROJECTS_UPDATE` can
120
- change, add and remove them. Refer to [Labels in the dashboard](/reference/dashboard/labels#labels-in-the-dashboard).
121
-
122
- ## Leads and runs
123
-
124
- A lead lists a run when a node of that run created the lead, set one of its labels, or
125
- removed one of its labels. A change to the labels of a lead is a change to the lead.
126
-
127
- The **Workflow runs** card shows 20 runs. **Show older runs** adds the next 20.
128
-
129
- ## Access
130
-
131
- | Surface | Scopes |
132
- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
133
- | Runs, Run | `ORGANIZATION_WORKSPACE_READ` and `ORGANIZATION_PROJECTS_READ` |
134
- | The labels of a run | `ORGANIZATION_PROJECTS_READ` to read them, and `ORGANIZATION_PROJECTS_UPDATE` to change them |
135
- | The **Runs** tab of the workflow | `ORGANIZATION_WORKSPACE_READ` and `ORGANIZATION_PROJECTS_READ`. Without these scopes, the workflow does not show the **Runs** tab. |
136
- | Workflow runs card | `ORGANIZATION_LEADS_READ` for the lead, and `ORGANIZATION_WORKSPACE_READ` and `ORGANIZATION_PROJECTS_READ` for its runs. Without the last two scopes, the card does not show. |
137
-
138
- ## Deleted workflows
139
-
140
- A run stays after you delete its workflow. The run page and the lead card show it as
141
- **Deleted workflow**. The **Runs** page of a deleted workflow does not exist, and the run
142
- page has no link to the editor.
@@ -1,182 +0,0 @@
1
- ---
2
- type: reference
3
- layout: docs
4
- ---
5
-
6
- # Workflow templates
7
-
8
- A template is text with `{{ … }}` in it. Picked fills it with data from the run before the
9
- node uses it. A tool node can have a template in each of its fields. A condition node can
10
- have a template in a text value of its rule.
11
-
12
- ## Data that a template reads
13
-
14
- | Root | Data | Example |
15
- | ----------------- | ---------------------------------------------------------------------- | -------------------------------- |
16
- | `trigger` | The event or the action that started the run. | `trigger.action.responses.email` |
17
- | `nodes.<node-id>` | The output of the last visit to a tool node. Refer to [Loops](#loops). | `nodes.n2.leads[0].id` |
18
- | `run` | The run. Refer to [Variables](#variables). | `run.startedAt` |
19
- | `workflow` | The workflow. Refer to [Variables](#variables). | `workflow.name` |
20
- | `current` | The node that reads the data. Refer to [Variables](#variables). | `current.visit` |
21
-
22
- A template writes an index as `[0]`, such as `leads[0].id`. The `var` operator of a rule
23
- reads the same paths, and writes an index as a segment, such as `leads.0.id`.
24
-
25
- In the editor, the **Insert reference** button of a field shows the data that the node can
26
- read. The **Previous steps** tab shows `trigger` and `nodes`. The **Variables** tab shows
27
- `run`, `workflow` and `current`.
28
-
29
- ## Variables
30
-
31
- | Path | Type | Value |
32
- | ------------------- | ------------- | ----------------------------------------------------------------------------------------- |
33
- | `run.id` | Text | The ID of the run, such as `wkrun_…`. In a test run, the ID of the test run. |
34
- | `run.startedAt` | Text | The time that Picked recorded the run. In a test run, the time that the test run started. |
35
- | `run.preview` | True or false | True for a run of the draft from a preview of the workspace, and for a test run. |
36
- | `workflow.id` | Text | The ID of the workflow. |
37
- | `workflow.name` | Text | The name of the workflow. |
38
- | `current.id` | Text | The ID of the node that reads the variable. |
39
- | `current.startedAt` | Text | The time that the node started. If the node starts again, the time of the last start. |
40
- | `current.visit` | Number | The number of the visit to the node, from 1. On a loop, each visit adds 1. |
41
-
42
- A time is ISO 8601 in UTC, such as `2026-10-12T21:30:00.000Z`. The `date` filter changes the
43
- format and the timezone.
44
-
45
- Picked sets `run.startedAt` and `run.preview` one time, when it records the run. All the
46
- nodes of the run read the same values.
47
-
48
- Picked gets the `current` values when the node starts, and records the result of the node:
49
-
50
- - When a run continues after a stop, Picked uses the recorded results of the nodes that ran.
51
- It does not run these nodes again.
52
- - If a node stops before Picked records its result, Picked starts the node again. The node
53
- gets a new `current.startedAt`.
54
- - Picked does not start a failed node again. The run continues on the error exit of the node,
55
- or stops at the node. Refer to the
56
- [Workflow runs reference](/reference/dashboard/workflow-runs#run-status).
57
- - When the `retry` argument of an **External API** node is on, the node can send its request
58
- more than one time. Each request uses the values that the node got when it started.
59
-
60
- When you save a workflow, Picked refuses a path below `run`, `workflow` or `current` that is
61
- not in this table. It also refuses `run`, `workflow` or `current` without a path below it.
62
- The error shows the path.
63
-
64
- ## Loops
65
-
66
- A run can visit a node more than one time, on a loop. The path `nodes.<node-id>` gives the output of
67
- the last visit to that node that has a result. This is a visit that succeeded, or a visit
68
- that failed with an error.
69
-
70
- A node can read a node that comes after it on the loop. On the first visit, that node did
71
- not run, so the path has no value. In a condition, the value is `null`. In the editor,
72
- **Insert reference** shows these nodes with `(from the previous pass)`.
73
-
74
- ## Templates in a condition
75
-
76
- A text value in a rule can have a template. Picked fills the template before it checks the
77
- rule.
78
-
79
- | Value | Result |
80
- | -------------------------------------------------------- | ------------------------------------------------- |
81
- | Only one `{{ … }}`, such as `"{{ nodes.n2.count }}"` | The value with its type. A number stays a number. |
82
- | Text with a `{{ … }}` in it, such as `"id-{{ run.id }}"` | Text. |
83
- | Only one `{{ … }}`, with no value | `null`. |
84
-
85
- A value that is only one `{{ … }}` must give text, a number, `true`, `false` or `null`. If it
86
- gives a list or an object, the condition stops with the code `condition_failed`. Text with a
87
- `{{ … }}` in it always gives text, also when the `{{ … }}` gives a list.
88
-
89
- Picked fills all the templates of a rule before it checks the rule. This includes a template
90
- in a part of `if`, `and` or `or` that the rule does not use. A template that gives a list or
91
- an object stops the condition, also when the rule does not use that part.
92
-
93
- A template in the rule of `map`, `filter`, `reduce`, `all`, `some` or `none` reads the data of
94
- the run. Picked fills it one time, before it checks the rule. It does not read the item.
95
-
96
- In a rule, only `{{` starts a template. A text value with only `{% … %}` in it stays as you
97
- write it. In a field of a tool node, `{% … %}` also starts a template.
98
-
99
- These values cannot have a template. Picked refuses the workflow when you save it:
100
-
101
- - The path of `var`.
102
- - The pattern and the flags of `regexp_matches`.
103
- - The message of `throw`.
104
-
105
- When you save a workflow, Picked checks each path in a template of a rule. It checks them as
106
- it checks a template in a tool node.
107
-
108
- ## The `sha256` filter
109
-
110
- The `sha256` filter changes a value to its SHA-256 hash. The hash has 64 characters. Each
111
- character is a digit or a lowercase letter from `a` to `f`. You can use the filter in a tool
112
- node and in a rule.
113
-
114
- | Value | Result |
115
- | ------------------------------ | ------------------------------------------------------------------------- |
116
- | Text | The hash of the text in UTF-8. Picked does not remove spaces in the text. |
117
- | A number, `true` or `false` | The hash of the value as text. The number `42` gives the hash of `"42"`. |
118
- | No value, `null` or empty text | Empty text. |
119
- | A list or an object | The template stops. |
120
-
121
- The filter does not take an argument. A template that gives an argument to the filter stops.
122
-
123
- When a template stops, its node stops:
124
-
125
- - A tool node stops with a message that ends in `a template could not be rendered`. The node
126
- does not use its error exit.
127
- - A condition stops with the code `condition_failed`.
128
-
129
- Picked does not have the `hmac_sha256` filter. When you save a workflow, Picked refuses a
130
- template that uses it.
131
-
132
- ### A hash as a label key
133
-
134
- The namespace and the key of a label row can have a template. A hash fits the format of a
135
- label key. A namespace or a key has 1 to 64 characters, and a hash has 64 characters. A key
136
- that has a hash cannot have other text. Put other text in the namespace, for example
137
- `cms-lock-email`.
138
-
139
- When you save a workflow, Picked does not check the format of a namespace or a key that has a
140
- template. Picked checks the result when the node runs. If the result is not a correct namespace
141
- or key, the node stops. The node does not use its error exit.
142
-
143
- An empty key is not correct. Put the `default` filter before `sha256` when the template can
144
- give no value:
145
-
146
- ```
147
- {{ trigger.action.responses.email | default: run.id | sha256 }}
148
- ```
149
-
150
- ## Example: a rule for a time of day
151
-
152
- This rule is true on days 1 to 5 of the week, from 08:00 to 16:59, in the timezone
153
- `Australia/Sydney`:
154
-
155
- ```json
156
- {
157
- "and": [
158
- { "<=": ["{{ current.startedAt | date: '%u', 'Australia/Sydney' | plus: 0 }}", 5] },
159
- { ">=": ["{{ current.startedAt | date: '%H', 'Australia/Sydney' | plus: 0 }}", 8] },
160
- { "<": ["{{ current.startedAt | date: '%H', 'Australia/Sydney' | plus: 0 }}", 17] }
161
- ]
162
- }
163
- ```
164
-
165
- - `%u` gives the ISO day of the week, from 1 to 7.
166
- - `%H` gives the hour, from `00` to `23`.
167
- - `plus: 0` changes the text to a number.
168
-
169
- The offset of `Australia/Sydney` from UTC changes two times each year. The `date` filter
170
- follows the offset that applies on the date of the time.
171
-
172
- | Node started at, in UTC | Time in `Australia/Sydney` | Branch |
173
- | ----------------------- | ----------------------------- | ------- |
174
- | `2026-10-12T21:30:00Z` | Day 2, 08:30, offset `+11:00` | `true` |
175
- | `2026-06-12T21:30:00Z` | Day 6, 07:30, offset `+10:00` | `false` |
176
-
177
- ## Related
178
-
179
- - [Workflow test runs](/reference/dashboard/workflow-test-runs) — run the draft of a
180
- workflow one time, and see the values that each node read.
181
- - [How to call an external API from a workflow](/how-to/call-an-external-api-from-a-workflow)
182
- — read the answer of a call in a later node.
@@ -1,77 +0,0 @@
1
- ---
2
- type: reference
3
- layout: docs
4
- ---
5
-
6
- # Workflow test runs
7
-
8
- A test run runs the draft of a workflow one time, with the trigger input that you give.
9
- It shows what each node did. It saves nothing, so you can test a change before you
10
- publish it.
11
-
12
- ## Where to start a test run
13
-
14
- | Page | Address | Content |
15
- | -------- | ----------------------------- | ------------------------------------------------------------------------------- |
16
- | Test run | `…/workflows/<workflow>/test` | The trigger form and the result. Open it with the **Test** tab of the workflow. |
17
-
18
- You must have the scope `ORGANIZATION_WORKSPACE_UPDATE` and each scope that the workflow
19
- uses. The page names each scope that you do not have.
20
-
21
- ## Trigger input
22
-
23
- | Trigger | Input | Meaning |
24
- | ------- | ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
25
- | Action | One input for each action field | The answer to that field. Nodes read it as `trigger.action.responses.<key>`. If a field is empty and not required, the run sends no answer for it. |
26
- | Event | **Entity ID** | The entity that the event is about. Nodes read it as `trigger.entityId`. An empty field uses the workspace. |
27
-
28
- Each action field gets the input for its type:
29
-
30
- | Field | Input |
31
- | ---------------------- | -------------------------------------------------- |
32
- | Text | A text box. |
33
- | Number | A number box. The value must be a number. |
34
- | True or false | A checkbox. |
35
- | Record | A box for JSON. The value must be valid JSON. |
36
- | Field with options | A list to choose one option. |
37
- | Field with many values | Checkboxes for options, or one value on each line. |
38
-
39
- A required field must have a value before the test run starts.
40
-
41
- ## What runs
42
-
43
- | Node | In a test run |
44
- | -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
45
- | Tool that reads, such as **Search leads** or an **External API** `GET` or `HEAD` | Runs. |
46
- | Tool that writes, such as **Create lead**, **Set lead labels** or an **External API** `POST` | Does not run. The result shows the input that it would send. |
47
- | **Set run labels** and **Remove run labels** | Do not run, because Picked does not keep a test run. The result shows the input that they would send. |
48
- | **Get run** | Runs, and gives the ID of the test run, which starts with `test_`, and no labels. |
49
- | Condition | Runs, and shows the branch that it took. |
50
- | Wait | Does not wait. |
51
-
52
- A later node that reads the output of a skipped node gets no value.
53
-
54
- A test run does not wait on a loop. It goes around the loop until a condition takes the
55
- exit, or until a node gets to the visit cap. Each visit shows as a node of the result, and
56
- a later visit shows its number, such as `visit 2`. Refer to the
57
- [workflow runs reference](/reference/dashboard/workflow-runs#visit-cap).
58
-
59
- ## Result
60
-
61
- | Status | Meaning |
62
- | ----------- | ------------------------------------------------ |
63
- | `Succeeded` | The node did its work. |
64
- | `Skipped` | The tool writes, so the test run did not run it. |
65
- | `Failed` | The node failed, and shows the reason. |
66
-
67
- When a node fails, the test run stops at that node and shows `Failed`. If an edge leaves
68
- the error exit of the node, the test run continues on that edge as a run does, and can
69
- show `Completed`. Refer to the [workflow runs reference](/reference/dashboard/workflow-runs#run-status).
70
-
71
- Each node shows its input and its output. A test run does not show in **Runs**, and it
72
- does not create or change leads or labels.
73
-
74
- ## Run variables
75
-
76
- A test run gives its own values to `run.id`, `run.startedAt` and `run.preview`. Refer to
77
- [Workflow templates](/reference/dashboard/workflow-templates#variables).
@@ -1,30 +0,0 @@
1
- ---
2
- type: reference
3
- layout: docs
4
- ---
5
-
6
- import { Screenshot } from '../../../../components/Screenshot'
7
-
8
- # Workspace versioning
9
-
10
- When you publish, Picked makes an immutable snapshot of your workspace. A project
11
- always serves exactly one version, the *live* version. A roll-back moves the live
12
- pointer of the project to an earlier snapshot. It changes no data.
13
-
14
- <Screenshot
15
- route="/{orgSlug}/{projectId}/publish-history"
16
- alt="The Publish history page with published workspace versions and the Live and Restore actions"
17
- hide={['[data-testid="version-row-relative-time"]']}
18
- />
19
-
20
- ## Publish history
21
-
22
- The **Publish history** page lists each published version of every workspace in the
23
- project, the newest first. The version that Picked serves now carries a **Live**
24
- badge.
25
-
26
- ## Related
27
-
28
- - [About workspaces and versions](/explanation/workspaces-and-versions) — why a roll-back
29
- changes no data.
30
- - [How to roll back a published version](/how-to/roll-back-a-published-version)
@@ -1,76 +0,0 @@
1
- ---
2
- type: reference
3
- layout: docs
4
- ---
5
-
6
- import { Screenshot } from '../../../../components/Screenshot'
7
-
8
- # Workspaces
9
-
10
- A workspace is one version of the configuration of your project. Use a workspace to hold
11
- a change, to see a preview of it, and to publish it when it is ready.
12
-
13
- <Screenshot
14
- route="/{orgSlug}/{projectId}/workspaces"
15
- alt="The workspaces list inside a project on the Picked dashboard"
16
- hide={['[data-testid="workspace-row-relative-time"]']}
17
- />
18
-
19
- ## How workspaces work
20
-
21
- Each project has a workspace that holds your experiences, feature flags, steps, fields,
22
- actions, and conditions. When you make a change in the dashboard, that change stays in
23
- the workspace until you publish it. A change to a flow, to a feature flag, or to a step
24
- all behave the same way.
25
-
26
- A workspace is in one of three states:
27
-
28
- - **Live** — the workspace that the SDK serves to your visitors. Each project has
29
- exactly one live workspace.
30
- - **Draft** — a workspace that no visitor sees. You can edit a draft, see a preview
31
- of it, and publish it to make it live.
32
- - **Archived** — a draft that you put to one side. An archived workspace is still
33
- editable, but it does not appear in the default workspaces list.
34
-
35
- ## Change previews
36
-
37
- The publish modal shows a side-by-side change preview. It compares the current
38
- workspace against the last published snapshot. Use it to see exactly what your
39
- visitors get after you publish.
40
-
41
- <Screenshot
42
- route="/{orgSlug}/{projectId}/workspaces/{workspaceId}/experiences?action=publish"
43
- alt="The publish modal with a change preview of added experiences, steps, and conditions"
44
- selector='[role="dialog"]'
45
- wait='[role="dialog"]'
46
- hide={['[data-testid="publish-diff-replaces-version"]']}
47
- renderWidth={720}
48
- renderHeight={579}
49
- />
50
-
51
- The preview puts the changes into groups: experiences, feature flags, steps, fields,
52
- actions, and conditions. Each row shows whether the record was **added**, **removed**,
53
- or **modified**. For a modified record, expand the row to see which properties changed.
54
-
55
- Some changes break other records. An example is a field that you remove while other
56
- steps still point at it. The change preview shows a banner above the diff for these
57
- entries, so that you can look at them again before you publish.
58
-
59
- The first publish of a workspace has no earlier snapshot to compare against. The
60
- publish modal shows the contents of the workspace as the first publish, with no diff.
61
-
62
- ## Unpublished changes
63
-
64
- The workspace records whether anything changed since the last publish. The toolbar then
65
- shows a warning badge. It counts a change to any of these:
66
-
67
- - An experience or a feature flag.
68
- - A step, a field, an action, or a condition.
69
-
70
- ## Related
71
-
72
- - [About workspaces and versions](/explanation/workspaces-and-versions) — why a draft and
73
- a version are separate.
74
- - [How to see a preview of a workspace](/how-to/preview-a-workspace)
75
- - [How to publish a workspace](/how-to/publish-a-workspace)
76
- - [How to archive or delete a workspace](/how-to/archive-or-delete-a-workspace)