oh-my-opencode 4.11.0 → 4.12.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 (177) hide show
  1. package/.agents/skills/codex-qa/scripts/lib/app-server-client.mjs +132 -82
  2. package/.agents/skills/codex-qa/scripts/lib/app-server-client.test.js +48 -0
  3. package/.agents/skills/opencode-qa/scripts/serve-wake-split-probe.sh +361 -84
  4. package/.agents/skills/work-with-pr/SKILL.md +19 -5
  5. package/.opencode/skills/work-with-pr/SKILL.md +19 -5
  6. package/dist/agents/atlas/agent.d.ts +3 -2
  7. package/dist/agents/sisyphus/glm-5-2.d.ts +4 -0
  8. package/dist/agents/sisyphus/index.d.ts +1 -0
  9. package/dist/agents/sisyphus-agent-config.d.ts +1 -0
  10. package/dist/agents/sisyphus-junior/agent.d.ts +1 -1
  11. package/dist/agents/sisyphus-junior/glm-5-2.d.ts +1 -0
  12. package/dist/agents/sisyphus-junior/index.d.ts +1 -0
  13. package/dist/agents/types.d.ts +7 -6
  14. package/dist/cli/index.js +449 -318
  15. package/dist/cli-node/index.js +449 -318
  16. package/dist/features/background-agent/parent-wake-flush-runner.d.ts +1 -0
  17. package/dist/features/background-agent/parent-wake-history-state.d.ts +1 -0
  18. package/dist/features/background-agent/parent-wake-session-history.d.ts +1 -47
  19. package/dist/features/background-agent/parent-wake-session-message.d.ts +47 -0
  20. package/dist/hooks/keyword-detector/ultrawork/glm.d.ts +2 -0
  21. package/dist/hooks/keyword-detector/ultrawork/index.d.ts +4 -2
  22. package/dist/hooks/keyword-detector/ultrawork/source-detector.d.ts +5 -4
  23. package/dist/index.js +1185 -87
  24. package/dist/plugin/tool-execute-before.d.ts +2 -0
  25. package/dist/plugin-handlers/plugin-components-loader.d.ts +1 -0
  26. package/dist/skills/init-deep/SKILL.md +21 -26
  27. package/dist/skills/programming/SKILL.md +25 -121
  28. package/dist/skills/programming/references/code-smells.md +390 -0
  29. package/dist/skills/ulw-plan/SKILL.md +2 -1
  30. package/dist/skills/ulw-plan/references/full-workflow.md +1 -1
  31. package/dist/skills/ulw-plan/references/intent-clear.md +2 -2
  32. package/dist/tools/delegate-task/sync-session-poller.d.ts +1 -2
  33. package/dist/tools/delegate-task/sync-session-turns.d.ts +3 -0
  34. package/dist/tui.js +16 -7
  35. package/package.json +13 -13
  36. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +22 -2
  37. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +51 -21
  38. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  39. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  40. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +18 -7
  41. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +9 -2
  42. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  43. package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +8 -7
  44. package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +7 -2
  45. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +2 -1
  46. package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +20 -19
  47. package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +94 -0
  48. package/packages/omo-codex/plugin/components/codegraph/test/serve-node-support.test.ts +33 -0
  49. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  50. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  51. package/packages/omo-codex/plugin/components/comment-checker/test/package-smoke.test.ts +2 -71
  52. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  53. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  54. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  55. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  56. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  57. package/packages/omo-codex/plugin/components/lsp/package.json +2 -2
  58. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +26 -104
  59. package/packages/omo-codex/plugin/components/rules/dist/cli.js +2 -2
  60. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  61. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  62. package/packages/omo-codex/plugin/components/rules/src/sparkshell-awareness.ts +2 -2
  63. package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +12 -92
  64. package/packages/omo-codex/plugin/components/rules/test/sparkshell-awareness.test.ts +3 -0
  65. package/packages/omo-codex/plugin/components/start-work-continuation/dist/cli.js +157 -234
  66. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  67. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -2
  68. package/packages/omo-codex/plugin/components/start-work-continuation/src/boulder-reader.ts +227 -15
  69. package/packages/omo-codex/plugin/components/start-work-continuation/test/boulder-reader.test.ts +62 -2
  70. package/packages/omo-codex/plugin/components/start-work-continuation/test/cli.test.ts +34 -3
  71. package/packages/omo-codex/plugin/components/teammode/skills/teammode/SKILL.md +139 -0
  72. package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-guide.mjs +111 -0
  73. package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-state.mjs +250 -0
  74. package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team.mjs +220 -0
  75. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  76. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  77. package/packages/omo-codex/plugin/components/test-support/package-smoke-fixture.ts +158 -0
  78. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  79. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  80. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +2 -1
  81. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/agents/openai.yaml +1 -1
  82. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +1 -1
  83. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +2 -2
  84. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +76 -49
  85. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +2 -2
  86. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  87. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/agents/openai.yaml +1 -1
  88. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +1 -1
  89. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +17 -0
  90. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +17 -0
  91. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +17 -0
  92. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +17 -0
  93. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +17 -0
  94. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +17 -0
  95. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +17 -0
  96. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +17 -0
  97. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +17 -0
  98. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +17 -0
  99. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +16 -0
  100. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +16 -0
  101. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +16 -0
  102. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +16 -0
  103. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +16 -0
  104. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +17 -0
  105. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +16 -0
  106. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +16 -0
  107. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +16 -0
  108. package/packages/omo-codex/plugin/package-lock.json +12 -22
  109. package/packages/omo-codex/plugin/package.json +1 -1
  110. package/packages/omo-codex/plugin/scripts/auto-update.mjs +1 -1
  111. package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +14 -11
  112. package/packages/omo-codex/plugin/scripts/sync-hook-status-messages.mjs +15 -4
  113. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +37 -0
  114. package/packages/omo-codex/plugin/skills/ast-grep/agents/openai.yaml +2 -0
  115. package/packages/omo-codex/plugin/skills/comment-checker/agents/openai.yaml +2 -0
  116. package/packages/omo-codex/plugin/skills/debugging/agents/openai.yaml +2 -0
  117. package/packages/omo-codex/plugin/skills/frontend/agents/openai.yaml +2 -0
  118. package/packages/omo-codex/plugin/skills/git-master/agents/openai.yaml +1 -1
  119. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +21 -26
  120. package/packages/omo-codex/plugin/skills/init-deep/agents/openai.yaml +2 -0
  121. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/agents/openai.yaml +1 -1
  122. package/packages/omo-codex/plugin/skills/lcx-doctor/agents/openai.yaml +1 -1
  123. package/packages/omo-codex/plugin/skills/lcx-report-bug/agents/openai.yaml +1 -1
  124. package/packages/omo-codex/plugin/skills/lsp/agents/openai.yaml +2 -0
  125. package/packages/omo-codex/plugin/skills/lsp-setup/agents/openai.yaml +2 -0
  126. package/packages/omo-codex/plugin/skills/programming/SKILL.md +25 -121
  127. package/packages/omo-codex/plugin/skills/programming/agents/openai.yaml +2 -0
  128. package/packages/omo-codex/plugin/skills/programming/references/code-smells.md +390 -0
  129. package/packages/omo-codex/plugin/skills/refactor/agents/openai.yaml +2 -0
  130. package/packages/omo-codex/plugin/skills/remove-ai-slops/agents/openai.yaml +2 -0
  131. package/packages/omo-codex/plugin/skills/review-work/agents/openai.yaml +2 -0
  132. package/packages/omo-codex/plugin/skills/rules/agents/openai.yaml +2 -0
  133. package/packages/omo-codex/plugin/skills/start-work/agents/openai.yaml +2 -0
  134. package/packages/omo-codex/plugin/skills/teammode/SKILL.md +139 -0
  135. package/packages/omo-codex/plugin/skills/teammode/agents/openai.yaml +2 -0
  136. package/packages/omo-codex/plugin/skills/teammode/scripts/team-guide.mjs +111 -0
  137. package/packages/omo-codex/plugin/skills/teammode/scripts/team-state.mjs +250 -0
  138. package/packages/omo-codex/plugin/skills/teammode/scripts/team.mjs +220 -0
  139. package/packages/omo-codex/plugin/skills/ultraresearch/agents/openai.yaml +2 -0
  140. package/packages/omo-codex/plugin/skills/ulw-loop/agents/openai.yaml +1 -1
  141. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +2 -1
  142. package/packages/omo-codex/plugin/skills/ulw-plan/agents/openai.yaml +1 -1
  143. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +1 -1
  144. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +2 -2
  145. package/packages/omo-codex/plugin/skills/visual-qa/agents/openai.yaml +2 -0
  146. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +34 -33
  147. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +5 -2
  148. package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +13 -0
  149. package/packages/omo-codex/plugin/test/auto-update.test.mjs +1 -1
  150. package/packages/omo-codex/plugin/test/bootstrap-binlinks.test.mjs +1 -1
  151. package/packages/omo-codex/plugin/test/bootstrap-hooks.test.mjs +14 -6
  152. package/packages/omo-codex/plugin/test/bootstrap-ps-guard.test.mjs +7 -3
  153. package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +31 -0
  154. package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +3 -3
  155. package/packages/omo-codex/plugin/test/display-metadata.test.mjs +83 -0
  156. package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +30 -19
  157. package/packages/omo-codex/plugin/test/lcx-bug-skills.test.mjs +3 -3
  158. package/packages/omo-codex/plugin/test/sync-hook-status-messages.test.mjs +6 -6
  159. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +2 -0
  160. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +9 -4
  161. package/packages/omo-codex/plugin/test/teammode-safety-fixture.mjs +88 -0
  162. package/packages/omo-codex/plugin/test/teammode-safety.test.mjs +240 -0
  163. package/packages/omo-codex/scripts/install-dist/install-local.mjs +412 -216
  164. package/packages/omo-codex/scripts/install-git-bash-mcp-env.test.mjs +24 -0
  165. package/packages/omo-codex/scripts/install-hook-targets.test.mjs +93 -0
  166. package/packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs +2 -2
  167. package/packages/omo-codex/scripts/install-local-bun-global-update.test.mjs +63 -0
  168. package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +109 -1
  169. package/packages/omo-codex/scripts/install-local.mjs +1 -0
  170. package/packages/omo-codex/scripts/install-mcp-runtime.test.mjs +36 -0
  171. package/packages/shared-skills/skills/init-deep/SKILL.md +21 -26
  172. package/packages/shared-skills/skills/programming/SKILL.md +25 -121
  173. package/packages/shared-skills/skills/programming/references/code-smells.md +390 -0
  174. package/packages/shared-skills/skills/ulw-plan/SKILL.md +2 -1
  175. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +1 -1
  176. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +2 -2
  177. package/packages/omo-codex/plugin/hooks/hooks.json +0 -214
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/omo-codex-plugin",
3
- "version": "4.10.0",
3
+ "version": "4.11.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@sisyphuslabs/omo-codex-plugin",
9
- "version": "4.10.0",
9
+ "version": "4.11.1",
10
10
  "workspaces": [
11
11
  "components/codegraph",
12
12
  "components/comment-checker",
@@ -23,11 +23,6 @@
23
23
  "@oh-my-opencode/shared-skills": "file:../../shared-skills"
24
24
  }
