@naturali/cli 0.34.1 → 0.35.0

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 (2) hide show
  1. package/dist/index.mjs +630 -1
  2. package/package.json +2 -2
package/dist/index.mjs CHANGED
@@ -14,7 +14,7 @@ var __exportAll = (all, no_symbols) => {
14
14
  };
15
15
  //#endregion
16
16
  //#region package.json
17
- var version = "0.34.1";
17
+ var version = "0.35.0";
18
18
  //#endregion
19
19
  //#region ../sdk/src/generated/core/bodySerializer.gen.ts
20
20
  const jsonBodySerializer = { bodySerializer: (body) => JSON.stringify(body, (_key, value) => typeof value === "bigint" ? value.toString() : value) };
@@ -842,6 +842,76 @@ var Auth = class {
842
842
  });
843
843
  }
844
844
  };
845
+ var Boards = class {
846
+ /**
847
+ * List boards
848
+ *
849
+ * Lists the boards defined in the project, newest first.
850
+ */
851
+ static listBoards(options) {
852
+ return (options.client ?? client).get({
853
+ url: "/v1/projects/{project_id}/boards",
854
+ ...options
855
+ });
856
+ }
857
+ /**
858
+ * Create a board
859
+ *
860
+ * Define a board's columns and moves. Exactly one column must be `initial: true`; any number may be `terminal: true` (a card closes when it enters one). Every agent or tool a column dispatches must belong to this project, and every move a column routes to must be declared in `transitions`.
861
+ *
862
+ */
863
+ static createBoard(options) {
864
+ return (options.client ?? client).post({
865
+ url: "/v1/projects/{project_id}/boards",
866
+ ...options,
867
+ headers: {
868
+ "Content-Type": "application/json",
869
+ ...options.headers
870
+ }
871
+ });
872
+ }
873
+ /**
874
+ * Delete a board
875
+ *
876
+ * Refused while the board still has open cards (409 `board_has_open_tasks`) — close or delete them first. Deleting a board whose cards are all closed removes those cards and their transition history along with it.
877
+ *
878
+ */
879
+ static deleteBoard(options) {
880
+ return (options.client ?? client).delete({
881
+ url: "/v1/projects/{project_id}/boards/{board_id}",
882
+ ...options
883
+ });
884
+ }
885
+ /**
886
+ * Get a board
887
+ *
888
+ * The board's current definition — the source of truth for which columns exist and which moves are legal from each, so a UI renders its columns and its buttons from this response.
889
+ *
890
+ */
891
+ static getBoard(options) {
892
+ return (options.client ?? client).get({
893
+ url: "/v1/projects/{project_id}/boards/{board_id}",
894
+ ...options
895
+ });
896
+ }
897
+ /**
898
+ * Update a board
899
+ *
900
+ * Change the name, description, `payload_schema`, or the definition itself. `states` and `transitions` are edited together or not at all — a column routes to a move and a move names columns, so validating one against a stale copy of the other would accept a definition that cannot route. At least one field is required.
901
+ * Cards already on the board are not moved. A card sitting in a column the new definition drops stays where it is and can only leave through a move the new definition declares: the definition is the sole authority at the moment a move is fired.
902
+ *
903
+ */
904
+ static updateBoard(options) {
905
+ return (options.client ?? client).patch({
906
+ url: "/v1/projects/{project_id}/boards/{board_id}",
907
+ ...options,
908
+ headers: {
909
+ "Content-Type": "application/json",
910
+ ...options.headers
911
+ }
912
+ });
913
+ }
914
+ };
845
915
  var Channels = class {
846
916
  /**
847
917
  * List channels
@@ -1549,6 +1619,106 @@ var Sessions = class {
1549
1619
  });
1550
1620
  }
1551
1621
  };
1622
+ var Tasks = class {
1623
+ /**
1624
+ * List tasks
1625
+ *
1626
+ * The board query. Filter by `board_id` for one board, add `state` for one column, or use `status` / `assignee` across boards.
1627
+ *
1628
+ */
1629
+ static listTasks(options) {
1630
+ return (options.client ?? client).get({
1631
+ url: "/v1/projects/{project_id}/tasks",
1632
+ ...options
1633
+ });
1634
+ }
1635
+ /**
1636
+ * Create a task
1637
+ *
1638
+ * Put a card on a board. It lands in the board's initial column and that column's automation fires — so a board whose first column dispatches an agent starts working on this call and keeps going, unattended, until a column needs a person.
1639
+ *
1640
+ */
1641
+ static createTask(options) {
1642
+ return (options.client ?? client).post({
1643
+ url: "/v1/projects/{project_id}/tasks",
1644
+ ...options,
1645
+ headers: {
1646
+ "Content-Type": "application/json",
1647
+ ...options.headers
1648
+ }
1649
+ });
1650
+ }
1651
+ /**
1652
+ * Delete a task
1653
+ *
1654
+ * Removes the card and its transition history. Distinct from closing it: a card that reaches a terminal column closes and keeps its audit trail.
1655
+ *
1656
+ */
1657
+ static deleteTask(options) {
1658
+ return (options.client ?? client).delete({
1659
+ url: "/v1/projects/{project_id}/tasks/{task_id}",
1660
+ ...options
1661
+ });
1662
+ }
1663
+ /**
1664
+ * Get a task
1665
+ *
1666
+ * One card, including its automation status and in-flight dispatch.
1667
+ */
1668
+ static getTask(options) {
1669
+ return (options.client ?? client).get({
1670
+ url: "/v1/projects/{project_id}/tasks/{task_id}",
1671
+ ...options
1672
+ });
1673
+ }
1674
+ /**
1675
+ * Update a task
1676
+ *
1677
+ * Edit the card's `title`, `assignee` or `payload`. At least one is required.
1678
+ * `payload` is **shallow-merged** over what is there: keys the request omits are preserved, so setting one field never discards what a column's automation wrote (`payload.last_result`). The merged result is validated against the board's `payload_schema`.
1679
+ * `state` and `board_id` are rejected — a card moves only through `:transition`, and it never changes boards.
1680
+ *
1681
+ */
1682
+ static updateTask(options) {
1683
+ return (options.client ?? client).patch({
1684
+ url: "/v1/projects/{project_id}/tasks/{task_id}",
1685
+ ...options,
1686
+ headers: {
1687
+ "Content-Type": "application/json",
1688
+ ...options.headers
1689
+ }
1690
+ });
1691
+ }
1692
+ /**
1693
+ * Move a task
1694
+ *
1695
+ * Fire a named move on the card — the single path every state change takes. The move must be declared on the board and valid from the card's current column; the board's definition is what a UI renders its buttons from.
1696
+ * Naming a move that does not exist, one that is not legal from this column, or any move at all on a closed card all answer 409 `task_transition_conflict`: it is a conflict with the card's state rather than a malformed request — the same body succeeds one column earlier.
1697
+ *
1698
+ */
1699
+ static transitionTask(options) {
1700
+ return (options.client ?? client).post({
1701
+ url: "/v1/projects/{project_id}/tasks/{task_id}:transition",
1702
+ ...options,
1703
+ headers: {
1704
+ "Content-Type": "application/json",
1705
+ ...options.headers
1706
+ }
1707
+ });
1708
+ }
1709
+ /**
1710
+ * List the task's moves
1711
+ *
1712
+ * The card's append-only history, oldest first: every move it made, what kind of actor made it, and what caused it. Returned whole — `next_cursor` is always null.
1713
+ *
1714
+ */
1715
+ static listTaskTransitions(options) {
1716
+ return (options.client ?? client).get({
1717
+ url: "/v1/projects/{project_id}/tasks/{task_id}/transitions",
1718
+ ...options
1719
+ });
1720
+ }
1721
+ };
1552
1722
  var Tools = class {
1553
1723
  /**
1554
1724
  * List tools
@@ -1715,6 +1885,7 @@ var NaturaliClient = class {
1715
1885
  agents;
1716
1886
  apiKeys;
1717
1887
  auth;
1888
+ boards;
1718
1889
  channels;
1719
1890
  contacts;
1720
1891
  generations;
@@ -1723,6 +1894,7 @@ var NaturaliClient = class {
1723
1894
  projects;
1724
1895
  providers;
1725
1896
  sessions;
1897
+ tasks;
1726
1898
  tools;
1727
1899
  traces;
1728
1900
  /** The underlying HTTP client, for interceptors or one-off requests. */
@@ -1738,6 +1910,7 @@ var NaturaliClient = class {
1738
1910
  this.agents = bindResource(Agents, this.http);
1739
1911
  this.apiKeys = bindResource(ApiKeys, this.http);
1740
1912
  this.auth = bindResource(Auth, this.http);
1913
+ this.boards = bindResource(Boards, this.http);
1741
1914
  this.channels = bindResource(Channels, this.http);
1742
1915
  this.contacts = bindResource(Contacts, this.http);
1743
1916
  this.generations = bindResource(Generations, this.http);
@@ -1746,6 +1919,7 @@ var NaturaliClient = class {
1746
1919
  this.projects = bindResource(Projects, this.http);
1747
1920
  this.providers = bindResource(Providers, this.http);
1748
1921
  this.sessions = bindResource(Sessions, this.http);
1922
+ this.tasks = bindResource(Tasks, this.http);
1749
1923
  this.tools = bindResource(Tools, this.http);
1750
1924
  this.traces = bindResource(Traces, this.http);
1751
1925
  }
@@ -1756,6 +1930,7 @@ var src_exports = /* @__PURE__ */ __exportAll({
1756
1930
  Agents: () => Agents,
1757
1931
  ApiKeys: () => ApiKeys,
1758
1932
  Auth: () => Auth,
1933
+ Boards: () => Boards,
1759
1934
  Channels: () => Channels,
1760
1935
  Contacts: () => Contacts,
1761
1936
  Generations: () => Generations,
@@ -1765,6 +1940,7 @@ var src_exports = /* @__PURE__ */ __exportAll({
1765
1940
  Projects: () => Projects,
1766
1941
  Providers: () => Providers,
1767
1942
  Sessions: () => Sessions,
1943
+ Tasks: () => Tasks,
1768
1944
  Tools: () => Tools,
1769
1945
  Traces: () => Traces,
1770
1946
  createClient: () => createClient,
@@ -2614,6 +2790,195 @@ const routes = {
2614
2790
  queryParams: [],
2615
2791
  flags: []
2616
2792
  },
2793
+ "list-boards": {
2794
+ serviceClass: "Boards",
2795
+ operationId: "listBoards",
2796
+ description: "Lists the boards defined in the project, newest first.",
2797
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/boards",
2798
+ httpMethod: "get",
2799
+ pathParams: ["project_id"],
2800
+ queryParams: ["limit", "cursor"],
2801
+ flags: [
2802
+ {
2803
+ "name": "project_id",
2804
+ "description": "Project public ID (proj_ prefix).",
2805
+ "required": true,
2806
+ "type": "string",
2807
+ "in": "path"
2808
+ },
2809
+ {
2810
+ "name": "limit",
2811
+ "description": "Maximum items per page.",
2812
+ "required": false,
2813
+ "type": "integer",
2814
+ "in": "query"
2815
+ },
2816
+ {
2817
+ "name": "cursor",
2818
+ "description": "Opaque pagination cursor from a previous response's next_cursor.",
2819
+ "required": false,
2820
+ "type": "string",
2821
+ "in": "query"
2822
+ }
2823
+ ]
2824
+ },
2825
+ "create-board": {
2826
+ serviceClass: "Boards",
2827
+ operationId: "createBoard",
2828
+ description: "Define a board's columns and moves. Exactly one column must be `initial: true`; any number may be `terminal: true` (a card closes when it enters one). Every agent or tool a column dispatches must belong to this project, and every move a column routes to must be declared in `transitions`.",
2829
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/boards",
2830
+ httpMethod: "post",
2831
+ pathParams: ["project_id"],
2832
+ queryParams: [],
2833
+ flags: [
2834
+ {
2835
+ "name": "project_id",
2836
+ "description": "Project public ID (proj_ prefix).",
2837
+ "required": true,
2838
+ "type": "string",
2839
+ "in": "path"
2840
+ },
2841
+ {
2842
+ "name": "name",
2843
+ "description": "Unique within the project — reusing another board's name is rejected as an invalid definition.\n",
2844
+ "required": true,
2845
+ "type": "string",
2846
+ "in": "body"
2847
+ },
2848
+ {
2849
+ "name": "description",
2850
+ "description": "",
2851
+ "required": false,
2852
+ "type": "string",
2853
+ "in": "body"
2854
+ },
2855
+ {
2856
+ "name": "states",
2857
+ "description": "",
2858
+ "required": true,
2859
+ "type": "array",
2860
+ "in": "body"
2861
+ },
2862
+ {
2863
+ "name": "transitions",
2864
+ "description": "",
2865
+ "required": true,
2866
+ "type": "array",
2867
+ "in": "body"
2868
+ },
2869
+ {
2870
+ "name": "payload_schema",
2871
+ "description": "Optional JSON Schema validated against every card's payload.",
2872
+ "required": false,
2873
+ "type": "object",
2874
+ "in": "body"
2875
+ }
2876
+ ]
2877
+ },
2878
+ "get-board": {
2879
+ serviceClass: "Boards",
2880
+ operationId: "getBoard",
2881
+ description: "The board's current definition — the source of truth for which columns exist and which moves are legal from each, so a UI renders its columns and its buttons from this response.",
2882
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/boards",
2883
+ httpMethod: "get",
2884
+ pathParams: ["project_id", "board_id"],
2885
+ queryParams: [],
2886
+ flags: [{
2887
+ "name": "project_id",
2888
+ "description": "Project public ID (proj_ prefix).",
2889
+ "required": true,
2890
+ "type": "string",
2891
+ "in": "path"
2892
+ }, {
2893
+ "name": "board_id",
2894
+ "description": "Board public ID (brd_ prefix).",
2895
+ "required": true,
2896
+ "type": "string",
2897
+ "in": "path"
2898
+ }]
2899
+ },
2900
+ "update-board": {
2901
+ serviceClass: "Boards",
2902
+ operationId: "updateBoard",
2903
+ description: "Change the name, description, `payload_schema`, or the definition itself. `states` and `transitions` are edited together or not at all — a column routes to a move and a move names columns, so validating one against a stale copy of the other would accept a definition that cannot route. At least one field is required. Cards already on the board are not moved. A card sitting in a column the new definition drops stays where it is and can only leave through a move the new definition declares: the definition is the sole authority at the moment a move is fired.",
2904
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/boards",
2905
+ httpMethod: "patch",
2906
+ pathParams: ["project_id", "board_id"],
2907
+ queryParams: [],
2908
+ flags: [
2909
+ {
2910
+ "name": "project_id",
2911
+ "description": "Project public ID (proj_ prefix).",
2912
+ "required": true,
2913
+ "type": "string",
2914
+ "in": "path"
2915
+ },
2916
+ {
2917
+ "name": "board_id",
2918
+ "description": "Board public ID (brd_ prefix).",
2919
+ "required": true,
2920
+ "type": "string",
2921
+ "in": "path"
2922
+ },
2923
+ {
2924
+ "name": "name",
2925
+ "description": "",
2926
+ "required": false,
2927
+ "type": "string",
2928
+ "in": "body"
2929
+ },
2930
+ {
2931
+ "name": "description",
2932
+ "description": "",
2933
+ "required": false,
2934
+ "type": "string",
2935
+ "in": "body"
2936
+ },
2937
+ {
2938
+ "name": "states",
2939
+ "description": "",
2940
+ "required": false,
2941
+ "type": "array",
2942
+ "in": "body"
2943
+ },
2944
+ {
2945
+ "name": "transitions",
2946
+ "description": "",
2947
+ "required": false,
2948
+ "type": "array",
2949
+ "in": "body"
2950
+ },
2951
+ {
2952
+ "name": "payload_schema",
2953
+ "description": "Send null to clear it.",
2954
+ "required": false,
2955
+ "type": "object",
2956
+ "in": "body"
2957
+ }
2958
+ ]
2959
+ },
2960
+ "delete-board": {
2961
+ serviceClass: "Boards",
2962
+ operationId: "deleteBoard",
2963
+ description: "Refused while the board still has open cards (409 `board_has_open_tasks`) — close or delete them first. Deleting a board whose cards are all closed removes those cards and their transition history along with it.",
2964
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/boards",
2965
+ httpMethod: "delete",
2966
+ pathParams: ["project_id", "board_id"],
2967
+ queryParams: [],
2968
+ flags: [{
2969
+ "name": "project_id",
2970
+ "description": "Project public ID (proj_ prefix).",
2971
+ "required": true,
2972
+ "type": "string",
2973
+ "in": "path"
2974
+ }, {
2975
+ "name": "board_id",
2976
+ "description": "Board public ID (brd_ prefix).",
2977
+ "required": true,
2978
+ "type": "string",
2979
+ "in": "path"
2980
+ }]
2981
+ },
2617
2982
  "list-channels": {
2618
2983
  serviceClass: "Channels",
2619
2984
  operationId: "listChannels",
@@ -4665,6 +5030,270 @@ const routes = {
4665
5030
  }
4666
5031
  ]
4667
5032
  },
5033
+ "list-tasks": {
5034
+ serviceClass: "Tasks",
5035
+ operationId: "listTasks",
5036
+ description: "The board query. Filter by `board_id` for one board, add `state` for one column, or use `status` / `assignee` across boards.",
5037
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/tasks",
5038
+ httpMethod: "get",
5039
+ pathParams: ["project_id"],
5040
+ queryParams: [
5041
+ "board_id",
5042
+ "state",
5043
+ "status",
5044
+ "assignee",
5045
+ "limit",
5046
+ "cursor"
5047
+ ],
5048
+ flags: [
5049
+ {
5050
+ "name": "project_id",
5051
+ "description": "Project public ID (proj_ prefix).",
5052
+ "required": true,
5053
+ "type": "string",
5054
+ "in": "path"
5055
+ },
5056
+ {
5057
+ "name": "board_id",
5058
+ "description": "Only cards on this board. An unowned board is a 404, not an empty page.",
5059
+ "required": false,
5060
+ "type": "string",
5061
+ "in": "query"
5062
+ },
5063
+ {
5064
+ "name": "state",
5065
+ "description": "Only cards currently in this column — one kanban column.",
5066
+ "required": false,
5067
+ "type": "string",
5068
+ "in": "query"
5069
+ },
5070
+ {
5071
+ "name": "status",
5072
+ "description": "Only open or only closed cards.",
5073
+ "required": false,
5074
+ "type": "string",
5075
+ "in": "query"
5076
+ },
5077
+ {
5078
+ "name": "assignee",
5079
+ "description": "Only cards labelled with this assignee.",
5080
+ "required": false,
5081
+ "type": "string",
5082
+ "in": "query"
5083
+ },
5084
+ {
5085
+ "name": "limit",
5086
+ "description": "Maximum items per page.",
5087
+ "required": false,
5088
+ "type": "integer",
5089
+ "in": "query"
5090
+ },
5091
+ {
5092
+ "name": "cursor",
5093
+ "description": "Opaque pagination cursor from a previous response's next_cursor.",
5094
+ "required": false,
5095
+ "type": "string",
5096
+ "in": "query"
5097
+ }
5098
+ ]
5099
+ },
5100
+ "create-task": {
5101
+ serviceClass: "Tasks",
5102
+ operationId: "createTask",
5103
+ description: "Put a card on a board. It lands in the board's initial column and that column's automation fires — so a board whose first column dispatches an agent starts working on this call and keeps going, unattended, until a column needs a person.",
5104
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/tasks",
5105
+ httpMethod: "post",
5106
+ pathParams: ["project_id"],
5107
+ queryParams: [],
5108
+ flags: [
5109
+ {
5110
+ "name": "project_id",
5111
+ "description": "Project public ID (proj_ prefix).",
5112
+ "required": true,
5113
+ "type": "string",
5114
+ "in": "path"
5115
+ },
5116
+ {
5117
+ "name": "board_id",
5118
+ "description": "The board to put the card on.",
5119
+ "required": true,
5120
+ "type": "string",
5121
+ "in": "body"
5122
+ },
5123
+ {
5124
+ "name": "title",
5125
+ "description": "",
5126
+ "required": true,
5127
+ "type": "string",
5128
+ "in": "body"
5129
+ },
5130
+ {
5131
+ "name": "payload",
5132
+ "description": "The card's starting data, validated against the board's `payload_schema`.\n",
5133
+ "required": false,
5134
+ "type": "object",
5135
+ "in": "body"
5136
+ },
5137
+ {
5138
+ "name": "assignee",
5139
+ "description": "Informational label.",
5140
+ "required": false,
5141
+ "type": "string",
5142
+ "in": "body"
5143
+ }
5144
+ ]
5145
+ },
5146
+ "get-task": {
5147
+ serviceClass: "Tasks",
5148
+ operationId: "getTask",
5149
+ description: "One card, including its automation status and in-flight dispatch.",
5150
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/tasks",
5151
+ httpMethod: "get",
5152
+ pathParams: ["project_id", "task_id"],
5153
+ queryParams: [],
5154
+ flags: [{
5155
+ "name": "project_id",
5156
+ "description": "Project public ID (proj_ prefix).",
5157
+ "required": true,
5158
+ "type": "string",
5159
+ "in": "path"
5160
+ }, {
5161
+ "name": "task_id",
5162
+ "description": "Task public ID (task_ prefix).",
5163
+ "required": true,
5164
+ "type": "string",
5165
+ "in": "path"
5166
+ }]
5167
+ },
5168
+ "update-task": {
5169
+ serviceClass: "Tasks",
5170
+ operationId: "updateTask",
5171
+ description: "Edit the card's `title`, `assignee` or `payload`. At least one is required. `payload` is **shallow-merged** over what is there: keys the request omits are preserved, so setting one field never discards what a column's automation wrote (`payload.last_result`). The merged result is validated against the board's `payload_schema`. `state` and `board_id` are rejected — a card moves only through `:transition`, and it never changes boards.",
5172
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/tasks",
5173
+ httpMethod: "patch",
5174
+ pathParams: ["project_id", "task_id"],
5175
+ queryParams: [],
5176
+ flags: [
5177
+ {
5178
+ "name": "project_id",
5179
+ "description": "Project public ID (proj_ prefix).",
5180
+ "required": true,
5181
+ "type": "string",
5182
+ "in": "path"
5183
+ },
5184
+ {
5185
+ "name": "task_id",
5186
+ "description": "Task public ID (task_ prefix).",
5187
+ "required": true,
5188
+ "type": "string",
5189
+ "in": "path"
5190
+ },
5191
+ {
5192
+ "name": "title",
5193
+ "description": "",
5194
+ "required": false,
5195
+ "type": "string",
5196
+ "in": "body"
5197
+ },
5198
+ {
5199
+ "name": "assignee",
5200
+ "description": "Send null to unassign.",
5201
+ "required": false,
5202
+ "type": "string",
5203
+ "in": "body"
5204
+ },
5205
+ {
5206
+ "name": "payload",
5207
+ "description": "Shallow-merged over the current payload; omitted keys are preserved.",
5208
+ "required": false,
5209
+ "type": "object",
5210
+ "in": "body"
5211
+ }
5212
+ ]
5213
+ },
5214
+ "delete-task": {
5215
+ serviceClass: "Tasks",
5216
+ operationId: "deleteTask",
5217
+ description: "Removes the card and its transition history. Distinct from closing it: a card that reaches a terminal column closes and keeps its audit trail.",
5218
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/tasks",
5219
+ httpMethod: "delete",
5220
+ pathParams: ["project_id", "task_id"],
5221
+ queryParams: [],
5222
+ flags: [{
5223
+ "name": "project_id",
5224
+ "description": "Project public ID (proj_ prefix).",
5225
+ "required": true,
5226
+ "type": "string",
5227
+ "in": "path"
5228
+ }, {
5229
+ "name": "task_id",
5230
+ "description": "Task public ID (task_ prefix).",
5231
+ "required": true,
5232
+ "type": "string",
5233
+ "in": "path"
5234
+ }]
5235
+ },
5236
+ "transition-task": {
5237
+ serviceClass: "Tasks",
5238
+ operationId: "transitionTask",
5239
+ description: "Fire a named move on the card — the single path every state change takes. The move must be declared on the board and valid from the card's current column; the board's definition is what a UI renders its buttons from. Naming a move that does not exist, one that is not legal from this column, or any move at all on a closed card all answer 409 `task_transition_conflict`: it is a conflict with the card's state rather than a malformed request — the same body succeeds one column earlier.",
5240
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/tasks",
5241
+ httpMethod: "post",
5242
+ pathParams: ["project_id", "task_id"],
5243
+ queryParams: [],
5244
+ flags: [
5245
+ {
5246
+ "name": "project_id",
5247
+ "description": "Project public ID (proj_ prefix).",
5248
+ "required": true,
5249
+ "type": "string",
5250
+ "in": "path"
5251
+ },
5252
+ {
5253
+ "name": "task_id",
5254
+ "description": "Task public ID (task_ prefix).",
5255
+ "required": true,
5256
+ "type": "string",
5257
+ "in": "path"
5258
+ },
5259
+ {
5260
+ "name": "transition",
5261
+ "description": "The name of a move the board declares from the card's current column.",
5262
+ "required": true,
5263
+ "type": "string",
5264
+ "in": "body"
5265
+ },
5266
+ {
5267
+ "name": "note",
5268
+ "description": "Optional reason, recorded on the history entry.",
5269
+ "required": false,
5270
+ "type": "string",
5271
+ "in": "body"
5272
+ }
5273
+ ]
5274
+ },
5275
+ "list-task-transitions": {
5276
+ serviceClass: "Tasks",
5277
+ operationId: "listTaskTransitions",
5278
+ description: "The card's append-only history, oldest first: every move it made, what kind of actor made it, and what caused it. Returned whole — `next_cursor` is always null.",
5279
+ moduleDocsUrl: "https://docs.naturali.ai/docs/modules/tasks",
5280
+ httpMethod: "get",
5281
+ pathParams: ["project_id", "task_id"],
5282
+ queryParams: [],
5283
+ flags: [{
5284
+ "name": "project_id",
5285
+ "description": "Project public ID (proj_ prefix).",
5286
+ "required": true,
5287
+ "type": "string",
5288
+ "in": "path"
5289
+ }, {
5290
+ "name": "task_id",
5291
+ "description": "Task public ID (task_ prefix).",
5292
+ "required": true,
5293
+ "type": "string",
5294
+ "in": "path"
5295
+ }]
5296
+ },
4668
5297
  "list-tools": {
4669
5298
  serviceClass: "Tools",
4670
5299
  operationId: "listTools",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naturali/cli",
3
- "version": "0.34.1",
3
+ "version": "0.35.0",
4
4
  "description": "Command-line interface for the naturali.ai API, generated from its OpenAPI specs",
5
5
  "type": "module",
6
6
  "bin": {
@@ -30,7 +30,7 @@
30
30
  "tsx": "^4.23.1",
31
31
  "typescript": "~6.0.3",
32
32
  "vitest": "^4.1.10",
33
- "@naturali/sdk": "0.34.1"
33
+ "@naturali/sdk": "0.35.0"
34
34
  },
35
35
  "scripts": {
36
36
  "generate": "tsx scripts/generate.ts",