lazycodex-ai 5.0.1 → 5.1.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 (79) hide show
  1. package/README.ja.md +2 -1
  2. package/README.ko.md +2 -1
  3. package/README.md +2 -1
  4. package/README.ru.md +2 -1
  5. package/README.zh-cn.md +2 -1
  6. package/dist/cli/index.js +241 -144
  7. package/dist/cli-node/index.js +241 -144
  8. package/package.json +6 -1
  9. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  10. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +26 -3
  11. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  12. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  13. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  14. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  15. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  16. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  17. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  18. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  19. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  20. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  21. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  22. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  23. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  24. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  25. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  26. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  27. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  28. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  29. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  30. package/packages/omo-codex/plugin/components/ulw-execute-continuation/AGENTS.md +1 -1
  31. package/packages/omo-codex/plugin/components/ulw-execute-continuation/dist/cli.js +42 -32
  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-execute-continuation/src/plan-checklist.ts +55 -29
  35. package/packages/omo-codex/plugin/components/ulw-execute-continuation/test/boulder-reader.test.ts +51 -0
  36. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  37. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  38. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  39. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  40. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  41. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  42. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  43. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  44. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  45. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  46. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  47. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  48. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  54. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  59. package/packages/omo-codex/plugin/package-lock.json +12 -12
  60. package/packages/omo-codex/plugin/package.json +1 -1
  61. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
  62. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +1 -1
  63. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/aside_scanner.py +3 -0
  64. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +4 -0
  65. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +6 -2
  66. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +7 -1
  67. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +3 -1
  68. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/types.py +3 -1
  69. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/find-agent-sessions.py +4 -0
  70. package/packages/omo-codex/scripts/install-dist/install-local.mjs +37 -14
  71. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
  72. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +1 -1
  73. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/aside_scanner.py +3 -0
  74. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +4 -0
  75. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +6 -2
  76. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +7 -1
  77. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +3 -1
  78. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/types.py +3 -1
  79. package/packages/shared-skills/skills/coding-agent-sessions/scripts/find-agent-sessions.py +4 -0
@@ -11,17 +11,31 @@ const TODO_HEADING_PATTERN = /^##[ \t]+TODOs(?:[ \t]+#+)?[ \t]*$/i;
11
11
  const FINAL_VERIFICATION_HEADING_PATTERN = /^##[ \t]+Final Verification Wave(?:[ \t]+#+)?[ \t]*$/i;
12
12
  const SECTION_BOUNDARY_HEADING_PATTERN = /^#{1,2}(?:[ \t]+|$)/;
