bosun 0.36.0 → 0.36.2
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/.env.example +98 -16
- package/README.md +27 -0
- package/agent-event-bus.mjs +5 -5
- package/agent-pool.mjs +129 -12
- package/agent-prompts.mjs +7 -1
- package/agent-sdk.mjs +13 -2
- package/agent-supervisor.mjs +2 -2
- package/agent-work-report.mjs +1 -1
- package/anomaly-detector.mjs +6 -6
- package/autofix.mjs +15 -15
- package/bosun-skills.mjs +4 -4
- package/bosun.schema.json +160 -4
- package/claude-shell.mjs +11 -11
- package/cli.mjs +21 -21
- package/codex-config.mjs +19 -19
- package/codex-shell.mjs +180 -29
- package/config-doctor.mjs +27 -2
- package/config.mjs +60 -7
- package/copilot-shell.mjs +4 -4
- package/error-detector.mjs +1 -1
- package/fleet-coordinator.mjs +2 -2
- package/gemini-shell.mjs +692 -0
- package/github-oauth-portal.mjs +1 -1
- package/github-reconciler.mjs +2 -2
- package/kanban-adapter.mjs +741 -168
- package/merge-strategy.mjs +25 -25
- package/monitor.mjs +123 -105
- package/opencode-shell.mjs +22 -22
- package/package.json +7 -1
- package/postinstall.mjs +22 -22
- package/pr-cleanup-daemon.mjs +6 -6
- package/prepublish-check.mjs +4 -4
- package/presence.mjs +2 -2
- package/primary-agent.mjs +85 -7
- package/publish.mjs +1 -1
- package/review-agent.mjs +1 -1
- package/session-tracker.mjs +11 -0
- package/setup-web-server.mjs +429 -21
- package/setup.mjs +367 -12
- package/shared-knowledge.mjs +1 -1
- package/startup-service.mjs +9 -9
- package/stream-resilience.mjs +58 -4
- package/sync-engine.mjs +2 -2
- package/task-assessment.mjs +9 -9
- package/task-cli.mjs +1 -1
- package/task-complexity.mjs +71 -2
- package/task-context.mjs +1 -2
- package/task-executor.mjs +104 -41
- package/telegram-bot.mjs +825 -494
- package/telegram-sentinel.mjs +28 -28
- package/ui/app.js +256 -23
- package/ui/app.monolith.js +1 -1
- package/ui/components/agent-selector.js +4 -3
- package/ui/components/chat-view.js +101 -28
- package/ui/components/diff-viewer.js +3 -3
- package/ui/components/kanban-board.js +3 -3
- package/ui/components/session-list.js +255 -35
- package/ui/components/workspace-switcher.js +3 -3
- package/ui/demo.html +209 -194
- package/ui/index.html +3 -3
- package/ui/modules/icon-utils.js +206 -142
- package/ui/modules/icons.js +2 -27
- package/ui/modules/settings-schema.js +29 -5
- package/ui/modules/streaming.js +30 -2
- package/ui/modules/vision-stream.js +275 -0
- package/ui/modules/voice-client.js +102 -9
- package/ui/modules/voice-fallback.js +62 -6
- package/ui/modules/voice-overlay.js +594 -59
- package/ui/modules/voice.js +31 -38
- package/ui/setup.html +284 -34
- package/ui/styles/components.css +47 -0
- package/ui/styles/sessions.css +75 -0
- package/ui/tabs/agents.js +73 -43
- package/ui/tabs/chat.js +37 -40
- package/ui/tabs/control.js +2 -2
- package/ui/tabs/dashboard.js +1 -1
- package/ui/tabs/infra.js +10 -10
- package/ui/tabs/library.js +8 -8
- package/ui/tabs/logs.js +10 -10
- package/ui/tabs/settings.js +20 -20
- package/ui/tabs/tasks.js +76 -47
- package/ui-server.mjs +1761 -124
- package/update-check.mjs +13 -13
- package/ve-kanban.mjs +1 -1
- package/whatsapp-channel.mjs +5 -5
- package/workflow-engine.mjs +20 -1
- package/workflow-nodes.mjs +904 -4
- package/workflow-templates/agents.mjs +321 -7
- package/workflow-templates/ci-cd.mjs +6 -6
- package/workflow-templates/github.mjs +156 -84
- package/workflow-templates/planning.mjs +8 -8
- package/workflow-templates/reliability.mjs +8 -8
- package/workflow-templates/security.mjs +3 -3
- package/workflow-templates.mjs +15 -9
- package/workspace-manager.mjs +85 -1
- package/workspace-monitor.mjs +2 -2
- package/workspace-registry.mjs +2 -2
- package/worktree-manager.mjs +1 -1
package/merge-strategy.mjs
CHANGED
|
@@ -191,7 +191,7 @@ Directory: ${ctx.worktreeDir}`);
|
|
|
191
191
|
Based on the above context, choose ONE action:
|
|
192
192
|
|
|
193
193
|
1. **merge_after_ci_pass** — Agent completed the task successfully, PR looks good, merge when CI passes.
|
|
194
|
-
Use when: Agent reports success ("
|
|
194
|
+
Use when: Agent reports success (":check: Task Complete"), changes match the task description, no obvious issues.
|
|
195
195
|
|
|
196
196
|
2. **prompt** — Agent needs to do more work. Provide a specific message telling the agent what to fix.
|
|
197
197
|
Use when: Task partially done, lint/test failures mentioned, missing files, incomplete implementation.
|
|
@@ -444,7 +444,7 @@ export async function analyzeMergeStrategy(ctx, opts = {}) {
|
|
|
444
444
|
|
|
445
445
|
if (onTelegram) {
|
|
446
446
|
onTelegram(
|
|
447
|
-
|
|
447
|
+
`:search: Merge strategy analysis started for ${ctx.shortId}` +
|
|
448
448
|
(ctx.taskTitle ? ` — "${ctx.taskTitle}"` : "") +
|
|
449
449
|
(ctx.prNumber ? ` (PR #${ctx.prNumber})` : ""),
|
|
450
450
|
);
|
|
@@ -539,16 +539,16 @@ export async function analyzeMergeStrategy(ctx, opts = {}) {
|
|
|
539
539
|
|
|
540
540
|
// ── Notify ─────────────────────────────────────────────────
|
|
541
541
|
const actionEmoji = {
|
|
542
|
-
merge_after_ci_pass: "
|
|
543
|
-
prompt: "
|
|
544
|
-
close_pr: "
|
|
545
|
-
re_attempt: "
|
|
546
|
-
manual_review: "
|
|
547
|
-
wait: "
|
|
548
|
-
noop: "
|
|
542
|
+
merge_after_ci_pass: ":check:",
|
|
543
|
+
prompt: ":chat:",
|
|
544
|
+
close_pr: ":ban:",
|
|
545
|
+
re_attempt: ":refresh:",
|
|
546
|
+
manual_review: ":eye:",
|
|
547
|
+
wait: ":clock:",
|
|
548
|
+
noop: ":close:",
|
|
549
549
|
};
|
|
550
550
|
|
|
551
|
-
const emoji = actionEmoji[decision.action] || "
|
|
551
|
+
const emoji = actionEmoji[decision.action] || ":help:";
|
|
552
552
|
console.log(
|
|
553
553
|
`[${tag}] decision: ${emoji} ${decision.action}` +
|
|
554
554
|
(decision.reason ? ` — ${decision.reason.slice(0, 120)}` : "") +
|
|
@@ -671,7 +671,7 @@ export async function executeDecision(decision, ctx, opts = {}) {
|
|
|
671
671
|
case "manual_review":
|
|
672
672
|
if (onTelegram) {
|
|
673
673
|
onTelegram(
|
|
674
|
-
|
|
674
|
+
`:eye: Manual review needed for ${ctx.taskTitle || ctx.shortId}: ${decision.reason || "no reason"}`,
|
|
675
675
|
);
|
|
676
676
|
}
|
|
677
677
|
return { executed: true, action: "manual_review", success: true };
|
|
@@ -740,7 +740,7 @@ async function executePromptAction(decision, ctx, execOpts) {
|
|
|
740
740
|
|
|
741
741
|
if (onTelegram) {
|
|
742
742
|
onTelegram(
|
|
743
|
-
|
|
743
|
+
`:chat: ${hasLiveThread ? "Resuming" : "Starting"} agent for ${ctx.taskTitle || ctx.shortId}: ${fixMessage.slice(0, 200)}`,
|
|
744
744
|
);
|
|
745
745
|
}
|
|
746
746
|
|
|
@@ -762,18 +762,18 @@ async function executePromptAction(decision, ctx, execOpts) {
|
|
|
762
762
|
|
|
763
763
|
if (result.success) {
|
|
764
764
|
console.log(
|
|
765
|
-
`[${tag}]
|
|
765
|
+
`[${tag}] :check: agent ${result.resumed ? "resumed" : "launched"} successfully for fix`,
|
|
766
766
|
);
|
|
767
767
|
if (onTelegram) {
|
|
768
768
|
onTelegram(
|
|
769
|
-
|
|
769
|
+
`:check: Agent ${result.resumed ? "resumed" : "completed"} fix for ${ctx.taskTitle || ctx.shortId}`,
|
|
770
770
|
);
|
|
771
771
|
}
|
|
772
772
|
} else {
|
|
773
|
-
console.warn(`[${tag}]
|
|
773
|
+
console.warn(`[${tag}] :close: agent fix failed: ${result.error}`);
|
|
774
774
|
if (onTelegram) {
|
|
775
775
|
onTelegram(
|
|
776
|
-
|
|
776
|
+
`:close: Agent fix failed for ${ctx.taskTitle || ctx.shortId}: ${result.error?.slice(0, 200)}`,
|
|
777
777
|
);
|
|
778
778
|
}
|
|
779
779
|
}
|
|
@@ -890,7 +890,7 @@ async function executeReAttemptAction(decision, ctx, execOpts) {
|
|
|
890
890
|
|
|
891
891
|
if (onTelegram) {
|
|
892
892
|
onTelegram(
|
|
893
|
-
|
|
893
|
+
`:refresh: Re-attempting task "${ctx.taskTitle || ctx.shortId}": ${reason.slice(0, 200)}`,
|
|
894
894
|
);
|
|
895
895
|
}
|
|
896
896
|
|
|
@@ -912,20 +912,20 @@ async function executeReAttemptAction(decision, ctx, execOpts) {
|
|
|
912
912
|
|
|
913
913
|
if (result.success) {
|
|
914
914
|
console.log(
|
|
915
|
-
`[${tag}]
|
|
915
|
+
`[${tag}] :check: re-attempt succeeded after ${result.attempts} attempt(s)`,
|
|
916
916
|
);
|
|
917
917
|
if (onTelegram) {
|
|
918
918
|
onTelegram(
|
|
919
|
-
|
|
919
|
+
`:check: Re-attempt succeeded for "${ctx.taskTitle || ctx.shortId}" (${result.attempts} attempt(s))`,
|
|
920
920
|
);
|
|
921
921
|
}
|
|
922
922
|
} else {
|
|
923
923
|
console.warn(
|
|
924
|
-
`[${tag}]
|
|
924
|
+
`[${tag}] :close: re-attempt failed after ${result.attempts} attempt(s): ${result.error}`,
|
|
925
925
|
);
|
|
926
926
|
if (onTelegram) {
|
|
927
927
|
onTelegram(
|
|
928
|
-
|
|
928
|
+
`:close: Re-attempt failed for "${ctx.taskTitle || ctx.shortId}" after ${result.attempts} attempt(s): ${result.error?.slice(0, 200)}`,
|
|
929
929
|
);
|
|
930
930
|
}
|
|
931
931
|
}
|
|
@@ -1007,7 +1007,7 @@ async function executeMergeAction(decision, ctx, execOpts) {
|
|
|
1007
1007
|
);
|
|
1008
1008
|
if (onTelegram) {
|
|
1009
1009
|
onTelegram(
|
|
1010
|
-
|
|
1010
|
+
`:ban: Merge blocked for ${ctx.taskTitle || `PR #${ctx.prNumber || "unknown"}`}: ${reason}`,
|
|
1011
1011
|
);
|
|
1012
1012
|
}
|
|
1013
1013
|
return {
|
|
@@ -1050,7 +1050,7 @@ async function executeMergeAction(decision, ctx, execOpts) {
|
|
|
1050
1050
|
|
|
1051
1051
|
if (onTelegram) {
|
|
1052
1052
|
onTelegram(
|
|
1053
|
-
|
|
1053
|
+
`:check: Auto-merge enabled for PR #${ctx.prNumber} "${ctx.prTitle || ctx.taskTitle || ""}"`,
|
|
1054
1054
|
);
|
|
1055
1055
|
}
|
|
1056
1056
|
|
|
@@ -1066,7 +1066,7 @@ async function executeMergeAction(decision, ctx, execOpts) {
|
|
|
1066
1066
|
|
|
1067
1067
|
if (onTelegram) {
|
|
1068
1068
|
onTelegram(
|
|
1069
|
-
|
|
1069
|
+
`:alert: Auto-merge failed for PR #${ctx.prNumber}: ${err.message?.slice(0, 200)}. Will retry on next cycle.`,
|
|
1070
1070
|
);
|
|
1071
1071
|
}
|
|
1072
1072
|
|
|
@@ -1116,7 +1116,7 @@ async function executeCloseAction(decision, ctx, execOpts) {
|
|
|
1116
1116
|
|
|
1117
1117
|
if (onTelegram) {
|
|
1118
1118
|
onTelegram(
|
|
1119
|
-
|
|
1119
|
+
`:ban: Closed PR #${ctx.prNumber}: ${decision.reason || "strategy decision"}`,
|
|
1120
1120
|
);
|
|
1121
1121
|
}
|
|
1122
1122
|
|