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.
- package/.agents/skills/codex-qa/scripts/lib/app-server-client.mjs +132 -82
- package/.agents/skills/codex-qa/scripts/lib/app-server-client.test.js +48 -0
- package/.agents/skills/opencode-qa/scripts/serve-wake-split-probe.sh +361 -84
- package/.agents/skills/work-with-pr/SKILL.md +19 -5
- package/.opencode/skills/work-with-pr/SKILL.md +19 -5
- package/dist/agents/atlas/agent.d.ts +3 -2
- package/dist/agents/sisyphus/glm-5-2.d.ts +4 -0
- package/dist/agents/sisyphus/index.d.ts +1 -0
- package/dist/agents/sisyphus-agent-config.d.ts +1 -0
- package/dist/agents/sisyphus-junior/agent.d.ts +1 -1
- package/dist/agents/sisyphus-junior/glm-5-2.d.ts +1 -0
- package/dist/agents/sisyphus-junior/index.d.ts +1 -0
- package/dist/agents/types.d.ts +7 -6
- package/dist/cli/index.js +449 -318
- package/dist/cli-node/index.js +449 -318
- package/dist/features/background-agent/parent-wake-flush-runner.d.ts +1 -0
- package/dist/features/background-agent/parent-wake-history-state.d.ts +1 -0
- package/dist/features/background-agent/parent-wake-session-history.d.ts +1 -47
- package/dist/features/background-agent/parent-wake-session-message.d.ts +47 -0
- package/dist/hooks/keyword-detector/ultrawork/glm.d.ts +2 -0
- package/dist/hooks/keyword-detector/ultrawork/index.d.ts +4 -2
- package/dist/hooks/keyword-detector/ultrawork/source-detector.d.ts +5 -4
- package/dist/index.js +1185 -87
- package/dist/plugin/tool-execute-before.d.ts +2 -0
- package/dist/plugin-handlers/plugin-components-loader.d.ts +1 -0
- package/dist/skills/init-deep/SKILL.md +21 -26
- package/dist/skills/programming/SKILL.md +25 -121
- package/dist/skills/programming/references/code-smells.md +390 -0
- package/dist/skills/ulw-plan/SKILL.md +2 -1
- package/dist/skills/ulw-plan/references/full-workflow.md +1 -1
- package/dist/skills/ulw-plan/references/intent-clear.md +2 -2
- package/dist/tools/delegate-task/sync-session-poller.d.ts +1 -2
- package/dist/tools/delegate-task/sync-session-turns.d.ts +3 -0
- package/dist/tui.js +16 -7
- package/package.json +13 -13
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +22 -2
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +51 -21
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +18 -7
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +9 -2
- package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
- package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +8 -7
- package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +7 -2
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +2 -1
- package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +20 -19
- package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +94 -0
- package/packages/omo-codex/plugin/components/codegraph/test/serve-node-support.test.ts +33 -0
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/test/package-smoke.test.ts +2 -71
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +26 -104
- package/packages/omo-codex/plugin/components/rules/dist/cli.js +2 -2
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/src/sparkshell-awareness.ts +2 -2
- package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +12 -92
- package/packages/omo-codex/plugin/components/rules/test/sparkshell-awareness.test.ts +3 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/dist/cli.js +157 -234
- package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -2
- package/packages/omo-codex/plugin/components/start-work-continuation/src/boulder-reader.ts +227 -15
- package/packages/omo-codex/plugin/components/start-work-continuation/test/boulder-reader.test.ts +62 -2
- package/packages/omo-codex/plugin/components/start-work-continuation/test/cli.test.ts +34 -3
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/SKILL.md +139 -0
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-guide.mjs +111 -0
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-state.mjs +250 -0
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team.mjs +220 -0
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/test-support/package-smoke-fixture.ts +158 -0
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +2 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/agents/openai.yaml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +76 -49
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/agents/openai.yaml +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +17 -0
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +17 -0
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +17 -0
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +17 -0
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +17 -0
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +17 -0
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +17 -0
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +17 -0
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +17 -0
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +17 -0
- package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +16 -0
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +16 -0
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +16 -0
- package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +16 -0
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +16 -0
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +17 -0
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +16 -0
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +16 -0
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +16 -0
- package/packages/omo-codex/plugin/package-lock.json +12 -22
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/scripts/auto-update.mjs +1 -1
- package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +14 -11
- package/packages/omo-codex/plugin/scripts/sync-hook-status-messages.mjs +15 -4
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +37 -0
- package/packages/omo-codex/plugin/skills/ast-grep/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/comment-checker/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/debugging/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/frontend/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/git-master/agents/openai.yaml +1 -1
- package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +21 -26
- package/packages/omo-codex/plugin/skills/init-deep/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/agents/openai.yaml +1 -1
- package/packages/omo-codex/plugin/skills/lcx-doctor/agents/openai.yaml +1 -1
- package/packages/omo-codex/plugin/skills/lcx-report-bug/agents/openai.yaml +1 -1
- package/packages/omo-codex/plugin/skills/lsp/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/lsp-setup/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/programming/SKILL.md +25 -121
- package/packages/omo-codex/plugin/skills/programming/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/programming/references/code-smells.md +390 -0
- package/packages/omo-codex/plugin/skills/refactor/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/remove-ai-slops/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/review-work/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/rules/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/start-work/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/teammode/SKILL.md +139 -0
- package/packages/omo-codex/plugin/skills/teammode/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/teammode/scripts/team-guide.mjs +111 -0
- package/packages/omo-codex/plugin/skills/teammode/scripts/team-state.mjs +250 -0
- package/packages/omo-codex/plugin/skills/teammode/scripts/team.mjs +220 -0
- package/packages/omo-codex/plugin/skills/ultraresearch/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/ulw-loop/agents/openai.yaml +1 -1
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +2 -1
- package/packages/omo-codex/plugin/skills/ulw-plan/agents/openai.yaml +1 -1
- package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +1 -1
- package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +2 -2
- package/packages/omo-codex/plugin/skills/visual-qa/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +34 -33
- package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +5 -2
- package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +13 -0
- package/packages/omo-codex/plugin/test/auto-update.test.mjs +1 -1
- package/packages/omo-codex/plugin/test/bootstrap-binlinks.test.mjs +1 -1
- package/packages/omo-codex/plugin/test/bootstrap-hooks.test.mjs +14 -6
- package/packages/omo-codex/plugin/test/bootstrap-ps-guard.test.mjs +7 -3
- package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +31 -0
- package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +3 -3
- package/packages/omo-codex/plugin/test/display-metadata.test.mjs +83 -0
- package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +30 -19
- package/packages/omo-codex/plugin/test/lcx-bug-skills.test.mjs +3 -3
- package/packages/omo-codex/plugin/test/sync-hook-status-messages.test.mjs +6 -6
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +2 -0
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +9 -4
- package/packages/omo-codex/plugin/test/teammode-safety-fixture.mjs +88 -0
- package/packages/omo-codex/plugin/test/teammode-safety.test.mjs +240 -0
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +412 -216
- package/packages/omo-codex/scripts/install-git-bash-mcp-env.test.mjs +24 -0
- package/packages/omo-codex/scripts/install-hook-targets.test.mjs +93 -0
- package/packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs +2 -2
- package/packages/omo-codex/scripts/install-local-bun-global-update.test.mjs +63 -0
- package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +109 -1
- package/packages/omo-codex/scripts/install-local.mjs +1 -0
- package/packages/omo-codex/scripts/install-mcp-runtime.test.mjs +36 -0
- package/packages/shared-skills/skills/init-deep/SKILL.md +21 -26
- package/packages/shared-skills/skills/programming/SKILL.md +25 -121
- package/packages/shared-skills/skills/programming/references/code-smells.md +390 -0
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +2 -1
- package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +1 -1
- package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +2 -2
- 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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
27
|
-
|
|
28
|
-
|
|
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
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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() {
|
|
@@ -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
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
138
|
-
```
|
|
139
|
-
LspServers() # Check availability
|
|
137
|
+
#### 3. Code Map - drive LSP AND codegraph (do NOT skip)
|
|
140
138
|
|
|
141
|
-
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
-
|
|
151
|
-
|
|
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
|
-
|
|
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
|
|
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
|