lazycodex-ai 5.0.0-beta.66 → 5.0.0-beta.68

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 (69) hide show
  1. package/dist/cli/index.js +15 -15
  2. package/dist/cli-node/index.js +15 -15
  3. package/package.json +1 -1
  4. package/packages/lsp-daemon/dist/cli.js +2 -0
  5. package/packages/lsp-daemon/dist/client.js +2 -0
  6. package/packages/lsp-daemon/dist/index.js +2 -0
  7. package/packages/lsp-tools-mcp/dist/cli.js +2 -0
  8. package/packages/lsp-tools-mcp/dist/lsp/manager.js +2 -0
  9. package/packages/lsp-tools-mcp/dist/mcp.js +2 -0
  10. package/packages/lsp-tools-mcp/dist/tools.js +2 -0
  11. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  12. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  13. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  14. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  15. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  16. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  17. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  18. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  19. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  20. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +3 -3
  21. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +2 -0
  22. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  23. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  24. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  25. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  26. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  27. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  28. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  29. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  30. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  31. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  32. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  33. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  34. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +1 -0
  35. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +26 -2
  36. package/packages/omo-codex/plugin/components/ulw-loop/dist/ledger.js +6 -1
  37. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-commit.js +2 -1
  38. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-log.d.ts +2 -1
  39. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-log.js +30 -1
  40. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  41. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  42. package/packages/omo-codex/plugin/components/ulw-loop/src/ledger.ts +6 -1
  43. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-commit.ts +9 -1
  44. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-log.ts +30 -2
  45. package/packages/omo-codex/plugin/components/ulw-loop/test/plan-log-legacy-projection.test.ts +228 -0
  46. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  47. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  48. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  54. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  59. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  60. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  61. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  62. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  63. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  64. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  65. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  66. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  67. package/packages/omo-codex/plugin/package-lock.json +12 -12
  68. package/packages/omo-codex/plugin/package.json +1 -1
  69. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