13
13
  const FENCE_PATTERN = /^[ \t]{0,3}(`{3,}|~{3,})(.*)$/;
14
- const SIMPLE_CHECKBOX_PATTERN = /^[-*][ \t]*\[[ \t]*([xX]?)[ \t]*\][ \t]+(.+)$/;
15
- const TODO_CHECKBOX_PATTERN = /^- \[([ xX])\] ([1-9]\d*\. .+)$/;
16
- const FINAL_WAVE_CHECKBOX_PATTERN = /^- \[([ xX])\] (F[1-9]\d*\. .+)$/i;
14
+ const SIMPLE_CHECKBOX_PATTERN = /^[-*][ \t]*\[[ \t]*([xX~]?)[ \t]*\][ \t]+(.+)$/;
15
+ const STRUCTURED_CHECKBOX_PATTERN = /^- \[([ xX~])\] (.+)$/;
16
+ const TODO_TASK_LABEL_PATTERN =
17
+ /^([1-9]\d*|T[1-9]\d*(?:\.[1-9]\d*[a-z]?)?)(?:\.[ \t]+|[ \t]+(?:[-\u2014][ \t]+)?)(.+)$/i;
18
+ const FINAL_WAVE_TASK_LABEL_PATTERN =
19
+ /^([FH][1-9]\d*(?:\.[1-9]\d*[a-z]?)?)(?:\.[ \t]+|[ \t]+(?:[-\u2014][ \t]+)?)(.+)$/i;
17
20
 
18
21
  type ChecklistSection = "todo" | "final-wave" | "other";
19
22
 
23
+ // Mirrors @oh-my-opencode/boulder-state's plan grammar: `[~]` marks a blocked task that counts toward
24
+ // the total but is neither completed nor remaining work.
25
+ type CheckboxStatus = "open" | "done" | "in-progress";
26
+
20
27
  type ParsedCheckbox = {
21
- readonly checked: boolean;
28
+ readonly status: CheckboxStatus;
22
29
  readonly label: string;
23
30
  };
24
31
 
32
+ type ChecklistCounter = {
33
+ completed: number;
34
+ remaining: number;
35
+ total: number;
36
+ nextTaskLabel: string | null;
37
+ };
38
+
25
39
  type MarkdownFence = {
26
40
  readonly marker: "`" | "~";
27
41
  readonly length: number;
@@ -42,9 +56,8 @@ export function parsePlanChecklist(markdown: string): PlanChecklist {
42
56
  const lines = markdown.split(/\r?\n/);
43
57
  if (!hasStructuredSection(lines)) return parseSimpleChecklist(lines);
44
58
 
45
- let completed = 0;
46
- let remaining = 0;
47
- let nextTaskLabel: string | null = null;
59
+ const counter = emptyCounter();
60
+ let hasUntrackedTopLevelCheckbox = false;
48
61
  let section: ChecklistSection = "other";
49
62
  let fence: MarkdownFence | null = null;
50
63
 
@@ -63,18 +76,32 @@ export function parsePlanChecklist(markdown: string): PlanChecklist {
63
76
  section = parseStructuredSectionHeading(line);
64
77
  continue;
65
78
  }
66
- if (section === "other") continue;
79
+ if (section === "other") {
80
+ if (parseSimpleTopLevelCheckbox(line) !== null) hasUntrackedTopLevelCheckbox = true;
81
+ continue;
82
+ }
67
83
 
68
84
  const checkbox = parseStructuredCheckbox(line, section);
69
- if (checkbox === null) continue;
70
- if (checkbox.checked) completed += 1;
71
- else {
72
- remaining += 1;
73
- nextTaskLabel = nextTaskLabel ?? checkbox.label;
74
- }
85
+ if (checkbox !== null) countCheckbox(counter, checkbox);
75
86
  }
76
87
 
77
- return { completed, remaining, total: completed + remaining, nextTaskLabel };
88
+ // Canonical headings that hold only template text while the real rows live under another heading
89
+ // would otherwise count nothing; fall back to every top-level checkbox in that case.
90
+ if (counter.total === 0 && hasUntrackedTopLevelCheckbox) return parseSimpleChecklist(lines);
91
+ return { ...counter };
92
+ }
93
+
94
+ function emptyCounter(): ChecklistCounter {
95
+ return { completed: 0, remaining: 0, total: 0, nextTaskLabel: null };
96
+ }
97
+
98
+ function countCheckbox(counter: ChecklistCounter, checkbox: ParsedCheckbox): void {
99
+ counter.total += 1;
100
+ if (checkbox.status === "done") counter.completed += 1;
101
+ else if (checkbox.status === "open") {
102
+ counter.remaining += 1;
103
+ counter.nextTaskLabel = counter.nextTaskLabel ?? checkbox.label;
104
+ }
78
105
  }
79
106
 
