oh-my-opencode 5.0.0-beta.3 → 5.0.0-beta.31
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/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 +22601 -20302
- 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 +22219 -19897
- package/dist/config/schema/background-task.d.ts +1 -0
- 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 +5 -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/background-agent/constants.d.ts +0 -7
- package/dist/features/background-agent/manager.d.ts +2 -1
- package/dist/features/background-agent/parent-wake-dispatched-tracker.d.ts +0 -1
- package/dist/features/background-agent/subagent-spawn-limits.d.ts +8 -0
- 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/features/task-toast-manager/manager.d.ts +0 -24
- package/dist/features/team-mode/tools/messaging-fallback-wake.d.ts +15 -0
- package/dist/hooks/anthropic-context-window-limit-recovery/message-storage-directory.d.ts +0 -3
- package/dist/hooks/anthropic-context-window-limit-recovery/state.d.ts +1 -0
- package/dist/hooks/anthropic-context-window-limit-recovery/storage/empty-messages.d.ts +0 -1
- 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/claude-code-hooks/session-hook-state.d.ts +1 -0
- package/dist/hooks/claude-code-hooks/stop.d.ts +2 -0
- package/dist/hooks/claude-code-hooks/todo.d.ts +0 -1
- package/dist/hooks/claude-code-hooks/transcript.d.ts +2 -0
- package/dist/hooks/fsync-skip-warning/index.d.ts +4 -0
- package/dist/hooks/hashline-edit-diff-enhancer/hook.d.ts +1 -0
- package/dist/hooks/hashline-edit-diff-enhancer/pending-captures.d.ts +13 -0
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/keyword-detector/hook.d.ts +7 -0
- package/dist/hooks/keyword-detector/ultrawork/source-detector.d.ts +0 -1
- package/dist/hooks/model-fallback/hook.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/todo-continuation-enforcer/types.d.ts +1 -0
- 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 +12989 -7152
- package/dist/oh-my-opencode.schema.json +20 -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/plugin-dispose.d.ts +3 -0
- package/dist/shared/agent-tool-restrictions.d.ts +0 -1
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/legacy-plugin-warning.d.ts +2 -1
- package/dist/shared/normalize-sdk-response.d.ts +1 -0
- package/dist/shared/plugin-entry-migrator.d.ts +4 -3
- package/dist/shared/plugin-entry-shape.d.ts +6 -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/data-scientist/SKILL.md +99 -239
- package/dist/skills/data-scientist/references/execution-surfaces.md +91 -0
- package/dist/skills/data-scientist/references/placement.md +74 -0
- package/dist/skills/data-scientist/references/polars-lane.md +95 -0
- package/dist/skills/data-scientist/references/uv-setup.md +1 -1
- package/dist/skills/data-scientist/references/visualization.md +64 -0
- package/dist/skills/data-scientist/scripts/ensure-js-deps.sh +28 -0
- package/dist/skills/data-scientist/scripts/ensure-py-deps.sh +37 -0
- package/dist/skills/debugging/SKILL.md +2 -0
- package/dist/skills/debugging/references/methodology/00-setup.md +12 -0
- package/dist/skills/debugging/references/methodology/02-investigate.md +21 -0
- package/dist/skills/debugging/references/runtimes/go.md +15 -1
- package/dist/skills/debugging/references/runtimes/native-binary.md +38 -0
- package/dist/skills/debugging/references/runtimes/node.md +25 -0
- package/dist/skills/debugging/references/runtimes/python.md +13 -0
- package/dist/skills/debugging/references/runtimes/rust.md +41 -0
- package/dist/skills/debugging/references/scripts/dap.mjs +267 -0
- package/dist/skills/debugging/references/scripts/dap.test.ts +86 -0
- package/dist/skills/debugging/references/scripts/fixture-adapter.mjs +59 -0
- package/dist/skills/debugging/references/tools/dap.md +103 -0
- package/dist/skills/debugging/references/tools/frida.md +193 -0
- 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 +4 -2
- 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/sync-session-cleanup.d.ts +3 -0
- package/dist/tools/delegate-task/sync-session-poller.d.ts +1 -0
- package/dist/tools/delegate-task/tool-description.d.ts +3 -1
- package/dist/tools/delegate-task/types.d.ts +4 -0
- package/dist/tui.d.ts +12 -0
- package/dist/tui.js +11522 -11501
- package/package.json +42 -36
- package/packages/git-bash-mcp/dist/cli.js +6 -1
- package/packages/git-bash-mcp/package.json +1 -1
- package/packages/lsp-core/src/index.ts +1 -0
- 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 +163 -13
- package/packages/lsp-core/src/lsp/client-wrapper.ts +110 -23
- package/packages/lsp-core/src/lsp/client.ts +26 -0
- package/packages/lsp-core/src/lsp/connection.ts +16 -0
- package/packages/lsp-core/src/lsp/constants.ts +6 -0
- package/packages/lsp-core/src/lsp/errors.ts +15 -0
- package/packages/lsp-core/src/lsp/format-document.test.ts +143 -0
- package/packages/lsp-core/src/lsp/format-document.ts +90 -0
- package/packages/lsp-core/src/lsp/manager-lifecycle.test.ts +262 -0
- package/packages/lsp-core/src/lsp/manager-max-clients.test.ts +151 -0
- package/packages/lsp-core/src/lsp/manager.ts +138 -12
- package/packages/lsp-core/src/lsp/outside-context-workspace.ts +33 -0
- package/packages/lsp-core/src/lsp/server-definitions.ts +29 -0
- package/packages/lsp-core/src/lsp/server-installation.test.ts +376 -0
- package/packages/lsp-core/src/lsp/server-installation.ts +200 -27
- package/packages/lsp-core/src/lsp/server-resolution-local-binary.test.ts +170 -0
- package/packages/lsp-core/src/lsp/server-resolution.ts +18 -5
- package/packages/lsp-core/src/lsp/transport.ts +9 -0
- package/packages/lsp-core/src/lsp/types.ts +8 -0
- package/packages/lsp-core/src/lsp/workspace-edit-adversarial.test.ts +20 -1
- package/packages/lsp-core/src/lsp/workspace-markers.ts +18 -0
- package/packages/lsp-core/src/mcp.ts +3 -0
- package/packages/lsp-core/src/request-context.test.ts +29 -0
- package/packages/lsp-core/src/request-context.ts +1 -1
- package/packages/lsp-core/src/tool-surface.test.ts +13 -1
- package/packages/lsp-core/src/tools/definitions.ts +14 -0
- package/packages/lsp-core/src/tools/diagnostics.ts +3 -3
- package/packages/lsp-core/src/tools/format.test.ts +56 -0
- package/packages/lsp-core/src/tools/format.ts +56 -0
- package/packages/lsp-core/src/tools/index.ts +1 -0
- 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-core/src/tools/types.ts +10 -0
- package/packages/lsp-daemon/dist/cli.js +752 -307
- package/packages/lsp-daemon/dist/client.d.ts +10 -0
- package/packages/lsp-daemon/dist/client.js +712 -264
- 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 +716 -273
- 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 +671 -228
- package/packages/lsp-tools-mcp/dist/lsp/manager.js +207 -103
- package/packages/lsp-tools-mcp/dist/mcp.js +673 -230
- package/packages/lsp-tools-mcp/dist/request-context.js +12 -13
- package/packages/lsp-tools-mcp/dist/tools.js +677 -238
- 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 +34 -33
- 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 +323 -117
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +275 -85
- 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/mcp-unavailable.ts +12 -0
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +1 -0
- package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable-idle.test.ts +47 -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 +702 -278
- 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 +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 +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 +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 +17 -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/checkpoint.js +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-commands.js +5 -1
- 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 +11 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +124 -68
- 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 +9 -6
- 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/quality-gate.d.ts +4 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +7 -10
- package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +3 -2
- 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 +15 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/surface.js +50 -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 +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +5 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +13 -1
- 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 +16 -5
- 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/quality-gate.ts +11 -14
- package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +3 -2
- 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 +73 -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 +44 -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/cli-entrypoint.test.ts +26 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +27 -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/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-roles.test.ts +45 -2
- package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +20 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +8 -5
- package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/surface.test.ts +74 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/ultrawork-directive.test.ts +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/model-catalog.json +3 -3
- 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/migrate-codex-config/catalog.mjs +3 -3
- 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/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/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 +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 +8 -28
- package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +1 -1
- 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 -2
- 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/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 +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-config-reasoning.test.mjs +2 -2
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +2637 -549
- 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/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/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 +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/dist/config/schema/start-work.d.ts +0 -5
- package/dist/features/builtin-commands/templates/start-work.d.ts +0 -1
- package/dist/hooks/ralph-loop/completion-promise-detector-test-input.d.ts +0 -11
- package/dist/hooks/ralph-loop/loop-session-recovery.d.ts +0 -7
- 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/skills/data-scientist/references/common-scenarios.md +0 -176
- package/dist/skills/data-scientist/references/execution-templates.md +0 -197
- package/dist/skills/data-scientist/references/integration-patterns.md +0 -153
- package/dist/skills/data-scientist/references/performance-benchmarks.md +0 -37
- package/dist/tools/call-omo-agent/background-agent-executor.d.ts +0 -5
- package/dist/tools/call-omo-agent/message-storage-directory.d.ts +0 -1
- package/dist/tools/delegate-task/model-string-parser.d.ts +0 -1
- 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/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/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/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/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,153 +0,0 @@
|
|
|
1
|
-
# Integration Patterns: DuckDB ↔ Polars
|
|
2
|
-
|
|
3
|
-
## Zero-Copy Conversions (FASTEST)
|
|
4
|
-
|
|
5
|
-
### DuckDB → Polars (Recommended)
|
|
6
|
-
|
|
7
|
-
```python
|
|
8
|
-
import duckdb
|
|
9
|
-
import polars as pl
|
|
10
|
-
|
|
11
|
-
# Direct conversion with .pl() - zero-copy via Arrow
|
|
12
|
-
df_polars = duckdb.sql("""
|
|
13
|
-
SELECT * FROM 'data.parquet'
|
|
14
|
-
WHERE amount > 100
|
|
15
|
-
""").pl() # Returns Polars DataFrame directly
|
|
16
|
-
|
|
17
|
-
# Lazy version for large datasets
|
|
18
|
-
lazy_df = duckdb.sql("SELECT * FROM 'data.parquet'").pl(lazy=True)
|
|
19
|
-
result = lazy_df.filter(pl.col('status') == 'active').collect()
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
### Polars → DuckDB (Direct Reference)
|
|
23
|
-
|
|
24
|
-
```python
|
|
25
|
-
import duckdb
|
|
26
|
-
import polars as pl
|
|
27
|
-
|
|
28
|
-
# DuckDB can query Polars DataFrames directly by name
|
|
29
|
-
df = pl.read_parquet('data.parquet')
|
|
30
|
-
|
|
31
|
-
result = duckdb.sql("""
|
|
32
|
-
SELECT category, SUM(amount) as total
|
|
33
|
-
FROM df
|
|
34
|
-
GROUP BY category
|
|
35
|
-
ORDER BY total DESC
|
|
36
|
-
""").pl() # Query df directly, return as Polars
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### Via Arrow (When Needed)
|
|
40
|
-
|
|
41
|
-
```python
|
|
42
|
-
# Polars → Arrow → DuckDB
|
|
43
|
-
df_polars = pl.read_csv('data.csv')
|
|
44
|
-
duckdb.register('my_table', df_polars.to_arrow())
|
|
45
|
-
|
|
46
|
-
# DuckDB → Arrow → Polars
|
|
47
|
-
arrow_table = duckdb.sql("SELECT * FROM data").arrow()
|
|
48
|
-
df_polars = pl.from_arrow(arrow_table)
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
## WRONG vs RIGHT Patterns
|
|
52
|
-
|
|
53
|
-
### ❌ NEVER - Using Pandas
|
|
54
|
-
|
|
55
|
-
```python
|
|
56
|
-
# FORBIDDEN - decisively slower than Polars/DuckDB on every operation!
|
|
57
|
-
import pandas as pd
|
|
58
|
-
df = pd.read_csv('data.csv')
|
|
59
|
-
result = df.groupby('category')['amount'].sum()
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### ✅ CORRECT - DuckDB for simple aggregation query
|
|
63
|
-
|
|
64
|
-
```python
|
|
65
|
-
import duckdb
|
|
66
|
-
# Direct file query - no memory loading!
|
|
67
|
-
result = duckdb.sql("""
|
|
68
|
-
SELECT category, SUM(amount) as total
|
|
69
|
-
FROM 'data.csv'
|
|
70
|
-
GROUP BY category
|
|
71
|
-
""").pl() # Fast, memory-efficient
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
### ❌ NEVER - Loading file before DuckDB query
|
|
75
|
-
|
|
76
|
-
```python
|
|
77
|
-
# WRONG - Unnecessary memory usage
|
|
78
|
-
import polars as pl
|
|
79
|
-
import duckdb
|
|
80
|
-
df = pl.read_csv('data.csv') # Loads entire file
|
|
81
|
-
result = duckdb.sql("SELECT * FROM df WHERE amount > 100").pl()
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### ✅ CORRECT - Let DuckDB query directly
|
|
85
|
-
|
|
86
|
-
```python
|
|
87
|
-
import duckdb
|
|
88
|
-
# DuckDB queries file directly - much faster!
|
|
89
|
-
result = duckdb.sql("""
|
|
90
|
-
SELECT * FROM 'data.csv'
|
|
91
|
-
WHERE amount > 100
|
|
92
|
-
""").pl()
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
### ❌ NEVER - Eager evaluation in Polars
|
|
96
|
-
|
|
97
|
-
```python
|
|
98
|
-
# WRONG - Loads everything immediately
|
|
99
|
-
import polars as pl
|
|
100
|
-
df = pl.read_csv('large_data.csv') # Eager load
|
|
101
|
-
filtered = df.filter(pl.col('value') > 100)
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
### ✅ CORRECT - Lazy evaluation
|
|
105
|
-
|
|
106
|
-
```python
|
|
107
|
-
import polars as pl
|
|
108
|
-
# Lazy - builds query plan, optimizes, executes once
|
|
109
|
-
df = pl.scan_csv('large_data.csv') # Lazy
|
|
110
|
-
result = (
|
|
111
|
-
df
|
|
112
|
-
.filter(pl.col('value') > 100)
|
|
113
|
-
.groupby('category')
|
|
114
|
-
.agg(pl.sum('value'))
|
|
115
|
-
.collect() # Execute optimized plan
|
|
116
|
-
)
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### ❌ NEVER - Unnecessary Conversions
|
|
120
|
-
|
|
121
|
-
```python
|
|
122
|
-
# WASTEFUL (DuckDB → Pandas → Polars)
|
|
123
|
-
import duckdb, pandas as pd, polars as pl
|
|
124
|
-
df_pd = duckdb.sql("SELECT * FROM 'data.csv'").df() # requires pandas - the skill never ships it
|
|
125
|
-
df_pl = pl.from_pandas(df_pd)
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### ✅ CORRECT - Direct conversion
|
|
129
|
-
|
|
130
|
-
```python
|
|
131
|
-
# DIRECT (DuckDB → Polars via Arrow)
|
|
132
|
-
import duckdb
|
|
133
|
-
df_pl = duckdb.sql("SELECT * FROM 'data.csv'").pl()
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### ❌ NEVER - Wrong tool for heavy filtering
|
|
137
|
-
|
|
138
|
-
```python
|
|
139
|
-
# SLOW (DuckDB not optimal for filtering)
|
|
140
|
-
import duckdb
|
|
141
|
-
result = duckdb.sql("""
|
|
142
|
-
SELECT * FROM 'huge.csv'
|
|
143
|
-
WHERE complex_filter = true
|
|
144
|
-
""").pl()
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
### ✅ CORRECT - Use Polars for filtering
|
|
148
|
-
|
|
149
|
-
```python
|
|
150
|
-
# FAST (Polars 128x faster for filtering)
|
|
151
|
-
import polars as pl
|
|
152
|
-
result = pl.scan_csv('huge.csv').filter(pl.col('complex_filter')).collect()
|
|
153
|
-
```
|
package/packages/omo-codex/plugin/skills/data-scientist/references/performance-benchmarks.md
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# Performance Benchmarks
|
|
2
|
-
|
|
3
|
-
Routing heuristics distilled from public 2024-2025 results in the [db-benchmark suite](https://github.com/h2oai/db-benchmark) (rendered at [h2oai.github.io/db-benchmark](https://h2oai.github.io/db-benchmark/)) and from the vendors' own documentation ([duckdb.org](https://duckdb.org/), [pola.rs](https://pola.rs/)).
|
|
4
|
-
|
|
5
|
-
**Read these as routing guidance, not guarantees.** Multipliers vary with dataset size, cardinality, data types, and hardware. When the choice materially matters, measure on the actual data.
|
|
6
|
-
|
|
7
|
-
## Operation Performance Comparison
|
|
8
|
-
|
|
9
|
-
| Operation Type | Winner | Indicative advantage | When to Use |
|
|
10
|
-
|---------------------|-------------|----------------------|------------------------------------------------|
|
|
11
|
-
| **Filtering** | **Polars** | often the fastest by a wide margin (SIMD, predicate pushdown) | Single-table filters |
|
|
12
|
-
| **Sorting** | **Polars** | typically the fastest | ORDER BY operations, ranking |
|
|
13
|
-
| **Joins** | **DuckDB** | typically faster; richer join types | Multi-table joins, especially complex joins |
|
|
14
|
-
| **Aggregations** | **DuckDB** | typically faster on large datasets | GROUP BY, complex aggregations |
|
|
15
|
-
| **Window Funcs** | **Polars** | typically faster | RANK, LAG/LEAD, running totals |
|
|
16
|
-
| **Transformations** | **Polars** | typically faster | Pivot, melt, string operations |
|
|
17
|
-
| **Direct Query** | **DuckDB** | avoids loading to memory entirely | Ad-hoc exploration without loading to memory |
|
|
18
|
-
| **Streaming** | **Polars** | handles datasets larger than RAM | Datasets larger than RAM |
|
|
19
|
-
|
|
20
|
-
Both tools are decisively faster than pandas on 1M+ row workloads, which is why pandas is banned outright in this skill.
|
|
21
|
-
|
|
22
|
-
## Operation Detection Keywords
|
|
23
|
-
|
|
24
|
-
Automatically detect operation types from user requests:
|
|
25
|
-
|
|
26
|
-
- **Filter**: "where", "filter", "condition", "select rows", "find"
|
|
27
|
-
- **Sort**: "sort", "order", "top", "bottom", "rank"
|
|
28
|
-
- **Join**: "join", "merge", "combine tables"
|
|
29
|
-
- **Aggregate**: "group", "sum", "avg", "count", "mean", "total", "aggregate"
|
|
30
|
-
- **Transform**: "pivot", "melt", "reshape", "string operations", "clean", "transform"
|
|
31
|
-
- **Window**: "running", "cumulative", "lag", "lead", "rank", "partition"
|
|
32
|
-
|
|
33
|
-
## Benchmarking Notes
|
|
34
|
-
|
|
35
|
-
- Public suites exercise typical analytical workloads (1M-100M rows).
|
|
36
|
-
- Performance advantages are approximate and vary by dataset characteristics.
|
|
37
|
-
- Real-world performance depends on data types, cardinality, and hardware.
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import assert from "node:assert/strict";
|
|
2
|
-
import { readdir, readFile, stat } from "node:fs/promises";
|
|
3
|
-
import { basename, dirname, join } from "node:path";
|
|
4
|
-
import test from "node:test";
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
findInvalidSpawnAgentRoleParameters,
|
|
8
|
-
findSpawnAgentCallsWithoutForkContextFalse,
|
|
9
|
-
root,
|
|
10
|
-
} from "./aggregate-plugin-fixture.mjs";
|
|
11
|
-
import { listSkillFiles } from "./sync-skills-test-support.mjs";
|
|
12
|
-
|
|
13
|
-
test("#given synced skills with Codex compatibility guidance #when spawn_agent is documented #then invalid role parameters are absent", async () => {
|
|
14
|
-
const skillsDir = join(root, "skills");
|
|
15
|
-
const skillEntries = await readdir(skillsDir, { withFileTypes: true });
|
|
16
|
-
const skillFiles = skillEntries
|
|
17
|
-
.filter((entry) => entry.isDirectory())
|
|
18
|
-
.map((entry) => join(skillsDir, entry.name, "SKILL.md"));
|
|
19
|
-
|
|
20
|
-
const invalidCalls = [];
|
|
21
|
-
for (const skillPath of skillFiles) {
|
|
22
|
-
const content = await readFile(skillPath, "utf8");
|
|
23
|
-
for (const call of findInvalidSpawnAgentRoleParameters(content)) {
|
|
24
|
-
invalidCalls.push(`${basename(dirname(skillPath))}/${basename(skillPath)}: ${call}`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
assert.deepEqual(invalidCalls, []);
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
test('#given synced skills and bundled rules #when role-specific agents are spawned #then they set fork_context=false', async () => {
|
|
32
|
-
const skillsDir = join(root, "skills");
|
|
33
|
-
const skillEntries = await readdir(skillsDir, { withFileTypes: true });
|
|
34
|
-
const promptFiles = skillEntries
|
|
35
|
-
.filter((entry) => entry.isDirectory())
|
|
36
|
-
.map((entry) => join(skillsDir, entry.name, "SKILL.md"));
|
|
37
|
-
promptFiles.push(join(root, "components", "rules", "bundled-rules", "hephaestus", "gpt-5.5.md"));
|
|
38
|
-
promptFiles.push(join(root, "components", "rules", "bundled-rules", "hephaestus", "gpt-5.6.md"));
|
|
39
|
-
|
|
40
|
-
const missingForkContext = [];
|
|
41
|
-
for (const promptPath of promptFiles) {
|
|
42
|
-
const content = await readFile(promptPath, "utf8");
|
|
43
|
-
for (const call of findSpawnAgentCallsWithoutForkContextFalse(content)) {
|
|
44
|
-
missingForkContext.push(`${basename(dirname(promptPath))}/${basename(promptPath)}: ${call}`);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
assert.deepEqual(missingForkContext, []);
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
test("#given long-running orchestration prompts #when waiting on child agents #then parent liveness is surfaced", async () => {
|
|
52
|
-
const promptFiles = [
|
|
53
|
-
join(root, "skills", "ulw-loop", "SKILL.md"),
|
|
54
|
-
join(root, "skills", "ulw-loop", "references", "full-workflow.md"),
|
|
55
|
-
join(root, "skills", "review-work", "SKILL.md"),
|
|
56
|
-
join(root, "skills", "start-work", "SKILL.md"),
|
|
57
|
-
join(root, "components", "rules", "bundled-rules", "hephaestus", "gpt-5.5.md"),
|
|
58
|
-
join(root, "components", "rules", "bundled-rules", "hephaestus", "gpt-5.6.md"),
|
|
59
|
-
];
|
|
60
|
-
|
|
61
|
-
const missingLivenessGuidance = [];
|
|
62
|
-
for (const promptPath of promptFiles) {
|
|
63
|
-
const content = await readFile(promptPath, "utf8");
|
|
64
|
-
if (!/active\s+subagent count/.test(content) || !/latest `WORKING:` phase/.test(content)) {
|
|
65
|
-
missingLivenessGuidance.push(`${basename(dirname(promptPath))}/${basename(promptPath)}`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
assert.deepEqual(missingLivenessGuidance, []);
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
test("#given packaged Codex prompt surfaces #when inspected #then removed sparkshell guidance is absent", async () => {
|
|
73
|
-
const promptRoots = [
|
|
74
|
-
join(root, "skills"),
|
|
75
|
-
join(root, "components", "rules", "bundled-rules"),
|
|
76
|
-
join(root, "components", "ultrawork", "agents"),
|
|
77
|
-
join(root, "components", "ulw-loop", "skills"),
|
|
78
|
-
];
|
|
79
|
-
const promptFilePattern = /\.(?:json|md|toml|ya?ml)$/i;
|
|
80
|
-
const removedSparkshellPattern = /\b(?:sparkshell|spark[-_\s]+shell)\b/i;
|
|
81
|
-
const matches = [];
|
|
82
|
-
|
|
83
|
-
for (const promptRoot of promptRoots) {
|
|
84
|
-
for (const relativePath of await listSkillFiles(promptRoot)) {
|
|
85
|
-
if (!promptFilePattern.test(relativePath)) continue;
|
|
86
|
-
const content = await readFile(join(promptRoot, relativePath), "utf8");
|
|
87
|
-
if (removedSparkshellPattern.test(content)) matches.push(`${promptRoot}/${relativePath}`);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
assert.deepEqual(matches, []);
|
|
92
|
-
});
|
|
@@ -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
|
-
});
|