oh-my-opencode 5.0.0-beta.2 → 5.0.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/command/publish.md +44 -16
- package/.agents/skills/publish/SKILL.md +44 -16
- package/.agents/skills/senpi-qa/SKILL.md +80 -0
- package/.agents/skills/senpi-qa/scripts/resolve-evidence-dir.mjs +65 -0
- package/.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs +171 -0
- package/.agents/skills/work-with-pr/SKILL.md +37 -23
- package/.opencode/command/publish.md +44 -16
- package/.opencode/skills/work-with-pr/SKILL.md +37 -23
- 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/agents/atlas/agent.d.ts +0 -1
- package/dist/agents/sisyphus/grok-4.d.ts +20 -0
- package/dist/agents/sisyphus/index.d.ts +2 -0
- package/dist/agents/sisyphus-agent-config.d.ts +6 -0
- package/dist/agents/sisyphus-agent-factory.d.ts +1 -1
- package/dist/agents/sisyphus-runtime-prompt-reconciler.d.ts +15 -4
- package/dist/agents/types.d.ts +2 -2
- package/dist/cli/fallback-lane-policy.d.ts +1 -0
- package/dist/cli/index.js +23057 -20893
- 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 +23093 -20929
- package/dist/config/schema/commands.d.ts +1 -1
- package/dist/config/schema/hooks.d.ts +1 -1
- package/dist/config/schema/oh-my-opencode-config.d.ts +4 -1
- package/dist/config/schema/ulw-execute.d.ts +5 -0
- package/dist/config/validate.d.ts +2 -0
- package/dist/create-hooks.d.ts +3 -1
- package/dist/features/btw-side/btw-command-draft.d.ts +7 -0
- package/dist/features/btw-side/context-injector.d.ts +15 -0
- package/dist/features/btw-side/index.d.ts +8 -0
- package/dist/features/btw-side/metadata.d.ts +15 -0
- package/dist/features/btw-side/parent-context-budget.d.ts +9 -0
- package/dist/features/btw-side/server-session-registry.d.ts +8 -0
- package/dist/features/btw-side/tui-adoption-cache.d.ts +13 -0
- package/dist/features/btw-side/tui-adoption-guard.d.ts +5 -0
- package/dist/features/btw-side/tui-controller-types.d.ts +68 -0
- package/dist/features/btw-side/tui-controller.d.ts +19 -0
- package/dist/features/btw-side/tui-escape-return.d.ts +12 -0
- package/dist/features/btw-side/tui-keymap.d.ts +17 -0
- package/dist/features/btw-side/tui-parent-validator.d.ts +6 -0
- package/dist/features/btw-side/tui-picker-options.d.ts +20 -0
- package/dist/features/btw-side/tui-picker.d.ts +9 -0
- package/dist/features/btw-side/tui-prompt-queue.d.ts +8 -0
- package/dist/features/btw-side/tui-session-bridge.d.ts +11 -0
- package/dist/features/btw-side/tui-session-catalog.d.ts +35 -0
- package/dist/features/btw-side/tui-side-removal.d.ts +11 -0
- package/dist/features/btw-side/tui-side-start.d.ts +9 -0
- package/dist/features/btw-side/tui-wiring.d.ts +8 -0
- package/dist/features/builtin-commands/templates/ulw-execute.d.ts +1 -0
- package/dist/features/builtin-commands/types.d.ts +1 -1
- package/dist/features/opengateway-provider/index.d.ts +13 -0
- package/dist/hooks/atlas/atlas-hook.d.ts +1 -0
- package/dist/hooks/atlas/atlas-lifecycle-store.d.ts +50 -0
- package/dist/hooks/atlas/event-handler.d.ts +1 -0
- package/dist/hooks/atlas/final-wave-approval-gate.test-support.d.ts +50 -0
- package/dist/hooks/atlas/system-reminder-templates.d.ts +0 -1
- package/dist/hooks/atlas/tool-execute-before.d.ts +3 -0
- package/dist/hooks/atlas/types.d.ts +1 -0
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/prometheus-md-only/agent-resolution.d.ts +2 -2
- package/dist/hooks/runtime-fallback/chat-message-handler.d.ts +2 -0
- package/dist/hooks/runtime-fallback/retry-model-payload.d.ts +1 -0
- package/dist/hooks/runtime-fallback/runtime-model-settings.d.ts +6 -0
- package/dist/hooks/runtime-fallback/session-status-handler.d.ts +1 -1
- package/dist/hooks/runtime-fallback/types.d.ts +3 -1
- package/dist/hooks/sisyphus-junior-notepad/constants.d.ts +1 -1
- package/dist/hooks/{start-work → ulw-execute}/context-info-builder.d.ts +1 -1
- package/dist/hooks/{start-work → ulw-execute}/index.d.ts +1 -1
- package/dist/hooks/ulw-execute/ulw-execute-hook.d.ts +23 -0
- package/dist/index.js +11724 -6355
- package/dist/oh-my-opencode.schema.json +15 -2
- package/dist/plugin/chat-message/types.d.ts +3 -3
- package/dist/plugin/chat-message/ulw-execute-message.d.ts +5 -0
- package/dist/plugin/event-session-lifecycle.d.ts +1 -0
- package/dist/plugin/hooks/create-core-hooks.d.ts +2 -1
- package/dist/plugin/hooks/create-session-hooks.d.ts +2 -2
- package/dist/plugin/hooks/create-transform-hooks.d.ts +2 -0
- package/dist/plugin/messages-transform.d.ts +1 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/normalize-sdk-response.d.ts +1 -0
- package/dist/shared/runtime-fallback-retry-marker.d.ts +16 -0
- package/dist/shared/shell-env.d.ts +1 -1
- package/dist/skills/ast-grep/AGENTS.md +51 -0
- package/dist/skills/coding-agent-sessions/AGENTS.md +62 -0
- package/dist/skills/coding-agent-sessions/SKILL.md +3 -2
- package/dist/skills/coding-agent-sessions/references/all-platforms.md +1 -1
- package/dist/skills/coding-agent-sessions/references/senpi.md +4 -4
- package/dist/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +1 -1
- package/dist/skills/frontend/SKILL.md +11 -7
- package/dist/skills/frontend/references/design/_INDEX.md +1 -0
- package/dist/skills/frontend/references/design/print-paged-media.md +76 -0
- package/dist/skills/frontend/references/design/stylegallery.md +80 -0
- package/dist/skills/frontend/references/designpowers/README.md +1 -1
- package/dist/skills/frontend/references/designpowers/lane-a-direction.md +1 -1
- package/dist/skills/frontend/references/designpowers/lane-b-execution.md +11 -11
- package/dist/skills/frontend/references/designpowers/lane-d-memory.md +3 -3
- package/dist/skills/frontend/references/designpowers/orchestration.md +1 -1
- package/dist/skills/frontend/references/designpowers/routing.md +5 -5
- package/dist/skills/review-work/SKILL.md +3 -3
- package/dist/skills/ultimate-browsing/ATTRIBUTION.md +37 -10
- package/dist/skills/ultimate-browsing/SKILL.md +2 -0
- package/dist/skills/ultimate-browsing/engine/AGENTS.md +179 -0
- package/dist/skills/ultimate-browsing/engine/templates/package.json +1 -1
- package/dist/skills/ultimate-browsing/references/chrome-stealth.md +13 -11
- package/dist/skills/{start-work → ulw-execute}/SKILL.md +9 -8
- package/dist/skills/ulw-plan/SKILL.md +6 -6
- package/dist/skills/ulw-plan/references/full-workflow.md +31 -7
- package/dist/skills/ulw-plan/references/intent-clear.md +2 -1
- package/dist/skills/ulw-plan/references/intent-unclear.md +5 -5
- package/dist/skills/ulw-research/SKILL.md +1 -1
- package/dist/skills/visual-qa/AGENTS.md +58 -0
- package/dist/skills/visual-qa/SKILL.md +3 -2
- package/dist/tools/delegate-task/builtin-categories.d.ts +1 -0
- package/dist/tools/delegate-task/builtin-category-definition.d.ts +1 -0
- package/dist/tools/delegate-task/tool-description.d.ts +3 -1
- package/dist/tui.js +8824 -8906
- package/package.json +38 -35
- package/packages/git-bash-mcp/dist/cli.js +5 -1
- package/packages/git-bash-mcp/package.json +1 -1
- package/packages/lsp-core/src/lsp/client-diagnostics-concurrency.integration.test.ts +44 -0
- package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +0 -28
- package/packages/lsp-core/src/lsp/client-wrapper-outside-cwd.test.ts +78 -0
- package/packages/lsp-core/src/lsp/client-wrapper.test.ts +66 -13
- package/packages/lsp-core/src/lsp/client-wrapper.ts +70 -18
- package/packages/lsp-core/src/lsp/outside-context-workspace.ts +33 -0
- package/packages/lsp-core/src/lsp/workspace-edit-adversarial.test.ts +20 -1
- package/packages/lsp-core/src/lsp/workspace-markers.ts +1 -0
- package/packages/lsp-core/src/tools/diagnostics.ts +3 -3
- package/packages/lsp-core/src/tools/navigation.ts +4 -2
- package/packages/lsp-core/src/tools/rename.ts +4 -2
- package/packages/lsp-core/src/tools/symbols.ts +1 -1
- package/packages/lsp-daemon/dist/cli.js +246 -185
- package/packages/lsp-daemon/dist/client.js +222 -164
- package/packages/lsp-daemon/dist/ensure-daemon.js +1 -0
- package/packages/lsp-daemon/dist/index.js +236 -177
- package/packages/lsp-daemon/dist/version-reap.js +1 -1
- package/packages/lsp-tools-mcp/dist/cli.js +198 -136
- package/packages/lsp-tools-mcp/dist/lsp/manager.js +62 -92
- package/packages/lsp-tools-mcp/dist/mcp.js +200 -138
- package/packages/lsp-tools-mcp/dist/request-context.js +11 -12
- package/packages/lsp-tools-mcp/dist/tools.js +204 -146
- package/packages/omo-codex/THIRD-PARTY-NOTICES.md +4 -4
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +4 -4
- package/packages/omo-codex/plugin/AGENTS.md +47 -0
- package/packages/omo-codex/plugin/README.md +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +32 -31
- 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/codegraph/dist/cli.js +224 -81
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +224 -82
- package/packages/omo-codex/plugin/components/codegraph/package.json +4 -4
- package/packages/omo-codex/plugin/components/codegraph/src/mcp-bridge.ts +1 -0
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.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/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 +217 -171
- 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 +57 -42
- 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 +6 -2
- 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 +1 -2
- 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 +3 -9
- 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 +2433 -422
- package/packages/omo-codex/plugin/components/telemetry/dist/posthog.js +2437 -426
- 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 +5 -0
- package/packages/omo-codex/plugin/components/ultrawork/biome.json +2 -2
- package/packages/omo-codex/plugin/components/ultrawork/directive.md +13 -1
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +5 -5
- package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +13 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +6 -6
- 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/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/skill-pointer.test.ts +0 -2
- package/packages/omo-codex/plugin/components/{start-work-continuation → ulw-execute-continuation}/AGENTS.md +5 -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 +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 +16 -0
- package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/biome.json +2 -2
- package/packages/omo-codex/plugin/components/ulw-loop/directive.md +13 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +2 -4
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +3 -3
- 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 +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +3 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +3 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +3 -3
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint-continuation.test.ts +0 -1
- 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/codex-goal-instruction.test.ts +2 -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/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/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/ultrawork-directive.test.ts +4 -5
- 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-codegraph-init-guidance.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-checking-codegraph-bootstrap.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/package-lock.json +681 -395
- package/packages/omo-codex/plugin/package.json +2 -2
- package/packages/omo-codex/plugin/scripts/AGENTS.md +40 -0
- package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +1 -1
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +11 -11
- package/packages/omo-codex/plugin/shared/package.json +3 -4
- 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/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/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 +179 -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/ultrawork/SKILL.md +13 -1
- package/packages/omo-codex/plugin/skills/{start-work → ulw-execute}/SKILL.md +12 -11
- 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 +1 -0
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +6 -6
- 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 +1 -1
- 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 +8 -28
- package/packages/omo-codex/plugin/test/aggregate-manifest.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/component-bin-names.test.mjs +2 -2
- package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -1
- 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 -4
- package/packages/omo-codex/plugin/test/lcx-contribute-bug-fix-template.test.mjs +21 -27
- 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 +12 -12
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +1 -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 +0 -3
- package/packages/omo-codex/plugin/test/ulw-plan-review-state-contract.test.mjs +0 -3
- package/packages/omo-codex/scripts/AGENTS.md +36 -0
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +2601 -528
- package/packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs +7 -2
- 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/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/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 +179 -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/{start-work → ulw-execute}/SKILL.md +9 -8
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +6 -6
- 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 +1 -1
- 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/dist/config/schema/start-work.d.ts +0 -5
- package/dist/features/builtin-commands/templates/start-work.d.ts +0 -1
- package/dist/hooks/start-work/start-work-hook.d.ts +0 -23
- package/dist/plugin/chat-message/start-work-message.d.ts +0 -5
- package/dist/tools/call-omo-agent/background-agent-executor.d.ts +0 -5
- package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +0 -28
- 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/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/sync-skills-orchestration.test.mjs +0 -314
- package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +0 -24
- /package/dist/hooks/{start-work → ulw-execute}/context-info-formatters.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/explicit-plan-context.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/notepad-scaffold.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/parse-user-request.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/plan-discovery-context.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/plan-selection.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/session-plan-affinity.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/work-initializer.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/worktree-block.d.ts +0 -0
- /package/dist/hooks/{start-work → ulw-execute}/worktree-detector.d.ts +0 -0
- /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/{start-work-continuation → 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,20 +1,24 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
|
|
3
|
-
import { formatDynamicBlock, formatStaticBlock } from "@oh-my-opencode/rules-engine/engine";
|
|
4
1
|
import type { LoadedRule, MatchReason, RuleSource } from "@oh-my-opencode/rules-engine/engine";
|
|
2
|
+
import { formatDynamicBlock, formatStaticBlock } from "@oh-my-opencode/rules-engine/engine";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
5
4
|
|
|
6
5
|
const FORMAT_OPTIONS = {
|
|
7
6
|
maxRuleChars: 10_000,
|
|
8
7
|
maxResultChars: 10_000,
|
|
9
8
|
};
|
|
10
9
|
|
|
10
|
+
// Runtime sentinel: the rules hook emits and re-greps this marker when
|
|
11
|
+
// deduplicating injected rules against the transcript (transcript-rule-filter.ts).
|
|
12
|
+
const INSTRUCTIONS_FROM = "Instructions from: ";
|
|
13
|
+
|
|
11
14
|
describe("rules formatter hook context", () => {
|
|
12
15
|
it("#given multiline dynamic rules #when formatting PostToolUse context #then labels and bodies render on separate lines", () => {
|
|
13
16
|
// given
|
|
17
|
+
const body = "DYN_BODY_SENTINEL_LINE_1\n\nDYN_BODY_SENTINEL_LINE_2";
|
|
14
18
|
const rule = loadedRule({
|
|
15
19
|
path: "/repo/packages/CONTEXT.md",
|
|
16
20
|
relativePath: "packages/CONTEXT.md",
|
|
17
|
-
body
|
|
21
|
+
body,
|
|
18
22
|
});
|
|
19
23
|
|
|
20
24
|
// when
|
|
@@ -25,124 +29,86 @@ describe("rules formatter hook context", () => {
|
|
|
25
29
|
);
|
|
26
30
|
|
|
27
31
|
// then
|
|
28
|
-
expect(block).
|
|
29
|
-
|
|
30
|
-
"Additional project instructions matched for packages/omo-codex/plugin/components/ulw-loop/src/paths.ts:",
|
|
31
|
-
"",
|
|
32
|
-
"Instructions from: /repo/packages/CONTEXT.md",
|
|
33
|
-
"",
|
|
34
|
-
"# packages",
|
|
35
|
-
"",
|
|
36
|
-
"## OVERVIEW",
|
|
37
|
-
"23 sibling packages.",
|
|
38
|
-
"",
|
|
39
|
-
"## CONVENTIONS",
|
|
40
|
-
"Use npm.",
|
|
41
|
-
].join("\n"),
|
|
42
|
-
);
|
|
32
|
+
expect(block).toContain(`${INSTRUCTIONS_FROM}/repo/packages/CONTEXT.md\n\n${body}`);
|
|
33
|
+
expect(occurrenceCount(block, INSTRUCTIONS_FROM)).toBe(1);
|
|
43
34
|
});
|
|
44
35
|
|
|
45
36
|
it("#given static rules #when formatting SessionStart context #then it injects rule bodies inline", () => {
|
|
46
37
|
// given
|
|
38
|
+
const body = "STATIC_BODY_SENTINEL";
|
|
47
39
|
const rule = loadedRule({
|
|
48
40
|
path: "/repo/CONTEXT.md",
|
|
49
41
|
relativePath: "CONTEXT.md",
|
|
50
|
-
body
|
|
42
|
+
body,
|
|
51
43
|
});
|
|
52
44
|
|
|
53
45
|
// when
|
|
54
46
|
const block = formatStaticBlock([rule], FORMAT_OPTIONS);
|
|
55
47
|
|
|
56
48
|
// then
|
|
57
|
-
expect(block).
|
|
58
|
-
[
|
|
59
|
-
"## Project Instructions",
|
|
60
|
-
"",
|
|
61
|
-
"Instructions from: /repo/CONTEXT.md",
|
|
62
|
-
"",
|
|
63
|
-
"Keep generated hook context readable.",
|
|
64
|
-
].join("\n"),
|
|
65
|
-
);
|
|
49
|
+
expect(block).toContain(`${INSTRUCTIONS_FROM}/repo/CONTEXT.md\n\n${body}`);
|
|
66
50
|
});
|
|
67
51
|
|
|
68
52
|
it("#given CRLF and bare CR rule bodies #when formatting context #then it normalizes line endings", () => {
|
|
69
53
|
// given
|
|
70
54
|
const rule = loadedRule({
|
|
71
|
-
body: "
|
|
55
|
+
body: "A1\r\n B2\rC3",
|
|
72
56
|
});
|
|
73
57
|
|
|
74
58
|
// when
|
|
75
59
|
const block = formatDynamicBlock([rule], "src/app.ts", FORMAT_OPTIONS);
|
|
76
60
|
|
|
77
61
|
// then
|
|
78
|
-
expect(block).toContain("
|
|
62
|
+
expect(block).toContain("A1\n B2\nC3");
|
|
79
63
|
expect(block).not.toContain("\r");
|
|
80
64
|
});
|
|
81
65
|
|
|
82
66
|
it("#given duplicate static rules with different line endings #when formatting context #then it injects one copy", () => {
|
|
83
67
|
// given
|
|
68
|
+
const sharedBody = "SHARED_L1\r\nSHARED_L2";
|
|
69
|
+
const normalizedSharedBody = "SHARED_L1\nSHARED_L2";
|
|
84
70
|
const lfRule = loadedRule({
|
|
85
71
|
path: "/repo/CONTEXT.md",
|
|
86
72
|
relativePath: "CONTEXT.md",
|
|
87
|
-
body:
|
|
73
|
+
body: normalizedSharedBody,
|
|
88
74
|
});
|
|
89
75
|
const crlfRule = loadedRule({
|
|
90
76
|
path: "/repo/packages/CONTEXT.md",
|
|
91
77
|
relativePath: "packages/CONTEXT.md",
|
|
92
|
-
body:
|
|
78
|
+
body: sharedBody,
|
|
93
79
|
});
|
|
94
80
|
|
|
95
81
|
// when
|
|
96
82
|
const block = formatStaticBlock([lfRule, crlfRule], FORMAT_OPTIONS);
|
|
97
83
|
|
|
98
84
|
// then
|
|
99
|
-
expect(occurrenceCount(block,
|
|
100
|
-
expect(occurrenceCount(block,
|
|
85
|
+
expect(occurrenceCount(block, `${INSTRUCTIONS_FROM}/repo/CONTEXT.md`)).toBe(1);
|
|
86
|
+
expect(occurrenceCount(block, normalizedSharedBody)).toBe(1);
|
|
101
87
|
expect(block).not.toContain("/repo/packages/CONTEXT.md");
|
|
102
88
|
});
|
|
103
89
|
|
|
104
90
|
it("#given a Hephaestus static rule #when formatting SessionStart context #then it injects its body before other rule bodies", () => {
|
|
105
91
|
// given
|
|
106
92
|
const rules = [
|
|
107
|
-
loadedRule({ path: "/repo/alpha.md", relativePath: "alpha.md", body: "
|
|
93
|
+
loadedRule({ path: "/repo/alpha.md", relativePath: "alpha.md", body: "ALPHA_BODY_SENTINEL" }),
|
|
108
94
|
loadedRule({
|
|
109
95
|
path: "/repo/bundled-rules/hephaestus.md",
|
|
110
96
|
relativePath: "bundled-rules/hephaestus.md",
|
|
111
|
-
body: "
|
|
97
|
+
body: "HEPHAESTUS_BODY_SENTINEL",
|
|
112
98
|
}),
|
|
113
|
-
loadedRule({ path: "/repo/beta.md", relativePath: "beta.md", body: "
|
|
99
|
+
loadedRule({ path: "/repo/beta.md", relativePath: "beta.md", body: "BETA_BODY_SENTINEL" }),
|
|
114
100
|
];
|
|
115
101
|
|
|
116
102
|
// when
|
|
117
103
|
const block = formatStaticBlock(rules, FORMAT_OPTIONS);
|
|
118
104
|
|
|
119
105
|
// then
|
|
120
|
-
expect(block).toContain(
|
|
121
|
-
expect(block).toContain("
|
|
122
|
-
expect(block).toContain("
|
|
123
|
-
expect(block).toContain("
|
|
124
|
-
expect(block.indexOf("
|
|
125
|
-
expect(block.indexOf("
|
|
126
|
-
expect(block).not.toContain("must read project rules:");
|
|
127
|
-
expect(block).not.toContain("- [hephaestus.md]");
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
it("#given only a Hephaestus static rule #when formatting SessionStart context #then it emits no project rule link section", () => {
|
|
131
|
-
// given
|
|
132
|
-
const rule = loadedRule({
|
|
133
|
-
path: "/repo/bundled-rules/hephaestus.md",
|
|
134
|
-
relativePath: "bundled-rules/hephaestus.md",
|
|
135
|
-
body: "Hephaestus guidance.",
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
// when
|
|
139
|
-
const block = formatStaticBlock([rule], FORMAT_OPTIONS);
|
|
140
|
-
|
|
141
|
-
// then
|
|
142
|
-
expect(block).toContain("Instructions from: /repo/bundled-rules/hephaestus.md");
|
|
143
|
-
expect(block).toContain("Hephaestus guidance.");
|
|
144
|
-
expect(block).not.toContain("- [hephaestus.md]");
|
|
145
|
-
expect(block).not.toContain("must read project rules:");
|
|
106
|
+
expect(block).toContain(`${INSTRUCTIONS_FROM}/repo/bundled-rules/hephaestus.md`);
|
|
107
|
+
expect(block).toContain("HEPHAESTUS_BODY_SENTINEL");
|
|
108
|
+
expect(block).toContain("ALPHA_BODY_SENTINEL");
|
|
109
|
+
expect(block).toContain("BETA_BODY_SENTINEL");
|
|
110
|
+
expect(block.indexOf("HEPHAESTUS_BODY_SENTINEL")).toBeLessThan(block.indexOf("ALPHA_BODY_SENTINEL"));
|
|
111
|
+
expect(block.indexOf("ALPHA_BODY_SENTINEL")).toBeLessThan(block.indexOf("BETA_BODY_SENTINEL"));
|
|
146
112
|
});
|
|
147
113
|
|
|
148
114
|
it("#given an oversized Hephaestus static rule #when formatting under a tight result budget #then its body is never truncated", () => {
|
|
@@ -162,7 +128,6 @@ describe("rules formatter hook context", () => {
|
|
|
162
128
|
|
|
163
129
|
// then
|
|
164
130
|
expect(block).toContain(tailMarker);
|
|
165
|
-
expect(block).not.toContain("[Truncated. Full:");
|
|
166
131
|
});
|
|
167
132
|
|
|
168
133
|
it("#given multiple oversized rules #when formatting under a tight result budget #then every rule receives a fair truncated share with a read-full guide", () => {
|
|
@@ -180,13 +145,15 @@ describe("rules formatter hook context", () => {
|
|
|
180
145
|
});
|
|
181
146
|
|
|
182
147
|
// then
|
|
183
|
-
expect(block).toContain(
|
|
184
|
-
expect(block).toContain(
|
|
185
|
-
expect(block).toContain(
|
|
186
|
-
expect(block).toContain("
|
|
187
|
-
expect(block).toContain("
|
|
188
|
-
expect(block).toContain("
|
|
189
|
-
expect(
|
|
148
|
+
expect(block).toContain(`${INSTRUCTIONS_FROM}/repo/alpha.md`);
|
|
149
|
+
expect(block).toContain(`${INSTRUCTIONS_FROM}/repo/beta.md`);
|
|
150
|
+
expect(block).toContain(`${INSTRUCTIONS_FROM}/repo/gamma.md`);
|
|
151
|
+
expect(block).toContain("alpha-");
|
|
152
|
+
expect(block).toContain("beta-");
|
|
153
|
+
expect(block).toContain("gamma-");
|
|
154
|
+
expect(block).not.toContain("A".repeat(400));
|
|
155
|
+
expect(block).not.toContain("B".repeat(400));
|
|
156
|
+
expect(block).not.toContain("C".repeat(400));
|
|
190
157
|
});
|
|
191
158
|
|
|
192
159
|
it("#given no matching rules #when formatting hook context #then it emits no context", () => {
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { tmpdir } from "node:os";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
+
import { findPluginBundledCandidates } from "@oh-my-opencode/rules-engine/engine";
|
|
4
5
|
import { afterEach, describe, expect, it } from "vitest";
|
|
5
|
-
|
|
6
6
|
import { type CodexSessionStartInput, runSessionStartHook } from "../src/codex-hook.js";
|
|
7
|
-
import { findPluginBundledCandidates } from "@oh-my-opencode/rules-engine/engine";
|
|
8
7
|
|
|
9
8
|
const GPT_55_VARIANT_PATH = "bundled-rules/hephaestus/gpt-5.5.md";
|
|
10
9
|
const GPT_56_VARIANT_PATH = "bundled-rules/hephaestus/gpt-5.6.md";
|
|
@@ -5,14 +5,14 @@ import { formatAdditionalContextOutput } from "../src/hook-output.js";
|
|
|
5
5
|
describe("formatAdditionalContextOutput", () => {
|
|
6
6
|
it("#given context with outer whitespace and CRLF #when serializing hook JSON #then additional context is newline-normalized", () => {
|
|
7
7
|
// given
|
|
8
|
-
const context = "\r\n\r\
|
|
8
|
+
const context = "\r\n\r\nA1\r\nB2\rC3\r\n";
|
|
9
9
|
|
|
10
10
|
// when
|
|
11
11
|
const output = formatAdditionalContextOutput("PostToolUse", context);
|
|
12
12
|
const parsed: unknown = JSON.parse(output);
|
|
13
13
|
|
|
14
14
|
// then
|
|
15
|
-
expect(readAdditionalContext(parsed)).toBe("
|
|
15
|
+
expect(readAdditionalContext(parsed)).toBe("A1\nB2\nC3");
|
|
16
16
|
expect(output.endsWith("\n")).toBe(true);
|
|
17
17
|
});
|
|
18
18
|
|
|
@@ -40,7 +40,6 @@ describe("formatAdditionalContextOutput", () => {
|
|
|
40
40
|
expect(additionalContext.length).toBeLessThanOrEqual(32_000);
|
|
41
41
|
expect(additionalContext).toContain("first");
|
|
42
42
|
expect(additionalContext).not.toContain("last");
|
|
43
|
-
expect(additionalContext).toContain("[Truncated hook additional context to 32000 chars");
|
|
44
43
|
});
|
|
45
44
|
});
|
|
46
45
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
|
|
3
|
-
import { matchRule, normalizeGlobs } from "@oh-my-opencode/rules-engine/engine";
|
|
4
1
|
import type { RuleFrontmatter } from "@oh-my-opencode/rules-engine/engine";
|
|
2
|
+
import { matchRule, normalizeGlobs } from "@oh-my-opencode/rules-engine/engine";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
5
4
|
|
|
6
5
|
function matchFrontmatter(
|
|
7
6
|
frontmatter: RuleFrontmatter,
|
|
@@ -32,7 +32,7 @@ describe("plugin package metadata", () => {
|
|
|
32
32
|
// then
|
|
33
33
|
expect(packageJson.type).toBe("module");
|
|
34
34
|
expect(packageJson.packageManager).toBe("npm@11.12.1");
|
|
35
|
-
expect(packageJson.dependencies ?? {}).toEqual({ picomatch: "^4.0.
|
|
35
|
+
expect(packageJson.dependencies ?? {}).toEqual({ picomatch: "^4.0.7" });
|
|
36
36
|
expect(packageJson.bin["omo-rules"]).toBe("./dist/cli.js");
|
|
37
37
|
expect(packageFiles).toContain("bundled-rules");
|
|
38
38
|
expect(bundledRules).toContain("windows-git-bash.md");
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
|
|
3
1
|
import { parseRule } from "@oh-my-opencode/rules-engine/engine";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
4
3
|
|
|
5
4
|
describe("parseRule", () => {
|
|
6
5
|
it("#given content without frontmatter #when parsing #then body is preserved", () => {
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { tmpdir } from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
|
+
import type { PiRulesConfig } from "@oh-my-opencode/rules-engine/engine";
|
|
4
5
|
import { afterEach, describe, expect, it } from "vitest";
|
|
5
|
-
|
|
6
6
|
import { withPostCompactBudget } from "../src/post-compact-budget.js";
|
|
7
|
-
import type { PiRulesConfig } from "@oh-my-opencode/rules-engine/engine";
|
|
8
7
|
|
|
9
8
|
const tempDirectories: string[] = [];
|
|
10
9
|
const CONFIG: PiRulesConfig = {
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { tmpdir } from "node:os";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
-
import { afterEach, describe, expect, it } from "vitest";
|
|
5
|
-
|
|
6
4
|
import {
|
|
7
5
|
findPluginBundledCandidates,
|
|
8
6
|
matchRule,
|
|
9
7
|
parseRule,
|
|
10
|
-
scanRuleFiles,
|
|
11
8
|
SOURCE_PRIORITY,
|
|
9
|
+
scanRuleFiles,
|
|
12
10
|
} from "@oh-my-opencode/rules-engine/engine";
|
|
11
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
13
12
|
|
|
14
13
|
const tempDirectories: string[] = [];
|
|
15
14
|
|
|
@@ -37,9 +36,7 @@ describe("rules-engine package consumption", () => {
|
|
|
37
36
|
|
|
38
37
|
// then
|
|
39
38
|
expect(SOURCE_PRIORITY.get("plugin-bundled")).toBe(200);
|
|
40
|
-
expect(nonWindowsCandidates.map((candidate) => candidate.relativePath)).toEqual([
|
|
41
|
-
"bundled-rules/hephaestus.md",
|
|
42
|
-
]);
|
|
39
|
+
expect(nonWindowsCandidates.map((candidate) => candidate.relativePath)).toEqual(["bundled-rules/hephaestus.md"]);
|
|
43
40
|
expect(windowsCandidates.map((candidate) => candidate.relativePath)).toEqual([
|
|
44
41
|
"bundled-rules/hephaestus.md",
|
|
45
42
|
"bundled-rules/windows-git-bash.md",
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { tmpdir } from "node:os";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
-
import { afterEach, describe, expect, it } from "vitest";
|
|
5
|
-
|
|
6
4
|
import { scanRuleFiles } from "@oh-my-opencode/rules-engine/engine";
|
|
5
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
7
6
|
|
|
8
7
|
const tempDirectories: string[] = [];
|
|
9
8
|
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
|
|
3
|
-
import { SOURCE_PRIORITY } from "@oh-my-opencode/rules-engine/engine";
|
|
4
|
-
import { defaultConfig } from "@oh-my-opencode/rules-engine/engine";
|
|
5
|
-
import { disabledSourcesFromConfig } from "@oh-my-opencode/rules-engine/engine";
|
|
6
1
|
import type { PiRulesConfig } from "@oh-my-opencode/rules-engine/engine";
|
|
2
|
+
import { defaultConfig, disabledSourcesFromConfig, SOURCE_PRIORITY } from "@oh-my-opencode/rules-engine/engine";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
7
4
|
|
|
8
5
|
describe("rules source selection", () => {
|
|
9
6
|
it("#given default config #when disabled sources are derived #then opt-out sources stay disabled", () => {
|
package/packages/omo-codex/plugin/components/rules/test/windows-git-bash-bundled-rule.test.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { tmpdir } from "node:os";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
+
import { findPluginBundledCandidates } from "@oh-my-opencode/rules-engine/engine";
|
|
4
5
|
import { afterEach, describe, expect, it } from "vitest";
|
|
5
|
-
|
|
6
6
|
import { type CodexSessionStartInput, runSessionStartHook } from "../src/codex-hook.js";
|
|
7
|
-
import { findPluginBundledCandidates } from "@oh-my-opencode/rules-engine/engine";
|
|
8
7
|
|
|
9
8
|
const WINDOWS_RULE_DESCRIPTION = "Windows Git Bash guidance for Codex";
|
|
10
9
|
const WINDOWS_RULE_PATH = "bundled-rules/windows-git-bash.md";
|
|
@@ -71,25 +70,11 @@ describe("Windows Git Bash bundled rule content", () => {
|
|
|
71
70
|
expect(body).toContain("alwaysApply: true");
|
|
72
71
|
});
|
|
73
72
|
|
|
74
|
-
it(
|
|
75
|
-
const body = readWindowsRuleBody();
|
|
76
|
-
|
|
77
|
-
expect(body).not.toContain('shell: "bash"');
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
it("#given the bundled rule #when read #then it warns that bare bash often resolves to WSL System32", () => {
|
|
81
|
-
const body = readWindowsRuleBody();
|
|
82
|
-
|
|
83
|
-
expect(body).toMatch(/WSL/i);
|
|
84
|
-
expect(body).toMatch(/System32/i);
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it("#given the bundled rule #when read #then it prefers the git_bash MCP and the absolute Git Bash path", () => {
|
|
73
|
+
it("#given the bundled rule #when read #then it names the Git Bash runtime identifiers", () => {
|
|
88
74
|
const body = readWindowsRuleBody();
|
|
89
75
|
|
|
90
76
|
expect(body).toContain("git_bash");
|
|
91
77
|
expect(body).toContain("OMO_CODEX_GIT_BASH_PATH");
|
|
92
|
-
expect(body).toContain("C:\\Program Files\\Git\\bin\\bash.exe");
|
|
93
78
|
});
|
|
94
79
|
});
|
|
95
80
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
|
|
10
10
|
"timeout": 10,
|
|
11
|
-
"statusMessage": "(OmO 5.0.0-beta.
|
|
11
|
+
"statusMessage": "(OmO 5.0.0-beta.21) Checking Thread Title Hygiene"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sisyphuslabs/codex-teammode",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.21",
|
|
4
4
|
"description": "Codex team-mode hook component that keeps background thread titles descriptive after create_thread.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": true,
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
"typecheck": "tsc --noEmit"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
|
-
"@types/node": "^
|
|
19
|
-
"bun-types": "^1.
|
|
20
|
-
"typescript": "^
|
|
21
|
-
"vitest": "^4.1.
|
|
18
|
+
"@types/node": "^26.2.0",
|
|
19
|
+
"bun-types": "^1.4.0",
|
|
20
|
+
"typescript": "^7.0.2",
|
|
21
|
+
"vitest": "^4.1.11"
|
|
22
22
|
},
|
|
23
23
|
"engines": {
|
|
24
24
|
"node": ">=20.0.0"
|
|
@@ -29,9 +29,7 @@ describe("thread title PostToolUse guidance", () => {
|
|
|
29
29
|
expect(isHookOutput(parsed)).toBe(true);
|
|
30
30
|
if (!isHookOutput(parsed)) return;
|
|
31
31
|
expect(parsed.hookSpecificOutput.hookEventName).toBe("PostToolUse");
|
|
32
|
-
expect(parsed.hookSpecificOutput.additionalContext).
|
|
33
|
-
"THREAD ID thread-123: CALL codex_app.set_thread_title NOW. USE THE REAL TASK/ROLE.",
|
|
34
|
-
);
|
|
32
|
+
expect(parsed.hookSpecificOutput.additionalContext).toContain("thread-123");
|
|
35
33
|
});
|
|
36
34
|
|
|
37
35
|
it("#given Codex reports create_thread output as a JSON string #when the hook runs #then it still extracts the thread id", () => {
|
|
@@ -59,9 +57,7 @@ describe("thread title PostToolUse guidance", () => {
|
|
|
59
57
|
// then
|
|
60
58
|
expect(isHookOutput(parsed)).toBe(true);
|
|
61
59
|
if (!isHookOutput(parsed)) return;
|
|
62
|
-
expect(parsed.hookSpecificOutput.additionalContext).
|
|
63
|
-
"THREAD ID 019ef350-ee78-72a3-bd5e-e40cebc3d814: CALL codex_app.set_thread_title NOW. USE THE REAL TASK/ROLE.",
|
|
64
|
-
);
|
|
60
|
+
expect(parsed.hookSpecificOutput.additionalContext).toContain("019ef350-ee78-72a3-bd5e-e40cebc3d814");
|
|
65
61
|
});
|
|
66
62
|
|
|
67
63
|
it("#given an unrelated tool completed #when the hook runs #then it stays silent", () => {
|
|
@@ -141,9 +137,7 @@ describe("thread title PostToolUse guidance", () => {
|
|
|
141
137
|
// then
|
|
142
138
|
expect(isHookOutput(parsed)).toBe(true);
|
|
143
139
|
if (!isHookOutput(parsed)) return;
|
|
144
|
-
expect(parsed.hookSpecificOutput.additionalContext).
|
|
145
|
-
"PENDING WORKTREE ID remote-control:env:test-worktree: WORKTREE THREAD IS NOT READY YET. DO NOT bind-thread OR SEND THE MEMBER BOOTSTRAP UNTIL A REAL THREAD ID EXISTS. THEN CALL codex_app.set_thread_title USING THE REAL TASK/ROLE.",
|
|
146
|
-
);
|
|
140
|
+
expect(parsed.hookSpecificOutput.additionalContext).toContain("remote-control:env:test-worktree");
|
|
147
141
|
});
|
|
148
142
|
});
|
|
149
143
|
|
|
@@ -10,6 +10,14 @@ Conventions for human contributors and AI agents working on this component.
|
|
|
10
10
|
- Tabs for indentation. Double quotes for strings.
|
|
11
11
|
- Tests use vitest with `#given .. #when .. #then` descriptions or plain `// given / // when / // then` body comments.
|
|
12
12
|
|
|
13
|
+
## Layout
|
|
14
|
+
|
|
15
|
+
- `src/cli.ts`: SessionStart hook CLI (stdin JSON in, empty stdout out).
|
|
16
|
+
- `src/codex-hook.ts`: `runSessionStartHook` — the single hook handler.
|
|
17
|
+
- `src/posthog.ts`: client construction/capture/shutdown; `DEFAULT_POSTHOG_API_KEY`, `DEFAULT_POSTHOG_HOST`, `getComponentVersion`.
|
|
18
|
+
- `src/product-identity.ts`: the constants that must stay byte-equivalent with `packages/omo-codex/src/telemetry/product-identity.ts`.
|
|
19
|
+
- `hooks/hooks.json`: component-local wiring (twin of the aggregate hook JSON).
|
|
20
|
+
|
|
13
21
|
## Commands
|
|
14
22
|
|
|
15
23
|
- `npm install` - install dependencies.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "https://biomejs.dev/schemas/2.
|
|
2
|
+
"$schema": "https://biomejs.dev/schemas/2.5.9/schema.json",
|
|
3
3
|
"linter": {
|
|
4
4
|
"enabled": true,
|
|
5
5
|
"rules": {
|
|
6
|
-
"
|
|
6
|
+
"preset": "recommended",
|
|
7
7
|
"style": {
|
|
8
8
|
"noDefaultExport": "error",
|
|
9
9
|
"noEnum": "error",
|