lazycodex-ai 5.0.0-beta.6 → 5.0.0-beta.61
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 +65 -60
- package/README.ko.md +66 -61
- package/README.md +65 -72
- package/README.ru.md +62 -60
- package/README.zh-cn.md +61 -60
- package/dist/cli/config-manager/parse-opencode-config-file.d.ts +2 -1
- package/dist/cli/doctor/checks/index.d.ts +2 -0
- package/dist/cli/doctor/checks/latest-version.d.ts +11 -0
- package/dist/cli/doctor/checks/system-plugin.d.ts +4 -3
- package/dist/cli/doctor/framework/constants.d.ts +5 -0
- package/dist/cli/doctor/framework/types.d.ts +2 -0
- package/dist/cli/fallback-lane-policy.d.ts +1 -0
- package/dist/cli/index.js +52548 -60412
- 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 +51202 -59043
- package/package.json +11 -9
- package/packages/git-bash-mcp/dist/cli.js +6 -1
- package/packages/lsp-daemon/dist/cli.js +902 -479
- package/packages/lsp-daemon/dist/client.d.ts +10 -0
- package/packages/lsp-daemon/dist/client.js +920 -493
- 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.d.ts +6 -1
- package/packages/lsp-daemon/dist/ensure-daemon.js +10 -2
- package/packages/lsp-daemon/dist/index.js +824 -402
- package/packages/lsp-daemon/dist/ownership.js +2 -2
- 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 +762 -341
- package/packages/lsp-tools-mcp/dist/lsp/manager.js +272 -138
- package/packages/lsp-tools-mcp/dist/mcp.js +787 -368
- package/packages/lsp-tools-mcp/dist/request-context.js +12 -13
- package/packages/lsp-tools-mcp/dist/tools.js +717 -302
- 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 +6 -2
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +7093 -408
- 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/bootstrap/src/setup.ts +7 -1
- 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/dist/cli.js +1 -1
- package/packages/omo-codex/plugin/components/git-bash/dist/codex-hook.js +2 -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/git-bash/src/codex-hook.ts +2 -1
- package/packages/omo-codex/plugin/components/git-bash/test/codex-hook.test.ts +6 -7
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/AGENTS.md +2 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/biome.json +2 -2
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/directive.md +2 -0
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +36 -29
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +32 -26
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/types.d.ts +3 -0
- 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 +32 -28
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/types.ts +3 -0
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/cli.test.ts +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +137 -28
- package/packages/omo-codex/plugin/components/lcx/skills/lcx-doctor/SKILL.md +4 -2
- 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 +941 -540
- 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/README.md +2 -0
- package/packages/omo-codex/plugin/components/rules/biome.json +2 -2
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +123 -0
- package/packages/omo-codex/plugin/components/rules/dist/cli.js +91 -68
- 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 +15 -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 +38 -3
- 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 +29 -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 +2407 -684
- package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +2411 -689
- 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/README.md +2 -0
- package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-clone-fidelity-reviewer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-low.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/metis.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/biome.json +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +499 -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 +4 -4
- 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 +6 -6
- 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 +10 -10
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/dist/cli.js +16 -16
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +16 -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 +4 -4
- 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}/src/types.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 +4 -11
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/test/codex-hook.test.ts +24 -22
- package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +19 -0
- package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +3 -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 +46 -24
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.d.ts +16 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.js +25 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-continuation.js +10 -4
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.d.ts +2 -5
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-reconciliation.js +5 -78
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.d.ts +12 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-template.js +114 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.d.ts +7 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +50 -42
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-arg-parser.js +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +21 -8
- 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.d.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +40 -37
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +1468 -535
- 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 +28 -8
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +2 -5
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +24 -20
- package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/constants.js +1 -0
- 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.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +13 -4
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-io.js +34 -4
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.d.ts +14 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-missing-recovery.js +29 -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 +72 -117
- package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.d.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +16 -7
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.d.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.js +141 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.d.ts +46 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.js +28 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.d.ts +127 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.js +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.d.ts +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk.js +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.d.ts +7 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +216 -33
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.d.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-role-guard.js +22 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.d.ts +9 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/state-lock.js +227 -0
- 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 +20 -6
- package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.d.ts +19 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +75 -0
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +18 -5
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +6 -6
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +10 -4
- 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 +32 -8
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-codex-validation.ts +40 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-continuation.ts +8 -6
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-reconciliation.ts +5 -98
- 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 +52 -73
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-arg-parser.ts +10 -4
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +24 -8
- 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 +52 -46
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +8 -6
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +35 -7
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +34 -28
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +3 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/constants.ts +1 -0
- 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 +25 -4
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +39 -4
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-missing-recovery.ts +38 -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 +71 -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 +92 -136
- package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +29 -8
- package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/factory.ts +183 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/manifest.ts +42 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/types.ts +140 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/sdk.ts +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +226 -31
- package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-role-guard.ts +22 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/state-lock.ts +239 -0
- 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 +19 -6
- package/packages/omo-codex/plugin/components/ulw-loop/src/surface.ts +107 -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 +131 -82
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-template.test.ts +147 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint.test.ts +16 -22
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint-continuation.test.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-checkpoint.test.ts +31 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-complete-goals.test.ts +3 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +35 -8
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +38 -4
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-json-errors.test.ts +27 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-scope-required.test.ts +144 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-status-next-actions.test.ts +185 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering-batch.test.ts +8 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-validation-batch.test.ts +6 -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 +52 -11
- 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/cli-session.ts +4 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +9 -4
- package/packages/omo-codex/plugin/components/ulw-loop/test/guided-recovery.test.ts +67 -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/plan-io-cross-process.test.ts +106 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +36 -2
- 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-fields-messages.test.ts +98 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate-lazycodex-surface.test.ts +93 -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 +51 -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 +58 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/review-blockers.test.ts +9 -7
- package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-contract.test.ts +137 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-driver-states.test.ts +145 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-session-context.test.ts +148 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +450 -7
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-role-matrix.test.ts +113 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/state-lock.test.ts +218 -0
- 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/post-tool-use-recording-spawn-admission.json +18 -0
- 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-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 +16 -7
- 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 +16 -7
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/multi-agent-v2-guard.mjs +8 -4
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/subagent-limit-guard.mjs +19 -90
- package/packages/omo-codex/plugin/scripts/migrate-codex-config/toml-section-editor.mjs +1 -1
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +96 -57
- 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 +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/ATTRIBUTION.md +10 -0
- package/packages/omo-codex/plugin/skills/frontend/SKILL.md +15 -8
- package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +10 -2
- package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +2 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/ambience-skill.md +145 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/interaction-skill.md +2 -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 +20 -18
- package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +4 -2
- 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 +10 -8
- package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +7 -5
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +116 -424
- 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 +46 -24
- package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +31 -33
- package/packages/omo-codex/plugin/skills/ulw-execute/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +34 -4
- 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 +32 -8
- 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 +14 -7
- package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +58 -0
- package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +10 -7
- 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 +16 -51
- 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 +14 -4
- 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 +4 -29
- package/packages/omo-codex/plugin/test/bootstrap-default-role.test.mjs +66 -0
- 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 +100 -2
- package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +5 -6
- 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 +35 -35
- package/packages/omo-codex/plugin/test/multi-agent-v2-regression.test.mjs +1 -1
- package/packages/omo-codex/plugin/test/scaffold-plan.test.mjs +0 -36
- package/packages/omo-codex/plugin/test/subagent-limit-migration.test.mjs +107 -15
- package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +168 -0
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +54 -24
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +18 -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 +9652 -1394
- package/packages/{omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md → prompts-core/prompts/ultrawork/codex.md} +46 -31
- package/packages/shared-skills/package.json +7 -1
- package/packages/shared-skills/skill-source-filter.d.ts +16 -0
- package/packages/shared-skills/skill-source-filter.mjs +44 -0
- 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 +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/ATTRIBUTION.md +10 -0
- package/packages/shared-skills/skills/frontend/SKILL.md +15 -8
- package/packages/shared-skills/skills/frontend/references/design/README.md +10 -2
- package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +2 -0
- package/packages/shared-skills/skills/frontend/references/design/ambience-skill.md +145 -0
- package/packages/shared-skills/skills/frontend/references/design/interaction-skill.md +2 -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 +4 -4
- package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +1 -1
- package/packages/shared-skills/skills/review-work/SKILL.md +101 -419
- 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 +20 -19
- 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-plan/scripts/scaffold-plan.mjs +1 -1
- 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 -12149
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +0 -9747
- 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}/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
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
2
|
import {
|
|
3
|
-
chmodSync,
|
|
4
3
|
cpSync,
|
|
5
4
|
existsSync,
|
|
6
5
|
mkdirSync,
|
|
@@ -25,13 +24,12 @@ const HOOK_EVENTS_BY_COMPONENT = {
|
|
|
25
24
|
"lazycodex-executor-verify": "subagent-stop",
|
|
26
25
|
lsp: "post-compact",
|
|
27
26
|
rules: "session-start",
|
|
28
|
-
"
|
|
27
|
+
"ulw-execute-continuation": "stop",
|
|
29
28
|
telemetry: "session-start",
|
|
30
29
|
teammode: "post-tool-use",
|
|
31
30
|
ultrawork: "user-prompt-submit",
|
|
32
31
|
"ulw-loop": "pre-tool-use",
|
|
33
32
|
};
|
|
34
|
-
const MCP_ONLY_COMPONENTS = new Set(["codegraph"]);
|
|
35
33
|
const HOOK_CLI_TEST_TIMEOUT_MS = 45_000;
|
|
36
34
|
const DAEMON_EXIT_TIMEOUT_MS = 5_000;
|
|
37
35
|
|
|
@@ -84,38 +82,6 @@ test("#given built workspace component CLIs #when dynamically imported with hook
|
|
|
84
82
|
assert.deepEqual(failures, []);
|
|
85
83
|
});
|
|
86
84
|
|
|
87
|
-
test("#given built MCP-only CodeGraph entries #when executed with a fake binary #then each entry is self-contained", () => {
|
|
88
|
-
const tempRoot = mkdtempSync(join(tmpdir(), "omo-codex-mcp-wrapper-"));
|
|
89
|
-
try {
|
|
90
|
-
const fakeBinaryPath = join(tempRoot, "codegraph-fake.cjs");
|
|
91
|
-
const invocationLogPath = join(tempRoot, "invocations.log");
|
|
92
|
-
writeFileSync(
|
|
93
|
-
fakeBinaryPath,
|
|
94
|
-
[
|
|
95
|
-
"#!/usr/bin/env node",
|
|
96
|
-
"const fs = require('node:fs');",
|
|
97
|
-
"fs.appendFileSync(process.env.CODEGRAPH_FAKE_LOG, JSON.stringify(process.argv.slice(2)) + '\\n');",
|
|
98
|
-
"",
|
|
99
|
-
].join("\n"),
|
|
100
|
-
);
|
|
101
|
-
chmodSync(fakeBinaryPath, 0o755);
|
|
102
|
-
|
|
103
|
-
const serveResult = runCodegraphMcpEntry("serve.js", tempRoot, fakeBinaryPath, invocationLogPath);
|
|
104
|
-
const cliResult = runCodegraphMcpEntry("cli.js", tempRoot, fakeBinaryPath, invocationLogPath);
|
|
105
|
-
|
|
106
|
-
assert.equal(serveResult.status, 0, `serve.js stderr: ${serveResult.stderr}`);
|
|
107
|
-
assert.equal(cliResult.status, 0, `cli.js stderr: ${cliResult.stderr}`);
|
|
108
|
-
assert.equal(serveResult.stderr, "");
|
|
109
|
-
assert.equal(cliResult.stderr, "");
|
|
110
|
-
assert.deepEqual(readFileSync(invocationLogPath, "utf8").trim().split("\n"), [
|
|
111
|
-
'["serve","--mcp"]',
|
|
112
|
-
'["serve","--mcp"]',
|
|
113
|
-
]);
|
|
114
|
-
} finally {
|
|
115
|
-
rmSync(tempRoot, { recursive: true, force: true });
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
|
|
119
85
|
test("#given representative component hook payloads #when executed through dist CLI contract #then current hook behavior is preserved", async () => {
|
|
120
86
|
const tempRoot = mkdtempSync(join(tmpdir(), "omo-codex-cli-contract-"));
|
|
121
87
|
try {
|
|
@@ -264,7 +230,6 @@ test("#given aggregate hook manifest #when command hooks are inspected #then com
|
|
|
264
230
|
// when
|
|
265
231
|
const missingContracts = components.filter(
|
|
266
232
|
(component) =>
|
|
267
|
-
!MCP_ONLY_COMPONENTS.has(component) &&
|
|
268
233
|
!commands.some((command) =>
|
|
269
234
|
command.startsWith(`node "\${PLUGIN_ROOT}/components/${component}/dist/cli.js" hook `),
|
|
270
235
|
),
|
|
@@ -279,7 +244,6 @@ async function workspaceComponents() {
|
|
|
279
244
|
return packageJson.workspaces
|
|
280
245
|
.filter((workspace) => workspace.startsWith("components/"))
|
|
281
246
|
.map((workspace) => workspace.slice("components/".length))
|
|
282
|
-
.filter((component) => !MCP_ONLY_COMPONENTS.has(component))
|
|
283
247
|
.sort();
|
|
284
248
|
}
|
|
285
249
|
|
|
@@ -306,20 +270,6 @@ function componentCliPath(component) {
|
|
|
306
270
|
return join(root, "components", component, "dist", "cli.js");
|
|
307
271
|
}
|
|
308
272
|
|
|
309
|
-
function runCodegraphMcpEntry(entryName, tempRoot, fakeBinaryPath, invocationLogPath) {
|
|
310
|
-
return spawnSync(process.execPath, [join(root, "components", "codegraph", "dist", entryName)], {
|
|
311
|
-
cwd: root,
|
|
312
|
-
encoding: "utf8",
|
|
313
|
-
env: {
|
|
314
|
-
...process.env,
|
|
315
|
-
CODEGRAPH_FAKE_LOG: invocationLogPath,
|
|
316
|
-
HOME: tempRoot,
|
|
317
|
-
OMO_CODEGRAPH_BIN: fakeBinaryPath,
|
|
318
|
-
},
|
|
319
|
-
timeout: HOOK_CLI_TEST_TIMEOUT_MS,
|
|
320
|
-
});
|
|
321
|
-
}
|
|
322
|
-
|
|
323
273
|
function runHookCli(component, event, payload, tempRoot, extraEnv = {}) {
|
|
324
274
|
return runHookCliAsync(component, event, `${JSON.stringify(payload)}\n`, tempRoot, extraEnv);
|
|
325
275
|
}
|
|
@@ -1,8 +1,62 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
4
|
|
|
4
5
|
export function componentHookContractCases(tempRoot) {
|
|
6
|
+
mkdirSync(join(tempRoot, ".omo", "evidence"), { recursive: true });
|
|
7
|
+
writeFileSync(join(tempRoot, ".omo", "evidence", "receipt.txt"), "command output PASS\n".repeat(10));
|
|
8
|
+
const spawnPayload = {
|
|
9
|
+
cwd: tempRoot, hook_event_name: "PreToolUse", model: "gpt-6-astra",
|
|
10
|
+
permission_mode: "default", session_id: "s-spawn-admission", tool_input: { message: "scan", agent_type: "explorer", fork_context: false },
|
|
11
|
+
tool_name: "spawn_agent", tool_use_id: "spawn-1", transcript_path: null, turn_id: "t-spawn",
|
|
12
|
+
};
|
|
13
|
+
const marker = join(tempRoot, "plugin-data", "spawn-breaker", "s-spawn-admission.json");
|
|
5
14
|
return [
|
|
15
|
+
{
|
|
16
|
+
name: "ulw-loop post-tool-use successful admission is silent",
|
|
17
|
+
component: "ulw-loop", event: "post-tool-use-spawn",
|
|
18
|
+
payload: { ...spawnPayload, hook_event_name: "PostToolUse", tool_response: { agent_id: "worker-1" } },
|
|
19
|
+
assertOutput(stdout) { assert.equal(stdout, ""); assert.equal(existsSync(marker), false); },
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: "ulw-loop post-tool-use failed admission records silently",
|
|
23
|
+
component: "ulw-loop", event: "post-tool-use-spawn",
|
|
24
|
+
payload: { ...spawnPayload, hook_event_name: "PostToolUse", tool_response: "AgentLimitReached" },
|
|
25
|
+
assertOutput(stdout) {
|
|
26
|
+
assert.equal(stdout, "");
|
|
27
|
+
const recorded = JSON.parse(readFileSync(marker, "utf8"));
|
|
28
|
+
assert.deepEqual(Object.keys(recorded).sort(), ["at", "reason"]);
|
|
29
|
+
assert.equal(recorded.reason, "AgentLimitReached");
|
|
30
|
+
assert.equal(Number.isFinite(Date.parse(recorded.at)), true);
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: "ulw-loop admission breaker denies without a plan",
|
|
35
|
+
component: "ulw-loop", event: "pre-tool-use-spawn", payload: spawnPayload,
|
|
36
|
+
assertOutput(stdout) {
|
|
37
|
+
const output = JSON.parse(stdout).hookSpecificOutput;
|
|
38
|
+
assert.equal(output.hookEventName, "PreToolUse");
|
|
39
|
+
assert.equal(output.permissionDecision, "deny");
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: "ulw-loop clean session admission is silent",
|
|
44
|
+
component: "ulw-loop", event: "pre-tool-use-spawn",
|
|
45
|
+
payload: { ...spawnPayload, session_id: "s-spawn-clean" },
|
|
46
|
+
assertOutput(stdout) { assert.equal(stdout, ""); },
|
|
47
|
+
},
|
|
48
|
+
...[
|
|
49
|
+
{ message: "scan", fork_context: false },
|
|
50
|
+
{ message: "scan", agent_type: "worker", fork_context: false },
|
|
51
|
+
{ message: "scan", fork_turns: "all", task_name: "scan" },
|
|
52
|
+
].map((tool_input, index) => ({
|
|
53
|
+
name: `ulw-loop rejects generic or unnamed role ${index}`,
|
|
54
|
+
component: "ulw-loop", event: "pre-tool-use-spawn",
|
|
55
|
+
payload: { ...spawnPayload, session_id: "s-spawn-clean", tool_input },
|
|
56
|
+
assertOutput(stdout) {
|
|
57
|
+
assert.equal(JSON.parse(stdout).hookSpecificOutput.permissionDecision, "deny");
|
|
58
|
+
},
|
|
59
|
+
})),
|
|
6
60
|
{
|
|
7
61
|
name: "rules session-start",
|
|
8
62
|
component: "rules",
|
|
@@ -202,8 +256,30 @@ export function componentHookContractCases(tempRoot) {
|
|
|
202
256
|
},
|
|
203
257
|
},
|
|
204
258
|
{
|
|
205
|
-
name: "
|
|
206
|
-
component: "
|
|
259
|
+
name: "lazycodex worker verifier passes receipt with nonexistent transcript",
|
|
260
|
+
component: "lazycodex-executor-verify",
|
|
261
|
+
event: "subagent-stop",
|
|
262
|
+
payload: {
|
|
263
|
+
hook_event_name: "SubagentStop",
|
|
264
|
+
agent_type: "lazycodex-worker-medium",
|
|
265
|
+
agent_id: "agent-task12",
|
|
266
|
+
session_id: "s-task12",
|
|
267
|
+
turn_id: "t-task12",
|
|
268
|
+
transcript_path: join(tempRoot, "transcript.jsonl"),
|
|
269
|
+
agent_transcript_path: join(tempRoot, "agent-transcript.jsonl"),
|
|
270
|
+
cwd: tempRoot,
|
|
271
|
+
model: "gpt-6-astra",
|
|
272
|
+
permission_mode: "default",
|
|
273
|
+
stop_hook_active: true,
|
|
274
|
+
last_assistant_message: "done\nEVIDENCE_RECORDED: .omo/evidence/receipt.txt",
|
|
275
|
+
},
|
|
276
|
+
assertOutput(stdout) {
|
|
277
|
+
assert.equal(stdout, "");
|
|
278
|
+
},
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
name: "ulw-execute-continuation stop no state",
|
|
282
|
+
component: "ulw-execute-continuation",
|
|
207
283
|
event: "stop",
|
|
208
284
|
payload: {
|
|
209
285
|
hook_event_name: "Stop",
|
|
@@ -219,5 +295,27 @@ export function componentHookContractCases(tempRoot) {
|
|
|
219
295
|
assert.equal(stdout, "");
|
|
220
296
|
},
|
|
221
297
|
},
|
|
298
|
+
{
|
|
299
|
+
name: "ulw-execute-continuation subagent-stop compatibility no-op",
|
|
300
|
+
component: "ulw-execute-continuation",
|
|
301
|
+
event: "subagent-stop",
|
|
302
|
+
payload: {
|
|
303
|
+
hook_event_name: "SubagentStop",
|
|
304
|
+
agent_id: "agent-task12",
|
|
305
|
+
agent_type: "lazycodex-worker-low",
|
|
306
|
+
session_id: "s-task12",
|
|
307
|
+
turn_id: "t-task12",
|
|
308
|
+
transcript_path: join(tempRoot, "transcript.jsonl"),
|
|
309
|
+
agent_transcript_path: join(tempRoot, "agent-transcript.jsonl"),
|
|
310
|
+
cwd: tempRoot,
|
|
311
|
+
model: "gpt-5.5",
|
|
312
|
+
permission_mode: "default",
|
|
313
|
+
stop_hook_active: false,
|
|
314
|
+
last_assistant_message: "done",
|
|
315
|
+
},
|
|
316
|
+
assertOutput(stdout) {
|
|
317
|
+
assert.equal(stdout, "");
|
|
318
|
+
},
|
|
319
|
+
},
|
|
222
320
|
];
|
|
223
321
|
}
|
|
@@ -14,6 +14,7 @@ const root = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
|
14
14
|
const repoRoot = join(root, "..", "..", "..");
|
|
15
15
|
|
|
16
16
|
const AGGREGATE_EXPECTED_LABELS = new Map([
|
|
17
|
+
["hooks/post-tool-use-recording-spawn-admission.json:PostToolUse:0:0", "Recording Spawn Admission"],
|
|
17
18
|
["hooks/hooks.json:SessionStart:0:0", "Loading Project Rules"],
|
|
18
19
|
["hooks/hooks.json:SessionStart:1:0", "Recording Session Telemetry"],
|
|
19
20
|
["hooks/hooks.json:SessionStart:2:0", "Checking Auto Update"],
|
|
@@ -25,17 +26,16 @@ const AGGREGATE_EXPECTED_LABELS = new Map([
|
|
|
25
26
|
["hooks/hooks.json:PreToolUse:1:0", "Enforcing Unlimited Goal Budget"],
|
|
26
27
|
["hooks/hooks.json:PostToolUse:0:0", "Checking Comments"],
|
|
27
28
|
["hooks/hooks.json:PostToolUse:0:1", "Checking LSP Diagnostics"],
|
|
28
|
-
["hooks/hooks.json:PostToolUse:0:2", "Checking CodeGraph Init Guidance"],
|
|
29
29
|
["hooks/hooks.json:PostToolUse:1:0", "Matching Project Rules"],
|
|
30
30
|
["hooks/hooks.json:PostCompact:0:0", "Resetting Git Bash MCP Reminder"],
|
|
31
31
|
["hooks/hooks.json:PostCompact:1:0", "Resetting Project Rule Cache"],
|
|
32
32
|
["hooks/hooks.json:PostCompact:2:0", "Resetting LSP Diagnostics Cache"],
|
|
33
|
-
["hooks/hooks.json:Stop:0:0", "Checking
|
|
34
|
-
["hooks/hooks.json:SubagentStop:0:0", "
|
|
35
|
-
["hooks/hooks.json:SubagentStop:1:0", "Verifying LazyCodex Executor Evidence"],
|
|
33
|
+
["hooks/hooks.json:Stop:0:0", "Checking Ulw-Execute Continuation"],
|
|
34
|
+
["hooks/hooks.json:SubagentStop:0:0", "Verifying LazyCodex Executor Evidence"],
|
|
36
35
|
]);
|
|
37
36
|
|
|
38
37
|
const COMPONENT_EXPECTED_LABELS = new Map([
|
|
38
|
+
["components/ulw-loop/hooks/hooks.json:PostToolUse:0:0", "Recording Spawn Admission"],
|
|
39
39
|
["components/comment-checker/hooks/hooks.json:PostToolUse:0:0", "Checking Comments"],
|
|
40
40
|
["components/lsp/hooks/hooks.json:PostToolUse:0:0", "Checking LSP Diagnostics"],
|
|
41
41
|
["components/lsp/hooks/hooks.json:PostCompact:0:0", "Resetting LSP Diagnostics Cache"],
|
|
@@ -47,8 +47,7 @@ const COMPONENT_EXPECTED_LABELS = new Map([
|
|
|
47
47
|
["components/ultrawork/hooks/hooks.json:UserPromptSubmit:0:0", "Checking Ultrawork Trigger"],
|
|
48
48
|
["components/ulw-loop/hooks/hooks.json:UserPromptSubmit:0:0", "Checking Ulw-Loop Steering"],
|
|
49
49
|
["components/ulw-loop/hooks/hooks.json:PreToolUse:0:0", "Enforcing Unlimited Ulw-Loop Budget"],
|
|
50
|
-
["components/
|
|
51
|
-
["components/start-work-continuation/hooks/hooks.json:SubagentStop:0:0", "Checking Start-Work Continuation"],
|
|
50
|
+
["components/ulw-execute-continuation/hooks/hooks.json:Stop:0:0", "Checking Ulw-Execute Continuation"],
|
|
52
51
|
[
|
|
53
52
|
"components/lazycodex-executor-verify/hooks/hooks.json:SubagentStop:0:0",
|
|
54
53
|
"Verifying LazyCodex Executor Evidence",
|
|
@@ -8,7 +8,7 @@ import { fileURLToPath } from "node:url";
|
|
|
8
8
|
const root = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
9
9
|
const scriptPath = join(root, "skills", "lcx-contribute-bug-fix", "scripts", "create-pr-body.mjs");
|
|
10
10
|
|
|
11
|
-
test("#given complete bug-fix evidence #when creating a PR body #then
|
|
11
|
+
test("#given complete bug-fix evidence #when creating a PR body #then evidence and machine label are emitted", async () => {
|
|
12
12
|
// given
|
|
13
13
|
const { createLazyCodexBugFixPrBody } = await import(`file://${scriptPath}`);
|
|
14
14
|
const input = {
|
|
@@ -27,15 +27,11 @@ test("#given complete bug-fix evidence #when creating a PR body #then required L
|
|
|
27
27
|
const body = createLazyCodexBugFixPrBody(input);
|
|
28
28
|
|
|
29
29
|
// then
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
assert.match(body,
|
|
35
|
-
assert.match(body, /## User-Visible Behavior Changes/);
|
|
36
|
-
assert.match(body, /## Verification/);
|
|
37
|
-
assert.match(body, /lazycodex-generated/);
|
|
38
|
-
assert.match(body, /This PR was debugged, implemented, and created with \[LazyCodex\]/);
|
|
30
|
+
for (const field of ["problem", "reproductionLogs", "approach", "confidence", "risks", "userVisibleBehaviorChanges"]) {
|
|
31
|
+
assert.ok(body.includes(input[field]));
|
|
32
|
+
}
|
|
33
|
+
for (const command of input.verification) assert.ok(body.includes(command));
|
|
34
|
+
assert.match(body, /^Tag: lazycodex-generated$/m);
|
|
39
35
|
});
|
|
40
36
|
|
|
41
37
|
test("#given missing bug-fix evidence #when creating a PR body #then the script rejects the incomplete payload", async () => {
|
|
@@ -57,7 +53,7 @@ test("#given missing bug-fix evidence #when creating a PR body #then the script
|
|
|
57
53
|
});
|
|
58
54
|
|
|
59
55
|
// then
|
|
60
|
-
assert.throws(action, /reproductionLogs
|
|
56
|
+
assert.throws(action, /reproductionLogs/);
|
|
61
57
|
});
|
|
62
58
|
|
|
63
59
|
test("#given a JSON payload path #when running the PR body script #then markdown is written to the requested file", async () => {
|
|
@@ -65,27 +61,25 @@ test("#given a JSON payload path #when running the PR body script #then markdown
|
|
|
65
61
|
const workspace = await mkdtemp(join(tmpdir(), "lcx-pr-body-test-"));
|
|
66
62
|
const inputPath = join(workspace, "input.json");
|
|
67
63
|
const outputPath = join(workspace, "body.md");
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}),
|
|
81
|
-
"utf8",
|
|
82
|
-
);
|
|
64
|
+
const input = {
|
|
65
|
+
title: "Fix Codex skill sync drift",
|
|
66
|
+
targetRepository: "code-yeongyu/lazycodex",
|
|
67
|
+
problem: "Skill sync omitted a shared skill from the aggregate plugin.",
|
|
68
|
+
reproductionLogs: "node --test failed before the fix.",
|
|
69
|
+
approach: "Add the missing shared skill source and sync the aggregate plugin.",
|
|
70
|
+
confidence: "The failing sync test now passes.",
|
|
71
|
+
risks: "Low risk.",
|
|
72
|
+
userVisibleBehaviorChanges: "Users get a direct bug-fix PR skill.",
|
|
73
|
+
verification: ["node --test test/lcx-contribute-bug-fix-template.test.mjs"],
|
|
74
|
+
};
|
|
75
|
+
await writeFile(inputPath, JSON.stringify(input), "utf8");
|
|
83
76
|
|
|
84
77
|
// when
|
|
85
78
|
const { spawnSync } = await import("node:child_process");
|
|
79
|
+
const { createLazyCodexBugFixPrBody } = await import(`file://${scriptPath}`);
|
|
86
80
|
const result = spawnSync(process.execPath, [scriptPath, inputPath, outputPath], { encoding: "utf8" });
|
|
87
81
|
|
|
88
82
|
// then
|
|
89
83
|
assert.equal(result.status, 0, result.stderr);
|
|
90
|
-
assert.
|
|
84
|
+
assert.equal(await readFile(outputPath, "utf8"), createLazyCodexBugFixPrBody(input));
|
|
91
85
|
});
|
|
@@ -14,11 +14,9 @@ test("#given aggregate MCP config #when inspected #then registers research MCPs
|
|
|
14
14
|
const serverNames = Object.keys(mcp.mcpServers).sort();
|
|
15
15
|
|
|
16
16
|
// then
|
|
17
|
-
assert.deepEqual(serverNames, ["
|
|
17
|
+
assert.deepEqual(serverNames, ["context7", "git_bash", "grep_app", "lsp"]);
|
|
18
18
|
assert.equal(mcp.mcpServers.grep_app.url, "https://mcp.grep.app");
|
|
19
19
|
assert.equal(mcp.mcpServers.context7.url, "https://mcp.context7.com/mcp");
|
|
20
20
|
assert.equal(Object.hasOwn(mcp.mcpServers, "ast_grep"), false);
|
|
21
|
-
assert.deepEqual(mcp.mcpServers.codegraph.args, ["components/codegraph/dist/serve.js"]);
|
|
22
|
-
assert.equal(mcp.mcpServers.codegraph.required, false);
|
|
23
21
|
assert.equal(mcp.mcpServers.lsp.startup_timeout_sec, 10);
|
|
24
22
|
});
|
|
@@ -54,8 +54,8 @@ test("#given stale root reasoning config #when ensuring config #then replaces st
|
|
|
54
54
|
assert.equal(result.match(/^model_context_window\s*=/gm)?.length, 1);
|
|
55
55
|
assert.equal(result.match(/^model_reasoning_effort\s*=/gm)?.length, 1);
|
|
56
56
|
assert.equal(result.match(/^plan_mode_reasoning_effort\s*=/gm)?.length, 1);
|
|
57
|
-
assert.match(result, /model = "gpt-
|
|
58
|
-
assert.match(result, /model_context_window =
|
|
57
|
+
assert.match(result, /model = "gpt-6-astra"/);
|
|
58
|
+
assert.match(result, /model_context_window = 600000/);
|
|
59
59
|
assert.match(result, /model_reasoning_effort = "high"/);
|
|
60
60
|
assert.match(result, /plan_mode_reasoning_effort = "xhigh"/);
|
|
61
61
|
assert.doesNotMatch(result, /gpt-5\.2/);
|
|
@@ -79,8 +79,8 @@ test("#given section settings reuse managed root keys #when ensuring config #the
|
|
|
79
79
|
].join("\n"),
|
|
80
80
|
);
|
|
81
81
|
|
|
82
|
-
assert.match(result, /^model = "gpt-
|
|
83
|
-
assert.match(result, /^model_context_window =
|
|
82
|
+
assert.match(result, /^model = "gpt-6-astra"$/m);
|
|
83
|
+
assert.match(result, /^model_context_window = 600000$/m);
|
|
84
84
|
assert.match(result, /\[model_providers\.openai\]\nmodel = "provider-scoped-value"\nmodel_context_window = 123456/);
|
|
85
85
|
assert.match(result, /\[profiles\.review\]\nmodel_reasoning_effort = "medium"\nplan_mode_reasoning_effort = "medium"/);
|
|
86
86
|
});
|
|
@@ -161,8 +161,8 @@ test("#given global and project-local stale Codex configs #when migrating #then
|
|
|
161
161
|
});
|
|
162
162
|
|
|
163
163
|
assert.deepEqual(result.changed.sort(), [join(codexHome, "config.toml"), projectConfig].sort());
|
|
164
|
-
assert.match(await readFile(join(codexHome, "config.toml"), "utf8"), /model = "gpt-
|
|
165
|
-
assert.match(await readFile(projectConfig, "utf8"), /model_context_window =
|
|
164
|
+
assert.match(await readFile(join(codexHome, "config.toml"), "utf8"), /model = "gpt-6-astra"/);
|
|
165
|
+
assert.match(await readFile(projectConfig, "utf8"), /model_context_window = 600000/);
|
|
166
166
|
});
|
|
167
167
|
|
|
168
168
|
test("#given model catalog is unavailable and stale 272k config #when migrating #then fallback catalog still upgrades it", async () => {
|
|
@@ -183,8 +183,8 @@ test("#given model catalog is unavailable and stale 272k config #when migrating
|
|
|
183
183
|
|
|
184
184
|
const content = await readFile(join(codexHome, "config.toml"), "utf8");
|
|
185
185
|
assert.deepEqual(result.changed, [join(codexHome, "config.toml")]);
|
|
186
|
-
assert.match(content, /model = "gpt-
|
|
187
|
-
assert.match(content, /model_context_window =
|
|
186
|
+
assert.match(content, /model = "gpt-6-astra"/);
|
|
187
|
+
assert.match(content, /model_context_window = 600000/);
|
|
188
188
|
});
|
|
189
189
|
|
|
190
190
|
test("#given model catalog is malformed and stale config #when migrating #then fallback catalog still upgrades it", async () => {
|
|
@@ -206,8 +206,8 @@ test("#given model catalog is malformed and stale config #when migrating #then f
|
|
|
206
206
|
|
|
207
207
|
const content = await readFile(join(codexHome, "config.toml"), "utf8");
|
|
208
208
|
assert.deepEqual(result.changed, [join(codexHome, "config.toml")]);
|
|
209
|
-
assert.match(content, /model = "gpt-
|
|
210
|
-
assert.match(content, /model_context_window =
|
|
209
|
+
assert.match(content, /model = "gpt-6-astra"/);
|
|
210
|
+
assert.match(content, /model_context_window = 600000/);
|
|
211
211
|
});
|
|
212
212
|
|
|
213
213
|
test("#given user-customized Codex model config #when migrating #then user values are preserved without root multi-agent mode", async () => {
|
|
@@ -234,16 +234,16 @@ test("#given user-customized Codex model config #when migrating #then user value
|
|
|
234
234
|
});
|
|
235
235
|
|
|
236
236
|
const content = await readFile(join(codexHome, "config.toml"), "utf8");
|
|
237
|
-
assert.deepEqual(result.changed, [
|
|
237
|
+
assert.deepEqual(result.changed, []);
|
|
238
238
|
assert.deepEqual(result.modeChanged, []);
|
|
239
239
|
assert.match(content, /model = "gpt-5\.4"/);
|
|
240
240
|
assert.match(content, /model_context_window = 123456/);
|
|
241
241
|
assert.match(content, /model_reasoning_effort = "medium"/);
|
|
242
242
|
assert.match(content, /plan_mode_reasoning_effort = "medium"/);
|
|
243
243
|
assert.doesNotMatch(content, /^\s*multi_agent_mode\s*=/m);
|
|
244
|
-
assert.
|
|
244
|
+
assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
|
|
245
245
|
assert.match(content, /\[features\.multi_agent_v2\][\s\S]*?enabled = false/);
|
|
246
|
-
assert.
|
|
246
|
+
assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
|
|
247
247
|
});
|
|
248
248
|
|
|
249
249
|
test("#given managed config state is malformed #when migrating #then migration ignores stale state safely", async () => {
|
|
@@ -262,7 +262,7 @@ test("#given managed config state is malformed #when migrating #then migration i
|
|
|
262
262
|
const content = await readFile(join(codexHome, "config.toml"), "utf8");
|
|
263
263
|
const state = JSON.parse(await readFile(statePath, "utf8"));
|
|
264
264
|
assert.deepEqual(result.changed, [join(codexHome, "config.toml")]);
|
|
265
|
-
assert.match(content, /model_context_window =
|
|
265
|
+
assert.match(content, /model_context_window = 600000/);
|
|
266
266
|
assert.equal(state.files[join(codexHome, "config.toml")].managed, true);
|
|
267
267
|
});
|
|
268
268
|
|
|
@@ -404,8 +404,8 @@ test("#given config already matches current catalog #when catalog version advanc
|
|
|
404
404
|
assert.equal(state.files[configPath].catalogVersion, "test.role-only");
|
|
405
405
|
const content = await readFile(configPath, "utf8");
|
|
406
406
|
assert.doesNotMatch(content, /^\s*multi_agent_mode\s*=/m);
|
|
407
|
-
assert.
|
|
408
|
-
assert.
|
|
407
|
+
assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
|
|
408
|
+
assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
|
|
409
409
|
});
|
|
410
410
|
|
|
411
411
|
test("#given stale Context7 placeholder MCP config #when migrating #then removes it and keeps plugin policy", async () => {
|
|
@@ -642,8 +642,8 @@ test("#given global config without multi_agent_v2 section #when full migration r
|
|
|
642
642
|
assert.deepEqual(result.modeChanged, []);
|
|
643
643
|
const content = await readFile(configPath, "utf8");
|
|
644
644
|
assert.match(content, /\[features\.multi_agent_v2\][\s\S]*?enabled = false/);
|
|
645
|
-
assert.
|
|
646
|
-
assert.
|
|
645
|
+
assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
|
|
646
|
+
assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
|
|
647
647
|
assert.doesNotMatch(content, /^\s*multi_agent_mode\s*=/m);
|
|
648
648
|
});
|
|
649
649
|
|
|
@@ -670,15 +670,15 @@ test("#given global config starts with inline-comment features table #when full
|
|
|
670
670
|
const content = await readFile(configPath, "utf8");
|
|
671
671
|
const parsed = parseTomlWithPython(content);
|
|
672
672
|
assert.equal("multi_agent_mode" in parsed, false);
|
|
673
|
-
assert.equal(parsed.model, "gpt-
|
|
674
|
-
assert.equal(parsed.model_context_window,
|
|
673
|
+
assert.equal(parsed.model, "gpt-6-astra");
|
|
674
|
+
assert.equal(parsed.model_context_window, 600000);
|
|
675
675
|
assert.equal(parsed.model_reasoning_effort, "high");
|
|
676
676
|
assert.equal(parsed.plan_mode_reasoning_effort, "xhigh");
|
|
677
677
|
assert.equal(parsed.features.plugins, true);
|
|
678
678
|
assert.equal("multi_agent_mode" in parsed.features, false);
|
|
679
679
|
assert.equal("model" in parsed.features, false);
|
|
680
680
|
assert.equal("model_context_window" in parsed.features, false);
|
|
681
|
-
assert.match(content, /^model = "gpt-
|
|
681
|
+
assert.match(content, /^model = "gpt-6-astra"\nmodel_context_window = 600000/m);
|
|
682
682
|
assert.doesNotMatch(content, /^\s*multi_agent_mode\s*=/m);
|
|
683
683
|
assert.match(content, /\[features\] # keep comment\nplugins = true/);
|
|
684
684
|
});
|
|
@@ -750,7 +750,7 @@ test("#given global config with forced multi_agent_v2 #when full migration runs
|
|
|
750
750
|
assert.match(content, /enabled = false/);
|
|
751
751
|
assert.doesNotMatch(content, /enabled = true/);
|
|
752
752
|
assert.match(content, /max_concurrent_threads_per_session = 10000/);
|
|
753
|
-
assert.
|
|
753
|
+
assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
|
|
754
754
|
});
|
|
755
755
|
|
|
756
756
|
test("#given enabled = true with an inline comment #when forcing disable #then flips to false and preserves the comment", () => {
|
|
@@ -832,7 +832,7 @@ test("#given gpt-5.6-terra with managed disable #when model catalog prefers v2 #
|
|
|
832
832
|
"",
|
|
833
833
|
"[features.multi_agent_v2]",
|
|
834
834
|
"enabled = false",
|
|
835
|
-
"max_concurrent_threads_per_session =
|
|
835
|
+
"max_concurrent_threads_per_session = 7",
|
|
836
836
|
"",
|
|
837
837
|
].join("\n");
|
|
838
838
|
|
|
@@ -842,7 +842,7 @@ test("#given gpt-5.6-terra with managed disable #when model catalog prefers v2 #
|
|
|
842
842
|
assert.doesNotMatch(result, /openai\/codex#26753/);
|
|
843
843
|
assert.doesNotMatch(result, /Managed by LazyCodex: multi_agent_v2/);
|
|
844
844
|
assert.match(result, /\[features\.multi_agent_v2\]/);
|
|
845
|
-
assert.match(result, /max_concurrent_threads_per_session =
|
|
845
|
+
assert.match(result, /max_concurrent_threads_per_session = 7/);
|
|
846
846
|
});
|
|
847
847
|
|
|
848
848
|
test("#given gpt-5.6 v2 model with hide_spawn_agent_metadata=false #when clearing #then removes the stale metadata override", () => {
|
|
@@ -852,7 +852,7 @@ test("#given gpt-5.6 v2 model with hide_spawn_agent_metadata=false #when clearin
|
|
|
852
852
|
"[features.multi_agent_v2]",
|
|
853
853
|
"enabled = false",
|
|
854
854
|
"hide_spawn_agent_metadata = false",
|
|
855
|
-
"max_concurrent_threads_per_session =
|
|
855
|
+
"max_concurrent_threads_per_session = 7",
|
|
856
856
|
"",
|
|
857
857
|
].join("\n");
|
|
858
858
|
|
|
@@ -860,7 +860,7 @@ test("#given gpt-5.6 v2 model with hide_spawn_agent_metadata=false #when clearin
|
|
|
860
860
|
|
|
861
861
|
assert.doesNotMatch(result, /^\s*enabled\s*=\s*false/m);
|
|
862
862
|
assert.doesNotMatch(result, /^\s*hide_spawn_agent_metadata\s*=/m);
|
|
863
|
-
assert.match(result, /max_concurrent_threads_per_session =
|
|
863
|
+
assert.match(result, /max_concurrent_threads_per_session = 7/);
|
|
864
864
|
});
|
|
865
865
|
|
|
866
866
|
test("#given gpt-5.6 v2 model with hide_spawn_agent_metadata=true #when clearing #then leaves the default-matching value alone", () => {
|
|
@@ -948,7 +948,7 @@ test("#given gpt-5.6-terra managed disable #when full migration sees models_cach
|
|
|
948
948
|
assert.doesNotMatch(content, /openai\/codex#26753/);
|
|
949
949
|
assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
|
|
950
950
|
assert.match(content, /max_depth = 2/);
|
|
951
|
-
assert.
|
|
951
|
+
assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
|
|
952
952
|
});
|
|
953
953
|
|
|
954
954
|
test("#given config default gpt-5.5 #when SessionStart model is gpt-5.6-terra #then prefers session model and clears disable", () => {
|
|
@@ -957,7 +957,7 @@ test("#given config default gpt-5.5 #when SessionStart model is gpt-5.6-terra #t
|
|
|
957
957
|
"",
|
|
958
958
|
"[features.multi_agent_v2]",
|
|
959
959
|
"enabled = false",
|
|
960
|
-
"max_concurrent_threads_per_session =
|
|
960
|
+
"max_concurrent_threads_per_session = 7",
|
|
961
961
|
"",
|
|
962
962
|
].join("\n");
|
|
963
963
|
|
|
@@ -967,7 +967,7 @@ test("#given config default gpt-5.5 #when SessionStart model is gpt-5.6-terra #t
|
|
|
967
967
|
});
|
|
968
968
|
|
|
969
969
|
assert.doesNotMatch(result, /^\s*enabled\s*=\s*false/m);
|
|
970
|
-
assert.match(result, /max_concurrent_threads_per_session =
|
|
970
|
+
assert.match(result, /max_concurrent_threads_per_session = 7/);
|
|
971
971
|
});
|
|
972
972
|
|
|
973
973
|
test("#given SessionStart without model #when requireSessionModel is set #then skips legacy force-disable", () => {
|
|
@@ -1030,8 +1030,8 @@ test("#given legacy shorthand and no session model on hook path #when full migra
|
|
|
1030
1030
|
const parsed = parseTomlWithPython(content);
|
|
1031
1031
|
assert.doesNotMatch(content, /^\s*multi_agent_v2\s*=\s*(?:true|false)/m);
|
|
1032
1032
|
assert.equal(parsed.features.plugins, true);
|
|
1033
|
-
assert.equal(parsed.features.multi_agent_v2
|
|
1034
|
-
assert.equal(
|
|
1033
|
+
assert.equal(parsed.features.multi_agent_v2?.max_concurrent_threads_per_session, undefined);
|
|
1034
|
+
assert.equal(parsed.features.multi_agent_v2?.enabled, undefined);
|
|
1035
1035
|
});
|
|
1036
1036
|
|
|
1037
1037
|
test("#given SoT migration failure #when hook migration runs #then config.toml repair still happens", async () => {
|
|
@@ -1110,7 +1110,7 @@ test("#given config default gpt-5.5 #when full migration gets SessionStart gpt-5
|
|
|
1110
1110
|
const content = await readFile(configPath, "utf8");
|
|
1111
1111
|
assert.doesNotMatch(content, /^\s*enabled\s*=\s*false/m);
|
|
1112
1112
|
assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
|
|
1113
|
-
assert.
|
|
1113
|
+
assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
|
|
1114
1114
|
});
|
|
1115
1115
|
|
|
1116
1116
|
test("#given no session model and no root model #when forcing disable #then leaves the enable state untouched", () => {
|
|
@@ -1151,7 +1151,7 @@ test("#given user-modified config without root model #when full non-hook migrati
|
|
|
1151
1151
|
assert.doesNotMatch(content, /^\s*enabled\s*=\s*false/m);
|
|
1152
1152
|
assert.doesNotMatch(content, /openai\/codex#26753/);
|
|
1153
1153
|
assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
|
|
1154
|
-
assert.
|
|
1154
|
+
assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
|
|
1155
1155
|
});
|
|
1156
1156
|
|
|
1157
1157
|
async function canCreateSymlink(type) {
|
|
@@ -1211,8 +1211,8 @@ test("#given model_catalog_json declares a v2 model as v1 #when full migration r
|
|
|
1211
1211
|
|
|
1212
1212
|
const content = await readFile(configPath, "utf8");
|
|
1213
1213
|
assert.match(content, /enabled = false/, "explicit v1 catalog must keep the managed disable");
|
|
1214
|
-
assert.
|
|
1215
|
-
assert.
|
|
1214
|
+
assert.doesNotMatch(content, /^\s*max_threads\s*=/m, "managed agents.max_threads must be removed");
|
|
1215
|
+
assert.doesNotMatch(content, /max_concurrent_threads_per_session\s*=/);
|
|
1216
1216
|
assert.match(content, /max_depth = 2/);
|
|
1217
1217
|
});
|
|
1218
1218
|
|
|
@@ -36,7 +36,7 @@ test("#given relative model_catalog_json declares gpt-5.6 model as v1 #when migr
|
|
|
36
36
|
|
|
37
37
|
const content = await readFile(configPath, "utf8");
|
|
38
38
|
assert.match(content, /enabled = false/);
|
|
39
|
-
assert.
|
|
39
|
+
assert.doesNotMatch(content, /^\s*max_threads\s*=/m);
|
|
40
40
|
});
|
|
41
41
|
|
|
42
42
|
test("#given no SessionStart model and root gpt-5.6 model without catalog #when migrating #then clears stale V2 disable", async () => {
|
|
@@ -8,42 +8,6 @@ import { fileURLToPath, pathToFileURL } from "node:url";
|
|
|
8
8
|
const root = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
9
9
|
const scriptPath = join(root, "skills", "ulw-plan", "scripts", "scaffold-plan.mjs");
|
|
10
10
|
const scriptUrl = pathToFileURL(scriptPath).href;
|
|
11
|
-
const workflowPath = join(root, "skills", "ulw-plan", "references", "full-workflow.md");
|
|
12
|
-
|
|
13
|
-
test("#given the scaffold script and the workflow reference #when compared #then every plan header the script emits is documented in full-workflow.md (no drift)", async () => {
|
|
14
|
-
// given
|
|
15
|
-
const { PLAN_SECTION_HEADERS } = await import(scriptUrl);
|
|
16
|
-
const workflow = await readFile(workflowPath, "utf8");
|
|
17
|
-
|
|
18
|
-
// then --- the script is the single source of the plan shape; the reference must document the same headers
|
|
19
|
-
assert.ok(PLAN_SECTION_HEADERS.length >= 6);
|
|
20
|
-
for (const header of PLAN_SECTION_HEADERS) {
|
|
21
|
-
assert.ok(workflow.includes(header), `full-workflow.md is missing plan header: ${header}`);
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
test("#given buildPlanSkeleton #when intent is unclear #then the human TL;DR leads the plan and surfaces the decisions veto block", async () => {
|
|
26
|
-
// given
|
|
27
|
-
const { buildPlanSkeleton, PLAN_SECTION_HEADERS } = await import(scriptUrl);
|
|
28
|
-
const plan = buildPlanSkeleton("demo", "unclear");
|
|
29
|
-
|
|
30
|
-
// then --- the human-readable summary is on top, above the AI detail
|
|
31
|
-
assert.ok(plan.indexOf("## TL;DR (For humans)") < plan.indexOf("## Scope"));
|
|
32
|
-
assert.match(plan, /Decisions I made for you/);
|
|
33
|
-
for (const header of PLAN_SECTION_HEADERS) {
|
|
34
|
-
assert.ok(plan.includes(header), `plan skeleton missing header: ${header}`);
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
test("#given buildPlanSkeleton #when intent is clear #then it surfaces a decisions-to-sanity-check block instead", async () => {
|
|
39
|
-
// given
|
|
40
|
-
const { buildPlanSkeleton } = await import(scriptUrl);
|
|
41
|
-
const plan = buildPlanSkeleton("demo", "clear");
|
|
42
|
-
|
|
43
|
-
// then
|
|
44
|
-
assert.match(plan, /Decisions to sanity-check/);
|
|
45
|
-
assert.doesNotMatch(plan, /Decisions I made for you/);
|
|
46
|
-
});
|
|
47
11
|
|
|
48
12
|
test("#given resolveSafeOmoPath #when the target escapes .omo or the workspace #then it is refused (the script never escapes .omo)", async () => {
|
|
49
13
|
// given
|