oh-my-opencode 5.0.0-beta.53 → 5.0.0-beta.55

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 (85) hide show
  1. package/.agents/command/publish.md +15 -7
  2. package/.agents/skills/publish/SKILL.md +15 -7
  3. package/.opencode/command/publish.md +15 -7
  4. package/dist/cli/index.js +53 -19
  5. package/dist/cli-node/index.js +53 -19
  6. package/dist/index.js +58 -17
  7. package/dist/tui.js +34 -4
  8. package/package.json +15 -14
  9. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  10. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  11. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  12. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  13. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  14. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  15. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  16. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  17. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  18. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  19. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  20. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  21. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  22. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  23. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  24. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  25. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  26. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  27. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  28. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  29. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  30. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  31. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.d.ts +5 -1
  32. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.js +14 -34
  33. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +1 -4
  34. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +0 -18
  35. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +1 -88
  36. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.d.ts +2 -0
  37. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +10 -3
  38. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-arg-parser.js +2 -2
  39. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +2 -0
  40. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +86 -174
  41. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +2 -18
  42. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +23 -33
  43. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.d.ts +2 -0
  44. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +16 -9
  45. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  46. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  47. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-codex-validation.ts +18 -59
  48. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +1 -6
  49. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +1 -124
  50. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +11 -3
  51. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-arg-parser.ts +10 -4
  52. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +2 -0
  53. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +31 -50
  54. package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +29 -10
  55. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +0 -82
  56. package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint.test.ts +16 -22
  57. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint.test.ts +27 -0
  58. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-json-errors.test.ts +25 -0
  59. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +34 -11
  60. package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +9 -47
  61. package/packages/omo-codex/plugin/components/ulw-loop/test/review-blockers.test.ts +9 -7
  62. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  63. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  64. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  65. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  66. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  67. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  68. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  69. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  70. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  71. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  72. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  73. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  74. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  75. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  76. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  77. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  78. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  79. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  80. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  81. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  82. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  83. package/packages/omo-codex/plugin/package-lock.json +12 -12
  84. package/packages/omo-codex/plugin/package.json +1 -1
  85. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
package/dist/tui.js CHANGED
@@ -68018,7 +68018,7 @@ var init_harness = __esm(() => {
68018
68018
  });
68019
68019
 
68020
68020
  // packages/omo-config-core/src/schema/memory.ts
