@nanobpm/nano-workforce 0.94.0 → 0.96.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.
- package/CHANGELOG.md +14 -0
- package/app/agentic/vocab/crew-vocab.test.ts +12 -0
- package/app/agentic/vocab/crew-vocab.ts +18 -0
- package/app/agentic/vocab/demand-report.test.ts +34 -0
- package/app/agentic/vocab/demand-report.ts +21 -1
- package/app/agentic/vocab/job-types.test.ts +107 -0
- package/app/agentic/vocab/job-types.ts +70 -0
- package/app/feature.ts +43 -0
- package/app/interEpicRegression.test.ts +516 -0
- package/app/plan.test.ts +54 -0
- package/app/plan.ts +63 -0
- package/app/planFanoutPreflight.test.ts +73 -0
- package/app/planLowering.test.ts +184 -0
- package/app/planLowering.ts +201 -0
- package/app/pollUserTasks.test.ts +31 -0
- package/app/service.ts +54 -3
- package/app/userTasks.test.ts +14 -0
- package/app/userTasks.ts +15 -1
- package/app/waitGate.test.ts +176 -0
- package/app/waitGate.ts +199 -0
- package/app/waitGatePoll.test.ts +143 -0
- package/app/waitGateVisibility.test.ts +55 -0
- package/db/migrations/047_plan_wait_gate.sql +34 -0
- package/db/migrations/048_feature_escalations.sql +51 -0
- package/e2e/inter-epic-dependency.e2e.ts +227 -0
- package/e2e/plan-fanout-preflight.e2e.ts +170 -0
- package/openapi.yaml +20 -3
- package/operations/startEpicSet.admission.integration.test.ts +25 -9
- package/operations/startEpicSet.ts +31 -24
- package/package.json +2 -2
- package/pages/epic-detail.page.json +31 -3
- package/pages/epic.page.json +2 -1
- package/pages/feature.page.json +1 -1
- package/pages/home.page.json +1 -0
- package/pages/lineage.page.json +2 -2
- package/pages/overview.page.json +3 -3
- package/pages/tasks.page.json +143 -8
- package/resources/processes/plan-fanout.bpmn +408 -184
- package/workers/record-feature-escalation/worker.test.ts +27 -3
- package/workers/record-feature-escalation/worker.ts +7 -1
- package/workers/select-wave/worker.test.ts +37 -0
- package/workers/select-wave/worker.ts +11 -0
package/pages/tasks.page.json
CHANGED
|
@@ -105,10 +105,27 @@
|
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
107
|
"field": "updated_at",
|
|
108
|
-
"header": "Updated"
|
|
108
|
+
"header": "Updated",
|
|
109
|
+
"format": "datetime"
|
|
109
110
|
}
|
|
110
111
|
],
|
|
111
112
|
"rowKey": "user_task_key",
|
|
113
|
+
"rowActions": [
|
|
114
|
+
{
|
|
115
|
+
"label": "Abandon",
|
|
116
|
+
"confirm": "Abandon this escalated task? The run gives up on it (no PR).",
|
|
117
|
+
"showWhenField": "user_task_key",
|
|
118
|
+
"action": {
|
|
119
|
+
"path": "/app/api/actions/complete-user-task",
|
|
120
|
+
"body": {
|
|
121
|
+
"userTaskKey": "{{row.user_task_key}}",
|
|
122
|
+
"variables": {
|
|
123
|
+
"resolution": "abandon"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
],
|
|
112
129
|
"detail": {
|
|
113
130
|
"linkField": "subject_url",
|
|
114
131
|
"fields": [
|
|
@@ -116,7 +133,26 @@
|
|
|
116
133
|
"field": "question",
|
|
117
134
|
"label": "Escalation question"
|
|
118
135
|
}
|
|
119
|
-
]
|
|
136
|
+
],
|
|
137
|
+
"form": {
|
|
138
|
+
"showWhenField": "user_task_key",
|
|
139
|
+
"title": "Answer escalation",
|
|
140
|
+
"promptField": "question",
|
|
141
|
+
"inputKey": "answer",
|
|
142
|
+
"inputLabel": "Guidance for the implementation agent",
|
|
143
|
+
"submitLabel": "Answer & re-dispatch",
|
|
144
|
+
"action": {
|
|
145
|
+
"path": "/app/api/actions/complete-user-task",
|
|
146
|
+
"successLabel": "Answered — the agent will resume",
|
|
147
|
+
"body": {
|
|
148
|
+
"userTaskKey": "{{row.user_task_key}}",
|
|
149
|
+
"variables": {
|
|
150
|
+
"resolution": "answer",
|
|
151
|
+
"answer": "{{form.answer}}"
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
120
156
|
},
|
|
121
157
|
"refreshMs": 5000
|
|
122
158
|
}
|
|
@@ -170,10 +206,27 @@
|
|
|
170
206
|
},
|
|
171
207
|
{
|
|
172
208
|
"field": "updated_at",
|
|
173
|
-
"header": "Updated"
|
|
209
|
+
"header": "Updated",
|
|
210
|
+
"format": "datetime"
|
|
174
211
|
}
|
|
175
212
|
],
|
|
176
213
|
"rowKey": "user_task_key",
|
|
214
|
+
"rowActions": [
|
|
215
|
+
{
|
|
216
|
+
"label": "Proceed",
|
|
217
|
+
"confirm": "Proceed with the current plan as-is? It is dispatched unchanged.",
|
|
218
|
+
"showWhenField": "user_task_key",
|
|
219
|
+
"action": {
|
|
220
|
+
"path": "/app/api/actions/complete-user-task",
|
|
221
|
+
"body": {
|
|
222
|
+
"userTaskKey": "{{row.user_task_key}}",
|
|
223
|
+
"variables": {
|
|
224
|
+
"directive": "proceed"
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
],
|
|
177
230
|
"detail": {
|
|
178
231
|
"linkField": "subject_url",
|
|
179
232
|
"fields": [
|
|
@@ -181,7 +234,26 @@
|
|
|
181
234
|
"field": "question",
|
|
182
235
|
"label": "Review findings"
|
|
183
236
|
}
|
|
184
|
-
]
|
|
237
|
+
],
|
|
238
|
+
"form": {
|
|
239
|
+
"showWhenField": "user_task_key",
|
|
240
|
+
"title": "Revise — send the plan back to the planner",
|
|
241
|
+
"promptField": "question",
|
|
242
|
+
"inputKey": "notes",
|
|
243
|
+
"inputLabel": "Revision guidance for the planner",
|
|
244
|
+
"submitLabel": "Revise & re-plan",
|
|
245
|
+
"action": {
|
|
246
|
+
"path": "/app/api/actions/complete-user-task",
|
|
247
|
+
"successLabel": "Sent back — the planner will revise",
|
|
248
|
+
"body": {
|
|
249
|
+
"userTaskKey": "{{row.user_task_key}}",
|
|
250
|
+
"variables": {
|
|
251
|
+
"directive": "revise",
|
|
252
|
+
"notes": "{{form.notes}}"
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
185
257
|
},
|
|
186
258
|
"refreshMs": 5000
|
|
187
259
|
}
|
|
@@ -235,10 +307,55 @@
|
|
|
235
307
|
},
|
|
236
308
|
{
|
|
237
309
|
"field": "updated_at",
|
|
238
|
-
"header": "Updated"
|
|
310
|
+
"header": "Updated",
|
|
311
|
+
"format": "datetime"
|
|
239
312
|
}
|
|
240
313
|
],
|
|
241
314
|
"rowKey": "user_task_key",
|
|
315
|
+
"rowActions": [
|
|
316
|
+
{
|
|
317
|
+
"label": "Proceed",
|
|
318
|
+
"confirm": "Accept the red trial merge and continue?",
|
|
319
|
+
"showWhenField": "user_task_key",
|
|
320
|
+
"action": {
|
|
321
|
+
"path": "/app/api/actions/complete-user-task",
|
|
322
|
+
"body": {
|
|
323
|
+
"userTaskKey": "{{row.user_task_key}}",
|
|
324
|
+
"variables": {
|
|
325
|
+
"action": "proceed"
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"label": "Rebase",
|
|
332
|
+
"confirm": "Re-run the trial merge?",
|
|
333
|
+
"showWhenField": "user_task_key",
|
|
334
|
+
"action": {
|
|
335
|
+
"path": "/app/api/actions/complete-user-task",
|
|
336
|
+
"body": {
|
|
337
|
+
"userTaskKey": "{{row.user_task_key}}",
|
|
338
|
+
"variables": {
|
|
339
|
+
"action": "rebase"
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
"label": "Abandon",
|
|
346
|
+
"confirm": "Stop and finalize the plan?",
|
|
347
|
+
"showWhenField": "user_task_key",
|
|
348
|
+
"action": {
|
|
349
|
+
"path": "/app/api/actions/complete-user-task",
|
|
350
|
+
"body": {
|
|
351
|
+
"userTaskKey": "{{row.user_task_key}}",
|
|
352
|
+
"variables": {
|
|
353
|
+
"action": "abandon"
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
],
|
|
242
359
|
"detail": {
|
|
243
360
|
"linkField": "subject_url",
|
|
244
361
|
"fields": [
|
|
@@ -301,7 +418,8 @@
|
|
|
301
418
|
},
|
|
302
419
|
{
|
|
303
420
|
"field": "updated_at",
|
|
304
|
-
"header": "Updated"
|
|
421
|
+
"header": "Updated",
|
|
422
|
+
"format": "datetime"
|
|
305
423
|
}
|
|
306
424
|
],
|
|
307
425
|
"rowKey": "user_task_key",
|
|
@@ -384,7 +502,8 @@
|
|
|
384
502
|
},
|
|
385
503
|
{
|
|
386
504
|
"field": "updated_at",
|
|
387
|
-
"header": "Updated"
|
|
505
|
+
"header": "Updated",
|
|
506
|
+
"format": "datetime"
|
|
388
507
|
}
|
|
389
508
|
],
|
|
390
509
|
"rowKey": "user_task_key",
|
|
@@ -395,7 +514,23 @@
|
|
|
395
514
|
"field": "question",
|
|
396
515
|
"label": "Disposition"
|
|
397
516
|
}
|
|
398
|
-
]
|
|
517
|
+
],
|
|
518
|
+
"form": {
|
|
519
|
+
"showWhenField": "user_task_key",
|
|
520
|
+
"title": "Acknowledge blocked run",
|
|
521
|
+
"promptField": "question",
|
|
522
|
+
"inputKey": "note",
|
|
523
|
+
"inputLabel": "Disposition note (what you did / why)",
|
|
524
|
+
"submitLabel": "Acknowledge & close",
|
|
525
|
+
"action": {
|
|
526
|
+
"path": "/app/api/actions/acknowledge-blocked",
|
|
527
|
+
"successLabel": "Acknowledged — the run will close",
|
|
528
|
+
"body": {
|
|
529
|
+
"userTaskKey": "{{row.user_task_key}}",
|
|
530
|
+
"note": "{{form.note}}"
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
}
|
|
399
534
|
},
|
|
400
535
|
"refreshMs": 5000
|
|
401
536
|
}
|