You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
[0.5.6-beta.1] - 2026-11-03
Added
SDK HTML interface actions: PipefyClient.set_interface_actions declares the actions an HTML interface's customCode element can run from a data-pfy-action button: openStartForm (repoId), openRecord (sourceId, optional display, fieldKeys and pageId) and triggerAutomation (sourceId, automationIds, optional label). The list replaces the element's metadata.actions; its other metadata keys and its data sources are read and sent back unchanged, since the update replaces both. editable, which data-pfy-editable fields need to save, is kept unless passed. Actions are parsed into the InterfaceAction models before any call (a known kind, a unique actionId of 1 to 64 letters, digits, underscores or hyphens, pageId with display: "page", at least one automation id, each a string of digits, at most 50 actions), then each sourceId, repoId and openRecordfieldKeys is checked against the element's sources before the update, and a failure names actions[index].key.
MCP / CLI set_interface_actions: the tool behind PipefyClient.set_interface_actions. A malformed actions list comes back as INVALID_ARGUMENTS with one actions[index].key: message clause per problem, an unknown interface uuid returns a message naming it, and a source repo the caller cannot bind returns "Permission denied for a data source of this element". The interfaces toolset holds the tool, and it is remote-safe. get_interface_html, write_interface_html and create_html_interface point at it from their descriptions. The CLI twin is pipefy portal html-interface set-actions (--actions JSON array, --editable/--no-editable), with the same error messages as the tool; a permission denial exits 2.
MCP / CLI create_pipe, phases, start form and labels: the create_pipe tool takes optional phases, start_form_fields and labels, typed as CreatePipePhase, CreatePipeStartFormField and CreatePipeLabel, so an unknown key comes back as INVALID_ARGUMENTS before any call. A blank or repeated phase name or a non-hex label color is also INVALID_ARGUMENTS. When setting up the phases fails after the pipe exists, the error code is PIPE_PHASE_SETUP_FAILED, and error.details holds pipe_id and the phases created so far. The CLI twin is pipefy pipe create --phases --start-form-fields --labels, each a JSON array; an unknown key exits 2, and a phase setup failure prints the pipe id and exits 1. The pipefy-pipes-and-cards skill builds a pipe with one create_pipe call instead of renaming the default phases.
Changed
SDK pipe-configuration writes now take typed models from pipefy_sdk.graphql_inputs. This changes the SDK signatures of update_pipe, update_phase, create_phase_field, update_phase_field, update_label, create_field_condition, and update_field_condition. For example, use client.update_pipe(UpdatePipeInput(id=pipe_id, name="X")). Models include the identifier and reject unknown fields before a request, including unknown nested fields. update_phase_field keeps phase_id and pipe_id as keyword arguments for slug resolution. normalize_field_condition_fields repairs accepted list shapes before parsing, including expressions_structure: [0] into [[0]]. The generated ConditionExpressionInput mirrors the schema. AI automations still use the separate permissive model. MCP tool names, argument schemas, and CLI options remain unchanged. Other SDK writes retain their existing signatures.
SDK create_pipe, phases, start form and labels: PipefyClient.create_pipe takes optional phases (CreatePipePhase: name, done), start_form_fields (CreatePipeStartFormField) and labels (CreatePipeLabel), so a pipe can be built in one call. With phases, the pipe gets exactly those phases, in order, each connected to the phases beside it, and Pipefy's default Inbox, Doing and Done are deleted. Pipefy's own phases input is not used: it skips a phase named like a default and puts the requested phases between the defaults. Blank or repeated phase names raise ValueError before any call. If deleting a default phase or creating a requested phase fails, PipePhaseSetupError carries the new pipe's pipe_id and the phases created so far, with the failed call's error as __cause__. The result now lists the new pipe's phases, start form fields (with internal_id) and labels with their ids, with or without the new arguments, so the MCP create_pipe tool returns them too.
Phase connection hint: TRANSITION_RULES_HINT, the connection_hint that create_phase and update_phase return and the hint on a rejected phase move, says that create_phase connects a new phase to the phases beside it and that other connections are changed in the Pipefy UI. It no longer says that connections are not editable via API. The pipefy-pipes-and-cards skill says to check the connections with get_phase_allowed_move_targets after adding a phase.
Fixed
Agent reads and update responses now include eventParams.kindOfSla, preserving the SLA trigger type when a behavior is read and sent back in an update.
SDK / MCP / CLI update_pipe_relation, constraint flags: an update set every constraint flag the caller left out (autoFillFieldEnabled, canConnectMultipleItems, childMustExistToMoveParent and the rest) to its create default, so even a rename changed the relation's constraints. The update now reads the relation's current flags and sends them back, with the caller's extra_input / --extra on top; a flag that reads back null is sent as false, and the defaults apply only on create. An omitted ownFieldMaps still keeps the current auto-fill maps. An unknown relation id raises ValueError ("Pipe relation '' was not found.") before any mutation; the MCP tool returns that message and the CLI prints it and exits 2. A caller who relied on a bare update to reset the flags now passes them explicitly. Each update makes one extra read.