80
107
  function hasStructuredSection(lines: readonly string[]): boolean {
@@ -95,9 +122,7 @@ function hasStructuredSection(lines: readonly string[]): boolean {
95
122
  }
96
123
 
97
124
  function parseSimpleChecklist(lines: readonly string[]): PlanChecklist {
98
- let completed = 0;
99
- let remaining = 0;
100
- let nextTaskLabel: string | null = null;
125
+ const counter = emptyCounter();
101
126
  let fence: MarkdownFence | null = null;
102
127
 
103
128
  for (const line of lines) {
@@ -112,15 +137,10 @@ function parseSimpleChecklist(lines: readonly string[]): PlanChecklist {
112
137
  }
113
138
 
114
139
  const checkbox = parseSimpleTopLevelCheckbox(line);
115
- if (checkbox === null) continue;
116
- if (checkbox.checked) completed += 1;
117
- else {
118
- remaining += 1;
119
- nextTaskLabel = nextTaskLabel ?? checkbox.label;
120
- }
140
+ if (checkbox !== null) countCheckbox(counter, checkbox);
121
141
  }
122
142
 
123
- return { completed, remaining, total: completed + remaining, nextTaskLabel };
143
+ return { ...counter };
124
144
  }
125
145
 
126
146
  function parseStructuredSectionHeading(line: string): ChecklistSection {
@@ -130,12 +150,13 @@ function parseStructuredSectionHeading(line: string): ChecklistSection {
130
150
  }
131
151
 
132
152
  function parseStructuredCheckbox(line: string, section: "todo" | "final-wave"): ParsedCheckbox | null {
133
- const pattern = section === "todo" ? TODO_CHECKBOX_PATTERN : FINAL_WAVE_CHECKBOX_PATTERN;
134
- const match = line.match(pattern);
153
+ const match = line.match(STRUCTURED_CHECKBOX_PATTERN);
135
154
  const marker = match?.[1];
136
155
  const label = match?.[2];
137
156
  if (marker === undefined || label === undefined) return null;
138
- return { checked: marker.toLowerCase() === "x", label };
157
+ const labelPattern = section === "todo" ? TODO_TASK_LABEL_PATTERN : FINAL_WAVE_TASK_LABEL_PATTERN;
158
+ if (!labelPattern.test(label)) return null;
159
+ return { status: parseCheckboxStatus(marker), label };
139
160
  }
140
161
 
141
162
  function parseSimpleTopLevelCheckbox(line: string): ParsedCheckbox | null {
@@ -143,7 +164,12 @@ function parseSimpleTopLevelCheckbox(line: string): ParsedCheckbox | null {
143
164
  const marker = match?.[1];
144
165
  const label = match?.[2];
145
166
  if (marker === undefined || label === undefined) return null;
146
- return { checked: marker.toLowerCase() === "x", label };
167
+ return { status: parseCheckboxStatus(marker), label };
168
+ }
169
+
170
+ function parseCheckboxStatus(marker: string): CheckboxStatus {
171
+ if (marker.toLowerCase() === "x") return "done";
172
+ return marker === "~" ? "in-progress" : "open";
147
173
  }
148
174
 
149
175
  function parseOpeningFence(line: string): MarkdownFence | null {
@@ -64,6 +64,57 @@ describe("ulw-execute plan checklist consumption", () => {
64
64
  expect(checklist).toEqual({ completed: 1, remaining: 2, total: 3, nextTaskLabel: "1. Build hook" });
65
65
  });
66
66
 
67
+ it("#given T, F and H task IDs and blocked rows #when parsed #then they count like the shared boulder-state parser", () => {
68
+ // given
69
+ const planPath = createPlan(
70
+ [
71
+ "## TODOs",
72
+ "- [x] T1.1 Completed implementation",
73
+ "- [~] T1.2 \u2014 Blocked on a user decision",
74
+ "- [ ] T6.3a Remaining implementation",
75
+ "## Final Verification Wave",
76
+ "- [ ] F1 \u2014 Plan compliance audit",
77
+ "- [x] H1 \u2014 User approval",
78
+ ].join("\n"),
79
+ );
80
+
81
+ // when
82
+ const checklist = getPlanChecklist(planPath);
83
+
84
+ // then
85
+ expect(checklist).toEqual({
86
+ completed: 2,
87
+ remaining: 2,
88
+ total: 5,
89
+ nextTaskLabel: "T6.3a Remaining implementation",
90
+ });
91
+ });
92
+
93
+ it("#given template-only counted sections and rows under another heading #when parsed #then top-level rows are counted", () => {
94
+ // given
95
+ const planPath = createPlan(
96
+ [
97
+ "## TODOs",
98
+ "Template task guidance.",
99
+ "## Progress Tracker",
100
+ "- [x] T1.1 \u2014 Schema",
101
+ "- [~] T5.1 \u2014 Verification engine \u2014 BLOCKED: user decision",
102
+ "- [ ] F5 \u2014 Delta verification",
103
+ ].join("\n"),
104
+ );
105
+
106
+ // when
107
+ const checklist = getPlanChecklist(planPath);
108
+
109
+ // then
110
+ expect(checklist).toEqual({
111
+ completed: 1,
112
+ remaining: 1,
113
+ total: 3,
114
+ nextTaskLabel: "F5 \u2014 Delta verification",
115
+ });
116
+ });
117
+
67
118
  it("#given all top-level tasks complete #when parsed #then next task is null", () => {
68
119
  // given
69
120
  const planPath = createPlan(
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit --with-ultrawork",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.1) Checking Ulw-Loop Steering"
10
+ "statusMessage": "(OmO 5.1.0) Checking Ulw-Loop Steering"
11
11
  }
12
12
  ]
13
13
  }
@@ -20,7 +20,7 @@
20
20
  "type": "command",
21
21
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use-spawn",
22
22
  "timeout": 5,
23
- "statusMessage": "(OmO 5.0.1) Recording Spawn Admission"
23
+ "statusMessage": "(OmO 5.1.0) Recording Spawn Admission"
24
24
  }
25
25
  ]
26
26
  }
@@ -33,7 +33,7 @@
33
33
  "type": "command",
34
34
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
35
35
  "timeout": 5,
36
- "statusMessage": "(OmO 5.0.1) Enforcing Unlimited Ulw-Loop Budget"
36
+ "statusMessage": "(OmO 5.1.0) Enforcing Unlimited Ulw-Loop Budget"
37
37
  }
