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.
Files changed (98) hide show
  1. package/.env.example +98 -16
  2. package/README.md +27 -0
  3. package/agent-event-bus.mjs +5 -5
  4. package/agent-pool.mjs +129 -12
  5. package/agent-prompts.mjs +7 -1
  6. package/agent-sdk.mjs +13 -2
  7. package/agent-supervisor.mjs +2 -2
  8. package/agent-work-report.mjs +1 -1
  9. package/anomaly-detector.mjs +6 -6
  10. package/autofix.mjs +15 -15
  11. package/bosun-skills.mjs +4 -4
  12. package/bosun.schema.json +160 -4
  13. package/claude-shell.mjs +11 -11
  14. package/cli.mjs +21 -21
  15. package/codex-config.mjs +19 -19
  16. package/codex-shell.mjs +180 -29
  17. package/config-doctor.mjs +27 -2
  18. package/config.mjs +60 -7
  19. package/copilot-shell.mjs +4 -4
  20. package/error-detector.mjs +1 -1
  21. package/fleet-coordinator.mjs +2 -2
  22. package/gemini-shell.mjs +692 -0
  23. package/github-oauth-portal.mjs +1 -1
  24. package/github-reconciler.mjs +2 -2
  25. package/kanban-adapter.mjs +741 -168
  26. package/merge-strategy.mjs +25 -25
  27. package/monitor.mjs +123 -105
  28. package/opencode-shell.mjs +22 -22
  29. package/package.json +7 -1
  30. package/postinstall.mjs +22 -22
  31. package/pr-cleanup-daemon.mjs +6 -6
  32. package/prepublish-check.mjs +4 -4
  33. package/presence.mjs +2 -2
  34. package/primary-agent.mjs +85 -7
  35. package/publish.mjs +1 -1
  36. package/review-agent.mjs +1 -1
  37. package/session-tracker.mjs +11 -0
  38. package/setup-web-server.mjs +429 -21
  39. package/setup.mjs +367 -12
  40. package/shared-knowledge.mjs +1 -1
  41. package/startup-service.mjs +9 -9
  42. package/stream-resilience.mjs +58 -4
  43. package/sync-engine.mjs +2 -2
  44. package/task-assessment.mjs +9 -9
  45. package/task-cli.mjs +1 -1
  46. package/task-complexity.mjs +71 -2
  47. package/task-context.mjs +1 -2
  48. package/task-executor.mjs +104 -41
  49. package/telegram-bot.mjs +825 -494
  50. package/telegram-sentinel.mjs +28 -28
  51. package/ui/app.js +256 -23
  52. package/ui/app.monolith.js +1 -1
  53. package/ui/components/agent-selector.js +4 -3
  54. package/ui/components/chat-view.js +101 -28
  55. package/ui/components/diff-viewer.js +3 -3
  56. package/ui/components/kanban-board.js +3 -3
  57. package/ui/components/session-list.js +255 -35
  58. package/ui/components/workspace-switcher.js +3 -3
  59. package/ui/demo.html +209 -194
  60. package/ui/index.html +3 -3
  61. package/ui/modules/icon-utils.js +206 -142
  62. package/ui/modules/icons.js +2 -27
  63. package/ui/modules/settings-schema.js +29 -5
  64. package/ui/modules/streaming.js +30 -2
  65. package/ui/modules/vision-stream.js +275 -0
  66. package/ui/modules/voice-client.js +102 -9
  67. package/ui/modules/voice-fallback.js +62 -6
  68. package/ui/modules/voice-overlay.js +594 -59
  69. package/ui/modules/voice.js +31 -38
  70. package/ui/setup.html +284 -34
  71. package/ui/styles/components.css +47 -0
  72. package/ui/styles/sessions.css +75 -0
  73. package/ui/tabs/agents.js +73 -43
  74. package/ui/tabs/chat.js +37 -40
  75. package/ui/tabs/control.js +2 -2
  76. package/ui/tabs/dashboard.js +1 -1
  77. package/ui/tabs/infra.js +10 -10
  78. package/ui/tabs/library.js +8 -8
  79. package/ui/tabs/logs.js +10 -10
  80. package/ui/tabs/settings.js +20 -20
  81. package/ui/tabs/tasks.js +76 -47
  82. package/ui-server.mjs +1761 -124
  83. package/update-check.mjs +13 -13
  84. package/ve-kanban.mjs +1 -1
  85. package/whatsapp-channel.mjs +5 -5
  86. package/workflow-engine.mjs +20 -1
  87. package/workflow-nodes.mjs +904 -4
  88. package/workflow-templates/agents.mjs +321 -7
  89. package/workflow-templates/ci-cd.mjs +6 -6
  90. package/workflow-templates/github.mjs +156 -84
  91. package/workflow-templates/planning.mjs +8 -8
  92. package/workflow-templates/reliability.mjs +8 -8
  93. package/workflow-templates/security.mjs +3 -3
  94. package/workflow-templates.mjs +15 -9
  95. package/workspace-manager.mjs +85 -1
  96. package/workspace-monitor.mjs +2 -2
  97. package/workspace-registry.mjs +2 -2
  98. package/worktree-manager.mjs +1 -1
