@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,371 @@
|
|
|
1
|
+
import { readDaemonStatus, startDaemon, stopDaemon } from "../omp/daemon.js";
|
|
2
|
+
import { loadOmbSettings } from "../omp/omb-settings.js";
|
|
3
|
+
import { currentOmbHostSession, isOmbSessionName, listOmbSessions } from "../omp/omb-sessions.js";
|
|
4
|
+
import { readTrayStatus, startTray, stopTray } from "../omp/tray.js";
|
|
5
|
+
import { deleteOmbSession, 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 name, repeatable; Bizar-owned names only
|
|
26
|
+
--daemon only the daemon
|
|
27
|
+
--dashboard only the daemon, which serves the dashboard
|
|
28
|
+
--tray only the tray
|
|
29
|
+
--idle only sessions with no client attached and no work in flight
|
|
30
|
+
--force also stop sessions that have a client attached
|
|
31
|
+
--dry-run report what would stop without stopping it
|
|
32
|
+
--json print { command, dryRun, stopped, skipped, failed, resources }
|
|
33
|
+
|
|
34
|
+
Only Bizar-owned sessions are ever touched, the session hosting this command
|
|
35
|
+
is never stopped, and "nothing was running" is a success.`;
|
|
36
|
+
export const RESTART_USAGE = `omb restart [--force] [--dry-run] [--json]
|
|
37
|
+
|
|
38
|
+
Stops the whole runtime like "omb stop", then starts the daemon and the tray
|
|
39
|
+
again and prints a fresh dashboard access code. Agent sessions are not
|
|
40
|
+
relaunched: their journals are kept, so "omb" in a project or the hub brings
|
|
41
|
+
a session back.
|
|
42
|
+
|
|
43
|
+
--force also stop sessions that have a client attached
|
|
44
|
+
--dry-run report the plan without stopping or starting anything
|
|
45
|
+
--json print { command, dryRun, stopped, started, skipped, failed,
|
|
46
|
+
resources, url }`;
|
|
47
|
+
function parseTargetFlags(args) {
|
|
48
|
+
const flags = {
|
|
49
|
+
all: false,
|
|
50
|
+
sessions: false,
|
|
51
|
+
daemon: false,
|
|
52
|
+
tray: false,
|
|
53
|
+
idle: false,
|
|
54
|
+
force: false,
|
|
55
|
+
dryRun: false,
|
|
56
|
+
json: false,
|
|
57
|
+
};
|
|
58
|
+
const names = [];
|
|
59
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
60
|
+
const arg = args[index];
|
|
61
|
+
if (arg === "--all")
|
|
62
|
+
flags.all = true;
|
|
63
|
+
else if (arg === "--sessions")
|
|
64
|
+
flags.sessions = true;
|
|
65
|
+
else if (arg === "--idle")
|
|
66
|
+
flags.idle = true;
|
|
67
|
+
else if (arg === "--force")
|
|
68
|
+
flags.force = true;
|
|
69
|
+
else if (arg === "--dry-run")
|
|
70
|
+
flags.dryRun = true;
|
|
71
|
+
else if (arg === "--json")
|
|
72
|
+
flags.json = true;
|
|
73
|
+
else if (arg === "--daemon" || arg === "--dashboard")
|
|
74
|
+
flags.daemon = true;
|
|
75
|
+
else if (arg === "--tray")
|
|
76
|
+
flags.tray = true;
|
|
77
|
+
else if (arg === "--session") {
|
|
78
|
+
const value = args[++index];
|
|
79
|
+
if (!value || value.startsWith("--"))
|
|
80
|
+
return { error: "--session requires a session name" };
|
|
81
|
+
if (!isOmbSessionName(value))
|
|
82
|
+
return { error: `"${value}" is not a Bizar-owned session name` };
|
|
83
|
+
names.push(value);
|
|
84
|
+
}
|
|
85
|
+
else
|
|
86
|
+
return { error: `unknown argument "${arg}"` };
|
|
87
|
+
}
|
|
88
|
+
return { flags, names };
|
|
89
|
+
}
|
|
90
|
+
/** Resolve target flags into what the command stops. Targets are additive. */
|
|
91
|
+
function resolveTargets(flags, names) {
|
|
92
|
+
const services = flags.daemon || flags.tray;
|
|
93
|
+
const explicitSessions = names.length > 0 || flags.sessions;
|
|
94
|
+
const anyTarget = services || explicitSessions || flags.all;
|
|
95
|
+
const sessions = flags.all || explicitSessions || !anyTarget;
|
|
96
|
+
return {
|
|
97
|
+
sessions,
|
|
98
|
+
daemon: flags.daemon || flags.all || !anyTarget,
|
|
99
|
+
tray: flags.tray || flags.all || !anyTarget,
|
|
100
|
+
names,
|
|
101
|
+
idle: flags.idle,
|
|
102
|
+
force: flags.force,
|
|
103
|
+
dryRun: flags.dryRun,
|
|
104
|
+
json: flags.json,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function sessionResources(sessions, names) {
|
|
108
|
+
const rows = [];
|
|
109
|
+
if (names.length === 0)
|
|
110
|
+
return { selected: sessions.filter(session => session.state !== "stopped"), rows };
|
|
111
|
+
const selected = [];
|
|
112
|
+
for (const name of names) {
|
|
113
|
+
const found = sessions.find(session => session.name === name);
|
|
114
|
+
if (found)
|
|
115
|
+
selected.push(found);
|
|
116
|
+
else
|
|
117
|
+
rows.push({ target: "session", name, state: "unknown", action: "skipped", reason: "not found" });
|
|
118
|
+
}
|
|
119
|
+
return { selected, rows };
|
|
120
|
+
}
|
|
121
|
+
/** Decide one session's fate, then act on it unless this is a dry run. */
|
|
122
|
+
async function stopSession(session, options) {
|
|
123
|
+
const { targets, host, cwd, env } = options;
|
|
124
|
+
const base = { target: "session", name: session.name, state: session.state };
|
|
125
|
+
const skip = (reason) => ({ ...base, action: "skipped", reason });
|
|
126
|
+
if (session.state === "stopped")
|
|
127
|
+
return skip("already stopped");
|
|
128
|
+
if (session.hosted === false)
|
|
129
|
+
return skip("no tmux host; remove it from the hub if it is stale");
|
|
130
|
+
if (host.kind === "unknown")
|
|
131
|
+
return skip("cannot identify the session hosting this command");
|
|
132
|
+
if (host.kind === "bizar" && session.name === host.name)
|
|
133
|
+
return skip("hosts this command");
|
|
134
|
+
if (targets.idle && session.state !== "disconnected")
|
|
135
|
+
return skip(`state ${session.state} is not idle`);
|
|
136
|
+
if (session.attached && !targets.force)
|
|
137
|
+
return skip("client attached; use --force");
|
|
138
|
+
if (targets.dryRun)
|
|
139
|
+
return { ...base, action: "planned" };
|
|
140
|
+
const code = await deleteOmbSession(session.name, cwd, env);
|
|
141
|
+
return code === 0
|
|
142
|
+
? { ...base, action: "stopped", code }
|
|
143
|
+
: { ...base, action: "failed", code, reason: `kill-session exited ${code}` };
|
|
144
|
+
}
|
|
145
|
+
async function stopDaemonResource(targets, env, services) {
|
|
146
|
+
const status = services.readDaemonStatus(env);
|
|
147
|
+
const base = {
|
|
148
|
+
target: "daemon",
|
|
149
|
+
name: status.daemon ? `127.0.0.1:${status.daemon.port}` : "daemon",
|
|
150
|
+
state: status.state,
|
|
151
|
+
};
|
|
152
|
+
if (status.state !== "running")
|
|
153
|
+
return { ...base, action: "skipped", reason: "not running" };
|
|
154
|
+
if (targets.dryRun)
|
|
155
|
+
return { ...base, action: "planned" };
|
|
156
|
+
try {
|
|
157
|
+
const result = await services.stopDaemon(env);
|
|
158
|
+
return result === "stopped"
|
|
159
|
+
? { ...base, action: "stopped" }
|
|
160
|
+
: { ...base, action: "skipped", reason: "not running" };
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
return { ...base, action: "failed", code: 1, reason: error instanceof Error ? error.message : String(error) };
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async function stopTrayResource(targets, env, services) {
|
|
167
|
+
const status = services.readTrayStatus(env);
|
|
168
|
+
const base = { target: "tray", name: "tray", state: status.state };
|
|
169
|
+
if (status.state !== "running")
|
|
170
|
+
return { ...base, action: "skipped", reason: status.state === "unsupported" ? "unsupported on this host" : "not running" };
|
|
171
|
+
if (targets.dryRun)
|
|
172
|
+
return { ...base, action: "planned" };
|
|
173
|
+
try {
|
|
174
|
+
return (await services.stopTray(env))
|
|
175
|
+
? { ...base, action: "stopped" }
|
|
176
|
+
: { ...base, action: "skipped", reason: "not running" };
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
return { ...base, action: "failed", code: 1, reason: error instanceof Error ? error.message : String(error) };
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async function stopRuntime(cwd, env, targets, services) {
|
|
183
|
+
const rows = [];
|
|
184
|
+
if (targets.sessions) {
|
|
185
|
+
const sessions = await listOmbSessions(cwd, env);
|
|
186
|
+
const { selected, rows: unmatched } = sessionResources(sessions, targets.names);
|
|
187
|
+
rows.push(...unmatched);
|
|
188
|
+
const host = await currentOmbHostSession(cwd, env);
|
|
189
|
+
for (const session of selected) {
|
|
190
|
+
rows.push(await stopSession(session, { targets, host, cwd, env }));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (targets.daemon)
|
|
194
|
+
rows.push(await stopDaemonResource(targets, env, services));
|
|
195
|
+
if (targets.tray)
|
|
196
|
+
rows.push(await stopTrayResource(targets, env, services));
|
|
197
|
+
return verifyStoppedSessions(rows, cwd, env);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Confirm every attempted kill against the multiplexer, which is the only
|
|
201
|
+
* authority on whether a session is still there.
|
|
202
|
+
*
|
|
203
|
+
* `deleteOmbSession` also tombstones a session's journal, and a session can
|
|
204
|
+
* vanish between the listing and the kill, so neither its exit code nor the
|
|
205
|
+
* hub listing can answer "is it gone?" for this caller. A kill that the
|
|
206
|
+
* multiplexer refuses is `failed`, and a multiplexer that cannot be run at all
|
|
207
|
+
* leaves the outcome unproven rather than reported as a stop.
|
|
208
|
+
*/
|
|
209
|
+
async function verifyStoppedSessions(rows, cwd, env) {
|
|
210
|
+
const attempted = rows.filter(row => row.target === "session" && (row.action === "stopped" || row.action === "failed"));
|
|
211
|
+
if (!attempted.length)
|
|
212
|
+
return rows;
|
|
213
|
+
const confirmed = new Map();
|
|
214
|
+
for (const row of attempted)
|
|
215
|
+
confirmed.set(row.name, await ombSessionLiveness(row.name, cwd, env));
|
|
216
|
+
return rows.map(row => {
|
|
217
|
+
if (row.target !== "session" || (row.action !== "stopped" && row.action !== "failed"))
|
|
218
|
+
return row;
|
|
219
|
+
switch (confirmed.get(row.name)) {
|
|
220
|
+
case "gone":
|
|
221
|
+
return { ...row, action: "stopped", code: 0 };
|
|
222
|
+
case "live":
|
|
223
|
+
return { ...row, action: "failed", code: row.code || 1, reason: "still live after kill-session" };
|
|
224
|
+
default:
|
|
225
|
+
return { ...row, action: "failed", code: row.code || 1, reason: "could not confirm the session stopped" };
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
function count(rows, action) {
|
|
230
|
+
return rows.filter(row => row.action === action).length;
|
|
231
|
+
}
|
|
232
|
+
function renderRows(rows) {
|
|
233
|
+
const width = Math.max(0, ...rows.map(row => row.target.length));
|
|
234
|
+
return rows
|
|
235
|
+
.map(row => {
|
|
236
|
+
const detail = row.reason ? ` — ${row.reason}` : row.code ? ` (exit ${row.code})` : "";
|
|
237
|
+
return `${row.action.padEnd(7)} ${row.target.padEnd(width)} ${row.name}${detail}`;
|
|
238
|
+
})
|
|
239
|
+
.join("\n");
|
|
240
|
+
}
|
|
241
|
+
function renderSummary(command, rows, dryRun) {
|
|
242
|
+
const parts = [`${count(rows, "stopped")} stopped`];
|
|
243
|
+
if (count(rows, "started") > 0)
|
|
244
|
+
parts.push(`${count(rows, "started")} started`);
|
|
245
|
+
parts.push(`${count(rows, "skipped")} skipped`);
|
|
246
|
+
if (count(rows, "planned") > 0)
|
|
247
|
+
parts.push(`${count(rows, "planned")} planned`);
|
|
248
|
+
const failed = count(rows, "failed");
|
|
249
|
+
if (failed)
|
|
250
|
+
parts.push(`${failed} failed`);
|
|
251
|
+
return `omb ${command}${dryRun ? " (dry run)" : ""}: ${parts.join(", ")}`;
|
|
252
|
+
}
|
|
253
|
+
function exitCodeFor(rows) {
|
|
254
|
+
return count(rows, "failed") > 0 ? 1 : 0;
|
|
255
|
+
}
|
|
256
|
+
function emit(payload, rows, human, json) {
|
|
257
|
+
if (json)
|
|
258
|
+
process.stdout.write(`${JSON.stringify({ ...payload, resources: rows }, null, 2)}\n`);
|
|
259
|
+
else
|
|
260
|
+
process.stdout.write(`${human}\n${renderRows(rows)}\n`);
|
|
261
|
+
}
|
|
262
|
+
export async function runStopCommand(args, env = process.env, cwd = process.cwd(), services = runtimeServices) {
|
|
263
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
264
|
+
process.stdout.write(`${STOP_USAGE}\n`);
|
|
265
|
+
return 0;
|
|
266
|
+
}
|
|
267
|
+
const parsed = parseTargetFlags(args);
|
|
268
|
+
if ("error" in parsed) {
|
|
269
|
+
process.stderr.write(`omb stop: ${parsed.error}\n\n${STOP_USAGE}\n`);
|
|
270
|
+
return 2;
|
|
271
|
+
}
|
|
272
|
+
const targets = resolveTargets(parsed.flags, parsed.names);
|
|
273
|
+
const rows = await stopRuntime(cwd, env, targets, services);
|
|
274
|
+
emit({ command: "stop", dryRun: targets.dryRun, stopped: count(rows, "stopped"), skipped: count(rows, "skipped"), failed: count(rows, "failed") }, rows, renderSummary("stop", rows, targets.dryRun), targets.json);
|
|
275
|
+
return exitCodeFor(rows);
|
|
276
|
+
}
|
|
277
|
+
export async function runRestartCommand(args, env = process.env, cwd = process.cwd(), services = runtimeServices) {
|
|
278
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
279
|
+
process.stdout.write(`${RESTART_USAGE}\n`);
|
|
280
|
+
return 0;
|
|
281
|
+
}
|
|
282
|
+
const parsed = parseTargetFlags(args);
|
|
283
|
+
if ("error" in parsed) {
|
|
284
|
+
process.stderr.write(`omb restart: ${parsed.error}\n\n${RESTART_USAGE}\n`);
|
|
285
|
+
return 2;
|
|
286
|
+
}
|
|
287
|
+
if (parsed.flags.all || parsed.flags.sessions || parsed.flags.daemon || parsed.flags.tray || parsed.names.length) {
|
|
288
|
+
process.stderr.write(`omb restart: restart always stops the whole runtime; use "omb stop" for one target\n\n${RESTART_USAGE}\n`);
|
|
289
|
+
return 2;
|
|
290
|
+
}
|
|
291
|
+
const targets = resolveTargets({ ...parsed.flags, all: true }, []);
|
|
292
|
+
const rows = await stopRuntime(cwd, env, targets, services);
|
|
293
|
+
const trayEnabled = loadOmbSettings(env).trayEnabled;
|
|
294
|
+
if (targets.dryRun) {
|
|
295
|
+
// `stopRuntime` already planned the session stops. Its daemon and tray
|
|
296
|
+
// rows would duplicate the restart plan below with a different meaning
|
|
297
|
+
// (a stop that is immediately undone), so the restart reports one row per
|
|
298
|
+
// resource: what happens to it overall.
|
|
299
|
+
const plan = rows.filter(row => row.target === "session");
|
|
300
|
+
const daemonState = services.readDaemonStatus(env).state;
|
|
301
|
+
plan.push({
|
|
302
|
+
target: "daemon",
|
|
303
|
+
name: "daemon",
|
|
304
|
+
state: daemonState === "running" ? "running" : "stopped",
|
|
305
|
+
action: "planned",
|
|
306
|
+
reason: "stop, then start",
|
|
307
|
+
});
|
|
308
|
+
const trayState = services.readTrayStatus(env).state;
|
|
309
|
+
plan.push(trayEnabled
|
|
310
|
+
? { target: "tray", name: "tray", state: trayState === "running" ? "running" : "stopped", action: "planned", reason: "stop, then start" }
|
|
311
|
+
: { target: "tray", name: "tray", state: "disabled", action: "skipped", reason: "disabled in settings" });
|
|
312
|
+
emit({ command: "restart", dryRun: true, stopped: 0, started: 0, skipped: count(plan, "skipped"), failed: 0 }, plan, renderSummary("restart", plan, true), targets.json);
|
|
313
|
+
return 0;
|
|
314
|
+
}
|
|
315
|
+
let url;
|
|
316
|
+
let daemonStarted = false;
|
|
317
|
+
try {
|
|
318
|
+
const daemon = await services.startDaemon(env);
|
|
319
|
+
daemonStarted = true;
|
|
320
|
+
rows.push({ target: "daemon", name: `127.0.0.1:${daemon.port}`, state: "stopped", action: "started" });
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
rows.push({
|
|
324
|
+
target: "daemon",
|
|
325
|
+
name: "daemon",
|
|
326
|
+
state: "stopped",
|
|
327
|
+
action: "failed",
|
|
328
|
+
code: 1,
|
|
329
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
if (daemonStarted) {
|
|
333
|
+
if (trayEnabled) {
|
|
334
|
+
try {
|
|
335
|
+
const tray = await services.startTray(env);
|
|
336
|
+
rows.push(tray
|
|
337
|
+
? { target: "tray", name: "tray", state: "stopped", action: "started" }
|
|
338
|
+
: { target: "tray", name: "tray", state: "unsupported", action: "skipped", reason: "unavailable on this host" });
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
rows.push({ target: "tray", name: "tray", state: "stopped", action: "failed", code: 1, reason: error instanceof Error ? error.message : String(error) });
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
rows.push({ target: "tray", name: "tray", state: "disabled", action: "skipped", reason: "disabled in settings" });
|
|
346
|
+
}
|
|
347
|
+
try {
|
|
348
|
+
const link = await services.openDashboard(env);
|
|
349
|
+
url = link.url;
|
|
350
|
+
rows.push({ target: "dashboard", name: `127.0.0.1:${link.port}`, state: "started", action: "started", reason: "access code expires in five minutes" });
|
|
351
|
+
}
|
|
352
|
+
catch (error) {
|
|
353
|
+
rows.push({ target: "dashboard", name: "dashboard", state: "started", action: "failed", code: 1, reason: error instanceof Error ? error.message : String(error) });
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
else if (trayEnabled) {
|
|
357
|
+
rows.push({ target: "tray", name: "tray", state: "stopped", action: "skipped", reason: "daemon did not start" });
|
|
358
|
+
}
|
|
359
|
+
const human = `${renderSummary("restart", rows, false)}${url ? `\ndashboard ${url}` : ""}`;
|
|
360
|
+
emit({
|
|
361
|
+
command: "restart",
|
|
362
|
+
dryRun: false,
|
|
363
|
+
stopped: count(rows, "stopped"),
|
|
364
|
+
started: count(rows, "started"),
|
|
365
|
+
skipped: count(rows, "skipped"),
|
|
366
|
+
failed: count(rows, "failed"),
|
|
367
|
+
url,
|
|
368
|
+
}, rows, human, targets.json);
|
|
369
|
+
return exitCodeFor(rows);
|
|
370
|
+
}
|
|
371
|
+
//# sourceMappingURL=omb-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omb-runtime.js","sourceRoot":"","sources":["../../../src/cli/omb-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
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>;
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
process.stdout.write((await stopTray(env)) ? "omb tray stopped\n" : "omb tray is not running\n");
|
|
28
|
+
return 0;
|
|
29
|
+
}
|
|
30
|
+
if (sub === "status") {
|
|
31
|
+
const status = readTrayStatus(env);
|
|
32
|
+
process.stdout.write(`omb tray ${status.state}${status.tray ? ` — pid ${status.tray.pid}` : ""}\n`);
|
|
33
|
+
return 0;
|
|
34
|
+
}
|
|
35
|
+
process.stderr.write(`omb tray: unknown subcommand "${sub}" (use start, stop, status)\n\n${TRAY_USAGE}\n`);
|
|
36
|
+
return 2;
|
|
37
|
+
}
|
|
38
|
+
//# 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,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;QACjG,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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { runAgentsHub } from "./agents.js";
|
|
3
|
+
import { findOmbCommand } from "./omb-commands.js";
|
|
4
|
+
import { parseOmbCommand } from "./omb-invocation.js";
|
|
5
|
+
import { launchOmb, shouldLaunchOmbInTmux } from "../omp/tmux.js";
|
|
6
|
+
try {
|
|
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);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
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));
|
|
16
|
+
const returnToHub = shouldLaunchOmbInTmux({
|
|
17
|
+
args: invocation.ompArgs,
|
|
18
|
+
env: process.env,
|
|
19
|
+
stdinIsTTY: process.stdin.isTTY === true,
|
|
20
|
+
stdoutIsTTY: process.stdout.isTTY === true,
|
|
21
|
+
});
|
|
22
|
+
process.exitCode = await launchOmb(process.cwd(), invocation.ompArgs, process.env, invocation.sessionId);
|
|
23
|
+
if (returnToHub)
|
|
24
|
+
process.exitCode = await runAgentsHub(process.cwd(), [], process.env);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
process.stderr.write(`omb: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
29
|
+
process.exitCode = 1;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=omb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omb.js","sourceRoot":"","sources":["../../../src/cli/omb.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAElE,IAAI,CAAC;IACH,MAAM,CAAC,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,yEAAyE;QACzE,kEAAkE;QAClE,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,qBAAqB,CAAC;YACxC,IAAI,EAAE,UAAU,CAAC,OAAO;YACxB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI;YACxC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI;SAC3C,CAAC,CAAC;QACH,OAAO,CAAC,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QACzG,IAAI,WAAW;YAAE,OAAO,CAAC,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The agents hub is rendered outside OMP's own React tree, so it cannot read
|
|
3
|
+
* the live theme singleton directly. Keep the small set of titanium tokens it
|
|
4
|
+
* needs here, matching OMP 18.2.x's native dark renderer.
|
|
5
|
+
*/
|
|
6
|
+
export declare const OMP_THEME: {
|
|
7
|
+
readonly surface: "#0f1216";
|
|
8
|
+
readonly text: "#e5e5e7";
|
|
9
|
+
readonly accent: "#00b4ff";
|
|
10
|
+
readonly accentSoft: "#3998bf";
|
|
11
|
+
readonly border: "#70808c";
|
|
12
|
+
readonly muted: "#9aa5b1";
|
|
13
|
+
readonly selectedBackground: "#1b2a34";
|
|
14
|
+
readonly success: "#9ece6a";
|
|
15
|
+
readonly warning: "#ffb347";
|
|
16
|
+
readonly error: "#f7768e";
|
|
17
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The agents hub is rendered outside OMP's own React tree, so it cannot read
|
|
3
|
+
* the live theme singleton directly. Keep the small set of titanium tokens it
|
|
4
|
+
* needs here, matching OMP 18.2.x's native dark renderer.
|
|
5
|
+
*/
|
|
6
|
+
export const OMP_THEME = {
|
|
7
|
+
surface: "#0f1216",
|
|
8
|
+
text: "#e5e5e7",
|
|
9
|
+
accent: "#00b4ff",
|
|
10
|
+
accentSoft: "#3998bf",
|
|
11
|
+
// Lifted from titanium's dim separator so transparent panels remain legible
|
|
12
|
+
// against textured terminal backgrounds as well as the native dark surface.
|
|
13
|
+
border: "#70808c",
|
|
14
|
+
// Titanium's muted token is intentionally subdued; this lifted value keeps
|
|
15
|
+
// the same cool-gray role while retaining AA contrast for compact labels.
|
|
16
|
+
muted: "#9aa5b1",
|
|
17
|
+
selectedBackground: "#1b2a34",
|
|
18
|
+
success: "#9ece6a",
|
|
19
|
+
warning: "#ffb347",
|
|
20
|
+
error: "#f7768e",
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=omp-theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"omp-theme.js","sourceRoot":"","sources":["../../../src/cli/omp-theme.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,SAAS;IACrB,4EAA4E;IAC5E,4EAA4E;IAC5E,MAAM,EAAE,SAAS;IACjB,2EAA2E;IAC3E,0EAA0E;IAC1E,KAAK,EAAE,SAAS;IAChB,kBAAkB,EAAE,SAAS;IAC7B,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;CACR,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
/**
|
|
3
|
+
* Runs npm through the executing Node binary so the global install step works
|
|
4
|
+
* on hosts where npm is a .cmd shim (Windows) as well as POSIX systems.
|
|
5
|
+
*/
|
|
6
|
+
export declare function runNpm(args: string[], options?: Parameters<typeof execFileSync>[2]): string | Buffer;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { existsSync, realpathSync } from "node:fs";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
// Windows ships npm as npm.cmd. Node refuses to spawn .cmd files without a
|
|
5
|
+
// shell (CVE-2024-27980, EINVAL since Node 18.20/20.12), and execFileSync
|
|
6
|
+
// cannot resolve .cmd shims at all (ENOENT). Running npm's JS entry point
|
|
7
|
+
// through the current Node binary avoids both failure modes.
|
|
8
|
+
function npmCli() {
|
|
9
|
+
const candidates = [];
|
|
10
|
+
// Every candidate is executed as `node <candidate>`, so only npm's JS entry
|
|
11
|
+
// point qualifies. npm-compatible runners (bun) export npm_execpath pointing
|
|
12
|
+
// at themselves, and POSIX installs npm as a launcher shim; running either
|
|
13
|
+
// through Node is a syntax error.
|
|
14
|
+
const add = (candidate) => {
|
|
15
|
+
if (candidate && /\.(?:c?js|mjs)$/i.test(candidate))
|
|
16
|
+
candidates.push(candidate);
|
|
17
|
+
};
|
|
18
|
+
const addLauncher = (launcher) => {
|
|
19
|
+
add(launcher);
|
|
20
|
+
add(join(dirname(launcher), "node_modules", "npm", "bin", "npm-cli.js"));
|
|
21
|
+
try {
|
|
22
|
+
add(realpathSync(launcher));
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// The launcher may be a Windows .cmd shim without a resolvable target.
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
add(process.env.npm_execpath);
|
|
29
|
+
if (process.env.npm_execpath)
|
|
30
|
+
addLauncher(process.env.npm_execpath);
|
|
31
|
+
try {
|
|
32
|
+
const command = process.platform === "win32" ? "where" : "which";
|
|
33
|
+
const launchers = execFileSync(command, ["npm"], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
|
|
34
|
+
for (const launcher of launchers.split(/\r?\n/).map(value => value.trim()).filter(Boolean))
|
|
35
|
+
addLauncher(launcher);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// Fall through to the standard Node installation layouts.
|
|
39
|
+
}
|
|
40
|
+
add(join(dirname(process.execPath), "node_modules", "npm", "bin", "npm-cli.js"));
|
|
41
|
+
add(join(dirname(process.execPath), "..", "lib", "node_modules", "npm", "bin", "npm-cli.js"));
|
|
42
|
+
const resolved = candidates.find(candidate => existsSync(candidate));
|
|
43
|
+
if (!resolved)
|
|
44
|
+
throw new Error("Unable to locate npm-cli.js for the current Node installation");
|
|
45
|
+
return resolved;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Runs npm through the executing Node binary so the global install step works
|
|
49
|
+
* on hosts where npm is a .cmd shim (Windows) as well as POSIX systems.
|
|
50
|
+
*/
|
|
51
|
+
export function runNpm(args, options = {}) {
|
|
52
|
+
return execFileSync(process.execPath, [npmCli(), ...args], options);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/cli/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,2EAA2E;AAC3E,0EAA0E;AAC1E,0EAA0E;AAC1E,6DAA6D;AAC7D,SAAS,MAAM;IACb,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,4EAA4E;IAC5E,6EAA6E;IAC7E,2EAA2E;IAC3E,kCAAkC;IAClC,MAAM,GAAG,GAAG,CAAC,SAA6B,EAAE,EAAE;QAC5C,IAAI,SAAS,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClF,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAE,EAAE;QACvC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC;YACH,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,uEAAuE;QACzE,CAAC;IACH,CAAC,CAAC;IAEF,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACpE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5G,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IACpH,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;IAC5D,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;IACjF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;IAC9F,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IACrE,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IAChG,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,IAAc,EAAE,OAAO,GAAuC,EAAE;IACrF,OAAO,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { repositoryIdentity, statePath } from "../storage/repository-identity.js";
|
|
2
|
+
import { Journal } from "../storage/journal.js";
|
|
3
|
+
import { startObjective, bindSession } from "../omp/lifecycle.js";
|
|
4
|
+
export function startRun(objective, cwd = process.cwd()) { const identity = repositoryIdentity(cwd); const binding = bindSession(new Journal(statePath(identity)), { cwd }); return startObjective(binding, objective); }
|
|
5
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElE,MAAM,UAAU,QAAQ,CAAC,SAA4B,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC"}
|