38
38
  ]
39
39
  },
@@ -44,7 +44,7 @@
44
44
  "type": "command",
45
45
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use-spawn",
46
46
  "timeout": 5,
47
- "statusMessage": "(OmO 5.0.1) Guarding Ulw-Loop Spawns"
47
+ "statusMessage": "(OmO 5.1.0) Guarding Ulw-Loop Spawns"
48
48
  }
49
49
  ]
50
50
  }
@@ -56,7 +56,7 @@
56
56
  "type": "command",
57
57
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook stop",
58
58
  "timeout": 10,
59
- "statusMessage": "(OmO 5.0.1) Checking Ulw-Loop Resume"
59
+ "statusMessage": "(OmO 5.1.0) Checking Ulw-Loop Resume"
60
60
  }
61
61
  ]
62
62
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ulw-loop",
3
- "version": "5.0.1",
3
+ "version": "5.1.0",
4
4
  "description": "Codex plugin: durable repo-native multi-goal orchestration with embedded success criteria and observable evidence audit.",
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/git-bash/dist/cli.js\" hook post-compact",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.1) Resetting Git Bash MCP Reminder",
10
+ "statusMessage": "(OmO 5.1.0) Resetting Git Bash MCP Reminder",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\git-bash\\dist\\cli.js\" hook post-compact"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/lsp/dist/cli.js\" hook post-compact",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.1) Resetting LSP Diagnostics Cache",
10
+ "statusMessage": "(OmO 5.1.0) Resetting LSP Diagnostics Cache",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lsp\\dist\\cli.js\" hook post-compact"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook post-compact",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.1) Resetting Project Rule Cache",
10
+ "statusMessage": "(OmO 5.1.0) Resetting Project Rule Cache",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook post-compact"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/comment-checker/dist/cli.js\" hook post-tool-use",
9
9
  "timeout": 30,
