lazycodex-ai 5.0.0-beta.4 → 5.0.0-beta.40
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 +66932 -64746
- 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 +66795 -64586
- package/package.json +9 -9
- package/packages/git-bash-mcp/dist/cli.js +6 -1
- package/packages/lsp-daemon/dist/cli.js +793 -323
- package/packages/lsp-daemon/dist/client.d.ts +10 -0
- package/packages/lsp-daemon/dist/client.js +753 -280
- 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 +757 -289
- 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 +712 -244
- package/packages/lsp-tools-mcp/dist/lsp/manager.js +248 -119
- package/packages/lsp-tools-mcp/dist/mcp.js +714 -246
- package/packages/lsp-tools-mcp/dist/request-context.js +12 -13
- package/packages/lsp-tools-mcp/dist/tools.js +718 -254
- 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 +741 -294
- 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 +3 -2
- 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 +36 -13
- 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/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 +2 -0
- 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 +11 -7
- 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/init-deep/SKILL.md +13 -13
- package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +4 -4
- package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
- package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +2 -0
- 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 +13 -11
- 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 +3 -2
- 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 +4 -2
- package/packages/omo-codex/plugin/skills/visual-qa/AGENTS.md +58 -0
- package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +3 -2
- 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 +23 -13
- 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 +2817 -913
- package/packages/{omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md → prompts-core/prompts/ultrawork/codex.md} +15 -10
- package/packages/shared-skills/skills/ast-grep/AGENTS.md +51 -0
- 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 +2 -0
- 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 +11 -7
- 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/init-deep/SKILL.md +13 -13
- package/packages/shared-skills/skills/review-work/SKILL.md +3 -3
- package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
- package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +2 -0
- 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 +13 -11
- 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 +6 -7
- 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 +4 -2
- package/packages/shared-skills/skills/visual-qa/AGENTS.md +58 -0
- package/packages/shared-skills/skills/visual-qa/SKILL.md +3 -2
- 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
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import assert from "node:assert/strict";
|
|
2
|
-
import { mkdir, mkdtemp, readFile, writeFile } from "node:fs/promises";
|
|
3
|
-
import { tmpdir } from "node:os";
|
|
4
|
-
import { join } from "node:path";
|
|
5
|
-
import test from "node:test";
|
|
6
|
-
|
|
7
|
-
import { migrateOmoSotConfig } from "../scripts/migrate-omo-sot.mjs";
|
|
8
|
-
|
|
9
|
-
test("#given no OMO SOT #when seeding #then creates a parseable scaffold once", async () => {
|
|
10
|
-
const home = await mkdtemp(join(tmpdir(), "omo-sot-seed-"));
|
|
11
|
-
|
|
12
|
-
const first = await migrateOmoSotConfig({ env: { HOME: home }, seed: true });
|
|
13
|
-
const before = await readFile(join(home, ".omo", "config.jsonc"), "utf8");
|
|
14
|
-
const second = await migrateOmoSotConfig({ env: { HOME: home }, seed: true });
|
|
15
|
-
const after = await readFile(join(home, ".omo", "config.jsonc"), "utf8");
|
|
16
|
-
|
|
17
|
-
assert.equal(first.seeded, true);
|
|
18
|
-
assert.equal(second.seeded, false);
|
|
19
|
-
assert.equal(after, before);
|
|
20
|
-
assert.equal(parseJsonc(after)["[codex]"].codegraph.enabled, undefined);
|
|
21
|
-
assert.equal(parseJsonc(after).codegraph.enabled, undefined);
|
|
22
|
-
assert.match(after, /"enabled"/);
|
|
23
|
-
assert.match(after, /"\[opencode\]"/);
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
test("#given no OMO SOT and legacy CodeGraph env #when seeding #then creates scaffold with Codex scoped migration", async () => {
|
|
27
|
-
const home = await mkdtemp(join(tmpdir(), "omo-sot-seed-env-"));
|
|
28
|
-
|
|
29
|
-
await migrateOmoSotConfig({
|
|
30
|
-
env: {
|
|
31
|
-
HOME: home,
|
|
32
|
-
CODEX_CODEGRAPH_AUTO_PROVISION: "yes",
|
|
33
|
-
CODEX_CODEGRAPH_ENABLED: "1",
|
|
34
|
-
OMO_CODEGRAPH_INSTALL_DIR: "/tmp/codegraph",
|
|
35
|
-
OMO_CODEGRAPH_TELEMETRY: "false",
|
|
36
|
-
},
|
|
37
|
-
seed: true,
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
const content = await readFile(join(home, ".omo", "config.jsonc"), "utf8");
|
|
41
|
-
const parsed = parseJsonc(content);
|
|
42
|
-
assert.equal(parsed.codegraph.enabled, undefined);
|
|
43
|
-
assert.deepEqual(parsed["[codex]"].codegraph, {
|
|
44
|
-
auto_provision: true,
|
|
45
|
-
enabled: true,
|
|
46
|
-
install_dir: "/tmp/codegraph",
|
|
47
|
-
telemetry: false,
|
|
48
|
-
});
|
|
49
|
-
assert.match(content, /Shared OMO settings/);
|
|
50
|
-
assert.match(content, /"\[opencode\]"/);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
test("#given legacy CodeGraph env #when migrating #then adds Codex scoped codegraph values", async () => {
|
|
54
|
-
const home = await mkdtemp(join(tmpdir(), "omo-sot-env-"));
|
|
55
|
-
await mkdir(join(home, ".omo"), { recursive: true });
|
|
56
|
-
await writeFile(join(home, ".omo", "config.jsonc"), "{\n}\n");
|
|
57
|
-
|
|
58
|
-
const result = await migrateOmoSotConfig({
|
|
59
|
-
env: {
|
|
60
|
-
HOME: home,
|
|
61
|
-
CODEX_CODEGRAPH_AUTO_PROVISION: "0",
|
|
62
|
-
CODEX_CODEGRAPH_ENABLED: "false",
|
|
63
|
-
OMO_CODEGRAPH_INSTALL_DIR: "/tmp/codegraph",
|
|
64
|
-
OMO_CODEGRAPH_TELEMETRY: "1",
|
|
65
|
-
},
|
|
66
|
-
seed: true,
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
const parsed = parseJsonc(await readFile(join(home, ".omo", "config.jsonc"), "utf8"));
|
|
70
|
-
assert.equal(result.changed, true);
|
|
71
|
-
assert.deepEqual(parsed["[codex]"].codegraph, {
|
|
72
|
-
auto_provision: false,
|
|
73
|
-
enabled: false,
|
|
74
|
-
install_dir: "/tmp/codegraph",
|
|
75
|
-
telemetry: true,
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
test("#given existing user SOT #when migrating env #then preserves user values and comments", async () => {
|
|
80
|
-
const home = await mkdtemp(join(tmpdir(), "omo-sot-preserve-"));
|
|
81
|
-
const configPath = join(home, ".omo", "config.jsonc");
|
|
82
|
-
await mkdir(join(home, ".omo"), { recursive: true });
|
|
83
|
-
await writeFile(
|
|
84
|
-
configPath,
|
|
85
|
-
[
|
|
86
|
-
"{",
|
|
87
|
-
" // keep my debounce",
|
|
88
|
-
' "codegraph": {',
|
|
89
|
-
" \"watch_debounce_ms\": 4242",
|
|
90
|
-
" }",
|
|
91
|
-
"}",
|
|
92
|
-
"",
|
|
93
|
-
].join("\n"),
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
await migrateOmoSotConfig({ env: { HOME: home, CODEX_CODEGRAPH_ENABLED: "0" }, seed: true });
|
|
97
|
-
|
|
98
|
-
const content = await readFile(configPath, "utf8");
|
|
99
|
-
const parsed = parseJsonc(content);
|
|
100
|
-
assert.match(content, /keep my debounce/);
|
|
101
|
-
assert.equal(parsed.codegraph.watch_debounce_ms, 4242);
|
|
102
|
-
assert.equal(parsed["[codex]"].codegraph.enabled, false);
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
test("#given existing Codex scoped SOT #when migrating env #then user value wins", async () => {
|
|
106
|
-
const home = await mkdtemp(join(tmpdir(), "omo-sot-user-wins-"));
|
|
107
|
-
const configPath = join(home, ".omo", "config.jsonc");
|
|
108
|
-
await mkdir(join(home, ".omo"), { recursive: true });
|
|
109
|
-
await writeFile(configPath, '{\n "[codex]": { "codegraph": { "enabled": true } }\n}\n');
|
|
110
|
-
|
|
111
|
-
await migrateOmoSotConfig({ env: { HOME: home, CODEX_CODEGRAPH_ENABLED: "0" }, seed: true });
|
|
112
|
-
|
|
113
|
-
const parsed = parseJsonc(await readFile(configPath, "utf8"));
|
|
114
|
-
assert.equal(parsed["[codex]"].codegraph.enabled, true);
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
test("#given opencode scoped SOT #when migrating env #then opencode block is not changed", async () => {
|
|
118
|
-
const home = await mkdtemp(join(tmpdir(), "omo-sot-opencode-"));
|
|
119
|
-
const configPath = join(home, ".omo", "config.jsonc");
|
|
120
|
-
await mkdir(join(home, ".omo"), { recursive: true });
|
|
121
|
-
await writeFile(configPath, '{\n "[opencode]": { "codegraph": { "enabled": true } }\n}\n');
|
|
122
|
-
|
|
123
|
-
await migrateOmoSotConfig({ env: { HOME: home, CODEX_CODEGRAPH_ENABLED: "0" }, seed: true });
|
|
124
|
-
|
|
125
|
-
const parsed = parseJsonc(await readFile(configPath, "utf8"));
|
|
126
|
-
assert.equal(parsed["[opencode]"].codegraph.enabled, true);
|
|
127
|
-
assert.equal(parsed["[codex]"].codegraph.enabled, false);
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
test("#given malformed existing SOT #when migrating #then leaves it untouched and warns", async () => {
|
|
131
|
-
const home = await mkdtemp(join(tmpdir(), "omo-sot-malformed-"));
|
|
132
|
-
const configPath = join(home, ".omo", "config.jsonc");
|
|
133
|
-
await mkdir(join(home, ".omo"), { recursive: true });
|
|
134
|
-
await writeFile(configPath, '{ "codegraph":');
|
|
135
|
-
|
|
136
|
-
const result = await migrateOmoSotConfig({ env: { HOME: home, CODEX_CODEGRAPH_ENABLED: "0" }, seed: true });
|
|
137
|
-
|
|
138
|
-
assert.equal(await readFile(configPath, "utf8"), '{ "codegraph":');
|
|
139
|
-
assert.equal(result.changed, false);
|
|
140
|
-
assert.equal(result.seeded, false);
|
|
141
|
-
assert.match(result.warnings.join("\n"), /Could not parse/);
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
function parseJsonc(content) {
|
|
145
|
-
return JSON.parse(stripTrailingCommas(stripJsonComments(content)));
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
function stripJsonComments(content) {
|
|
149
|
-
let result = "";
|
|
150
|
-
let inString = false;
|
|
151
|
-
let escape = false;
|
|
152
|
-
for (let index = 0; index < content.length; index += 1) {
|
|
153
|
-
const char = content[index];
|
|
154
|
-
const next = content[index + 1];
|
|
155
|
-
if (inString) {
|
|
156
|
-
result += char;
|
|
157
|
-
if (escape) escape = false;
|
|
158
|
-
else if (char === "\\") escape = true;
|
|
159
|
-
else if (char === "\"") inString = false;
|
|
160
|
-
continue;
|
|
161
|
-
}
|
|
162
|
-
if (char === "\"") {
|
|
163
|
-
inString = true;
|
|
164
|
-
result += char;
|
|
165
|
-
continue;
|
|
166
|
-
}
|
|
167
|
-
if (char === "/" && next === "/") {
|
|
168
|
-
while (index < content.length && content[index] !== "\n") index += 1;
|
|
169
|
-
result += "\n";
|
|
170
|
-
continue;
|
|
171
|
-
}
|
|
172
|
-
result += char;
|
|
173
|
-
}
|
|
174
|
-
return result;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
function stripTrailingCommas(content) {
|
|
178
|
-
return content.replace(/,\s*([}\]])/g, "$1");
|
|
179
|
-
}
|
|
@@ -1,314 +0,0 @@
|
|
|
1
|
-
import assert from "node:assert/strict";
|
|
2
|
-
import { readdir, readFile } from "node:fs/promises";
|
|
3
|
-
import { dirname, join } from "node:path";
|
|
4
|
-
import test from "node:test";
|
|
5
|
-
import { fileURLToPath } from "node:url";
|
|
6
|
-
import { codexHarnessToolCompatibility, insertCodexCompatibilityGuidance } from "../scripts/sync-skills.mjs";
|
|
7
|
-
|
|
8
|
-
const root = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
9
|
-
|
|
10
|
-
async function listSkillNames() {
|
|
11
|
-
const skillsRoot = join(root, "skills");
|
|
12
|
-
const entries = await readdir(skillsRoot, { withFileTypes: true });
|
|
13
|
-
return entries
|
|
14
|
-
.filter((entry) => entry.isDirectory())
|
|
15
|
-
.map((entry) => entry.name)
|
|
16
|
-
.sort();
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
async function readSkill(skillName) {
|
|
20
|
-
return readFile(join(root, "skills", skillName, "SKILL.md"), "utf8");
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
async function readSharedSkill(skillName) {
|
|
24
|
-
return readFile(join(root, "../../shared-skills/skills", skillName, "SKILL.md"), "utf8");
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function patternFromParts(parts, flags) {
|
|
28
|
-
return new RegExp(parts.join(""), flags);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const multiAgentV2RoleGuidance =
|
|
32
|
-
"If instead a flat `spawn_agent` with a required `task_name` exists (`multi_agent_v2`), rewrite every `multi_agent_v1.*` example:";
|
|
33
|
-
const loadSkillsGuidance =
|
|
34
|
-
"When translating `load_skills=[...]`, include the requested skill names in the spawned agent's `message`.";
|
|
35
|
-
|
|
36
|
-
test("#given synced aggregate Codex skills #when they contain OpenCode orchestration examples #then Codex tool compatibility guidance is injected", async () => {
|
|
37
|
-
// given
|
|
38
|
-
const opencodeOnlyToolPattern = /\b(?:call_omo_agent|background_output|team_[a-z_]+|task)\s*\(/;
|
|
39
|
-
|
|
40
|
-
// when / then
|
|
41
|
-
for (const skillName of await listSkillNames()) {
|
|
42
|
-
const content = await readSkill(skillName);
|
|
43
|
-
if (!opencodeOnlyToolPattern.test(content)) continue;
|
|
44
|
-
|
|
45
|
-
const compatibilityMatches = content.match(/## Codex Harness Tool Compatibility/g) ?? [];
|
|
46
|
-
const compatibilityIndex = content.indexOf("## Codex Harness Tool Compatibility");
|
|
47
|
-
assert.notEqual(compatibilityIndex, -1, `${skillName} is missing Codex compatibility guidance`);
|
|
48
|
-
assert.equal(compatibilityMatches.length, 1, `${skillName} must not duplicate Codex compatibility guidance`);
|
|
49
|
-
assert.ok(
|
|
50
|
-
compatibilityIndex < content.search(opencodeOnlyToolPattern),
|
|
51
|
-
`${skillName} must explain Codex tool translation before OpenCode-only examples`,
|
|
52
|
-
);
|
|
53
|
-
assert.ok(content.includes(multiAgentV2RoleGuidance), `${skillName} missing multi_agent_v2 role guidance`);
|
|
54
|
-
assert.ok(content.includes(loadSkillsGuidance), `${skillName} missing load_skills guidance`);
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
test("#given late variant Codex compatibility guidance #when adapting a skill #then it is moved without duplication", () => {
|
|
59
|
-
// given
|
|
60
|
-
const content = `---
|
|
61
|
-
name: example
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
# Example Skill
|
|
65
|
-
|
|
66
|
-
call_omo_agent(subagent_type="explore", prompt="inspect")
|
|
67
|
-
|
|
68
|
-
## Codex Harness Tool Compatibility
|
|
69
|
-
|
|
70
|
-
Older variant guidance.
|
|
71
|
-
|
|
72
|
-
When translating \`load_skills=[...]\`, name the skills inside the spawned agent's \`message\`. If a code block below conflicts with this section, this section wins.
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## Next Section
|
|
77
|
-
|
|
78
|
-
task(category="quick", prompt="verify")
|
|
79
|
-
`;
|
|
80
|
-
|
|
81
|
-
// when
|
|
82
|
-
const adapted = insertCodexCompatibilityGuidance(content);
|
|
83
|
-
|
|
84
|
-
// then
|
|
85
|
-
const compatibilityIndex = adapted.indexOf("## Codex Harness Tool Compatibility");
|
|
86
|
-
const firstToolIndex = adapted.search(/\b(?:call_omo_agent|task)\s*\(/);
|
|
87
|
-
assert.notEqual(compatibilityIndex, -1);
|
|
88
|
-
assert.ok(compatibilityIndex < firstToolIndex);
|
|
89
|
-
assert.equal(adapted.match(/## Codex Harness Tool Compatibility/g)?.length, 1);
|
|
90
|
-
assert.doesNotMatch(adapted, /Older variant guidance/);
|
|
91
|
-
assert.doesNotMatch(adapted, /name the skills inside the spawned agent's `message`/);
|
|
92
|
-
assert.match(adapted, /\n---\n\n## Next Section/);
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
test("#given early custom Codex compatibility guidance #when adapting a skill #then it is preserved exactly", () => {
|
|
96
|
-
// given
|
|
97
|
-
const content = `---
|
|
98
|
-
name: example
|
|
99
|
-
---
|
|
100
|
-
|
|
101
|
-
## Codex Harness Tool Compatibility
|
|
102
|
-
|
|
103
|
-
Custom guidance for this skill, including \`dispatchInternalPrompt(...)\`.
|
|
104
|
-
|
|
105
|
-
# Example Skill
|
|
106
|
-
|
|
107
|
-
call_omo_agent(subagent_type="explore", prompt="inspect")
|
|
108
|
-
`;
|
|
109
|
-
|
|
110
|
-
// when
|
|
111
|
-
const adapted = insertCodexCompatibilityGuidance(content);
|
|
112
|
-
|
|
113
|
-
// then
|
|
114
|
-
assert.equal(adapted, content);
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
test("#given early generated stale Codex compatibility guidance #when adapting a skill #then it is replaced", () => {
|
|
118
|
-
// given
|
|
119
|
-
const content = `---
|
|
120
|
-
name: example
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## Codex Harness Tool Compatibility
|
|
124
|
-
|
|
125
|
-
This skill may include examples copied from the OpenCode harness. In Codex, do not call OpenCode-only tools such as \`call_omo_agent(...)\`, \`task(...)\`, \`background_output(...)\`, or \`team_*(...)\` literally. Translate those examples to Codex native tools:
|
|
126
|
-
|
|
127
|
-
| OpenCode example | Codex tool to use |
|
|
128
|
-
| --- | --- |
|
|
129
|
-
| \`call_omo_agent(subagent_type="explore", ...)\` | \`spawn_agent({"task_name":"...","message":"TASK: act as an explorer. ..."})\` |
|
|
130
|
-
| \`background_output(task_id="...")\` | \`wait_agent(...)\` for mailbox signals |
|
|
131
|
-
|
|
132
|
-
Obsolete generated compatibility prose.
|
|
133
|
-
|
|
134
|
-
More obsolete generated compatibility prose.
|
|
135
|
-
|
|
136
|
-
When translating \`load_skills=[...]\`, include the requested skill names in the spawned agent's \`message\`. If a code block below conflicts with this section, this section wins.
|
|
137
|
-
|
|
138
|
-
# Example Skill
|
|
139
|
-
|
|
140
|
-
call_omo_agent(subagent_type="explore", prompt="inspect")
|
|
141
|
-
`;
|
|
142
|
-
|
|
143
|
-
// when
|
|
144
|
-
const adapted = insertCodexCompatibilityGuidance(content);
|
|
145
|
-
|
|
146
|
-
// then
|
|
147
|
-
assert.match(adapted, /multi_agent_v1\.spawn_agent/);
|
|
148
|
-
assert.match(adapted, /fork_context":false/);
|
|
149
|
-
assert.match(adapted, /"agent_type":"explorer"/);
|
|
150
|
-
assert.match(adapted, /multi_agent_v1\.wait_agent/);
|
|
151
|
-
assert.match(adapted, /"task_name":"<lowercase_digits_underscores>"/);
|
|
152
|
-
assert.match(adapted, /fork_turns/);
|
|
153
|
-
assert.doesNotMatch(adapted, /\| `spawn_agent\({"task_name"/);
|
|
154
|
-
assert.doesNotMatch(adapted, /Obsolete generated compatibility prose/);
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
test("#given generated Codex compatibility guidance #when adapting a skill #then multi-agent role and load_skills guidance are both present", () => {
|
|
158
|
-
// given
|
|
159
|
-
const content = `---
|
|
160
|
-
name: example
|
|
161
|
-
---
|
|
162
|
-
|
|
163
|
-
# Example Skill
|
|
164
|
-
|
|
165
|
-
task(subagent_type="oracle", load_skills=["debugging"], prompt="verify")
|
|
166
|
-
`;
|
|
167
|
-
|
|
168
|
-
// when
|
|
169
|
-
const adapted = insertCodexCompatibilityGuidance(content);
|
|
170
|
-
|
|
171
|
-
// then
|
|
172
|
-
assert.ok(adapted.includes(multiAgentV2RoleGuidance));
|
|
173
|
-
assert.ok(adapted.includes(loadSkillsGuidance));
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
test("#given generated guidance before a template export #when adapting a skill #then the export wrapper is preserved", () => {
|
|
177
|
-
// given
|
|
178
|
-
const content = `---
|
|
179
|
-
name: refactor
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
## Codex Harness Tool Compatibility
|
|
183
|
-
|
|
184
|
-
Older variant guidance.
|
|
185
|
-
|
|
186
|
-
When translating \`load_skills=[...]\`, name the skills inside the spawned agent's \`message\`. If a code block below conflicts with this section, this section wins.
|
|
187
|
-
|
|
188
|
-
export const REFACTOR_TEMPLATE = \`# Refactor
|
|
189
|
-
|
|
190
|
-
call_omo_agent(subagent_type="explore", prompt="inspect")
|
|
191
|
-
\`
|
|
192
|
-
`;
|
|
193
|
-
|
|
194
|
-
// when
|
|
195
|
-
const adapted = insertCodexCompatibilityGuidance(content);
|
|
196
|
-
|
|
197
|
-
// then
|
|
198
|
-
assert.match(adapted, /export const REFACTOR_TEMPLATE = `# Refactor/);
|
|
199
|
-
assert.match(adapted, /multi_agent_v1\.spawn_agent/);
|
|
200
|
-
assert.doesNotMatch(adapted, /Older variant guidance/);
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
test("#given synced aggregate Codex skills #when they describe background orchestration #then liveness is framed as progress rather than timeout failure", async () => {
|
|
204
|
-
// given
|
|
205
|
-
const orchestrationPattern = /\b(?:run_in_background|background_output|wait_agent)\b/;
|
|
206
|
-
const requiredPatterns = [
|
|
207
|
-
["working progress message", /WORKING:/],
|
|
208
|
-
["blocked progress message", /BLOCKED:/],
|
|
209
|
-
["mailbox timeout framing", /timeout only means no new mailbox update arrived/],
|
|
210
|
-
// Skills route by session tool surface: the namespaced V1 tool or the flat V2 tool both count.
|
|
211
|
-
["wait-agent tool ref", /multi_agent_v1\.wait_agent|`wait_agent`/],
|
|
212
|
-
["explicit fallback conditions", /Fallback only when|Mark a file for retry only when/],
|
|
213
|
-
];
|
|
214
|
-
const bannedPatterns = [
|
|
215
|
-
["timeout as failure", patternFromParts(["fails or ", "times out"], "i")],
|
|
216
|
-
["failed or timed out", patternFromParts(["failed or ", "timed out"], "i")],
|
|
217
|
-
["two waits heuristic", patternFromParts(["After two ", "waits"])],
|
|
218
|
-
["unresponsive timeout framing", patternFromParts(["timeout", ".*", "un" + "responsive"], "i")],
|
|
219
|
-
["old status-tool warning", patternFromParts(["polling or ", "status tool"])],
|
|
220
|
-
["large status replay wording", patternFromParts(["large agent status", " and latest-message"])],
|
|
221
|
-
["old wait-agent aphorism", patternFromParts(["wait_agent", ".*", "signal, not ", "proof"], "i")],
|
|
222
|
-
];
|
|
223
|
-
|
|
224
|
-
// when / then
|
|
225
|
-
for (const skillName of await listSkillNames()) {
|
|
226
|
-
const content = await readSkill(skillName);
|
|
227
|
-
if (!orchestrationPattern.test(content)) continue;
|
|
228
|
-
|
|
229
|
-
for (const [label, pattern] of requiredPatterns) {
|
|
230
|
-
assert.match(content, pattern, `${skillName} missing ${label}`);
|
|
231
|
-
}
|
|
232
|
-
for (const [label, pattern] of bannedPatterns) {
|
|
233
|
-
assert.doesNotMatch(content, pattern, `${skillName} still has ${label}`);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
});
|
|
237
|
-
|
|
238
|
-
test("#given packaged start-work and ulw-plan skills #when inspected #then PR delivery options and the handoff explanation ship", async () => {
|
|
239
|
-
// given
|
|
240
|
-
const startWork = await readSkill("start-work");
|
|
241
|
-
const workflow = await readFile(join(root, "skills", "ulw-plan", "references", "full-workflow.md"), "utf8");
|
|
242
|
-
|
|
243
|
-
// when / then
|
|
244
|
-
assert.match(startWork, /--make-pr/);
|
|
245
|
-
assert.match(startWork, /--ship/);
|
|
246
|
-
assert.match(startWork, /implies `--make-pr`/i);
|
|
247
|
-
assert.match(startWork, /IMPLIES worktree mode/i);
|
|
248
|
-
assert.match(startWork, /Goal and todo discipline/i);
|
|
249
|
-
assert.match(startWork, /create_goal/);
|
|
250
|
-
assert.match(startWork, /one todo per column-zero checkbox/i);
|
|
251
|
-
|
|
252
|
-
assert.match(workflow, /Handoff explanation/i);
|
|
253
|
-
assert.match(workflow, /Added beyond the request/i);
|
|
254
|
-
assert.match(workflow, /\$start-work <plan-name>/);
|
|
255
|
-
assert.match(workflow, /--make-pr/);
|
|
256
|
-
assert.match(workflow, /--ship/);
|
|
257
|
-
assert.match(workflow, /COUNT the rows/i);
|
|
258
|
-
});
|
|
259
|
-
|
|
260
|
-
test("#given start-work skill #when synced for Codex #then the difficulty-tier delegation guidance survives the overlay", async () => {
|
|
261
|
-
const content = await readSkill("start-work");
|
|
262
|
-
|
|
263
|
-
assert.match(content, /lazycodex-worker-medium/);
|
|
264
|
-
assert.match(content, /Codex tier mapping for the delegation router/);
|
|
265
|
-
assert.match(content, /Global Review and Debugging Gate/);
|
|
266
|
-
assert.match(content, /full commit SHA/);
|
|
267
|
-
assert.match(content, /re-read the ledger record/);
|
|
268
|
-
assert.match(content, /exact lane\/SHA pair/);
|
|
269
|
-
assert.doesNotMatch(content, /works the same on both surfaces/);
|
|
270
|
-
});
|
|
271
|
-
|
|
272
|
-
test("#given review-work skill #when some lanes do not finish #then aggregate result remains bounded", async () => {
|
|
273
|
-
const content = await readSkill("review-work");
|
|
274
|
-
|
|
275
|
-
assert.match(content, /pending\/PASS\/FAIL\/INCONCLUSIVE/);
|
|
276
|
-
assert.match(content, /Preserve completed lane results immediately/);
|
|
277
|
-
assert.match(content, /ALL 5 lanes have a terminal state/);
|
|
278
|
-
assert.match(content, /REVIEW INCONCLUSIVE - not approved/);
|
|
279
|
-
assert.match(content, /Overall Verdict: PASSED \/ FAILED \/ INCONCLUSIVE/);
|
|
280
|
-
assert.match(content, /PASS\/FAIL\/INCONCLUSIVE \| HIGH\/MED\/LOW/);
|
|
281
|
-
assert.match(content, /Do not spin in repeated/);
|
|
282
|
-
assert.match(content, /bare REJECT\/FAIL token without findings is not a verdict/);
|
|
283
|
-
assert.match(content, /cites the violated goal criterion/);
|
|
284
|
-
assert.match(content, /append a durable task-evidence record/);
|
|
285
|
-
assert.match(content, /full commit SHA/);
|
|
286
|
-
assert.match(content, /re-read that record/);
|
|
287
|
-
assert.match(content, /exact lane\/SHA pair/);
|
|
288
|
-
assert.match(content, /Do not use `multi_agent_v1\.send_input` as an interrupt/);
|
|
289
|
-
});
|
|
290
|
-
|
|
291
|
-
test("#given PR and review skills #when synced for Codex #then worktree lifecycle is mandatory", async () => {
|
|
292
|
-
const startWork = await readSkill("start-work");
|
|
293
|
-
const reviewWork = await readSkill("review-work");
|
|
294
|
-
const sharedStartWork = await readSharedSkill("start-work");
|
|
295
|
-
|
|
296
|
-
assert.match(startWork, /PR creation, PR handoff, branch handoff, or merge/);
|
|
297
|
-
assert.match(startWork, /Finish the PR\/branch lifecycle from its task-owned worktree/);
|
|
298
|
-
assert.match(startWork, /merge by default unless explicitly opted out/);
|
|
299
|
-
assert.match(startWork, /No PR\/branch implementation or review in the main worktree/);
|
|
300
|
-
|
|
301
|
-
assert.match(sharedStartWork, /required for PR\/branch work/);
|
|
302
|
-
assert.match(sharedStartWork, /No PR\/branch implementation, review, or merge in the main worktree/);
|
|
303
|
-
assert.doesNotMatch(sharedStartWork, /If worktree mode was used/);
|
|
304
|
-
assert.doesNotMatch(sharedStartWork, /merge or hand off exactly as requested/);
|
|
305
|
-
|
|
306
|
-
assert.match(reviewWork, /dedicated review worktree attached to that branch/);
|
|
307
|
-
assert.match(reviewWork, /Never\s+checkout, test, or edit the review branch in the main worktree/);
|
|
308
|
-
});
|
|
309
|
-
|
|
310
|
-
test("#given generated Codex compatibility guidance #when multi-agent lifecycle tools are mentioned #then optional tools are guarded by the active tools list", () => {
|
|
311
|
-
assert.match(codexHarnessToolCompatibility, /when exposed in the active tools list/, "send_input/close_agent must be marked optional (lazycodex#116)");
|
|
312
|
-
assert.match(codexHarnessToolCompatibility, /multi_agent_v1\.spawn_agent/);
|
|
313
|
-
assert.match(codexHarnessToolCompatibility, /multi_agent_v1\.wait_agent/);
|
|
314
|
-
});
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import assert from "node:assert/strict";
|
|
2
|
-
import { readFile } from "node:fs/promises";
|
|
3
|
-
import { dirname, join } from "node:path";
|
|
4
|
-
import test from "node:test";
|
|
5
|
-
import { fileURLToPath } from "node:url";
|
|
6
|
-
|
|
7
|
-
const pluginRoot = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
8
|
-
const repositoryRoot = dirname(dirname(dirname(pluginRoot)));
|
|
9
|
-
const componentReference = join(pluginRoot, "components", "ultrawork", "skills", "ulw-plan", "references", "intent-unclear.md");
|
|
10
|
-
const sharedReference = join(repositoryRoot, "packages", "shared-skills", "skills", "ulw-plan", "references", "intent-unclear.md");
|
|
11
|
-
|
|
12
|
-
test("#given an unclear auth-improvement request #when ulw-plan derives its full-scope components #then it preserves evidenced intent without inventing reduction or MFA expansion", async () => {
|
|
13
|
-
const [component, shared] = await Promise.all([
|
|
14
|
-
readFile(componentReference, "utf8"),
|
|
15
|
-
readFile(sharedReference, "utf8"),
|
|
16
|
-
]);
|
|
17
|
-
|
|
18
|
-
for (const reference of [component, shared]) {
|
|
19
|
-
assert.match(reference, /components that refine the user's requested or evidence-backed intent/i);
|
|
20
|
-
assert.match(reference, /neither collapse into an invented reduced subset nor expand into adjacent features/i);
|
|
21
|
-
assert.match(reference, /MFA is an adjacent capability.*Scope OUT unless the user asks.*evidence establishes/i);
|
|
22
|
-
assert.doesNotMatch(reference, /MFA - all four planned in full/i);
|
|
23
|
-
}
|
|
24
|
-
});
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
# Common Scenarios with Tool Selection
|
|
2
|
-
|
|
3
|
-
## Scenario 1: Simple Calculation
|
|
4
|
-
|
|
5
|
-
**Decision: Python (always)**
|
|
6
|
-
|
|
7
|
-
```python
|
|
8
|
-
uv run --with numpy python -c "
|
|
9
|
-
import numpy as np
|
|
10
|
-
result = np.sum([1, 2, 3, 4, 5])
|
|
11
|
-
print(f'Result: {result}')
|
|
12
|
-
"
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Scenario 2: CSV Quick Analysis
|
|
16
|
-
|
|
17
|
-
**Decision: DuckDB (direct query, no memory load)**
|
|
18
|
-
|
|
19
|
-
```python
|
|
20
|
-
uv run --with numpy --with duckdb python -c "
|
|
21
|
-
import duckdb
|
|
22
|
-
result = duckdb.sql('''
|
|
23
|
-
SELECT * FROM 'data.csv'
|
|
24
|
-
LIMIT 10
|
|
25
|
-
''').pl()
|
|
26
|
-
print(result)
|
|
27
|
-
"
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## Scenario 3: Filter + Sort on Large Dataset
|
|
31
|
-
|
|
32
|
-
**Decision: Polars (128x faster filtering, 12x faster sorting)**
|
|
33
|
-
|
|
34
|
-
```python
|
|
35
|
-
uv run --with numpy --with polars python -c "
|
|
36
|
-
import polars as pl
|
|
37
|
-
result = (
|
|
38
|
-
pl.scan_csv('large.csv')
|
|
39
|
-
.filter(pl.col('value') > 1000)
|
|
40
|
-
.sort('value', descending=True)
|
|
41
|
-
.head(100)
|
|
42
|
-
.collect()
|
|
43
|
-
)
|
|
44
|
-
print(result)
|
|
45
|
-
"
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## Scenario 4: Multi-Table Join + Aggregation
|
|
49
|
-
|
|
50
|
-
**Decision: DuckDB (best for joins and aggregations)**
|
|
51
|
-
|
|
52
|
-
```python
|
|
53
|
-
uv run --with numpy --with duckdb python -c "
|
|
54
|
-
import duckdb
|
|
55
|
-
result = duckdb.sql('''
|
|
56
|
-
SELECT
|
|
57
|
-
a.category,
|
|
58
|
-
COUNT(*) as count,
|
|
59
|
-
SUM(b.amount) as total
|
|
60
|
-
FROM 'table1.csv' a
|
|
61
|
-
JOIN 'table2.csv' b ON a.id = b.id
|
|
62
|
-
GROUP BY a.category
|
|
63
|
-
ORDER BY total DESC
|
|
64
|
-
''').pl()
|
|
65
|
-
print(result)
|
|
66
|
-
"
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## Scenario 5: Data Exploration
|
|
70
|
-
|
|
71
|
-
**Decision: DuckDB for quick exploration**
|
|
72
|
-
|
|
73
|
-
```python
|
|
74
|
-
uv run --with numpy --with duckdb python -c "
|
|
75
|
-
import duckdb
|
|
76
|
-
|
|
77
|
-
# Show first few rows
|
|
78
|
-
print('**Sample Data**')
|
|
79
|
-
print(duckdb.sql('SELECT * FROM \"data.csv\" LIMIT 5').pl())
|
|
80
|
-
|
|
81
|
-
# Show summary statistics
|
|
82
|
-
print('\\n**Summary Statistics**')
|
|
83
|
-
print(duckdb.sql('DESCRIBE SELECT * FROM \"data.csv\"').pl())
|
|
84
|
-
|
|
85
|
-
# Show row count
|
|
86
|
-
print('\\n**Row Count**')
|
|
87
|
-
print(duckdb.sql('SELECT COUNT(*) as total_rows FROM \"data.csv\"').pl())
|
|
88
|
-
"
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
## Scenario 6: Time-Series Analysis
|
|
92
|
-
|
|
93
|
-
**Decision: DuckDB for aggregation + matplotlib for visualization**
|
|
94
|
-
|
|
95
|
-
```python
|
|
96
|
-
uv run --with numpy --with duckdb --with pyarrow --with matplotlib python -c "
|
|
97
|
-
import duckdb
|
|
98
|
-
import matplotlib.pyplot as plt
|
|
99
|
-
|
|
100
|
-
# Aggregate by date
|
|
101
|
-
result = duckdb.sql('''
|
|
102
|
-
SELECT
|
|
103
|
-
DATE_TRUNC('day', timestamp) as date,
|
|
104
|
-
COUNT(*) as count,
|
|
105
|
-
AVG(value) as avg_value
|
|
106
|
-
FROM 'timeseries.csv'
|
|
107
|
-
GROUP BY date
|
|
108
|
-
ORDER BY date
|
|
109
|
-
''').pl()
|
|
110
|
-
|
|
111
|
-
# Plot
|
|
112
|
-
plt.figure(figsize=(12, 6))
|
|
113
|
-
plt.subplot(2, 1, 1)
|
|
114
|
-
plt.plot(result['date'], result['count'])
|
|
115
|
-
plt.title('Daily Count')
|
|
116
|
-
|
|
117
|
-
plt.subplot(2, 1, 2)
|
|
118
|
-
plt.plot(result['date'], result['avg_value'])
|
|
119
|
-
plt.title('Daily Average Value')
|
|
120
|
-
|
|
121
|
-
plt.tight_layout()
|
|
122
|
-
plt.savefig('timeseries.png')
|
|
123
|
-
print('Saved to timeseries.png')
|
|
124
|
-
"
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
## Scenario 7: Complex Transformation
|
|
128
|
-
|
|
129
|
-
**Decision: Polars for efficient transformations**
|
|
130
|
-
|
|
131
|
-
```python
|
|
132
|
-
uv run --with numpy --with polars python -c "
|
|
133
|
-
import polars as pl
|
|
134
|
-
|
|
135
|
-
result = (
|
|
136
|
-
pl.scan_csv('data.csv')
|
|
137
|
-
.with_columns([
|
|
138
|
-
# Create new calculated columns
|
|
139
|
-
(pl.col('price') * pl.col('quantity')).alias('total'),
|
|
140
|
-
pl.col('date').str.strptime(pl.Date, '%Y-%m-%d').alias('parsed_date'),
|
|
141
|
-
pl.col('name').str.to_uppercase().alias('upper_name'),
|
|
142
|
-
])
|
|
143
|
-
.filter(pl.col('total') > 100)
|
|
144
|
-
.select(['parsed_date', 'upper_name', 'total'])
|
|
145
|
-
.collect()
|
|
146
|
-
)
|
|
147
|
-
|
|
148
|
-
print(result)
|
|
149
|
-
"
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
## Scenario 8: Large File Processing
|
|
153
|
-
|
|
154
|
-
**Decision: Polars streaming mode**
|
|
155
|
-
|
|
156
|
-
```python
|
|
157
|
-
uv run --with numpy --with polars python -c "
|
|
158
|
-
import polars as pl
|
|
159
|
-
|
|
160
|
-
# Process file larger than RAM
|
|
161
|
-
result = (
|
|
162
|
-
pl.scan_csv('huge_file.csv')
|
|
163
|
-
.filter(pl.col('active') == True)
|
|
164
|
-
.groupby('category')
|
|
165
|
-
.agg([
|
|
166
|
-
pl.count().alias('count'),
|
|
167
|
-
pl.sum('amount').alias('total'),
|
|
168
|
-
pl.mean('amount').alias('average'),
|
|
169
|
-
])
|
|
170
|
-
.collect(streaming=True) # Streaming mode
|
|
171
|
-
)
|
|
172
|
-
|
|
173
|
-
print(result)
|
|
174
|
-
print(f'\\nProcessed {result[\"count\"].sum():,} rows')
|
|
175
|
-
"
|
|
176
|
-
```
|