@polderlabs/bizar-omp 0.6.2 → 0.6.3
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 +54 -0
- package/dist/cli/agents.d.ts +1 -0
- package/dist/cli/agents.d.ts.map +1 -1
- package/dist/cli/agents.js +11 -0
- package/dist/cli/agents.js.map +1 -1
- package/dist/cli/omb-commands.d.ts +30 -0
- package/dist/cli/omb-commands.d.ts.map +1 -0
- package/dist/cli/omb-commands.js +109 -0
- package/dist/cli/omb-commands.js.map +1 -0
- package/dist/cli/omb-daemon.d.ts +1 -0
- package/dist/cli/omb-daemon.d.ts.map +1 -1
- package/dist/cli/omb-daemon.js +15 -1
- package/dist/cli/omb-daemon.js.map +1 -1
- package/dist/cli/omb-dashboard.d.ts +1 -1
- package/dist/cli/omb-dashboard.d.ts.map +1 -1
- package/dist/cli/omb-dashboard.js +2 -1
- package/dist/cli/omb-dashboard.js.map +1 -1
- package/dist/cli/omb-runtime.d.ts +42 -0
- package/dist/cli/omb-runtime.d.ts.map +1 -0
- package/dist/cli/omb-runtime.js +507 -0
- package/dist/cli/omb-runtime.js.map +1 -0
- package/dist/cli/omb-tray.d.ts +3 -0
- package/dist/cli/omb-tray.d.ts.map +1 -0
- package/dist/cli/omb-tray.js +44 -0
- package/dist/cli/omb-tray.js.map +1 -0
- package/dist/cli/omb.js +8 -33
- package/dist/cli/omb.js.map +1 -1
- package/dist/omp/daemon.d.ts +1 -0
- package/dist/omp/daemon.d.ts.map +1 -1
- package/dist/omp/daemon.js +1 -1
- package/dist/omp/daemon.js.map +1 -1
- package/dist/omp/omb-sessions.d.ts +24 -0
- package/dist/omp/omb-sessions.d.ts.map +1 -1
- package/dist/omp/omb-sessions.js +30 -12
- package/dist/omp/omb-sessions.js.map +1 -1
- package/dist/omp/tmux.d.ts +18 -0
- package/dist/omp/tmux.d.ts.map +1 -1
- package/dist/omp/tmux.js +131 -4
- package/dist/omp/tmux.js.map +1 -1
- package/dist/omp/tray.d.ts +2 -0
- package/dist/omp/tray.d.ts.map +1 -1
- package/dist/omp/tray.js +30 -4
- package/dist/omp/tray.js.map +1 -1
- package/dist/src/cli/agents-ink.d.ts +25 -0
- package/dist/src/cli/agents-ink.js +517 -0
- package/dist/src/cli/agents-ink.js.map +1 -0
- package/dist/src/cli/agents.d.ts +14 -0
- package/dist/src/cli/agents.js +197 -0
- package/dist/src/cli/agents.js.map +1 -0
- package/dist/src/cli/directory-selector.d.ts +60 -0
- package/dist/src/cli/directory-selector.js +208 -0
- package/dist/src/cli/directory-selector.js.map +1 -0
- package/dist/src/cli/doctor.d.ts +41 -0
- package/dist/src/cli/doctor.js +31 -0
- package/dist/src/cli/doctor.js.map +1 -0
- package/dist/src/cli/install.d.ts +129 -0
- package/dist/src/cli/install.js +164 -0
- package/dist/src/cli/install.js.map +1 -0
- package/dist/src/cli/main.d.ts +2 -0
- package/dist/src/cli/main.js +117 -0
- package/dist/src/cli/main.js.map +1 -0
- package/dist/src/cli/migrate.d.ts +18 -0
- package/dist/src/cli/migrate.js +14 -0
- package/dist/src/cli/migrate.js.map +1 -0
- package/dist/src/cli/omb-commands.d.ts +29 -0
- package/dist/src/cli/omb-commands.js +107 -0
- package/dist/src/cli/omb-commands.js.map +1 -0
- package/dist/src/cli/omb-daemon.d.ts +2 -0
- package/dist/src/cli/omb-daemon.js +135 -0
- package/dist/src/cli/omb-daemon.js.map +1 -0
- package/dist/src/cli/omb-dashboard.d.ts +12 -0
- package/dist/src/cli/omb-dashboard.js +113 -0
- package/dist/src/cli/omb-dashboard.js.map +1 -0
- package/dist/src/cli/omb-invocation.d.ts +8 -0
- package/dist/src/cli/omb-invocation.js +41 -0
- package/dist/src/cli/omb-invocation.js.map +1 -0
- package/dist/src/cli/omb-runtime.d.ts +41 -0
- package/dist/src/cli/omb-runtime.js +371 -0
- package/dist/src/cli/omb-runtime.js.map +1 -0
- package/dist/src/cli/omb-tray.d.ts +2 -0
- package/dist/src/cli/omb-tray.js +38 -0
- package/dist/src/cli/omb-tray.js.map +1 -0
- package/dist/src/cli/omb.d.ts +2 -0
- package/dist/src/cli/omb.js +31 -0
- package/dist/src/cli/omb.js.map +1 -0
- package/dist/src/cli/omp-theme.d.ts +17 -0
- package/dist/src/cli/omp-theme.js +22 -0
- package/dist/src/cli/omp-theme.js.map +1 -0
- package/dist/src/cli/process.d.ts +6 -0
- package/dist/src/cli/process.js +54 -0
- package/dist/src/cli/process.js.map +1 -0
- package/dist/src/cli/run.d.ts +2 -0
- package/dist/src/cli/run.js +5 -0
- package/dist/src/cli/run.js.map +1 -0
- package/dist/src/cli/setup-ui.d.ts +37 -0
- package/dist/src/cli/setup-ui.js +90 -0
- package/dist/src/cli/setup-ui.js.map +1 -0
- package/dist/src/core/acceptance.d.ts +32 -0
- package/dist/src/core/acceptance.js +87 -0
- package/dist/src/core/acceptance.js.map +1 -0
- package/dist/src/core/errors.d.ts +20 -0
- package/dist/src/core/errors.js +30 -0
- package/dist/src/core/errors.js.map +1 -0
- package/dist/src/core/evidence.d.ts +10 -0
- package/dist/src/core/evidence.js +35 -0
- package/dist/src/core/evidence.js.map +1 -0
- package/dist/src/core/policies.d.ts +10 -0
- package/dist/src/core/policies.js +60 -0
- package/dist/src/core/policies.js.map +1 -0
- package/dist/src/core/recovery.d.ts +6 -0
- package/dist/src/core/recovery.js +56 -0
- package/dist/src/core/recovery.js.map +1 -0
- package/dist/src/core/transitions.d.ts +13 -0
- package/dist/src/core/transitions.js +59 -0
- package/dist/src/core/transitions.js.map +1 -0
- package/dist/src/core/types.d.ts +256 -0
- package/dist/src/core/types.js +2 -0
- package/dist/src/core/types.js.map +1 -0
- package/dist/src/extension.d.ts +60 -0
- package/dist/src/extension.js +538 -0
- package/dist/src/extension.js.map +1 -0
- package/dist/src/index.d.ts +29 -0
- package/dist/src/index.js +30 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/omp/autonomous-settings.d.ts +14 -0
- package/dist/src/omp/autonomous-settings.js +65 -0
- package/dist/src/omp/autonomous-settings.js.map +1 -0
- package/dist/src/omp/capabilities.d.ts +23 -0
- package/dist/src/omp/capabilities.js +6 -0
- package/dist/src/omp/capabilities.js.map +1 -0
- package/dist/src/omp/compatibility.d.ts +30 -0
- package/dist/src/omp/compatibility.js +34 -0
- package/dist/src/omp/compatibility.js.map +1 -0
- package/dist/src/omp/completion.d.ts +7 -0
- package/dist/src/omp/completion.js +10 -0
- package/dist/src/omp/completion.js.map +1 -0
- package/dist/src/omp/config.d.ts +10 -0
- package/dist/src/omp/config.js +14 -0
- package/dist/src/omp/config.js.map +1 -0
- package/dist/src/omp/context.d.ts +15 -0
- package/dist/src/omp/context.js +3 -0
- package/dist/src/omp/context.js.map +1 -0
- package/dist/src/omp/daemon-service.d.ts +25 -0
- package/dist/src/omp/daemon-service.js +483 -0
- package/dist/src/omp/daemon-service.js.map +1 -0
- package/dist/src/omp/daemon.d.ts +48 -0
- package/dist/src/omp/daemon.js +194 -0
- package/dist/src/omp/daemon.js.map +1 -0
- package/dist/src/omp/dashboard-html.d.ts +3 -0
- package/dist/src/omp/dashboard-html.js +419 -0
- package/dist/src/omp/dashboard-html.js.map +1 -0
- package/dist/src/omp/dispatch-admission.d.ts +2 -0
- package/dist/src/omp/dispatch-admission.js +12 -0
- package/dist/src/omp/dispatch-admission.js.map +1 -0
- package/dist/src/omp/integration-recovery.d.ts +10 -0
- package/dist/src/omp/integration-recovery.js +18 -0
- package/dist/src/omp/integration-recovery.js.map +1 -0
- package/dist/src/omp/isolation-policy.d.ts +14 -0
- package/dist/src/omp/isolation-policy.js +9 -0
- package/dist/src/omp/isolation-policy.js.map +1 -0
- package/dist/src/omp/lifecycle.d.ts +14 -0
- package/dist/src/omp/lifecycle.js +14 -0
- package/dist/src/omp/lifecycle.js.map +1 -0
- package/dist/src/omp/memory.d.ts +16 -0
- package/dist/src/omp/memory.js +4 -0
- package/dist/src/omp/memory.js.map +1 -0
- package/dist/src/omp/model-role-assignment.d.ts +296 -0
- package/dist/src/omp/model-role-assignment.js +559 -0
- package/dist/src/omp/model-role-assignment.js.map +1 -0
- package/dist/src/omp/model-roles.d.ts +19 -0
- package/dist/src/omp/model-roles.js +6 -0
- package/dist/src/omp/model-roles.js.map +1 -0
- package/dist/src/omp/omb-sessions.d.ts +122 -0
- package/dist/src/omp/omb-sessions.js +512 -0
- package/dist/src/omp/omb-sessions.js.map +1 -0
- package/dist/src/omp/omb-settings.d.ts +35 -0
- package/dist/src/omp/omb-settings.js +104 -0
- package/dist/src/omp/omb-settings.js.map +1 -0
- package/dist/src/omp/result-reconciliation.d.ts +2 -0
- package/dist/src/omp/result-reconciliation.js +9 -0
- package/dist/src/omp/result-reconciliation.js.map +1 -0
- package/dist/src/omp/rpc.d.ts +67 -0
- package/dist/src/omp/rpc.js +4 -0
- package/dist/src/omp/rpc.js.map +1 -0
- package/dist/src/omp/run-log.d.ts +25 -0
- package/dist/src/omp/run-log.js +24 -0
- package/dist/src/omp/run-log.js.map +1 -0
- package/dist/src/omp/session-activity.d.ts +70 -0
- package/dist/src/omp/session-activity.js +361 -0
- package/dist/src/omp/session-activity.js.map +1 -0
- package/dist/src/omp/session-controls.d.ts +17 -0
- package/dist/src/omp/session-controls.js +14 -0
- package/dist/src/omp/session-controls.js.map +1 -0
- package/dist/src/omp/tmux.d.ts +89 -0
- package/dist/src/omp/tmux.js +445 -0
- package/dist/src/omp/tmux.js.map +1 -0
- package/dist/src/omp/tray-icons.d.ts +5 -0
- package/dist/src/omp/tray-icons.js +78 -0
- package/dist/src/omp/tray-icons.js.map +1 -0
- package/dist/src/omp/tray.d.ts +23 -0
- package/dist/src/omp/tray.js +167 -0
- package/dist/src/omp/tray.js.map +1 -0
- package/dist/src/services/budget.d.ts +19 -0
- package/dist/src/services/budget.js +10 -0
- package/dist/src/services/budget.js.map +1 -0
- package/dist/src/services/candidate-local.d.ts +13 -0
- package/dist/src/services/candidate-local.js +15 -0
- package/dist/src/services/candidate-local.js.map +1 -0
- package/dist/src/services/candidates.d.ts +20 -0
- package/dist/src/services/candidates.js +100 -0
- package/dist/src/services/candidates.js.map +1 -0
- package/dist/src/services/evidence-bundle.d.ts +17 -0
- package/dist/src/services/evidence-bundle.js +21 -0
- package/dist/src/services/evidence-bundle.js.map +1 -0
- package/dist/src/services/inspector.d.ts +11 -0
- package/dist/src/services/inspector.js +6 -0
- package/dist/src/services/inspector.js.map +1 -0
- package/dist/src/services/lessons.d.ts +13 -0
- package/dist/src/services/lessons.js +11 -0
- package/dist/src/services/lessons.js.map +1 -0
- package/dist/src/services/projection.d.ts +21 -0
- package/dist/src/services/projection.js +10 -0
- package/dist/src/services/projection.js.map +1 -0
- package/dist/src/services/readiness.d.ts +4 -0
- package/dist/src/services/readiness.js +35 -0
- package/dist/src/services/readiness.js.map +1 -0
- package/dist/src/services/recipes.d.ts +15 -0
- package/dist/src/services/recipes.js +42 -0
- package/dist/src/services/recipes.js.map +1 -0
- package/dist/src/services/recovery.d.ts +19 -0
- package/dist/src/services/recovery.js +9 -0
- package/dist/src/services/recovery.js.map +1 -0
- package/dist/src/services/review.d.ts +15 -0
- package/dist/src/services/review.js +9 -0
- package/dist/src/services/review.js.map +1 -0
- package/dist/src/storage/journal-recovery.d.ts +10 -0
- package/dist/src/storage/journal-recovery.js +33 -0
- package/dist/src/storage/journal-recovery.js.map +1 -0
- package/dist/src/storage/journal.d.ts +12 -0
- package/dist/src/storage/journal.js +82 -0
- package/dist/src/storage/journal.js.map +1 -0
- package/dist/src/storage/migrations.d.ts +22 -0
- package/dist/src/storage/migrations.js +107 -0
- package/dist/src/storage/migrations.js.map +1 -0
- package/dist/src/storage/repository-identity.d.ts +11 -0
- package/dist/src/storage/repository-identity.js +67 -0
- package/dist/src/storage/repository-identity.js.map +1 -0
- package/dist/src/storage/resources.d.ts +66 -0
- package/dist/src/storage/resources.js +148 -0
- package/dist/src/storage/resources.js.map +1 -0
- package/dist/src/tools/evidence.d.ts +8 -0
- package/dist/src/tools/evidence.js +9 -0
- package/dist/src/tools/evidence.js.map +1 -0
- package/dist/src/tools/integrate.d.ts +13 -0
- package/dist/src/tools/integrate.js +90 -0
- package/dist/src/tools/integrate.js.map +1 -0
- package/dist/src/tools/result.d.ts +9 -0
- package/dist/src/tools/result.js +2 -0
- package/dist/src/tools/result.js.map +1 -0
- package/dist/src/tools/verify.d.ts +13 -0
- package/dist/src/tools/verify.js +61 -0
- package/dist/src/tools/verify.js.map +1 -0
- package/dist/src/tools/workflow.d.ts +8 -0
- package/dist/src/tools/workflow.js +65 -0
- package/dist/src/tools/workflow.js.map +1 -0
- package/dist/src/workflows/direct.d.ts +9 -0
- package/dist/src/workflows/direct.js +2 -0
- package/dist/src/workflows/direct.js.map +1 -0
- package/dist/src/workflows/implement.d.ts +2 -0
- package/dist/src/workflows/implement.js +4 -0
- package/dist/src/workflows/implement.js.map +1 -0
- package/dist/src/workflows/plan.d.ts +17 -0
- package/dist/src/workflows/plan.js +6 -0
- package/dist/src/workflows/plan.js.map +1 -0
- package/dist/src/workflows/research.d.ts +15 -0
- package/dist/src/workflows/research.js +2 -0
- package/dist/src/workflows/research.js.map +1 -0
- package/dist/src/workflows/review.d.ts +15 -0
- package/dist/src/workflows/review.js +2 -0
- package/dist/src/workflows/review.js.map +1 -0
- package/dist/src/workflows/verify.d.ts +9 -0
- package/dist/src/workflows/verify.js +2 -0
- package/dist/src/workflows/verify.js.map +1 -0
- package/dist/tests/acceptance.test.d.ts +1 -0
- package/dist/tests/acceptance.test.js +27 -0
- package/dist/tests/acceptance.test.js.map +1 -0
- package/dist/tests/agents.test.d.ts +1 -0
- package/dist/tests/agents.test.js +369 -0
- package/dist/tests/agents.test.js.map +1 -0
- package/dist/tests/candidates.test.d.ts +1 -0
- package/dist/tests/candidates.test.js +60 -0
- package/dist/tests/candidates.test.js.map +1 -0
- package/dist/tests/core.test.d.ts +1 -0
- package/dist/tests/core.test.js +39 -0
- package/dist/tests/core.test.js.map +1 -0
- package/dist/tests/daemon.test.d.ts +1 -0
- package/dist/tests/daemon.test.js +157 -0
- package/dist/tests/daemon.test.js.map +1 -0
- package/dist/tests/dashboard.test.d.ts +1 -0
- package/dist/tests/dashboard.test.js +414 -0
- package/dist/tests/dashboard.test.js.map +1 -0
- package/dist/tests/directory-selector.test.d.ts +1 -0
- package/dist/tests/directory-selector.test.js +93 -0
- package/dist/tests/directory-selector.test.js.map +1 -0
- package/dist/tests/doctor.test.d.ts +1 -0
- package/dist/tests/doctor.test.js +32 -0
- package/dist/tests/doctor.test.js.map +1 -0
- package/dist/tests/install.test.d.ts +1 -0
- package/dist/tests/install.test.js +101 -0
- package/dist/tests/install.test.js.map +1 -0
- package/dist/tests/integration.test.d.ts +1 -0
- package/dist/tests/integration.test.js +49 -0
- package/dist/tests/integration.test.js.map +1 -0
- package/dist/tests/journal.test.d.ts +1 -0
- package/dist/tests/journal.test.js +50 -0
- package/dist/tests/journal.test.js.map +1 -0
- package/dist/tests/model-role-assignment.test.d.ts +1 -0
- package/dist/tests/model-role-assignment.test.js +294 -0
- package/dist/tests/model-role-assignment.test.js.map +1 -0
- package/dist/tests/omb-runtime.test.d.ts +1 -0
- package/dist/tests/omb-runtime.test.js +554 -0
- package/dist/tests/omb-runtime.test.js.map +1 -0
- package/dist/tests/omb-session-actions.test.d.ts +1 -0
- package/dist/tests/omb-session-actions.test.js +191 -0
- package/dist/tests/omb-session-actions.test.js.map +1 -0
- package/dist/tests/omb-settings.test.d.ts +1 -0
- package/dist/tests/omb-settings.test.js +82 -0
- package/dist/tests/omb-settings.test.js.map +1 -0
- package/dist/tests/omp-contract.test.d.ts +1 -0
- package/dist/tests/omp-contract.test.js +362 -0
- package/dist/tests/omp-contract.test.js.map +1 -0
- package/dist/tests/process.test.d.ts +1 -0
- package/dist/tests/process.test.js +12 -0
- package/dist/tests/process.test.js.map +1 -0
- package/dist/tests/psmux-windows.test.d.ts +1 -0
- package/dist/tests/psmux-windows.test.js +105 -0
- package/dist/tests/psmux-windows.test.js.map +1 -0
- package/dist/tests/recovery.test.d.ts +1 -0
- package/dist/tests/recovery.test.js +9 -0
- package/dist/tests/recovery.test.js.map +1 -0
- package/dist/tests/resources.test.d.ts +1 -0
- package/dist/tests/resources.test.js +55 -0
- package/dist/tests/resources.test.js.map +1 -0
- package/dist/tests/session-activity.test.d.ts +1 -0
- package/dist/tests/session-activity.test.js +159 -0
- package/dist/tests/session-activity.test.js.map +1 -0
- package/dist/tests/setup-ui.test.d.ts +1 -0
- package/dist/tests/setup-ui.test.js +37 -0
- package/dist/tests/setup-ui.test.js.map +1 -0
- package/dist/tests/storage-integrity.test.d.ts +1 -0
- package/dist/tests/storage-integrity.test.js +88 -0
- package/dist/tests/storage-integrity.test.js.map +1 -0
- package/dist/tests/tmux.test.d.ts +1 -0
- package/dist/tests/tmux.test.js +239 -0
- package/dist/tests/tmux.test.js.map +1 -0
- package/dist/tests/tray.test.d.ts +1 -0
- package/dist/tests/tray.test.js +37 -0
- package/dist/tests/tray.test.js.map +1 -0
- package/dist/tests/verification.test.d.ts +1 -0
- package/dist/tests/verification.test.js +61 -0
- package/dist/tests/verification.test.js.map +1 -0
- package/dist/tests/workflow-features.test.d.ts +1 -0
- package/dist/tests/workflow-features.test.js +82 -0
- package/dist/tests/workflow-features.test.js.map +1 -0
- package/dist/tests/workflow-safety.test.d.ts +1 -0
- package/dist/tests/workflow-safety.test.js +57 -0
- package/dist/tests/workflow-safety.test.js.map +1 -0
- package/docs/compatibility/baseline.json +1 -1
- package/docs/releases/0.6.2.md +2 -2
- package/docs/releases/0.6.3.md +27 -0
- package/package.json +1 -1
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
import { readDaemonStatus, startDaemon, stopDaemon } from "../omp/daemon.js";
|
|
2
|
+
import { loadOmbSettings } from "../omp/omb-settings.js";
|
|
3
|
+
import { BIZAR_SESSION_PREFIX, currentOmbHostSession, isOmbSessionName, listOmbSessions } from "../omp/omb-sessions.js";
|
|
4
|
+
import { readTrayStatus, startTray, stopTray } from "../omp/tray.js";
|
|
5
|
+
import { deleteOmbSession, listTmuxSessions, ombSessionLiveness } from "../omp/tmux.js";
|
|
6
|
+
import { openDashboard } from "./omb-dashboard.js";
|
|
7
|
+
export const runtimeServices = {
|
|
8
|
+
readDaemonStatus,
|
|
9
|
+
startDaemon,
|
|
10
|
+
stopDaemon,
|
|
11
|
+
readTrayStatus,
|
|
12
|
+
startTray,
|
|
13
|
+
stopTray,
|
|
14
|
+
openDashboard,
|
|
15
|
+
};
|
|
16
|
+
export const STOP_USAGE = `omb stop [--all | --sessions | --session NAME | --daemon | --dashboard | --tray]
|
|
17
|
+
[--idle] [--force] [--dry-run] [--json]
|
|
18
|
+
|
|
19
|
+
Stops the Bizar runtime: every Bizar-owned tmux session and the optional
|
|
20
|
+
services around them. With no target flag, sessions, the daemon, and the tray
|
|
21
|
+
are all stopped.
|
|
22
|
+
|
|
23
|
+
--all sessions and services (the default)
|
|
24
|
+
--sessions only Bizar-owned tmux sessions
|
|
25
|
+
--session N one session by Bizar name, session id, or the digest its name
|
|
26
|
+
carries; repeatable, and naming any session narrows --all to
|
|
27
|
+
just the named sessions
|
|
28
|
+
--daemon only the daemon
|
|
29
|
+
--dashboard only the daemon, which serves the dashboard
|
|
30
|
+
--tray only the tray
|
|
31
|
+
--idle only sessions with no client attached and no work in flight
|
|
32
|
+
--force also stop sessions that have a client attached
|
|
33
|
+
--dry-run report what would stop without stopping it
|
|
34
|
+
--json print { command, dryRun, stopped, started, skipped, planned,
|
|
35
|
+
failed, resources }
|
|
36
|
+
|
|
37
|
+
Only Bizar-owned sessions are ever touched, the session hosting this command
|
|
38
|
+
is never stopped, and "nothing was running" is a success.`;
|
|
39
|
+
export const RESTART_USAGE = `omb restart [--force] [--dry-run] [--json]
|
|
40
|
+
|
|
41
|
+
Stops the whole runtime like "omb stop", then starts the daemon and the tray
|
|
42
|
+
again and prints a fresh dashboard access code. Agent sessions are not
|
|
43
|
+
relaunched: their journals are kept, so "omb" in a project or the hub brings
|
|
44
|
+
a session back.
|
|
45
|
+
|
|
46
|
+
The daemon and tray are started even when a stop failed, so the runtime is
|
|
47
|
+
left usable; the failed stop stays in the report and the exit code is
|
|
48
|
+
nonzero. Nothing is reported as started that did not start.
|
|
49
|
+
|
|
50
|
+
Each resource is reported once, with the state it was in when the command
|
|
51
|
+
ran and what the restart did with it, so the report reads as the resulting
|
|
52
|
+
state of the runtime. A stop that failed makes that resource's row a failure
|
|
53
|
+
even when the resource was started again.
|
|
54
|
+
|
|
55
|
+
--force also stop sessions that have a client attached
|
|
56
|
+
--dry-run report the plan without stopping or starting anything
|
|
57
|
+
--json print { command, dryRun, stopped, started, skipped, planned,
|
|
58
|
+
failed, resources, url }, where url is null when no
|
|
59
|
+
access link was minted`;
|
|
60
|
+
/**
|
|
61
|
+
* A session reference that is not a tmux name: the digest segment of a name,
|
|
62
|
+
* the native OMP session id, or the short id a row reports. What any of them
|
|
63
|
+
* resolves to is decided against the discovered sessions, because a short id is
|
|
64
|
+
* only unique among them.
|
|
65
|
+
*/
|
|
66
|
+
const SESSION_REFERENCE = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
67
|
+
function parseTargetFlags(args) {
|
|
68
|
+
const flags = {
|
|
69
|
+
all: false,
|
|
70
|
+
sessions: false,
|
|
71
|
+
daemon: false,
|
|
72
|
+
tray: false,
|
|
73
|
+
idle: false,
|
|
74
|
+
force: false,
|
|
75
|
+
dryRun: false,
|
|
76
|
+
json: false,
|
|
77
|
+
};
|
|
78
|
+
const names = [];
|
|
79
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
80
|
+
const arg = args[index];
|
|
81
|
+
if (arg === "--all")
|
|
82
|
+
flags.all = true;
|
|
83
|
+
else if (arg === "--sessions")
|
|
84
|
+
flags.sessions = true;
|
|
85
|
+
else if (arg === "--idle")
|
|
86
|
+
flags.idle = true;
|
|
87
|
+
else if (arg === "--force")
|
|
88
|
+
flags.force = true;
|
|
89
|
+
else if (arg === "--dry-run")
|
|
90
|
+
flags.dryRun = true;
|
|
91
|
+
else if (arg === "--json")
|
|
92
|
+
flags.json = true;
|
|
93
|
+
else if (arg === "--daemon" || arg === "--dashboard")
|
|
94
|
+
flags.daemon = true;
|
|
95
|
+
else if (arg === "--tray")
|
|
96
|
+
flags.tray = true;
|
|
97
|
+
else if (arg === "--session") {
|
|
98
|
+
const value = args[++index];
|
|
99
|
+
if (!value || value.startsWith("--"))
|
|
100
|
+
return { error: "--session requires a session name or id" };
|
|
101
|
+
// A Bizar-prefixed value must be a whole Bizar name, so a mistyped name
|
|
102
|
+
// fails here instead of resolving into a stop. Anything else is read as a
|
|
103
|
+
// session id, which only the discovered sessions can resolve or reject.
|
|
104
|
+
const prefixed = value.startsWith(BIZAR_SESSION_PREFIX);
|
|
105
|
+
if ((prefixed && !isOmbSessionName(value)) || (!prefixed && !SESSION_REFERENCE.test(value))) {
|
|
106
|
+
return { error: `"${value}" is neither a Bizar-owned session name nor a session id` };
|
|
107
|
+
}
|
|
108
|
+
names.push(value);
|
|
109
|
+
}
|
|
110
|
+
else
|
|
111
|
+
return { error: `unknown argument "${arg}"` };
|
|
112
|
+
}
|
|
113
|
+
return { flags, names };
|
|
114
|
+
}
|
|
115
|
+
/** Resolve target flags into what the command stops. Targets are additive. */
|
|
116
|
+
function resolveTargets(flags, names) {
|
|
117
|
+
const services = flags.daemon || flags.tray;
|
|
118
|
+
const explicitSessions = names.length > 0 || flags.sessions;
|
|
119
|
+
const anyTarget = services || explicitSessions || flags.all;
|
|
120
|
+
const sessions = flags.all || explicitSessions || !anyTarget;
|
|
121
|
+
return {
|
|
122
|
+
sessions,
|
|
123
|
+
daemon: flags.daemon || flags.all || !anyTarget,
|
|
124
|
+
tray: flags.tray || flags.all || !anyTarget,
|
|
125
|
+
names,
|
|
126
|
+
idle: flags.idle,
|
|
127
|
+
force: flags.force,
|
|
128
|
+
dryRun: flags.dryRun,
|
|
129
|
+
json: flags.json,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/** The digest segment a Bizar session name carries, when it has one. */
|
|
133
|
+
function sessionDigest(name) {
|
|
134
|
+
return name.match(/-([a-f0-9]{10})(?:-|$)/)?.[1];
|
|
135
|
+
}
|
|
136
|
+
function sessionResources(sessions, names) {
|
|
137
|
+
const rows = [];
|
|
138
|
+
if (names.length === 0)
|
|
139
|
+
return { selected: sessions.filter(session => session.state !== "stopped"), rows };
|
|
140
|
+
const selected = [];
|
|
141
|
+
// A repeated name is one session: acting on it twice would report one
|
|
142
|
+
// removal as two and signal a session that is already gone.
|
|
143
|
+
const requested = new Set();
|
|
144
|
+
for (const name of names) {
|
|
145
|
+
if (requested.has(name))
|
|
146
|
+
continue;
|
|
147
|
+
requested.add(name);
|
|
148
|
+
// The tmux name wins over an id, so an id can never redirect a request away
|
|
149
|
+
// from the session the user named. A digest is the part of the name that
|
|
150
|
+
// makes it unique, and two sessions may report the same short id.
|
|
151
|
+
const byName = sessions.find(session => session.name === name);
|
|
152
|
+
const candidates = byName
|
|
153
|
+
? [byName]
|
|
154
|
+
: sessions.filter(session => session.id === name || session.nativeId === name || sessionDigest(session.name) === name);
|
|
155
|
+
if (candidates.length === 1)
|
|
156
|
+
selected.push(candidates[0]);
|
|
157
|
+
else if (isOmbSessionName(name)) {
|
|
158
|
+
// A Bizar name that is not running is an address for a session that is
|
|
159
|
+
// already gone, which is not a failure: the same call twice is a success.
|
|
160
|
+
rows.push({ target: "session", name, state: "unknown", action: "skipped", reason: "not found" });
|
|
161
|
+
}
|
|
162
|
+
else if (candidates.length === 0) {
|
|
163
|
+
// Nothing was acted on yet, so an address that resolves to nothing stops
|
|
164
|
+
// the whole command instead of half of it: a script's typo must not look
|
|
165
|
+
// like a successful stop.
|
|
166
|
+
return { error: `"${name}" is neither a Bizar-owned session name nor a session this host knows` };
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
return { error: `"${name}" matches ${candidates.length} sessions: ${candidates.map(candidate => candidate.name).join(", ")}` };
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return { selected, rows };
|
|
173
|
+
}
|
|
174
|
+
/** Decide one session's fate, then act on it unless this is a dry run. */
|
|
175
|
+
async function stopSession(session, options) {
|
|
176
|
+
const { targets, host, cwd, env } = options;
|
|
177
|
+
const base = { target: "session", name: session.name, state: session.state };
|
|
178
|
+
const skip = (reason) => ({ ...base, action: "skipped", reason });
|
|
179
|
+
if (session.state === "stopped")
|
|
180
|
+
return skip("already stopped");
|
|
181
|
+
if (session.hosted === false)
|
|
182
|
+
return skip("no tmux host; remove it from the hub if it is stale");
|
|
183
|
+
if (host.kind === "unknown")
|
|
184
|
+
return skip("cannot identify the session hosting this command");
|
|
185
|
+
if (host.kind === "bizar" && session.name === host.name)
|
|
186
|
+
return skip("hosts this command");
|
|
187
|
+
if (targets.idle && session.state !== "disconnected")
|
|
188
|
+
return skip(`state ${session.state} is not idle`);
|
|
189
|
+
if (session.attached && !targets.force)
|
|
190
|
+
return skip("client attached; use --force");
|
|
191
|
+
if (targets.dryRun)
|
|
192
|
+
return { ...base, action: "planned" };
|
|
193
|
+
const code = await deleteOmbSession(session.name, cwd, env);
|
|
194
|
+
return code === 0
|
|
195
|
+
? { ...base, action: "stopped", code }
|
|
196
|
+
: { ...base, action: "failed", code, reason: `kill-session exited ${code}` };
|
|
197
|
+
}
|
|
198
|
+
async function stopDaemonResource(targets, env, services) {
|
|
199
|
+
const status = services.readDaemonStatus(env);
|
|
200
|
+
const base = {
|
|
201
|
+
target: "daemon",
|
|
202
|
+
name: status.daemon ? `127.0.0.1:${status.daemon.port}` : "daemon",
|
|
203
|
+
state: status.state,
|
|
204
|
+
};
|
|
205
|
+
if (status.state !== "running")
|
|
206
|
+
return { ...base, action: "skipped", reason: "not running" };
|
|
207
|
+
if (targets.dryRun)
|
|
208
|
+
return { ...base, action: "planned" };
|
|
209
|
+
try {
|
|
210
|
+
const result = await services.stopDaemon(env);
|
|
211
|
+
return result === "stopped"
|
|
212
|
+
? { ...base, action: "stopped" }
|
|
213
|
+
: { ...base, action: "skipped", reason: "not running" };
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
return { ...base, action: "failed", code: 1, reason: error instanceof Error ? error.message : String(error) };
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
async function stopTrayResource(targets, env, services) {
|
|
220
|
+
const status = services.readTrayStatus(env);
|
|
221
|
+
const base = { target: "tray", name: "tray", state: status.state };
|
|
222
|
+
if (status.state !== "running") {
|
|
223
|
+
return {
|
|
224
|
+
...base,
|
|
225
|
+
action: "skipped",
|
|
226
|
+
reason: status.state === "unsupported"
|
|
227
|
+
? "unsupported on this host"
|
|
228
|
+
: status.state === "stale"
|
|
229
|
+
? "the recorded process is gone or is not the tray"
|
|
230
|
+
: "not running",
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
if (targets.dryRun)
|
|
234
|
+
return { ...base, action: "planned" };
|
|
235
|
+
try {
|
|
236
|
+
return (await services.stopTray(env))
|
|
237
|
+
? { ...base, action: "stopped" }
|
|
238
|
+
: { ...base, action: "skipped", reason: "not running" };
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
return { ...base, action: "failed", code: 1, reason: error instanceof Error ? error.message : String(error) };
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
async function stopRuntime(cwd, env, targets, services) {
|
|
245
|
+
const rows = [];
|
|
246
|
+
if (targets.sessions) {
|
|
247
|
+
const sessions = await listOmbSessions(cwd, env);
|
|
248
|
+
const resolution = sessionResources(sessions, targets.names);
|
|
249
|
+
// Nothing has been acted on yet, so an address that cannot name exactly one
|
|
250
|
+
// session stops the command while it is still free to do so.
|
|
251
|
+
if ("error" in resolution)
|
|
252
|
+
return resolution;
|
|
253
|
+
const { selected, rows: unmatched } = resolution;
|
|
254
|
+
rows.push(...unmatched);
|
|
255
|
+
const host = await currentOmbHostSession(cwd, env);
|
|
256
|
+
for (const session of selected) {
|
|
257
|
+
rows.push(await stopSession(session, { targets, host, cwd, env }));
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
if (targets.daemon)
|
|
261
|
+
rows.push(await stopDaemonResource(targets, env, services));
|
|
262
|
+
if (targets.tray)
|
|
263
|
+
rows.push(await stopTrayResource(targets, env, services));
|
|
264
|
+
return { rows: await verifyStoppedSessions(rows, cwd, env) };
|
|
265
|
+
}
|
|
266
|
+
/** List the hosted sessions, and say whether the multiplexer answered at all. */
|
|
267
|
+
async function hostedSessions(probe, cwd, env) {
|
|
268
|
+
// A multiplexer that cannot be run reports no sessions, and that empty
|
|
269
|
+
// report is indistinguishable from an empty server. Absence is only proved
|
|
270
|
+
// by a listing that happened, so the multiplexer is asked one question it
|
|
271
|
+
// must answer before its silence is read as "not hosted".
|
|
272
|
+
if (await ombSessionLiveness(probe, cwd, env) === "unknown")
|
|
273
|
+
return { readable: false, hosted: new Set() };
|
|
274
|
+
const sessions = await listTmuxSessions(cwd, env);
|
|
275
|
+
return { readable: true, hosted: new Set(sessions.map(session => session.name)) };
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Confirm every attempted kill against the multiplexer, which is the only
|
|
279
|
+
* authority on whether a session is still there.
|
|
280
|
+
*
|
|
281
|
+
* `deleteOmbSession` also tombstones a session's journal, and a session can
|
|
282
|
+
* vanish between the listing and the kill, so neither its exit code nor the
|
|
283
|
+
* hub listing can answer "is it gone?" for this caller. One listing of the
|
|
284
|
+
* multiplexer answers it for every attempted kill at once: a session that is
|
|
285
|
+
* still there was not stopped, whatever the kill reported.
|
|
286
|
+
*/
|
|
287
|
+
async function verifyStoppedSessions(rows, cwd, env) {
|
|
288
|
+
const attempted = rows.filter(row => row.target === "session" && (row.action === "stopped" || row.action === "failed"));
|
|
289
|
+
if (!attempted.length)
|
|
290
|
+
return rows;
|
|
291
|
+
const { readable, hosted } = await hostedSessions(attempted[0].name, cwd, env);
|
|
292
|
+
return rows.map(row => {
|
|
293
|
+
if (row.target !== "session" || (row.action !== "stopped" && row.action !== "failed"))
|
|
294
|
+
return row;
|
|
295
|
+
if (!readable)
|
|
296
|
+
return { ...row, action: "failed", code: row.code || 1, reason: "could not confirm the session stopped" };
|
|
297
|
+
return hosted.has(row.name)
|
|
298
|
+
? { ...row, action: "failed", code: row.code || 1, reason: "still live after kill-session" }
|
|
299
|
+
: { ...row, action: "stopped", code: 0 };
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
function count(rows, action) {
|
|
303
|
+
return rows.filter(row => row.action === action).length;
|
|
304
|
+
}
|
|
305
|
+
function renderRows(rows) {
|
|
306
|
+
const width = Math.max(0, ...rows.map(row => row.target.length));
|
|
307
|
+
return rows
|
|
308
|
+
.map(row => {
|
|
309
|
+
const detail = row.reason ? ` — ${row.reason}` : row.code ? ` (exit ${row.code})` : "";
|
|
310
|
+
return `${row.action.padEnd(7)} ${row.target.padEnd(width)} ${row.name}${detail}`;
|
|
311
|
+
})
|
|
312
|
+
.join("\n");
|
|
313
|
+
}
|
|
314
|
+
function renderSummary(command, rows, dryRun) {
|
|
315
|
+
const parts = [`${count(rows, "stopped")} stopped`];
|
|
316
|
+
if (count(rows, "started") > 0)
|
|
317
|
+
parts.push(`${count(rows, "started")} started`);
|
|
318
|
+
parts.push(`${count(rows, "skipped")} skipped`);
|
|
319
|
+
if (count(rows, "planned") > 0)
|
|
320
|
+
parts.push(`${count(rows, "planned")} planned`);
|
|
321
|
+
const failed = count(rows, "failed");
|
|
322
|
+
if (failed)
|
|
323
|
+
parts.push(`${failed} failed`);
|
|
324
|
+
return `omb ${command}${dryRun ? " (dry run)" : ""}: ${parts.join(", ")}`;
|
|
325
|
+
}
|
|
326
|
+
function exitCodeFor(rows) {
|
|
327
|
+
return count(rows, "failed") > 0 ? 1 : 0;
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* The counts the summary prints, as data.
|
|
331
|
+
*
|
|
332
|
+
* Every action a row can carry is counted here, so a `--json` reader learns
|
|
333
|
+
* the same thing the human summary says: a dry run's `planned` rows and a
|
|
334
|
+
* restart's `started` rows are otherwise invisible in the payload.
|
|
335
|
+
*/
|
|
336
|
+
function payload(command, rows, dryRun, extra = {}) {
|
|
337
|
+
return {
|
|
338
|
+
command,
|
|
339
|
+
dryRun,
|
|
340
|
+
stopped: count(rows, "stopped"),
|
|
341
|
+
started: count(rows, "started"),
|
|
342
|
+
skipped: count(rows, "skipped"),
|
|
343
|
+
planned: count(rows, "planned"),
|
|
344
|
+
failed: count(rows, "failed"),
|
|
345
|
+
...extra,
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
function emit(summary, rows, human, json) {
|
|
349
|
+
if (json) {
|
|
350
|
+
// `stopped` is stated on every row as well as in the counts, so a reader
|
|
351
|
+
// that asks only "is this resource stopped?" does not have to know the
|
|
352
|
+
// action vocabulary to answer it.
|
|
353
|
+
const resources = rows.map(row => ({ ...row, stopped: row.action === "stopped" }));
|
|
354
|
+
process.stdout.write(`${JSON.stringify({ ...summary, resources }, null, 2)}\n`);
|
|
355
|
+
}
|
|
356
|
+
else
|
|
357
|
+
process.stdout.write(`${human}\n${renderRows(rows)}\n`);
|
|
358
|
+
}
|
|
359
|
+
export async function runStopCommand(args, env = process.env, cwd = process.cwd(), services = runtimeServices) {
|
|
360
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
361
|
+
process.stdout.write(`${STOP_USAGE}\n`);
|
|
362
|
+
return 0;
|
|
363
|
+
}
|
|
364
|
+
const parsed = parseTargetFlags(args);
|
|
365
|
+
if ("error" in parsed) {
|
|
366
|
+
process.stderr.write(`omb stop: ${parsed.error}\n\n${STOP_USAGE}\n`);
|
|
367
|
+
return 2;
|
|
368
|
+
}
|
|
369
|
+
const targets = resolveTargets(parsed.flags, parsed.names);
|
|
370
|
+
const result = await stopRuntime(cwd, env, targets, services);
|
|
371
|
+
if ("error" in result) {
|
|
372
|
+
process.stderr.write(`omb stop: ${result.error}\n\n${STOP_USAGE}\n`);
|
|
373
|
+
return 2;
|
|
374
|
+
}
|
|
375
|
+
const { rows } = result;
|
|
376
|
+
emit(payload("stop", rows, targets.dryRun), rows, renderSummary("stop", rows, targets.dryRun), targets.json);
|
|
377
|
+
return exitCodeFor(rows);
|
|
378
|
+
}
|
|
379
|
+
export async function runRestartCommand(args, env = process.env, cwd = process.cwd(), services = runtimeServices) {
|
|
380
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
381
|
+
process.stdout.write(`${RESTART_USAGE}\n`);
|
|
382
|
+
return 0;
|
|
383
|
+
}
|
|
384
|
+
const parsed = parseTargetFlags(args);
|
|
385
|
+
if ("error" in parsed) {
|
|
386
|
+
process.stderr.write(`omb restart: ${parsed.error}\n\n${RESTART_USAGE}\n`);
|
|
387
|
+
return 2;
|
|
388
|
+
}
|
|
389
|
+
if (parsed.flags.all || parsed.flags.sessions || parsed.flags.daemon || parsed.flags.tray || parsed.flags.idle || parsed.names.length) {
|
|
390
|
+
process.stderr.write(`omb restart: restart always stops the whole runtime; use "omb stop" for one target\n\n${RESTART_USAGE}\n`);
|
|
391
|
+
return 2;
|
|
392
|
+
}
|
|
393
|
+
const targets = resolveTargets({ ...parsed.flags, all: true }, []);
|
|
394
|
+
const stopped = await stopRuntime(cwd, env, targets, services);
|
|
395
|
+
// Restart never names a session, so the stop phase cannot fail on an
|
|
396
|
+
// address. If it ever did, starting services over an unresolved stop would
|
|
397
|
+
// report a runtime that was never reconciled, so it is reported as a failure.
|
|
398
|
+
if ("error" in stopped) {
|
|
399
|
+
process.stderr.write(`omb restart: ${stopped.error}\n\n${RESTART_USAGE}\n`);
|
|
400
|
+
return 2;
|
|
401
|
+
}
|
|
402
|
+
const stopRows = stopped.rows;
|
|
403
|
+
const trayEnabled = loadOmbSettings(env).trayEnabled;
|
|
404
|
+
// The state a resource was observed in before the command ran. The stop phase
|
|
405
|
+
// recorded it, and the dashboard is served by the daemon.
|
|
406
|
+
const observedState = (target) => stopRows.find(row => row.target === (target === "dashboard" ? "daemon" : target))?.state ?? "stopped";
|
|
407
|
+
// The stop phase reports its half of a restart as its own rows. The restart
|
|
408
|
+
// reports one row per resource, so those rows are folded into what the
|
|
409
|
+
// restart did with the resource overall; a failure of either half survives
|
|
410
|
+
// the folding.
|
|
411
|
+
const foldStop = (row) => {
|
|
412
|
+
const stopRow = stopRows.find(candidate => candidate.target === row.target);
|
|
413
|
+
if (stopRow?.action === "failed") {
|
|
414
|
+
return {
|
|
415
|
+
...row,
|
|
416
|
+
action: "failed",
|
|
417
|
+
code: stopRow.code || row.code || 1,
|
|
418
|
+
reason: `could not stop the previous ${row.target} (${stopRow.reason ?? `exit ${stopRow.code ?? 1}`}); ${row.reason ?? "it was started again"}`,
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
// A resource the stop phase stopped and the start phase left alone, such as
|
|
422
|
+
// a tray that settings no longer run, is left stopped.
|
|
423
|
+
if (row.action === "skipped" && stopRow?.action === "stopped")
|
|
424
|
+
return { ...stopRow, reason: row.reason };
|
|
425
|
+
return row.action === "started" && stopRow?.action === "stopped" ? { ...row, reason: "stopped, then started" } : row;
|
|
426
|
+
};
|
|
427
|
+
const rows = stopRows.filter(row => row.target === "session");
|
|
428
|
+
if (targets.dryRun) {
|
|
429
|
+
// `stopRuntime` already planned the session stops. Its daemon and tray
|
|
430
|
+
// rows would duplicate the restart plan below with a different meaning
|
|
431
|
+
// (a stop that is immediately undone), so the restart reports one row per
|
|
432
|
+
// resource: what happens to it overall.
|
|
433
|
+
const plan = [...rows];
|
|
434
|
+
const daemonState = services.readDaemonStatus(env).state === "running" ? "running" : "stopped";
|
|
435
|
+
plan.push({ target: "daemon", name: "daemon", state: daemonState, action: "planned", reason: "stop, then start" });
|
|
436
|
+
const trayState = services.readTrayStatus(env).state === "running" ? "running" : "stopped";
|
|
437
|
+
plan.push(trayEnabled
|
|
438
|
+
? { target: "tray", name: "tray", state: trayState, action: "planned", reason: "stop, then start" }
|
|
439
|
+
: { target: "tray", name: "tray", state: trayState, action: "skipped", reason: "disabled in settings" });
|
|
440
|
+
plan.push({ target: "dashboard", name: "dashboard", state: daemonState, action: "planned", reason: "stop, then start" });
|
|
441
|
+
emit(payload("restart", plan, true, { url: null }), plan, renderSummary("restart", plan, true), targets.json);
|
|
442
|
+
return 0;
|
|
443
|
+
}
|
|
444
|
+
let url;
|
|
445
|
+
let daemonStarted = false;
|
|
446
|
+
try {
|
|
447
|
+
const daemon = await services.startDaemon(env);
|
|
448
|
+
daemonStarted = true;
|
|
449
|
+
rows.push(foldStop({ target: "daemon", name: `127.0.0.1:${daemon.port}`, state: observedState("daemon"), action: "started" }));
|
|
450
|
+
}
|
|
451
|
+
catch (error) {
|
|
452
|
+
rows.push(foldStop({
|
|
453
|
+
target: "daemon",
|
|
454
|
+
name: "daemon",
|
|
455
|
+
state: observedState("daemon"),
|
|
456
|
+
action: "failed",
|
|
457
|
+
code: 1,
|
|
458
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
459
|
+
}));
|
|
460
|
+
}
|
|
461
|
+
if (daemonStarted) {
|
|
462
|
+
if (trayEnabled) {
|
|
463
|
+
try {
|
|
464
|
+
const tray = await services.startTray(env);
|
|
465
|
+
rows.push(foldStop(tray
|
|
466
|
+
? { target: "tray", name: "tray", state: observedState("tray"), action: "started" }
|
|
467
|
+
: { target: "tray", name: "tray", state: "unsupported", action: "skipped", reason: "unavailable on this host" }));
|
|
468
|
+
}
|
|
469
|
+
catch (error) {
|
|
470
|
+
rows.push(foldStop({ target: "tray", name: "tray", state: observedState("tray"), action: "failed", code: 1, reason: error instanceof Error ? error.message : String(error) }));
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
rows.push(foldStop({ target: "tray", name: "tray", state: observedState("tray"), action: "skipped", reason: "disabled in settings" }));
|
|
475
|
+
}
|
|
476
|
+
try {
|
|
477
|
+
const link = await services.openDashboard(env);
|
|
478
|
+
url = link.url;
|
|
479
|
+
rows.push(foldStop({ target: "dashboard", name: `127.0.0.1:${link.port}`, state: observedState("dashboard"), action: "started", reason: "access code expires in five minutes" }));
|
|
480
|
+
}
|
|
481
|
+
catch (error) {
|
|
482
|
+
rows.push(foldStop({ target: "dashboard", name: "dashboard", state: observedState("dashboard"), action: "failed", code: 1, reason: error instanceof Error ? error.message : String(error) }));
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
// The tray and the dashboard are reported either way, so a resource that
|
|
487
|
+
// was stopped and not started again is not left out of the report.
|
|
488
|
+
rows.push(foldStop({
|
|
489
|
+
target: "tray",
|
|
490
|
+
name: "tray",
|
|
491
|
+
state: observedState("tray"),
|
|
492
|
+
action: "skipped",
|
|
493
|
+
reason: trayEnabled ? "daemon did not start" : "disabled in settings",
|
|
494
|
+
}));
|
|
495
|
+
rows.push({
|
|
496
|
+
target: "dashboard",
|
|
497
|
+
name: "dashboard",
|
|
498
|
+
state: observedState("dashboard"),
|
|
499
|
+
action: "skipped",
|
|
500
|
+
reason: "daemon did not start",
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
const human = `${renderSummary("restart", rows, false)}${url ? `\ndashboard ${url}` : ""}`;
|
|
504
|
+
emit(payload("restart", rows, false, { url: url ?? null }), rows, human, targets.json);
|
|
505
|
+
return exitCodeFor(rows);
|
|
506
|
+
}
|
|
507
|
+
//# sourceMappingURL=omb-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omb-runtime.js","sourceRoot":"","sources":["../../src/cli/omb-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAqB,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAA4C,MAAM,wBAAwB,CAAC;AAClK,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAmB,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAkBnD,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,gBAAgB;IAChB,WAAW;IACX,UAAU;IACV,cAAc;IACd,SAAS;IACT,QAAQ;IACR,aAAa;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;4DAsBkC,CAAC;AAE7D,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;6CAoBgB,CAAC;AAoC9C;;;;;GAKG;AACH,MAAM,iBAAiB,GAAG,8BAA8B,CAAC;AAEzD,SAAS,gBAAgB,CAAC,IAAc;IACtC,MAAM,KAAK,GAAgB;QACzB,GAAG,EAAE,KAAK;QACV,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,KAAK;KACZ,CAAC;IACF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,GAAG,KAAK,OAAO;YAAE,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC;aACjC,IAAI,GAAG,KAAK,YAAY;YAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;aAChD,IAAI,GAAG,KAAK,QAAQ;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;aACxC,IAAI,GAAG,KAAK,SAAS;YAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;aAC1C,IAAI,GAAG,KAAK,WAAW;YAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;aAC7C,IAAI,GAAG,KAAK,QAAQ;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;aACxC,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,aAAa;YAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;aACrE,IAAI,GAAG,KAAK,QAAQ;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;aACxC,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,OAAO,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC;YAClG,wEAAwE;YACxE,0EAA0E;YAC1E,wEAAwE;YACxE,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;YACxD,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC5F,OAAO,EAAE,KAAK,EAAE,IAAI,KAAK,0DAA0D,EAAE,CAAC;YACxF,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;;YAAM,OAAO,EAAE,KAAK,EAAE,qBAAqB,GAAG,GAAG,EAAE,CAAC;IACvD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,SAAS,cAAc,CAAC,KAAkB,EAAE,KAAe;IACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC;IAC5C,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC;IAC5D,MAAM,SAAS,GAAG,QAAQ,IAAI,gBAAgB,IAAI,KAAK,CAAC,GAAG,CAAC;IAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,IAAI,gBAAgB,IAAI,CAAC,SAAS,CAAC;IAC7D,OAAO;QACL,QAAQ;QACR,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS;QAC/C,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS;QAC3C,KAAK;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,IAAI,EAAE,KAAK,CAAC,IAAI;KACjB,CAAC;AACJ,CAAC;AAED,wEAAwE;AACxE,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,gBAAgB,CACvB,QAA0B,EAC1B,KAAe;IAEf,MAAM,IAAI,GAAsB,EAAE,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;IAC3G,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,sEAAsE;IACtE,4DAA4D;IAC5D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAClC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,4EAA4E;QAC5E,yEAAyE;QACzE,kEAAkE;QAClE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,MAAM;YACvB,CAAC,CAAC,CAAC,MAAM,CAAC;YACV,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QACzH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;aACrD,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,uEAAuE;YACvE,0EAA0E;YAC1E,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QACnG,CAAC;aAAM,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,yEAAyE;YACzE,yEAAyE;YACzE,0BAA0B;YAC1B,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,uEAAuE,EAAE,CAAC;QACpG,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,aAAa,UAAU,CAAC,MAAM,cAAc,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACjI,CAAC;IACH,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,0EAA0E;AAC1E,KAAK,UAAU,WAAW,CACxB,OAAuB,EACvB,OAA4F;IAE5F,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAC5C,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,SAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IACtF,MAAM,IAAI,GAAG,CAAC,MAAc,EAAmB,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3F,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChE,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACjG,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,kDAAkD,CAAC,CAAC;IAC7F,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC3F,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,KAAK,cAAc;QAAE,OAAO,IAAI,CAAC,SAAS,OAAO,CAAC,KAAK,cAAc,CAAC,CAAC;IACxG,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,8BAA8B,CAAC,CAAC;IACpF,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC1D,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5D,OAAO,IAAI,KAAK,CAAC;QACf,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE;QACtC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,uBAAuB,IAAI,EAAE,EAAE,CAAC;AACjF,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,OAAoB,EACpB,GAAsB,EACtB,QAAyB;IAEzB,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG;QACX,MAAM,EAAE,QAAiB;QACzB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ;QAClE,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;IACF,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC7F,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO,MAAM,KAAK,SAAS;YACzB,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE;YAChC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAChH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,OAAoB,EACpB,GAAsB,EACtB,QAAyB;IAEzB,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5E,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,MAAM,CAAC,KAAK,KAAK,aAAa;gBACpC,CAAC,CAAC,0BAA0B;gBAC5B,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO;oBACxB,CAAC,CAAC,iDAAiD;oBACnD,CAAC,CAAC,aAAa;SACpB,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC1D,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE;YAChC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAChH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,GAAW,EACX,GAAsB,EACtB,OAAoB,EACpB,QAAyB;IAEzB,MAAM,IAAI,GAAsB,EAAE,CAAC;IACnC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7D,4EAA4E;QAC5E,6DAA6D;QAC7D,IAAI,OAAO,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC;QAC7C,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACnD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,MAAM,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChF,IAAI,OAAO,CAAC,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,MAAM,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,iFAAiF;AACjF,KAAK,UAAU,cAAc,CAC3B,KAAa,EACb,GAAW,EACX,GAAsB;IAEtB,uEAAuE;IACvE,2EAA2E;IAC3E,0EAA0E;IAC1E,0DAA0D;IAC1D,IAAI,MAAM,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,SAAS;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IAC3G,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AACpF,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,qBAAqB,CAClC,IAAuB,EACvB,GAAW,EACX,GAAsB;IAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC;IACxH,IAAI,CAAC,SAAS,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/E,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACpB,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC;YAAE,OAAO,GAAG,CAAC;QAClG,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,QAAiB,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC;QAClI,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YACzB,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,QAAiB,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,+BAA+B,EAAE;YACrG,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,SAAkB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,KAAK,CAAC,IAAuB,EAAE,MAAiC;IACvE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;AAC1D,CAAC;AAED,SAAS,UAAU,CAAC,IAAuB;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,OAAO,IAAI;SACR,GAAG,CAAC,GAAG,CAAC,EAAE;QACT,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC;IACpF,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,EAAE,IAAuB,EAAE,MAAe;IAC9E,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACpD,IAAI,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAChF,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,IAAI,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,SAAS,CAAC,CAAC;IAC3C,OAAO,OAAO,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED,SAAS,WAAW,CAAC,IAAuB;IAC1C,OAAO,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,SAAS,OAAO,CAAC,OAAe,EAAE,IAAuB,EAAE,MAAe,EAAE,KAAK,GAA4B,EAAE;IAC7G,OAAO;QACL,OAAO;QACP,MAAM;QACN,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;QAC/B,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;QAC/B,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;QAC/B,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;QAC/B,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC7B,GAAG,KAAK;KACT,CAAC;AACJ,CAAC;AAED,SAAS,IAAI,CAAC,OAAgC,EAAE,IAAuB,EAAE,KAAa,EAAE,IAAa;IACnG,IAAI,IAAI,EAAE,CAAC;QACT,yEAAyE;QACzE,uEAAuE;QACvE,kCAAkC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAClF,CAAC;;QAAM,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAc,EACd,GAAG,GAAsB,OAAO,CAAC,GAAG,EACpC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EACnB,QAAQ,GAAoB,eAAe;IAE3C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;QACxC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,KAAK,OAAO,UAAU,IAAI,CAAC,CAAC;QACrE,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9D,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,KAAK,OAAO,UAAU,IAAI,CAAC,CAAC;QACrE,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7G,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAc,EACd,GAAG,GAAsB,OAAO,CAAC,GAAG,EACpC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EACnB,QAAQ,GAAoB,eAAe;IAE3C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,aAAa,IAAI,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,MAAM,CAAC,KAAK,OAAO,aAAa,IAAI,CAAC,CAAC;QAC3E,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACtI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yFAAyF,aAAa,IAAI,CAAC,CAAC;QACjI,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/D,qEAAqE;IACrE,2EAA2E;IAC3E,8EAA8E;IAC9E,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,OAAO,CAAC,KAAK,OAAO,aAAa,IAAI,CAAC,CAAC;QAC5E,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAC9B,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;IACrD,8EAA8E;IAC9E,0DAA0D;IAC1D,MAAM,aAAa,GAAG,CAAC,MAAiC,EAAU,EAAE,CAClE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI,SAAS,CAAC;IACxG,4EAA4E;IAC5E,uEAAuE;IACvE,2EAA2E;IAC3E,eAAe;IACf,MAAM,QAAQ,GAAG,CAAC,GAAoB,EAAmB,EAAE;QACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5E,IAAI,OAAO,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO;gBACL,GAAG,GAAG;gBACN,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC;gBACnC,MAAM,EAAE,+BAA+B,GAAG,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,QAAQ,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,sBAAsB,EAAE;aAChJ,CAAC;QACJ,CAAC;QACD,4EAA4E;QAC5E,uDAAuD;QACvD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS;YAAE,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;QACzG,OAAO,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACvH,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAE9D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,uEAAuE;QACvE,uEAAuE;QACvE,0EAA0E;QAC1E,wCAAwC;QACxC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACvB,MAAM,WAAW,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/F,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACnH,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,IAAI,CAAC,IAAI,CACP,WAAW;YACT,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE;YACnG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAC1G,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACzH,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9G,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,GAAuB,CAAC;IAC5B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/C,aAAa,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IACjI,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACjB,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC;YAC9B,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC/D,CAAC,CAAC,CAAC;IACN,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI;oBACrB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;oBACnF,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC;YACtH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACjL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC;QACzI,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC/C,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,qCAAqC,EAAE,CAAC,CAAC,CAAC;QACpL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAChM,CAAC;IACH,CAAC;SAAM,CAAC;QACN,yEAAyE;QACzE,mEAAmE;QACnE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACjB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC;YAC5B,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,sBAAsB;SACtE,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,IAAI,CAAC;YACR,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC;YACjC,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,sBAAsB;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC3F,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACvF,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const TRAY_USAGE = "omb tray [start|stop|status]\n\n Controls the optional native tray icon for background Bizar sessions.\n\n start start the tray when the host supports it (default)\n stop stop a running tray\n status print the tray state and pid\n run run the tray in this process (used by the detached launcher)\n\n The tray is available on supported Linux, macOS, and Windows hosts; an\n unsupported desktop environment keeps the hub, dashboard, and daemon.";
|
|
2
|
+
export declare function runTrayCommand(args: string[], env?: NodeJS.ProcessEnv): Promise<number>;
|
|
3
|
+
//# sourceMappingURL=omb-tray.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omb-tray.d.ts","sourceRoot":"","sources":["../../src/cli/omb-tray.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,odAUiD,CAAC;AAEzE,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6B1G"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { readTrayStatus, runTrayForeground, startTray, stopTray } from "../omp/tray.js";
|
|
2
|
+
export const TRAY_USAGE = `omb tray [start|stop|status]
|
|
3
|
+
|
|
4
|
+
Controls the optional native tray icon for background Bizar sessions.
|
|
5
|
+
|
|
6
|
+
start start the tray when the host supports it (default)
|
|
7
|
+
stop stop a running tray
|
|
8
|
+
status print the tray state and pid
|
|
9
|
+
run run the tray in this process (used by the detached launcher)
|
|
10
|
+
|
|
11
|
+
The tray is available on supported Linux, macOS, and Windows hosts; an
|
|
12
|
+
unsupported desktop environment keeps the hub, dashboard, and daemon.`;
|
|
13
|
+
export async function runTrayCommand(args, env = process.env) {
|
|
14
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
15
|
+
process.stdout.write(`${TRAY_USAGE}\n`);
|
|
16
|
+
return 0;
|
|
17
|
+
}
|
|
18
|
+
const sub = args[0] ?? "start";
|
|
19
|
+
if (sub === "run")
|
|
20
|
+
return runTrayForeground(env);
|
|
21
|
+
if (sub === "start") {
|
|
22
|
+
const info = await startTray(env);
|
|
23
|
+
process.stdout.write(info ? `omb tray started — pid ${info.pid}\n` : "omb tray is unavailable on this host\n");
|
|
24
|
+
return 0;
|
|
25
|
+
}
|
|
26
|
+
if (sub === "stop") {
|
|
27
|
+
const status = readTrayStatus(env);
|
|
28
|
+
const stopped = await stopTray(env);
|
|
29
|
+
process.stdout.write(stopped
|
|
30
|
+
? "omb tray stopped\n"
|
|
31
|
+
: status.state === "stale"
|
|
32
|
+
? "omb tray is not running: the recorded process is gone or is not the tray\n"
|
|
33
|
+
: "omb tray is not running\n");
|
|
34
|
+
return 0;
|
|
35
|
+
}
|
|
36
|
+
if (sub === "status") {
|
|
37
|
+
const status = readTrayStatus(env);
|
|
38
|
+
process.stdout.write(`omb tray ${status.state}${status.tray ? ` — pid ${status.tray.pid}` : ""}\n`);
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
process.stderr.write(`omb tray: unknown subcommand "${sub}" (use start, stop, status)\n\n${TRAY_USAGE}\n`);
|
|
42
|
+
return 2;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=omb-tray.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omb-tray.js","sourceRoot":"","sources":["../../src/cli/omb-tray.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAExF,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;wEAU8C,CAAC;AAEzE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc,EAAE,GAAG,GAAsB,OAAO,CAAC,GAAG;IACvF,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;QACxC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IAC/B,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACjD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC;QAC/G,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO;YAC1B,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO;gBACxB,CAAC,CAAC,4EAA4E;gBAC9E,CAAC,CAAC,2BAA2B,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACpG,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAG,kCAAkC,UAAU,IAAI,CAAC,CAAC;IAC3G,OAAO,CAAC,CAAC;AACX,CAAC"}
|
package/dist/cli/omb.js
CHANGED
|
@@ -1,43 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { runAgentsHub } from "./agents.js";
|
|
3
|
+
import { findOmbCommand } from "./omb-commands.js";
|
|
3
4
|
import { parseOmbCommand } from "./omb-invocation.js";
|
|
4
|
-
import { runDashboardCommand } from "./omb-dashboard.js";
|
|
5
|
-
import { runDaemonCommand } from "./omb-daemon.js";
|
|
6
5
|
import { launchOmb, shouldLaunchOmbInTmux } from "../omp/tmux.js";
|
|
7
|
-
import { readTrayStatus, runTrayForeground, startTray, stopTray } from "../omp/tray.js";
|
|
8
6
|
try {
|
|
9
|
-
const args = process.argv.slice(2);
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
else if (args[0] === "daemon") {
|
|
14
|
-
process.exitCode = await runDaemonCommand(args.slice(1), process.env);
|
|
15
|
-
}
|
|
16
|
-
else if (args[0] === "dashboard") {
|
|
17
|
-
process.exitCode = await runDashboardCommand(args.slice(1), process.env);
|
|
18
|
-
}
|
|
19
|
-
else if (args[0] === "tray") {
|
|
20
|
-
const sub = args[1] ?? "start";
|
|
21
|
-
if (sub === "run")
|
|
22
|
-
process.exitCode = await runTrayForeground(process.env);
|
|
23
|
-
else if (sub === "start") {
|
|
24
|
-
const info = await startTray(process.env);
|
|
25
|
-
process.stdout.write(info ? `omb tray started — pid ${info.pid}\n` : "omb tray is unavailable on this host\n");
|
|
26
|
-
}
|
|
27
|
-
else if (sub === "stop") {
|
|
28
|
-
process.stdout.write((await stopTray(process.env)) ? "omb tray stopped\n" : "omb tray is not running\n");
|
|
29
|
-
}
|
|
30
|
-
else if (sub === "status") {
|
|
31
|
-
const status = readTrayStatus(process.env);
|
|
32
|
-
process.stdout.write(`omb tray ${status.state}${status.tray ? ` — pid ${status.tray.pid}` : ""}\n`);
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
process.stderr.write("omb tray: unknown subcommand (use start, stop, status)\n");
|
|
36
|
-
process.exitCode = 2;
|
|
37
|
-
}
|
|
7
|
+
const [token = "", ...args] = process.argv.slice(2);
|
|
8
|
+
const command = findOmbCommand(token);
|
|
9
|
+
if (command) {
|
|
10
|
+
process.exitCode = await command.run(args, process.env);
|
|
38
11
|
}
|
|
39
12
|
else {
|
|
40
|
-
|
|
13
|
+
// Anything omb does not own is an OMP invocation: run or attach it, then
|
|
14
|
+
// return to the hub when the launch took over an opaque terminal.
|
|
15
|
+
const invocation = parseOmbCommand(process.argv.slice(2));
|
|
41
16
|
const returnToHub = shouldLaunchOmbInTmux({
|
|
42
17
|
args: invocation.ompArgs,
|
|
43
18
|
env: process.env,
|