10
- "statusMessage": "(OmO 5.0.1) Checking Comments",
10
+ "statusMessage": "(OmO 5.1.0) Checking Comments",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\comment-checker\\dist\\cli.js\" hook post-tool-use"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/lsp/dist/cli.js\" hook post-tool-use",
9
9
  "timeout": 60,
10
- "statusMessage": "(OmO 5.0.1) Checking LSP Diagnostics",
10
+ "statusMessage": "(OmO 5.1.0) Checking LSP Diagnostics",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lsp\\dist\\cli.js\" hook post-tool-use"
12
12
  }
13
13
  ],
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/teammode/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.0.1) Checking Thread Title Hygiene",
11
+ "statusMessage": "(OmO 5.1.0) Checking Thread Title Hygiene",
12
12
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\teammode\\dist\\cli.js\" hook post-tool-use"
13
13
  }
14
14
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook post-tool-use",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.1) Matching Project Rules",
10
+ "statusMessage": "(OmO 5.1.0) Matching Project Rules",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook post-tool-use"
12
12
  }
13
13
  ],
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook post-tool-use-spawn",
10
10
  "timeout": 5,
11
- "statusMessage": "(OmO 5.0.1) Recording Spawn Admission",
11
+ "statusMessage": "(OmO 5.1.0) Recording Spawn Admission",
12
12
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook post-tool-use-spawn"
13
13
  }
14
14
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook pre-tool-use",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.1) Enforcing Unlimited Goal Budget",
10
+ "statusMessage": "(OmO 5.1.0) Enforcing Unlimited Goal Budget",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook pre-tool-use"
12
12
  }
13
13
  ],
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook pre-tool-use-spawn",
10
10
  "timeout": 5,
11
- "statusMessage": "(OmO 5.0.1) Guarding Ulw-Loop Spawns",
11
+ "statusMessage": "(OmO 5.1.0) Guarding Ulw-Loop Spawns",
12
12
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook pre-tool-use-spawn"
13
13
  }
14
14
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/git-bash/dist/cli.js\" hook pre-tool-use",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.1) Recommending Git Bash MCP",
10
+ "statusMessage": "(OmO 5.1.0) Recommending Git Bash MCP",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\git-bash\\dist\\cli.js\" hook pre-tool-use"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/scripts/auto-update.mjs\" hook session-start",
9
9
  "timeout": 15,
10
- "statusMessage": "(OmO 5.0.1) Checking Auto Update",
10
+ "statusMessage": "(OmO 5.1.0) Checking Auto Update",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\scripts\\auto-update.mjs\" hook session-start"
12
12
  }
13
13
  ],
@@ -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.1) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.1.0) Checking Bootstrap Provisioning"
12
12
  }
13
13
  ]
14
14
  }
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook session-start",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.1) Loading Project Rules",
10
+ "statusMessage": "(OmO 5.1.0) Loading Project Rules",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook session-start"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/telemetry/dist/cli.js\" hook session-start",
9
9
  "timeout": 15,
10
- "statusMessage": "(OmO 5.0.1) Recording Session Telemetry",
10
+ "statusMessage": "(OmO 5.1.0) Recording Session Telemetry",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\telemetry\\dist\\cli.js\" hook session-start"
12
12
  }
13
13
  ]
@@ -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.1) Checking Ulw-Execute Continuation",
10
+ "statusMessage": "(OmO 5.1.0) Checking Ulw-Execute Continuation",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-execute-continuation\\dist\\cli.js\" hook stop"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook stop",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.1) Checking Ulw-Loop Resume",
10
+ "statusMessage": "(OmO 5.1.0) Checking Ulw-Loop Resume",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook stop"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.1) Verifying LazyCodex Executor Evidence",
10
+ "statusMessage": "(OmO 5.1.0) Verifying LazyCodex Executor Evidence",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\lazycodex-executor-verify\\dist\\cli.js\" hook subagent-stop"
12
12
  }