package/dist/cli/index.js CHANGED
@@ -64,7 +64,7 @@ var package_default;
64
64
  var init_package = __esm(() => {
65
65
  package_default = {
66
66
  name: "oh-my-opencode",
67
- version: "5.0.0-beta.66",
67
+ version: "5.0.0-beta.68",
68
68
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
69
69
  main: "./dist/index.js",
70
70
  types: "dist/index.d.ts",
@@ -246,7 +246,7 @@ var init_package = __esm(() => {
246
246
  zod: "^4.4.3"
247
247
  },
248
248
  devDependencies: {
249
- "@code-yeongyu/senpi": "2026.9.16-2",
249
+ "@code-yeongyu/senpi": "2026.9.16-3",
250
250
  "@oh-my-opencode/agents-md-core": "workspace:*",
251
251
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
252
252
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -285,18 +285,18 @@ var init_package = __esm(() => {
285
285
  typescript: "^7.0.2"
286
286
  },
287
287
  optionalDependencies: {
288
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.66",
289
- "oh-my-opencode-darwin-x64": "5.0.0-beta.66",
290
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.66",
291
- "oh-my-opencode-linux-arm64": "5.0.0-beta.66",
292
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.66",
293
- "oh-my-opencode-linux-x64": "5.0.0-beta.66",
294
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.66",
295
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.66",
296
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.66",
297
- "oh-my-opencode-windows-arm64": "5.0.0-beta.66",
298
- "oh-my-opencode-windows-x64": "5.0.0-beta.66",
299
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.66"
288
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.68",
289
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.68",
290
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.68",
291
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.68",
292
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.68",
293
+ "oh-my-opencode-linux-x64": "5.0.0-beta.68",
294
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.68",
295
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.68",
296
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.68",
297
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.68",
298
+ "oh-my-opencode-windows-x64": "5.0.0-beta.68",
299
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.68"
300
300
  },
301
301
  overrides: {
302
302
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -84547,7 +84547,7 @@ var package_default2;
84547
84547
  var init_package2 = __esm(() => {
84548
84548
  package_default2 = {
84549
84549
  name: "@oh-my-opencode/omo-codex",
84550
- version: "5.0.0-beta.66",
84550
+ version: "5.0.0-beta.68",
84551
84551
  type: "module",
84552
84552
  private: true,
84553
84553
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -65,7 +65,7 @@ var package_default;
65
65
  var init_package = __esm(() => {
66
66
  package_default = {
67
67
  name: "oh-my-opencode",
68
- version: "5.0.0-beta.66",
68
+ version: "5.0.0-beta.68",
69
69
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
70
70
  main: "./dist/index.js",
71
71
  types: "dist/index.d.ts",
@@ -247,7 +247,7 @@ var init_package = __esm(() => {
247
247
  zod: "^4.4.3"
248
248
  },
249
249
  devDependencies: {
250
- "@code-yeongyu/senpi": "2026.9.16-2",
250
+ "@code-yeongyu/senpi": "2026.9.16-3",
251
251
  "@oh-my-opencode/agents-md-core": "workspace:*",
252
252
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
253
253
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -286,18 +286,18 @@ var init_package = __esm(() => {
286
286
  typescript: "^7.0.2"
287
287
  },
288
288
  optionalDependencies: {
289
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.66",
290
- "oh-my-opencode-darwin-x64": "5.0.0-beta.66",
291
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.66",
292
- "oh-my-opencode-linux-arm64": "5.0.0-beta.66",
293
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.66",
294
- "oh-my-opencode-linux-x64": "5.0.0-beta.66",
295
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.66",
296
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.66",
297
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.66",
298
- "oh-my-opencode-windows-arm64": "5.0.0-beta.66",
299
- "oh-my-opencode-windows-x64": "5.0.0-beta.66",
300
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.66"
289
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.68",
290
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.68",
291
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.68",
292
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.68",
293
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.68",
294
+ "oh-my-opencode-linux-x64": "5.0.0-beta.68",
295
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.68",
296
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.68",
297
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.68",
298
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.68",
299
+ "oh-my-opencode-windows-x64": "5.0.0-beta.68",
300
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.68"
301
301
  },
302
302
  overrides: {
303
303
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -84626,7 +84626,7 @@ var package_default2;
84626
84626
  var init_package2 = __esm(() => {
84627
84627
  package_default2 = {
84628
84628
  name: "@oh-my-opencode/omo-codex",
84629
- version: "5.0.0-beta.66",
84629
+ version: "5.0.0-beta.68",
84630
84630
  type: "module",
84631
84631
  private: true,
84632
84632
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lazycodex-ai",
3
- "version": "5.0.0-beta.66",
3
+ "version": "5.0.0-beta.68",
4
4
  "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1770,6 +1770,8 @@ class WorkspaceDocumentState {
1770
1770
  const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1771
1771
  if (!state || timeoutMs <= 0)
1772
1772
  return Promise.resolve();
1773
+ if (state.publishGeneration !== snapshot.publishGeneration)
1774
+ return Promise.resolve();
1773
1775
  return new Promise((resolveActivity) => {
1774
1776
  let settled = false;
1775
1777
  const finish = () => {
@@ -2428,6 +2428,8 @@ class WorkspaceDocumentState {
2428
2428
  const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
2429
2429
  if (!state || timeoutMs <= 0)
2430
2430
  return Promise.resolve();
2431
+ if (state.publishGeneration !== snapshot.publishGeneration)
2432
+ return Promise.resolve();
2431
2433
  return new Promise((resolveActivity) => {
2432
2434
  let settled = false;
2433
2435
  const finish = () => {
@@ -1277,6 +1277,8 @@ class WorkspaceDocumentState {
1277
1277
  const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1278
1278
  if (!state || timeoutMs <= 0)
1279
1279
  return Promise.resolve();
1280
+ if (state.publishGeneration !== snapshot.publishGeneration)
1281
+ return Promise.resolve();
1280
1282
  return new Promise((resolveActivity) => {
1281
1283
  let settled = false;
1282
1284
  const finish = () => {
@@ -1282,6 +1282,8 @@ class WorkspaceDocumentState {
1282
1282
  const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1283
1283
  if (!state || timeoutMs <= 0)
1284
1284
  return Promise.resolve();
1285
+ if (state.publishGeneration !== snapshot.publishGeneration)
1286
+ return Promise.resolve();
1285
1287
  return new Promise((resolveActivity) => {
1286
1288
  let settled = false;
1287
1289
  const finish = () => {
@@ -1277,6 +1277,8 @@ class WorkspaceDocumentState {
1277
1277
  const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1278
1278
  if (!state || timeoutMs <= 0)
1279
1279
  return Promise.resolve();
1280
+ if (state.publishGeneration !== snapshot.publishGeneration)
1281
+ return Promise.resolve();
1280
1282
  return new Promise((resolveActivity) => {
1281
1283
  let settled = false;
1282
1284
  const finish = () => {
@@ -1771,6 +1771,8 @@ class WorkspaceDocumentState {
1771
1771
  const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1772
1772
  if (!state || timeoutMs <= 0)
1773
1773
  return Promise.resolve();
1774
+ if (state.publishGeneration !== snapshot.publishGeneration)
1775
+ return Promise.resolve();
1774
1776
  return new Promise((resolveActivity) => {
1775
1777
  let settled = false;
1776
1778
  const finish = () => {
@@ -1459,6 +1459,8 @@ class WorkspaceDocumentState {
1459
1459
  const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1460
1460
  if (!state || timeoutMs <= 0)
1461
1461
  return Promise.resolve();
1462
+ if (state.publishGeneration !== snapshot.publishGeneration)
1463
+ return Promise.resolve();
1462
1464
  return new Promise((resolveActivity) => {
1463
1465
  let settled = false;
1464
1466
  const finish = () => {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.0.0-beta.66",
3
+ "version": "5.0.0-beta.68",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",
@@ -8,7 +8,7 @@
8
8
  "command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
9
9
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.0.0-beta.66) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.0.0-beta.68) Checking Bootstrap Provisioning"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-bootstrap",
3
- "version": "5.0.0-beta.66",
3
+ "version": "5.0.0-beta.68",
4
4
  "description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.0.0-beta.66) Checking Comments"
11
+ "statusMessage": "(OmO 5.0.0-beta.68) Checking Comments"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-comment-checker",
3
- "version": "5.0.0-beta.66",
3
+ "version": "5.0.0-beta.68",
4
4
  "description": "Codex plugin that runs comment-checker after edit-like PostToolUse hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
10
10
  "timeout": 5,
11
- "statusMessage": "(OmO 5.0.0-beta.66) Recommending Git Bash MCP"
11
+ "statusMessage": "(OmO 5.0.0-beta.68) Recommending Git Bash MCP"
12
12
  }
13
13
  ]
14
14
  }
@@ -20,7 +20,7 @@
20
20
  "type": "command",
21
21
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
22
22
  "timeout": 5,
23
- "statusMessage": "(OmO 5.0.0-beta.66) Resetting Git Bash MCP Reminder"
23
+ "statusMessage": "(OmO 5.0.0-beta.68) Resetting Git Bash MCP Reminder"
24
24
  }
25
25
  ]
26
26
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-git-bash-hook",
3
- "version": "5.0.0-beta.66",
3
+ "version": "5.0.0-beta.68",
4
4
  "description": "Codex hook component that reminds Windows sessions to prefer the OMO git_bash MCP.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.0.0-beta.66) Verifying LazyCodex Executor Evidence"
11
+ "statusMessage": "(OmO 5.0.0-beta.68) Verifying LazyCodex Executor Evidence"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
3
- "version": "5.0.0-beta.66",
3
+ "version": "5.0.0-beta.68",
4
4
  "description": "Codex SubagentStop evidence verifier for LazyCodex executor completions.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "5.0.0-beta.66",
4
- "inputDigest": "sha256:ca46738d2802527698d576c2fad87a2fd1cc5abd6e5af5b1ad71f554efe17448",
3
+ "version": "5.0.0-beta.68",
4
+ "inputDigest": "sha256:e94fa1eb1e1363a3c1c13ccfeec67863452fdbfcb2ed88d4a2b2e2cb8fe6581f",
5
5
  "outputs": [
6
6
  {
7
7
  "path": "cli.d.ts",
@@ -9,7 +9,7 @@
9
9
  },
10
10
  {
11
11
  "path": "cli.js",
12
- "sha256": "54d3621c04697495054be69fd6328d7b9044034801b295868b23bd92d344a816"
12
+ "sha256": "b8d0f009e0031d015280244ddd2e5abb8db076ffb324c7e500d29d437a345446"
13
13
  },
14
14
  {
15
15
  "path": "codex-hook-cli.d.ts",
@@ -1920,6 +1920,8 @@ class WorkspaceDocumentState {
1920
1920
  const state = this.openByUri.get(normalizeDocumentUri(snapshot.uri));
1921
1921
  if (!state || timeoutMs <= 0)
1922
1922
  return Promise.resolve();
1923
+ if (state.publishGeneration !== snapshot.publishGeneration)
1924
+ return Promise.resolve();
1923
1925
  return new Promise((resolveActivity) => {
1924
1926
  let settled = false;
1925
1927
  const finish = () => {
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 60,
11
- "statusMessage": "(OmO 5.0.0-beta.66) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.0.0-beta.68) Checking LSP Diagnostics"
12
12
  }
13
13
  ]
14
14
  }
@@ -21,7 +21,7 @@
21
21
  "type": "command",
22
22
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
23
23
  "timeout": 5,
24
- "statusMessage": "(OmO 5.0.0-beta.66) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.0.0-beta.68) Resetting LSP Diagnostics Cache"
25
25
  }
26
26
  ]
27
27
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lsp",
3
- "version": "5.0.0-beta.66",
3
+ "version": "5.0.0-beta.68",
4
4
  "description": "Codex plugin that exposes Language Server Protocol tools and post-edit diagnostics.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.66) Loading Project Rules"
10
+ "statusMessage": "(OmO 5.0.0-beta.68) Loading Project Rules"
11
11
  }
12
12
  ]
13
13
  }
@@ -19,7 +19,7 @@
19
19
  "type": "command",
20
20
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
21
21
  "timeout": 10,
22
- "statusMessage": "(OmO 5.0.0-beta.66) Loading Project Rules"
22
+ "statusMessage": "(OmO 5.0.0-beta.68) Loading Project Rules"
23
23
  }
24
24
  ]
25
25
  }
@@ -32,7 +32,7 @@
32
32
  "type": "command",
33
33
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
34
34
  "timeout": 10,
35
- "statusMessage": "(OmO 5.0.0-beta.66) Matching Project Rules"
35
+ "statusMessage": "(OmO 5.0.0-beta.68) Matching Project Rules"
36
36
  }
37
37
  ]
38
38
  }
@@ -45,7 +45,7 @@
45
45
  "type": "command",
46
46
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
47
47
  "timeout": 10,
48
- "statusMessage": "(OmO 5.0.0-beta.66) Resetting Project Rule Cache"
48
+ "statusMessage": "(OmO 5.0.0-beta.68) Resetting Project Rule Cache"
49
49
  }
50
50
  ]
51
51
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-rules",
3
- "version": "5.0.0-beta.66",
3
+ "version": "5.0.0-beta.68",
4
4
  "description": "Codex plugin that injects project rule files into model context through lifecycle hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.0.0-beta.66) Checking Thread Title Hygiene"
11
+ "statusMessage": "(OmO 5.0.0-beta.68) Checking Thread Title Hygiene"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-teammode",
3
- "version": "5.0.0-beta.66",
3
+ "version": "5.0.0-beta.68",
4
4
  "description": "Codex team-mode hook component that keeps background thread titles descriptive after create_thread.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.66) Recording Session Telemetry"
10
+ "statusMessage": "(OmO 5.0.0-beta.68) Recording Session Telemetry"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-telemetry",
3
- "version": "5.0.0-beta.66",
3
+ "version": "5.0.0-beta.68",
4
4
  "description": "Codex plugin component that emits omo-codex anonymous daily-active telemetry on SessionStart.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.66) Checking Ultrawork Trigger"
10
+ "statusMessage": "(OmO 5.0.0-beta.68) Checking Ultrawork Trigger"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ultrawork",
3
- "version": "5.0.0-beta.66",
3
+ "version": "5.0.0-beta.68",
4
4
  "description": "Codex plugin that injects the ultrawork orchestration directive and ships LazyCodex planning, review, QA, and gate agent roles.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ulw-execute-continuation/dist/cli.js\" hook stop",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.66) Checking Ulw-Execute Continuation"
10
+ "statusMessage": "(OmO 5.0.0-beta.68) Checking Ulw-Execute Continuation"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ulw-execute-continuation",
3
- "version": "5.0.0-beta.66",
3
+ "version": "5.0.0-beta.68",
4
4
  "description": "Codex Stop hook continuation injector for omo-codex ulw-execute plans.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -2,6 +2,7 @@
2
2
 
3
3
  ## [0.1.0] - unreleased
4
4
 
5
+ - **Fix:** a `goals.json` written outside the commit log (the removed `omo_agent_toolkit` tool path rewrote it wholesale, never stamping `revision`) no longer loses to an older `revisions/` snapshot when it holds goals that snapshot lacks; the cache wins, is stamped with the snapshot's revision, and the next publish folds it into revision N+1 instead of colliding on an existing record. Raw `ledger.jsonl` lines appended after a published revision are attributed to that revision rather than to the pre-store past a later `ledgerResetRevision` discards. Locked reads and every commit now refuse to rewrite `goals.json` while the reconciled ledger names a `goal_added` goal the projection lacks (`ULW_LOOP_PROJECTION_TRUNCATED`, `details.missingGoalIds`) instead of silently truncating the plan (code-yeongyu/oh-my-openagent#8328).
5
6
  - Status nextActions and missing-plan recovery now follow the calling surface: omo-senpi teaches the eval SDK methods and current attempt directory without asking for a driver snapshot; LazyCodex retains its existing CLI guidance byte-for-byte.
6
7
 
7
8
  - Async `.state.lock` holders now keep their file descriptor open and refresh a 30-second lease through it. An expired lease can be reclaimed even while its process remains alive; sync hooks and older lease-less records retain dead-pid-only ownership. Windows filesystems that refuse unlinking an open lock fail closed. Interrupted kernels can recover after lease expiry without deleting a live owner's lock.
@@ -456,7 +456,28 @@ function reconcilePlan(dir) {
456
456
  }
457
457
  }
458
458
  const latest = readNewestRecord(dir);
459
- return latest !== undefined && latest.revision >= (cached?.revision ?? 0) ? latest.plan : cached;
459
+ if (latest === undefined)
460
+ return cached;
461
+ if (cached === undefined)
462
+ return latest.plan;
463
+ if ((cached.revision ?? 0) > latest.revision)
464
+ return cached;
465
+ if (cached.revision === undefined || cached.revision === latest.revision) {
466
+ const published = new Set(latest.plan.goals.map((goal) => goal.id));
467
+ if (Array.isArray(cached.goals) && cached.goals.some((goal) => !published.has(goal.id)))
468
+ return { ...cached, revision: latest.revision };
469
+ }
470
+ return latest.plan;
471
+ }
472
+ function assertProjectionComplete(plan, ledger) {
473
+ const present = new Set(plan.goals.map((goal) => goal.id));
474
+ const missing = new Set;
475
+ for (const entry of ledger)
476
+ if (entry.kind === "goal_added" && entry.goalId !== undefined && !present.has(entry.goalId))
477
+ missing.add(entry.goalId);
478
+ if (missing.size === 0)
479
+ return;
480
+ throw new UlwLoopError(`Refusing to rewrite goals.json: the ledger records goals the plan projection lacks (${[...missing].join(", ")}). Restore those goals into the newest revisions/ record (keeping plan.revision equal to its file number) before mutating this run.`, "ULW_LOOP_PROJECTION_TRUNCATED", { details: { missingGoalIds: [...missing] } });
460
481
  }
461
482
  function planExists(repoRoot, scope) {
462
483
  const dir = ulwLoopDir(repoRoot, scope);
@@ -467,12 +488,14 @@ function planExists(repoRoot, scope) {
467
488
  function readLedgerAt(dir) {
468
489
  const entries = new Map;
469
490
  const lines = (readOptional(join3(dir, "ledger.jsonl")) ?? "").split(/\r?\n/);
491
+ let reached = 0;
470
492
  for (const [index, line] of lines.entries()) {
471
493
  if (line.trim().length === 0)
472
494
  continue;
473
495
  try {
474
496
  const entry = JSON.parse(line);
475
- entry.revision ??= 0;
497
+ entry.revision = entry.revision || reached;
498
+ reached = Math.max(reached, entry.revision);
476
499
  entry.id ??= `legacy-${index + 1}`;
477
500
  entries.set(entry.id, entry);
478
501
  } catch (error) {
@@ -959,6 +982,7 @@ function viewContents(dir) {
959
982
  if (plan === undefined || readRecords(dir).length === 0)
960
983
  return [];
961
984
  const ledger = readLedgerAt(dir);
985
+ assertProjectionComplete(plan, ledger);
962
986
  const views = [
963
987
  ["goals.json", `${JSON.stringify(plan, null, 2)}
964
988
  `],
@@ -4,12 +4,17 @@ import { readOptional, readRecords, reconcilePlan } from "./plan-log.js";
4
4
  export function readLedgerAt(dir) {
5
5
  const entries = new Map();
6
6
  const lines = (readOptional(join(dir, "ledger.jsonl")) ?? "").split(/\r?\n/);
7
+ // A materialized view is sorted by revision, so a line that carries no revision (or revision 0)
8
+ // AFTER a published revision was appended out-of-band (the removed tool path) and belongs to the
9
+ // newest revision before it - not to the pre-store past a later ledgerResetRevision would discard.
10
+ let reached = 0;
7
11
  for (const [index, line] of lines.entries()) {
8
12
  if (line.trim().length === 0)
9
13
  continue;
10
14
  try {
11
15
  const entry = JSON.parse(line);
12
- entry.revision ??= 0;
16
+ entry.revision = entry.revision || reached;
17
+ reached = Math.max(reached, entry.revision);
13
18
  entry.id ??= `legacy-${index + 1}`;
14
19
  entries.set(entry.id, entry);
15
20
  }
@@ -6,7 +6,7 @@ import { join } from "node:path";
6
6
  import { readLedgerAt } from "./ledger.js";
7
7
  import { ulwLoopDir, ulwLoopStateLockPath } from "./paths.js";
8
8
  import { assertStateLockOwned, migrationEntries } from "./plan-io.js";
9
- import { hasCode, readOptional, readRecords, reconcilePlan } from "./plan-log.js";
9
+ import { assertProjectionComplete, hasCode, readOptional, readRecords, reconcilePlan, } from "./plan-log.js";
10
10
  import { UlwLoopError } from "./types.js";
11
11
  const hooks = new AsyncLocalStorage();
12
12
  export function withCommitHooks(value, fn) {
@@ -72,6 +72,7 @@ function viewContents(dir) {
72
72
  if (plan === undefined || readRecords(dir).length === 0)
73
73
  return [];
74
74
  const ledger = readLedgerAt(dir);
75
+ assertProjectionComplete(plan, ledger);
75
76
  const views = [
76
77
  ["goals.json", `${JSON.stringify(plan, null, 2)}\n`],
77
78
  ["ledger.jsonl", ledger.length === 0 ? "" : `${ledger.map((entry) => JSON.stringify(entry)).join("\n")}\n`],
@@ -1,5 +1,5 @@
1
1
  import { type UlwLoopScope } from "./paths.js";
2
- import type { UlwLoopLedgerEntry, UlwLoopPlan } from "./types.js";
2
+ import { type UlwLoopLedgerEntry, type UlwLoopPlan } from "./types.js";
3
3
  export interface PlanCommitRecord {
4
4
  readonly version: 1;
5
5
  readonly revision: number;
@@ -12,4 +12,5 @@ export declare function logNames(dir: string): string[];
12
12
  export declare function readRecords(dir: string): PlanCommitRecord[];
13
13
  export declare function readNewestRecord(dir: string): PlanCommitRecord | undefined;
14
14
  export declare function reconcilePlan(dir: string): UlwLoopPlan | undefined;
15
+ export declare function assertProjectionComplete(plan: UlwLoopPlan, ledger: readonly UlwLoopLedgerEntry[]): void;
15
16
  export declare function planExists(repoRoot: string, scope?: UlwLoopScope): boolean;