bosun 0.26.3 → 0.26.5
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 +65 -65
- package/package.json +3 -2
package/.env.example
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# ───
|
|
1
|
+
# ─── Bosun — Environment Configuration ───────────────────────────────
|
|
2
2
|
# Copy this file to .env and fill in your values.
|
|
3
|
-
# Or run:
|
|
3
|
+
# Or run: bosun --setup
|
|
4
4
|
# All variables are optional unless marked [REQUIRED].
|
|
5
5
|
# Boolean flags use true/false (preferred). Legacy 1/0 is still accepted.
|
|
6
6
|
# Profile guidance:
|
|
@@ -31,7 +31,7 @@ TASK_CLAIM_OWNER_STALE_TTL_MS=600000
|
|
|
31
31
|
|
|
32
32
|
# ─── Telegram Bot ─────────────────────────────────────────────────────────────
|
|
33
33
|
# Create a bot via @BotFather on Telegram, then paste the token here.
|
|
34
|
-
# Run `
|
|
34
|
+
# Run `bosun-chat-id` to discover your chat ID.
|
|
35
35
|
TELEGRAM_BOT_TOKEN=
|
|
36
36
|
TELEGRAM_CHAT_ID=
|
|
37
37
|
# Optional additional allow-list entries (comma-separated chat IDs or user IDs).
|
|
@@ -106,10 +106,10 @@ TELEGRAM_MINIAPP_ENABLED=false
|
|
|
106
106
|
# TELEGRAM_UI_TUNNEL=auto
|
|
107
107
|
|
|
108
108
|
# ─── Telegram Sentinel (independent watchdog) ──────────────────────────────
|
|
109
|
-
# Keep Telegram command availability even when
|
|
109
|
+
# Keep Telegram command availability even when bosun is down.
|
|
110
110
|
# Sentinel can auto-restart monitor, detect crash loops, and run repair-agent.
|
|
111
|
-
# Auto-start sentinel whenever
|
|
112
|
-
#
|
|
111
|
+
# Auto-start sentinel whenever bosun starts (default: disabled)
|
|
112
|
+
# BOSUN_SENTINEL_AUTO_START=true
|
|
113
113
|
# Auto-restart monitor when sentinel detects monitor down/crash (default: 1)
|
|
114
114
|
# SENTINEL_AUTO_RESTART_MONITOR=true
|
|
115
115
|
# Crash-loop threshold within rolling window (default: 3)
|
|
@@ -148,7 +148,7 @@ TELEGRAM_MINIAPP_ENABLED=false
|
|
|
148
148
|
# TELEGRAM_IMMEDIATE_PRIORITY=1
|
|
149
149
|
|
|
150
150
|
# ─── Presence & Multi-Instance Coordination ──────────────────────────────────
|
|
151
|
-
# Presence heartbeat allows discovering multiple
|
|
151
|
+
# Presence heartbeat allows discovering multiple bosun instances.
|
|
152
152
|
# Heartbeat interval in seconds (default: 60)
|
|
153
153
|
# TELEGRAM_PRESENCE_INTERVAL_SEC=60
|
|
154
154
|
# Consider instances offline after this many seconds (default: 180)
|
|
@@ -174,7 +174,7 @@ TELEGRAM_MINIAPP_ENABLED=false
|
|
|
174
174
|
# Optional WhatsApp channel for receiving commands and notifications.
|
|
175
175
|
# Uses @whiskeysockets/baileys for WhatsApp Web multi-device API.
|
|
176
176
|
# Install baileys: npm install @whiskeysockets/baileys qrcode-terminal
|
|
177
|
-
# Then authenticate:
|
|
177
|
+
# Then authenticate: bosun --whatsapp-auth
|
|
178
178
|
# Enable WhatsApp channel (default: disabled)
|
|
179
179
|
# WHATSAPP_ENABLED=false
|
|
180
180
|
# Restrict to a specific chat JID (recommended for security)
|
|
@@ -217,7 +217,7 @@ TELEGRAM_MINIAPP_ENABLED=false
|
|
|
217
217
|
# Define AI executors that work on tasks.
|
|
218
218
|
# Format: EXECUTOR_TYPE:VARIANT:WEIGHT,EXECUTOR_TYPE:VARIANT:WEIGHT
|
|
219
219
|
# Example: COPILOT:CLAUDE_OPUS_4_6:50,CODEX:DEFAULT:50
|
|
220
|
-
# For full config, use
|
|
220
|
+
# For full config, use bosun.config.json instead.
|
|
221
221
|
# EXECUTORS=CODEX:DEFAULT:100
|
|
222
222
|
|
|
223
223
|
# Task distribution mode: "weighted" | "round-robin" | "primary-only"
|
|
@@ -297,7 +297,7 @@ TELEGRAM_MINIAPP_ENABLED=false
|
|
|
297
297
|
# GITHUB_PROJECT_MODE=issues
|
|
298
298
|
# GitHub Project owner/title/number used when GITHUB_PROJECT_MODE=kanban
|
|
299
299
|
# GITHUB_PROJECT_OWNER=your-org
|
|
300
|
-
# GITHUB_PROJECT_TITLE=
|
|
300
|
+
# GITHUB_PROJECT_TITLE=Bosun
|
|
301
301
|
# GITHUB_PROJECT_NUMBER=3
|
|
302
302
|
# GitHub Project v2 status field name mapping (customize to match your board columns)
|
|
303
303
|
# GITHUB_PROJECT_STATUS_TODO=Todo
|
|
@@ -305,7 +305,7 @@ TELEGRAM_MINIAPP_ENABLED=false
|
|
|
305
305
|
# GITHUB_PROJECT_STATUS_INREVIEW=In Review
|
|
306
306
|
# GITHUB_PROJECT_STATUS_DONE=Done
|
|
307
307
|
# GITHUB_PROJECT_STATUS_CANCELLED=Cancelled
|
|
308
|
-
# Auto-sync task status to project board when updating via
|
|
308
|
+
# Auto-sync task status to project board when updating via bosun (default: true)
|
|
309
309
|
# GITHUB_PROJECT_AUTO_SYNC=true
|
|
310
310
|
# GitHub webhook endpoint (served by ui-server.mjs) for project item updates
|
|
311
311
|
# GITHUB_PROJECT_WEBHOOK_PATH=/api/webhooks/github/project-sync
|
|
@@ -321,10 +321,10 @@ TELEGRAM_MINIAPP_ENABLED=false
|
|
|
321
321
|
# GITHUB_DEFAULT_ASSIGNEE=
|
|
322
322
|
# Auto-assign task creator/login when creating issues (default: true)
|
|
323
323
|
# GITHUB_AUTO_ASSIGN_CREATOR=true
|
|
324
|
-
# Codex task scoping label policy (only matching labels are picked by
|
|
325
|
-
#
|
|
326
|
-
#
|
|
327
|
-
#
|
|
324
|
+
# Codex task scoping label policy (only matching labels are picked by bosun)
|
|
325
|
+
# BOSUN_TASK_LABEL=bosun
|
|
326
|
+
# BOSUN_TASK_LABELS=bosun,codex-mointor
|
|
327
|
+
# BOSUN_ENFORCE_TASK_LABEL=true
|
|
328
328
|
# Optional issue fetch cap per sync/poll cycle (default: 1000)
|
|
329
329
|
# GITHUB_ISSUES_LIST_LIMIT=1000
|
|
330
330
|
|
|
@@ -341,7 +341,7 @@ TELEGRAM_MINIAPP_ENABLED=false
|
|
|
341
341
|
# JIRA_SUBTASK_PARENT_KEY=ENG-1
|
|
342
342
|
# Default assignee account ID for new Jira tasks
|
|
343
343
|
# JIRA_DEFAULT_ASSIGNEE=5b10a2844c20165700ede21g
|
|
344
|
-
# Jira workflow status mapping (
|
|
344
|
+
# Jira workflow status mapping (bosun status -> Jira status name)
|
|
345
345
|
# JIRA_STATUS_TODO=To Do
|
|
346
346
|
# JIRA_STATUS_INPROGRESS=In Progress
|
|
347
347
|
# JIRA_STATUS_INREVIEW=In Review
|
|
@@ -353,7 +353,7 @@ TELEGRAM_MINIAPP_ENABLED=false
|
|
|
353
353
|
# JIRA_LABEL_STALE=codex:stale
|
|
354
354
|
# JIRA_LABEL_IGNORE=codex:ignore
|
|
355
355
|
# Jira task scoping labels (only tasks with these labels are picked up)
|
|
356
|
-
# JIRA_TASK_LABELS=
|
|
356
|
+
# JIRA_TASK_LABELS=bosun,codex-mointor
|
|
357
357
|
# JIRA_ENFORCE_TASK_LABEL=true
|
|
358
358
|
# Jira issue fetch cap per sync/poll cycle (default: 250)
|
|
359
359
|
# JIRA_ISSUES_LIST_LIMIT=250
|
|
@@ -418,21 +418,21 @@ TELEGRAM_MINIAPP_ENABLED=false
|
|
|
418
418
|
# COPILOT_ADDITIONAL_MCP_CONFIG=
|
|
419
419
|
|
|
420
420
|
# ─── Daemon Mode ──────────────────────────────────────────────────────────────
|
|
421
|
-
# Run
|
|
422
|
-
#
|
|
423
|
-
#
|
|
424
|
-
#
|
|
421
|
+
# Run bosun as a background daemon:
|
|
422
|
+
# bosun --daemon Start detached daemon
|
|
423
|
+
# bosun --stop-daemon Stop running daemon
|
|
424
|
+
# bosun --daemon-status Check if daemon is running
|
|
425
425
|
# Optional: keep sentinel always-on alongside monitor
|
|
426
|
-
#
|
|
427
|
-
# PID file: .cache/
|
|
426
|
+
# bosun --daemon --sentinel
|
|
427
|
+
# PID file: .cache/bosun.pid
|
|
428
428
|
# Logs: logs/daemon.log
|
|
429
429
|
# Daemon crash supervision (monitor child):
|
|
430
|
-
#
|
|
431
|
-
#
|
|
430
|
+
# BOSUN_DAEMON_RESTART_DELAY_MS=5000
|
|
431
|
+
# BOSUN_DAEMON_MAX_RESTARTS=0 # 0 = unlimited
|
|
432
432
|
# Consider any crash within this window as an instant startup failure (default: 15000)
|
|
433
|
-
#
|
|
433
|
+
# BOSUN_DAEMON_INSTANT_CRASH_WINDOW_MS=15000
|
|
434
434
|
# Stop auto-restarts after this many instant failures in a row (default: 3)
|
|
435
|
-
#
|
|
435
|
+
# BOSUN_DAEMON_MAX_INSTANT_RESTARTS=3
|
|
436
436
|
|
|
437
437
|
# ─── Vibe-Kanban ──────────────────────────────────────────────────────────────
|
|
438
438
|
# Base URL for the Vibe-Kanban API (default: http://127.0.0.1:54089)
|
|
@@ -467,9 +467,9 @@ VK_RECOVERY_PORT=54089
|
|
|
467
467
|
|
|
468
468
|
# ─── Shared Workspace Registry ───────────────────────────────────────────────
|
|
469
469
|
# Optional registry path for shared workspace leasing
|
|
470
|
-
# VE_SHARED_WORKSPACE_REGISTRY=.cache/
|
|
470
|
+
# VE_SHARED_WORKSPACE_REGISTRY=.cache/bosun/shared-workspaces.json
|
|
471
471
|
# Optional audit log path for shared workspace leasing
|
|
472
|
-
# VE_SHARED_WORKSPACE_AUDIT_LOG=.cache/
|
|
472
|
+
# VE_SHARED_WORKSPACE_AUDIT_LOG=.cache/bosun/shared-workspace-audit.jsonl
|
|
473
473
|
# Default lease TTL in minutes (Telegram claims); can override with seconds below
|
|
474
474
|
# VE_WORKSPACE_LEASE_TTL_MIN=120
|
|
475
475
|
# Default lease TTL in seconds (converted to minutes if set)
|
|
@@ -491,8 +491,8 @@ VK_RECOVERY_PORT=54089
|
|
|
491
491
|
# GH_REPO=virtengine
|
|
492
492
|
# Target branch for PR checks/merge (default: origin/main)
|
|
493
493
|
# VK_TARGET_BRANCH=origin/main
|
|
494
|
-
# Default upstream/base branch for
|
|
495
|
-
#
|
|
494
|
+
# Default upstream/base branch for bosun tasks (overrides VK_TARGET_BRANCH)
|
|
495
|
+
# BOSUN_TASK_UPSTREAM=origin/ve/bosun-generic
|
|
496
496
|
|
|
497
497
|
# ─── Codex / AI Provider ─────────────────────────────────────────────────────
|
|
498
498
|
# The Codex SDK uses OpenAI-compatible configuration that has been setup in ~/.codex/config.toml -
|
|
@@ -540,50 +540,50 @@ VK_RECOVERY_PORT=54089
|
|
|
540
540
|
# Setup can scaffold shared hook configs in:
|
|
541
541
|
# .codex/hooks.json
|
|
542
542
|
# .claude/settings.local.json
|
|
543
|
-
# .github/hooks/
|
|
543
|
+
# .github/hooks/bosun.hooks.json
|
|
544
544
|
#
|
|
545
545
|
# Hook profile for setup/non-interactive runs:
|
|
546
546
|
# strict | balanced | lightweight | none
|
|
547
|
-
#
|
|
547
|
+
# BOSUN_HOOK_PROFILE=strict
|
|
548
548
|
#
|
|
549
549
|
# Which agents should receive generated hook files (comma-separated):
|
|
550
550
|
# codex,claude,copilot
|
|
551
|
-
#
|
|
551
|
+
# BOSUN_HOOK_TARGETS=codex,claude,copilot
|
|
552
552
|
#
|
|
553
553
|
# Set to false to skip hook scaffolding during setup.
|
|
554
|
-
#
|
|
554
|
+
# BOSUN_HOOKS_ENABLED=true
|
|
555
555
|
# Set to true to overwrite existing generated hook files.
|
|
556
|
-
#
|
|
556
|
+
# BOSUN_HOOKS_OVERWRITE=false
|
|
557
557
|
# Optional overrides for generated bridge command tokens.
|
|
558
558
|
# Defaults are portable across workstations:
|
|
559
|
-
# node scripts/
|
|
560
|
-
#
|
|
561
|
-
#
|
|
559
|
+
# node scripts/bosun/agent-hook-bridge.mjs
|
|
560
|
+
# BOSUN_HOOK_NODE_BIN=node
|
|
561
|
+
# BOSUN_HOOK_BRIDGE_PATH=scripts/bosun/agent-hook-bridge.mjs
|
|
562
562
|
#
|
|
563
563
|
# Optional per-event command overrides (separate multiple commands with ';;').
|
|
564
564
|
# Use value 'none' to disable that event in generated .codex/hooks.json.
|
|
565
|
-
#
|
|
566
|
-
#
|
|
567
|
-
#
|
|
568
|
-
#
|
|
569
|
-
#
|
|
565
|
+
# BOSUN_HOOK_PREPUSH=go vet ./...;;go build ./...
|
|
566
|
+
# BOSUN_HOOK_PRECOMMIT=gofmt -l .
|
|
567
|
+
# BOSUN_HOOK_TASK_COMPLETE=echo \"task completed\"
|
|
568
|
+
# BOSUN_HOOK_SESSION_START=echo \"session start\"
|
|
569
|
+
# BOSUN_HOOK_SESSION_STOP=echo \"session stop\"
|
|
570
570
|
#
|
|
571
|
-
# Built-in hook behavior inside
|
|
571
|
+
# Built-in hook behavior inside bosun runtime:
|
|
572
572
|
# force (default), auto, off
|
|
573
|
-
#
|
|
574
|
-
#
|
|
575
|
-
#
|
|
576
|
-
#
|
|
573
|
+
# BOSUN_HOOKS_BUILTINS_MODE=force
|
|
574
|
+
# BOSUN_HOOKS_DISABLE_PREPUSH=false
|
|
575
|
+
# BOSUN_HOOKS_DISABLE_TASK_COMPLETE=false
|
|
576
|
+
# BOSUN_HOOKS_DISABLE_HEALTH_CHECK=false
|
|
577
577
|
|
|
578
578
|
# Force hooks to fire even for non-managed sessions (debug only):
|
|
579
|
-
#
|
|
579
|
+
# BOSUN_HOOKS_FORCE=false
|
|
580
580
|
|
|
581
|
-
# VE_MANAGED is auto-set by
|
|
581
|
+
# VE_MANAGED is auto-set by bosun at startup. Agent hook bridge
|
|
582
582
|
# scripts check for this and exit silently if not present, preventing
|
|
583
583
|
# hooks from firing in standalone Copilot/Codex/Claude sessions.
|
|
584
584
|
|
|
585
585
|
# ─── Devmode Monitor-Monitor (24/7 reliability guardian) ───────────────────
|
|
586
|
-
# Prompt is injected directly from
|
|
586
|
+
# Prompt is injected directly from bosun source (no .github/agents file required).
|
|
587
587
|
# Enabled by default in devmode source checkouts. Set to false to disable.
|
|
588
588
|
# DEVMODE_MONITOR_MONITOR_ENABLED=true
|
|
589
589
|
# Poll interval for monitor-monitor runs (milliseconds). Default: 300000 (5 min)
|
|
@@ -746,9 +746,9 @@ COMPLEXITY_ROUTING_ENABLED=true
|
|
|
746
746
|
# COMPLEXITY_ROUTING_COPILOT_HIGH_REASONING=high
|
|
747
747
|
|
|
748
748
|
# ─── Shared Cloud Workspaces ────────────────────────────────────────────────
|
|
749
|
-
# Registry file for shared workspace leasing (default: .cache/
|
|
749
|
+
# Registry file for shared workspace leasing (default: .cache/bosun/shared-workspaces.json)
|
|
750
750
|
# VE_SHARED_WORKSPACE_REGISTRY=
|
|
751
|
-
# Audit log file for claim/release events (default: .cache/
|
|
751
|
+
# Audit log file for claim/release events (default: .cache/bosun/shared-workspace-audit.jsonl)
|
|
752
752
|
# VE_SHARED_WORKSPACE_AUDIT_LOG=
|
|
753
753
|
|
|
754
754
|
# ─── CI Sweep (Orchestrator) ─────────────────────────────────────────────────
|
|
@@ -788,7 +788,7 @@ COPILOT_CLOUD_DISABLED=true
|
|
|
788
788
|
|
|
789
789
|
# ─── Git Identity (optional) ─────────────────────────────────────────────────
|
|
790
790
|
# Override git author for automated commits
|
|
791
|
-
# VE_GIT_AUTHOR_NAME=
|
|
791
|
+
# VE_GIT_AUTHOR_NAME=Bosun
|
|
792
792
|
# VE_GIT_AUTHOR_EMAIL=bot@yoursite.com
|
|
793
793
|
|
|
794
794
|
# ─── Task Planner ─────────────────────────────────────────────────────────────
|
|
@@ -811,16 +811,16 @@ COPILOT_CLOUD_DISABLED=true
|
|
|
811
811
|
# GH_RECONCILE_MERGED_LOOKBACK_HOURS=72
|
|
812
812
|
# GH_RECONCILE_TRACKING_LABELS=tracking
|
|
813
813
|
|
|
814
|
-
# ─── Prompt Overrides (.
|
|
815
|
-
#
|
|
816
|
-
# .
|
|
814
|
+
# ─── Prompt Overrides (.bosun/agents) ────────────────────────────────
|
|
815
|
+
# bosun scaffolds generic prompt templates under:
|
|
816
|
+
# .bosun/agents/*.md
|
|
817
817
|
# Files in that folder are loaded automatically and are intended for per-project customization.
|
|
818
818
|
# You can also override any prompt path explicitly with env vars:
|
|
819
|
-
#
|
|
820
|
-
#
|
|
821
|
-
#
|
|
822
|
-
#
|
|
823
|
-
#
|
|
819
|
+
# BOSUN_PROMPT_PLANNER=.bosun/agents/task-planner.md
|
|
820
|
+
# BOSUN_PROMPT_MONITOR_MONITOR=.bosun/agents/monitor-monitor.md
|
|
821
|
+
# BOSUN_PROMPT_TASK_EXECUTOR=.bosun/agents/task-executor.md
|
|
822
|
+
# BOSUN_PROMPT_REVIEWER=.bosun/agents/reviewer.md
|
|
823
|
+
# BOSUN_PROMPT_SDK_CONFLICT_RESOLVER=.bosun/agents/sdk-conflict-resolver.md
|
|
824
824
|
|
|
825
825
|
# ─── Dependabot / Bot PR Auto-Merge ───────────────────────────────────────────
|
|
826
826
|
# Auto-merge Dependabot (and other bot) PRs after all CI checks pass.
|
|
@@ -863,8 +863,8 @@ COPILOT_CLOUD_DISABLED=true
|
|
|
863
863
|
# MERGE_CONFLICT_RESOLUTION_TIMEOUT_MS=600000
|
|
864
864
|
|
|
865
865
|
# ─── Advanced ─────────────────────────────────────────────────────────────────
|
|
866
|
-
# Override
|
|
867
|
-
#
|
|
866
|
+
# Override bosun config directory (where .env and config live)
|
|
867
|
+
# BOSUN_DIR=/path/to/scripts/bosun
|
|
868
868
|
# Max orchestrator restarts (0 = unlimited)
|
|
869
869
|
# MAX_RESTARTS=0
|
|
870
870
|
# Restart delay in milliseconds
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bosun",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.5",
|
|
4
4
|
"description": "AI-powered orchestrator supervisor — manages AI agent executors with failover, auto-restarts on failure, analyzes crashes with Codex SDK, creates PRs via Vibe-Kanban API, and sends Telegram notifications. Supports N executors with weighted distribution, multi-repo projects, and auto-setup.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache 2.0",
|
|
7
7
|
"author": "VirtEngine <dev@virtengine.com>",
|
|
8
|
-
"homepage": "https://github.com/virtengine/
|
|
8
|
+
"homepage": "https://github.com/virtengine/bosun",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
11
11
|
"url": "git+https://github.com/virtengine/virtengine.git",
|
|
@@ -86,6 +86,7 @@
|
|
|
86
86
|
"pretest": "npm run syntax:check",
|
|
87
87
|
"test": "vitest run --config vitest.config.mjs",
|
|
88
88
|
"test:watch": "vitest",
|
|
89
|
+
"preinstall": "node preinstall.mjs",
|
|
89
90
|
"postinstall": "node postinstall.mjs",
|
|
90
91
|
"sentinel": "node telegram-sentinel.mjs",
|
|
91
92
|
"sentinel:stop": "node -e \"import('./telegram-sentinel.mjs').then(m => m.stopSentinel())\"",
|