13
13
  ],
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ultrawork/dist/cli.js\" hook user-prompt-submit",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.1) Checking Ultrawork Trigger",
10
+ "statusMessage": "(OmO 5.1.0) Checking Ultrawork Trigger",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ultrawork\\dist\\cli.js\" hook user-prompt-submit"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/ulw-loop/dist/cli.js\" hook user-prompt-submit",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.1) Checking Ulw-Loop Steering",
10
+ "statusMessage": "(OmO 5.1.0) Checking Ulw-Loop Steering",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\ulw-loop\\dist\\cli.js\" hook user-prompt-submit"
12
12
  }
13
13
  ]
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/components/rules/dist/cli.js\" hook user-prompt-submit",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.1) Loading Project Rules",
10
+ "statusMessage": "(OmO 5.1.0) Loading Project Rules",
11
11
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\node-dispatch.ps1\" \"${PLUGIN_ROOT}\\components\\rules\\dist\\cli.js\" hook user-prompt-submit"
12
12
  }
13
13
  ]
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/omo-codex-plugin",
3
- "version": "5.0.1",
3
+ "version": "5.1.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@sisyphuslabs/omo-codex-plugin",
9
- "version": "5.0.1",
9
+ "version": "5.1.0",
10
10
  "workspaces": [
11
11
  "components/comment-checker",
12
12
  "components/git-bash",
@@ -95,7 +95,7 @@
95
95
  },