68021
- var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryRecallSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryRecallLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
68021
+ var OmoMemoryReflectionTriggerSchema, OmoMemoryReflectionSchema, OmoMemorySyncSchema, OmoMemorySearchSchema, OmoMemoryRecallEventCapsSchema, OmoMemoryRecallSchema, OmoMemoryNudgeSchema, OmoMemoryFactsSchema, OmoMemoryDreamSchema, OmoMemoryPeopleSchema, OmoMemorySoulSchema, OmoMemoryWriteNoticeSchema, OmoMemoryReflectionTriggerLayerSchema, OmoMemoryReflectionLayerSchema, OmoMemorySyncLayerSchema, OmoMemorySearchLayerSchema, OmoMemoryRecallEventCapsLayerSchema, OmoMemoryRecallLayerSchema, OmoMemoryNudgeLayerSchema, OmoMemoryFactsLayerSchema, OmoMemoryDreamLayerSchema, OmoMemoryPeopleLayerSchema, OmoMemorySoulLayerSchema, OmoMemoryWriteNoticeLayerSchema, OmoMemoryAgentOverridesSchema, OmoMemorySettingsSchema, OmoMemorySettingsLayerSchema;
68022
68022
  var init_memory = __esm(() => {
68023
68023
  init_zod();
68024
68024
  OmoMemoryReflectionTriggerSchema = object({
@@ -68040,9 +68040,20 @@ var init_memory = __esm(() => {
68040
68040
  OmoMemorySearchSchema = object({
68041
68041
  enabled: boolean2().default(true)
68042
68042
  }).strict();
68043
+ OmoMemoryRecallEventCapsSchema = object({
68044
+ tool_args: number2().int().nonnegative().default(400),
68045
+ result_head: number2().int().nonnegative().default(600),
68046
+ assistant: number2().int().nonnegative().default(1500),
68047
+ prompt: number2().int().nonnegative().default(4000)
68048
+ }).strict();
68043
68049
  OmoMemoryRecallSchema = object({
68044
68050
  enabled: boolean2().default(true),
68045
- max_items: number2().int().min(1).max(5).default(2)
68051
+ max_items: number2().int().min(1).max(5).default(2),
68052
+ category: string2().min(1).default("quick"),
68053
+ event_caps: OmoMemoryRecallEventCapsSchema.default({ tool_args: 400, result_head: 600, assistant: 1500, prompt: 4000 }),
68054
+ sidecar_max_tokens: number2().int().positive().default(48000),
68055
+ max_concurrent_wakes: number2().int().positive().default(2),
68056
+ tool_budget: number2().int().positive().default(8)
68046
68057
  }).strict();
68047
68058
  OmoMemoryNudgeSchema = object({
68048
68059
  enabled: boolean2().default(true),
@@ -68090,9 +68101,20 @@ var init_memory = __esm(() => {
68090
68101
  OmoMemorySearchLayerSchema = object({
68091
68102
  enabled: boolean2().optional()
68092
68103
  }).strict();
68104
+ OmoMemoryRecallEventCapsLayerSchema = object({
68105
+ tool_args: number2().int().nonnegative().optional(),
68106
+ result_head: number2().int().nonnegative().optional(),
68107
+ assistant: number2().int().nonnegative().optional(),
68108
+ prompt: number2().int().nonnegative().optional()
68109
+ }).strict();
68093
68110
  OmoMemoryRecallLayerSchema = object({
68094
68111
  enabled: boolean2().optional(),
68095
- max_items: number2().int().min(1).max(5).optional()
68112
+ max_items: number2().int().min(1).max(5).optional(),
68113
+ category: string2().min(1).optional(),
68114
+ event_caps: OmoMemoryRecallEventCapsLayerSchema.optional(),
68115
+ sidecar_max_tokens: number2().int().positive().optional(),
68116
+ max_concurrent_wakes: number2().int().positive().optional(),
68117
+ tool_budget: number2().int().positive().optional()
68096
68118
  }).strict();
68097
68119
  OmoMemoryNudgeLayerSchema = object({
68098
68120
  enabled: boolean2().optional(),
@@ -68162,7 +68184,15 @@ var init_memory = __esm(() => {
68162
68184
  write_notice: OmoMemoryWriteNoticeSchema.default({ enabled: true }),
68163
68185
  sync: OmoMemorySyncSchema.default({ enabled: true }),
68164
68186
  search: OmoMemorySearchSchema.default({ enabled: true }),
68165
- recall: OmoMemoryRecallSchema.default({ enabled: true, max_items: 2 }),
68187
+ recall: OmoMemoryRecallSchema.default({
68188
+ enabled: true,
68189
+ max_items: 2,
68190
+ category: "quick",
68191
+ event_caps: { tool_args: 400, result_head: 600, assistant: 1500, prompt: 4000 },
68192
+ sidecar_max_tokens: 48000,
68193
+ max_concurrent_wakes: 2,
68194
+ tool_budget: 8
68195
+ }),
68166
68196
  compile_warn_tokens: number2().int().positive().default(30000),
68167
68197
  agents: record(string2(), OmoMemoryAgentOverridesSchema).default({})
68168
68198
  }).strict();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "5.0.0-beta.53",
3
+ "version": "5.0.0-beta.55",
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",
@@ -138,6 +138,7 @@
138
138
  "typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/ast-grep-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/omo-config-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/memory-core/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && tsgo --noEmit -p packages/senpi-task/tsconfig.json && tsgo --noEmit -p packages/pi-goal/tsconfig.json && tsgo --noEmit -p packages/pi-webfetch/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json && tsgo --noEmit -p packages/omo-native/tsconfig.json",
139
139
  "typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
140
140
  "test": "bun test --timeout 20000",
141
+ "changelog:section": "bun script/changelog-section.ts",
141
142
  "test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && npm --prefix packages/omo-codex/plugin/components/ulw-loop test && bun run --cwd packages/omo-codex/plugin build && node scripts/check-third-party-notices.mjs --ship && bun test --timeout 20000 packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
142
143
  "test:fast": "bun run script/test-fast.ts",
143
144
  "test:senpi": "bun run build:senpi-plugin && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && bun test --timeout 20000 packages/omo-senpi && bun test ./.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs",
@@ -184,7 +185,7 @@
184
185
  "zod": "^4.4.3"
185
186
  },
186
187
  "devDependencies": {
187
- "@code-yeongyu/senpi": "2026.9.10-2",
188
+ "@code-yeongyu/senpi": "2026.9.11",
188
189
  "@oh-my-opencode/agents-md-core": "workspace:*",
189
190
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
190
191
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -225,18 +226,18 @@
225
226
  "typescript": "^7.0.2"
226
227
  },
227
228
  "optionalDependencies": {
228
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.53",
229
- "oh-my-opencode-darwin-x64": "5.0.0-beta.53",
230
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.53",
231
- "oh-my-opencode-linux-arm64": "5.0.0-beta.53",
232
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.53",
233
- "oh-my-opencode-linux-x64": "5.0.0-beta.53",
234
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.53",
235
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.53",
236
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.53",
237
- "oh-my-opencode-windows-arm64": "5.0.0-beta.53",
238
- "oh-my-opencode-windows-x64": "5.0.0-beta.53",
239
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.53"
229
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.55",
230
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.55",
231
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.55",
232
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.55",
233
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.55",
234
+ "oh-my-opencode-linux-x64": "5.0.0-beta.55",
235
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.55",
236
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.55",
237
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.55",
238
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.55",
239
+ "oh-my-opencode-windows-x64": "5.0.0-beta.55",
240
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.55"
240
241
  },
241
242
  "overrides": {
242
243
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.0.0-beta.53",
3
+ "version": "5.0.0-beta.55",
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.53) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.0.0-beta.55) 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.53",
3
+ "version": "5.0.0-beta.55",
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.53) Checking Comments"
11
+ "statusMessage": "(OmO 5.0.0-beta.55) 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.53",
3
+ "version": "5.0.0-beta.55",
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.53) Recommending Git Bash MCP"
11
+ "statusMessage": "(OmO 5.0.0-beta.55) 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.53) Resetting Git Bash MCP Reminder"
23
+ "statusMessage": "(OmO 5.0.0-beta.55) 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.53",
3
+ "version": "5.0.0-beta.55",
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.53) Verifying LazyCodex Executor Evidence"
11
+ "statusMessage": "(OmO 5.0.0-beta.55) 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.53",
3
+ "version": "5.0.0-beta.55",
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.53",
4
- "inputDigest": "sha256:f202c8adb130249d2a7745db228ccd528b47f0cfeaeb5db5c99ab13d9b76af00",
3
+ "version": "5.0.0-beta.55",
4
+ "inputDigest": "sha256:905ced446a06d5fb3a4a193745ebd9539de050fab9cfe3b582c203c50785723f",
5
5
  "outputs": [
6
6
  {
7
7
  "path": "cli.d.ts",
@@ -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.53) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.0.0-beta.55) 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.53) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.0.0-beta.55) 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.53",
3
+ "version": "5.0.0-beta.55",
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.53) Loading Project Rules"
10
+ "statusMessage": "(OmO 5.0.0-beta.55) 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.53) Loading Project Rules"
22
+ "statusMessage": "(OmO 5.0.0-beta.55) 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.53) Matching Project Rules"
35
+ "statusMessage": "(OmO 5.0.0-beta.55) 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.53) Resetting Project Rule Cache"
48
+ "statusMessage": "(OmO 5.0.0-beta.55) 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.53",
3
+ "version": "5.0.0-beta.55",
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.53) Checking Thread Title Hygiene"
11
+ "statusMessage": "(OmO 5.0.0-beta.55) 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.53",
3
+ "version": "5.0.0-beta.55",
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.53) Recording Session Telemetry"
10
+ "statusMessage": "(OmO 5.0.0-beta.55) 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.53",
3
+ "version": "5.0.0-beta.55",
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.53) Checking Ultrawork Trigger"
10
+ "statusMessage": "(OmO 5.0.0-beta.55) 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.53",
3
+ "version": "5.0.0-beta.55",
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.53) Checking Ulw-Execute Continuation"
10
+ "statusMessage": "(OmO 5.0.0-beta.55) 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.53",
3
+ "version": "5.0.0-beta.55",
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",
@@ -8,5 +8,9 @@ export declare function validateCheckpointCodexGoal(input: {
8
8
  readonly raw: string | undefined;
9
9
  readonly evidence: string;
10
10
  readonly scope?: UlwLoopScope;
11
- }): Promise<unknown>;
11
+ }): Promise<{
12
+ readonly raw: unknown;
13
+ readonly nextActions: readonly string[];
14
+ readonly warnings: readonly string[];
15
+ }>;
12
16
  export declare function combineCheckpointValidationErrors(codexError: UlwLoopError, gateError: UlwLoopError): UlwLoopError;
