@nanobpm/nano-workforce 0.70.2 → 0.71.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.
@@ -0,0 +1,297 @@
1
+ {
2
+ "schemaVersion": "1.0",
3
+ "title": "Tasks",
4
+ "nodes": [
5
+ {
6
+ "type": "nav",
7
+ "id": "nav",
8
+ "props": {
9
+ "variant": "bar",
10
+ "sticky": true,
11
+ "title": "Nano Workforce",
12
+ "items": [
13
+ { "label": "Overview", "page": "overview" },
14
+ { "label": "Convergence", "page": "home" },
15
+ { "label": "Epics", "page": "epic" },
16
+ { "label": "Feature", "page": "feature" },
17
+ { "label": "Tasks", "page": "tasks" },
18
+ { "label": "Cockpit", "page": "cockpit" }
19
+ ]
20
+ }
21
+ },
22
+ {
23
+ "type": "text",
24
+ "id": "title",
25
+ "props": { "text": "Tasks", "variant": "heading" }
26
+ },
27
+ {
28
+ "type": "text",
29
+ "id": "subtitle",
30
+ "props": {
31
+ "text": "Open native user-task escalations awaiting a human decision \u2014 across feature runs, epics, and PR review loops. Each row parks a process on your decision; submit one and the process resumes on the same canonical path Urban's task inbox uses. Rows disappear once completed (here, via the inbox, or out-of-band).",
32
+ "variant": "sub"
33
+ }
34
+ },
35
+ {
36
+ "type": "dataGrid",
37
+ "id": "feature-escalations",
38
+ "props": {
39
+ "title": "Feature escalations",
40
+ "collapsible": true,
41
+ "defaultCollapsed": false,
42
+ "showCount": true,
43
+ "rowKey": "user_task_key",
44
+ "refreshMs": 5000,
45
+ "data": {
46
+ "kind": "datasource",
47
+ "source": "app",
48
+ "table": "user_tasks",
49
+ "orderBy": { "field": "updated_at", "dir": "desc" },
50
+ "filter": [{ "field": "element_id", "in": ["feature-escalation"] }]
51
+ },
52
+ "columns": [
53
+ { "field": "subject_key", "header": "Feature", "link": { "kind": "page", "page": "feature", "keyField": "subject_key" } },
54
+ { "field": "question", "header": "Question" },
55
+ { "field": "subject_url", "header": "Issue", "linkField": "subject_url" },
56
+ { "field": "process_key", "header": "Process", "link": { "kind": "processExplorer", "keyField": "process_key" } },
57
+ { "field": "updated_at", "header": "Updated" }
58
+ ],
59
+ "rowActions": [
60
+ {
61
+ "label": "Abandon",
62
+ "confirm": "Abandon this escalated task? The run gives up on it (no PR).",
63
+ "showWhenField": "user_task_key",
64
+ "action": {
65
+ "path": "/app/api/actions/answer-escalation",
66
+ "body": { "userTaskKey": "{{row.user_task_key}}", "resolution": "abandon" }
67
+ }
68
+ }
69
+ ],
70
+ "detail": {
71
+ "linkField": "subject_url",
72
+ "fields": [{ "field": "question", "label": "Escalation question" }],
73
+ "form": {
74
+ "showWhenField": "user_task_key",
75
+ "title": "Answer escalation",
76
+ "promptField": "question",
77
+ "inputKey": "answer",
78
+ "inputLabel": "Guidance for the implementation agent",
79
+ "submitLabel": "Answer & re-dispatch",
80
+ "action": {
81
+ "path": "/app/api/actions/answer-escalation",
82
+ "successLabel": "Answered \u2014 the agent will resume",
83
+ "body": {
84
+ "userTaskKey": "{{row.user_task_key}}",
85
+ "resolution": "answer",
86
+ "answer": "{{form.answer}}"
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
92
+ },
93
+ {
94
+ "type": "dataGrid",
95
+ "id": "plan-reviews",
96
+ "props": {
97
+ "title": "Plan-review decisions",
98
+ "collapsible": true,
99
+ "defaultCollapsed": false,
100
+ "showCount": true,
101
+ "rowKey": "user_task_key",
102
+ "refreshMs": 5000,
103
+ "data": {
104
+ "kind": "datasource",
105
+ "source": "app",
106
+ "table": "user_tasks",
107
+ "orderBy": { "field": "updated_at", "dir": "desc" },
108
+ "filter": [{ "field": "element_id", "in": ["plan-review-decision"] }]
109
+ },
110
+ "columns": [
111
+ { "field": "subject_key", "header": "Epic", "link": { "kind": "page", "page": "epic-detail", "keyField": "subject_key" } },
112
+ { "field": "question", "header": "Findings" },
113
+ { "field": "subject_url", "header": "Issue", "linkField": "subject_url" },
114
+ { "field": "process_key", "header": "Process", "link": { "kind": "processExplorer", "keyField": "process_key" } },
115
+ { "field": "updated_at", "header": "Updated" }
116
+ ],
117
+ "rowActions": [
118
+ {
119
+ "label": "Proceed",
120
+ "confirm": "Proceed \u2014 dispatch the current plan as-is?",
121
+ "showWhenField": "user_task_key",
122
+ "action": {
123
+ "path": "/app/api/actions/complete-user-task",
124
+ "body": { "userTaskKey": "{{row.user_task_key}}", "variables": { "directive": "proceed" } }
125
+ }
126
+ }
127
+ ],
128
+ "detail": {
129
+ "linkField": "subject_url",
130
+ "fields": [{ "field": "question", "label": "Review findings" }],
131
+ "form": {
132
+ "showWhenField": "user_task_key",
133
+ "title": "Send the plan back for revision",
134
+ "promptField": "question",
135
+ "inputKey": "notes",
136
+ "inputLabel": "Revision guidance for the planner",
137
+ "submitLabel": "Revise \u2014 re-plan",
138
+ "action": {
139
+ "path": "/app/api/actions/complete-user-task",
140
+ "successLabel": "Sent back \u2014 the planner will revise",
141
+ "body": {
142
+ "userTaskKey": "{{row.user_task_key}}",
143
+ "variables": { "directive": "revise", "notes": "{{form.notes}}" }
144
+ }
145
+ }
146
+ }
147
+ }
148
+ }
149
+ },
150
+ {
151
+ "type": "dataGrid",
152
+ "id": "trial-merges",
153
+ "props": {
154
+ "title": "Trial-merge decisions",
155
+ "collapsible": true,
156
+ "defaultCollapsed": false,
157
+ "showCount": true,
158
+ "rowKey": "user_task_key",
159
+ "refreshMs": 5000,
160
+ "data": {
161
+ "kind": "datasource",
162
+ "source": "app",
163
+ "table": "user_tasks",
164
+ "orderBy": { "field": "updated_at", "dir": "desc" },
165
+ "filter": [{ "field": "element_id", "in": ["trial-merge-decision"] }]
166
+ },
167
+ "columns": [
168
+ { "field": "subject_key", "header": "Epic", "link": { "kind": "page", "page": "epic-detail", "keyField": "subject_key" } },
169
+ { "field": "question", "header": "Trial merge" },
170
+ { "field": "subject_url", "header": "Issue", "linkField": "subject_url" },
171
+ { "field": "process_key", "header": "Process", "link": { "kind": "processExplorer", "keyField": "process_key" } },
172
+ { "field": "updated_at", "header": "Updated" }
173
+ ],
174
+ "rowActions": [
175
+ {
176
+ "label": "Proceed",
177
+ "confirm": "Proceed \u2014 accept the red trial merge and continue?",
178
+ "showWhenField": "user_task_key",
179
+ "action": {
180
+ "path": "/app/api/actions/complete-user-task",
181
+ "body": { "userTaskKey": "{{row.user_task_key}}", "variables": { "action": "proceed" } }
182
+ }
183
+ },
184
+ {
185
+ "label": "Rebase",
186
+ "confirm": "Rebase \u2014 re-run the trial merge?",
187
+ "showWhenField": "user_task_key",
188
+ "action": {
189
+ "path": "/app/api/actions/complete-user-task",
190
+ "body": { "userTaskKey": "{{row.user_task_key}}", "variables": { "action": "rebase" } }
191
+ }
192
+ },
193
+ {
194
+ "label": "Abandon",
195
+ "confirm": "Abandon \u2014 stop and finalize the plan?",
196
+ "showWhenField": "user_task_key",
197
+ "action": {
198
+ "path": "/app/api/actions/complete-user-task",
199
+ "body": { "userTaskKey": "{{row.user_task_key}}", "variables": { "action": "abandon" } }
200
+ }
201
+ }
202
+ ],
203
+ "detail": {
204
+ "linkField": "subject_url",
205
+ "fields": [{ "field": "question", "label": "Trial merge" }]
206
+ }
207
+ }
208
+ },
209
+ {
210
+ "type": "dataGrid",
211
+ "id": "pr-reviews",
212
+ "props": {
213
+ "title": "PR review escalations",
214
+ "collapsible": true,
215
+ "defaultCollapsed": false,
216
+ "showCount": true,
217
+ "rowKey": "user_task_key",
218
+ "refreshMs": 5000,
219
+ "data": {
220
+ "kind": "datasource",
221
+ "source": "app",
222
+ "table": "user_tasks",
223
+ "orderBy": { "field": "updated_at", "dir": "desc" },
224
+ "filter": [{ "field": "element_id", "in": ["wait-answer"] }]
225
+ },
226
+ "columns": [
227
+ { "field": "subject_key", "header": "PR", "link": { "kind": "page", "page": "home", "keyField": "subject_key" } },
228
+ { "field": "question", "header": "Question" },
229
+ { "field": "subject_url", "header": "PR link", "linkField": "subject_url" },
230
+ { "field": "process_key", "header": "Process", "link": { "kind": "processExplorer", "keyField": "process_key" } },
231
+ { "field": "updated_at", "header": "Updated" }
232
+ ],
233
+ "detail": {
234
+ "linkField": "subject_url",
235
+ "fields": [{ "field": "question", "label": "Escalation question" }],
236
+ "form": {
237
+ "showWhenField": "user_task_key",
238
+ "title": "Answer the review escalation",
239
+ "promptField": "question",
240
+ "inputKey": "answer",
241
+ "inputLabel": "Your answer (resumes the review loop, handed to the next round)",
242
+ "submitLabel": "Answer \u2014 resume review",
243
+ "action": {
244
+ "path": "/app/api/actions/complete-user-task",
245
+ "successLabel": "Answered \u2014 the review loop will resume",
246
+ "body": {
247
+ "userTaskKey": "{{row.user_task_key}}",
248
+ "variables": { "answer": "{{form.answer}}" }
249
+ }
250
+ }
251
+ }
252
+ }
253
+ }
254
+ },
255
+ {
256
+ "type": "dataGrid",
257
+ "id": "blocked-runs",
258
+ "props": {
259
+ "title": "Blocked feature runs",
260
+ "collapsible": true,
261
+ "defaultCollapsed": false,
262
+ "showCount": true,
263
+ "rowKey": "user_task_key",
264
+ "refreshMs": 5000,
265
+ "data": {
266
+ "kind": "datasource",
267
+ "source": "app",
268
+ "table": "user_tasks",
269
+ "orderBy": { "field": "updated_at", "dir": "desc" },
270
+ "filter": [{ "field": "element_id", "in": ["feature-blocked"] }]
271
+ },
272
+ "columns": [
273
+ { "field": "subject_key", "header": "Feature", "link": { "kind": "page", "page": "feature", "keyField": "subject_key" } },
274
+ { "field": "question", "header": "Disposition" },
275
+ { "field": "subject_url", "header": "Issue", "linkField": "subject_url" },
276
+ { "field": "process_key", "header": "Process", "link": { "kind": "processExplorer", "keyField": "process_key" } },
277
+ { "field": "updated_at", "header": "Updated" }
278
+ ],
279
+ "rowActions": [
280
+ {
281
+ "label": "Acknowledge blocked",
282
+ "confirm": "Acknowledge this blocked run? It settles to terminal blocked (the agent could not open a PR).",
283
+ "showWhenField": "user_task_key",
284
+ "action": {
285
+ "path": "/app/api/actions/acknowledge-blocked",
286
+ "body": { "userTaskKey": "{{row.user_task_key}}" }
287
+ }
288
+ }
289
+ ],
290
+ "detail": {
291
+ "linkField": "subject_url",
292
+ "fields": [{ "field": "question", "label": "Disposition" }]
293
+ }
294
+ }
295
+ }
296
+ ]
297
+ }