package/copilot-shell.mjs CHANGED
@@ -719,7 +719,7 @@ export async function execCopilotPrompt(userMessage, options = {}) {
719
719
  if (activeTurn && !options._holdActiveTurn) {
720
720
  return {
721
721
  finalResponse:
722
- " Agent is still executing a previous task. Please wait.",
722
+ ":clock: Agent is still executing a previous task. Please wait.",
723
723
  items: [],
724
724
  usage: null,
725
725
  };
@@ -857,8 +857,8 @@ export async function execCopilotPrompt(userMessage, options = {}) {
857
857
  const reason = abortController?.signal?.reason || "timeout";
858
858
  const msg =
859
859
  reason === "user_stop"
860
- ? "🛑 Agent stopped by user."
861
- : `⏱️ Agent timed out after ${timeoutMs / 1000}s`;
860
+ ? ":close: Agent stopped by user."
861
+ : `:clock: Agent timed out after ${timeoutMs / 1000}s`;
862
862
  return { finalResponse: msg, items: [], usage: null };
863
863
  }
864
864
  // ── Transient stream retry ──────────────────────────────────────────────────
@@ -885,7 +885,7 @@ export async function execCopilotPrompt(userMessage, options = {}) {
885
885
  `[copilot-shell] stream disconnection not resolved after ${MAX_STREAM_RETRIES} attempts`,
886
886
  );
887
887
  return {
888
- finalResponse: `❌ Stream disconnected after ${MAX_STREAM_RETRIES} retries: ${err.message}`,
888
+ finalResponse: `:close: Stream disconnected after ${MAX_STREAM_RETRIES} retries: ${err.message}`,
889
889
  items: [],
890
890
  usage: null,
891
891
  };
@@ -456,7 +456,7 @@ export class ErrorDetector {
456
456
  // Block after too many consecutive errors.
457
457
  if (errorCount >= this.maxConsecutiveErrors) {
458
458
  const reason = `Task has ${errorCount} consecutive errors (max ${this.maxConsecutiveErrors}) — blocking`;
459
- this._notifyTelegram(`🛑 Task ${taskId} blocked: ${reason}`);
459
+ this._notifyTelegram(`:close: Task ${taskId} blocked: ${reason}`);
460
460
  return { action: "block", reason, errorCount };
461
461
  }
462
462
 
@@ -811,7 +811,7 @@ export function getTotalFleetSlots() {
811
811
  export function formatFleetSummary() {
812
812
  const fp = fleetState.repoFingerprint;
813
813
  const lines = [
814
- `🛰️ Fleet Status: ${fleetState.mode.toUpperCase()}`,
814
+ `:server: Fleet Status: ${fleetState.mode.toUpperCase()}`,
815
815
  `Repo: ${fp?.normalized || "unknown"} (${fp?.hash?.slice(0, 8) || "no fingerprint"})`,
816
816
  `Coordinator: ${fleetState.isCoordinator ? "THIS INSTANCE" : "remote"}`,
817
817
  `Fleet size: ${fleetState.fleetSize} workstation(s)`,
@@ -825,7 +825,7 @@ export function formatFleetSummary() {
825
825
  const label = peer.instance_label || peer.instance_id;
826
826
  const slots = peer.max_parallel ?? "?";
827
827
  const host = peer.host || "unknown";
828
- const coordTag = peer.is_coordinator ? " " : "";
828
+ const coordTag = peer.is_coordinator ? " :star:" : "";
829
829
  lines.push(` • ${label}${coordTag} — ${host} (${slots} slots)`);
830
830
  }
831
831
  }