25
25
  },
26
- "../../boulder-state": {
27
- "name": "@oh-my-opencode/boulder-state",
28
- "version": "0.1.0",
29
- "dev": true
30
- },
31
26
  "../../comment-checker-core": {
32
27
  "name": "@oh-my-opencode/comment-checker-core",
33
28
  "version": "0.1.0",
@@ -97,7 +92,7 @@
97
92
  },
98
93
  "components/codegraph": {
99
94
  "name": "@sisyphuslabs/codex-codegraph",
100
- "version": "4.10.0",
95
+ "version": "4.11.1",
101
96
  "bin": {
102
97
  "omo-codegraph": "dist/cli.js"
103
98
  },
@@ -113,7 +108,7 @@
113
108
  },
114
109
  "components/comment-checker": {
115
110
  "name": "@code-yeongyu/codex-comment-checker",
116
- "version": "4.10.0",
111
+ "version": "4.11.1",
117
112
  "license": "MIT",
118
113
  "bin": {
119
114
  "omo-comment-checker": "dist/cli.js"
@@ -134,7 +129,7 @@
134
129
  },
135
130
  "components/git-bash": {
136
131
  "name": "@sisyphuslabs/codex-git-bash-hook",
137
- "version": "4.10.0",
132
+ "version": "4.11.1",
138
133
  "bin": {
139
134
  "omo-git-bash-hook": "dist/cli.js"
140
135
  },
@@ -149,7 +144,7 @@
149
144
  },
150
145
  "components/lazycodex-executor-verify": {
151
146
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
152
- "version": "4.10.0",
147
+ "version": "4.11.1",
153
148
  "license": "MIT",
154
149
  "bin": {
155
150
  "lazycodex-executor-verify": "dist/cli.js"
@@ -166,7 +161,7 @@
166
161
  },
167
162
  "components/lsp": {
168
163
  "name": "@code-yeongyu/codex-lsp",
169
- "version": "4.10.0",
164
+ "version": "4.11.1",
170
165
  "license": "MIT",
171
166
  "dependencies": {
172
167
  "@code-yeongyu/lsp-daemon": "file:../../../../lsp-daemon"
@@ -186,7 +181,7 @@
186
181
  },
187
182
  "components/rules": {
188
183
  "name": "@code-yeongyu/codex-rules",
189
- "version": "4.10.0",
184
+ "version": "4.11.1",
190
185
  "license": "MIT",
191
186
  "dependencies": {
192
187
  "picomatch": "^4.0.3"
@@ -208,14 +203,13 @@
208
203
  },
209
204
  "components/start-work-continuation": {
210
205
  "name": "@code-yeongyu/codex-start-work-continuation",
211
- "version": "4.10.0",
206
+ "version": "4.11.1",
212
207
  "license": "MIT",
213
208
  "bin": {
214
209
  "omo-start-work-continuation": "dist/cli.js"
215
210
  },
216
211
  "devDependencies": {
217
212
  "@biomejs/biome": "2.4.16",
218
- "@oh-my-opencode/boulder-state": "file:../../../../boulder-state",
219
213
  "@types/node": "^25.9.3",
220
214
  "typescript": "^6.0.3",
221
215
  "vitest": "^4.1.8"
@@ -226,7 +220,7 @@
226
220
  },
227
221
  "components/telemetry": {
228
222
  "name": "@code-yeongyu/codex-telemetry",
229
- "version": "4.10.0",
223
+ "version": "4.11.1",
230
224
  "license": "MIT",
231
225
  "bin": {
232
226
  "omo-telemetry": "dist/cli.js"
@@ -244,7 +238,7 @@
244
238
  },
245
239
  "components/ultrawork": {
246
240
  "name": "@code-yeongyu/codex-ultrawork",
247
- "version": "4.10.0",
241
+ "version": "4.11.1",
248
242
  "license": "MIT",
249
243
  "bin": {
250
244
  "omo-ultrawork": "dist/cli.js"
@@ -262,7 +256,7 @@
262
256
  },
263
257
  "components/ulw-loop": {
264
258
  "name": "@code-yeongyu/codex-ulw-loop",
265
- "version": "4.10.0",
259
+ "version": "4.11.1",
266
260
  "license": "MIT",
267
261
  "bin": {
268
262
  "omo-ulw-loop": "dist/cli.js"
@@ -562,10 +556,6 @@
562
556
  "@emnapi/runtime": "^1.7.1"
563
557
  }
564
558
  },
565
- "node_modules/@oh-my-opencode/boulder-state": {
566
- "resolved": "../../boulder-state",
567
- "link": true
568
- },
569
559
  "node_modules/@oh-my-opencode/comment-checker-core": {
570
560
  "resolved": "../../comment-checker-core",
571
561
  "link": true
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/omo-codex-plugin",
3
- "version": "4.11.0",
3
+ "version": "4.12.0",
4
4
  "description": "Aggregate Codex plugin root for OMO components.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -23,7 +23,7 @@ const DEFAULT_RETRY_INTERVAL_MS = 30 * 60 * 1_000;
23
23
  const DEFAULT_UPDATE_COMMAND = "npx";
24
24
  const DEFAULT_UPDATE_ARGS = ["--yes", "lazycodex-ai@latest", "install", "--no-tui", "--codex-autonomous"];
25
25
  const MARKETPLACE_FLOW_NOTICE =
26
- "[LazyCodex] Auto-update skipped: this LazyCodex install is managed by the Codex plugin marketplace, so the npx self-update was not started. Tell the user to upgrade with `codex plugin marketplace upgrade sisyphuslabs`, and that Codex will ask them to re-approve hooks after the upgrade.";
26
+ "[LazyCodex] Auto-update skipped: this LazyCodex install is managed by the Codex plugin marketplace, so the npx self-update was not started. Tell the user to upgrade with `codex plugin marketplace upgrade sisyphuslabs`, and that Codex will require hook re-approval after the upgrade.";
27
27
 
28
28
  export function resolveAutoUpdatePlan({ env = process.env, now = Date.now(), lastCheckedAt, lastAttemptedAt, lastStatus, installFlow } = {}) {
29
29
  if (env.LAZYCODEX_AUTO_UPDATE_DISABLED === "1" || env.OMO_CODEX_AUTO_UPDATE_DISABLED === "1") {
@@ -1,4 +1,4 @@
1
- const PRODUCT_NAME = "LazyCodex";
1
+ const PRODUCT_PREFIX = "(OmO)";
2
2
 
3
3
  const WORD_OVERRIDES = new Map([
4
4
  ["lazycodex", "LazyCodex"],
@@ -8,13 +8,18 @@ const WORD_OVERRIDES = new Map([
8
8
  ]);
9
9
 
10
10
  export function formatLazyCodexHookStatusMessage(version, label) {
11
- return `${PRODUCT_NAME}(${normalizeVersion(version)}): ${normalizeLazyCodexHookStatusLabel(label)}`;
11
+ void version;
12
+ return `${PRODUCT_PREFIX} ${normalizeLazyCodexHookStatusLabel(label)}`;
12
13
  }
13
14
 
14
15
  export function normalizeLazyCodexHookStatusLabel(label) {
15
16
  const parsed = parseLazyCodexHookStatusMessage(label);
16
17
  const rawLabel = parsed === null ? label : parsed.label;
17
- const normalized = rawLabel.replace(/\bOMO\b/gi, " ").replace(/\s+/g, " ").trim();
18
+ const normalized = rawLabel
19
+ .replace(/^\(OmO\)\s*/i, " ")
20
+ .replace(/\bOMO\b/gi, " ")
21
+ .replace(/\s+/g, " ")
22
+ .trim();
18
23
  if (normalized.length === 0) return "";
19
24
  return normalized
20
25
  .split(" ")
@@ -23,17 +28,15 @@ export function normalizeLazyCodexHookStatusLabel(label) {
23
28
  }
24
29
 
25
30
  export function parseLazyCodexHookStatusMessage(message) {
26
- const match = /^LazyCodex\(([^)]+)\):\s+(.+)$/.exec(message.trim());
27
- if (match === null) return null;
28
- const [, version, label] = match;
31
+ const trimmed = message.trim();
32
+ const current = /^\(OmO\)\s+(.+)$/.exec(trimmed);
33
+ if (current !== null) return { version: undefined, label: current[1] };
34
+ const legacy = /^LazyCodex\(([^)]+)\):\s+(.+)$/.exec(trimmed);
35
+ if (legacy === null) return null;
36
+ const [, version, label] = legacy;
29
37
  return { version, label };
30
38
  }
31
39
 
32
- function normalizeVersion(version) {
33
- const normalized = version.trim();
34
- return normalized.length === 0 ? "local" : normalized;
35
- }
36
-
37
40
  function formatWord(word) {
38
41
  const lower = word.toLowerCase();
39
42
  const override = WORD_OVERRIDES.get(lower);
@@ -31,6 +31,15 @@ async function readPackageVersion(path) {
31
31
  return packageJson.version;
32
32
  }
33
33
 
34
+ async function readAggregateHookPaths(root) {
35
+ const manifest = await readJson(join(root, ".codex-plugin", "plugin.json"));
36
+ if (typeof manifest.hooks === "string") return [manifest.hooks];
37
+ if (Array.isArray(manifest.hooks)) {
38
+ return manifest.hooks.filter((hookPath) => typeof hookPath === "string");
39
+ }
40
+ return ["./hooks/hooks.json"];
41
+ }
42
+
34
43
  async function readComponentNames(root) {
35
44
  const componentsRoot = join(root, "components");
36
45
  const entries = await readdir(componentsRoot, { withFileTypes: true });
@@ -79,10 +88,12 @@ export async function syncHookStatusMessages(root = defaultRoot, options = {}) {
79
88
  const releaseVersion = readReleaseVersion(options);
80
89
  const aggregateVersion = releaseVersion ?? (await readPackageVersion(join(root, ".codex-plugin", "plugin.json")));
81
90
  const componentNames = await readComponentNames(root);
82
- const aggregateHooksPath = join(root, "hooks", "hooks.json");
83
- const aggregateHooks = await readJson(aggregateHooksPath);
84
- syncHooksJson(aggregateHooks, () => aggregateVersion);
85
- await writeJson(aggregateHooksPath, aggregateHooks);
91
+ for (const hookPath of await readAggregateHookPaths(root)) {
92
+ const aggregateHooksPath = join(root, hookPath.replace(/^\.\//, ""));
93
+ const aggregateHooks = await readJson(aggregateHooksPath);
94
+ syncHooksJson(aggregateHooks, () => aggregateVersion);
95
+ await writeJson(aggregateHooksPath, aggregateHooks);
96
+ }
86
97
 
87
98
  for (const componentName of componentNames) {
88
99
  const componentVersion =
@@ -12,10 +12,12 @@ const skillSources = [
12
12
  ["comment-checker", "components/comment-checker/skills/comment-checker"],
13
13
  ["lsp", "components/lsp/skills/lsp"],
14
14
  ["rules", "components/rules/skills/rules"],
15
+ ["teammode", "components/teammode/skills/teammode"],
15
16
  ["ulw-loop", "components/ulw-loop/skills/ulw-loop"],
16
17
  ["ulw-plan", "components/ultrawork/skills/ulw-plan"],
17
18
  ];
18
19
  const componentSkillNames = new Set(skillSources.map(([name]) => name));
20
+ const skillDisplayPrefix = "(OmO) ";
19
21
 
20
22
  const opencodeOnlyOrchestrationPattern = /\b(?:call_omo_agent|background_output|team_[a-z_]+|task)\s*\(/;
21
23
 
@@ -151,6 +153,40 @@ function applyCodexSkillOverlays(skillName, content) {
151
153
  return content;
152
154
  }
153
155
 
156
+ function readSkillFrontmatterName(content, fallbackName) {
157
+ const frontmatter = content.match(/^---\n(?<body>[\s\S]*?)\n---\n+/);
158
+ const rawName = frontmatter?.groups?.body.match(/^name:\s*"?([^"\n]+)"?\s*$/m)?.[1]?.trim();
159
+ return rawName && rawName.length > 0 ? rawName : fallbackName;
160
+ }
161
+
162
+ function upsertDisplayName(metadata, displayName) {
163
+ const content = metadata.endsWith("\n") ? metadata : `${metadata}\n`;
164
+ if (/^\s*display_name:/m.test(metadata)) {
165
+ return content.replace(/^(\s*display_name:\s*).+$/m, `$1"${displayName}"`);
166
+ }
167
+ if (/^interface:\s*$/m.test(metadata)) {
168
+ return content.replace(/^interface:\s*$/m, `interface:\n display_name: "${displayName}"`);
169
+ }
170
+ return `interface:\n display_name: "${displayName}"\n${content}`;
171
+ }
172
+
173
+ async function writeCodexSkillDisplayMetadata(skillName) {
174
+ const skillRoot = join(skillsRoot, skillName);
175
+ const skillPath = join(skillRoot, "SKILL.md");
176
+ const content = await readFile(skillPath, "utf8");
177
+ const frontmatterName = readSkillFrontmatterName(content, skillName);
178
+ const metadataDir = join(skillRoot, "agents");
179
+ const metadataPath = join(metadataDir, "openai.yaml");
180
+ await mkdir(metadataDir, { recursive: true });
181
+ let metadata = "interface:\n";
182
+ try {
183
+ metadata = await readFile(metadataPath, "utf8");
184
+ } catch (error) {
185
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) throw error;
186
+ }
187
+ await writeFile(metadataPath, upsertDisplayName(metadata, `${skillDisplayPrefix}${frontmatterName}`), "utf8");
188
+ }
189
+
154
190
  async function adaptSkillForCodex(skillName) {
155
191
  const skillPath = join(skillsRoot, skillName, "SKILL.md");
156
192
  const content = await readFile(skillPath, "utf8");
@@ -158,6 +194,7 @@ async function adaptSkillForCodex(skillName) {
158
194
  if (adapted !== content) {
159
195
  await writeFile(skillPath, adapted, "utf8");
160
196
  }
197
+ await writeCodexSkillDisplayMetadata(skillName);
161
198
  }
162
199
 
163
200
  async function syncSkills() {
@@ -0,0 +1,2 @@
1
+ interface:
2
+ display_name: "(OmO) ast-grep"
@@ -0,0 +1,2 @@
1
+ interface:
2
+ display_name: "(OmO) comment-checker"
@@ -0,0 +1,2 @@
1
+ interface:
2
+ display_name: "(OmO) debugging"
@@ -0,0 +1,2 @@
1
+ interface:
2
+ display_name: "(OmO) frontend"
@@ -1,5 +1,5 @@
1
1
  interface:
2
- display_name: "git-master (omo)"
2
+ display_name: "(OmO) git-master"
3
3
  short_description: "Atomic Git commits, history surgery, and source archaeology"
4
4
  search_terms:
5
5
  - "git-master"
@@ -38,7 +38,7 @@ Generate hierarchical AGENTS.md files. Root + complexity-scored subdirectories.
38
38
 
39
39
  1. **Discovery + Analysis** (concurrent)
40
40
  - Fire background explore agents immediately
41
- - Main session: bash structure + LSP codemap + read existing AGENTS.md
41
+ - Main session: bash structure + LSP/codegraph code map + read existing AGENTS.md
42
42
  2. **Score & Decide** - Determine AGENTS.md locations from merged findings
43
43
  3. **Generate** - Root first, then subdirs in parallel
44
44
  4. **Review** - Deduplicate, trim, validate
@@ -47,7 +47,7 @@ Generate hierarchical AGENTS.md files. Root + complexity-scored subdirectories.
47
47
  **TodoWrite ALL phases. Mark in_progress → completed in real-time.**
48
48
  ```
49
49
  TodoWrite([
50
- { id: "discovery", content: "Fire explore agents + LSP codemap + read existing", status: "pending", priority: "high" },
50
+ { id: "discovery", content: "Fire explore agents + LSP/codegraph map + read existing", status: "pending", priority: "high" },
51
51
  { id: "scoring", content: "Score directories, determine locations", status: "pending", priority: "high" },
52
52
  { id: "generate", content: "Generate AGENTS.md files (root + subdirs)", status: "pending", priority: "high" },
53
53
  { id: "review", content: "Deduplicate, validate, trim", status: "pending", priority: "medium" }
@@ -63,16 +63,16 @@ TodoWrite([
63
63
 
64
64
  ### Fire Background Explore Agents IMMEDIATELY
65
65
 
66
- Don't wait-these run async while main session works.
66
+ Don't wait-these run async while main session works. **Equip every agent with the code graph**: any task touching structure, entry points, dependencies, or hotspots MUST query `codegraph_*` (explore/search/callers/callees/impact) and `lsp_symbols` when present, and ground its claims in that data instead of guessing from conventions. Richer real-graph context per agent = a more accurate project map.
67
67
 
68
68
  ```
69
69
  // Fire all at once, collect results later
70
- task(subagent_type="explore", load_skills=[], description="Explore project structure", run_in_background=true, prompt="Project structure: PREDICT standard patterns for detected language → REPORT deviations only")
71
- task(subagent_type="explore", load_skills=[], description="Find entry points", run_in_background=true, prompt="Entry points: FIND main files → REPORT non-standard organization")
70
+ task(subagent_type="explore", load_skills=[], description="Explore project structure", run_in_background=true, prompt="Project structure: map real layout via codegraph_explore/codegraph_files → REPORT deviations from standard patterns")
71
+ task(subagent_type="explore", load_skills=[], description="Find entry points", run_in_background=true, prompt="Entry points: FIND main files, trace reach via codegraph_callees + lsp_symbols → REPORT non-standard organization")
72
72
  task(subagent_type="explore", load_skills=[], description="Find conventions", run_in_background=true, prompt="Conventions: FIND config files (.eslintrc, pyproject.toml, .editorconfig) → REPORT project-specific rules")
73
73
  task(subagent_type="explore", load_skills=[], description="Find anti-patterns", run_in_background=true, prompt="Anti-patterns: FIND 'DO NOT', 'NEVER', 'ALWAYS', 'DEPRECATED' comments → LIST forbidden patterns")
74
74
  task(subagent_type="explore", load_skills=[], description="Explore build/CI", run_in_background=true, prompt="Build/CI: FIND .github/workflows, Makefile → REPORT non-standard patterns")
75
- task(subagent_type="explore", load_skills=[], description="Find test patterns", run_in_background=true, prompt="Test patterns: FIND test configs, test structure → REPORT unique conventions")
75
+ task(subagent_type="explore", load_skills=[], description="Find test patterns", run_in_background=true, prompt="Test patterns: FIND test configs/structure; codegraph_callers on core modules to see what is covered → REPORT unique conventions")
76
76
  ```
77
77
 
78
78
  <dynamic-agents>
@@ -134,24 +134,19 @@ For each existing file found:
134
134
 
135
135
  If `--create-new`: Read all existing first (preserve context) → then delete all → regenerate.
136
136
 
137
- #### 3. LSP Codemap (if available)
138
- ```
139
- LspServers() # Check availability
137
+ #### 3. Code Map - drive LSP AND codegraph (do NOT skip)
140
138
 
141
- # Entry points (parallel)
142
- LspDocumentSymbols(filePath="src/index.ts")
143
- LspDocumentSymbols(filePath="main.py")
139
+ Highest-signal source for the CODE MAP and the Symbol/Export/Reference scoring rows. Complementary, not alternatives - run BOTH when present, alongside the explore agents.
144
140
 
145
- # Key symbols (parallel)
146
- LspWorkspaceSymbols(filePath=".", query="class")
147
- LspWorkspaceSymbols(filePath=".", query="interface")
148
- LspWorkspaceSymbols(filePath=".", query="function")
141
+ **LSP** - check `lsp_status`; model-facing names are `lsp_status`/`lsp_symbols`/`lsp_find_references`/`lsp_goto_definition` (some harnesses drop the `lsp_` prefix):
142
+ - `lsp_symbols` scope="document" on each entry point -> file outline.
143
+ - `lsp_symbols` scope="workspace", query by kind (class/interface/function) -> symbol inventory.
144
+ - `lsp_find_references` on top exports (line/character from the symbols result) -> reference centrality.
149
145
 
150
- # Centrality for top exports
151
- LspFindReferences(filePath="...", line=X, character=Y)
152
- ```
146
+ **codegraph** - when `codegraph_*` tools exist (check `codegraph_status`); a first-class peer to LSP, NOT a last resort:
147
+ - `codegraph_explore` -> overview; `codegraph_callers`/`codegraph_callees`/`codegraph_impact` -> centrality + blast radius for the scoring matrix; `codegraph_search`/`codegraph_files` -> symbol/file inventory.
153
148
 
154
- **LSP Fallback**: If unavailable, use `codegraph_explore` first when codegraph_* tools exist; otherwise rely on explore agents + the ast-grep skill (`sg` CLI).
149
+ Only if NEITHER exists: explore agents + the ast-grep skill (`sg`), and mark centrality unmeasured in the CODE MAP.
155
150
 
156
151
  ### Collect Background Results
157
152
 
@@ -160,7 +155,7 @@ LspFindReferences(filePath="...", line=X, character=Y)
160
155
  for each background task ID (`bg_...`): background_output(task_id="bg_...")
161
156
  ```
162
157
 
163
- **Merge: bash + LSP + existing + explore findings. Mark "discovery" as completed.**
158
+ **Merge: bash + LSP/codegraph + existing + explore findings. Mark "discovery" as completed.**
164
159
 
165
160
  ---
166
161
 
@@ -177,9 +172,9 @@ for each background task ID (`bg_...`): background_output(task_id="bg_...")
177
172
  | Code ratio | 2x | >70% | bash |
178
173
  | Unique patterns | 1x | Has own config | explore |
179
174
  | Module boundary | 2x | Has index.ts/__init__.py | bash |
180
- | Symbol density | 2x | >30 symbols | LSP |
181
- | Export count | 2x | >10 exports | LSP |
182
- | Reference centrality | 3x | >20 refs | LSP |
175
+ | Symbol density | 2x | >30 symbols | LSP/cg |
176
+ | Export count | 2x | >10 exports | LSP/cg |
177
+ | Reference centrality | 3x | >20 refs | LSP/cg |
183
178
 
184
179
  ### Decision Rules
185
180
 
@@ -236,7 +231,7 @@ NEVER use Write to overwrite an existing file. ALWAYS check existence first via
236
231
  |------|----------|-------|
237
232
 
238
233
  ## CODE MAP
239
- {From LSP - skip if unavailable or project <10 files}
234
+ {From LSP/codegraph - skip only if neither exists or project <10 files}
240
235
 
241
236
  | Symbol | Type | Location | Refs | Role |
242
237
  |--------|------|----------|------|------|
@@ -319,7 +314,7 @@ Hierarchy:
319
314
  ## Anti-Patterns
320
315
 
321
316
  - **Static agent count**: MUST vary agents based on project size/depth
322
- - **Sequential execution**: MUST parallel (explore + LSP concurrent)
317
+ - **Sequential execution**: MUST parallel (explore + LSP + codegraph concurrent)
323
318
  - **Ignoring existing**: ALWAYS read existing first, even with --create-new
324
319
  - **Over-documenting**: Not every dir needs AGENTS.md
325
320
  - **Redundancy**: Child never repeats parent
@@ -0,0 +1,2 @@
1
+ interface:
2
+ display_name: "(OmO) init-deep"
@@ -1,5 +1,5 @@
1
1
  interface:
2
- display_name: "lcx-contribute-bug-fix (omo)"
2
+ display_name: "(OmO) lcx-contribute-bug-fix"
3
3
  short_description: "Contribute verified LazyCodex or Codex bug fixes"
4
4
  search_terms:
5
5
  - "lcx-contribute-bug-fix"
@@ -1,5 +1,5 @@
1
1
  interface:
2
- display_name: "lcx-doctor (omo)"
2
+ display_name: "(OmO) lcx-doctor"
3
3
  short_description: "Diagnose LazyCodex/Codex install health against latest sources"
4
4
  search_terms:
5
5
  - "lcx-doctor"
@@ -1,5 +1,5 @@
1
1
  interface:
2
- display_name: "lcx-report-bug (omo)"
2
+ display_name: "(OmO) lcx-report-bug"
3
3
  short_description: "Route LazyCodex or Codex bugs with source evidence"
4
4
  search_terms:
5
5
  - "lcx-report-bug"
@@ -0,0 +1,2 @@
1
+ interface:
2
+ display_name: "(OmO) lsp"
@@ -0,0 +1,2 @@
1
+ interface:
2
+ display_name: "(OmO) lsp-setup"