@polderlabs/bizar-omp 0.4.9 → 0.5.0

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 (155) hide show
  1. package/README.md +6 -3
  2. package/dist/cli/agents-ink.d.ts +1 -1
  3. package/dist/cli/agents-ink.d.ts.map +1 -1
  4. package/dist/cli/agents-ink.js +8 -7
  5. package/dist/cli/agents-ink.js.map +1 -1
  6. package/dist/cli/agents.d.ts.map +1 -1
  7. package/dist/cli/agents.js +9 -1
  8. package/dist/cli/agents.js.map +1 -1
  9. package/dist/cli/install.js +5 -5
  10. package/dist/cli/install.js.map +1 -1
  11. package/dist/cli/omb-daemon.d.ts.map +1 -1
  12. package/dist/cli/omb-daemon.js +8 -0
  13. package/dist/cli/omb-daemon.js.map +1 -1
  14. package/dist/cli/omb.js +21 -0
  15. package/dist/cli/omb.js.map +1 -1
  16. package/dist/core/acceptance.d.ts +33 -0
  17. package/dist/core/acceptance.d.ts.map +1 -0
  18. package/dist/core/acceptance.js +87 -0
  19. package/dist/core/acceptance.js.map +1 -0
  20. package/dist/core/evidence.d.ts +6 -1
  21. package/dist/core/evidence.d.ts.map +1 -1
  22. package/dist/core/evidence.js +6 -2
  23. package/dist/core/evidence.js.map +1 -1
  24. package/dist/core/recovery.js +3 -3
  25. package/dist/core/recovery.js.map +1 -1
  26. package/dist/core/transitions.d.ts.map +1 -1
  27. package/dist/core/transitions.js +3 -3
  28. package/dist/core/transitions.js.map +1 -1
  29. package/dist/core/types.d.ts +51 -0
  30. package/dist/core/types.d.ts.map +1 -1
  31. package/dist/extension.d.ts.map +1 -1
  32. package/dist/extension.js +47 -5
  33. package/dist/extension.js.map +1 -1
  34. package/dist/index.d.ts +13 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +13 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/omp/autonomous-settings.d.ts +11 -0
  39. package/dist/omp/autonomous-settings.d.ts.map +1 -1
  40. package/dist/omp/autonomous-settings.js +14 -0
  41. package/dist/omp/autonomous-settings.js.map +1 -1
  42. package/dist/omp/capabilities.d.ts +24 -0
  43. package/dist/omp/capabilities.d.ts.map +1 -0
  44. package/dist/omp/capabilities.js +6 -0
  45. package/dist/omp/capabilities.js.map +1 -0
  46. package/dist/omp/compatibility.d.ts +7 -0
  47. package/dist/omp/compatibility.d.ts.map +1 -1
  48. package/dist/omp/compatibility.js +27 -1
  49. package/dist/omp/compatibility.js.map +1 -1
  50. package/dist/omp/completion.d.ts.map +1 -1
  51. package/dist/omp/completion.js +4 -8
  52. package/dist/omp/completion.js.map +1 -1
  53. package/dist/omp/daemon-service.d.ts +2 -0
  54. package/dist/omp/daemon-service.d.ts.map +1 -1
  55. package/dist/omp/daemon-service.js +62 -13
  56. package/dist/omp/daemon-service.js.map +1 -1
  57. package/dist/omp/model-role-assignment.d.ts +5 -0
  58. package/dist/omp/model-role-assignment.d.ts.map +1 -1
  59. package/dist/omp/model-role-assignment.js +11 -1
  60. package/dist/omp/model-role-assignment.js.map +1 -1
  61. package/dist/omp/omb-settings.d.ts +1 -0
  62. package/dist/omp/omb-settings.d.ts.map +1 -1
  63. package/dist/omp/omb-settings.js +2 -0
  64. package/dist/omp/omb-settings.js.map +1 -1
  65. package/dist/omp/rpc.d.ts +6 -0
  66. package/dist/omp/rpc.d.ts.map +1 -1
  67. package/dist/omp/session-controls.d.ts +18 -0
  68. package/dist/omp/session-controls.d.ts.map +1 -0
  69. package/dist/omp/session-controls.js +14 -0
  70. package/dist/omp/session-controls.js.map +1 -0
  71. package/dist/omp/tmux.d.ts +2 -0
  72. package/dist/omp/tmux.d.ts.map +1 -1
  73. package/dist/omp/tmux.js +17 -1
  74. package/dist/omp/tmux.js.map +1 -1
  75. package/dist/omp/tray-icons.d.ts +6 -0
  76. package/dist/omp/tray-icons.d.ts.map +1 -0
  77. package/dist/omp/tray-icons.js +78 -0
  78. package/dist/omp/tray-icons.js.map +1 -0
  79. package/dist/omp/tray.d.ts +24 -0
  80. package/dist/omp/tray.d.ts.map +1 -0
  81. package/dist/omp/tray.js +167 -0
  82. package/dist/omp/tray.js.map +1 -0
  83. package/dist/services/budget.d.ts +20 -0
  84. package/dist/services/budget.d.ts.map +1 -0
  85. package/dist/services/budget.js +10 -0
  86. package/dist/services/budget.js.map +1 -0
  87. package/dist/services/candidate-local.d.ts +14 -0
  88. package/dist/services/candidate-local.d.ts.map +1 -0
  89. package/dist/services/candidate-local.js +15 -0
  90. package/dist/services/candidate-local.js.map +1 -0
  91. package/dist/services/candidates.d.ts +21 -0
  92. package/dist/services/candidates.d.ts.map +1 -0
  93. package/dist/services/candidates.js +100 -0
  94. package/dist/services/candidates.js.map +1 -0
  95. package/dist/services/evidence-bundle.d.ts +18 -0
  96. package/dist/services/evidence-bundle.d.ts.map +1 -0
  97. package/dist/services/evidence-bundle.js +21 -0
  98. package/dist/services/evidence-bundle.js.map +1 -0
  99. package/dist/services/inspector.d.ts +12 -0
  100. package/dist/services/inspector.d.ts.map +1 -0
  101. package/dist/services/inspector.js +6 -0
  102. package/dist/services/inspector.js.map +1 -0
  103. package/dist/services/lessons.d.ts +14 -0
  104. package/dist/services/lessons.d.ts.map +1 -0
  105. package/dist/services/lessons.js +11 -0
  106. package/dist/services/lessons.js.map +1 -0
  107. package/dist/services/projection.d.ts +22 -0
  108. package/dist/services/projection.d.ts.map +1 -0
  109. package/dist/services/projection.js +10 -0
  110. package/dist/services/projection.js.map +1 -0
  111. package/dist/services/readiness.d.ts +5 -0
  112. package/dist/services/readiness.d.ts.map +1 -0
  113. package/dist/services/readiness.js +35 -0
  114. package/dist/services/readiness.js.map +1 -0
  115. package/dist/services/recipes.d.ts +16 -0
  116. package/dist/services/recipes.d.ts.map +1 -0
  117. package/dist/services/recipes.js +42 -0
  118. package/dist/services/recipes.js.map +1 -0
  119. package/dist/services/recovery.d.ts +20 -0
  120. package/dist/services/recovery.d.ts.map +1 -0
  121. package/dist/services/recovery.js +9 -0
  122. package/dist/services/recovery.js.map +1 -0
  123. package/dist/services/review.d.ts +16 -0
  124. package/dist/services/review.d.ts.map +1 -0
  125. package/dist/services/review.js +9 -0
  126. package/dist/services/review.js.map +1 -0
  127. package/dist/storage/journal-recovery.d.ts +11 -0
  128. package/dist/storage/journal-recovery.d.ts.map +1 -0
  129. package/dist/storage/journal-recovery.js +33 -0
  130. package/dist/storage/journal-recovery.js.map +1 -0
  131. package/dist/storage/journal.d.ts.map +1 -1
  132. package/dist/storage/journal.js +14 -4
  133. package/dist/storage/journal.js.map +1 -1
  134. package/dist/storage/migrations.d.ts +15 -1
  135. package/dist/storage/migrations.d.ts.map +1 -1
  136. package/dist/storage/migrations.js +74 -5
  137. package/dist/storage/migrations.js.map +1 -1
  138. package/dist/storage/resources.d.ts +67 -0
  139. package/dist/storage/resources.d.ts.map +1 -0
  140. package/dist/storage/resources.js +148 -0
  141. package/dist/storage/resources.js.map +1 -0
  142. package/dist/tools/integrate.d.ts +1 -0
  143. package/dist/tools/integrate.d.ts.map +1 -1
  144. package/dist/tools/integrate.js +24 -40
  145. package/dist/tools/integrate.js.map +1 -1
  146. package/dist/tools/verify.d.ts +1 -1
  147. package/dist/tools/verify.d.ts.map +1 -1
  148. package/dist/tools/verify.js +30 -6
  149. package/dist/tools/verify.js.map +1 -1
  150. package/docs/compatibility/baseline.json +1 -1
  151. package/docs/compatibility/supported-surfaces.json +6 -0
  152. package/docs/releases/0.4.10.md +13 -0
  153. package/docs/releases/0.5.0.md +18 -0
  154. package/docs/releases/support-matrix.md +3 -0
  155. package/package.json +2 -1
