lazycodex-ai 5.0.0-beta.4 → 5.0.0-beta.42
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/README.ja.md +25 -21
- package/README.ko.md +25 -21
- package/README.md +38 -23
- package/README.ru.md +24 -20
- package/README.zh-cn.md +25 -21
- package/dist/cli/config-manager/parse-opencode-config-file.d.ts +2 -1
- package/dist/cli/doctor/checks/system-plugin.d.ts +4 -3
- package/dist/cli/fallback-lane-policy.d.ts +1 -0
- package/dist/cli/index.js +67006 -64814
- package/dist/cli/install-codex/install-codex-test-fixtures.d.ts +1 -1
- package/dist/cli/run/on-complete-hook.d.ts +2 -0
- package/dist/cli/runtime-commands.d.ts +1 -1
- package/dist/cli/worktree-sweep/classify.d.ts +16 -0
- package/dist/cli/worktree-sweep/format.d.ts +8 -0
- package/dist/cli/worktree-sweep/git.d.ts +19 -0
- package/dist/cli/worktree-sweep/index.d.ts +7 -0
- package/dist/cli/worktree-sweep/options.d.ts +2 -0
- package/dist/cli/worktree-sweep/parse-worktree-list.d.ts +8 -0
- package/dist/cli/worktree-sweep/sweep.d.ts +2 -0
- package/dist/cli/worktree-sweep/types.d.ts +65 -0
- package/dist/cli/worktree-sweep/worktree-sweep.d.ts +2 -0
- package/dist/cli-node/index.js +67283 -65068
- package/package.json +9 -9
- package/packages/git-bash-mcp/dist/cli.js +6 -1
- package/packages/lsp-daemon/dist/cli.js +804 -329
- package/packages/lsp-daemon/dist/client.d.ts +10 -0
- package/packages/lsp-daemon/dist/client.js +764 -286
- package/packages/lsp-daemon/dist/daemon-client.d.ts +1 -0
- package/packages/lsp-daemon/dist/daemon-client.js +3 -0
- package/packages/lsp-daemon/dist/ensure-daemon.js +1 -0
- package/packages/lsp-daemon/dist/index.js +768 -295
- package/packages/lsp-daemon/dist/proxy.js +3 -0
- package/packages/lsp-daemon/dist/version-reap.js +1 -1
- package/packages/lsp-daemon/package.json +1 -1
- package/packages/lsp-tools-mcp/dist/cli.js +723 -250
- package/packages/lsp-tools-mcp/dist/lsp/manager.js +259 -125
- package/packages/lsp-tools-mcp/dist/mcp.js +725 -252
- package/packages/lsp-tools-mcp/dist/request-context.js +12 -13
- package/packages/lsp-tools-mcp/dist/tools.js +729 -260
- package/packages/lsp-tools-mcp/package.json +1 -1
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +4 -6
- package/packages/omo-codex/plugin/.mcp.json +0 -6
- package/packages/omo-codex/plugin/AGENTS.md +47 -0
- package/packages/omo-codex/plugin/README.md +2 -2
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +45 -49
- 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/bootstrap/src/hook.ts +1 -0
- package/packages/omo-codex/plugin/components/comment-checker/AGENTS.md +9 -0
- package/packages/omo-codex/plugin/components/comment-checker/biome.json +2 -2
- package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +2 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +5 -5
- package/packages/omo-codex/plugin/components/comment-checker/src/apply-patch.ts +2 -8
- package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +1 -2
- package/packages/omo-codex/plugin/components/comment-checker/src/request-extractor.ts +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +1 -0
- package/packages/omo-codex/plugin/components/git-bash/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +3 -4
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/biome.json +2 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +1 -5
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +1 -5
- 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 +5 -5
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +1 -5
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +4 -21
- package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +1 -1
- package/packages/omo-codex/plugin/components/lsp/AGENTS.md +30 -15
- package/packages/omo-codex/plugin/components/lsp/biome.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +4 -4
- package/packages/omo-codex/plugin/components/lsp/dist/cli.js +752 -300
- package/packages/omo-codex/plugin/components/lsp/dist/daemon-cli-path.js +1 -1
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +5 -5
- package/packages/omo-codex/plugin/components/lsp/src/cli.ts +1 -1
- package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +1 -1
- package/packages/omo-codex/plugin/components/lsp/src/daemon-cli-path.ts +1 -5
- package/packages/omo-codex/plugin/components/lsp/test/codex-hook-unavailable.test.ts +6 -7
- package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +1 -2
- package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +11 -1
- package/packages/omo-codex/plugin/components/rules/AGENTS.md +12 -0
- package/packages/omo-codex/plugin/components/rules/biome.json +2 -2
- package/packages/omo-codex/plugin/components/rules/dist/cli.js +60 -45
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +7 -7
- package/packages/omo-codex/plugin/components/rules/src/config.ts +1 -2
- package/packages/omo-codex/plugin/components/rules/src/persistent-cache.ts +1 -2
- package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +9 -5
- package/packages/omo-codex/plugin/components/rules/src/rules-engine-factory.ts +1 -4
- package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +4 -9
- package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +11 -16
- package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +17 -25
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +9 -7
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +0 -6
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-dedup.test.ts +6 -4
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-directive.test.ts +12 -9
- package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +28 -37
- package/packages/omo-codex/plugin/components/rules/test/dynamic-target-fingerprints.test.ts +1 -2
- package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +7 -4
- package/packages/omo-codex/plugin/components/rules/test/finder.test.ts +2 -3
- package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +39 -72
- package/packages/omo-codex/plugin/components/rules/test/hephaestus-model-variant.test.ts +1 -2
- package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +2 -3
- package/packages/omo-codex/plugin/components/rules/test/matcher.test.ts +2 -3
- package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +1 -1
- package/packages/omo-codex/plugin/components/rules/test/parser.test.ts +1 -2
- package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +5 -6
- package/packages/omo-codex/plugin/components/rules/test/rules-engine-consumption.test.ts +3 -6
- package/packages/omo-codex/plugin/components/rules/test/scanner.test.ts +1 -2
- package/packages/omo-codex/plugin/components/rules/test/sources.test.ts +2 -5
- package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts +2 -17
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +5 -5
- package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +4 -10
- package/packages/omo-codex/plugin/components/telemetry/AGENTS.md +8 -0
- package/packages/omo-codex/plugin/components/telemetry/biome.json +2 -2
- package/packages/omo-codex/plugin/components/telemetry/dist/cli.js +2463 -437
- package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +2467 -441
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +5 -5
- package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +1 -4
- package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +4 -14
- package/packages/omo-codex/plugin/components/telemetry/src/product-identity.ts +1 -1
- package/packages/omo-codex/plugin/components/telemetry/test/diagnostics.test.ts +2 -5
- package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +10 -4
- package/packages/omo-codex/plugin/components/ultrawork/biome.json +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +489 -4
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +5 -6
- package/packages/omo-codex/plugin/components/ultrawork/scripts/sync-directive.mjs +30 -14
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +6 -7
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +31 -7
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +2 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +5 -5
- package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +4 -0
- package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +5 -2
- package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook-trigger-policy.test.ts +9 -1
- package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +0 -136
- package/packages/omo-codex/plugin/components/ultrawork/test/directive-source.test.ts +14 -8
- package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +12 -1
- package/packages/omo-codex/plugin/components/ultrawork/test/skill-pointer.test.ts +0 -2
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/AGENTS.md +2 -2
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/NOTICE +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/README.md +5 -5
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/biome.json +2 -2
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/directive.md +6 -6
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/dist/cli.js +12 -12
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +28 -0
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/package.json +12 -12
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/boulder-reader.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/cli.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/codex-hook.ts +3 -3
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/directive.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/index.ts +1 -1
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/boulder-reader.test.ts +3 -3
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/cli.test.ts +1 -4
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/codex-hook.test.ts +8 -22
- package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +19 -0
- package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/README.md +12 -1
- package/packages/omo-codex/plugin/components/ulw-loop/biome.json +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/directive.md +15 -3
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.d.ts +12 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.js +45 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +9 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +15 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +15 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.d.ts +8 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +120 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +40 -39
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +7 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.d.ts +2 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-output.js +12 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +958 -342
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.d.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +27 -6
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +13 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +15 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +17 -9
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +17 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +13 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +19 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.d.ts +7 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-aggregate.js +9 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.d.ts +12 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-artifacts.js +104 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.d.ts +13 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-fields.js +65 -9
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +5 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +69 -111
- package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +185 -14
- package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.d.ts +6 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/status-next-actions.js +33 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +3 -3
- package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +18 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +65 -0
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +4 -3
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +108 -0
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +22 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-codex-validation.ts +81 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +7 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +31 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-template.ts +134 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +38 -71
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +7 -2
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +14 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +3 -5
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +34 -5
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +26 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +3 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +19 -9
- package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +18 -3
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +27 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-aggregate.ts +11 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-artifacts.ts +123 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-fields.ts +68 -15
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +6 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +82 -131
- package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +187 -12
- package/packages/omo-codex/plugin/components/ulw-loop/src/status-next-actions.ts +36 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +3 -3
- package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +95 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +0 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-final.test.ts +133 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +137 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +25 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +26 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +183 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +37 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +18 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +0 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +7 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +105 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -37
- package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +9 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-aggregate-basics.test.ts +258 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-cap-and-dedupe.test.ts +22 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-poisoning-cascades.test.ts +97 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-roles.test.ts +46 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-senpi-surface.test.ts +131 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-single-report.test.ts +241 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +48 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +318 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +8 -5
- package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +74 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +13 -8
- package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +1 -0
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +17 -0
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-ulw-execute-continuation.json +17 -0
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/model-catalog.json +3 -3
- package/packages/omo-codex/plugin/package-lock.json +676 -524
- package/packages/omo-codex/plugin/package.json +2 -3
- package/packages/omo-codex/plugin/scripts/AGENTS.md +39 -0
- package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +1 -2
- package/packages/omo-codex/plugin/scripts/auto-update.mjs +0 -9
- package/packages/omo-codex/plugin/scripts/canonical-ultrawork-directive.mjs +17 -0
- package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +0 -1
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +3 -3
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +42 -31
- package/packages/omo-codex/plugin/shared/package.json +3 -4
- package/packages/omo-codex/plugin/shared/src/config-loader.ts +2 -102
- package/packages/omo-codex/plugin/shared/src/config-migration.ts +0 -1
- package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +41 -130
- package/packages/omo-codex/plugin/skills/ast-grep/AGENTS.md +51 -0
- package/packages/omo-codex/plugin/skills/ast-grep/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/AGENTS.md +62 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +3 -2
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +1 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/senpi.md +4 -4
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
- package/packages/omo-codex/plugin/skills/data-scientist/SKILL.md +99 -239
- package/packages/omo-codex/plugin/skills/data-scientist/references/execution-surfaces.md +91 -0
- package/packages/omo-codex/plugin/skills/data-scientist/references/placement.md +74 -0
- package/packages/omo-codex/plugin/skills/data-scientist/references/polars-lane.md +95 -0
- package/packages/omo-codex/plugin/skills/data-scientist/references/uv-setup.md +1 -1
- package/packages/omo-codex/plugin/skills/data-scientist/references/visualization.md +64 -0
- package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
- package/packages/omo-codex/plugin/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
- package/packages/omo-codex/plugin/skills/debugging/SKILL.md +3 -1
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/00-setup.md +12 -0
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/02-investigate.md +21 -0
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/go.md +15 -1
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/native-binary.md +38 -0
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/node.md +25 -0
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/python.md +13 -0
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/rust.md +41 -0
- package/packages/omo-codex/plugin/skills/debugging/references/scripts/dap.mjs +267 -0
- package/packages/omo-codex/plugin/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
- package/packages/omo-codex/plugin/skills/debugging/references/tools/dap.md +103 -0
- package/packages/omo-codex/plugin/skills/debugging/references/tools/frida.md +193 -0
- package/packages/omo-codex/plugin/skills/frontend/SKILL.md +12 -8
- package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +1 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/print-paged-media.md +76 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/stylegallery.md +80 -0
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/README.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/orchestration.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/designpowers/routing.md +5 -5
- package/packages/omo-codex/plugin/skills/git-master/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +14 -14
- package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/lsp-setup/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/programming/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/refactor/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +101 -419
- package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +38 -11
- package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +26 -9
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +110 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +1 -1
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +23 -18
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +9 -2
- package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +15 -3
- package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +19 -26
- package/packages/omo-codex/plugin/skills/ulw-execute/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +4 -3
- package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +108 -0
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +22 -1
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +6 -7
- package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +31 -7
- package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +2 -1
- package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +5 -5
- package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +8 -3
- package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +58 -0
- package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +4 -3
- package/packages/omo-codex/plugin/test/AGENTS.md +47 -0
- package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +19 -173
- package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +9 -48
- package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +2 -3
- package/packages/omo-codex/plugin/test/aggregate-mcp.test.mjs +2 -7
- package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +1 -1
- package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +175 -13
- package/packages/omo-codex/plugin/test/aggregate.test.mjs +78 -2
- package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +19 -33
- package/packages/omo-codex/plugin/test/auto-update.test.mjs +2 -27
- package/packages/omo-codex/plugin/test/bootstrap-setup.test.mjs +0 -31
- package/packages/omo-codex/plugin/test/canonical-ultrawork-directive.test.mjs +53 -0
- package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +2 -2
- package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -51
- package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +2 -2
- package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +4 -5
- package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +21 -27
- package/packages/omo-codex/plugin/test/mcp-research-servers.test.mjs +1 -3
- package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +8 -8
- package/packages/omo-codex/plugin/test/scaffold-plan.test.mjs +0 -36
- package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +101 -0
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +24 -14
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +14 -119
- package/packages/omo-codex/plugin/test/teammode-archive-ambiguity.test.mjs +0 -40
- package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +6 -62
- package/packages/omo-codex/plugin/test/teammode-thread-links.test.mjs +3 -36
- package/packages/omo-codex/plugin/test/teammode-transport.test.mjs +0 -44
- package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +2 -6
- package/packages/omo-codex/plugin/test/ultrawork-skill-pointer.test.mjs +5 -5
- package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +0 -3
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +2818 -913
- package/packages/{omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md → prompts-core/prompts/ultrawork/codex.md} +15 -10
- package/packages/shared-skills/package.json +7 -1
- package/packages/shared-skills/skills/ast-grep/AGENTS.md +51 -0
- package/packages/shared-skills/skills/ast-grep/SKILL.md +1 -1
- package/packages/shared-skills/skills/coding-agent-sessions/AGENTS.md +62 -0
- package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +3 -2
- package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +1 -1
- package/packages/shared-skills/skills/coding-agent-sessions/references/senpi.md +4 -4
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
- package/packages/shared-skills/skills/data-scientist/SKILL.md +99 -239
- package/packages/shared-skills/skills/data-scientist/references/execution-surfaces.md +91 -0
- package/packages/shared-skills/skills/data-scientist/references/placement.md +74 -0
- package/packages/shared-skills/skills/data-scientist/references/polars-lane.md +95 -0
- package/packages/shared-skills/skills/data-scientist/references/uv-setup.md +1 -1
- package/packages/shared-skills/skills/data-scientist/references/visualization.md +64 -0
- package/packages/shared-skills/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
- package/packages/shared-skills/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
- package/packages/shared-skills/skills/debugging/SKILL.md +3 -1
- package/packages/shared-skills/skills/debugging/references/methodology/00-setup.md +12 -0
- package/packages/shared-skills/skills/debugging/references/methodology/02-investigate.md +21 -0
- package/packages/shared-skills/skills/debugging/references/runtimes/go.md +15 -1
- package/packages/shared-skills/skills/debugging/references/runtimes/native-binary.md +38 -0
- package/packages/shared-skills/skills/debugging/references/runtimes/node.md +25 -0
- package/packages/shared-skills/skills/debugging/references/runtimes/python.md +13 -0
- package/packages/shared-skills/skills/debugging/references/runtimes/rust.md +41 -0
- package/packages/shared-skills/skills/debugging/references/scripts/dap.mjs +267 -0
- package/packages/shared-skills/skills/debugging/references/scripts/dap.test.ts +86 -0
- package/packages/shared-skills/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
- package/packages/shared-skills/skills/debugging/references/tools/dap.md +103 -0
- package/packages/shared-skills/skills/debugging/references/tools/frida.md +193 -0
- package/packages/shared-skills/skills/frontend/SKILL.md +12 -8
- package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +1 -0
- package/packages/shared-skills/skills/frontend/references/design/print-paged-media.md +76 -0
- package/packages/shared-skills/skills/frontend/references/design/stylegallery.md +80 -0
- package/packages/shared-skills/skills/frontend/references/designpowers/README.md +1 -1
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
- package/packages/shared-skills/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
- package/packages/shared-skills/skills/frontend/references/designpowers/orchestration.md +1 -1
- package/packages/shared-skills/skills/frontend/references/designpowers/routing.md +5 -5
- package/packages/shared-skills/skills/git-master/SKILL.md +1 -1
- package/packages/shared-skills/skills/init-deep/SKILL.md +14 -14
- package/packages/shared-skills/skills/lsp-setup/SKILL.md +1 -1
- package/packages/shared-skills/skills/programming/SKILL.md +1 -1
- package/packages/shared-skills/skills/refactor/SKILL.md +1 -1
- package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +1 -1
- package/packages/shared-skills/skills/review-work/SKILL.md +100 -418
- package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +38 -11
- package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +26 -9
- package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +110 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +23 -18
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +9 -2
- package/packages/shared-skills/skills/{start-work → ulw-execute}/SKILL.md +17 -16
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +7 -8
- package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +31 -7
- package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +2 -1
- package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +5 -5
- package/packages/shared-skills/skills/ulw-research/SKILL.md +8 -3
- package/packages/shared-skills/skills/visual-qa/AGENTS.md +58 -0
- package/packages/shared-skills/skills/visual-qa/SKILL.md +4 -3
- package/script/qa/web-terminal-visual-qa.mjs +2 -0
- package/script/qa/xterm-live-terminal.mjs +18 -2
- package/packages/lsp-tools-mcp/dist/lsp/cleanup-errors.d.ts +0 -1
- package/packages/lsp-tools-mcp/dist/lsp/constants.d.ts +0 -1
- package/packages/lsp-tools-mcp/dist/lsp/language-mappings.d.ts +0 -1
- package/packages/lsp-tools-mcp/dist/lsp/process-signal-cleanup.d.ts +0 -1
- package/packages/lsp-tools-mcp/dist/missing-dependency-result.d.ts +0 -1
- package/packages/omo-codex/plugin/components/codegraph/AGENTS.md +0 -58
- package/packages/omo-codex/plugin/components/codegraph/NODE-RUNTIME-LICENSES.md +0 -2951
- package/packages/omo-codex/plugin/components/codegraph/NOTICE +0 -16
- package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +0 -12136
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +0 -9734
- package/packages/omo-codex/plugin/components/codegraph/package.json +0 -33
- package/packages/omo-codex/plugin/components/codegraph/src/cache-gc.ts +0 -29
- package/packages/omo-codex/plugin/components/codegraph/src/cli.ts +0 -79
- package/packages/omo-codex/plugin/components/codegraph/src/hook-input.ts +0 -33
- package/packages/omo-codex/plugin/components/codegraph/src/hook-sweep.ts +0 -25
- package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +0 -131
- package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +0 -258
- package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +0 -309
- package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +0 -80
- package/packages/omo-codex/plugin/components/codegraph/src/post-tool-use-hook.ts +0 -34
- package/packages/omo-codex/plugin/components/codegraph/src/serve-invocation.ts +0 -29
- package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +0 -263
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-command.ts +0 -106
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-cooldown.ts +0 -145
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +0 -21
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-lock.ts +0 -139
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-outcome.ts +0 -15
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-paths.ts +0 -32
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-project.ts +0 -109
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker-result.ts +0 -148
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +0 -175
- package/packages/omo-codex/plugin/components/codegraph/src/sweep-cli.ts +0 -81
- package/packages/omo-codex/plugin/components/codegraph/test/cache-gc.test.ts +0 -34
- package/packages/omo-codex/plugin/components/codegraph/test/hook-exclusion.test.ts +0 -112
- package/packages/omo-codex/plugin/components/codegraph/test/hook-registration.test.ts +0 -26
- package/packages/omo-codex/plugin/components/codegraph/test/hook-session-start-guard.test.ts +0 -160
- package/packages/omo-codex/plugin/components/codegraph/test/hook-store-upgrade.test.ts +0 -50
- package/packages/omo-codex/plugin/components/codegraph/test/hook-sweep.test.ts +0 -29
- package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +0 -320
- package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +0 -172
- package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +0 -91
- package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +0 -100
- package/packages/omo-codex/plugin/components/codegraph/test/serve-built-wrapper.test.ts +0 -76
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge-lifecycle.test.ts +0 -133
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +0 -245
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +0 -69
- package/packages/omo-codex/plugin/components/codegraph/test/serve-node-support.test.ts +0 -43
- package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +0 -147
- package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +0 -175
- package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +0 -385
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +0 -206
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-project.test.ts +0 -58
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-state.test.ts +0 -104
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-trust-boundary.test.ts +0 -65
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-availability.test.ts +0 -106
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-cooldown.test.ts +0 -116
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +0 -258
- package/packages/omo-codex/plugin/components/codegraph/test/sweep-cli.test.ts +0 -56
- package/packages/omo-codex/plugin/components/codegraph/tsconfig.build.json +0 -13
- package/packages/omo-codex/plugin/components/codegraph/tsconfig.json +0 -25
- package/packages/omo-codex/plugin/components/start-work-continuation/LICENSE +0 -21
- package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +0 -28
- package/packages/omo-codex/plugin/components/ultrawork/directive.md +0 -471
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +0 -18
- package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +0 -17
- package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +0 -17
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +0 -17
- package/packages/omo-codex/plugin/scripts/migrate-omo-sot/editor.mjs +0 -125
- package/packages/omo-codex/plugin/scripts/migrate-omo-sot/jsonc.mjs +0 -43
- package/packages/omo-codex/plugin/scripts/migrate-omo-sot/scaffold.mjs +0 -29
- package/packages/omo-codex/plugin/scripts/migrate-omo-sot.mjs +0 -121
- package/packages/omo-codex/plugin/skills/data-scientist/references/common-scenarios.md +0 -176
- package/packages/omo-codex/plugin/skills/data-scientist/references/execution-templates.md +0 -197
- package/packages/omo-codex/plugin/skills/data-scientist/references/integration-patterns.md +0 -153
- package/packages/omo-codex/plugin/skills/data-scientist/references/performance-benchmarks.md +0 -37
- package/packages/omo-codex/plugin/skills/start-work/agents/openai.yaml +0 -2
- package/packages/omo-codex/plugin/test/aggregate-skills.test.mjs +0 -92
- package/packages/omo-codex/plugin/test/component-codegraph-mcp-smoke.test.mjs +0 -76
- package/packages/omo-codex/plugin/test/migrate-omo-sot.test.mjs +0 -179
- package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +0 -314
- package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +0 -24
- package/packages/shared-skills/skills/data-scientist/references/common-scenarios.md +0 -176
- package/packages/shared-skills/skills/data-scientist/references/execution-templates.md +0 -197
- package/packages/shared-skills/skills/data-scientist/references/integration-patterns.md +0 -153
- package/packages/shared-skills/skills/data-scientist/references/performance-benchmarks.md +0 -37
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/.gitattributes +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/CHANGELOG.md +0 -0
- /package/packages/omo-codex/plugin/components/{codegraph → ulw-execute-continuation}/LICENSE +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/plan-checklist.ts +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/src/types.ts +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-completed.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-mixed-platforms.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/boulder-single-codex-work.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-all-done.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-scaffold.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-nested-checkboxes.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/fixtures/plan-with-unchecked.md +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.build.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/tsconfig.json +0 -0
- /package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/vitest.config.ts +0 -0
|
@@ -15,103 +15,25 @@ const agentSchemaKeys = new Set([
|
|
|
15
15
|
"developer_instructions",
|
|
16
16
|
]);
|
|
17
17
|
|
|
18
|
+
// `includes` entries below are machine-consumed tokens only: EVIDENCE_RECORDED is the sentinel the
|
|
19
|
+
// lazycodex-executor-verify SubagentStop hook greps from worker messages; recommendation, blockers,
|
|
20
|
+
// codeQualityStatus, not_applicable, surfaceEvidence, and adversarialCases are fields the ulw-loop
|
|
21
|
+
// quality gate parses out of reviewer/QA reports; <attemptDir>/<goalId>-code-review.md and
|
|
22
|
+
// -manual-qa.md are the artifact names the ulw-loop spawn guard requires before a gate-reviewer
|
|
23
|
+
// spawn; currentAttemptDir is a field of `ulw-loop status --json`.
|
|
18
24
|
const lazycodexAgentInvariants = new Map([
|
|
19
|
-
[
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
],
|
|
27
|
-
[
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
effort: "low",
|
|
32
|
-
includes: [/Read-only/, /SHA-pinned GitHub permalink/, /external/],
|
|
33
|
-
},
|
|
34
|
-
],
|
|
35
|
-
[
|
|
36
|
-
"metis.toml",
|
|
37
|
-
{
|
|
38
|
-
model: "gpt-5.6-sol",
|
|
39
|
-
effort: "high",
|
|
40
|
-
includes: [/pre-planning analyst/i, /contradictions/, /Read-only/],
|
|
41
|
-
},
|
|
42
|
-
],
|
|
43
|
-
[
|
|
44
|
-
"momus.toml",
|
|
45
|
-
{
|
|
46
|
-
model: "gpt-5.6-terra",
|
|
47
|
-
effort: "high",
|
|
48
|
-
includes: [/plan reviewer/i, /OKAY, ITERATE, or REJECT/, /Read-only/],
|
|
49
|
-
},
|
|
50
|
-
],
|
|
51
|
-
[
|
|
52
|
-
"plan.toml",
|
|
53
|
-
{
|
|
54
|
-
model: "gpt-5.6-sol",
|
|
55
|
-
effort: "high",
|
|
56
|
-
includes: [/strategic planning consultant/i, /\.omo\/plans\/<slug>\.md/, /never implements/i],
|
|
57
|
-
},
|
|
58
|
-
],
|
|
59
|
-
[
|
|
60
|
-
"lazycodex-worker-low.toml",
|
|
61
|
-
{
|
|
62
|
-
model: "gpt-5.6-luna",
|
|
63
|
-
effort: "high",
|
|
64
|
-
includes: [/EVIDENCE_RECORDED: <path>/, /low-difficulty/i, /smallest correct change/i],
|
|
65
|
-
},
|
|
66
|
-
],
|
|
67
|
-
[
|
|
68
|
-
"lazycodex-worker-medium.toml",
|
|
69
|
-
{
|
|
70
|
-
model: "gpt-5.6-terra",
|
|
71
|
-
effort: "high",
|
|
72
|
-
includes: [/EVIDENCE_RECORDED: <path>/, /medium-difficulty/i, /smallest correct change/i],
|
|
73
|
-
},
|
|
74
|
-
],
|
|
75
|
-
[
|
|
76
|
-
"lazycodex-worker-high.toml",
|
|
77
|
-
{
|
|
78
|
-
model: "gpt-5.6-sol",
|
|
79
|
-
effort: "medium",
|
|
80
|
-
includes: [/EVIDENCE_RECORDED: <path>/, /high-difficulty/i, /smallest correct change/i],
|
|
81
|
-
},
|
|
82
|
-
],
|
|
83
|
-
[
|
|
84
|
-
"lazycodex-clone-fidelity-reviewer.toml",
|
|
85
|
-
{
|
|
86
|
-
model: "gpt-5.6-terra",
|
|
87
|
-
effort: "high",
|
|
88
|
-
includes: [/recommendation/, /blockers/, /\.omo\/evidence\/<goal>-clone-fidelity\.md/],
|
|
89
|
-
},
|
|
90
|
-
],
|
|
91
|
-
[
|
|
92
|
-
"lazycodex-code-reviewer.toml",
|
|
93
|
-
{
|
|
94
|
-
model: "gpt-5.6-terra",
|
|
95
|
-
effort: "medium",
|
|
96
|
-
includes: [/codeQualityStatus/, /recommendation/, /<attemptDir>\/<goalId>-code-review\.md/, /currentAttemptDir/],
|
|
97
|
-
},
|
|
98
|
-
],
|
|
99
|
-
[
|
|
100
|
-
"lazycodex-qa-executor.toml",
|
|
101
|
-
{
|
|
102
|
-
model: "gpt-5.6-luna",
|
|
103
|
-
effort: "high",
|
|
104
|
-
includes: [/not_applicable/, /surfaceEvidence/, /adversarialCases/, /<attemptDir>\/<goalId>-manual-qa\.md/],
|
|
105
|
-
},
|
|
106
|
-
],
|
|
107
|
-
[
|
|
108
|
-
"lazycodex-gate-reviewer.toml",
|
|
109
|
-
{
|
|
110
|
-
model: "gpt-5.6-sol",
|
|
111
|
-
effort: "low",
|
|
112
|
-
includes: [/APPROVE\/REJECT/, /blockers/, /<attemptDir>\/<goalId>-gate-review\.md/, /currentAttemptDir/],
|
|
113
|
-
},
|
|
114
|
-
],
|
|
25
|
+
["explorer.toml", { model: "gpt-5.6-luna", effort: "low" }],
|
|
26
|
+
["librarian.toml", { model: "gpt-5.6-luna", effort: "low" }],
|
|
27
|
+
["metis.toml", { model: "gpt-5.6-sol", effort: "high" }],
|
|
28
|
+
["momus.toml", { model: "gpt-5.6-terra", effort: "high" }],
|
|
29
|
+
["plan.toml", { model: "gpt-5.6-sol", effort: "high" }],
|
|
30
|
+
["lazycodex-worker-low.toml", { model: "gpt-5.6-luna", effort: "high", includes: [/EVIDENCE_RECORDED: <path>/] }],
|
|
31
|
+
["lazycodex-worker-medium.toml", { model: "gpt-5.6-terra", effort: "high", includes: [/EVIDENCE_RECORDED: <path>/] }],
|
|
32
|
+
["lazycodex-worker-high.toml", { model: "gpt-5.6-sol", effort: "medium", includes: [/EVIDENCE_RECORDED: <path>/] }],
|
|
33
|
+
["lazycodex-clone-fidelity-reviewer.toml", { model: "gpt-5.6-terra", effort: "high", includes: [/recommendation/, /blockers/] }],
|
|
34
|
+
["lazycodex-code-reviewer.toml", { model: "gpt-5.6-terra", effort: "medium", includes: [/codeQualityStatus/, /recommendation/, /<attemptDir>\/<goalId>-code-review\.md/, /currentAttemptDir/] }],
|
|
35
|
+
["lazycodex-qa-executor.toml", { model: "gpt-5.6-luna", effort: "high", includes: [/not_applicable/, /surfaceEvidence/, /adversarialCases/, /<attemptDir>\/<goalId>-manual-qa\.md/] }],
|
|
36
|
+
["lazycodex-gate-reviewer.toml", { model: "gpt-5.6-sol", effort: "low", includes: [/blockers/, /currentAttemptDir/] }],
|
|
115
37
|
]);
|
|
116
38
|
|
|
117
39
|
const externalSourceTokenPattern = new RegExp(
|
|
@@ -156,7 +78,6 @@ test("#given bundled Codex agents #when components/ultrawork/agents directory is
|
|
|
156
78
|
}
|
|
157
79
|
}
|
|
158
80
|
});
|
|
159
|
-
|
|
160
81
|
test("#given bundled agent TOMLs #when nickname_candidates are inspected #then they use only the codex-accepted charset", async () => {
|
|
161
82
|
// given: codex_app_server ignores a role whose nickname has characters outside
|
|
162
83
|
// ASCII letters, digits, spaces, hyphens, underscores (observed live in task-15 QA)
|
|
@@ -174,16 +95,6 @@ test("#given bundled agent TOMLs #when nickname_candidates are inspected #then t
|
|
|
174
95
|
}
|
|
175
96
|
});
|
|
176
97
|
|
|
177
|
-
test("#given planner agent prompt #when inspected #then generated artifacts stay under .omo", async () => {
|
|
178
|
-
const prompt = await readFile(join(root, "components", "ultrawork", "agents", "plan.toml"), "utf8");
|
|
179
|
-
|
|
180
|
-
assert.match(prompt, /\.omo\/plans\/<slug>\.md/);
|
|
181
|
-
assert.match(prompt, /<attemptDir>\/task-<N>-<slug>\.<ext>/);
|
|
182
|
-
assert.match(prompt, /\.omo\/evidence\/ulw\/<session>\/<goalId>\/a<attempt>/);
|
|
183
|
-
assert.doesNotMatch(prompt, /(?<!\.omo\/)plans\/<slug>\.md/);
|
|
184
|
-
assert.doesNotMatch(prompt, /(?<!\.omo\/)evidence\/task-/);
|
|
185
|
-
});
|
|
186
|
-
|
|
187
98
|
test("#given lazycodex agent prompts #when inspected #then each role pins model effort and evidence discipline", async () => {
|
|
188
99
|
const agentsDir = join(root, "components", "ultrawork", "agents");
|
|
189
100
|
|
|
@@ -197,73 +108,8 @@ test("#given lazycodex agent prompts #when inspected #then each role pins model
|
|
|
197
108
|
assert.doesNotMatch(prompt, /^blocking\s*=/m);
|
|
198
109
|
assert.doesNotMatch(prompt, externalSourceTokenPattern);
|
|
199
110
|
|
|
200
|
-
for (const pattern of invariant.includes) {
|
|
111
|
+
for (const pattern of invariant.includes ?? []) {
|
|
201
112
|
assert.match(prompt, pattern, `${fileName} must include ${pattern}`);
|
|
202
113
|
}
|
|
203
114
|
}
|
|
204
115
|
});
|
|
205
|
-
|
|
206
|
-
test("#given LazyCodex reviewer prompts #when inspected #then anti-slop review coverage is required", async () => {
|
|
207
|
-
const agentsDir = join(root, "components", "ultrawork", "agents");
|
|
208
|
-
const codeReviewer = await readFile(join(agentsDir, "lazycodex-code-reviewer.toml"), "utf8");
|
|
209
|
-
const gateReviewer = await readFile(join(agentsDir, "lazycodex-gate-reviewer.toml"), "utf8");
|
|
210
|
-
|
|
211
|
-
assert.match(codeReviewer, /remove-ai-slops/);
|
|
212
|
-
assert.match(codeReviewer, /programming/);
|
|
213
|
-
assert.match(codeReviewer, /load or consult/);
|
|
214
|
-
assert.match(codeReviewer, /documented criteria/);
|
|
215
|
-
assert.match(codeReviewer, /violates either skill perspective/);
|
|
216
|
-
assert.match(codeReviewer, /overfit\/slop review pass/);
|
|
217
|
-
assert.match(codeReviewer, /deletion-only tests/);
|
|
218
|
-
assert.match(codeReviewer, /tests that merely verify a requested removal/);
|
|
219
|
-
assert.match(codeReviewer, /tautological tests/);
|
|
220
|
-
assert.match(codeReviewer, /mirror implementation constants/);
|
|
221
|
-
assert.match(codeReviewer, /unnecessary production data extraction, parsing, or normalization/);
|
|
222
|
-
assert.match(codeReviewer, /false confidence/);
|
|
223
|
-
|
|
224
|
-
assert.match(gateReviewer, /remove-ai-slops/);
|
|
225
|
-
assert.match(gateReviewer, /programming/);
|
|
226
|
-
assert.match(gateReviewer, /load or consult/);
|
|
227
|
-
assert.match(gateReviewer, /documented criteria/);
|
|
228
|
-
assert.match(gateReviewer, /Run the `remove-ai-slops`/);
|
|
229
|
-
assert.match(gateReviewer, /Apply the `programming`/);
|
|
230
|
-
assert.match(gateReviewer, /overfit\/slop pass yourself/);
|
|
231
|
-
assert.match(gateReviewer, /tests that merely verify a requested removal/);
|
|
232
|
-
assert.match(gateReviewer, /deletion-only/);
|
|
233
|
-
assert.match(gateReviewer, /tautological/);
|
|
234
|
-
assert.match(gateReviewer, /implementation-mirroring tests/);
|
|
235
|
-
assert.match(gateReviewer, /unnecessary production extraction, parsing, or normalization/);
|
|
236
|
-
|
|
237
|
-
const directPassIndex = gateReviewer.indexOf("overfit/slop pass yourself");
|
|
238
|
-
const reportCoverageIndex = gateReviewer.indexOf("Then confirm the code review report");
|
|
239
|
-
assert.notEqual(directPassIndex, -1);
|
|
240
|
-
assert.notEqual(reportCoverageIndex, -1);
|
|
241
|
-
assert.ok(
|
|
242
|
-
directPassIndex < reportCoverageIndex,
|
|
243
|
-
"gate reviewer must perform the overfit/slop pass directly before checking report coverage",
|
|
244
|
-
);
|
|
245
|
-
});
|
|
246
|
-
|
|
247
|
-
test("#given done-gate reviewer prompts #when inspected #then burden of proof is approve-unless-cited and reject priors are gone", async () => {
|
|
248
|
-
const agentsDir = join(root, "components", "ultrawork", "agents");
|
|
249
|
-
const gateReviewer = await readFile(join(agentsDir, "lazycodex-gate-reviewer.toml"), "utf8");
|
|
250
|
-
const qaExecutor = await readFile(join(agentsDir, "lazycodex-qa-executor.toml"), "utf8");
|
|
251
|
-
const codeReviewer = await readFile(join(agentsDir, "lazycodex-code-reviewer.toml"), "utf8");
|
|
252
|
-
|
|
253
|
-
assert.match(gateReviewer, /APPROVE unless you can cite/);
|
|
254
|
-
assert.match(gateReviewer, /violatedCriterion/);
|
|
255
|
-
assert.match(gateReviewer, /evidencePointer/);
|
|
256
|
-
assert.match(gateReviewer, /top blockers inline/);
|
|
257
|
-
assert.match(gateReviewer, /is a NOTE, not a blocker/);
|
|
258
|
-
assert.match(gateReviewer, /You do NOT check/);
|
|
259
|
-
assert.doesNotMatch(gateReviewer, /Assume the work has already failed/);
|
|
260
|
-
assert.doesNotMatch(gateReviewer, /Return exactly one recommendation: APPROVE\/REJECT\./);
|
|
261
|
-
|
|
262
|
-
assert.match(qaExecutor, /one-line reason/);
|
|
263
|
-
assert.match(qaExecutor, /rejecting a legitimately untriggered class is itself an error/);
|
|
264
|
-
assert.doesNotMatch(qaExecutor, /Trust nothing\./);
|
|
265
|
-
|
|
266
|
-
assert.match(codeReviewer, /MEDIUM by default/);
|
|
267
|
-
assert.doesNotMatch(codeReviewer, /Treat useless tests or needless production complexity as CRITICAL\/HIGH/);
|
|
268
|
-
});
|
|
269
|
-
|
|
@@ -30,9 +30,8 @@ test("#given isolated components #when hooks are inspected #then commands stay i
|
|
|
30
30
|
const componentMarkers = [
|
|
31
31
|
"components/comment-checker/dist/cli.js",
|
|
32
32
|
"components/lsp/dist/cli.js",
|
|
33
|
-
"components/codegraph/dist/cli.js",
|
|
34
33
|
"components/rules/dist/cli.js",
|
|
35
|
-
"components/
|
|
34
|
+
"components/ulw-execute-continuation/dist/cli.js",
|
|
36
35
|
"components/telemetry/dist/cli.js",
|
|
37
36
|
"components/teammode/dist/cli.js",
|
|
38
37
|
"components/ulw-loop/dist/cli.js",
|
|
@@ -48,7 +47,7 @@ test("#given isolated components #when hooks are inspected #then commands stay i
|
|
|
48
47
|
assert.equal(await exists("scripts/migrate-codex-config.mjs"), true);
|
|
49
48
|
});
|
|
50
49
|
|
|
51
|
-
test("#given aggregate Stop hooks #when inspected #then
|
|
50
|
+
test("#given aggregate Stop hooks #when inspected #then ulw-execute continuation and ulw-loop resume are separate groups", async () => {
|
|
52
51
|
// given
|
|
53
52
|
const manifests = await readAggregateHookManifests();
|
|
54
53
|
|
|
@@ -60,11 +59,11 @@ test("#given aggregate Stop hooks #when inspected #then start-work continuation
|
|
|
60
59
|
|
|
61
60
|
// then
|
|
62
61
|
assert.equal(stopCommands.length, 2);
|
|
63
|
-
assert.ok(stopCommands.some((command) => command.includes("
|
|
62
|
+
assert.ok(stopCommands.some((command) => command.includes("ulw-execute-continuation/dist/cli.js")));
|
|
64
63
|
assert.ok(stopCommands.some((command) => command.includes("ulw-loop/dist/cli.js\" hook stop")));
|
|
65
64
|
});
|
|
66
65
|
|
|
67
|
-
test("#given aggregate SubagentStop hooks #when inspected #then
|
|
66
|
+
test("#given aggregate SubagentStop hooks #when inspected #then ulw-execute and LazyCodex executor verifier are separate groups", async () => {
|
|
68
67
|
// given
|
|
69
68
|
const manifests = await readAggregateHookManifests();
|
|
70
69
|
|
|
@@ -84,7 +83,7 @@ test("#given aggregate SubagentStop hooks #when inspected #then start-work and L
|
|
|
84
83
|
assert.equal(verifierGroups.length, 1);
|
|
85
84
|
assert.equal(verifierGroups[0]?.groupIndex, 0);
|
|
86
85
|
assert.equal(verifierGroups[0]?.handler.timeout, 10);
|
|
87
|
-
assert.match(verifierGroups[0]?.handler.statusMessage ?? "",
|
|
86
|
+
assert.match(verifierGroups[0]?.handler.statusMessage ?? "", /\S/);
|
|
88
87
|
});
|
|
89
88
|
|
|
90
89
|
test("#given aggregate PostCompact hooks #when hooks are inspected #then LSP diagnostics cache reset is registered", async () => {
|
|
@@ -100,7 +99,7 @@ test("#given aggregate PostCompact hooks #when hooks are inspected #then LSP dia
|
|
|
100
99
|
|
|
101
100
|
// then
|
|
102
101
|
assert.equal(lspPostCompactHooks.length, 1);
|
|
103
|
-
assert.match(lspPostCompactHooks[0]?.handler.statusMessage ?? "",
|
|
102
|
+
assert.match(lspPostCompactHooks[0]?.handler.statusMessage ?? "", /\S/);
|
|
104
103
|
});
|
|
105
104
|
|
|
106
105
|
test("#given aggregate hook commands #when inspected #then every command exposes a Codex status message", async () => {
|
|
@@ -142,23 +141,6 @@ test("#given component hook commands #when inspected #then standalone packages e
|
|
|
142
141
|
assert.deepEqual(missingStatusMessages, []);
|
|
143
142
|
});
|
|
144
143
|
|
|
145
|
-
test("#given hook status messages #when inspected #then labels describe OMO responsibilities instead of the hook runner", async () => {
|
|
146
|
-
// given
|
|
147
|
-
const componentHooks = await readComponentHookManifests();
|
|
148
|
-
|
|
149
|
-
// when
|
|
150
|
-
const commandHooks = [
|
|
151
|
-
...(await readAggregateCommandHooks()),
|
|
152
|
-
...componentHooks.flatMap(({ source, hooks }) => collectCommandHooks(hooks, source)),
|
|
153
|
-
];
|
|
154
|
-
const genericStatusMessages = commandHooks
|
|
155
|
-
.filter(({ handler }) => typeof handler.statusMessage !== "string" || /\bhook\b/i.test(handler.statusMessage))
|
|
156
|
-
.map(hookLocation);
|
|
157
|
-
|
|
158
|
-
// then
|
|
159
|
-
assert.deepEqual(genericStatusMessages, []);
|
|
160
|
-
});
|
|
161
|
-
|
|
162
144
|
test("#given aggregate OMO plugin is enabled #when hooks are inspected #then shell guidance and ulw-loop guard are registered", async () => {
|
|
163
145
|
// given
|
|
164
146
|
const manifests = await readAggregateHookManifests();
|
|
@@ -169,9 +151,7 @@ test("#given aggregate OMO plugin is enabled #when hooks are inspected #then she
|
|
|
169
151
|
|
|
170
152
|
// then
|
|
171
153
|
assert.match(text, /components\/git-bash\/dist\/cli\.js/);
|
|
172
|
-
assert.match(text, /Recommending Git Bash MCP/);
|
|
173
154
|
assert.match(text, /hook post-compact/);
|
|
174
|
-
assert.match(text, /Resetting Git Bash MCP Reminder/);
|
|
175
155
|
assert.match(text, /components\/ulw-loop\/dist\/cli\.js/);
|
|
176
156
|
assert.match(text, /hook pre-tool-use/);
|
|
177
157
|
assert.deepEqual(preToolUseGroups.map((group) => group.matcher), [
|
|
@@ -221,7 +201,6 @@ test("#given aggregate SessionStart hooks #when inspected #then LazyCodex auto-u
|
|
|
221
201
|
// then
|
|
222
202
|
assert.equal(autoUpdateGroup?.matcher, "^startup$");
|
|
223
203
|
assert.match(text, /scripts\/auto-update\.mjs/);
|
|
224
|
-
assert.match(text, /Checking Auto Update/);
|
|
225
204
|
assert(sessionStartCommands.some((command) => command.includes("scripts/auto-update.mjs")));
|
|
226
205
|
});
|
|
227
206
|
|
|
@@ -240,34 +219,16 @@ test("#given aggregate SessionStart hooks #when inspected #then cold-start-prone
|
|
|
240
219
|
const coldStartHooks = sessionStartHooks.filter(
|
|
241
220
|
({ command }) =>
|
|
242
221
|
command.includes("components/telemetry/dist/cli.js") ||
|
|
243
|
-
command.includes("scripts/auto-update.mjs")
|
|
244
|
-
command.includes("components/codegraph/dist/cli.js"),
|
|
222
|
+
command.includes("scripts/auto-update.mjs"),
|
|
245
223
|
);
|
|
246
224
|
|
|
247
225
|
// then
|
|
248
|
-
assert.equal(coldStartHooks.length,
|
|
226
|
+
assert.equal(coldStartHooks.length, 2);
|
|
249
227
|
for (const hook of coldStartHooks) {
|
|
250
228
|
assert.equal(hook.timeout, 15, `${hook.source} must carry timeout 15 for cold-start headroom`);
|
|
251
229
|
}
|
|
252
230
|
});
|
|
253
231
|
|
|
254
|
-
test("#given aggregate PostToolUse hooks #when inspected #then CodeGraph init guidance is registered for CodeGraph tools", async () => {
|
|
255
|
-
// given
|
|
256
|
-
const commandHooks = await readAggregateCommandHooks();
|
|
257
|
-
|
|
258
|
-
// when
|
|
259
|
-
const codegraphPostToolUseHooks = commandHooks.filter(
|
|
260
|
-
(hook) =>
|
|
261
|
-
hook.eventName === "PostToolUse" &&
|
|
262
|
-
hook.handler.command === 'node "${PLUGIN_ROOT}/components/codegraph/dist/cli.js" hook post-tool-use',
|
|
263
|
-
);
|
|
264
|
-
|
|
265
|
-
// then
|
|
266
|
-
assert.equal(codegraphPostToolUseHooks.length, 1);
|
|
267
|
-
assert.equal(codegraphPostToolUseHooks[0]?.matcher, "^(codegraph[._].*|mcp__codegraph__.*)$");
|
|
268
|
-
assert.match(codegraphPostToolUseHooks[0]?.handler.statusMessage ?? "", /^\(OmO [^)]+\) Checking CodeGraph Init Guidance$/);
|
|
269
|
-
});
|
|
270
|
-
|
|
271
232
|
test("#given aggregate PostToolUse hooks #when inspected #then thread title hygiene is registered for created Codex threads", async () => {
|
|
272
233
|
// given
|
|
273
234
|
const commandHooks = await readAggregateCommandHooks();
|
|
@@ -282,7 +243,7 @@ test("#given aggregate PostToolUse hooks #when inspected #then thread title hygi
|
|
|
282
243
|
// then
|
|
283
244
|
assert.equal(threadTitleHooks.length, 1);
|
|
284
245
|
assert.equal(threadTitleHooks[0]?.matcher, "^(create_thread|codex_app\\.create_thread)$");
|
|
285
|
-
assert.match(threadTitleHooks[0]?.handler.statusMessage ?? "",
|
|
246
|
+
assert.match(threadTitleHooks[0]?.handler.statusMessage ?? "", /\S/);
|
|
286
247
|
});
|
|
287
248
|
|
|
288
249
|
test("#given aggregate plugin packaging #when inspected #then hooks and compatibility sentinels stay Python-free", async () => {
|
|
@@ -17,7 +17,7 @@ test("#given aggregate plugin manifest #when inspected #then it owns the omo nam
|
|
|
17
17
|
// then
|
|
18
18
|
assert.equal(manifest.name, "omo");
|
|
19
19
|
assert(Array.isArray(hookPaths));
|
|
20
|
-
assert.equal(hookPaths.length,
|
|
20
|
+
assert.equal(hookPaths.length, 21);
|
|
21
21
|
assert(hookPaths.every((hookPath) => typeof hookPath === "string" && hookPath.startsWith("./hooks/")));
|
|
22
22
|
assert(!hookPaths.includes("./hooks/hooks.json"));
|
|
23
23
|
assert(!hookPaths.includes("./hooks/user-prompt-submit-selecting-lazycodex-workflow.json"));
|
|
@@ -54,16 +54,15 @@ test("#given component directories #when scanned #then only intentional resource
|
|
|
54
54
|
// then
|
|
55
55
|
assert.deepEqual(componentNames, [
|
|
56
56
|
"bootstrap",
|
|
57
|
-
"codegraph",
|
|
58
57
|
"comment-checker",
|
|
59
58
|
"git-bash",
|
|
60
59
|
"lazycodex-executor-verify",
|
|
61
60
|
"lsp",
|
|
62
61
|
"rules",
|
|
63
|
-
"start-work-continuation",
|
|
64
62
|
"teammode",
|
|
65
63
|
"telemetry",
|
|
66
64
|
"ultrawork",
|
|
65
|
+
"ulw-execute-continuation",
|
|
67
66
|
"ulw-loop",
|
|
68
67
|
]);
|
|
69
68
|
for (const name of componentNames) {
|
|
@@ -18,14 +18,13 @@ test("#given aggregate MCP config #when inspected #then code MCPs reference pack
|
|
|
18
18
|
// when
|
|
19
19
|
const lspServer = mcp.mcpServers.lsp;
|
|
20
20
|
const gitBashServer = mcp.mcpServers.git_bash;
|
|
21
|
-
const codegraphServer = mcp.mcpServers.codegraph;
|
|
22
21
|
const codeMcpNames = Object.keys(mcp.mcpServers)
|
|
23
|
-
.filter((name) => name === "lsp" || name === "git_bash"
|
|
22
|
+
.filter((name) => name === "lsp" || name === "git_bash")
|
|
24
23
|
.sort();
|
|
25
24
|
const componentLocalMcpSources = lspSources.filter((name) => name.startsWith("lazy-mcp") || name === "lazy-lsp-mcp.ts");
|
|
26
25
|
|
|
27
26
|
// then
|
|
28
|
-
assert.deepEqual(codeMcpNames, ["
|
|
27
|
+
assert.deepEqual(codeMcpNames, ["git_bash", "lsp"]);
|
|
29
28
|
assert.equal(packageJson.workspaces.includes("components/lsp/packages/lsp-tools-mcp"), false);
|
|
30
29
|
assert.deepEqual(packageJson.dependencies, { "@oh-my-opencode/shared-skills": "file:../../shared-skills" });
|
|
31
30
|
assert.doesNotMatch(bundledMcpBuildScript, new RegExp(["ast", "grep", "mcp"].join("-")));
|
|
@@ -38,10 +37,6 @@ test("#given aggregate MCP config #when inspected #then code MCPs reference pack
|
|
|
38
37
|
assert.equal(gitBashServer.command, "node");
|
|
39
38
|
assert.deepEqual(gitBashServer.args, ["../../git-bash-mcp/dist/cli.js", "mcp"]);
|
|
40
39
|
assert.equal(gitBashServer.cwd, ".");
|
|
41
|
-
assert.equal(codegraphServer.command, "node");
|
|
42
|
-
assert.deepEqual(codegraphServer.args, ["components/codegraph/dist/serve.js"]);
|
|
43
|
-
assert.equal(codegraphServer.cwd, ".");
|
|
44
|
-
assert.equal(codegraphServer.required, false);
|
|
45
40
|
assert.deepEqual(componentLocalMcpSources, []);
|
|
46
41
|
});
|
|
47
42
|
|
|
@@ -9,7 +9,7 @@ test("#given bundled model catalog #when inspected #then default verifier and wo
|
|
|
9
9
|
const catalog = JSON.parse(await readFile(join(root, "model-catalog.json"), "utf8"));
|
|
10
10
|
|
|
11
11
|
assert.equal(catalog.current.model, "gpt-5.6-sol");
|
|
12
|
-
assert.equal(catalog.current.model_context_window,
|
|
12
|
+
assert.equal(catalog.current.model_context_window, 650000);
|
|
13
13
|
assert.equal(catalog.current.model_reasoning_effort, "high");
|
|
14
14
|
assert.equal(catalog.current.plan_mode_reasoning_effort, "xhigh");
|
|
15
15
|
assert.deepEqual(catalog.roles.default, catalog.current);
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { readdir, readFile, stat } from "node:fs/promises";
|
|
2
|
-
import { dirname, join } from "node:path";
|
|
2
|
+
import { basename, dirname, join, sep } from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
|
-
|
|
5
4
|
export const root = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
6
5
|
export const repoRoot = join(root, "..", "..", "..");
|
|
7
|
-
|
|
8
6
|
export async function readJson(relativePath) {
|
|
9
7
|
return JSON.parse(await readFile(join(root, relativePath), "utf8"));
|
|
10
8
|
}
|
|
@@ -79,18 +77,182 @@ export function hookLocation({ source, eventName, groupIndex, handlerIndex, hand
|
|
|
79
77
|
return `${source}:${eventName}:${groupIndex}:${handlerIndex}:${handler.command}`;
|
|
80
78
|
}
|
|
81
79
|
|
|
82
|
-
|
|
83
|
-
|
|
80
|
+
const SPAWN_AGENT_START = /(?:(?<receiver>\b[A-Za-z_]\w*)\s*\.\s*)?(?<callee>\bspawn_agent)\s*\(/g;
|
|
81
|
+
|
|
82
|
+
async function collectFiles(directory, predicate) {
|
|
83
|
+
let entries;
|
|
84
|
+
try {
|
|
85
|
+
entries = await readdir(directory, { withFileTypes: true });
|
|
86
|
+
} catch (error) {
|
|
87
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") return [];
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const files = [];
|
|
92
|
+
for (const entry of entries) {
|
|
93
|
+
const path = join(directory, entry.name);
|
|
94
|
+
if (entry.isDirectory()) files.push(...(await collectFiles(path, predicate)));
|
|
95
|
+
else if (entry.isFile() && predicate(path)) files.push(path);
|
|
96
|
+
}
|
|
97
|
+
return files;
|
|
84
98
|
}
|
|
85
99
|
|
|
86
|
-
export function
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
100
|
+
export async function listShippedSpawnPromptFiles() {
|
|
101
|
+
const skillFiles = [
|
|
102
|
+
...(await collectFiles(join(root, "skills"), (path) => basename(path) === "SKILL.md")),
|
|
103
|
+
...(await collectFiles(
|
|
104
|
+
join(root, "components"),
|
|
105
|
+
(path) => path.includes(`${sep}skills${sep}`) && basename(path) === "SKILL.md",
|
|
106
|
+
)),
|
|
107
|
+
];
|
|
108
|
+
const hephaestusRules = await collectFiles(
|
|
109
|
+
join(root, "components", "rules", "bundled-rules", "hephaestus"),
|
|
110
|
+
(path) => path.endsWith(".md"),
|
|
111
|
+
);
|
|
112
|
+
return [...skillFiles, ...hephaestusRules].sort();
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function findSpawnAgentCalls(content) {
|
|
116
|
+
const calls = [];
|
|
117
|
+
for (const match of content.matchAll(SPAWN_AGENT_START)) {
|
|
118
|
+
const openingParenthesis = match.index + match[0].lastIndexOf("(");
|
|
119
|
+
let depth = 1;
|
|
120
|
+
let quote = null;
|
|
121
|
+
let escaped = false;
|
|
122
|
+
|
|
123
|
+
for (let index = openingParenthesis + 1; index < content.length; index += 1) {
|
|
124
|
+
const character = content[index];
|
|
125
|
+
if (quote !== null) {
|
|
126
|
+
if (escaped) escaped = false;
|
|
127
|
+
else if (character === "\\") escaped = true;
|
|
128
|
+
else if (character === quote) quote = null;
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (character === '"' || character === "'" || character === "`") {
|
|
132
|
+
quote = character;
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
if (character === "(") depth += 1;
|
|
136
|
+
else if (character === ")") depth -= 1;
|
|
137
|
+
if (depth !== 0) continue;
|
|
138
|
+
|
|
139
|
+
const { receiver = null, callee } = match.groups;
|
|
140
|
+
calls.push({ call: content.slice(match.index, index + 1), index: match.index, receiver, callee });
|
|
141
|
+
break;
|
|
93
142
|
}
|
|
94
143
|
}
|
|
95
|
-
return
|
|
144
|
+
return calls;
|
|
96
145
|
}
|
|
146
|
+
|
|
147
|
+
function tokensForSpawnCall(call) {
|
|
148
|
+
const tokens = [];
|
|
149
|
+
let braceDepth = 0;
|
|
150
|
+
let bracketDepth = 0;
|
|
151
|
+
let parenthesisDepth = 0;
|
|
152
|
+
|
|
153
|
+
for (let index = call.indexOf("(") + 1; index < call.length - 1; ) {
|
|
154
|
+
const character = call[index];
|
|
155
|
+
if (/\s/.test(character)) {
|
|
156
|
+
index += 1;
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
if (character === '"' || character === "'" || character === "`") {
|
|
160
|
+
const start = index;
|
|
161
|
+
const quote = character;
|
|
162
|
+
let value = "";
|
|
163
|
+
index += 1;
|
|
164
|
+
while (index < call.length - 1) {
|
|
165
|
+
const current = call[index];
|
|
166
|
+
if (current === "\\" && index + 1 < call.length - 1) {
|
|
167
|
+
value += call[index + 1];
|
|
168
|
+
index += 2;
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
index += 1;
|
|
172
|
+
if (current === quote) break;
|
|
173
|
+
value += current;
|
|
174
|
+
}
|
|
175
|
+
tokens.push({ type: "string", value, start, end: index, braceDepth, bracketDepth, parenthesisDepth });
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
if (/[A-Za-z_]/.test(character)) {
|
|
179
|
+
const start = index;
|
|
180
|
+
while (/[A-Za-z0-9_]/.test(call[index] ?? "")) index += 1;
|
|
181
|
+
tokens.push({ type: "identifier", value: call.slice(start, index), start, end: index,
|
|
182
|
+
braceDepth, bracketDepth, parenthesisDepth });
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (character === "{") braceDepth += 1;
|
|
187
|
+
else if (character === "}") braceDepth -= 1;
|
|
188
|
+
else if (character === "[") bracketDepth += 1;
|
|
189
|
+
else if (character === "]") bracketDepth -= 1;
|
|
190
|
+
else if (character === "(") parenthesisDepth += 1;
|
|
191
|
+
else if (character === ")") parenthesisDepth -= 1;
|
|
192
|
+
else if (character === ":" || character === "=") {
|
|
193
|
+
tokens.push({ type: "separator", value: character, start: index, end: index + 1,
|
|
194
|
+
braceDepth, bracketDepth, parenthesisDepth });
|
|
195
|
+
}
|
|
196
|
+
index += 1;
|
|
197
|
+
}
|
|
198
|
+
return tokens;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
function spawnParameters(call) {
|
|
202
|
+
const tokens = tokensForSpawnCall(call);
|
|
203
|
+
const parameters = [];
|
|
204
|
+
for (let index = 0; index < tokens.length - 2; index += 1) {
|
|
205
|
+
const key = tokens[index];
|
|
206
|
+
const separator = tokens[index + 1];
|
|
207
|
+
const value = tokens[index + 2];
|
|
208
|
+
const isArgumentScope = key.parenthesisDepth === 0 && key.bracketDepth === 0 && key.braceDepth <= 1;
|
|
209
|
+
const isSameScope =
|
|
210
|
+
separator.braceDepth === key.braceDepth && separator.bracketDepth === key.bracketDepth &&
|
|
211
|
+
separator.parenthesisDepth === key.parenthesisDepth && value.braceDepth === key.braceDepth &&
|
|
212
|
+
value.bracketDepth === key.bracketDepth &&
|
|
213
|
+
value.parenthesisDepth === key.parenthesisDepth;
|
|
214
|
+
const isAdjacent = /^\s*$/.test(call.slice(key.end, separator.start)) &&
|
|
215
|
+
/^\s*$/.test(call.slice(separator.end, value.start));
|
|
216
|
+
if (!isArgumentScope || !isSameScope || !isAdjacent || separator.type !== "separator") continue;
|
|
217
|
+
parameters.push({ name: key.value, value, direct: key.braceDepth === 0 });
|
|
218
|
+
}
|
|
219
|
+
return parameters;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
export function hasSpawnIsolationArgument(call) {
|
|
223
|
+
return spawnParameters(call).some(
|
|
224
|
+
({ name, value }) => (name === "fork_context" && value.type === "identifier" && value.value === "false") ||
|
|
225
|
+
(name === "fork_turns" && value.type === "string" && value.value === "none"),
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export function findSpawnAgentCallsWithoutIsolation(content) {
|
|
230
|
+
return findSpawnAgentCalls(content).filter(({ call }) => !hasSpawnIsolationArgument(call));
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export function findSpawnAgentCallsWithUnsupportedParameters(content) {
|
|
234
|
+
return findSpawnAgentCalls(content).flatMap((entry) => {
|
|
235
|
+
const allowsObjectAgentType = entry.receiver === "multi_agent_v1";
|
|
236
|
+
const parameters = spawnParameters(entry.call)
|
|
237
|
+
.filter(({ name, direct }) => name === "model" || name === "reasoning_effort" ||
|
|
238
|
+
(name === "agent_type" && (direct || !allowsObjectAgentType)))
|
|
239
|
+
.map(({ name }) => name);
|
|
240
|
+
return parameters.length === 0 ? [] : [{ ...entry, parameters }];
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
async function findShippedSpawnViolations(findViolations) {
|
|
245
|
+
const violations = [];
|
|
246
|
+
for (const path of await listShippedSpawnPromptFiles()) {
|
|
247
|
+
const content = await readFile(path, "utf8");
|
|
248
|
+
for (const violation of findViolations(content)) {
|
|
249
|
+
const line = content.slice(0, violation.index).split("\n").length;
|
|
250
|
+
violations.push({ path, line, ...violation });
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return violations;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
export const findShippedSpawnIsolationViolations = () => findShippedSpawnViolations(findSpawnAgentCallsWithoutIsolation);
|
|
257
|
+
export const findShippedUnsupportedSpawnParameterViolations = () =>
|
|
258
|
+
findShippedSpawnViolations(findSpawnAgentCallsWithUnsupportedParameters);
|