96
96
  "components/comment-checker": {
97
97
  "name": "@code-yeongyu/codex-comment-checker",
98
- "version": "5.0.1",
98
+ "version": "5.1.0",
99
99
  "license": "MIT",
100
100
  "bin": {
101
101
  "omo-comment-checker": "dist/cli.js"
@@ -117,7 +117,7 @@
117
117
  },
118
118
  "components/git-bash": {
119
119
  "name": "@sisyphuslabs/codex-git-bash-hook",
120
- "version": "5.0.1",
120
+ "version": "5.1.0",
121
121
  "bin": {
122
122
  "omo-git-bash-hook": "dist/cli.js"
123
123
  },
@@ -131,7 +131,7 @@
131
131
  },
132
132
  "components/lazycodex-executor-verify": {
133
133
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
134
- "version": "5.0.1",
134
+ "version": "5.1.0",
135
135
  "license": "MIT",
136
136
  "bin": {
137
137
  "lazycodex-executor-verify": "dist/cli.js"
@@ -149,7 +149,7 @@
149
149
  },
150
150
  "components/lsp": {
151
151
  "name": "@code-yeongyu/codex-lsp",
152
- "version": "5.0.1",
152
+ "version": "5.1.0",
153
153
  "license": "MIT",
154
154
  "dependencies": {
155
155
  "@code-yeongyu/lsp-daemon": "file:../../../../lsp-daemon",
@@ -171,7 +171,7 @@
171
171
  },
172
172
  "components/rules": {
173
173
  "name": "@code-yeongyu/codex-rules",
174
- "version": "5.0.1",
174
+ "version": "5.1.0",
175
175
  "license": "MIT",
176
176
  "dependencies": {
177
177
  "picomatch": "^4.0.7"
@@ -194,7 +194,7 @@
194
194
  },
195
195
  "components/teammode": {
196
196
  "name": "@sisyphuslabs/codex-teammode",
197
- "version": "5.0.1",
197
+ "version": "5.1.0",
198
198
  "devDependencies": {
199
199
  "@types/node": "^26.6.2",
200
200
  "@vitest/coverage-v8": "5.0.1",
@@ -208,7 +208,7 @@
208
208
  },
209
209
  "components/telemetry": {
210
210
  "name": "@code-yeongyu/codex-telemetry",
211
- "version": "5.0.1",
211
+ "version": "5.1.0",
212
212
  "license": "MIT",
213
213
  "bin": {
214
214
  "omo-telemetry": "dist/cli.js"
@@ -227,7 +227,7 @@
227
227
  },
228
228
  "components/ultrawork": {
229
229
  "name": "@code-yeongyu/codex-ultrawork",
230
- "version": "5.0.1",
230
+ "version": "5.1.0",
231
231
  "license": "MIT",
232
232
  "bin": {
233
233
  "omo-ultrawork": "dist/cli.js"
@@ -246,7 +246,7 @@
246
246
  },
247
247
  "components/ulw-execute-continuation": {
248
248
  "name": "@code-yeongyu/codex-ulw-execute-continuation",
249
- "version": "5.0.1",
249
+ "version": "5.1.0",
250
250
  "license": "MIT",
251
251
  "bin": {
252
252
  "omo-ulw-execute-continuation": "dist/cli.js"
@@ -264,7 +264,7 @@
264
264
  },
265
265
  "components/ulw-loop": {
266
266
  "name": "@code-yeongyu/codex-ulw-loop",
267
- "version": "5.0.1",
267
+ "version": "5.1.0",
268
268
  "license": "MIT",
269
269
  "bin": {
270
270
  "omo-ulw-loop": "dist/cli.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/omo-codex-plugin",
3
- "version": "5.0.1",
3
+ "version": "5.1.0",
4
4
  "description": "Aggregate Codex plugin root for OMO components.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -5,5 +5,5 @@
5
5
  "index.js": "b6b064fab277031c6c51f5a58b84b31040f9960bf767bf646adc0540c1d25c1b",
6
6
  "page-bundle.js": "bfd51e8383cf47200d57387bbbed258bce5a3a3d00c38fc108034d2888e23f0c"
7
7
  },
8
- "stagedAtUtc": "2026-09-27T06:06:13.416Z"
8
+ "stagedAtUtc": "2026-09-28T19:17:28.100Z"
9
9
  }
@@ -66,7 +66,7 @@ The finder prints JSON for stdout and `jq`. Every result includes:
66
66
  | `detail_hint` | Ready-to-run `read` command for detailed inspection |
67
67
  | `match_reasons` | Search-only array explaining which field/content matched each query |
68
68
 
69
- Each `match_reasons` entry includes `query`, `platform`, `field`, and `snippet`, so you can tell which platform matched and what content caused the hit without opening every transcript.
69
+ Each `match_reasons` entry includes `query`, `platform`, `field`, and `snippet`, so you can tell which platform matched and what content caused the hit without opening every transcript. `field` is `user_message` when the query matched a user prompt that the `first_user_message`/`last_user_message` previews do not cover, such as a prompt in the middle of the session.
70
70
 
71
71
  ## Filters
72
72
 
@@ -93,6 +93,7 @@ def _aside_session(path: Path, index: dict[str, _StateRow]) -> Session:
93
93
  sid = _dir_session_id(path.parent.name)
94
94
  row = index.get(sid)
95
95
  first_user = last_user = ""
96
+ prompts: list[str] = []
96
97
  provider = model = None
97
98
  created = updated = None
98
99
  usage: JsonMap = {}
@@ -107,6 +108,7 @@ def _aside_session(path: Path, index: dict[str, _StateRow]) -> Session:
107
108
  if prompt:
108
109
  first_user = first_user or prompt
109
110
  last_user = prompt
111
+ prompts.append(prompt)
110
112
  elif role == "assistant":
111
113
  provider = provider or text(data.get("provider"))
112
114
  model = model or text(data.get("model"))
@@ -125,6 +127,7 @@ def _aside_session(path: Path, index: dict[str, _StateRow]) -> Session:
125
127
  row.parent_id if row is not None else None,
126
128
  row.title if row is not None and row.parent_id is not None else None,
127
129
  last_user,
130
+ tuple(prompts),
128
131
  )
129
132
 
130
133