bosun 0.40.2 → 0.40.4
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/README.md +4 -0
- package/cli.mjs +127 -69
- package/config/config.mjs +35 -15
- package/desktop/package.json +2 -2
- package/infra/monitor.mjs +52 -16
- package/infra/session-tracker.mjs +1 -0
- package/infra/sync-engine.mjs +6 -1
- package/infra/update-check.mjs +16 -10
- package/kanban/kanban-adapter.mjs +19 -4
- package/kanban/ve-orchestrator.ps1 +25 -0
- package/package.json +1 -1
- package/server/ui-server.mjs +502 -39
- package/task/task-executor.mjs +690 -6
- package/task/task-store.mjs +116 -1
- package/ui/components/kanban-board.js +137 -9
- package/ui/components/shared.js +107 -45
- package/ui/demo-defaults.js +20 -20
- package/ui/demo.html +26 -1
- package/ui/modules/mui.js +600 -397
- package/ui/styles/components.css +43 -3
- package/ui/styles/kanban.css +66 -11
- package/ui/styles.monolith.css +89 -0
- package/ui/tabs/agents.js +194 -20
- package/ui/tabs/tasks.js +673 -162
- package/workflow/workflow-engine.mjs +30 -29
- package/workflow/workflow-nodes.mjs +321 -22
- package/workflow/workflow-templates.mjs +1 -1
- package/workflow-templates/task-batch.mjs +10 -10
- package/workspace/workspace-manager.mjs +25 -0
- package/workspace/worktree-manager.mjs +8 -2
package/ui/demo-defaults.js
CHANGED
|
@@ -13344,9 +13344,8 @@
|
|
|
13344
13344
|
"edgeCount": 11,
|
|
13345
13345
|
"recommended": false,
|
|
13346
13346
|
"enabled": true,
|
|
13347
|
-
"trigger": "trigger.
|
|
13347
|
+
"trigger": "trigger.task_available",
|
|
13348
13348
|
"variables": {
|
|
13349
|
-
"backlogThreshold": 3,
|
|
13350
13349
|
"maxConcurrent": 2,
|
|
13351
13350
|
"pollStatus": "todo",
|
|
13352
13351
|
"maxBatchSize": 5,
|
|
@@ -13370,10 +13369,11 @@
|
|
|
13370
13369
|
"nodes": [
|
|
13371
13370
|
{
|
|
13372
13371
|
"id": "trigger",
|
|
13373
|
-
"type": "trigger.
|
|
13374
|
-
"label": "
|
|
13372
|
+
"type": "trigger.task_available",
|
|
13373
|
+
"label": "Tasks Available?",
|
|
13375
13374
|
"config": {
|
|
13376
|
-
"
|
|
13375
|
+
"maxParallel": "{{maxConcurrent}}",
|
|
13376
|
+
"pollIntervalMs": 60000,
|
|
13377
13377
|
"status": "{{pollStatus}}"
|
|
13378
13378
|
},
|
|
13379
13379
|
"position": {
|
|
@@ -13653,9 +13653,8 @@
|
|
|
13653
13653
|
"edgeCount": 6,
|
|
13654
13654
|
"recommended": true,
|
|
13655
13655
|
"enabled": true,
|
|
13656
|
-
"trigger": "trigger.
|
|
13656
|
+
"trigger": "trigger.task_available",
|
|
13657
13657
|
"variables": {
|
|
13658
|
-
"backlogThreshold": 3,
|
|
13659
13658
|
"maxConcurrent": 3,
|
|
13660
13659
|
"pollStatus": "todo",
|
|
13661
13660
|
"maxBatchSize": 10,
|
|
@@ -13678,10 +13677,11 @@
|
|
|
13678
13677
|
"nodes": [
|
|
13679
13678
|
{
|
|
13680
13679
|
"id": "trigger",
|
|
13681
|
-
"type": "trigger.
|
|
13682
|
-
"label": "
|
|
13680
|
+
"type": "trigger.task_available",
|
|
13681
|
+
"label": "Tasks Available?",
|
|
13683
13682
|
"config": {
|
|
13684
|
-
"
|
|
13683
|
+
"maxParallel": "{{maxConcurrent}}",
|
|
13684
|
+
"pollIntervalMs": 60000,
|
|
13685
13685
|
"status": "{{pollStatus}}"
|
|
13686
13686
|
},
|
|
13687
13687
|
"position": {
|
|
@@ -28166,9 +28166,8 @@
|
|
|
28166
28166
|
"category": "lifecycle",
|
|
28167
28167
|
"enabled": true,
|
|
28168
28168
|
"nodeCount": 11,
|
|
28169
|
-
"trigger": "trigger.
|
|
28169
|
+
"trigger": "trigger.task_available",
|
|
28170
28170
|
"variables": {
|
|
28171
|
-
"backlogThreshold": 3,
|
|
28172
28171
|
"maxConcurrent": 2,
|
|
28173
28172
|
"pollStatus": "todo",
|
|
28174
28173
|
"maxBatchSize": 5,
|
|
@@ -28179,10 +28178,11 @@
|
|
|
28179
28178
|
"nodes": [
|
|
28180
28179
|
{
|
|
28181
28180
|
"id": "trigger",
|
|
28182
|
-
"type": "trigger.
|
|
28183
|
-
"label": "
|
|
28181
|
+
"type": "trigger.task_available",
|
|
28182
|
+
"label": "Tasks Available?",
|
|
28184
28183
|
"config": {
|
|
28185
|
-
"
|
|
28184
|
+
"maxParallel": "{{maxConcurrent}}",
|
|
28185
|
+
"pollIntervalMs": 60000,
|
|
28186
28186
|
"status": "{{pollStatus}}"
|
|
28187
28187
|
},
|
|
28188
28188
|
"position": {
|
|
@@ -28463,9 +28463,8 @@
|
|
|
28463
28463
|
"category": "lifecycle",
|
|
28464
28464
|
"enabled": true,
|
|
28465
28465
|
"nodeCount": 7,
|
|
28466
|
-
"trigger": "trigger.
|
|
28466
|
+
"trigger": "trigger.task_available",
|
|
28467
28467
|
"variables": {
|
|
28468
|
-
"backlogThreshold": 3,
|
|
28469
28468
|
"maxConcurrent": 3,
|
|
28470
28469
|
"pollStatus": "todo",
|
|
28471
28470
|
"maxBatchSize": 10,
|
|
@@ -28475,10 +28474,11 @@
|
|
|
28475
28474
|
"nodes": [
|
|
28476
28475
|
{
|
|
28477
28476
|
"id": "trigger",
|
|
28478
|
-
"type": "trigger.
|
|
28479
|
-
"label": "
|
|
28477
|
+
"type": "trigger.task_available",
|
|
28478
|
+
"label": "Tasks Available?",
|
|
28480
28479
|
"config": {
|
|
28481
|
-
"
|
|
28480
|
+
"maxParallel": "{{maxConcurrent}}",
|
|
28481
|
+
"pollIntervalMs": 60000,
|
|
28482
28482
|
"status": "{{pollStatus}}"
|
|
28483
28483
|
},
|
|
28484
28484
|
"position": {
|
package/ui/demo.html
CHANGED
|
@@ -2964,6 +2964,30 @@
|
|
|
2964
2964
|
}
|
|
2965
2965
|
return { ok: true, data: { nodes, edges } };
|
|
2966
2966
|
}
|
|
2967
|
+
if (route === '/api/tasks/epic-dependencies') {
|
|
2968
|
+
const map = STATE.epicDependencies && typeof STATE.epicDependencies === 'object'
|
|
2969
|
+
? STATE.epicDependencies
|
|
2970
|
+
: (STATE.epicDependencies = {});
|
|
2971
|
+
if (method === 'GET') {
|
|
2972
|
+
const data = Object.entries(map).map(([epicId, dependencies]) => ({
|
|
2973
|
+
epicId,
|
|
2974
|
+
dependencies: Array.isArray(dependencies)
|
|
2975
|
+
? dependencies.map((value) => String(value || '').trim()).filter(Boolean)
|
|
2976
|
+
: [],
|
|
2977
|
+
}));
|
|
2978
|
+
return { ok: true, source: 'demo', data };
|
|
2979
|
+
}
|
|
2980
|
+
if (method === 'PUT') {
|
|
2981
|
+
const epicId = String(body?.epicId || body?.id || '').trim();
|
|
2982
|
+
if (!epicId) return { ok: false, error: 'epicId required' };
|
|
2983
|
+
const dependencies = Array.isArray(body?.dependencies)
|
|
2984
|
+
? body.dependencies.map((value) => String(value || '').trim()).filter(Boolean).filter((value) => value !== epicId)
|
|
2985
|
+
: [];
|
|
2986
|
+
if (dependencies.length) map[epicId] = [...new Set(dependencies)];
|
|
2987
|
+
else delete map[epicId];
|
|
2988
|
+
return { ok: true, source: 'demo', data: { epicId, dependencies: map[epicId] || [] } };
|
|
2989
|
+
}
|
|
2990
|
+
}
|
|
2967
2991
|
if (route === '/api/tasks/attachments/upload') {
|
|
2968
2992
|
const taskId = body?.taskId || body?.id || params.get('taskId');
|
|
2969
2993
|
const t = findTask(taskId);
|
|
@@ -3117,7 +3141,8 @@
|
|
|
3117
3141
|
data: t,
|
|
3118
3142
|
dag: { sprintId: t.sprintId || null, sprint: { nodes: [] }, global: { nodes: [] } },
|
|
3119
3143
|
};
|
|
3120
|
-
}
|
|
3144
|
+
}
|
|
3145
|
+
if (route === '/api/tasks/retry') {
|
|
3121
3146
|
const t = findTask(body?.taskId);
|
|
3122
3147
|
if (t) { t.status = 'todo'; t.updated = Date.now(); addLog('info', 'task-executor', `Task retried: ${t.title}`); }
|
|
3123
3148
|
return { ok: true, data: t || null };
|