@polderlabs/bizar-omp 0.6.6 → 0.6.7

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 CHANGED
@@ -101,7 +101,7 @@ The installer:
101
101
  For a reproducible install, pin the version:
102
102
 
103
103
  ```sh
104
- npx --yes @polderlabs/bizar-omp@0.6.6 setup
104
+ npx --yes @polderlabs/bizar-omp@0.6.7 setup
105
105
  ```
106
106
 
107
107
  For a named OMP profile or a non-standard OMP binary:
@@ -386,7 +386,7 @@ The role names are selectors, not guarantees of speed, cost, provider, or model
386
386
 
387
387
  ### Qualification boundary
388
388
 
389
- The 0.6.6 release ships the overview-first dashboard, cross-session settings propagation, and the collab-host surface on the qualified OMP baseline, published on [npm](https://www.npmjs.com/package/@polderlabs/bizar-omp) and available as a [GitHub release](https://github.com/PolderLabsVOF/BizarHarness-OMP/releases/tag/v0.6.6).
389
+ The 0.6.7 release ships the `omb a` alias for the agents view, an interactive Ink progress panel for `omb update`, and a live Server-Sent Events chat stream with connection status in the dashboard, published on [npm](https://www.npmjs.com/package/@polderlabs/bizar-omp) and available as a [GitHub release](https://github.com/PolderLabsVOF/BizarHarness-OMP/releases/tag/v0.6.7).
390
390
 
391
391
  The release does not claim OS sandboxing, provider model quality, universal native task or eval interception, automatic cleanup of an unqualified native isolation backend, or Claude Code/AO compatibility. See the [support matrix](docs/releases/support-matrix.md) for the current boundary.
392
392
 
@@ -397,7 +397,7 @@ The release does not claim OS sandboxing, provider model quality, universal nati
397
397
  | OMP | 18.2.7, with 18.2.6, 18.2.5, and 18.2.4 regression-qualified |
398
398
  | Node.js | 22.x and 24.x |
399
399
  | Bun | 1.3.14 compatibility job |
400
- | Package | `@polderlabs/bizar-omp@0.6.6` |
400
+ | Package | `@polderlabs/bizar-omp@0.6.7` |
401
401
 
402
402
  Upstream OMP changes require a new compatibility baseline and contract run. The package does not widen a version range to hide an unqualified runtime.
403
403
 
@@ -6,7 +6,7 @@ interface HubRenderOptions {
6
6
  maxVisible?: number;
7
7
  notice?: string;
8
8
  }
9
- export declare const AGENTS_USAGE = "omb agents [--new]\n\n Keyboard-first session hub across every project: attach, start, rename, and\n stop Bizar-owned sessions, and edit settings (tray, stopped-session rows).\n \"omb hub\" is an alias.\n\n --new open the new-session picker immediately";
9
+ export declare const AGENTS_USAGE = "omb agents [--new]\n\n Keyboard-first session hub across every project: attach, start, rename, and\n stop Bizar-owned sessions, and edit settings (tray, stopped-session rows).\n \"omb hub\" and \"omb a\" are aliases.\n\n --new open the new-session picker immediately";
10
10
  export declare function renderAgentsHub(sessions: OmbSessionInfo[], selected: number, options?: HubRenderOptions): string;
11
11
  export declare function renderSettingsOverlay(settings: OmbSettings, selected: number): string;
12
12
  /** Run the keyboard-first cross-project session manager. */
@@ -1 +1 @@
1
- {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/cli/agents.ts"],"names":[],"mappings":";AAaA,OAAO,EAAsD,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC9G,OAAO,EAA0C,KAAK,cAAc,EAAwB,MAAM,wBAAwB,CAAC;AAM3H,UAAU,gBAAgB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,YAAY,wQAM0B,CAAC;AA6CpD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,cAAc,EAAE,EAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAqB,GAC7B,MAAM,CAoCR;AAiBD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAerF;AAqCD,4DAA4D;AAC5D,wBAAsB,YAAY,CAChC,GAAG,SAAgB,EACnB,KAAK,GAAE,MAAM,EAAO,EACpB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,MAAM,CAAC,CAgCjB"}
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/cli/agents.ts"],"names":[],"mappings":";AAaA,OAAO,EAAsD,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC9G,OAAO,EAA0C,KAAK,cAAc,EAAwB,MAAM,wBAAwB,CAAC;AAM3H,UAAU,gBAAgB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,YAAY,sRAM0B,CAAC;AA6CpD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,cAAc,EAAE,EAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAqB,GAC7B,MAAM,CAoCR;AAiBD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAerF;AAqCD,4DAA4D;AAC5D,wBAAsB,YAAY,CAChC,GAAG,SAAgB,EACnB,KAAK,GAAE,MAAM,EAAO,EACpB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,MAAM,CAAC,CAgCjB"}
@@ -13,7 +13,7 @@ export const AGENTS_USAGE = `omb agents [--new]
13
13
 
14
14
  Keyboard-first session hub across every project: attach, start, rename, and
15
15
  stop Bizar-owned sessions, and edit settings (tray, stopped-session rows).
16
- "omb hub" is an alias.
16
+ "omb hub" and "omb a" are aliases.
17
17
 
18
18
  --new open the new-session picker immediately`;
19
19
  const RESET = "\u001b[0m";
@@ -65,7 +65,7 @@ export function runHelpCommand(args) {
65
65
  */
66
66
  export const OMB_COMMANDS = [
67
67
  {
68
- names: ["agents", "hub"],
68
+ names: ["agents", "hub", "a"],
69
69
  summary: "Session hub: attach, start, rename, and stop sessions",
70
70
  usage: AGENTS_USAGE,
71
71
  run: (args, env) => runAgentsHub(process.cwd(), args, env),
@@ -1 +1 @@
1
- {"version":3,"file":"omb-commands.js","sourceRoot":"","sources":["../../src/cli/omb-commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"omb-commands.js","sourceRoot":"","sources":["../../src/cli/omb-commands.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,6 @@
1
+ /** Whether the current stdout can host the interactive Ink view. */
2
+ export declare const isStdoutTty: () => boolean;
3
+ export declare const PACKAGE_NAME = "@polderlabs/bizar-omp";
1
4
  export declare const UPDATE_USAGE = "omb update [--check] [--dry-run] [--json]\n\n Updates the globally installed omb command to the latest published Bizar\n package and refreshes the enabled OMP plugin when omp is available.\n\n --check report the installed and latest versions without changing anything\n --dry-run show the update plan without changing anything\n --json print the result as a machine-readable object";
2
5
  export interface UpdateReport {
3
6
  ok: boolean;
@@ -18,6 +21,8 @@ export interface UpdateServices {
18
21
  installGlobal(spec: string): void;
19
22
  refreshPlugin(spec: string, env: NodeJS.ProcessEnv): unknown;
20
23
  }
24
+ export declare const validVersion: (version: string) => string;
25
+ export declare const compareVersions: (left: string, right: string) => number;
21
26
  export declare const updateServices: UpdateServices;
22
27
  export declare function runUpdateCommand(args: string[], env?: NodeJS.ProcessEnv, services?: UpdateServices): Promise<number>;
23
28
  //# sourceMappingURL=omb-update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"omb-update.d.ts","sourceRoot":"","sources":["../../src/cli/omb-update.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,YAAY,kZAOmC,CAAC;AAE7D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,QAAQ,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACrD,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,IAAI,MAAM,CAAC;IACzB,aAAa,IAAI,MAAM,CAAC;IACxB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC;CAC9D;AAuBD,eAAO,MAAM,cAAc,EAAE,cAS5B,CAAC;AA6BF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,QAAQ,GAAE,cAA+B,GACxC,OAAO,CAAC,MAAM,CAAC,CAqEjB"}
1
+ {"version":3,"file":"omb-update.d.ts","sourceRoot":"","sources":["../../src/cli/omb-update.ts"],"names":[],"mappings":"AAOA,oEAAoE;AACpE,eAAO,MAAM,WAAW,QAAO,OAAwC,CAAC;AACxE,eAAO,MAAM,YAAY,0BAA0B,CAAC;AAEpD,eAAO,MAAM,YAAY,kZAOmC,CAAC;AAE7D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,QAAQ,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACrD,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,IAAI,MAAM,CAAC;IACzB,aAAa,IAAI,MAAM,CAAC;IACxB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC;CAC9D;AAQD,eAAO,MAAM,YAAY,YAAa,MAAM,KAAG,MAI9C,CAAC;AAEF,eAAO,MAAM,eAAe,SAAU,MAAM,SAAS,MAAM,KAAG,MAO7D,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,cAS5B,CAAC;AA6BF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,QAAQ,GAAE,cAA+B,GACxC,OAAO,CAAC,MAAM,CAAC,CA4EjB"}
@@ -3,7 +3,10 @@ import { join } from "node:path";
3
3
  import { manageInstallation, packageRoot } from "./install.js";
4
4
  import { runNpm } from "./process.js";
5
5
  import { findOnPath } from "../omp/tmux.js";
6
- const PACKAGE = "@polderlabs/bizar-omp";
6
+ import { runInkUpdate } from "./update-ink.js";
7
+ /** Whether the current stdout can host the interactive Ink view. */
8
+ export const isStdoutTty = () => process.stdout.isTTY === true;
9
+ export const PACKAGE_NAME = "@polderlabs/bizar-omp";
7
10
  export const UPDATE_USAGE = `omb update [--check] [--dry-run] [--json]
8
11
 
9
12
  Updates the globally installed omb command to the latest published Bizar
@@ -18,13 +21,13 @@ const packageVersion = () => {
18
21
  throw new Error("installed Bizar package has no version");
19
22
  return manifest.version;
20
23
  };
21
- const validVersion = (version) => {
24
+ export const validVersion = (version) => {
22
25
  const normalized = version.trim().replace(/^"|"$/g, "");
23
26
  if (!/^\d+\.\d+\.\d+$/.test(normalized))
24
27
  throw new Error(`npm returned an invalid Bizar version: ${normalized || "<empty>"}`);
25
28
  return normalized;
26
29
  };
27
- const compareVersions = (left, right) => {
30
+ export const compareVersions = (left, right) => {
28
31
  const a = left.split(".").map(Number);
29
32
  const b = right.split(".").map(Number);
30
33
  for (let index = 0; index < 3; index += 1) {
@@ -35,7 +38,7 @@ const compareVersions = (left, right) => {
35
38
  };
36
39
  export const updateServices = {
37
40
  currentVersion: packageVersion,
38
- latestVersion: () => validVersion(String(runNpm(["view", PACKAGE, "version"], { encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] }))),
41
+ latestVersion: () => validVersion(String(runNpm(["view", PACKAGE_NAME, "version"], { encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] }))),
39
42
  installGlobal: spec => { runNpm(["install", "--global", spec], { stdio: "ignore" }); },
40
43
  refreshPlugin: (spec, env) => {
41
44
  const omp = findOnPath(env.BIZAR_OMP_BIN || "omp", env);
@@ -83,6 +86,12 @@ export async function runUpdateCommand(args, env = process.env, services = updat
83
86
  process.stderr.write(`omb update: ${parsed.error}\n\n${UPDATE_USAGE}\n`);
84
87
  return 2;
85
88
  }
89
+ // Interactive Ink UI when stdout is a TTY and the caller did not request a
90
+ // machine-readable or dry-run report. Text/JSON paths stay identical to
91
+ // before for scripts, CI, and automation.
92
+ if (!parsed.json && !parsed.check && !parsed.dryRun && isStdoutTty()) {
93
+ return runInkUpdate(services, env);
94
+ }
86
95
  let currentVersion;
87
96
  let latestVersion;
88
97
  try {
@@ -109,7 +118,7 @@ export async function runUpdateCommand(args, env = process.env, services = updat
109
118
  emit(report, parsed.json);
110
119
  return 0;
111
120
  }
112
- const spec = `${PACKAGE}@${latestVersion}`;
121
+ const spec = `${PACKAGE_NAME}@${latestVersion}`;
113
122
  try {
114
123
  services.installGlobal(spec);
115
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"omb-update.js","sourceRoot":"","sources":["../../src/cli/omb-update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"omb-update.js","sourceRoot":"","sources":["../../src/cli/omb-update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { type UpdateReport, type UpdateServices } from "./omb-update.js";
2
+ export type UpdateStageState = "pending" | "running" | "ok" | "failed";
3
+ export declare const UPDATE_STAGE_KEYS: readonly ["checking", "installing", "refreshing"];
4
+ export type UpdateStageKey = typeof UPDATE_STAGE_KEYS[number];
5
+ export declare const UPDATE_STAGE_LABELS: Record<UpdateStageKey, string>;
6
+ export declare const UPDATE_STATE_MARKS: Record<UpdateStageState, string>;
7
+ export declare function updateStageColor(state: UpdateStageState): string;
8
+ export interface UpdateProgressState {
9
+ currentVersion: string;
10
+ latestVersion: string;
11
+ updateAvailable: boolean;
12
+ stages: Record<UpdateStageKey, UpdateStageState>;
13
+ }
14
+ export interface UpdateInkResult {
15
+ report: UpdateReport;
16
+ exitCode: number;
17
+ progress: UpdateProgressState;
18
+ }
19
+ /**
20
+ * The update pipeline behind the Ink view. Runs the same services as the text
21
+ * path and produces the identical UpdateReport, but reports an immutable
22
+ * progress snapshot after every transition so the Ink renderer can paint each
23
+ * stage. Free of rendering side effects: a test drives it directly.
24
+ */
25
+ export declare function performUpdate(services: UpdateServices, env: NodeJS.ProcessEnv, onProgress?: (progress: UpdateProgressState) => void): Promise<UpdateInkResult>;
26
+ /** The one-line outcome under the stage list, mirroring emit()'s text. */
27
+ export declare function summarize(report: UpdateReport): {
28
+ text: string;
29
+ color: string;
30
+ };
31
+ interface UpdateUiProps {
32
+ progress: UpdateProgressState;
33
+ report?: UpdateReport;
34
+ }
35
+ /**
36
+ * The Ink progress panel: header, three labelled stages, outcome summary.
37
+ * Repainted by the caller on every stage transition. Ctrl+C exits through Ink's
38
+ * own handler and is re-bound here so the panel is never a keyboard trap.
39
+ */
40
+ export declare function UpdateUi({ progress, report }: UpdateUiProps): import("react/jsx-runtime").JSX.Element;
41
+ /**
42
+ * Render the interactive update view and return its exit code. Ink repaints on
43
+ * every stage transition; the final frame carries the outcome summary.
44
+ */
45
+ export declare function runInkUpdate(services: UpdateServices, env: NodeJS.ProcessEnv, streams?: {
46
+ stdout?: NodeJS.WriteStream;
47
+ stderr?: NodeJS.WriteStream;
48
+ }): Promise<number>;
49
+ export {};
50
+ //# sourceMappingURL=update-ink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-ink.d.ts","sourceRoot":"","sources":["../../src/cli/update-ink.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA+C,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,QAAQ,CAAC;AAEvE,eAAO,MAAM,iBAAiB,YAAI,UAAU,EAAE,YAAY,EAAE,YAAY,CAAU,CAAC;AACnF,MAAM,MAAM,cAAc,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAE9D,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAI9D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAK/D,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAWhE;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,mBAAmB,CAAC;CAC/B;AASD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,GACnD,OAAO,CAAC,eAAe,CAAC,CA4F1B;AAED,0EAA0E;AAC1E,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAK/E;AAED,UAAU,aAAa;IACrB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,aAAa,2CAqC3D;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAA;CAAO,GACzE,OAAO,CAAC,MAAM,CAAC,CAuBjB"}
@@ -0,0 +1,185 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, render, useApp, useInput } from "ink";
3
+ import { OMP_THEME } from "./omp-theme.js";
4
+ import { PACKAGE_NAME, compareVersions, validVersion } from "./omb-update.js";
5
+ export const UPDATE_STAGE_KEYS = ["checking", "installing", "refreshing"];
6
+ export const UPDATE_STAGE_LABELS = {
7
+ checking: "Checking npm registry",
8
+ installing: "Installing global package",
9
+ refreshing: "Refreshing OMP plugin",
10
+ };
11
+ export const UPDATE_STATE_MARKS = {
12
+ pending: "○",
13
+ running: "◐",
14
+ ok: "●",
15
+ failed: "✗",
16
+ };
17
+ export function updateStageColor(state) {
18
+ switch (state) {
19
+ case "pending":
20
+ return OMP_THEME.muted;
21
+ case "running":
22
+ return OMP_THEME.accent;
23
+ case "ok":
24
+ return OMP_THEME.success;
25
+ case "failed":
26
+ return OMP_THEME.error;
27
+ }
28
+ }
29
+ const initialProgress = () => ({
30
+ currentVersion: "checking…",
31
+ latestVersion: "checking…",
32
+ updateAvailable: false,
33
+ stages: { checking: "pending", installing: "pending", refreshing: "pending" },
34
+ });
35
+ /**
36
+ * The update pipeline behind the Ink view. Runs the same services as the text
37
+ * path and produces the identical UpdateReport, but reports an immutable
38
+ * progress snapshot after every transition so the Ink renderer can paint each
39
+ * stage. Free of rendering side effects: a test drives it directly.
40
+ */
41
+ export async function performUpdate(services, env, onProgress) {
42
+ const progress = initialProgress();
43
+ const snapshot = () => ({ ...progress, stages: { ...progress.stages } });
44
+ const notify = () => onProgress?.(snapshot());
45
+ const setStage = (stage, state) => {
46
+ progress.stages[stage] = state;
47
+ notify();
48
+ };
49
+ setStage("checking", "running");
50
+ let currentVersion;
51
+ let latestVersion;
52
+ try {
53
+ currentVersion = validVersion(services.currentVersion());
54
+ latestVersion = validVersion(services.latestVersion());
55
+ }
56
+ catch (error) {
57
+ setStage("checking", "failed");
58
+ return {
59
+ exitCode: 1,
60
+ progress: snapshot(),
61
+ report: {
62
+ ok: false, command: "update", currentVersion: "unknown", latestVersion: "unknown",
63
+ updateAvailable: false, dryRun: false, checked: false, global: "failed", plugin: "skipped",
64
+ pluginReason: "version lookup failed", error: error instanceof Error ? error.message : String(error),
65
+ },
66
+ };
67
+ }
68
+ progress.currentVersion = currentVersion;
69
+ progress.latestVersion = latestVersion;
70
+ progress.updateAvailable = compareVersions(latestVersion, currentVersion) > 0;
71
+ setStage("checking", "ok");
72
+ if (!progress.updateAvailable) {
73
+ setStage("installing", "ok");
74
+ setStage("refreshing", "ok");
75
+ return {
76
+ exitCode: 0,
77
+ progress: snapshot(),
78
+ report: {
79
+ ok: true, command: "update", currentVersion, latestVersion, updateAvailable: false,
80
+ dryRun: false, checked: false, global: "current", plugin: "skipped",
81
+ pluginReason: "no update required",
82
+ },
83
+ };
84
+ }
85
+ const spec = `${PACKAGE_NAME}@${latestVersion}`;
86
+ setStage("installing", "running");
87
+ try {
88
+ services.installGlobal(spec);
89
+ }
90
+ catch (error) {
91
+ setStage("installing", "failed");
92
+ return {
93
+ exitCode: 1,
94
+ progress: snapshot(),
95
+ report: {
96
+ ok: false, command: "update", currentVersion, latestVersion, updateAvailable: true,
97
+ dryRun: false, checked: false, global: "failed", plugin: "skipped",
98
+ pluginReason: "global package was not updated",
99
+ error: error instanceof Error ? error.message : String(error),
100
+ },
101
+ };
102
+ }
103
+ setStage("installing", "ok");
104
+ setStage("refreshing", "running");
105
+ try {
106
+ const pluginSkipped = services.refreshPlugin(spec, env) === undefined;
107
+ setStage("refreshing", "ok");
108
+ return {
109
+ exitCode: 0,
110
+ progress: snapshot(),
111
+ report: {
112
+ ok: true, command: "update", currentVersion, latestVersion, updateAvailable: true,
113
+ dryRun: false, checked: false, global: "updated", plugin: pluginSkipped ? "skipped" : "updated",
114
+ ...(pluginSkipped ? { pluginReason: "omp executable not found" } : {}),
115
+ },
116
+ };
117
+ }
118
+ catch (error) {
119
+ setStage("refreshing", "failed");
120
+ return {
121
+ exitCode: 1,
122
+ progress: snapshot(),
123
+ report: {
124
+ ok: false, command: "update", currentVersion, latestVersion, updateAvailable: true,
125
+ dryRun: false, checked: false, global: "updated", plugin: "failed",
126
+ error: `global package updated, but OMP plugin refresh failed: ${error instanceof Error ? error.message : String(error)}`,
127
+ },
128
+ };
129
+ }
130
+ }
131
+ /** The one-line outcome under the stage list, mirroring emit()'s text. */
132
+ export function summarize(report) {
133
+ if (!report.ok)
134
+ return { text: report.error ?? "update failed", color: OMP_THEME.error };
135
+ if (report.global === "current")
136
+ return { text: `Already current at ${report.currentVersion}`, color: OMP_THEME.success };
137
+ const plugin = report.plugin === "updated" ? " · OMP plugin refreshed" : report.plugin === "skipped" ? ` · OMP plugin skipped${report.pluginReason ? ` (${report.pluginReason})` : ""}` : "";
138
+ return { text: `Updated ${report.currentVersion} → ${report.latestVersion}${plugin}`, color: OMP_THEME.success };
139
+ }
140
+ /**
141
+ * The Ink progress panel: header, three labelled stages, outcome summary.
142
+ * Repainted by the caller on every stage transition. Ctrl+C exits through Ink's
143
+ * own handler and is re-bound here so the panel is never a keyboard trap.
144
+ */
145
+ export function UpdateUi({ progress, report }) {
146
+ const { exit } = useApp();
147
+ useInput((input, key) => {
148
+ if (key.ctrl && input === "c")
149
+ exit();
150
+ });
151
+ const summary = report ? summarize(report) : undefined;
152
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(Text, { bold: true, color: OMP_THEME.accent, children: "Bizar OMP updater" }), _jsxs(Box, { gap: 1, marginTop: 1, children: [_jsx(Text, { color: OMP_THEME.text, children: progress.currentVersion }), _jsx(Text, { color: OMP_THEME.muted, children: "\u2192" }), _jsx(Text, { color: OMP_THEME.text, children: progress.latestVersion }), progress.updateAvailable && (_jsx(Text, { backgroundColor: OMP_THEME.accentSoft, color: OMP_THEME.surface, children: " update available " }))] }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: UPDATE_STAGE_KEYS.map(stage => {
153
+ const state = progress.stages[stage];
154
+ const color = updateStageColor(state);
155
+ return (_jsxs(Box, { gap: 1, children: [_jsx(Text, { color: color, children: UPDATE_STATE_MARKS[state] }), _jsx(Text, { color: color, children: UPDATE_STAGE_LABELS[stage] })] }, stage));
156
+ }) }), summary && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: summary.color, children: summary.text }) }))] }));
157
+ }
158
+ /**
159
+ * Render the interactive update view and return its exit code. Ink repaints on
160
+ * every stage transition; the final frame carries the outcome summary.
161
+ */
162
+ export async function runInkUpdate(services, env, streams = {}) {
163
+ let progress = initialProgress();
164
+ let report;
165
+ const renderOptions = {};
166
+ if (streams.stdout)
167
+ renderOptions.stdout = streams.stdout;
168
+ if (streams.stderr)
169
+ renderOptions.stderr = streams.stderr;
170
+ const app = render(_jsx(UpdateUi, { progress: progress, report: report }), renderOptions);
171
+ try {
172
+ const result = await performUpdate(services, env, next => {
173
+ progress = next;
174
+ app.rerender(_jsx(UpdateUi, { progress: progress, report: report }));
175
+ });
176
+ report = result.report;
177
+ progress = result.progress;
178
+ }
179
+ finally {
180
+ app.rerender(_jsx(UpdateUi, { progress: progress, report: report }));
181
+ app.unmount();
182
+ }
183
+ return report?.ok ? 0 : 1;
184
+ }
185
+ //# sourceMappingURL=update-ink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-ink.js","sourceRoot":"","sources":["../../src/cli/update-ink.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"daemon-service.d.ts","sourceRoot":"","sources":["../../src/omp/daemon-service.ts"],"names":[],"mappings":"AAiCA,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAGD,eAAO,MAAM,wBAAwB,QAAY,CAAC;AAClD,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAqNhD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,oBAAyB,GAAG,aAAa,CA+hBpF"}
1
+ {"version":3,"file":"daemon-service.d.ts","sourceRoot":"","sources":["../../src/omp/daemon-service.ts"],"names":[],"mappings":"AAiCA,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAGD,eAAO,MAAM,wBAAwB,QAAY,CAAC;AAClD,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAuShD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,oBAAyB,GAAG,aAAa,CA4jBpF"}
@@ -4,7 +4,7 @@ import { deferred } from "./daemon.js";
4
4
  import { randomBytes } from "node:crypto";
5
5
  import { mkdirSync, statSync } from "node:fs";
6
6
  import { resolve } from "node:path";
7
- import { listOmbSessions, ombSessionDisplayName, readOmbSessionMessages } from "./omb-sessions.js";
7
+ import { listOmbSessions, ombSessionDisplayName, ombSessionJournalPath, readOmbSessionMessages } from "./omb-sessions.js";
8
8
  import { ombSessionName } from "./tmux.js";
9
9
  import { DAEMON_PROTOCOL_VERSION, DaemonError, daemonStateDir, writeSnapshot } from "./daemon.js";
10
10
  import { captureOmbSessionConsole, createOmbSession, deleteOmbSession, forgetOmbSession, openOmbSessionInTerminal, renameOmbSession, sendOmbSessionInput, setOmbSessionMouse, } from "./tmux.js";
@@ -64,6 +64,88 @@ async function runDashboardOmp(env, args) {
64
64
  throw new Error("OMP command failed");
65
65
  return output;
66
66
  }
67
+ const STREAM_POLL_MS = 1_000;
68
+ const STREAM_KEEPALIVE_MS = 15_000;
69
+ // Per-stream cleanup callbacks. service.close() iterates this to clear
70
+ // poll/keepalive timers immediately, so a streaming client cannot keep the
71
+ // daemon alive past shutdown.
72
+ const STREAM_CLEANUPS = new Map();
73
+ async function streamSessionMessages(res, session, env, log) {
74
+ let active = true;
75
+ let lastStamp = "";
76
+ let lastSnapshot = "";
77
+ let journalPath;
78
+ try {
79
+ journalPath = await ombSessionJournalPath(session, env) ?? undefined;
80
+ }
81
+ catch {
82
+ journalPath = undefined;
83
+ }
84
+ res.writeHead(200, {
85
+ "content-type": "text/event-stream",
86
+ "cache-control": "no-cache, no-transform",
87
+ "x-bizar-daemon-stream": "messages",
88
+ "x-accel-buffering": "no",
89
+ });
90
+ const pollTimer = setInterval(async () => {
91
+ if (!active)
92
+ return;
93
+ let next;
94
+ try {
95
+ if (!journalPath) {
96
+ journalPath = await ombSessionJournalPath(session, env) ?? undefined;
97
+ }
98
+ if (journalPath) {
99
+ try {
100
+ next = JSON.stringify({ mtimeMs: statSync(journalPath).mtimeMs, size: statSync(journalPath).size });
101
+ }
102
+ catch {
103
+ journalPath = undefined;
104
+ }
105
+ }
106
+ if (next && next !== lastStamp) {
107
+ lastStamp = next;
108
+ const messages = journalPath ? await readOmbSessionMessages(session, env) : [];
109
+ const snapshot = JSON.stringify({ kind: "snapshot", capturedAt: Date.now(), messages });
110
+ if (snapshot !== lastSnapshot) {
111
+ lastSnapshot = snapshot;
112
+ send("snapshot", { capturedAt: Date.now(), messages });
113
+ }
114
+ }
115
+ else if (!next) {
116
+ send("idle", { capturedAt: Date.now() });
117
+ }
118
+ }
119
+ catch (error) {
120
+ log(`stream error for ${session.name}: ${error instanceof Error ? error.message : String(error)}`);
121
+ send("error", { capturedAt: Date.now(), error: error instanceof Error ? error.message : String(error) });
122
+ }
123
+ }, STREAM_POLL_MS);
124
+ const keepaliveTimer = setInterval(() => {
125
+ if (!active)
126
+ return;
127
+ res.write(`: keepalive ${Date.now()}\n\n`);
128
+ }, STREAM_KEEPALIVE_MS);
129
+ pollTimer.unref?.();
130
+ keepaliveTimer.unref?.();
131
+ const send = (event, payload) => {
132
+ if (!active)
133
+ return;
134
+ res.write(`event: ${event}\ndata: ${JSON.stringify(payload)}\n\n`);
135
+ };
136
+ const cleanup = () => {
137
+ if (!active)
138
+ return;
139
+ active = false;
140
+ STREAM_CLEANUPS.delete(res);
141
+ clearInterval(pollTimer);
142
+ clearInterval(keepaliveTimer);
143
+ res.end();
144
+ };
145
+ STREAM_CLEANUPS.set(res, cleanup);
146
+ res.on("close", cleanup);
147
+ res.on("error", cleanup);
148
+ }
67
149
  function configEntries(value) {
68
150
  const raw = Array.isArray(value) ? value : value && typeof value === "object"
69
151
  ? (Array.isArray(value.settings)
@@ -368,6 +450,11 @@ export function startDaemonService(options = {}) {
368
450
  res.end('{"ok":true}\n');
369
451
  return;
370
452
  }
453
+ if (path === "/capabilities" && (req.method === "GET" || req.method === "HEAD")) {
454
+ res.writeHead(200, { "content-type": "application/json", "x-bizar-daemon-protocol": String(DAEMON_PROTOCOL_VERSION) });
455
+ res.end(`${JSON.stringify({ protocolVersion: DAEMON_PROTOCOL_VERSION, capabilities: ["ping", "overview", "messages", "messages-stream", "omp-collab", "settings-watch", "snapshots", "providers", "auth-status"] })}\n`);
456
+ return;
457
+ }
371
458
  if (!authorized(req)) {
372
459
  res.writeHead(401, { "content-type": "application/json" });
373
460
  res.end('{"error":"unauthorized"}\n');
@@ -675,6 +762,7 @@ export function startDaemonService(options = {}) {
675
762
  }
676
763
  const consoleMatch = path.match(/^\/sessions\/([^/]+)\/console$/);
677
764
  const messagesMatch = path.match(/^\/sessions\/([^/]+)\/messages$/);
765
+ const streamMatch = path.match(/^\/sessions\/([^/]+)\/messages\/stream$/);
678
766
  if (messagesMatch && req.method === "GET") {
679
767
  const name = decodeURIComponent(messagesMatch[1]);
680
768
  const current = sessions.find(candidate => candidate.name === name);
@@ -690,6 +778,16 @@ export function startDaemonService(options = {}) {
690
778
  }
691
779
  return;
692
780
  }
781
+ if (streamMatch && req.method === "GET") {
782
+ const name = decodeURIComponent(streamMatch[1]);
783
+ const current = sessions.find(candidate => candidate.name === name);
784
+ if (!current) {
785
+ json(res, 404, { error: "unknown session" });
786
+ return;
787
+ }
788
+ streamSessionMessages(res, current, env, log);
789
+ return;
790
+ }
693
791
  if (consoleMatch && req.method === "GET") {
694
792
  const name = decodeURIComponent(consoleMatch[1]);
695
793
  const current = sessions.find(candidate => candidate.name === name);
@@ -802,7 +900,23 @@ export function startDaemonService(options = {}) {
802
900
  close: async () => {
803
901
  if (scanTimer)
804
902
  clearInterval(scanTimer);
805
- await new Promise(resolve => server.close(() => resolve()));
903
+ // Run every SSE cleanup so poll/keepalive timers drop the response
904
+ // reference immediately — otherwise the timers themselves keep the
905
+ // socket (and therefore server.close()) alive past shutdown.
906
+ for (const cleanup of [...STREAM_CLEANUPS.values()]) {
907
+ try {
908
+ cleanup();
909
+ }
910
+ catch { /* already gone */ }
911
+ }
912
+ STREAM_CLEANUPS.clear();
913
+ await new Promise(resolve => {
914
+ server.close(() => resolve());
915
+ // server.close() alone would wait on HTTP/1.1 keep-alive and undici's
916
+ // pooled fetch connections. closeAllConnections() tears them down at
917
+ // once so a streaming client cannot hold shutdown open.
918
+ server.closeAllConnections?.();
919
+ });
806
920
  },
807
921
  };
808
922
  server.listen(options.port ?? 0, "127.0.0.1", () => {