@@ -1,42 +1,22 @@
1
- import { canReconcileActiveFinalTaskScopedAggregateSnapshot, canReconcileCompletedTaskScopedAggregateSnapshot, codexSnapshotMismatchError, } from "./checkpoint-reconciliation.js";
2
- import { readCodexGoalSnapshotInput, reconcileCodexGoalSnapshot } from "./codex-goal-snapshot.js";
3
- import { codexGoalMode, compatibleCodexObjectives, expectedCodexObjective, isFinalRunCompletionCandidate, } from "./goal-status.js";
1
+ import { CodexGoalSnapshotError, formatCodexGoalReconciliation, readCodexGoalSnapshotInput, reconcileCodexGoalSnapshot, } from "./codex-goal-snapshot.js";
2
+ import { codexGoalMode, compatibleCodexObjectives, expectedCodexObjective } from "./goal-status.js";
4
3
  import { UlwLoopError } from "./types.js";
5
- function normalizeObjective(value) {
6
- return value.replace(/\s+/g, " ").trim();
7
- }
8
4
  export async function validateCheckpointCodexGoal(input) {
9
- const aggregate = codexGoalMode(input.plan) === "aggregate";
10
- const final = isFinalRunCompletionCandidate(input.plan, input.goal);
11
5
  const snapshot = await readCodexGoalSnapshotInput(input.raw, input.repoRoot);
12
- const expectedObjective = expectedCodexObjective(input.plan, input.goal);
6
+ const expected = expectedCodexObjective(input.plan, input.goal);
13
7
  const reconciliation = reconcileCodexGoalSnapshot(snapshot, {
14
- expectedObjective,
15
- ...(aggregate ? { acceptedObjectives: compatibleCodexObjectives(input.plan) } : {}),
16
- allowedStatuses: aggregate ? (final ? ["complete"] : ["active"]) : ["complete"],
17
- requireSnapshot: true,
18
- requireComplete: !aggregate || final,
19
- });
20
- if (reconciliation.ok)
21
- return reconciliation.snapshot.raw;
22
- const objective = snapshot?.objective;
23
- const mismatchedTaskObjective = snapshot?.available === true &&
24
- objective !== undefined &&
25
- normalizeObjective(objective) !== normalizeObjective(expectedObjective);
26
- const completedTaskScoped = mismatchedTaskObjective &&
27
- snapshot.status === "complete" &&
28
- (await canReconcileCompletedTaskScopedAggregateSnapshot(input.repoRoot, input.plan, input.goal, objective, input.evidence, input.scope));
29
- const activeFinalTaskScoped = mismatchedTaskObjective &&
30
- snapshot.status === "active" &&
31
- (await canReconcileActiveFinalTaskScopedAggregateSnapshot(input.repoRoot, input.plan, input.goal, objective, input.evidence, input.scope));
32
- if (completedTaskScoped || activeFinalTaskScoped)
33
- return reconciliation.snapshot.raw;
34
- throw codexSnapshotMismatchError({
35
- reconciliation,
36
- snapshot,
37
- expectedObjective,
38
- taskScopedHint: { goal: input.goal, aggregate, final },
8
+ expectedObjective: expected,
9
+ ...(codexGoalMode(input.plan) === "aggregate"
10
+ ? { acceptedObjectives: compatibleCodexObjectives(input.plan) }
11
+ : {}),
39
12
  });
13
+ if (!reconciliation.ok)
14
+ throw new CodexGoalSnapshotError(formatCodexGoalReconciliation(reconciliation));
15
+ return {
16
+ raw: snapshot?.raw,
17
+ nextActions: reconciliation.warnings,
18
+ warnings: reconciliation.warnings.filter((warning) => warning.startsWith("driver_objective_differs")),
19
+ };
40
20
  }