@@ -1,62 +1,34 @@
1
1
  import { createHash, randomUUID } from "node:crypto";
2
2
  import { closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, unlinkSync, writeSync } from "node:fs";
3
- import { execFileSync } from "node:child_process";
4
3
  import { join } from "node:path";
5
4
  import { ContractError, OwnershipError } from "../core/errors.js";
6
5
  import { requireFreshEvidence } from "../core/evidence.js";
7
6
  import { assertOwner } from "../core/recovery.js";
8
7
  import { repositoryIdentity, workingTreeDigest, isDirty } from "../storage/repository-identity.js";
8
+ import { materializeCandidate, observeWorkingTreeTree } from "../services/candidates.js";
9
9
  function inScope(path, scopes) { return scopes.some(scope => path === scope || path.startsWith(`${scope.replace(/\/$/, "")}/`)); }
10
- function checkedPatchPaths(cwd, patch) {
11
- let output;
12
- try {
13
- output = execFileSync("git", ["apply", "--check", "--numstat", "-z", "--"], { cwd, input: patch, stdio: ["pipe", "pipe", "pipe"] });
14
- }
15
- catch {
16
- throw new ContractError("Patch is invalid or cannot be applied cleanly");
17
- }
18
- const fields = output.length === 0 ? [] : output.subarray(0, -1).toString("utf8").split("\0");
19
- const paths = [];
20
- for (let index = 0; index < fields.length; index += 1) {
21
- const match = /^(?:\d+|-)\t(?:\d+|-)\t(.*)$/.exec(fields[index]);
22
- if (!match)
23
- throw new ContractError("Git returned an unparseable patch path");
24
- if (match[1])
25
- paths.push(match[1]);
26
- else {
27
- const oldPath = fields[++index];
28
- const newPath = fields[++index];
29
- if (oldPath === undefined || newPath === undefined)
30
- throw new ContractError("Git returned an incomplete rename or copy path");
31
- paths.push(oldPath, newPath);
32
- }
33
- }
34
- if (paths.length === 0)
35
- throw new ContractError("Patch does not change any files");
36
- for (const path of paths) {
37
- if (!path || path.startsWith("/") || path.split("/").some(segment => segment === "." || segment === ".."))
38
- throw new ContractError("Patch contains an unsafe path", { path });
39
- }
40
- return [...new Set(paths)];
41
- }
42
10
  export async function integrate(binding, request) {
43
11
  let state = binding.journal.snapshot();
44
12
  if (!state.run)
45
13
  throw new ContractError("Cannot integrate without a run");
46
14
  assertOwner(state.run.nativeSessionId, binding.owner);
15
+ request.signal?.throwIfAborted();
16
+ if (state.run.cancellation.requested || state.run.phase === "cancelled")
17
+ throw new ContractError("Integration is blocked by the acknowledged cancellation fence");
47
18
  const item = state.run.workItems.find(candidate => candidate.id === request.workItemId);
48
19
  if (!item)
49
20
  throw new ContractError(`Unknown work item: ${request.workItemId}`);
50
- const patchPaths = checkedPatchPaths(binding.cwd, request.patch);
21
+ if (isDirty(binding.cwd))
22
+ throw new ContractError("Target worktree is dirty; integration is blocked until unrelated changes are reconciled");
23
+ const candidate = materializeCandidate(binding.cwd, request.patch);
24
+ const patchPaths = candidate.operations.map(operation => operation.path);
51
25
  if (!patchPaths.every(path => inScope(path, item.scope)))
52
26
  throw new ContractError("Patch changes exceed the admitted work-item scope", { changedPaths: patchPaths, scope: item.scope });
53
27
  if (request.changedPaths && JSON.stringify([...new Set(request.changedPaths)].sort()) !== JSON.stringify([...patchPaths].sort()))
54
28
  throw new ContractError("Declared paths do not match the patch");
55
29
  const identity = repositoryIdentity(binding.cwd);
56
- if (isDirty(binding.cwd))
57
- throw new ContractError("Target worktree is dirty; integration is blocked until unrelated changes are reconciled");
58
30
  const targetDigest = workingTreeDigest(binding.cwd);
59
- requireFreshEvidence(state.evidence, request.evidenceIds, targetDigest);
31
+ requireFreshEvidence(state.evidence, request.evidenceIds, targetDigest, { candidateTree: candidate.candidateTree });
60
32
  const patchDigest = createHash("sha256").update(request.patch).digest("hex");
61
33
  const lockDir = join(identity.gitDir, "bizar", "omp-v1");
62
34
  mkdirSync(lockDir, { recursive: true, mode: 0o700 });
@@ -76,19 +48,31 @@ export async function integrate(binding, request) {
76
48
  if (!state.run)
77
49
  throw new ContractError("Cannot integrate without a run");
78
50
  assertOwner(state.run.nativeSessionId, binding.owner);
51
+ if (state.run.cancellation.requested || state.run.phase === "cancelled")
52
+ throw new ContractError("Integration is blocked by the acknowledged cancellation fence");
79
53
  const lockedItem = state.run.workItems.find(candidate => candidate.id === request.workItemId);
80
54
  if (!lockedItem || !patchPaths.every(path => inScope(path, lockedItem.scope)))
81
55
  throw new ContractError("Work-item scope changed before integration");
82
56
  if (isDirty(binding.cwd))
83
57
  throw new ContractError("Target worktree is dirty; integration is blocked until unrelated changes are reconciled");
58
+ const lockedCandidate = materializeCandidate(binding.cwd, request.patch);
59
+ if (lockedCandidate.baseTree !== candidate.baseTree || lockedCandidate.candidateTree !== candidate.candidateTree)
60
+ throw new ContractError("Candidate changed while waiting for integration ownership");
84
61
  const lockedDigest = workingTreeDigest(binding.cwd);
85
- requireFreshEvidence(state.evidence, request.evidenceIds, lockedDigest);
86
- const attempt = { id: `integration_${randomUUID()}`, runId: state.run.runId, workItemId: lockedItem.id, baseDigest: lockedDigest, patchDigest, changedPaths: patchPaths, eligibleEvidenceIds: request.evidenceIds, lockOwner: binding.owner, outcome: request.apply ? "unknown-outcome" : "eligible", attemptedAt: new Date().toISOString() };
62
+ requireFreshEvidence(state.evidence, request.evidenceIds, lockedDigest, { candidateTree: lockedCandidate.candidateTree });
63
+ const attempt = { id: `integration_${randomUUID()}`, runId: state.run.runId, workItemId: lockedItem.id, baseDigest: lockedDigest, patchDigest, changedPaths: patchPaths, eligibleEvidenceIds: request.evidenceIds, lockOwner: binding.owner, outcome: request.apply ? "unknown-outcome" : "eligible", attemptedAt: new Date().toISOString(), candidateId: candidate.id, baseTree: candidate.baseTree, candidateTree: candidate.candidateTree };
87
64
  binding.journal.append({ type: "integration.recorded", runId: attempt.runId, attempt }, `integration-intent:${attempt.id}`, state.revision);
88
65
  if (request.apply) {
66
+ request.signal?.throwIfAborted();
89
67
  await request.apply(request.patch);
90
- attempt.outcome = "applied";
91
68
  attempt.resultingDigest = workingTreeDigest(binding.cwd);
69
+ const observedTree = observeWorkingTreeTree(binding.cwd);
70
+ if (observedTree === candidate.candidateTree)
71
+ attempt.outcome = "applied";
72
+ else {
73
+ attempt.outcome = "unknown-outcome";
74
+ attempt.recovery = `Applied content does not match candidate tree ${candidate.candidateTree}; observed ${observedTree}`;
75
+ }
92
76
  binding.journal.append({ type: "integration.recorded", runId: attempt.runId, attempt }, `integration-outcome:${attempt.id}`);
93
77
  }
94
78
  return attempt;
@@ -1 +1 @@
1
- {"version":3,"file":"integrate.js","sourceRoot":"","sources":["../../src/tools/integrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"integrate.js","sourceRoot":"","sources":["../../src/tools/integrate.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ export interface CheckResult {
3
3
  checkId: string;
4
4
  command: string[];
5
5
  cwd: string;
6
- result: "passed" | "failed" | "unknown";
6
+ result: "passed" | "failed" | "unknown" | "cancelled";
7
7
  exitCode: number;
8
8
  stdout: string;
9
9
  stderr: string;
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK1D,MAAM,WAAW,WAAW;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;CAAE;AAEtN,wBAAsB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,SAAc,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAsBhK"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA6B1D,MAAM,WAAW,WAAW;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;CAAE;AAEpO,wBAAsB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,SAAc,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CA0BhK"}
@@ -5,7 +5,26 @@ import { createEvidence } from "../core/evidence.js";
5
5
  import { repositoryIdentity, workingTreeDigest } from "../storage/repository-identity.js";
6
6
  import { ContractError } from "../core/errors.js";
7
7
  const execFileAsync = promisify(execFile);
8
- const redact = (value) => value.replace(/(authorization|api[-_]?key|token|secret|password)\s*[:=]\s*[^\s,;]+/gi, "$1=[REDACTED]").replace(/Bearer\s+[A-Za-z0-9._-]+/gi, "Bearer [REDACTED]");
8
+ const SECRET_NAME = /(?:authorization|api[-_]?key|access[-_]?key|token|secret|password|credential|private[-_]?key)/i;
9
+ const SAFE_ENVIRONMENT = new Set([
10
+ "CI", "FORCE_COLOR", "HOME", "LANG", "LC_ALL", "LC_CTYPE", "NO_COLOR", "PATH", "SHELL", "TERM", "TMP", "TEMP", "TMPDIR", "TZ"
11
+ ]);
12
+ const MAX_OUTPUT = 100_000;
13
+ const redact = (value) => value
14
+ .replace(/(authorization|api[-_]?key|access[-_]?key|token|secret|password|credential|private[-_]?key)\s*[:=]\s*[^\s,;]+/gi, "$1=[REDACTED]")
15
+ .replace(/([?&](?:token|secret|api[-_]?key|password|key)=)[^&\s]+/gi, "$1[REDACTED]")
16
+ .replace(/Bearer\s+[A-Za-z0-9._~-]+/gi, "Bearer [REDACTED]")
17
+ .replace(/-----BEGIN ([A-Z ]+ KEY)-----[\s\S]*?-----END \1-----/g, "-----BEGIN $1-----[REDACTED]-----END $1-----");
18
+ const bounded = (value) => {
19
+ const safe = redact(value ?? "");
20
+ return safe.length > MAX_OUTPUT ? `[TRUNCATED]\n${safe.slice(-MAX_OUTPUT)}` : safe;
21
+ };
22
+ const safeCommand = (command) => command.map((part, index) => {
23
+ if (index > 0 && (SECRET_NAME.test(command[index - 1] ?? "") || SECRET_NAME.test(part.split("=", 1)[0] ?? "")))
24
+ return "[REDACTED]";
25
+ return redact(part);
26
+ });
27
+ const safeEnvironment = (environment) => Object.fromEntries(Object.entries(environment).filter(([name]) => SAFE_ENVIRONMENT.has(name)).map(([name, value]) => [name, value ?? ""]));
9
28
  export async function runVerification(binding, checkId, command, cwd = binding.cwd, signal) {
10
29
  if (!checkId.trim() || !command.length || command.some(part => typeof part !== "string" || part.includes("\0")) || !command[0].trim())
11
30
  throw new ContractError("A check ID and nonempty command argv are required");
@@ -17,21 +36,26 @@ export async function runVerification(binding, checkId, command, cwd = binding.c
17
36
  throw new ContractError("Start a workflow before recording verification");
18
37
  if (run.nativeSessionId !== binding.owner)
19
38
  throw new ContractError("Only the run owner may record verification");
39
+ if (run.cancellation.requested || run.phase === "cancelled")
40
+ throw new ContractError("Verification is blocked by the acknowledged cancellation fence");
20
41
  const runId = run.runId;
21
42
  const before = workingTreeDigest(cwd);
43
+ const persistedCommand = safeCommand(command);
22
44
  try {
23
- const output = await execFileAsync(command[0], command.slice(1), { cwd, signal, timeout: 10 * 60 * 1000, maxBuffer: 512 * 1024, env: { ...process.env, CI: "1" } });
45
+ const output = await execFileAsync(command[0], command.slice(1), { cwd, signal, timeout: 10 * 60 * 1000, maxBuffer: 512 * 1024, env: { ...safeEnvironment(process.env), CI: "1" } });
24
46
  const result = workingTreeDigest(cwd) === before ? "passed" : "unknown";
25
- const base = createEvidence({ id: `evidence_${randomUUID()}`, runId, type: "test", checkId, command, cwd, result, exitCode: result === "passed" ? 0 : undefined, targetDigest: before, inputDigests: {}, stdout: redact(output.stdout.slice(-100_000)), stderr: redact(output.stderr.slice(-100_000)), artifactHashes: [], provenance: { producer: "bizar-omp-host", observedAt: new Date().toISOString() } });
47
+ const base = createEvidence({ id: `evidence_${randomUUID()}`, runId, type: "test", checkId, command: persistedCommand, cwd, result, exitCode: result === "passed" ? 0 : undefined, targetDigest: before, inputDigests: {}, stdout: bounded(output.stdout), stderr: bounded(output.stderr), artifactHashes: [], provenance: { producer: "bizar-omp-host", observedAt: new Date().toISOString() } });
26
48
  const evidence = result === "unknown" ? { ...base, staleReason: "verification command changed the target tree" } : base;
27
49
  binding.journal.append({ type: "evidence.recorded", runId: evidence.runId, evidence }, `evidence:${evidence.id}`);
28
- return { checkId, command, cwd, result, exitCode: result === "passed" ? 0 : 1, stdout: evidence.stdout ?? "", stderr: evidence.stderr ?? "", targetDigest: before, evidenceId: evidence.id };
50
+ return { checkId, command: persistedCommand, cwd, result, exitCode: result === "passed" ? 0 : 1, stdout: evidence.stdout ?? "", stderr: evidence.stderr ?? "", targetDigest: before, evidenceId: evidence.id };
29
51
  }
30
52
  catch (error) {
31
53
  const e = error;
32
- const evidence = createEvidence({ id: `evidence_${randomUUID()}`, runId, type: "test", checkId, command, cwd, result: "failed", exitCode: typeof e.code === "number" ? e.code : 1, targetDigest: before, inputDigests: {}, stdout: e.stdout ? redact(e.stdout.slice(-100_000)) : undefined, stderr: redact(e.stderr?.slice(-100_000) ?? String(error)), artifactHashes: [], provenance: { producer: "bizar-omp-host", observedAt: new Date().toISOString() } });
54
+ const cancelled = e.name === "AbortError" || e.code === "ABORT_ERR";
55
+ const result = cancelled ? "cancelled" : "failed";
56
+ const evidence = createEvidence({ id: `evidence_${randomUUID()}`, runId, type: "test", checkId, command: persistedCommand, cwd, result, exitCode: cancelled ? 130 : (typeof e.code === "number" ? e.code : 1), targetDigest: before, inputDigests: {}, stdout: bounded(e.stdout), stderr: bounded(e.stderr ?? String(error)), artifactHashes: [], provenance: { producer: "bizar-omp-host", observedAt: new Date().toISOString() } });
33
57
  binding.journal.append({ type: "evidence.recorded", runId: evidence.runId, evidence }, `evidence:${evidence.id}`);
34
- return { checkId, command, cwd, result: "failed", exitCode: evidence.exitCode ?? 1, stdout: redact(e.stdout ?? ""), stderr: redact(e.stderr ?? String(error)), targetDigest: before, evidenceId: evidence.id };
58
+ return { checkId, command: persistedCommand, cwd, result, exitCode: evidence.exitCode ?? 1, stdout: evidence.stdout ?? "", stderr: evidence.stderr ?? "", targetDigest: before, evidenceId: evidence.id };
35
59
  }
36
60
  }
37
61
  //# sourceMappingURL=verify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@
25
25
  },
26
26
  "package": {
27
27
  "name": "@polderlabs/bizar-omp",
28
- "version": "0.4.9",
28
+ "version": "0.5.0",
29
29
  "integrity": "computed by npm pack in CI",
30
30
  "extensionEntry": "dist/extension.js"
31
31
  }
@@ -8,6 +8,10 @@
8
8
  "JSONL workflow journal",
9
9
  "host-observed verification",
10
10
  "serialized integration admission",
11
+ "candidate-bound acceptance and evidence inspection",
12
+ "validated journal v2 and authorized torn-tail recovery",
13
+ "durable managed-resource registry with preview-first cleanup",
14
+ "offline evidence bundle export",
11
15
  "dry-run migration"
12
16
  ],
13
17
  "qualified": [
@@ -21,6 +25,8 @@
21
25
  "OS sandboxing",
22
26
  "provider model quality",
23
27
  "automatic application of worker changes",
28
+ "managed native task/eval interception and cancellation fencing",
29
+ "automatic cleanup of unqualified native isolation backends",
24
30
  "live task/eval child completion without a host OMP session",
25
31
  "Claude Code/AO compatibility"
26
32
  ],
@@ -0,0 +1,13 @@
1
+ # 0.4.10
2
+
3
+ ## Highlights
4
+
5
+ - Fixed mouse wheel and pointer forwarding for Advisor overlays and attached OMB sessions through tmux/psmux.
6
+ - Corrected agents-hub session titles and live status labels.
7
+ - Added an opt-in native system tray for session attach/create, hub launch, daemon stop, and tray lifecycle control.
8
+ - Added `omb tray start|stop|status` and `omb agents --new`.
9
+
10
+ ## Validation
11
+
12
+ - Full Vitest suite, typecheck, build, package, docs, security, and npm pack checks passed.
13
+ - OMP 18.2.6 install/discovery smoke validation passed.
@@ -0,0 +1,18 @@
1
+ # 0.5.0
2
+
3
+ ## Highlights
4
+
5
+ - Binds integration proof to an exact candidate tree and complete Git operation manifest.
6
+ - Adds journal v2 validation, chained checksums, strict replay, and authorized torn-tail recovery.
7
+ - Adds immutable check/review contracts, canonical acceptance/blocker inspection, bounded handoff projections, and offline evidence bundles.
8
+ - Preserves existing OMP settings during setup, bounds dashboard inputs, reports observation freshness, and handles lightweight OMP tags.
9
+ - Adds a durable managed-resource registry with preview-first, non-forced Git-worktree cleanup and ignored-content protection.
10
+
11
+ ## Qualification boundary
12
+
13
+ Local repository tests qualify these contracts on the declared Node/Git environment. Native task/eval interception, hardened isolation, provider quality, and cross-platform native teardown remain unsupported until their end-to-end qualification matrices pass.
14
+
15
+ ## Validation
16
+
17
+ - Vitest suite, typecheck, build, package, docs, security, and pack checks.
18
+ - Local Git worktree/resource fixtures, dashboard HTTP-boundary fixtures, candidate/evidence lineage fixtures, and journal corruption/recovery fixtures.
@@ -7,5 +7,8 @@
7
7
  | OMP | 18.2.6 at release commit `78b753124d11f8dd3ae73e2524125890ff7c977e`; 18.2.5 and 18.2.4 remain regression-qualified |
8
8
  | Install | `npx --yes @polderlabs/bizar-omp setup` is the supported full install; `omp plugin install <package-spec>` is extension-only and `omp plugin link <checkout>` is for development |
9
9
  | Security | Trusted in-process extension; native task isolation required for managed editing |
10
+ | Workflow state | Journal v2 validation, candidate-bound acceptance, bounded inspection/projection, and offline evidence bundles are locally qualified; v1 state remains legacy input |
11
+ | Managed resources | Bizar-owned Git worktree registry and exact non-forced cleanup are qualified on the local Git fixture; native OMP isolation teardown and cross-platform cleanup remain unsupported until an end-to-end matrix passes |
12
+ | Native managed mode | Advisory capability report only for task, batch, eval, nested, and alternate headless paths; no universal managed execution claim |
10
13
 
11
14
  Upstream API changes require a new baseline entry and contract run; the package does not widen a version range to hide an unqualified runtime.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polderlabs/bizar-omp",
3
- "version": "0.4.9",
3
+ "version": "0.5.0",
4
4
  "description": "Native oh-my-pi engineering workflow extension with typed evidence and serialized integration.",
5
5
  "type": "module",
6
6
  "engines": {
@@ -64,6 +64,7 @@
64
64
  "vitest": "^5.0.0"
65
65
  },
66
66
  "dependencies": {
67
+ "@trayjs/trayjs": "^0.0.10",
67
68
  "ink": "^7.1.1",
68
69
  "react": "^19.3.0"
69
70
  }