@polderlabs/bizar-omp 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +38 -12
  2. package/dist/cli/agents-ink.d.ts +22 -0
  3. package/dist/cli/agents-ink.d.ts.map +1 -0
  4. package/dist/cli/agents-ink.js +177 -0
  5. package/dist/cli/agents-ink.js.map +1 -0
  6. package/dist/cli/agents.d.ts +14 -0
  7. package/dist/cli/agents.d.ts.map +1 -0
  8. package/dist/cli/agents.js +198 -0
  9. package/dist/cli/agents.js.map +1 -0
  10. package/dist/cli/doctor.d.ts +4 -4
  11. package/dist/cli/install.d.ts +6 -2
  12. package/dist/cli/install.d.ts.map +1 -1
  13. package/dist/cli/install.js +21 -6
  14. package/dist/cli/install.js.map +1 -1
  15. package/dist/cli/main.js +15 -4
  16. package/dist/cli/main.js.map +1 -1
  17. package/dist/cli/omb-invocation.d.ts +7 -0
  18. package/dist/cli/omb-invocation.d.ts.map +1 -0
  19. package/dist/cli/omb-invocation.js +27 -0
  20. package/dist/cli/omb-invocation.js.map +1 -0
  21. package/dist/cli/omb.js +19 -2
  22. package/dist/cli/omb.js.map +1 -1
  23. package/dist/extension.d.ts +3 -0
  24. package/dist/extension.d.ts.map +1 -1
  25. package/dist/extension.js +28 -4
  26. package/dist/extension.js.map +1 -1
  27. package/dist/omp/autonomous-settings.d.ts.map +1 -1
  28. package/dist/omp/autonomous-settings.js +6 -0
  29. package/dist/omp/autonomous-settings.js.map +1 -1
  30. package/dist/omp/compatibility.d.ts +5 -5
  31. package/dist/omp/compatibility.d.ts.map +1 -1
  32. package/dist/omp/compatibility.js +2 -2
  33. package/dist/omp/compatibility.js.map +1 -1
  34. package/dist/omp/model-role-assignment.d.ts +5 -0
  35. package/dist/omp/model-role-assignment.d.ts.map +1 -1
  36. package/dist/omp/model-role-assignment.js +18 -10
  37. package/dist/omp/model-role-assignment.js.map +1 -1
  38. package/dist/omp/omb-sessions.d.ts +30 -0
  39. package/dist/omp/omb-sessions.d.ts.map +1 -0
  40. package/dist/omp/omb-sessions.js +225 -0
  41. package/dist/omp/omb-sessions.js.map +1 -0
  42. package/dist/omp/omb-settings.d.ts +10 -0
  43. package/dist/omp/omb-settings.d.ts.map +1 -0
  44. package/dist/omp/omb-settings.js +34 -0
  45. package/dist/omp/omb-settings.js.map +1 -0
  46. package/dist/omp/tmux.d.ts +14 -3
  47. package/dist/omp/tmux.d.ts.map +1 -1
  48. package/dist/omp/tmux.js +133 -9
  49. package/dist/omp/tmux.js.map +1 -1
  50. package/docs/compatibility/baseline.json +28 -4
  51. package/docs/compatibility/supported-surfaces.json +30 -4
  52. package/docs/releases/0.4.1.md +13 -0
  53. package/docs/releases/0.4.2.md +9 -0
  54. package/docs/releases/native-stable.md +1 -1
  55. package/docs/releases/support-matrix.md +1 -1
  56. package/package.json +10 -2
  57. package/rules/bizar-native-omp.md +1 -0
  58. package/skills/bizar-omp/SKILL.md +8 -3
  59. package/skills/omp-native-development/SKILL.md +1 -1
  60. package/skills/omp-native-development/references/accuracy-and-versioning.md +2 -2
  61. package/skills/omp-native-development/references/source-manifest.json +3 -3
package/dist/omp/tmux.js CHANGED
@@ -1,6 +1,8 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { spawn } from "node:child_process";
3
3
  import { basename } from "node:path";
4
+ import { findLastOmbSession, ombSessionDir } from "./omb-sessions.js";
5
+ import { loadOmbSettings } from "./omb-settings.js";
4
6
  const NON_INTERACTIVE_FLAGS = new Set(["-p", "--print", "--export"]);
5
7
  const NON_INTERACTIVE_MODES = new Set(["json", "rpc", "rpc-ui", "acp"]);