41
21
  export function combineCheckpointValidationErrors(codexError, gateError) {
42
22
  return new UlwLoopError(`${codexError.message}\n${gateError.message}`, "ULW_LOOP_QUALITY_GATE_INVALID", {
@@ -27,10 +27,7 @@ export async function checkpoint(repoRoot, argv, json, scope) {
27
27
  const goalId = required(argv, "--goal-id");
28
28
  const statusValue = checkpointStatus(required(argv, "--status"));
29
29
  const evidence = required(argv, "--evidence");
30
- const codexGoalJson = await parseCodexGoalJson(statusValue === "complete" ? required(argv, "--codex-goal-json") : readValue(argv, "--codex-goal-json"));
31
- if (statusValue === "complete" && codexGoalJson === undefined) {
32
- throw new UlwLoopError("Missing --codex-goal-json.", "ULW_LOOP_CODEX_GOAL_JSON_REQUIRED");
33
- }
30
+ const codexGoalJson = await parseCodexGoalJson(readValue(argv, "--codex-goal-json"));
34
31
  const qualityGateJson = readValue(argv, "--quality-gate-json");
35
32
  const args = {
36
33
  goalId,
@@ -1,20 +1,2 @@
1
- import type { CodexGoalReconciliation, CodexGoalSnapshot } from "./codex-goal-snapshot.js";
2
- import { type UlwLoopScope } from "./paths.js";
3
- import type { UlwLoopItem, UlwLoopPlan } from "./types.js";
4
1
  import { UlwLoopError } from "./types.js";
5
- export interface CodexSnapshotMismatchInput {
6
- readonly reconciliation: CodexGoalReconciliation;
7
- readonly snapshot: CodexGoalSnapshot | null | undefined;
8
- readonly expectedObjective: string;
9
- /** Only the checkpoint path can fall back to task-scoped aggregate reconciliation, so only it asks for that hint. */
10
- readonly taskScopedHint?: {
11
- readonly goal: UlwLoopItem;
12
- readonly aggregate: boolean;
13
- readonly final: boolean;
14
- };
15
- }
16
2
  export declare function combineCheckpointValidationErrors(codexError: UlwLoopError, gateError: UlwLoopError): UlwLoopError;
17
- export declare function codexSnapshotMismatchError(input: CodexSnapshotMismatchInput): UlwLoopError;
18
- export declare function canReconcileCompletedTaskScopedAggregateSnapshot(repoRoot: string, plan: UlwLoopPlan, goal: UlwLoopItem, snapshotObjective: string, evidence: string, scope?: UlwLoopScope): Promise<boolean>;
19
- export declare function canReconcileActiveFinalTaskScopedAggregateSnapshot(repoRoot: string, plan: UlwLoopPlan, goal: UlwLoopItem, snapshotObjective: string, evidence: string, scope?: UlwLoopScope): Promise<boolean>;
20
- export declare function buildTaskScopedAggregateReconciliationHint(goal: UlwLoopItem, final: boolean): string;
@@ -1,93 +1,6 @@
1
- import { existsSync } from "node:fs";
2
- import { readFile } from "node:fs/promises";
3
- import { codexGoalMismatchRecovery, formatCodexGoalReconciliation } from "./codex-goal-snapshot.js";
4
- import { codexGoalMode, isFinalRunCompletionCandidate } from "./goal-status.js";
5
- import { ulwLoopBriefPath } from "./paths.js";
6
- import { ULW_LOOP_DIR, ULW_LOOP_GOALS, ULW_LOOP_LEDGER, UlwLoopError } from "./types.js";
1
+ import { UlwLoopError } from "./types.js";
7
2
  export function combineCheckpointValidationErrors(codexError, gateError) {
8
3
  return new UlwLoopError(`${codexError.message}\n${gateError.message}`, "ULW_LOOP_QUALITY_GATE_INVALID", {
9
4
  details: { ...(codexError.details ?? {}), ...(gateError.details ?? {}) },
10
5
  });
11
6
  }
12
- export function codexSnapshotMismatchError(input) {
13
- const { reconciliation, snapshot, taskScopedHint } = input;
14
- const hint = taskScopedHint?.aggregate === true && snapshot?.status === "complete" && snapshot.objective !== undefined
15
- ? buildTaskScopedAggregateReconciliationHint(taskScopedHint.goal, taskScopedHint.final)
16
- : "";
17
- const recovery = codexGoalMismatchRecovery(input.expectedObjective, snapshot);
18
- return new UlwLoopError(`${formatCodexGoalReconciliation(reconciliation)}${hint}\n${recovery.message}`, "ulw_loop_codex_snapshot_mismatch", { details: recovery.details });
19
- }
20
- function normalizeObjective(value) {
21
- return value.replace(/\s+/g, " ").trim();
22
- }
23
- function textMentionsUlwLoopPlanArtifact(value) {
24
- const normalized = (value ?? "").toLowerCase();
25
- return (normalized.includes(ULW_LOOP_DIR.toLowerCase()) ||
26
- normalized.includes(ULW_LOOP_GOALS.toLowerCase()) ||
27
- normalized.includes(ULW_LOOP_LEDGER.toLowerCase()));
28
- }
29
- function textMentionsGoalId(value, goalId) {
30
- return (value ?? "").toLowerCase().includes(goalId.toLowerCase());
31
- }
32
- function textHasCompletionValidationEvidence(value) {
33
- const normalized = (value ?? "").toLowerCase();
34
- const done = /\b(?:planned work|implementation|deliverables?|scope|task|work)\b/.test(normalized) &&
35
- /\b(?:done|complete|completed|finished|shipped)\b/.test(normalized);
36
- const verified = /\b(?:validation|verification|tests?|build|lint|review|quality gate|code-review)\b/.test(normalized) &&
37
- /\b(?:passed|complete|completed|clean|green|approve|approved|clear)\b/.test(normalized);
38
- return done && verified;
39
- }
40
- async function snapshotObjectiveMapsToUlwLoopPlan(repoRoot, snapshotObjective, scope) {
41
- const actual = normalizeObjective(snapshotObjective).toLowerCase();
42
- if (textMentionsUlwLoopPlanArtifact(actual))
43
- return true;
44
- if (actual.length < 24 || !existsSync(ulwLoopBriefPath(repoRoot, scope)))
45
- return false;
46
- try {
47
- const brief = normalizeObjective(await readFile(ulwLoopBriefPath(repoRoot, scope), "utf8")).toLowerCase();
48
- return brief.length >= 24 && (brief.includes(actual) || actual.includes(brief));
49
- }
50
- catch (error) {
51
- if (error instanceof Error)
52
- return false;
53
- throw error;
54
- }
55
- }
56
- export async function canReconcileCompletedTaskScopedAggregateSnapshot(repoRoot, plan, goal, snapshotObjective, evidence, scope) {
57
- if (codexGoalMode(plan) !== "aggregate")
58
- return false;
59
- if (goal.status !== "in_progress" || plan.activeGoalId !== goal.id)
60
- return false;
61
- if (isFinalRunCompletionCandidate(plan, goal)) {
62
- return snapshotObjectiveMapsToUlwLoopPlan(repoRoot, snapshotObjective, scope);
63
- }
64
- if (!textMentionsUlwLoopPlanArtifact(evidence) || !textMentionsGoalId(evidence, goal.id))
65
- return false;
66
- if (!textHasCompletionValidationEvidence(evidence))
67
- return false;
68
- return snapshotObjectiveMapsToUlwLoopPlan(repoRoot, snapshotObjective, scope);
69
- }
70
- export async function canReconcileActiveFinalTaskScopedAggregateSnapshot(repoRoot, plan, goal, snapshotObjective, evidence, scope) {
71
- if (codexGoalMode(plan) !== "aggregate")
72
- return false;
73
- if (goal.status !== "in_progress" || plan.activeGoalId !== goal.id)
74
- return false;
75
- if (!isFinalRunCompletionCandidate(plan, goal))
76
- return false;
77
- if (!textHasCompletionValidationEvidence(evidence))
78
- return false;
79
- return snapshotObjectiveMapsToUlwLoopPlan(repoRoot, snapshotObjective, scope);
80
- }
81
- function buildCompletedLegacyGoalRemediation(goal) {
82
- return [
83
- "If get_goal returns a different completed legacy/thread objective, do not repeat --status complete in this thread.",
84
- `Record a non-terminal blocker with: omo-agent-toolkit ulw-loop checkpoint --goal-id ${goal.id} --status blocked --evidence "<completed legacy Codex goal blocks create_goal in this thread>" --codex-goal-json "<different completed get_goal JSON or path>".`,
85
- "Then continue only from a Codex goal context with no active/completed conflicting goal, in the same repo/worktree, and create the intended goal there.",
86
- ].join(" ");
87
- }
88
- export function buildTaskScopedAggregateReconciliationHint(goal, final) {
89
- if (final) {
90
- return ` Final task-scoped aggregate reconciliation requires the checkpoint goal to be the active in-progress final OMO goal and the completed get_goal objective to map to the ulw-loop brief or artifact. ${buildCompletedLegacyGoalRemediation(goal)}`;
91
- }
92
- return ` Completed task-scoped aggregate reconciliation requires the checkpoint goal to be the active in-progress OMO goal, evidence that names that active OMO goal id, names .omo/ulw-loop/goals.json or ledger.jsonl, includes completed implementation plus validation/review evidence, and a get_goal objective that maps to the ulw-loop brief/artifact. ${buildCompletedLegacyGoalRemediation(goal)}`;
93
- }
@@ -12,5 +12,7 @@ export interface CheckpointUlwLoopResult {
12
12
  readonly goal: UlwLoopItem;
13
13
  readonly ledgerEntry: UlwLoopLedgerEntry;
14
14
  readonly aggregateCompletion?: UlwLoopAggregateCompletion;
15
+ readonly nextActions: readonly string[];
16
+ readonly warnings: readonly string[];
15
17
  }
16
18
  export declare function checkpointUlwLoop(repoRoot: string, args: CheckpointUlwLoopArgs, scope?: UlwLoopScope): Promise<CheckpointUlwLoopResult>;