6
8
  function modeOf(args) {
@@ -24,23 +26,144 @@ export function shouldLaunchOmbInTmux(options = {}) {
24
26
  return false;
25
27
  return true;
26
28
  }
27
- /** Stable per-project session name so subsequent `omb` calls reconnect safely. */
28
- export function ombSessionName(cwd) {
29
+ /**
30
+ * Stable per-project session name so subsequent `omb` calls reconnect safely.
31
+ * A session id creates an additional durable session in the same project.
32
+ */
33
+ export function ombSessionName(cwd, sessionId) {
29
34
  const label = basename(cwd).replace(/[^A-Za-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 24) || "project";
30
35
  const digest = createHash("sha256").update(cwd).digest("hex").slice(0, 10);
31
- return `bizar-${label}-${digest}`.slice(0, 63);
36
+ const normalizedSessionId = sessionId?.trim().replace(/[^A-Za-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 20) || "";
37
+ const suffix = normalizedSessionId ? `-${normalizedSessionId}` : "";
38
+ return `bizar-${label}-${digest}${suffix}`.slice(0, 63);
32
39
  }
33
40
  function exitCode(code, signal) {
34
41
  if (code !== null)
35
42
  return code;
36
43
  return signal ? 1 : 1;
37
44
  }
45
+ function runTmux(command, args, cwd, env) {
46
+ const child = spawn(command, args, { cwd, env, stdio: "ignore" });
47
+ return new Promise((resolve, reject) => {
48
+ child.once("error", reject);
49
+ child.once("close", (code, signal) => resolve(exitCode(code, signal)));
50
+ });
51
+ }
52
+ function readTmux(command, args, cwd, env) {
53
+ const child = spawn(command, args, { cwd, env, stdio: ["ignore", "pipe", "ignore"] });
54
+ let output = "";
55
+ child.stdout?.setEncoding("utf8");
56
+ child.stdout?.on("data", chunk => { output += chunk; });
57
+ return new Promise((resolve, reject) => {
58
+ child.once("error", reject);
59
+ child.once("close", (code, signal) => resolve({ code: exitCode(code, signal), output }));
60
+ });
61
+ }
62
+ async function launchInTmux(tmux, omp, session, cwd, args, env, mouseScrolling, sessionDir) {
63
+ const childEnv = { ...env, BIZAR_OMP_NO_TMUX: "1" };
64
+ const hasSession = await runTmux(tmux, ["has-session", "-t", session], cwd, childEnv);
65
+ if (hasSession !== 0) {
66
+ const created = await runTmux(tmux, ["new-session", "-d", "-s", session, "-c", cwd, omp, "--session-dir", sessionDir, ...args], cwd, childEnv);
67
+ if (created !== 0) {
68
+ // A concurrent `omb` may have created the stable session between the
69
+ // probe and create calls. Continue only when that race is proven safe.
70
+ const racedIntoExisting = await runTmux(tmux, ["has-session", "-t", session], cwd, childEnv);
71
+ if (racedIntoExisting !== 0)
72
+ return created;
73
+ }
74
+ }
75
+ // Keep the respawn opportunity below for stale sessions, but do not leave
76
+ // remain-on-exit enabled: when OMP really exits, tmux should remove the
77
+ // pane/session instead of showing a permanent "Pane is dead" screen.
78
+ // Detaching the client leaves OMP alive, so durable work is unaffected.
79
+ const pane = await readTmux(tmux, ["list-panes", "-t", `${session}:0.0`, "-F", "#{pane_dead}"], cwd, childEnv);
80
+ if (pane.code !== 0)
81
+ return pane.code;
82
+ if (pane.output.trim() === "1") {
83
+ const respawned = await runTmux(tmux, ["respawn-pane", "-k", "-t", `${session}:0.0`, omp, "--session-dir", sessionDir, "--continue", ...args], cwd, childEnv);
84
+ if (respawned !== 0)
85
+ return respawned;
86
+ }
87
+ // Repair sessions created by older Bizar versions that enabled this option.
88
+ const remainOnExitOff = await runTmux(tmux, ["set-option", "-t", session, "remain-on-exit", "off"], cwd, childEnv);
89
+ if (remainOnExitOff !== 0)
90
+ return remainOnExitOff;
91
+ // tmux must own wheel events so the terminal scrolls the pane instead of
92
+ // translating them into up/down input for OMP's prompt-history editor.
93
+ const mouseEnabled = await runTmux(tmux, ["set-option", "-t", session, "mouse", mouseScrolling ? "on" : "off"], cwd, childEnv);
94
+ if (mouseEnabled !== 0)
95
+ return mouseEnabled;
96
+ // Give this session a private root table so Ctrl-D/C detach the client
97
+ // without sending exit or interrupt input into OMP. The tmux host remains
98
+ // alive for background work, and the normal Ctrl-B prefix still enters
99
+ // tmux's standard prefix table.
100
+ const keyTable = `${session}-bizar-root`;
101
+ const bindDetach = await runTmux(tmux, ["bind-key", "-T", keyTable, "C-d", "detach-client"], cwd, childEnv);
102
+ if (bindDetach !== 0)
103
+ return bindDetach;
104
+ const bindInterruptDetach = await runTmux(tmux, ["bind-key", "-T", keyTable, "C-c", "detach-client"], cwd, childEnv);
105
+ if (bindInterruptDetach !== 0)
106
+ return bindInterruptDetach;
107
+ const bindPrefix = await runTmux(tmux, ["bind-key", "-T", keyTable, "C-b", "switch-client", "-T", "prefix"], cwd, childEnv);
108
+ if (bindPrefix !== 0)
109
+ return bindPrefix;
110
+ const keyTableSet = await runTmux(tmux, ["set-option", "-t", session, "key-table", keyTable], cwd, childEnv);
111
+ if (keyTableSet !== 0)
112
+ return keyTableSet;
113
+ const client = spawn(tmux, ["attach-session", "-t", session], { cwd, env: childEnv, stdio: "inherit" });
114
+ return new Promise((resolve, reject) => {
115
+ client.once("error", reject);
116
+ client.once("close", (code, signal) => resolve(exitCode(code, signal)));
117
+ });
118
+ }
119
+ function ownedSession(session) {
120
+ return session.startsWith("bizar-") && !session.includes("\0");
121
+ }
122
+ /** Apply the launcher mouse preference to one exact Bizar-owned session. */
123
+ export function setOmbSessionMouse(session, enabled, cwd = process.cwd(), env = process.env) {
124
+ if (!ownedSession(session))
125
+ return Promise.resolve(2);
126
+ return runTmux(env.BIZAR_TMUX_BIN || "tmux", ["set-option", "-t", session, "mouse", enabled ? "on" : "off"], cwd, {
127
+ ...env,
128
+ BIZAR_OMP_NO_TMUX: "1",
129
+ });
130
+ }
131
+ /** Rename one exact Bizar-owned tmux session. */
132
+ export function renameOmbSession(session, nextName, cwd = process.cwd(), env = process.env) {
133
+ if (!ownedSession(session) || !ownedSession(nextName))
134
+ return Promise.resolve(2);
135
+ return runTmux(env.BIZAR_TMUX_BIN || "tmux", ["rename-session", "-t", session, nextName], cwd, {
136
+ ...env,
137
+ BIZAR_OMP_NO_TMUX: "1",
138
+ });
139
+ }
140
+ /** Kill one exact Bizar-owned tmux session after the caller has confirmed it. */
141
+ export function deleteOmbSession(session, cwd = process.cwd(), env = process.env) {
142
+ if (!ownedSession(session))
143
+ return Promise.resolve(2);
144
+ return runTmux(env.BIZAR_TMUX_BIN || "tmux", ["kill-session", "-t", session], cwd, {
145
+ ...env,
146
+ BIZAR_OMP_NO_TMUX: "1",
147
+ });
148
+ }
149
+ /** Attach to an existing Bizar session, switching the current tmux client when nested. */
150
+ export function attachOmbSession(session, cwd = process.cwd(), env = process.env) {
151
+ const tmux = env.BIZAR_TMUX_BIN || "tmux";
152
+ const args = env.TMUX || env.TMUX_PANE
153
+ ? ["switch-client", "-t", session]
154
+ : ["attach-session", "-t", session];
155
+ const child = spawn(tmux, args, { cwd, env: { ...env, BIZAR_OMP_NO_TMUX: "1" }, stdio: "inherit" });
156
+ return new Promise((resolve, reject) => {
157
+ child.once("error", reject);
158
+ child.once("close", (code, signal) => resolve(exitCode(code, signal)));
159
+ });
160
+ }
38
161
  /**
39
162
  * Launch OMP from the shell boundary. OMP starts inside tmux before it probes
40
163
  * the terminal; no second OMP process is handed the same raw terminal during
41
164
  * startup.
42
165
  */
43
- export function launchOmb(cwd, args, env = process.env) {
166
+ export async function launchOmb(cwd, args, env = process.env, sessionId) {
44
167
  const useTmux = shouldLaunchOmbInTmux({
45
168
  args,
46
169
  env,
@@ -49,11 +172,12 @@ export function launchOmb(cwd, args, env = process.env) {
49
172
  });
50
173
  const tmux = env.BIZAR_TMUX_BIN || "tmux";
51
174
  const omp = env.BIZAR_OMP_BIN || "omp";
52
- const session = ombSessionName(cwd);
53
- const command = useTmux ? tmux : omp;
54
- const childArgs = useTmux ? ["new-session", "-A", "-s", session, "-c", cwd, "omp", ...args] : args;
55
- const childEnv = useTmux ? { ...env, BIZAR_OMP_NO_TMUX: "1" } : env;
56
- const child = spawn(command, childArgs, { cwd, env: childEnv, stdio: "inherit" });
175
+ const settings = loadOmbSettings(env);
176
+ const lastSession = useTmux && !sessionId && settings.autoAttachLatest ? await findLastOmbSession(cwd, env) : undefined;
177
+ const session = lastSession?.name ?? ombSessionName(cwd, sessionId);
178
+ if (useTmux)
179
+ return launchInTmux(tmux, omp, session, cwd, args, env, settings.mouseScrolling, ombSessionDir(session, env));
180
+ const child = spawn(omp, args, { cwd, env, stdio: "inherit" });
57
181
  return new Promise((resolve, reject) => {
58
182
  child.once("error", reject);
59
183
  child.once("close", (code, signal) => resolve(exitCode(code, signal)));
@@ -1 +1 @@
1
- {"version":3,"file":"tmux.js","sourceRoot":"","sources":["../../src/omp/tmux.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tmux.js","sourceRoot":"","sources":["../../src/omp/tmux.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,32 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "researchDate": "2026-09-18",
4
- "bizarReference": { "repository": "../BizarHarness", "commit": "e13aa131bdcd368548118464f0da1bace302e64b", "role": "reference-only" },
5
- "omp": { "repository": "https://github.com/can1357/oh-my-pi", "testedVersion": "18.2.5", "testedCommit": "37273117021129e96bd05d8277b140ec3fd61990", "previouslyQualifiedVersions": ["18.2.4"], "researchedMainCommit": "dbf3afad4894bde827d90f965e77b3fe1c5a95e5", "releaseVersionSeenInResearch": "18.2.5", "releaseCommitSeenInResearch": "37273117021129e96bd05d8277b140ec3fd61990", "qualification": "The npm package was tested at 18.2.5 with integrity sha512-w9CPGYQHlXhlnjfpQkvLIxdwFHU1oQU7a291EHMxn779iQ2r97IIQlxwLG7HOFwdt7RTjAniTYnNSQmiBUuVBA==; 18.2.4 remains a separately qualified compatibility version. Package version alone does not prove source commit identity." },
6
- "bun": { "minimum": "1.3.14", "probe": "bun --version is required during release qualification" },
7
- "package": { "name": "@polderlabs/bizar-omp", "version": "0.4.0", "integrity": "computed by npm pack in CI", "extensionEntry": "dist/extension.js" }
4
+ "bizarReference": {
5
+ "repository": "../BizarHarness",
6
+ "commit": "e13aa131bdcd368548118464f0da1bace302e64b",
7
+ "role": "reference-only"
8
+ },
9
+ "omp": {
10
+ "repository": "https://github.com/can1357/oh-my-pi",
11
+ "testedVersion": "18.2.6",
12
+ "testedCommit": "78b753124d11f8dd3ae73e2524125890ff7c977e",
13
+ "previouslyQualifiedVersions": [
14
+ "18.2.4",
15
+ "18.2.5"
16
+ ],
17
+ "researchedMainCommit": "dbf3afad4894bde827d90f965e77b3fe1c5a95e5",
18
+ "releaseVersionSeenInResearch": "18.2.6",
19
+ "releaseCommitSeenInResearch": "78b753124d11f8dd3ae73e2524125890ff7c977e",
20
+ "qualification": "The npm package was tested at 18.2.6 with integrity sha512-dk298PZNnD1QigR4lKvQpWVAAbIo2bCfdNOlZwGFZsxHbP+XYrUS+AxYxfWkfqSnFRliP9Ho+h94DHV3o6lxRg==; 18.2.5 and 18.2.4 remain separately qualified compatibility versions. Package version alone does not prove source commit identity."
21
+ },
22
+ "bun": {
23
+ "minimum": "1.3.14",
24
+ "probe": "bun --version is required during release qualification"
25
+ },
26
+ "package": {
27
+ "name": "@polderlabs/bizar-omp",
28
+ "version": "0.4.2",
29
+ "integrity": "computed by npm pack in CI",
30
+ "extensionEntry": "dist/extension.js"
31
+ }
8
32
  }
@@ -1,7 +1,33 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "supported": ["omp extension factory", "native slash command", "native tools", "headless CLI", "JSONL workflow journal", "host-observed verification", "serialized integration admission", "dry-run migration"],
4
- "qualified": ["OMP 18.2.5 / release commit 37273117021129e96bd05d8277b140ec3fd61990", "OMP 18.2.4 compatibility regression", "Node 22 and 24 CI", "Bun 1.3.14 compatibility CI"],
5
- "not_claimed": ["OS sandboxing", "provider model quality", "automatic application of worker changes", "live task/eval child completion without a host OMP session", "Claude Code/AO compatibility"],
6
- "native_contract": { "extension_load": "registration-only", "tool_executor": "five arguments", "command_handler": "args and context", "manifest": "omp.extensions" }
3
+ "supported": [
4
+ "omp extension factory",
5
+ "native slash command",
6
+ "native tools",
7
+ "headless CLI",
8
+ "JSONL workflow journal",
9
+ "host-observed verification",
10
+ "serialized integration admission",
11
+ "dry-run migration"
12
+ ],
13
+ "qualified": [
14
+ "OMP 18.2.6 / release commit 78b753124d11f8dd3ae73e2524125890ff7c977e",
15
+ "OMP 18.2.5 compatibility regression",
16
+ "OMP 18.2.4 compatibility regression",
17
+ "Node 22 and 24 CI",
18
+ "Bun 1.3.14 compatibility CI"
19
+ ],
20
+ "not_claimed": [
21
+ "OS sandboxing",
22
+ "provider model quality",
23
+ "automatic application of worker changes",
24
+ "live task/eval child completion without a host OMP session",
25
+ "Claude Code/AO compatibility"
26
+ ],
27
+ "native_contract": {
28
+ "extension_load": "registration-only",
29
+ "tool_executor": "five arguments",
30
+ "command_handler": "args and context",
31
+ "manifest": "omp.extensions"
32
+ }
7
33
  }
@@ -0,0 +1,13 @@
1
+ # 0.4.1
2
+
3
+ ## Highlights
4
+
5
+ - Qualifies the plugin against OMP 18.2.6 at release commit 78b753124d11f8dd3ae73e2524125890ff7c977e.
6
+ - Keeps OMP 18.2.5 as a separately tested compatibility version.
7
+ - Updates CI, release qualification, installation diagnostics, and the native-development skill fingerprint.
8
+ - Adds the `omb agents` cross-project session hub for attaching to and dispatching durable sessions.
9
+ - Adds `omb new` plus last-active-session reconnect behavior for concurrent sessions in one directory.
10
+
11
+ ## Validation
12
+
13
+ The automated OMP compatibility workflow opens this release PR only after the packed native install qualification passes.
@@ -0,0 +1,9 @@
1
+ # 0.4.2
2
+
3
+ - Replaces the agents hub renderer with a full-screen Ink TUI featuring a workspace rail, grouped sessions, selected-session inspector, live refresh, and modal settings, help, and delete views.
4
+ - Keeps the hub in the terminal alternate screen so exiting does not pollute shell scrollback.
5
+ - Keeps new-session prompts alive after Ink hands the terminal back to readline.
6
+ - Adds the complete `bizar-omp setup` installer fallback for the global `omb` and `bizar-omp` commands alongside native `omp plugin install`.
7
+ - Returns interactive `omb` exits to the agents hub and safely detaches Ctrl-D/C without stopping the tmux host or interrupting OMP.
8
+ - Shows the native OMP session title in the agents hub, with deterministic task/project labels before auto-title generation completes, and isolates native journals per concurrent host.
9
+ - Qualifies the package against OMP 18.2.6 with the full test, package, documentation, security, and packed-install gates.
@@ -1,3 +1,3 @@
1
1
  # Native release policy
2
2
 
3
- The package is releasable when typecheck, tests, packed-install qualification, and documentation checks pass against the supported OMP/Bun baseline. A GitHub release is created from an exact `v<version>` tag; npm publication uses trusted publishing. See npm-publishing.md for setup and 0.4.0.md for the current release notes. A passing release gate does not imply every native provider or worker route has been tested.
3
+ The package is releasable when typecheck, tests, packed-install qualification, and documentation checks pass against the supported OMP/Bun baseline. A GitHub release is created from an exact `v<version>` tag; npm publication uses trusted publishing. See npm-publishing.md for setup and 0.4.2.md for the current release notes. A passing release gate does not imply every native provider or worker route has been tested.
@@ -4,7 +4,7 @@
4
4
  | --- | --- |
5
5
  | Node | 22.x and 24.x in CI |
6
6
  | Bun | 1.3.14 compatibility job |
7
- | OMP | 18.2.5 at release commit `37273117021129e96bd05d8277b140ec3fd61990`; 18.2.4 remains regression-qualified |
7
+ | OMP | 18.2.6 at release commit `78b753124d11f8dd3ae73e2524125890ff7c977e`; 18.2.5 and 18.2.4 remain regression-qualified |
8
8
  | Install | `omp plugin link <checkout>` and `omp plugin install <package-spec>` are the intended host paths |
9
9
  | Security | Trusted in-process extension; native task isolation required for managed editing |
10
10
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polderlabs/bizar-omp",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "description": "Native oh-my-pi engineering workflow extension with typed evidence and serialized integration.",
5
5
  "type": "module",
6
6
  "engines": {
@@ -53,10 +53,18 @@
53
53
  "url": "https://github.com/PolderLabsVOF/BizarHarness-OMP.git"
54
54
  },
55
55
  "license": "MIT",
56
- "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org/" },
56
+ "publishConfig": {
57
+ "access": "public",
58
+ "registry": "https://registry.npmjs.org/"
59
+ },
57
60
  "devDependencies": {
58
61
  "@types/node": "^26.5.1",
62
+ "@types/react": "^19.2.14",
59
63
  "typescript": "^7.0.2",
60
64
  "vitest": "^5.0.0"
65
+ },
66
+ "dependencies": {
67
+ "ink": "^7.1.1",
68
+ "react": "^19.3.0"
61
69
  }
62
70
  }
@@ -2,6 +2,7 @@
2
2
 
3
3
  - Register extension handlers during factory load; perform actions from lifecycle, command, or tool execution.
4
4
  - Use OMP's native task/eval and model/auth surfaces; do not create a second worker runtime.
5
+ - Treat the Agent Hub as the roster of active task sessions, not a catalog of every installed role; do not spawn idle specialists merely to make them visible.
5
6
  - Do not treat OMP extension code as sandboxed.
6
7
  - Treat lifecycle hook payloads and model/tool output as untrusted data; never persist credentials or blindly execute generated paths.
7
8
  - Use `omp.extensions` in the package manifest and qualify exact runtime baselines.
@@ -11,6 +11,8 @@ Use this skill when working in an OMP session with the BizarHarness plugin insta
11
11
 
12
12
  Bizar is a native OMP engineering extension. It owns workflow intent, acceptance criteria, evidence freshness, route classification, dispatch admission, and integration eligibility. OMP remains the owner of sessions, providers, models, credentials, tools, native agents, task isolation, transcripts, and conversation state. Bizar does not start a second agent runtime or replace OMP's task system.
13
13
 
14
+ `omp plugin install @polderlabs/bizar-omp` installs the extension, native agents, skills, rules, prompts, and workflow tools. OMP plugins cannot place npm executables on the shell `PATH`; when `omb` or the repair CLI is needed, use `npx --yes @polderlabs/bizar-omp@<version> setup`, which globally installs the exact package version, installs the same version through OMP's plugin manager, and applies the autonomous preset with a recoverable receipt.
15
+
14
16
  Use the native Bizar tools for the typed lifecycle:
15
17
 
16
18
  - `bizar_workflow` starts, inspects, transitions, and completes a workflow only when required checks and accepted work are satisfied.
@@ -34,7 +36,7 @@ Escalate when the scope grows, a check fails, the cause is uncertain, generated
34
36
 
35
37
  - `/bizar run <objective>` starts a bounded Bizar workflow.
36
38
  - `/bizar status`, `/bizar next`, `/bizar evidence`, and `/bizar cancel` inspect or advance that workflow.
37
- - `/bizar-models` asks the active agent to inspect the live OMP model catalog, assign the best available models to every `bizar_*` role, validate native resolution, preserve unrelated roles, and report unresolved roles. Never invent a provider/model selector.
39
+ - `/bizar-models` scans OMP's live authenticated model catalog locally, assigns the best available models to every `bizar_*` role, validates native resolution, preserves unrelated roles, and reports a compact mapping. It does not start a planning/research agent turn. Never invent a provider/model selector.
38
40
  - `/bizar-models health` validates configured Bizar selectors without changing settings.
39
41
 
40
42
  The semantic roles include `bizar_orchestrator` for the main conversation and `bizar_advisor` for independent passive review, alongside coordination, common work, hard work, research, planning, architecture, implementation, review, security, verification, and documentation. OMP's native Advisor is enabled by default and resolves through the native `advisor` role; Bizar exposes `bizar_advisor` as a visible, assignable alias. Use the role that matches the work; do not assume a role is available until OMP resolves its selector.
@@ -42,8 +44,11 @@ The semantic roles include `bizar_orchestrator` for the main conversation and `b
42
44
  ## Launcher contract
43
45
 
44
46
  - `omp` is the normal direct OMP launcher. Bizar must not take over its terminal or start tmux from an extension callback.
45
- - `omb` is the explicit durable launcher supplied by this package. It starts OMP inside a stable per-project tmux session from the first process, so terminal probes and raw input have one owner. Re-running `omb` reconnects to that project session.
46
- - `omb` avoids nested tmux sessions and runs noninteractive modes directly. Detach with `Ctrl-b d`; closing the client does not stop the tmux host.
47
+ - `omb` is the explicit durable launcher supplied by this package. It starts OMP inside tmux from the first process, so terminal probes and raw input have one owner. Plain `omb` reconnects to the most recently active live Bizar session in the current directory, or creates that directory's stable default session when none exists.
48
+ - `omb new [initial message]` always creates a fresh session. `omb --session <id>` creates or reconnects to an additional named session, and `omb --new` creates a generated session id. `omb agents` opens the full-screen Ink session hub with a workspace rail, grouped session list, selected-session inspector, and modal settings/help/delete views. In that hub, Enter attaches, `n` dispatches, `e` renames, `d` deletes after confirmation, `s` opens persistent launcher settings, Up/Down or `j`/`k` selects, `r` refreshes, `?` opens help, and `q` exits. The hub reads each host's native OMP session journal and prefers its configured or auto-generated title. While auto-titling is pending, it uses a deterministic first-task/project label and keeps the project/id as secondary identity. The hub only inspects Bizar-owned tmux sessions and does not replace OMP's native Agent Hub.
49
+ - `omb` enables tmux mouse mode by default so wheel scrolling stays in the pane instead of becoming prompt-history input; this can be changed in the hub Settings overlay. It avoids nested tmux sessions and runs noninteractive modes directly. `Ctrl-d` and `Ctrl-c` privately detach the Bizar client and return to the agents hub without sending EOF or interrupt input into OMP; `Ctrl-b d` remains available. The tmux host and background work continue. If the host pane exits, a later `omb` respawns the dead pane before reconnecting. Closing the client does not stop the tmux host.
50
+
51
+ The install preset enables asynchronous task execution and sets `display.pinnedAgents=full`, so every active task agent is visible in the live session and Agent Hub. Role definitions are not live sessions and are not spawned at install time; only agents actually delegated by the orchestrator appear in the hub. It also hides thinking blocks and model tool activity (`hideThinkingBlock` and `display.hideToolActivity`) while preserving the model's reasoning and task execution.
47
52
 
48
53
  Do not implement a second handoff, detached helper, or terminal-owning background loop in response to a task. Use OMP's native Agent Hub, task system, Collab, and session controls for background work.
49
54
 
@@ -9,7 +9,7 @@ Treat this skill as a source-grounded engineering procedure, not an assertion of
9
9
 
10
10
  ## Establish the target before implementing
11
11
 
12
- Read [accuracy-and-versioning.md](references/accuracy-and-versioning.md) first. The current qualification target is `can1357/oh-my-pi` v18.2.5 at commit `37273117021129e96bd05d8277b140ec3fd61990`; OMP 18.2.4 remains a separately tested compatibility version. The bundled research corpus remains pinned to main commit `dbf3afad4894bde827d90f965e77b3fe1c5a95e5`, dated 2026-09-17, and must not be presented as the current release source.
12
+ Read [accuracy-and-versioning.md](references/accuracy-and-versioning.md) first. The current qualification target is `can1357/oh-my-pi` v18.2.6 at commit `78b753124d11f8dd3ae73e2524125890ff7c977e`; OMP 18.2.5 and 18.2.4 remain separately tested compatibility versions. The bundled research corpus remains pinned to main commit `dbf3afad4894bde827d90f965e77b3fe1c5a95e5`, dated 2026-09-17, and must not be presented as the current release source.
13
13
 
14
14
  Record the developer's actual OMP package version, lockfile/integrity, source commit when available, Bun version, execution mode, profile, cwd, and relevant settings. Never print secrets. Verify the exact exports and behavior of that target, rather than assuming these snapshots apply unchanged. A missing environment or unrun test means UNKNOWN or NOT RUN, never PASS.
15
15
 
@@ -18,8 +18,8 @@ Separate five kinds of statement: DOCUMENTED, SOURCE-OBSERVED, TESTED, PROPOSED
18
18
 
19
19
  ## Target fingerprint
20
20
 
21
- Current qualification target: `v18.2.5@37273117021129e96bd05d8277b140ec3fd61990`, npm integrity `sha512-w9CPGYQHlXhlnjfpQkvLIxdwFHU1oQU7a291EHMxn779iQ2r97IIQlxwLG7HOFwdt7RTjAniTYnNSQmiBUuVBA==`.
22
- Previous compatibility target: `v18.2.4@1c0303b1f2ec515cbf4b44a9a49d68a029531aac`.
21
+ Current qualification target: `v18.2.6@78b753124d11f8dd3ae73e2524125890ff7c977e`, npm integrity `sha512-dk298PZNnD1QigR4lKvQpWVAAbIo2bCfdNOlZwGFZsxHbP+XYrUS+AxYxfWkfqSnFRliP9Ho+h94DHV3o6lxRg==`.
22
+ Previous compatibility targets: `v18.2.5@37273117021129e96bd05d8277b140ec3fd61990` and `v18.2.4@1c0303b1f2ec515cbf4b44a9a49d68a029531aac`.
23
23
  Research source: `can1357/oh-my-pi@dbf3afad4894bde827d90f965e77b3fe1c5a95e5`; it remains a source/documentation corpus pin, not a claim about the current package release. Compare artifacts/commits, not just a semver string.
24
24
 
25
25
  Record the installed package name/version, lockfile integrity or binary checksum, source SHA when available, Bun version, OS/architecture, execution mode, profile, agent directory, cwd, project settings and overlays. Include which facts are unavailable. Do not assert an installed binary's source commit solely because its version matches a Git tag.
@@ -5,9 +5,9 @@
5
5
  "reference_date": "2026-09-17",
6
6
  "docs_tree_sha": "c0055f49ceb172ff6da9490cf74773e9b187966b",
7
7
  "current_qualification": {
8
- "tag": "v18.2.5",
9
- "commit": "37273117021129e96bd05d8277b140ec3fd61990",
10
- "npm_integrity": "sha512-w9CPGYQHlXhlnjfpQkvLIxdwFHU1oQU7a291EHMxn779iQ2r97IIQlxwLG7HOFwdt7RTjAniTYnNSQmiBUuVBA==",
8
+ "tag": "v18.2.6",
9
+ "commit": "78b753124d11f8dd3ae73e2524125890ff7c977e",
10
+ "npm_integrity": "sha512-dk298PZNnD1QigR4lKvQpWVAAbIo2bCfdNOlZwGFZsxHbP+XYrUS+AxYxfWkfqSnFRliP9Ho+h94DHV3o6lxRg==",
11
11
  "qualification": "Runtime-qualified by the Bizar packed-install contract; the bundled docs/source inventory remains pinned to the research commit below."
12
12
  },
13
13
  "comparison_release": {